• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[笨蛋熊] 【按键精灵X】使用C语言开发扩展插件 [复制链接]

1#
按键精灵X 是按键精灵一次非常重要的更新。
所谓不破不立,按键精灵2014及之前的版本存在诸多设计缺陷,同类软件中缺乏竞争优势,已经积重难返。

建议之后只学习和使用按键精灵X,虽然两个版本存在兼容性问题,但阵痛过后,能获得的优势是很大的。

今天我们来讲一下如何使用C语言开发按键精灵X的扩展插件。

按键精灵X支持多种扩展方式,能够通过C语言实现的扩展方式有:API、Lua扩展库、COM组件。

C语言写COM比较麻烦,而且COM过于老旧,很多场合已经被抛弃,这篇教学不再介绍这种方式,仅说明API和Lua扩展库两种方式。

本教学有一定门槛,用C语言编写扩展程序,首先你得会C语言吧?所以假定你已经掌握了C语言,这里直接说实现方式。

2#

第一种是API方式,按键精灵可以直接声明API,例如:
  1. Declare Function MessageBoxA lib "user32.dll" (ByVal Parent As Long, ByVal sMsg As String, ByVal sTitle As String, ByVal iFlag As Long) As Long

  2. MessageBoxA(0, "123", "123123", 0)
复制代码
即可调用 MessageBoxA 函数,弹出一个消息框,这个函数是由 user32.dll 提供的(系统自带)。

系统提供了许多这样的函数,有效的利用起来,可以实现非常多的功能,但直接使用Win32API多有不便,按键也并非非常擅长调用Win32API的工具。

因此最佳的做法还是通过擅长Win32API开发的语言将功能封装好,再由按键调用。

对于C语言来说,这实在是太简单了,只需要几行代码,一个编译器即可。
  1. // 自定义一个导出函数
  2. __declspec(dllexport) int MyMB(char* sMsg)
  3. {
  4.     MessageBox(0, sMsg, "C语言插件(API)", MB_OK);
  5.     return 12345;
  6. }
复制代码
对于很多人来说,用C语言开发可能开发工具 + 编译器等环境部署问题更麻烦一些,要多安装很多软件,非常烦人。

这里提供一个集成开发包,不需要安装,直接记事本或者你熟悉的编辑器写代码,然后双击编译,编译器用的TCC,很小巧。

API.zip (, 下载次数:321)


代码写在 project.c 里,然后双击 build.bat 直接就能编译了,DLL文件名用记事本打开 build.bat 改一下就行,或者你自己改个名也可以。

编译后,把DLL放到脚本工程的附件里,然后声明即可调用:
  1. Declare Function MyMB lib "mydll.dll" (ByVal sMsg As String) As Long

  2. MyMB("asdasd")
复制代码
这里做个广告,按键精灵X刚发布的时候,星月扩展库就是使用这种方式开发的,通过这个扩展库,能够实现一些非常炫酷的功能:

http://bbs.anjian.com/showtopic-664233-1.aspx

最后编辑笨蛋熊 最后编辑于 2022-04-13 17:37:16
3#

第二种是基于LUA扩展系统的插件,API方式虽好,但和按键的数据交换能力比较差,没办法直接返回一个数组或者表,也没办法访问按键里的数组和表。

这时候可以选择通过 LUA 扩展的方式实现一个插件。

按键精灵X 刚发布的时候提供了基于VC的开发模板,后来我翻译成了基于gcc的开发模板(mingw):

https://gitee.com/xywhsoft/ql_plugin_gcc

但是我们今天的主题是C语言,不是C++(这时候别咬文嚼字了,我想表达的是我希望提供一个更轻量级的环境,不要VC或者GCC那么重)

所以这里再提供一个新的开发模板:
LUA.zip (, 下载次数:241)


用法和API那么一样,代码写在 plugin.c 里(必须按照LUA函数的回调格式写),例如:
  1. // 复制文件
  2. int Rtl_File_Copy(lua_State *L)
  3. {
  4.     int iParam = lua_gettop(L);
  5.     if ( (iParam >= 2) && (iParam <= 3) ) {
  6.         const char* sSrcFile = lua_tostring(L, 1);
  7.         const char* sDstFile = lua_tostring(L, 2);
  8.         int bFocus = TRUE;
  9.         if ( iParam == 3 ) {
  10.             bFocus = lua_toboolean(L, 3);
  11.         }
  12.         CopyFile(sSrcFile, sDstFile, bFocus);
  13.     } else {
  14.         luaL_error(L, "param count error!");
  15.     }
  16.     return 0;
  17. }
复制代码
然后在 module_name 表里注册一下函数,一行一个,前面的是函数名,后面的是LUA函数,最后一行固定用 NULL, NULL:
  1. struct luaL_Reg module_name[] =
  2. {
  3.     { "File_Copy"                        , Rtl_File_Copy },
  4.     { NULL, NULL }
  5. };
复制代码
代码编写完成后,双击 build_x32.bat 或者 build_x64.bat 编译即可。

按键精灵X 和 UiBot 都是基于 BotScript 开发的,所以这个模板也适用于 UiBot。

编译完成后,将对应的文件(release目录下)放在 plugin 目录,import 导入后即可使用啦。

最后编辑笨蛋熊 最后编辑于 2022-04-13 17:52:40
4#

我就想以后能不能 新版的IDE 有那个 热加载lua代码形式的
就是说 那个 就是 那样 我不用在IDE写你们按键的代码了
我就用lua代码来写 然后泡在PC 上了
就是那个意思 收不出来 土狗.

5#

按键精灵X不是胎死腹中了吗,能用了?

6#

积分又涨一分

7#

感谢分享

8#

,

求一个按键精灵x版的下载链接

9#

,

我也找了好久...实在找不到,后面在网盘里面发现备份的安装包

10#

,

链接:https://pan.baidu.com/s/1Aarf_FhMkliRgIHxEY6S2g?pwd=adti
提取码:adti
我也找了好久...实在找不到,后面在网盘里面发现备份的安装包

11#

,

求一个链接,谢谢

12#

按键精灵2014及之前的版本存在诸多设计缺陷,同类软件中缺乏竞争优势,已经积重难返。
-------- 没办法了,只能考虑换

13#

,

链接没了,再发一下

发新话题 回复该主题