我想创建一个“金山词霸”剧本

时间:2013-03-24 12:53:07

标签: windows kingsoft

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

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

该脚本的目的是:

我想使用名为“金山词霸”的程序。

Kingsoft Writer是一个免费软件程序 具有Microsoft Word的所有功能。 但是金山词霸很快就加载而不是 缓慢加载铃铛和口哨臃肿 很少使用。界面也很多 更加用户友好。

我想打开“金山词霸” 默认情况下所有文本文件。

我想发送鼠标点击和按键 到这个新开的“金山词霸”窗口 这样我就可以使界面变得非常好 看起来和简单的界面。 它将具有我选择的背景颜色。 它只显示1个工具栏而不是5或6 与Microsoft Word一样。 换句话说,界面将是一个主要的 改进了Microsoft Word界面。

最重要的功能改进将会 金山词霸加载的速度有多快 微软Word。差异很大。

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

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

我需要创建一个每当运行时运行的脚本 出现“金山词霸”窗口。

我用Google搜索了所有相关单词2小时。 但我仍然不知道如何做到 创建这个脚本。

请给我一些想法来帮助我 弄清楚这一点。

1 个答案:

答案 0 :(得分:0)

不幸的是,您无法使用IfWinActive以您希望的方式触发脚本。 虽然有解决方案。

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

带有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 ms,因为单独的声音需要200 ms。基于计时器的解决方案会不断发出蜂鸣声,因此我会检查应用名称的变化。只有在默认情况下将KingSoft置于焦点时,ShellMessage才会发出蜂鸣声。

此脚本来自move GUI and daughter together,我们会在计算器和其他应用程序的行为相同时触发操作(同时最小化或恢复)

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