0

我想创建一个“金山词霸”脚本。下面是脚本。

IfWinActive, ahk_class QWidget
{
sleep 2000
Click 486, 15
Click 570, 93
Send (various keystrokes)
Return
}

该脚本的目的是:

我想使用一个名为“金山作家”的程序。

Kingsoft Writer 是一个免费软件程序,具有 Microsoft Word 的所有功能。但是金山词霸加载速度很快,不会因为加载缓慢而很少使用的花里胡哨而臃肿。界面也更加用户友好。

我想编程“Kingsoft Writer”默认打开所有文本文件。

我想将鼠标点击和击键发送到这个新打开的“金山词霸”窗口,这样我就可以使界面成为一个非常漂亮和简单的界面。它将具有我选择的背景颜色。它将仅显示 1 个工具栏,而不是 Microsoft Word 中的 5 或 6 个。换句话说,该界面将是对 Microsoft Word 界面的重大改进。

与 Microsoft Word 相比,最重要的功能改进将是金山词霸的加载速度。差异是巨大的。

但它仍将具有 Microsoft Word 的所有功能。它是免费下载的!

所以我需要创建一个可能没有定义热键的脚本。

我需要创建一个脚本,只要出现“Kingsoft Writer”窗口就会运行。

我用谷歌搜索了所有相关的词 2 小时。但是我仍然对如何创建这个脚本一无所知。

请给我一些想法来帮助我解决这个问题。

4

1 回答 1

0

不幸的是,您不能使用 IfWinActive 以您想要的方式触发脚本。虽然有解决方案。

一种方法是每 100 到 500 毫秒运行一个小测试脚本,以查看金山软件是否处于活动状态。或者,您可以使用一些系统调用在每次对任何窗口的焦点发生更改时触发测试脚本。这是一个例子!

带有 ShellMessage 的选项 1

#SingleInstance
#installKeybdHook
#Persistent
Global SwitchCounter

Gui +LastFound 
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam )
{
    If (wParam = 4)
    { 
        IfWinActive, ahk_class QWidget
        {
            Sleep 2000
            Click 486, 15
            Click 570, 93
            ;Send (various keystrokes)
            Return
        }
    }
}
Return

选项 2 以固定时间间隔检查

#SingleInstance
#installKeybdHook
#Persistent
SetTimer, CheckWin, 1000 ; This is executed on startup of AutoHotKey 
Return ; Anything below this point is not executed on startup

CheckWin:
WinGetTitle, CurrName, A
If (CurrName = "KingSoft")
{
    if (CurrName = PrevName)
        Return ; Only continue if an other application was activated
    PrevName = %CurrName% ; When new app, then sync CurrName and PrevName
    SoundBeep, 500, 200
    TrayTip, KingSoft, Activated, 2
}
Return

我只发出声音并在系统托盘中显示一条消息。时间间隔设置为 1000 毫秒,因为仅蜂鸣声就需要 200 毫秒。基于计时器的解决方案会不断发出哔哔声,因此我检查应用名称是否有变化。默认情况下,ShellMessage 仅在您将金山软件置于焦点时才会发出哔声。

这个脚本来自move GUI and daughter together,当计算器和其他应用程序行为相同时我们触发一个动作(同时最小化或恢复)

如果只是检测应用程序是否正在运行,那么使用 settimer 并每 200 毫秒执行一次 ifWinExist 可能会更容易(尽管 ShellMessage 更好)。

于 2013-03-24T14:01:11.817 回答