web-dev-qa-db-ja.com

キーをRDPフルスクリーンに送信するようにAHKを修正するにはどうすればよいですか?

AutoHotKeyホットキーをWindows7のフルスクリーンでリモートデスクトップと連携させるにはどうすればよいですか?

7
user16659

User16659が指摘しているように、Reloadはホットキーを再び機能させます(しかし、彼のスクリプトは私には機能しませんでした)。

基本的に、2つのスクリプトを実行しています。1つにはホットキーとホットストリングが含まれています"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
5
Tahir Hassan

また、リモートデスクトップ接続「mstsc.exe」の「ローカルリソース」タブにある「Windowsキーの組み合わせを適用する」を「このコンピューター上」に設定する必要があります。MSTSC WINDOWS KEY COMBINATIONS

11
G Koe

AHKをMicrosoftのターミナルサーバークライアントでフルスクリーンで動作させるには、リモートデスクトップウィンドウがアクティブ化された後に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
1
user16659

トップアンサーにコメントを追加することはできませんが、タヒルがトップアンサーのブログにリンクしている推奨スクリプトを変更して、よりクリーンで使いやすくしました。

以下は、フォーカスが移動するたびに別のスクリプトバージョンを強制終了して再起動するのではなく、フルスクリーン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
0
yakrider