7

Как заставить горячие клавиши AutoHotKey работать с удаленным рабочим столом в полноэкранном режиме в Windows 7?

4 ответа4

11

Вам также необходимо установить "Применить сочетания клавиш Windows" на вкладке "Локальные ресурсы" подключения к удаленному рабочему столу «mstsc.exe» в "НА ЭТОМ КОМПЬЮТЕРЕ" MSTSC ОКНА КЛЮЧЕВЫЕ КОМБИНАЦИИ

3

Как отмечает user16659, Reload заставляет горячие клавиши работать снова (но у меня не работает его скрипт).

По сути, теперь у меня запущены два сценария, один из которых содержит мои горячие клавиши и горячие строки "script.ahk" а другой перезагружает этот сценарий, если RDP максимизируется до "controller.ahk" .

script.ahk:

#SingleInstance force
::hw::Hello World

controller.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
1

Чтобы AHK работал с клиентом Microsoft Terminal Server в полноэкранном режиме, AHK необходимо перезагрузить после активации окна удаленного рабочего стола.

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

Не могу добавить комментарий к верхнему ответу, но я изменил предложенный скрипт, который Тахир связал со своим блогом в верхнем ответе, чтобы сделать его чище и проще в использовании.

Следующее работает путем приостановки локального сценария, когда активен полноэкранный RDP, вместо того, чтобы пытаться уничтожить и перезапустить отдельную версию сценария при каждом перемещении фокуса. Это легче, а также позволяет избежать засорения панели уведомлений множеством значков зомби AHK для убитых сценариев. Это также означает, что вы можете просто добавить это к существующему сценарию вместо того, чтобы запускать их оба отдельно!

; 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .