昨晚搞到近 2 点,终于把相关部分搞完了,放出个预览版玩玩。这一版本将支持组合键,比如,可以分别改Q、Ctrl+Q、Alt+Q 等,也将支持所有鼠标操作。此外,增加了一个脚本系统,允许用户进行更大程度上的自定义。

猛击这里下载

脚本使用 lua 语言,格式大致为(正式版出来之前可能还会有改动):

-----------------------------------------------------------------------------
-- SampleExtension.lua
Extension =
{
    Application = "xlWarKey", --请勿修改
    Version = "3.0", --请勿修改
    NameSpace = "http://www.streamlet.org/api/xlwarkey/3.0", --请勿修改
ExtensionName = <span style="color:#a31515">&#34;SampleExtension&#34;</span>, <span style="color:#008000">--请勿修改</span>
Description = <span style="color:#a31515">&#34;This is a sample extension.&#34;</span>,

Configuration =
{
    setting1 = <span style="color:#008000">--设置项1(本例不使用)</span>
    {
        Type = <span style="color:#a31515">&#34;number&#34;</span>,
        Desc = <span style="color:#a31515">&#34;Please input an integer.&#34;</span>
    },
    setting2 = <span style="color:#008000">--设置项2(本例不使用)</span>
    {
        Type = <span style="color:#a31515">&#34;string&#34;</span>,
        Desc = <span style="color:#a31515">&#34;Please input a string.&#34;</span>
    }
    <span style="color:#008000">--其他设置项</span>
},

Entrance = <span style="color:#00f">function</span> (id) <span style="color:#008000">-- 入口函数</span>
    <span style="color:#008000">-- 所有代码都请写在这里</span>
    <span style="color:#00f">return</span> <span style="color:#00f">true</span>; <span style="color:#008000">--必须返回 true 或者 false。返回值意义目前暂未定义。</span>
<span style="color:#00f">end</span>

};
----------------------------------------------------------------------------

目前支持的 API 有:

void PressKey(number vkcode [,
              boolean ctrl [, boolean shift [, boolean alt [, boolean win]]]])

按下某键。
第一个参数为虚拟键码,也就是 Windows VK_,脚本里给出了一个 Keys 变量,可以直接使用 Keys.VK_。其中 0 - 9 Keys.VK_0、……、Keys.VK_9,字母键用 Keys.VK_A、……、Keys.VK_Z
后面四个表示状态键是否被按下。默认 false
若要按下 Ctrl+1,可写成 PressKey(Keys.VK_1, true, false, false, false);
也可简写为 PressKey(Keys.VK_1, true)

void ReleaseKey(number vkcode [,
boolean ctrl [, boolean shift [, boolean alt [, boolean win]]]])

同上,放开某键。

void MoveMouse(number x, number y)

移动鼠标到 (x, y) 位置。此坐标是相对于屏幕上最前面的那个窗口的客户区的左上角的(以后将相对于魔兽窗口)。

void PressMouseButton(number button)
button: 1 - Left
2 - Right
3 - XButton1
4 - XButton2

按下鼠标按钮

void ReleaseMouseButton(number button)
button: 1 - Left
2 - Right
3 - XButton1
4 - XButton2

放开鼠标按钮

void MouseWheel(number button, number delta)
button: 1 - VWheel
2 - HWheel

滚动鼠标滚轮

void SetClipboard(string str)

将一个字符串放到剪贴板

string AnsiToUtf8(string ansi)

Ansi 字符串转换为 UTF-8

width, height GetClientSize()

取客户区大小。目前是取屏幕上最前面的那个窗口的客户区的大小(以后将会是魔兽窗口的大小)。

x, y GetCursorPosition()

取鼠标光标当前位置。此坐标是相对于屏幕上最前面的那个窗口的客户区的左上角的(以后将相对于魔兽窗口)。

void Delay(number milliseconds)

等待一段时间,参数的单位是毫秒。

上面附件中的示例脚本实现了一次性扔掉物品栏所有物品的功能。请打开魔兽,然后按 Alt+1 来看效果。

论坛相应主题:http://forum.streamlet.org/thread-236-1-1.html

介绍到此结束。

最后,如果有兴趣的,希望探讨下,目前的脚本格式定义是否合理,API 设置是否合理,脚本安全性如何控制,等等。

欢迎在下面评论中跟帖。


首发:http://www.cppblog.com/Streamlet/archive/2010/05/10/114988.html