我有一个非常复杂的脚本,它会按下一个键,并且需要在某些位置检查该键是否仍然被按下,所以GetKeyState看起来很完美,但我无法让它工作,所以我制作了一个简单的脚本只做那个,它仍然不承认状态。
脚本如下:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
~#Right::
ControlSend,, {d down}, ahk_pid 6920
Loop{
GetKeyState, dState, d
;MsgBox, d Key State: %dState%
SplashTextOn,300,50, AutoNavigatorInfo, d Key State: %dState%
WinMove, AutoNavigatorInfo, , 300, 0 ; Move the splash window to the top left corner.
}
可悲的是,我使用的splashText窗口不断将dState中继为U
。在我正在使用的测试窗口中看到很奇怪,它与正在按下的d键正确交互。
答案 0 :(得分:2)
GetKeyState不适用于controlsend,因为GetKeyState获取键的全局系统状态,但controlsend仅在本地设置状态,即只为一个控件或窗口设置键状态。
答案 1 :(得分:2)
我同意 blackholyman " GetKeyState不适用于controlsend,因为GetKeyState获取密钥的全局系统状态,但controlsend仅在本地设置状态,即密钥状态仅设置为1控制或窗口。"
但是如果你需要" ControlSend用于某些窗口功能,例如通过PID发送命令"我想你也可以用Send命令来做。使用WinActivate激活您需要发送密钥的窗口,并在使用Send发送密钥后使用。您可以使用WinActivate命令而不是Wintitle参数来使用PID,更多信息请参见:http://ahkscript.org/docs/misc/WinTitle.htm
试试这段代码:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
~#Right::
WinActivate, ahk_pid 6920
Send, {d down}
Loop{
GetKeyState, dState, d
;MsgBox, d Key State: %dState%
SplashTextOn,300,50, AutoNavigatorInfo, d Key State: %dState%
WinMove, AutoNavigatorInfo, , 300, 0 ; Move the splash window to the top left corner.
}