Làm cách nào để sửa AHK để gửi khóa tới toàn màn hình RDP?


Câu trả lời:


3

Theo ghi chú của người dùng16659, Reload làm cho các phím nóng hoạt động trở lại (Nhưng kịch bản của anh ấy không hoạt động với tôi).

Về cơ bản, bây giờ tôi có hai tập lệnh đang chạy, một tập lệnh chứa các phím nóng và hotstrings của tôi "script.ahk" và một cái khác sẽ tải lại tập lệnh này nếu RDP được tối đa hóa "controller.ahk".

kịch bản.ahk:

#SingleInstance force
::hw::Hello World

bộ điều khiển.ahk:

Run "autohotkey" "script.ahk"

#Persistent
SetTimer, ReloadOnRDPMaximized, 500
return

ReloadOnRDPMaximized:
If WinActive("ahk_class TscShellContainerClass")
{
    WinGet, maxOrMin, MinMax, ahk_class TscShellContainerClass

    if (maxOrMin = 0) {
        WinGetPos, PosX, PosY, WinWidth, WinHeight, ahk_class TscShellContainerClass

        if (PosY = 0) {
            ; it is fully maximized therefore reload "script.ahk"
            Run "autohotkey" "script.ahk"

            ; wait until window gets deactivated so you don't reload it again.
            WinWaitNotActive, ahk_class TscShellContainerClass

        }
    }
}
return

2
Tuy nhiên, tôi đã nhận thấy rằng ngay cả giải pháp của tôi cũng không hoạt động vì trong RDP, nó không gửi phím shift cho các chuỗi nóng, ví dụ: nếu bạn gửi * sau đó nó sẽ gửi 8... :(
Tahir Hassan

Tôi đã phải làm một cái gì đó như SendInput, {shift}8{shift up} để gửi * trong RDP, nhưng nó sẽ gửi 8 trong Windows. SendInput, {shift down}8{shift up} làm việc theo cách khác.
user16659

1
Kể từ khi trả lời câu hỏi trên của bạn, tôi đã quyết định chạy tập lệnh AHK của mình trên máy chủ từ xa (nó đáng tin cậy hơn rất nhiều). Tôi đã thay đổi control.ahk để đóng script.ahk để nó không can thiệp vào tập lệnh của máy chủ. Tôi đã dán giải pháp của mình trên blog của mình: tahirhassan.blogspot.co.uk/2012/11/autohotkey-scripts_19.html
Tahir Hassan

10

Bạn cũng cần đặt "Áp dụng tổ hợp phím windows" trên tab "Tài nguyên cục bộ" của kết nối máy tính từ xa 'mstsc.exe' thành "TRÊN MÁY TÍNH NÀY" MSTSC WINDOWS KEY COMBINATIONS


1

Để AHK hoạt động với máy khách Terminal Server của Microsoft ở chế độ toàn màn hình, AHK phải tải lại sau khi cửa sổ Remote Desktop được kích hoạt.

SetTimer, waitforrdp, -250
return

:*:ppp::password
:*:ccc::
SendInput, {shift}C{shift up}
SendInput, apitalized
return

waitforrdp:
IfWinActive, ahk_class TscShellContainerClass
{
    WinWaitNotActive, ahk_class TscShellContainerClass,,3600
}
WinWaitActive, ahk_class TscShellContainerClass,,3600
Reload
return

0

Không thể thêm nhận xét vào câu trả lời hàng đầu, nhưng tôi đã sửa đổi tập lệnh được đề xuất mà Tahir liên kết với blog của mình trong câu trả lời hàng đầu để làm cho nó sạch hơn và dễ sử dụng hơn.

Các hoạt động sau đây bằng cách tạm dừng tập lệnh cục bộ khi RDP toàn màn hình đang hoạt động thay vì cố gắng giết và khởi động lại phiên bản tập lệnh riêng biệt mỗi khi di chuyển tiêu điểm. Cái này nhẹ hơn và cũng tránh việc xả rác vào khay thông báo với rất nhiều biểu tượng AHK zombie cho các tập lệnh bị giết. Điều này cũng có nghĩa là bạn chỉ có thể thêm phần này vào tập lệnh hiện tại của mình thay vì phải chạy cả hai phần riêng biệt!

; this line should be put on top (auto-exec) section of ahk script
SetTimer, SuspendOnRDPMaximized, 500

; this actual code label and the fn can be put anywhere in the script file
SuspendOnRDPMaximized:
If WinActive("ahk_class TscShellContainerClass") {
    WinGet, maxOrMin, MinMax, ahk_class TscShellContainerClass
    if (maxOrMin = 0) {
        WinGetPos, PosX, PosY, WinWidth, WinHeight, ahk_class TscShellContainerClass
        if (PosY = 0) {  ; it is fully maximized
            Suspend, On
            WinWaitNotActive, ahk_class TscShellContainerClass
            Suspend, Off
        }
    }
}
return
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.