# 接口文档

# ET. 默认常用插件接口

插件接口:监听已约定事件标识的动作、添加约定接口事件与动作、HOOK创建与管理、获取易相关信息、执行部分易IDE动作,读写易语言助手配置、调用易语言接口功能等功能

一、添加事件处理
功能: 在插件源码 _启动子程序 处添加已约定好的事件标识回调,加载插件后即可监听对应事件动作
代码:

  
.版本 2  
  
 .子程序 _启动子程序, 整数型  
  
 ET.添加事件处理 (#事件标识_插件启用, &事件_插件启用)  
 返回 (0)  
  
 .子程序 事件_插件启用  
  
 ET.输出文本 (“事件_插件启用”, 真)  
  
  

参数:
参数一:【整数型】已约定事件标识,详细标识可通过模块常量 #事件标识_ ;
参数二:【子程序指针】用来回调监听动作的子程序;
1、回调子程序并非都无参数,回调子程序是否有参数可通过模块常量 #事件标识_ 的备注获取;

返回值:
无返回值

二、点击菜单
功能: 不弹出菜单,通过菜单ID点击易语言IDE或易语言插件的菜单
代码:

  
ET.点击菜单 (“菜单标识[整数型]”, “是否异步[逻辑型]”)  
  

参数:
参数一:【整数型】菜单标识,模块已声明好部分菜单标识,通过常量 #菜单_ 调用;
参数二:【逻辑型】是否异步,是否异步执行点击菜单操作;
返回值:
无返回值

三、读写配置
功能: 易语言助手内部相对路径下读写插件相关配置
代码:

  
ET.读配置 (“名称[文本型]”, “默认值[文本型]”)  
 ET.写配置 (“名称[文本型]”, “值[文本型]”)  
  
  

参数:
参数一:【文本型】名称,需要记录数据的名称
参数二:【文本型】值,需要记录得到数据
返回值:
写配置,无返回值
读配置:【文本型】,返回配置文件中对应名称的数据

四、获取主窗口句柄
功能: 获取当前操作的易语言IDE的窗口句柄
代码:

  
ET.获取主窗口句柄 ()  
  

参数:
无参数
返回值:
【整数型】返回当前操作的易语言IDE的窗口句柄

五、引用模块
功能: 直接在当前操作的易语言IDE中添加指定路径的模块
代码:

  
ET.引用模块 ("路径[文本型]")  
  

参数:
参数一:【文本型】路径,指定模块文件的绝对路径
返回值:
【整数型】返回是否添加成功

六、获取插件资源目录
功能: 获取当前易语言助手eTools\plugin目录下当前插件的目录
代码:

  
ET.获取插件资源目录 ()  
  

参数:
无参数
返回值:
【文本型】返回当前插件相对易语言助手的目录路径

七、输出文本
功能: 在易语言IDE状态栏输出窗口输出指定文本
代码:

  
ET.输出文本 (“文本[文本型]”, “输出插件名[逻辑型]”)  
  

参数:
参数一:【文本型】文本,要输出的文本内容;
参数二:【逻辑型】输出插件名,是否输出执行这个命令的插件名称;
返回值:
无返回值

八、调用易系统功能
功能: 根据接口号与参数调用易语言开放的接口,注意:需要支持调用接口的易语言版本
代码:

  
ET.调用易系统功能 ("功能号[整数型]", "参数一[整数型]", "参数二[整数型]")  
  

参数:
参数一:【整数型】功能号,功能号和含义参看易语言根目录下\sdk\cpp\elib\lib2.h;
参数二:【整数型】备选参数,部分有参数的接口使用,默认0;
参数三:【整数型】备选参数:部分有参数的接口使用,默认0;
返回值:
【整数型】返回是否调用成功

其他命令待补充...

# 常用API函数HOOK接口调用

插件模块中 类模块.接口_xx管理 使用同一套HOOK管理,部分常用API函数HOOK使用统一格式调用接口,部分HOOK管理专属命令调用。

基本调用格式: 部分API函数HOOK为统一格式,部分HOOK管理不通用

  
.版本 2  
  
 .程序集 入口程序集  
 .程序集变量 集_XX管理, 接口_XX管理  
  
 .子程序 _启动子程序, 整数型  
  
 ET.添加事件处理 (#事件标识_插件启用, &事件_插件启用)  
 返回 (0)  
  
 .子程序 插件信息, 整数型, 公开  
  
 返回 (生成插件信息 (“插件名称”, “插件备注”, “1.0”, “插件作者”, , ))  
  
 .子程序 事件_插件启用  
  
 集_XX管理 = 接口_获取XX管理 ()  
 集_XX管理.添加调用前处理 (&回调_XX调用前)  
  
 ET.输出文本 (“事件_插件启用”, 真)  
  
  
 .子程序 回调_XX调用前  
 .参数 hMenu, 整数型  
  
  

详细说明:
1、程序集或全局变量声明一个接口_xx管理
2、在插件“事件_插件启用”事件回调中 通过“接口_获取XX管理”获取实际HOOK指针并赋值给步骤1中声明的变量

3、“变量.添加调用前处理”与“变量.添加调用后处理”均只有一个类型为【子程序指针】的回调函数子程序指针参数
4、定义一个对应的回调函数,回调函数参数由具体监听的动作而定,例如下文中的API“DestroyMenu”参数只有一个

参数与返回值调用格式:
方式一:此方式需要回调函数有返回值,类型【整数型】

  
.版本 2  
  
 .子程序 回调_XX调用前, 整数型  
 .参数 参_参数一, 整数型  
 .参数 参_参数二, 整数型  
 .参数 参_参数三, 整数型  
 .局部变量 局_参数, 整数型, , "3"  
  
 局_参数 [1] = 参_参数一  
 局_参数 [2] = 参_参数二  
 局_参数 [3] = 参_参数三  
 返回(集_XX管理.调用原函数 (, 局_参数))  
  

说明:
1、对应的API有多少个参数,局_参数 数组就有多少个成员,支持给成员自定义数据或直接赋值回调的参数,统一调用“调用原函数”命令将数组变量传入第二参数;
2、“调用原函数” 不会触发HOOK处理函数 “调用函数”会触发HOOK处理函数;

方式二:此方式无需回调函数

  
.版本 2  
  
 .子程序 回调_XX调用前  
 .参数 参_参数一, 整数型  
 .参数 参_参数二, 整数型  
 .参数 参_参数三, 整数型  
  
 集_xx管理.置返回值 ("值[整数型]", "直接返回[逻辑型]")  
 集_xx管理.取返回值 ("值[整数型]", "直接返回[逻辑型]")  
 集_xx管理.置参数值 ("参数序号[整数型]", "值[整数型]")  
 集_xx管理.取参数值 ("参数序号[整数型]", "值[整数型]")  
  

说明:
1、通过命令“置返回值”,返回自定义返回值,参数一【整数型】指定的返回值,参数二【逻辑型】是否直接返回;
2、通过命令“取返回值”,返回自定义返回值,参数一【整数型】参考返回返回值,参数二【逻辑型】是否直接返回;
3、通过命令"置参数值",给指定参数序号的参数自定数据,参数一【整数型】参数的序号,参数二【整数型】指定的数据;
4、通过命令“取参数值”,取指定参数序号的参数的值;,参数一【整数型】参数的序号,参数二【整数型】参考返回的参数数据;

一、接口_DestroyMenu管理
功能:
HOOK函数“DestroyMenu”管理易语言IDE菜单销毁的动作
回调函数:

  
.版本 2  
  
 .子程序 回调_DestroyMenu调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 hMenu, 整数型, , 要销毁的菜单的句柄  
 .局部变量 局_参数, 整数型, , "1"  
  
 局_参数 [1] = hMenu  
 返回(集_DestroyMenu管理.调用原函数 (, 局_参数))  
  
  

作用:
可通过修改参数或返回值让易语言IDE不销毁或销毁我们指定的菜单【实例:易语言助手右键菜单功能】

二、接口_FindResourceEx管理
功能:
HOOK函数“FindResourceEx”管理易语言资源窗口创建动作
回调函数:

  
.版本 2  
  
 .子程序 回调_FindResourceEx调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 hModule, 整数型  
 .参数 lpType, 整数型  
 .参数 lpName, 整数型, , 易语言IDE资源窗口ID 由工具 pexplorer.exe 获取  
 .参数 WLanguage, 整数型  
 .局部变量 局_参数, 整数型, , "4"  
  
 局_参数 [1] = hModule  
 局_参数 [2] = lpType  
 局_参数 [3] = lpName  
 局_参数 [4] = WLanguage  
 返回(集_FindResourceEx管理.调用原函数 (, 局_参数))  
  
  

作用:
通过监控参数值判断易语言正要创建的资源窗口,通过修改返回值阻止易语言创建资源窗口【实例:新建插件、整体搜索替换插件等】

三、接口_GetOpenFileName管理
功能:
HOOK函数“GetOpenFileName”管理易语言IDE打开文件对话框动作
回调函数:

  
.版本 2  
  
 .子程序 回调_GetOpenFileName调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 Ipofn, 整数型, ,Ipofn是对话框结构指针  
 .局部变量 局_参数, 整数型, , "1"  
  
 局_参数 [1] = Ipofn  
 返回(集_GetOpenFileName管理.调用原函数 (, 局_参数))  
  
  

作用:
通过修改参数改变易语言IDE通用对话框的样式与显示内容,也可以监控用户选择的文件信息【实例:智能编译,自动保存与备份,对话框增强插件】

四、接口_GetSaveFileName管理
功能:
HOOK函数“GetSaveFileName”管理易语言IDE保存文件对话框动作
回调函数:

  
.版本 2  
  
 .子程序 回调_GetSaveFileName调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 Ipofn, 整数型, , Ipofn是对话框结构指针  
 .局部变量 局_参数, 整数型, , "1"  
  
 局_参数 [1] = Ipofn  
  
 返回(集_GetSaveFileName管理.调用原函数 (, 局_参数))  
  
  

作用:
通过修改参数修改保存文件对话框风格与默认保存路径,获取用户保存源码文件的信息【实例:智能编译,自动保存与备份,对话框增强插件】

五、接口_LoadImageW管理

功能:
HOOK函数“LoadImageW”管理易语言IDE加载图片组动作
回调函数:

  
.版本 2  
  
 .子程序 回调_LoadImageW调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 hinst, 整数型, , 实例句柄 要从其中载入图象的DLL或应用程序模块或实例句柄。零表示装载一幅固有图象  
 .参数 lpBitmapName, 整数型, , 图象标志符 欲载入图象的名字。如指定了hInst,就用这个参数指定资源或资源的标志符(标志符是一个长整数)。如hInst为空,而且已指定了LR_LOADFROMFILE,那么这个参数代表文件名(位图、图标或指针文件)。如果是个Long型值,这个参数就代表固有位图、图标或指针的编号  
 .参数 type, 整数型, , 图象类型 下述常数之一,指定了欲载入的图象类型:IMAGE_BITMAP, IMAGE_CURSOR, IMAGE_ICON  
 .参数 cx, 整数型, , 图象宽度 要求的图象宽度和高度。图象会根据情况自动伸缩。如设为零,表示用图象的默认大小  
 .参数 cy, 整数型, , 图象高度 同上  
 .参数 fuLoad, 整数型, , 常数组合 下述常数的任意组合,它们都在api32.txt文件中得到了定义:;LR_DEFAULTCOLOR:以常规方式载入图象;LR_LOADREALSIZE:不对图象进行缩放处理。忽略n1和n2的设置;LR_CREATEDIBSECTION:如果指定了IMAGE_BITMAP,就返回DIBSection的句柄,而不是位图的句柄;LR_DEFAULTSIZE:如果n1和n2为零,就使用由系统定义的图象默认大小,而不是图象本身定义的大小;LR_LOADFROMFILE:如hInst为零,lpsz就代表要载入适当类型的一个文件的名字,仅适用于Win95;LR_LOADMAP3DCOLORS:将图象中的深灰、灰、以及浅灰像素都替换成COLOR_3DSHADOW,COLOR_3DFACE以及COLOR_3DLIGHT的当前设置;LR_LOADTRANSPARENT:与图象中第一个像素相符的所有像素都由系统替换;LR_MONOCHROME:将图象转换成单色;LR_SHARED:将图象作为一个共享资源载入。在NT 4.0中装载固有资源时要用到这个设置;  
 .局部变量 局_参数, 整数型, , "6"  
  
 局_参数 [1] = hinst  
 局_参数 [2] = lpBitmapName  
 局_参数 [3] = type  
 局_参数 [4] = cx  
 局_参数 [5] = cy  
 局_参数 [6] = fuLoad  
 返回(集_LoadImageW管理.调用原函数 (, 局_参数))  
  
  

作用:
替换易语言IDE相关图片组,改变易语言IDE原有图标显示【实例:代码扩展插件】

六、接口_MessageBox管理
功能:
HOOK函数“MessageBox”管理易语言IDE信息框动作
回调函数:

  
.版本 2  
  
 .子程序 回调_MessageBox调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 hWnd, 整数型, , 此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。  
 .参数 lpText, 整数型, , 消息框的内容。  
 .参数 lpCaption, 整数型, , 消息框的标题。  
 .参数 uType, 整数型, , 指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。  
 .局部变量 局_参数, 整数型, , "4"  
  
 局_参数 [1] = hWnd  
 局_参数 [2] = lpText  
 局_参数 [3] = lpCaption  
 局_参数 [4] = uType  
 返回(集_MessageBox管理.调用原函数 (, 局_参数))  
  
  
  

作用:
通过修改参数让易语言IDE信息框弹出的提示可自定义或屏蔽信息框【实例:屏蔽提示插件,整体搜索替换插件】

七、接口_ShowWindow管理
功能:
HOOK函数“ShowWindow”管理易语言IDE窗口显示与隐藏动作
回调函数:

  
.版本 2  
  
 .子程序 回调_ShowWindow调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 hWnd, 整数型, , 指窗口句柄  
 .参数 nCmdShow, 整数型, , 指定窗口如何显示。  
 .局部变量 局_参数, 整数型, , "2"  
  
 局_参数 [1] = hWnd  
 局_参数 [2] = nCmdShow  
 返回(集_ShowWindow管理.调用原函数 (, 局_参数))  
  
  
  

作用:
通过修改参数控制易语言IDE窗口的显示与隐藏【实例:整体搜索替换插件,整体搜索增强插件,书签插件,命令提示框多屏修正插件,支持库安装管理扩展插件】

八、接口_WaitForDebugEvent管理
功能:
HOOK函数“WaitForDebugEvent”管理易语言调试动作
回调函数:

  
.版本 2  
  
 .子程序 回调_WaitForDebugEvent调用前, 整数型, , 如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。  
 .参数 lpDebugEvent, 整数型, , 指向DEBUG_EVENT结构的指针,该结构包含有关调试事件的信息。  
 .参数 dwMilliseconds, 整数型, , 等待调试事件的毫秒数。  
 .局部变量 局_参数, 整数型, , "2"  
  
 局_参数 [1] = lpDebugEvent  
 局_参数 [2] = dwMilliseconds  
 返回(集_WaitForDebugEvent管理.调用原函数 (, 局_参数))  
  
  

作用:
通过监听易语言调试动作,内存解除调试输出内容长度限制、内存解除30秒编译限制【实例:易语言修复插件】

# 易语言IDE动作监听接口调用

调用以下接口务必初始化接口,否则接口命令不生效,初始化方式与 常用API函数HOOK接口调用 - 基本调用一致

一、接口_IDE编译事件管理
功能:
监听易语言IDE运行与编译源码的动作
回调函数:

  
.版本 2  
  
 .子程序 回调_IDE编译事件调用前  
 .参数 事件标识, 整数型, , #IDE编译事件_  
 .参数 调用类型, 整数型, , #IDE编译事件调用类型_  
 .参数 参数一, 整数型  
 .参数 参数二, 整数型  
  
  

作用:
通过监听动作修改参数值实现智能编译与编译后动作的执行【实例:F7一键智能编译插件,编译后动作】

二、接口_IDE菜单条管理
功能:
添加、查找、移除、获取易语言IDE菜单
1、插入菜单项

  
.版本 2  
  
 集_菜单标识 = CreatePopupMenu () ' 创建一个菜单 得到菜单标识  
 集_菜单 = 接口_获取IDE菜单条管理 () ' 接管易语言IDE顶部菜单  
 集_菜单.插入菜单项 (集_菜单标识, “ 我的菜单 ”, 17) ' 在易语言IDE顶部菜单中插入菜单  
  

2、插入子菜单

  
.版本 2  
  
 集_菜单 = 接口_获取IDE菜单条管理 () ' 接管易语言IDE顶部菜单  
 集_菜单.插入子菜单项 ({ 7 }, #常量_自定义子菜单ID, “我的子菜单”, #MF_STRING,3)  
 ' 自定义子菜单ID 自己定义,尽量5-6位数的整数,避免与易语言自身菜单ID冲突  
 ' (添加的父菜单索引,添加子菜单ID,子菜单名,菜单类型,子菜单索引)  
 ' 添加的父菜单索引 从“程序”开始,程序=0 编辑=1 查看=2 依次类推  
 ' 这里插入位置7 是插入到易语言IDE顶部“工具”菜单中,从第三个位置插入  
  
  

3、查找菜单项

  
集_菜单.查找菜单项(276)‘易语言IDE顶部菜单 运行  
  

4、查找子菜单项

  
.版本 2  
  
 集_菜单 = 接口_获取IDE菜单条管理 ()  
 局_菜单标识 [1].是否索引 = 真  
 局_菜单标识 [1].菜单标识 = 0  
 局_菜单标识 [2].是否索引 = 假  
 局_菜单标识 [2].菜单标识 = 32875 ’易语言IDE菜单 程序 - 配置  
 .如果真 (集_菜单.查找子菜单项 (局_菜单标识, 局_索引数组) = 假)  
 ET.输出文本 (“指定菜单不存在”, 真)  
 返回 ()  
  
  

5、获取菜单标识

  
.版本 2  
  
 集_菜单.获取菜单标识(3)’获取易语言IDE顶部菜单“插入”的菜单标识  
 ' 获取易语言IDE顶部菜单 从左往右第三个菜单的菜单标识,注意:程序=0 编辑=1 查看=2 插入=3  
  
  

6、获取菜单项位置

  
.版本 2  
  
 集_菜单.获取菜单项位置 ("菜单标识[整数型]", "位置[RECT]")  
 ' 通过菜单标识获取易语言菜单当前矩形  
  
  

7、刷新显示

  
.版本 2  
  
 集_菜单.刷新显示 ()  
 ' 添加菜单或者移除菜单后刷新菜单显示  
  
  

8、添加菜单项

  
.版本 2  
  
 集_菜单标识= CreatePopupMenu ()  
 集_菜单.添加菜单项 (集_菜单标识,菜单标题)  
 ' 在易语言IDE顶部菜单末尾添加菜单  
  
  

9、添加子菜单项

  
.版本 2  
  
 集_菜单.添加子菜单项 ({ 7 }, #常量_自定义子菜单ID, “我的子菜单”, #MF_STRING)  
 ' 自定义子菜单ID 自己定义,尽量5-6位数的整数,避免与易语言自身菜单ID冲突  
 ' (添加的父菜单索引,添加子菜单ID,子菜单名,菜单类型)  
 ' 添加的父菜单索引 从“程序”开始,程序=0 编辑=1 查看=2 依次类推  
 ' 这里插入位置7 是插入到易语言IDE顶部“工具”菜单中,从末尾添加  
  
  

10、移除菜单项

  
.版本 2  
  
 集_菜单.移除菜单项 ("菜单标识[整数型]")  
 ' 根据指定的菜单标识移除对应的顶部菜单  
  
  

11、移除子菜单项

  
.版本 2  
  
 集_菜单.移除子菜单项 ({#菜单索引_}, "菜单标识[整数型]")  
 ' 参数一:顶部父菜单索引 常量 #菜单索引_  
 ' 参数二:待删除的子菜单标识  
  
  

三、接口_IDE代码编辑框管理
功能:
管理易语言IDE代码窗口光标
1、初始化

  
.版本 2  
  
 接口_IDE代码编辑框管理.初始化 ("窗口句柄[整数型]")  
 ' 调用此接口除了统一基本调用获取接口,还需要初始化要管理的易语言IDE代码编辑框窗口句柄  
  
  

2、获取光标位置

  
.版本 2  
  
 .局部变量 局_行列, 行列  
  
 接口_IDE代码编辑框管理.获取光标位置 (局_行列)  
 ET.输出文本 (“当前光标所在 行:” + 到文本 (局_行列.行号) + “ 列:” + 到文本 (局_行列.列号), )  
 ' 注意:这里获取的行列信息与易语言IDE状态栏显示的行列信息有偏差  
 ' 易语言IDE状态栏输出的行列信息是基于表格结构,所以在代码行无论光标在什么位置,易语言IDE的状态栏显示的都是0列  
  
  

3、获取光标表位置

  
.版本 2  
  
 .局部变量 局_行列, 行列  
  
 接口_IDE代码编辑框管理.获取光标表位置 (局_行列)  
 ET.输出文本 (“当前光标所在 行:” + 到文本 (局_行列.行号) + “ 列:” + 到文本 (局_行列.列号), )  
 ' 等同易语言IDE状态栏输出的行列信息,偏差1  
  
  

4、获取行信息

  
.版本 2  
  
 接口_IDE代码编辑框管理.获取行信息 ("行号[整数型]", "项标识[整数型]", "项数据指针[整数型]")  
 ' 参数一:待获取信息的代码行  
 ' 返回值 参考常量 #代码行类型_  
  
  

5、获取代码文本

  
.版本 2  
  
 接口_IDE代码编辑框管理.获取代码文本 ("表行[整数型]", "表列[整数型]")  
 ' 参数一:表格所在行  
 ' 参数二:表格所在列  
 ' 注意此命令用于获取表格指定行列的文本,获取代码行文本参数二:0  
  
  

6、获取代码类型

  
.版本 2  
  
 接口_IDE代码编辑框管理.获取代码类型 ()  
 ' 返回值 参考常量 #代码类型_  
  
  

7、获取选中行数、获取选中列数

  
.版本 2  
  
 接口_IDE代码编辑框管理.获取选中行数 ()  
 接口_IDE代码编辑框管理.获取选中列数 ()  
 ' 获取当前选中代码所在的行号与列号  
  
  

8、获取选中信息

  
.版本 2  
  
 接口_IDE代码编辑框管理.获取选中信息 ("起始列[整数型]", "结束列[整数型]", "当前行[整数型]", "选中行范围[行范围]")  
 ' 获取当前选中代码的相关信息  
  
  

9、是否选中代码

  
.版本 2  
  
 接口_IDE代码编辑框管理.是否选中代码 ()  
 ' 判断当前代码编辑框是否选中代码  
  
  

10、保证显示光标位置

  
.版本 2  
  
 接口_IDE代码编辑框管理.保证显示光标位置 ()  
 ' 保证当前光标显示  
  
  

11、光标定位

  
.版本 2  
  
 接口_IDE代码编辑框管理.光标定位 ("行号[整数型]")  
 ' 将光标移动到指定行号所在的代码  
  
  

12、设置光标表位置

  
.版本 2  
  
 .局部变量 局_行列, 行列  
  
 局_行列.行号 = 3  
 局_行列.列号 = 2  
 接口_IDE代码编辑框管理.设置光标表位置 (局_行列)  
 ' 移动光标到第三代码行的第二个表格里  
  
  

13、设置光标位置

  
.版本 2  
  
 .局部变量 局_行列, 行列  
  
 局_行列.行号 = 3  
 局_行列.列号 = 2  
 接口_IDE代码编辑框管理.设置光标位置 (局_行列)’会把表列号置为0  
 ' 移动光标到第三代码行的第2列  
  
  

14、设置选中信息

  
接口_IDE代码编辑框管理.设置选中信息 ("起始列[整数型]", "结束列[整数型]", "当前行[整数型]", "选中行范围[行范围]")  
  

15、销毁

  
.版本 2  
  
 接口_IDE代码编辑框管理.销毁 ()  
 ' 不再管理初始化的代码编辑框时务必 调用 销毁  
  
  

四、接口_IDE代码窗口工作夹管理 (本接口由 代码视图插件 提供。调用此接口必须启用 代码视图插件)
功能:
在代码视图选择夹中加入自己的窗口
1、添加子夹处理

  
.版本 2  
  
 .局部变量 局_事件数组, 事件, , "5"  
  
 局_事件数组 [1] = 事件 (#IDE代码窗口工作夹事件_子夹被创建, &UI_创建)  
 局_事件数组 [2] = 事件 (#IDE代码窗口工作夹事件_子夹被显示, &UI_显示)  
 局_事件数组 [3] = 事件 (#IDE代码窗口工作夹事件_子夹被隐藏, &UI_隐藏)  
 局_事件数组 [4] = 事件 (#IDE代码窗口工作夹事件_子夹尺寸被改变, &UI_尺寸被改变)  
 局_事件数组 [5] = 事件 (#IDE代码窗口工作夹事件_子夹被销毁, &UI_销毁)  
 集_子夹标识 = 接口_IDE代码窗口工作夹管理.添加子夹处理 (#常量_插件名, , , { #代码类型_窗口 }, 局_事件数组)  
  
  

2、删除子夹处理

  
接口_IDE代码窗口工作夹管理.删除子夹处理 (集_子夹标识)  
  

3、获取子夹句柄

  
接口_IDE代码窗口工作夹管理.获取子夹句柄 ("代码窗口句柄[整数型]", "子夹处理标识[整数型]")  
  

4、切换至子夹

  
接口_IDE代码窗口工作夹管理.切换至子夹 ("子夹句柄[整数型]")  
  

5、获取代码编辑框句柄

  
接口_IDE代码窗口工作夹管理.获取代码编辑框句柄 ("子夹句柄[整数型]")  
  

五、接口_IDE代码窗口管理
功能:
获取易语言IDE代码编辑框窗口相关句柄与监听动作

1、获取当前代码编辑框句柄

  
.版本 2  
  
 接口_IDE代码窗口管理.获取当前代码编辑框句柄 ()  
 ' 获取当前操作的易语言IDE代码编辑框句柄  
  
  
  

2、获取当前代码窗口句柄

  
.版本 2  
  
 接口_IDE代码窗口管理.获取当前代码窗口句柄 ()  
 ' 获取当前操作的易语言IDE代码窗口句柄  
  
  

3、获取所有子窗口句柄

  
.版本 2  
  
 接口_IDE代码窗口管理.获取所有子窗口句柄 ("子窗口句柄列表[整数型]")  
 ' 获取当前操作的易语言IDE已创建的代码窗口,以数组方式参考返回  
  
  

4、获取当前代码编辑框管理

  
.版本 2  
  
 接口_IDE代码窗口管理.获取当前代码编辑框管理 ()  
 ' 直接初始化并获取当前易语言IDE代码编辑框的管理  
  
  

5、获取代码编辑框类型

  
.版本 2  
  
 接口_IDE代码窗口管理.获取代码编辑框类型 ("代码编辑框句柄[整数型]")  
 ' 判断指定的易语言IDE代码编辑框是什么类型的,参考常量:#代码类型_  
  
  

6、添加代码窗口事件处理

  
.版本 2  
  
 接口_IDE代码窗口管理.添加代码窗口事件处理 (&回调_代码窗口事件处理)  
 ' 监听易语言IDE代码窗口的动作  
  
 .子程序 回调_代码窗口事件处理  
 .参数 事件类型, 整数型  
 .参数 子窗口句柄, 整数型  
 .参数 备用参数, 整数型  
  
 ' 事件类型 参考常量:#IDE代码窗口事件_  
  
  

7、获取代码编辑框句柄

  
.版本 2  
  
 接口_IDE代码窗口管理.获取代码编辑框句柄 ("子窗口句柄[整数型]")  
 ' 通过 添加代码窗口事件处理 参数:子窗口句柄 获取实际代码编辑框句柄  
  
  

六、接口_IDE新建事件管理
1、回调函数

  
  
.版本 2  
  
 .子程序 回调_IDE新建事件管理  
 .参数 参_新建类型, 整数型  
  
 ' 添加调用前处理的回调函数  
 ' 新建类型参考常量:#IDE源码类型_  
  
  

2、调用新建事件

  
.版本 2  
  
 接口_IDE新建事件管理.调用新建事件 ("源码类型[整数型]")  
 ' 参数参考常量:#IDE源码类型  
  
  

3、调用关闭事件

  
.版本 2  
  
 接口_IDE新建事件管理.调用关闭事件 ()  
 ' 会强制关闭当前源码,使用前请判断[代码是否被改变],并提示用户  
  
  

# HOOK系统接口

一、接口_函数Hook\接口_函数HookEx
1、插件函数HOOK

  
  
.版本 2  
 .程序集变量 集_HOOK, 接口_函数Hook  
  
 局_模块句柄 = GetModuleHandle (“user32.dll”)  
 局_函数地址 = GetProcAddress (局_模块句柄, “ShowWindow”)  
 集_HOOK = ET.创建函数Hook (局_函数地址, 到整数 (&回调_ShowWindow))  
 '在 事件_插件启用 创建需要hook 的函数  
  
  

2、回调函数

  
  
.版本 2  
  
 .子程序 回调_ShowWindow, 整数型  
 .参数 hwnd, 整数型  
 .参数 nCmdShow, 整数型  
 .局部变量 局_参数, 整数型, , "2"  
 .局部变量 局_返回, 整数型  
  
 局_参数 [1] = hwnd  
 局_参数 [2] = nCmdShow  
 局_返回 = 调用子程序指针 (到子程序指针 (集_HOOK.原函数地址 ()), 局_参数)  
 返回 (局_返回)  
 ' 这里回调函数参数与HOOK的函数原函数的参数一致,自定义数据类型的参数为数据指针,自行计算偏移获取成员数据或修改成员数据  
  
  

3、释放

  
  
.版本 2  
  
 .子程序 事件_插件停用  
  
 集_HOOK.释放 ()  
 ET.输出文本 (“事件_插件停用”, 真)  
 '务必在插件停用的时候释放hook,否则会出现崩溃、假死等问题  
  
  

# 常用接口

一、接口_获取xx管理
功能:
用于“常用API函数HOOK接口调用“与”易语言IDE动作监听接口调用”相关类模块接口初始化调用

  
.版本 2  
  
 .子程序 事件_插件启用  
  
 ET.输出文本 (“事件_插件启用”, 真)  
 集_HOOK = 接口_获取ShowWindow管理 ()  
 集_HOOK.添加调用前处理 ()  
  
  

二、接口_获取程序树型框句柄
功能:
返回易语言IDE工作夹 程序子夹树型框句柄

  
.版本 2  
  
 .局部变量 局_树型框句柄_程序, 整数型  
  
 局_树型框句柄_程序 = 接口_获取程序树型框句柄 ()  
  
  

三、接口_获取当前源码类型
功能:
返回当前打开的源码是什么类型,具体类型参考常量:IDE源码类型_

  
.版本 2  
  
 .局部变量 局_当前源码类型, 整数型  
  
 局_当前源码类型 = 接口_获取当前源码类型 ()  
  
  

四、接口_获取当前源码路径
功能:
返回当前打开的源码的文件路径

  
.版本 2  
  
 .局部变量 局_当前源码路径, 文本型  
  
 局_当前源码路径 = 接口_获取当前源码路径 ()  
  
  

五、接口_获取工作夹句柄
功能:
返回当前打开的源码的文件路径

  
.版本 2  
  
 .局部变量 局_当前IDE工作夹句柄, 整数型  
  
 局_当前IDE工作夹句柄 = 接口_获取工作夹句柄 ()  
  
  

六、接口_获取上次编译路径
功能:
获取上次编译输出的路径

  
.版本 2  
  
 .局部变量 局_上次编译路径, 文本型  
  
 局_上次编译路径 = 接口_获取上次编译路径 ()  
  
  

七、接口_获取输出编辑框句柄
功能:
获取易语言IDE输出编辑框的句柄,注意不是“提示输出扩展插件”的输出框句柄

  
.版本 2  
  
 .局部变量 局_输出编辑框句柄, 整数型  
  
 局_输出编辑框句柄 = 接口_获取输出编辑框句柄 ()  
  
  

八、接口_获取支持库树型框句柄
功能:
获取易语言IDE工作夹树支持库树型框句柄

  
.版本 2  
  
 .局部变量 局_支持库树型框句柄, 整数型  
  
 局_支持库树型框句柄 = 接口_获取支持库树型框句柄 ()  
  
  

九、接口_获取状态夹句柄
功能:
获取易语言IDE状态夹句柄

  
.版本 2  
  
 .局部变量 局_状态夹句柄, 整数型  
  
 局_状态夹句柄 = 接口_获取状态夹句柄 ()  
  
  

十、选择夹_切换
功能:
切换易语言IDE状态夹或工作夹子夹

  
.版本 2  
  
 .局部变量 局_状态夹句柄, 整数型  
  
 局_状态夹句柄 = 接口_获取状态夹句柄 () '接口_获取工作夹句柄  
 选择夹_切换 (局_状态夹句柄, #索引_输出)’#索引_输出=1  
  
  

十一、接口_状态夹添加子夹
功能:
在易语言IDE状态夹或工作夹添加子夹并监听子夹动作

  
  
.版本 2  
  
 .子程序 事件_插件启用  
 .局部变量 局_事件数组, 事件, , "5"  
 .局部变量 局_图标句柄, 整数型  
  
 UI_创建窗口 ()  
 局_事件数组 [1] = 事件 (#选择夹事件_子夹被创建, &UI_创建)  
 局_事件数组 [2] = 事件 (#选择夹事件_子夹被显示, &UI_显示)  
 局_事件数组 [3] = 事件 (#选择夹事件_子夹被隐藏, &UI_隐藏)  
 局_事件数组 [4] = 事件 (#选择夹事件_子夹被销毁, &UI_销毁)  
 局_事件数组 [5] = 事件 (#选择夹事件_子夹尺寸被改变, &UI_尺寸被改变)  
 局_图标句柄 = 图标_创建句柄 (#图标_子夹, 1)'子夹图标数据,自行替换  
 全_子夹标识 = 接口_状态夹添加子夹 (“工具箱”, 你的窗口句柄 , 局_图标句柄, 局_事件数组)  
 图标_释放句柄 (局_图标句柄)  
  
  

十二、事件回调函数
功能:
回调创建子夹时监听的事件

  
.版本 2  
  
 .子程序 UI_显示  
 .参数 参选择夹句柄, 整数型  
 .参数 子夹标识, 整数型  
 .参数 窗口句柄, 整数型  
  
 '其余事件参数与本函数一致  
  
  

十三、接口_状态夹切换至子夹\接口_工作夹切换至子夹
功能:
通过“接口_状态夹添加子夹\接口_工作夹添加子夹” 返回的子夹标识 切换对应的子夹

  
  
接口_状态夹切换至子夹 (全_子夹标识)  
 接口_工作夹切换至子夹 (全_子夹标识)  
  

十四、接口_状态夹删除子夹\接口_工作夹删除子夹
功能:
删除由“接口_状态夹添加子夹\接口_工作夹添加子夹”的子夹

  
  
接口_状态夹删除子夹 (全_子夹标识)  
 接口_工作夹删除子夹 (全_子夹标识)  
  

十五、接口_状态夹置子夹名称\接口_工作夹置子夹名称
功能:
设置由“接口_状态夹添加子夹\接口_工作夹添加子夹”子夹的名称

  
接口_状态夹置子夹名称 (全_子夹标识, “新的子夹名称”)  
  

十六、IDE_添加输出子夹
功能:
在易语言IDE状态栏添加子夹

  
IDE_添加输出子夹 (添加到子夹的窗口句柄, “子夹名称[文本型]”, “子夹描述[文本型]”)  
  

十七、IDE_调用IDE接口
功能:
根据接口号与参数调用易语言开放的接口,注意:需要支持调用接口的易语言版本

  
.版本 2  
  
 IDE_调用IDE接口 (“功能号[整数型]”, “功能参数1[整数型]”, “功能参数2[整数型]”)  
 ' 参数一:【整数型】功能号,功能号和含义参看易语言根目录下\\sdk\\cpp\\elib\\lib2.h;  
 ' 参数二:【整数型】备选参数,部分有参数的接口使用,默认0;  
 ' 参数三:【整数型】备选参数:部分有参数的接口使用,默认0;  
  
  

十八、接口_打开代码
功能:
直接打开源码,执行后会提示用户是否保存已修改的源码

  
.版本 2  
  
 接口_打开代码 (“路径[文本型]”)  
 ' 参数:源码文件绝对路径  
  
  

十九、接口_代码是否被改变
功能:
检查当前打开的源码代码是否有修改

  
.版本 2  
  
 接口_代码是否被改变 ()  
 ' 有修改返回真  
  
  

二十、接口_导入代码
功能:
直接在当前打开的源码中插入指定源码的代码,不会覆盖或触发提示用户保存

  
.版本 2  
  
 接口_导入代码 (“路径[文本型]”)  
 ' 参数:源码文件绝对路径  
  
  

二十一、接口_设置当前源码类型
功能:
更改当前源码编译类型

  
.版本 2  
  
 接口_设置当前源码类型 (“源码类型[整数型]”)  
 ' 更改当前源码编译类型 参数参考常量:#IDE源码类型_  
  
  

二十二、接口_是否调试运行中
功能:
判断当前易语言IDE是否处于调试运行中

  
.版本 2  
  
 接口_是否调试运行中 ()  
 ' 判断当前易语言IDE是否处于调试运行中,调试运行中返回真  
  
  

二十三、接口_输入框
功能:
调用输入框以便让用户输入内容并取回输入的内容

  
.版本 2  
  
 接口_输入框 (“提示信息[文本型]”, “窗口标题[文本型]”, “初始文本[文本型]”, “存放输入内容的变量[文本型]”)  
  
 ' 参数一:提示用的内容  
 ' 参数二:输入框窗口的标题  
 ' 参数三:输入框编辑框的初始内容  
 ' 参数四:输入框编辑框的输入内容  
  
 ' 返回值,返回用户是否点击了确定按钮  
  
  

二十四、接口_添加键盘消息处理
功能:
与ET.添加时间处理(#事件标识_键盘消息,&回调_键盘消息处理)用法一致

  
.版本 2  
  
 接口_添加键盘消息处理 (&回调_键盘消息处理)  
  
 .子程序 回调_键盘消息处理, , , 无返回值  
 .参数 键代码, 整数型  
 .参数 按键状态, 整数型, , 0=按下 1=弹起  
 .参数 功能键状态, 整数型  
  
  

二十五、接口_添加主窗口消息调用后处理\接口_添加主窗口消息调用前处理
功能:
监听易语言IDE主窗口的消息

  
  
.版本 2  
  
 接口_添加主窗口消息调用前处理 (&回调_主窗口消息处理)  
 接口_添加主窗口消息调用后处理 (&回调_主窗口消息处理)  
  
 .子程序 回调_主窗口消息处理, , , 无返回值  
 .参数 hWnd, 整数型  
 .参数 uMsg, 整数型  
 .参数 lWaram, 整数型  
 .参数 lParam, 整数型  
  
  
  
  

二十六、接口_调用编译事件
功能:
直接调用易语言IDE编译动作执行编译

  
.版本 2  
  
 接口_调用编译事件 (“事件标识[整数型]”)  
 ' 事件标识 参考常量:#IDE编译事件_  
  
  

二十七、接口_调用新建事件
功能:
直接调用易语言IDE新建动作新建源码

  
.版本 2  
  
 接口_调用新建事件 (“源码类型[整数型]”)  
 ' 源码类型 参考常量:#IDE源码类型_  
 ' 会强制关闭当前源码,使用前请判断[代码是否被改变],并提示用户  
  
  

二十八、接口_新建空白源码
功能:
直接调用易语言IDE新建动作新建一个默认的空白源码

  
.版本 2  
  
 接口_新建空白源码 ()  
 ' 会强制关闭当前源码,使用前请判断[代码是否被改变],并提示用  
  
  

二十九、接口_易界面刷新
功能:
刷新易语言IDE界面

  
接口_易界面刷新 ()  
  

三十、接口_智能编译 本接口由“智能编译插件”提供
功能:
直接调用“智能编译插件”接口执行智能编译动作

  
接口_智能编译 ()  
  

三十一、接口_主线程调用
功能:
解决在易语言助手中调用启动线程等命令异常时,可以用此命令

  
.版本 2  
  
 接口_主线程调用 (“子程序[子程序指针]”, “参数[整数型]”)  
 ' 参数一:待执行子程序指针  
 ' 参数二:传递给子程序的参数  
  
  

三十二、接口_主线程异步调用
功能:
线程异步调用子程序

  
.版本 2  
  
 接口_主线程异步调用 (“子程序[子程序指针]”, “参数[整数型]”)  
 ' 参数一:待执行子程序指针  
 ' 参数二:传递给子程序的参数  
  
  

三十三、整数_取高16位\整数_取低16位
功能:
用于取出消息值中的高位和低位,例如:WM_SIZE 的 lParam 值 低位为宽度 高位为高度

  
.版本 2  
  
 整数_取高16位 (“参数[整数型]”)  
 整数_取低16位 (“参数[整数型]”)  
 ' 用于取出消息值中的高位和低位