AutoHotKey宏 - 窗口焦点的难度

时间:2013-01-16 01:10:06

标签: macros autohotkey

以前的问题: 我正在玩一款基本上是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键,窗口就会失去焦点。完成输入热键使窗口激活,但指针似乎没有移动或点击,窗口再次失去焦点。我该如何解决?

2 个答案:

答案 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次,但这很简单直接,不应该造成任何焦点问题的丢失。