3

我想用 AHK 来模拟Ctrl++ 。Altbreak

下面的代码什么都不做。我还粘贴了键历史记录,首先使用 Num - 然后实际按下一组三重奏键。AHK 键不起作用,而实际按下键起作用。两者生成的代码对我来说似乎相同,除了 Break 与 AHK 有 d & u。但这应该没关系。我还介绍了延迟,但这也不起作用。

SetKeyDelay, 2,2
NumpadSub::
send {LCtrl Down}{LAlt Down}{vk03sc146}{LCtrl Up}{LAlt Up}
return  

我还尝试使用 {CtrlBreak} 和以下在 Win XP 远程桌面中没有成功。发送!^{vk03sc146} 这段代码可以在我的win 7中找到。但是我需要远程访问Win XP。请帮忙。

6D  04A     d   1.33    Num -           
A2  01D i   d   0.00    Ctrl            
A4  038 i   d   0.02    Alt             
03  146 i   d   0.02    Break           
03  146 i   u   0.02    Break           
A2  01D i   u   0.02    Ctrl            
A4  038 i   u   0.02    Alt             
6D  04A     u   0.16    Num -           
74  03F     d   1.00    F5              
74  03F     u   0.09    F5              
74  03F     d   2.02    F5              
74  03F     u   0.13    F5              
74  03F     d   0.19    F5              
74  03F     u   0.11    F5              
A2  01D     d   1.31    Ctrl            
A4  038     d   0.00    Alt             
03  146     u   0.39    Break           
A2  01D     u   0.06    Ctrl            
A4  038     u   0.03    Alt             
74  03F     d   3.08    F5       
4

3 回答 3

5

CapsLock即使它在 RDP 之前启动,也可以从 AHK捕获键,它是 RDP 传递给其他键盘挂钩的唯一键。

这可以在本地机器上完成。当您在本地机器上而不是在远程机器上执行此操作时,您可以使用 AHK 获取 MSTSC 的窗口 id,并将恢复命令传递给窗口(不发送密钥,这非常不可靠)

;Get MSTSC window (this may have to be "ahk_class TSSHELLWND" for systems other than Win7)
If WinActive("ahk_class TscShellContainerClass") {
    WinGet, active_id, ID, A
    PostMessage, 0x112, 0xF120,,, ahk_id %active_id%   ; 0x112 = WM_SYSCOMMAND, 0xF120 = SC_RESTORE
}

上述命令将使 MSTSC 从全屏中断。

在这里可以看到一个完整的例子(http://code.ecomerc.com/Articles/RotateCube/),它用于从全屏中断 MSTSC 并旋转 Dexpot(一个 3d 窗口管理器)的立方体功能

于 2013-02-13T14:18:22.937 回答
0

如果激活了 RDP 客户端的键盘钩子,则除非在 RDP 客户端之后启动脚本,否则不会使用任何 auhotkey 热键。

这是编写该行代码的更好方法;^!休息

于 2013-02-03T07:21:31.910 回答
0

上面彼得的答案的所有功劳,这是经过一小时搜索后迄今为止唯一有效的解决方案。我稍微修改了一下,让它稍微完整一点。

此 AHK 脚本允许使用alt + capslock退出全屏模式,然后在选择远程桌面窗口时,alt + capslock再次按恢复全屏。在主机上启动 AHK 脚本。

;Get MSTSC window (this may have to be "ahk_class TSSHELLWND" for systems other than Win7)
!Capslock::
T := !T
If WinActive("ahk_class TscShellContainerClass") {
    WinGet, active_id, ID, A
    if T
        PostMessage, 0x112, 0xF120,,, ahk_id %active_id%   ; 0x112 = WM_SYSCOMMAND, 0xF120 = SC_RESTORE
    else
        PostMessage, 0x112, 0xF030,,, ahk_id %active_id%   ; 0x112 = WM_SYSCOMMAND, 0xF030 = SC_MAXIMIZE
}
return
于 2022-01-26T01:31:05.617 回答