随笔-90  评论-947  文章-0  trackbacks-0

昨晚搞到近 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 = "SampleExtension", --请勿修改
    Description = "This is a sample extension.",

    Configuration =
    {
        setting1 = --设置项1(本例不使用)
        {
            Type = "number",
            Desc = "Please input an integer."
        },
        setting2 = --设置项2(本例不使用)
        {
            Type = "string",
            Desc = "Please input a string."
        }
        --其他设置项
    },

    Entrance = function (id) -- 入口函数
        -- 所有代码都请写在这里
        return true; --必须返回 true 或者 false。返回值意义目前暂未定义。
    end
};
----------------------------------------------------------------------------

 

目前支持的 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 设置是否合理,脚本安全性如何控制,等等。

欢迎在下面评论中跟帖。

posted on 2010-05-10 13:46 溪流 阅读(2575) 评论(7)  编辑 收藏 引用 所属分类: C++

评论:
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-13 10:40 | Condor
晕,还用LUA,这个在VS上可以使用吗?
现在VS不让使用第3方插件了。  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-13 15:09 | 溪流
@Condor
只能说VS很黄很无耻,它会搜索所有进程的主窗口文字,如果发现“改键”等字样就强行关闭之。开个带“改键”标题的浏览器都会被VS关掉。
其实很多工具并不是所谓的“插件”。VS没有权力认定用户不能运行某些软件。
  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-13 17:03 | airey
你好。
请教你一个问题。

魔兽1.24的聊天地址是0x6FAE8450,但是vs更新后,内存地址变了,但还是Game.dll +AE8450

直接读取0x6FAE8450正常,但是我不知道你是如何得到Game.dll 的基址的?
是用的GetModuleHandle?
我用这个返回值总是0.
  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-13 17:10 | 溪流
@airey
忘了,应该就是GetModuleHandle吧。。  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-13 20:05 | airey
@溪流
你好。
能告诉我你是如果做到的么?  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-05-14 00:50 | 溪流
@airey
代码在家里所以下午真的是忘了不是刻意隐瞒。
尽管这根本算不上什么技术难题,可是,本着学习软件发布、运作过程的精神,我还是不想亲口对潜在的竞争对手透露现行产品的具体实现细节。
如果没有在这么一篇文章中,面临一个不针对特定对象的问题,我会知无不言、言无不尽的。相信你能找到答案的。  回复  更多评论
  
# re: 溪流 WarKey 3.0 论坛预览版 发布,支持Lua脚本 2010-08-19 11:45 | 路青飞
尽管这根本算不上什么技术难题,可是,本着学习软件发布、运作过程的精神,我还是不想亲口对潜在的竞争对手透露现行产品的具体实现细节。
------------------------
很有商业意识嘛,哈哈  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理