Como consertar o AHK para enviar chaves para o RDP fullscreen?

6

Como você consegue que as teclas de atalho do AutoHotKey funcionem com a Área de Trabalho Remota em tela cheia no Windows 7?

    
por user16659 05.03.2012 / 22:42

4 respostas

3

Como observa user16659, Reload faz as teclas de atalho funcionarem novamente (mas o script dele não funcionou para mim).

Basicamente, agora tenho dois scripts em execução, um que contém minhas hotkeys e hotstrings "script.ahk" e outro que recarregará esse script se o RDP estiver maximizado "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
    
por 16.11.2012 / 16:19
10

Você também precisa definir "Aplicar combinações de teclas do Windows" na guia "Recursos locais" da conexão de área de trabalho remota 'mstsc.exe' para "NESTE COMPUTADOR"

    
por 05.03.2012 / 23:23
1

Para fazer o AHK funcionar com o cliente do Terminal Server da Microsoft em tela cheia, o AHK precisa recarregar após a ativação da janela da Área de Trabalho Remota.

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
    
por 05.03.2012 / 22:47
0

Não é possível adicionar comentários à resposta principal, mas modifiquei o script sugerido que Tahir vinculou ao seu blog na resposta principal para torná-lo mais limpo e fácil de usar.

O seguinte funciona suspendendo o script local quando o RDP de tela cheia está ativo em vez de tentar matar e reiniciar a versão de script separada toda vez que o foco é movido. Isso é mais leve, e também evita lixo na bandeja de notificação com muitos ícones AHK zumbis para os scripts mortos. Isso também significa que você pode simplesmente adicionar isso ao seu script existente em vez de ter que executá-los separadamente!

; 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
    
por 28.06.2016 / 15:47