以前的问题: 我正在玩一款基本上是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键,窗口就会失去焦点。完成输入热键使窗口激活,但指针似乎没有移动或点击,窗口再次失去焦点。我该如何解决?
答案 0 :(得分:0)
如果你有使用DllCalls而不是send的原因,这可能不起作用,但我会为这种类型的应用程序做的是写一个热键,开始一个循环,直到按下另一个热键,然后使用输入听取任何打字的字符点击。
这样的事情:
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&按下热键,并在按下空格键后终止。
答案 1 :(得分:0)
如果虚拟键盘有固定位置,您可以使用此...
a::MouseClick, left, 150,150
b::MouseClick, left, 250,250
只需使用autoHotKey Window Spy即可找到确切的鼠标坐标。你需要这样做26次,但这很简单直接,不应该造成任何焦点问题的丢失。