1

上一个问题: 我正在玩一个基本上是 Hangman 的在线 Flash 游戏。输入字母的唯一方法是在游戏中的屏幕键盘上单击它们。我想编写某种宏,将键盘按下与鼠标位置映射,这样我就可以在键盘上键入字母并让鼠标点击相应的屏幕键盘字母。我在戴尔笔记本电脑上运行 Windows 7。有没有办法做到这一点?有什么程序可以帮助解决这个问题吗?如果有帮助,我有一些 Java 编程经验。

更新:我正在使用 AutoHotKey 编写宏。这是我所拥有的:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
LAlt & a::
IfWinExist Bearville - Mozilla Firefox
{
    WinActivate
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 460, "UInt", 560) ; move 
DllCall("mouse_event", "UInt", 0x02) ; left button down
DllCall("mouse_event", "UInt", 0x04) ; left button up
sleep 250
DllCall("mouse_event", "UInt", 0x01, "UInt", -460, "UInt", -560) ; move 
return
LAlt & b::
IfWinExist Bearville - Mozilla Firefox
{
    WinActivate
}
DllCall("mouse_event", "UInt", 0x01, "UInt", 500, "UInt", 560) ; move 
DllCall("mouse_event", "UInt", 0x02) ; left button down
DllCall("mouse_event", "UInt", 0x04) ; left button up
sleep 250
DllCall("mouse_event", "UInt", 0x01, "UInt", -500, "UInt", -560) ; move 
return

等等。如果窗口未激活,请激活它。将指针从左上角移动到屏幕上字母的位置,鼠标左键上下,等待250毫秒(因为没有延迟导致点击不注册),然后将指针移回起始位置. 这适用于一个字母,但是如果我随后尝试输入另一个字母,则只要按下左 alt 键,窗口就会失去焦点。完成输入热键会使窗口激活,但指针似乎没有移动或单击,并且窗口再次失去焦点。我该如何解决?

4

2 回答 2

0

如果出于某种原因您使用 DllCalls 而不是发送,这可能不起作用,但我会为这种类型的应用程序编写一个热键,该热键启动一个循环,直到按下另一个热键,然后使用输入来监听任何键入的字符以单击。

像这样的东西:

LAlt & a::
IfWinExist Bearville - Mozilla Firefox
{
    WinActivate
}
flag = 1
while flag
{
    Input, inval, B L1, {Space}
    IfInString, errorlevel, EndKey
    {
        flag = 0
    } else {
        x, y = locationForChar(inval)
        ;I'd reccomened a switch or if statement chain
        Send {Click %x%, %y%}
    }
}

这应该在按下“LAlt & a”热键后开始读取所有输入,并在按下空格键后终止。

于 2013-01-17T03:29:25.737 回答
0

如果虚拟键盘有固定位置,可以用这个...

a::MouseClick, left, 150,150
b::MouseClick, left, 250,250

只需使用 autoHotKey Window Spy 即可找到准确的鼠标坐标。虽然你需要这样做 26 次,但它既简单又直接,不会导致任何注意力不集中的问题。

于 2013-01-17T07:55:31.300 回答