【精品】在易语言中调用DLL使用说明
怎么打开和修改dll文件的?如何调用和编辑?)
3、在修改DLL文件的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复
五、DLL文件修改秘籍
1、禁止下载的修改方法:打开Shdoclc.dll修改资源--对话框---4416,将4416键值禁用即可。
2、禁止网页添加到收藏夹,打开Shdoclc.dll修改资源--对话框---21400,将该键值禁用即可。
三、系统中部分DLL文件的功能
1、Browselc.dll IE所需要调用的库文件DLL结构雏形就是它了
2、Shdoclc.dll 系统窗口及设置等,如删除文件、重命名
3、Shell32.dll 系统窗口及设置等,如删除文件、重命名
4、Cryptui.dll IE控件下载及提示对话框程序
3、修改后的DLL链接文件,需要在DOS模式下导入并重新启动机器才有效。
4、本文章只介绍了我们日常操作中经常用到的DLL修改选项,其他选项请参看DLL文件中的具体选项进行修改。
5、在修改DLL文件前,请先备份系统原有的DLL文件,以备修改失败恢复
DLL修改实例讲解
5、禁止文件被改名,修改shell32.dll,有2个地方需要修改资源--对话框---1018 资源--对话框---1019 将以上两处的相应键值,修改为禁用就可以了!
6、禁止运行菜单,修改shell32.dll,将资源--对话框---1018键值设置为禁用。
7、禁止系统文件被挪动修改shell32.dll,需要修改4个地方 资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017
12、禁止文件的打开方式,修改Url.dll,需要修改2个地方 资源---对话框--- 7000 资源---对话框--- 7005 将以上两处的键值禁用即可。
易语言模块怎么使用
易语言模块怎么使用易语言是一种流行的编程语言,特别适用于初学者和非专业程序员。
易语言模块是易语言编程环境中的一个重要组成部分,它提供了一系列封装好的功能和函数,供开发者使用。
本文将介绍易语言模块的使用方法,帮助读者更好地理解和应用这个强大的工具。
一、什么是易语言模块易语言模块是易语言编程环境中的一个重要组成部分。
它是一组相关的函数和过程的集合,以帮助开发者更快地完成某些常见的任务和功能。
通过使用模块,开发者可以避免重复编写相似的代码,提高开发效率。
易语言模块通常以扩展名“mdl”或“mod”结尾,并包含一组封装好的函数和过程。
这些函数和过程可以被其他易语言程序调用,以实现特定的功能。
易语言模块可以实现各种各样的功能,例如图形操作、网络通信、文件处理等。
二、如何使用易语言模块1. 导入模块要开始使用一个易语言模块,首先需要将它导入到你的程序中。
在易语言的编辑器中,你可以通过点击“文件”菜单中的“导入模块”选项,然后选择你要导入的模块文件,即可将其加入到你的程序中。
导入模块后,你可以在程序中使用该模块中的函数和过程。
调用这些函数和过程,可以实现模块所提供的各种功能。
2. 调用模块函数和过程一旦你导入了一个易语言模块,你就可以在程序中调用它的函数和过程了。
调用函数和过程的语法如下:函数名(参数1, 参数2, ...)其中,函数名是你要调用的函数名称,参数是该函数所需的输入。
不同的函数可能需要不同数量和类型的参数。
你需要根据模块文档或相关的示例代码,了解每个函数的参数要求。
3. 使用模块函数和过程实现特定功能通过调用易语言模块中的函数和过程,你可以实现各种功能。
例如,如果你导入了一个图形操作的模块,你可以调用其中的函数来绘制图形、改变颜色、调整大小等等。
在使用模块函数和过程之前,你应该先阅读该模块的文档或参考资料,了解每个函数和过程的详细说明。
这些说明通常包括函数的输入参数、返回值和使用示例,可以帮助你更好地理解和应用模块。
易语言模块的添加和使用方法
易语言模块的添加和使用方法
易语言模块可用于实现代码复用,增加程序的可维护性和重用性,使用方法如下:
1.创建模块
在易语言中,点击“文件”-“新建”-“模块”,在弹出的窗口中填写模块名称和保存路径,可选择“公共模块”或“私有模块”。
2.添加代码
打开创建好的模块,编写要复用的代码。
3.保存模块
完成编写后,点击“文件”-“保存”或“另存为”,选择模块保存路径并保存。
4.导入模块
在需要使用该模块的项目中,点击“文件”-“导入”-“模块”,选择所需导入的模块,点击“确定”。
5.调用模块代码
在项目中,通过“调用”命令调用模块中的函数或过程,实现对模块代码的复用。
注:引用公共模块的方法同上。
易语言 directx2d 的使用方法
易语言 directx2d 的使用方法易语言是一种用于编写Windows应用程序的简单易学的编程语言,而DirectX是一组用于开发游戏和多媒体应用程序的API。
在易语言中,通过调用DirectX2D的相关函数,可以实现2D图形的绘制、渲染和动画效果。
下面将详细介绍DirectX2D的使用方法。
一、引入DirectX2D库文件在使用DirectX2D之前,需要先将相关的库文件引入到易语言的开发环境中。
具体步骤如下:1. 下载并解压DirectX2D库文件。
2. 打开易语言的开发环境,点击菜单栏的“工程”-“库文件管理器”。
3. 在库文件管理器中,点击“添加”按钮,选择解压后的DirectX2D库文件,点击“确定”。
二、初始化DirectX2D在使用DirectX2D之前,需要先初始化相关的资源。
具体步骤如下:1. 在程序的初始化部分,添加以下代码:```初始化图形系统()```2. 在程序的结束部分,添加以下代码:```释放图形系统()```三、绘制基本图形使用DirectX2D可以绘制各种基本图形,如点、线、矩形、圆等。
具体步骤如下:1. 绘制点:```绘制点(点的X坐标, 点的Y坐标, 颜色)```2. 绘制线:```绘制线(起点的X坐标, 起点的Y坐标, 终点的X坐标, 终点的Y坐标, 颜色, 线宽)```3. 绘制矩形:```绘制矩形(左上角的X坐标, 左上角的Y坐标, 右下角的X坐标, 右下角的Y坐标, 颜色, 是否填充)```4. 绘制圆:```绘制圆(圆心的X坐标, 圆心的Y坐标, 半径, 颜色, 是否填充)```四、图形变换与动画效果使用DirectX2D可以对图形进行平移、旋转、缩放等变换操作,以及实现动画效果。
具体步骤如下:1. 平移:```图形平移(水平偏移量, 垂直偏移量)```2. 旋转:```图形旋转(旋转角度)```3. 缩放:```图形缩放(水平缩放比例, 垂直缩放比例)```4. 动画效果:```设置动画帧率(帧率)开始动画()结束动画()```五、文本绘制使用DirectX2D还可以绘制文本,可以设置文本的字体、大小、颜色等。
在易语言中调用DLL使用说明[详细讲解]
易语言中调用DLL使用说明基本说明本文所描述的部分功能需易语言4.01或以上版本支持。
“在易语言中调用DLL”包含两方面的内容:调用Windows系统API函数;调用普通DLL函数。
下文用到的“调用API”或“调用DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视上下文而定。
绝大多数情况下,无需明确区分调用的是系统API还是普通DLL。
目前易语言只支持以stdcall方式调用DLL中的导出函数。
Windows系统API一般都是以stdcall调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方式的问题。
而普通DLL有可能导出“非stdcall调用方式”(比如cdecl)的函数,调用时需要特别注意。
一般而言,考虑到通用性,DLL开发者都会选择导出以sdtcall方式调用的函数。
(支持生成DLL的编程语言通常都支持导出stdcall调用方式的函数,具体实现请参考各编程语言手册。
)易语言编译生成的DLL,其导出函数全部为stdcall调用方式,所以在易语言中调用易语言生成的DLL不存在问题。
目前在易语言中调用DLL时只支持1字节对齐的结构(自定义数据类型)如果DLL命令的某个参数或参数的某个成员是结构类型(自定义数据类型),则其对齐方式必须是1字节对齐。
Windows系统API中所用到的结构都是1字节对齐的,故在调用API时不受此限制。
但如果想用其它编程语言生成DLL供易语言调用且数据类型中包含了1或2字节数据长度的成员(如字符型或短整数),就需要考虑结构的1字节对齐。
在Delphi中,可以这样定义1字节对齐的结构(结构在Delphi中称为record):在其它编程语言或编译器中的定义方式请参考各自的编程手册。
目前易语言支持调用任意复杂的DLL命令只要满足了前面的两个条件——调用方式为stdcall,参数结构为1字节对齐——易语言支持调用任意复杂的DLL命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类型数组,也可以是结构类型地址或结构类型数组,结构类型的成员中还可以包含任意数量和任意层次的其它结构、结构地址、结构数组,等等。
易语言 directx2d 的使用方法
易语言 directx2d 的使用方法易语言是一种简单易学的编程语言,广泛应用于国内的软件开发领域。
而DirectX2D是微软公司开发的一个用于图形渲染的API接口,它能够帮助开发者创建出高性能的2D图形应用程序。
本文将详细介绍如何在易语言中使用DirectX2D。
一、环境准备在开始使用DirectX2D之前,我们需要确保计算机上已经安装了DirectX SDK。
可以通过微软官方网站下载并安装最新版本的DirectX SDK。
二、导入DirectX2D库文件在易语言中使用DirectX2D需要导入相应的库文件。
首先,我们需要从DirectX SDK中找到DirectX2D的库文件(通常是一个名为d2d1.lib的文件),将其复制到易语言的lib文件夹中。
然后,在易语言的开发环境中,选择“系统”菜单下的“导入DLL函数”选项,选择d2d1.lib文件并导入。
导入成功后,我们就可以在易语言中使用DirectX2D的相关函数了。
三、创建DirectX2D对象使用DirectX2D之前,我们需要创建一个ID2D1Factory对象,该对象是DirectX2D的核心对象,用于创建其他的DirectX2D对象。
在易语言中,我们可以通过调用以下函数来创建ID2D1Factory对象:```创建Direct2D工厂对象接口,返回ID2D1Factory接口对象函数D2D1CreateFactory(ID2D1Factory **ppFactory, const D2D1_FACTORY_OPTIONS *pFactoryOptions);```在函数调用结束后,我们将会得到一个ID2D1Factory对象的指针,可以使用该指针调用其他的DirectX2D函数。
四、创建渲染目标在使用DirectX2D绘制图形之前,我们需要创建一个渲染目标。
渲染目标是DirectX2D绘制的画布,我们可以将图形绘制在渲染目标上。
在易语言中,我们可以通过调用以下函数来创建渲染目标:```创建渲染目标接口,返回ID2D1HwndRenderTarget接口对象函数D2D1CreateHwndRenderTarget(const D2D1_RENDER_TARGET_PROPERTIES *pRenderTargetProperties, const D2D1_HWND_RENDER_TARGET_PROPERTIES *pHWNDRenderTargetProperties, ID2D1HwndRenderTarget **ppHwndRenderTarget);```在函数调用时,我们需要传入渲染目标的参数,包括渲染目标的属性和渲染目标所在的窗口句柄。
易语言编程命令调用操作大全
易语⾔编程命令调⽤操作⼤全⽬录⼀、命令概述⼆、命令的格式三、命令的参数四、命令的返回值五、命令嵌套调⽤六、数组参数与数组返回值七、流程控制类命令⼋、算术运算命令九、逻辑⽐较⼗、位运算命令⼗⼀、数组操作命令⼗⼆、环境存取命令⼗三、拼⾳处理命令⼗四、⽂本操作命令⼗五、时间操作命令⼗六、数值转换命令⼗七、字节集操作命令⼗⼋、磁盘操作命令⼗九、⽂件读写命令⼆⼗、系统处理命令⼆⼗⼀、媒体播放命令⼆⼗⼆、⽹络通信命令⼆⼗三、其他命令⼆⼗四、我的播放器第三代(改)⼀、命令概述1. 什么是命令:命令是⼀个功能调⽤的开始。
2. 命令的参数:调⽤⼀个功能⽅法时候输⼊的数据或者条件。
3. 命令的返回值:调⽤完功能⽅法后得到的输出结果。
⼆、命令的格式1. 格式: [返回值][所属对象]命令名称([参数1],[参数2],...)。
2. 注意点:[]指的是可以有但不⼀定必须有的东西。
3. 例⼦:返回(1)。
三、命令的参数1. 参数可以是常量也可以是变量。
2. 调⽤时传递给命令的参数必须满⾜该命令对参数的定义,如 “输⼊(⽂本型)”这个例⼦中参数定义为⽂本格式那么传递的参数就必须是⽂本格式,否则就会出现语法错误。
3. 并⾮所有的命令都需要参数,即存在不需要参数的命令,但是命令名称后⾯的“()”以及多个参数之间的间隔符“,”不能没有。
4. 实际开发中不需要将所有的命令背下来,只需要按F1就能够查看明亮的即时帮助⽂档进⾏命令说明的查看。
四、命令的返回值1. ⼤多数命令执⾏完毕都会有返回值,即并不是所有命令结束都会有返回值的。
2. 有的命令返回运算结果,有的命令返回执⾏后的反馈信息,有的命令返回的是逻辑的判断。
3. 命令的返回值的数据类型由命令的语法规定决定,实际开发中往往需要对返回值的数据类型进⾏转换,如编辑框只显⽰⽂本,那么要显⽰数字的话就需要⽤“到⽂本()”命令进⾏转换。
程序:多项选择以及滚动写⾏.版本 2.程序集窗⼝程序集_启动窗⼝.⼦程序 _按钮1_被单击' 画板1.滚动写⾏ (多项选择 (3, “A”, 666, [2018年9⽉9⽇]))' 画板1.滚动写⾏ (多项选择 (2, “A”, 666, [2018年9⽉9⽇]))画板1.滚动写⾏ (多项选择 (1, “A”, 666, [2018年9⽉9⽇])).⼦程序 _按钮2_被单击画板1.滚动写⾏ (多项选择 (2, “A”, 666, [2018年9⽉9⽇])).⼦程序 _按钮3_被单击画板1.滚动写⾏ (多项选择 (3, “A”, 666, [2018年9⽉9⽇]))' 滚动写⾏就是换⾏输⼊' 多项选择就是在后⾯的⼏项中选择五、命令嵌套调⽤1. 命令是可以嵌套使⽤的,嵌套的意思就是命令的参数可以是另外⼀个命令的返回值2. 例⼦:编辑框1.内容=到⽂本(到数值(编辑框1.内容)+1)六、数组参数与数组返回值1. 数组型参数:有的时候命令的参数必须是⼀个数组型变量,如“重定义数组()”的命令程序:播放器三.版本 2.程序集窗⼝程序集_启动窗⼝.⼦程序 _按钮1_被单击.局部变量播放列表变量, ⽂本型, , "6"' 通过数组变量实现多⾸歌曲连续播放播放列表变量= { “F:\CloudMusic\Ace组合 - 楚地⽆歌.mp3”, “F:\CloudMusic\FLOW,GRANRODEO - Howling.mp3”, “F:\CloudMusic\Gemie,SawanoHiroyuki[nZk] - X.U.mp3” }' 播放的⾳乐需要和程序⽂件在同⼀个⽂件夹下' 播放MP3 (1, “藍井エイル - 流星.mp3”)' 尝试不在同⼀⽂件夹下要如何处理?' 增加完全路径试试' 播放MP3 (1, “F:\CloudMusic\Ace组合 - 楚地⽆歌.mp3”)' 尝试成功!通过增加全路径也能够实现跨⽂件夹的mp3播放' 尝试不通过修改源代码就能够播放其它的⾳乐?' 暂时没尝试出来。
易语言核心支持库DLL命令大全
易语言核心支持库DLL命令大全.版本 2.DLL命令 _取短整型指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 短整数型, 传址.参数源指针, 短整数型, 传址.参数复制长度, 整数型, , 0.DLL命令 _取双精度指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 字节型, 传址.参数源指针, 字节型, 传址.参数复制长度, 整数型, , 0.DLL命令 _取文本指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 文本型, 传址.参数源指针, 文本型, 传址.参数复制长度, 整数型, , 0.DLL命令 _取整型指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 整数型, 传址.参数源指针, 整数型, 传址.参数复制长度, 整数型, , 0.DLL命令 _取子程序指针, 整数型, , "lstrcpyn", 公开, 返回整型子程序 .参数目的指针, 子程序指针.参数源指针, 子程序指针.参数复制长度, 整数型, , 0.DLL命令 _取字节集指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 字节集, 传址.参数源指针, 字节集, 传址.参数复制长度, 整数型, , 0.DLL命令 _取字节指针, 整数型, , "lstrcpyn", 公开.参数目的指针, 字节型, 传址.参数源指针, 字节型, 传址.参数复制长度, 整数型, , 0.DLL命令 CallNextHookEx, 整数型, , "CallNextHookEx", 公开, 传递钩子 .参数钩子句柄, 整数型.参数钩子类型, 整数型.参数消息一, 整数型.参数消息二, 整数型.DLL命令 CharLower, 文本型, , "CharLowerA", 公开, 到小写_.参数 str, 文本型.DLL命令 CharUpper, 文本型, , "CharUpperA", 公开, 到大写_.参数 str, 文本型.DLL命令 CloseHandle, 整数型, "kernel32.dll", "CloseHandle", 公开 .参数对象句柄, 整数型.DLL命令 CopyMemory_msg, 整数型, , "RtlMoveMemory", 公开, 复制消息 .参数目标地址, MSG.参数源地址, 整数型.参数复制长度, 整数型.DLL命令 CreateFont, 整数型, "gdi32", "CreateFontA", 公开, 用指定的属性创建一种逻辑字体执行成功则返回逻辑字体的句柄,零表示失败。
钩子 易语言
易语言钩子DLL注入源码及源码说明2010-04-06 13:52[所有要使用到的API].版本 2.DLL命令 LoadLibraryA, 整数型.参数 lpLibFileName, 文本型.DLL命令 SetWindowsHookExA, 整数型, "user32.dll", "SetWindowsHookExA", 公开, SetWindowsHookEx.参数钩子类型, 整数型, , idHook.参数回调函数地址, 整数型, , lpfn.参数实例句柄, 整数型, , hmod.参数线程ID, 整数型, , dwThreadId.DLL命令 FreeLibrary, 整数型, "kernel32.dll", "FreeLibrary", , 释放指定的动态链接库,它们早先是用LoadLibrary ;API函数装载的非零表示成功,零表示失败。
会设置GetLastError.参数库句柄, 整数型, , hLibModule,要释放的一个库句柄,在VB里使用只能用这个函数释放那些由应用程序明确装载的DLL。
对LoadLibrary的每一次调用都应该有一个对应的FreeLibrary 调用;.DLL命令 UnhookWindowsHookEx, 整数型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx.参数钩子句柄, 整数型, , hHook.DLL命令 CallNextHookEx, 整数型, "user32.dll", "CallNextHookEx", 公开, CallNextHookEx .参数钩子句柄, 整数型, , hHook.参数代码值, 整数型, , ncode.参数附加参数1, 整数型, , wParam.参数附加参数2, 整数型, 传址, lParam.DLL命令 GetProcAddress, 整数型, "kernel32.dll", "GetProcAddress", , 取进程路径.参数模块句柄, 整数型, , hModule.参数进程名称, 文本型, , lpProcName.DLL命令 GetCurrentThreadId, 整数型, "kernel32.dll", "GetCurrentThreadId".DLL命令获取特别文件夹位置_, 整数型, "shell32.dll", "SHGetSpecialFolderLocation".参数窗口句柄, 整数型, , hwndOwner.参数文件夹位置, 整数型, , nFolder.参数结构, 项目标识符列表_, 传址, pIdl.DLL命令从列表id取路径_, 整数型, "shell32.dll", "SHGetPathFromIDListA", , $(b).参数结构指针, 整数型, , pIdl.参数路径, 文本型, 传址, pszPath.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA".参数动态调用代码, 字节集, , 一定要用本人编写的.参数子程序, 子程序指针, , 子程序指针.参数参数, 整数型, 数组, 为整数数组,参数1为成员1…类推;文本型和字节集型(自定义结构)为指针.参数参数数目, 整数型, , 一定要和参数数组相符,不然会出错.参数是否C调用, 整数型, , 真为cdecl调用方式,假为stdcall调用方式(即标准WINAPI方式)[这里函数所有代码和一个自定义类型,API代码在左边].版本 2.程序集程序集1.程序集变量临时呼出热键, 整数型.程序集变量临时载入窗口, 窗口.程序集变量钩子模块句柄, 整数型, , "1000".程序集变量钩子句柄, 整数型, , "1000".程序集变量钩子IDx, 整数型.程序集变量 x, 整数型.程序集变量钩子句柄1, 整数型.程序集变量 temp目录, 文本型.程序集变量 xxx, 整数型.程序集变量热键钩子句柄, 整数型.程序集变量第一次, 逻辑型.子程序调用_调用子程序, 整数型, 公开, 呼叫某个函数可以传入无限个参数返回函数返回值.参数子程序指针, 子程序指针, , 指定函数.参数参数, 整数型, 可空数组, 指定参数可以不写, 参数为数组格式为参数[1]=xxx 参数[2]=xxx 文本型或字节集请用转换指针格式2 加入成员(参数,xxx).局部变量动态调用代码, 字节集动态调用代码= { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }返回 (CallWindowProcA (动态调用代码, 子程序指针, 参数, 取数组成员数 (参数), 0)).子程序操作_取特定目录, 文本型, 公开, 取特定的目录(返回所要取的指定目录名无效返回空) .参数欲获取目录类型, 整数型, 可空, 0我的桌面 1临时目录 5我的文档 6我的收藏夹 7我的启动11我的开始菜单 20系统字体 36Windows安装目录 37系统目录 [99更多].局部变量路径, 文本型.局部变量标示结构, 项目标识符列表_.局部变量目录类型, 整数型.如果真 (欲获取目录类型= 99)输出调试文本 (“0我的桌面 2我的程序 5我的文档 6我的收藏夹 7我的启动 8我最近的文档 9我的发送到 11我的开始菜单 13我的音乐 14我的视频 16我的桌面 20系统字体 22开始菜单组 23程序组 24启动组 25桌面 31收藏夹 32我的浏览器临时目录 33我的Cookies 34我的历史记录36Windows安装目录 37系统目录 38文件安装目录 39我的图片 40用户目录 41系统目录 46文档 47管理工具 48我的管理工具 53音乐 54图片 55视频”).如果真结束.如果 (欲获取目录类型= 1)目录类型= 34.否则目录类型=欲获取目录类型.如果结束获取特别文件夹位置_ (0, 目录类型, 标示结构)路径=取空白文本 (255)从列表id取路径_ (标示结构.结构大小, 路径).如果真 (路径=“”)返回 (“”).如果真结束.如果真 (欲获取目录类型= 1)路径=子文本替换 (路径, “History”, “Temp”, , , 真).如果真结束返回 (路径+“\”).子程序注入_安装钩子DLL, 整数型, 公开, DLL注入返回0=失败整数型 DLL接口(代码值,参数1,参数2).参数线程ID, 整数型, , -1 全局钩子.参数 DLL全名, 文本型, , DLL全名.参数 DLL接口, 文本型, 可空, 默认整数型钩子接口(代码值,参数1,参数2).局部变量临时变量, 整数型.局部变量目录, 文本型.局部变量窗口句柄, 整数型.如果真 (是否为空 (DLL接口) =真)DLL接口=“钩子接口”.如果真结束.如果真 (线程ID = 0)返回 (0).如果真结束.如果真 (线程ID = -1)线程ID = 0.如果真结束钩子IDx =钩子IDx + 1钩子模块句柄 [钩子IDx] = LoadLibraryA (DLL全名)钩子句柄 [钩子IDx] = SetWindowsHookExA (3, GetProcAddress (钩子模块句柄 [钩子IDx], DLL 接口), 钩子模块句柄 [钩子IDx], 线程ID)目录=操作_取特定目录 (1)写配置项 (目录+“ada.ini”, “ada”, “钩子句柄”, 到文本 (钩子句柄 [钩子IDx]))输出调试文本 (钩子IDx, 钩子模块句柄 [钩子IDx], 钩子句柄 [钩子IDx])返回 (钩子IDx).版本 2.子程序注入_卸载钩子DLL, 逻辑型, 公开.参数钩子ID, 整数型, 可空, 卸载所有时无效.参数卸载所有, 逻辑型, 可空.局部变量 xx, 整数型.如果真 (卸载所有).如果真 (钩子IDx > 0).计次循环首 (钩子IDx, xx).如果真 (钩子模块句柄 [xx] ≠ 0)FreeLibrary (钩子模块句柄 [xx])UnhookWindowsHookEx (钩子句柄 [xx]).如果真结束.计次循环尾 ().如果真结束返回 (真).如果真结束.如果真 (钩子ID > 0).如果真 (钩子模块句柄 [钩子ID] ≠ 0)FreeLibrary (钩子模块句柄 [钩子ID])UnhookWindowsHookEx (钩子句柄 [钩子ID])返回 (真).如果真结束.如果真结束返回 (假).子程序注入_初始化钩子DLL, 整数型, 公开, DLL用..参数代码值, 整数型.参数参数1, 整数型.参数参数2, 整数型.参数初始, 子程序指针.局部变量 xxxx, 整数型.如果真 (钩子句柄1 = 0)temp目录=操作_取特定目录 (1)钩子句柄1 =到整数 (读配置项 (temp目录+“ada.ini”, “ada”, “钩子句柄”, )).如果真结束.如果真 (第一次=假)第一次=真调用_调用子程序 (初始).如果真结束返回 (CallNextHookEx (钩子句柄1, 代码值, 参数1, 参数2)).子程序注入_设置呼出窗口, 逻辑型, 公开.参数设置热键, 整数型.参数呼出窗口, 窗口临时呼出热键=设置热键临时载入窗口=呼出窗口热键钩子句柄= SetWindowsHookExA (2, 到整数 (&呼出键接口), 0, GetCurrentThreadId ()) .如果真 (热键钩子句柄> 0)返回 (真).如果真结束返回 (假).子程序呼出键接口, 整数型.参数一, 整数型.参数二, 整数型.参数三, 整数型.如果真 (一= 0 且二=临时呼出热键且三> 0) .如果 (是否已创建 (临时载入窗口)).如果 (临时载入窗口.可视)临时载入窗口.可视=假.否则临时载入窗口.可视=真.如果结束.否则载入 (临时载入窗口, , 假)临时载入窗口.Esc键关闭=假临时载入窗口.最小化按钮=真.如果结束.如果真结束返回 (CallNextHookEx (热键钩子句柄, 一, 二, 三)).版本 2.数据类型项目标识符列表_, , ITEMIDLIST.成员结构大小, 整数型, , , cb.成员标识符长度, 字节型, , "255", abID此函数是用来调用指针函数的.就是CALL取目录用这个我就不解释了下面是源码主要函数函数解释:本函数参数1为要HOOK的线程ID,参数2为要注入的DLL名,参数3[可空]为DLL接口名字空则为"钩子接口".下面解释是如何实现的:1.首先使用LoadLibraryA获取DLL模块地址.2.然后设置SetWindowsHookExA参数一为HOOK类型,使用WH_GETMESSAGE(3) Hook来监视从GetMessage or PeekMessage函数返回的消息。
易语言DLL开发手册
易语言Dll开发手册一.关于易语言DLL从易语言3.6版开始,已经能够支持对DLL动态链接库的开发,编译出的DLL 是标准的DLL,和其他编程语言生成的标准DLL的调用方法相同。
易语言编写出的DLL,在非独立编译exe时只需要DLL文件随应用程序一起发行,而独立编译exe时无需将DLL文件随应用程序一起发行。
二.新建易语言DLL程序新建一个易语言程序,然后选择图标,易语言就会自动创建出编写态连接库的代码区(程序集),如下图所示:创建完毕就可以在代码区里编写DLL程序。
三.如何生成动态连接库(DLL)易语言中的DLL编写方法和易模块的编写方法类似,都需要有对外的公开接口。
下面将通过编写一个“自创信息框”来看一下用易语言如何编写和调用DLL。
编写DLL时的公开接口只能由以下方式生成,新建一个子程序,然后把“公开”选中,在DLL中任何程序集中选中“公开”的子程序都作为对外接口,如下图所示:修改一下子程序名称,叫“自创信息框”,然后创建2个参数“标题”和“内容”,都定义成整数型,如下图所示:注意:目前DLL接口函数中的参数只能为以下9种之一:字节型、短整数型、整数型、长整数型、小数型、双精度小数型、逻辑型、日期时间型、子程序指针型定义好DLL参数后,我们可以创建新窗体作为信息框窗口,在新窗体上画一个按钮,一个标签,如下图所示:为了让用户按下确定按钮后,窗口能关闭,可以双击确定按钮,创建按钮“被单击”的触发事件,写入如下代码:然后返回到刚才的程序集1代码区开始编写代码。
由于2个参数都定义成了整数型,而调用的时候传递过来的标题和内容一定是文本型的,那么怎样去取得里面内容呢?别急,易语言3.6版中考虑到了这个问题,所以新增加了3个命令:“指针到文本”、“指针到字节集”、“写到内存”。
当用户传递的是文本型或者字节集型,易语言将自动转换成指针,我们可以使用“指针到文本”或“指针到字节集”把原来的文本返回出来。
如下图所示:到此已经完成“自创信息框DLL”所有工作,最后可以选择菜单“程序”→“编译”将其编译为DLL。
在易语言中调用DLL使用说明
易语言中调用DLL使用说明基本说明本文所描述的部分功能需易语言4.01或以上版本支持。
“在易语言中调用DLL”包含两方面的内容:调用Windows系统API函数;调用普通DLL函数。
下文用到的“调用API”或“调用DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视上下文而定。
绝大多数情况下,无需明确区分调用的是系统API还是普通DLL。
目前易语言只支持以stdcall方式调用DLL中的导出函数。
Windows系统API一般都是以stdcall调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方式的问题。
而普通DLL有可能导出“非stdcall调用方式”(比如cdecl)的函数,调用时需要特别注意。
一般而言,考虑到通用性,DLL开发者都会选择导出以sdtcall方式调用的函数。
(支持生成DLL的编程语言通常都支持导出stdcall调用方式的函数,具体实现请参考各编程语言手册。
)易语言编译生成的DLL,其导出函数全部为stdcall调用方式,所以在易语言中调用易语言生成的DLL不存在问题。
目前在易语言中调用DLL时只支持1字节对齐的结构(自定义数据类型)如果DLL命令的某个参数或参数的某个成员是结构类型(自定义数据类型),则其对齐方式必须是1字节对齐。
Windows系统API中所用到的结构都是1字节对齐的,故在调用API时不受此限制。
但如果想用其它编程语言生成DLL供易语言调用且数据类型中包含了1或2字节数据长度的成员(如字符型或短整数),就需要考虑结构的1字节对齐。
在Delphi中,可以这样定义1字节对齐的结构(结构在Delphi中称为record):在其它编程语言或编译器中的定义方式请参考各自的编程手册。
目前易语言支持调用任意复杂的DLL命令只要满足了前面的两个条件——调用方式为stdcall,参数结构为1字节对齐——易语言支持调用任意复杂的DLL命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类型数组,也可以是结构类型地址或结构类型数组,结构类型的成员中还可以包含任意数量和任意层次的其它结构、结构地址、结构数组,等等。
易语言常用api(dll命令)
版本 2.DLL命令生成声音_,整数型, "kernel32.dll", "Beep", 公开, , Beep,用于生成简单的声音Long,TRUE(非零)表示成功,否则返回零。
会设置Get LastE rror.参数声音频率, 整数型, , dwFreq,声音频率(从37Hz到32767Hz)Long,声音频率(从37Hz到32767Hz)。
在windo ws95中忽略.参数声音持续时间, 整数型, , dwDura tion,参见相关帮助Long,声音的持续时间,以毫秒为单位。
如为-1,表示一直播放声音,直到再次调用该函数为止。
在windo ws95中会被忽略.DLL命令取字节数据地址_, 整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 字节型, 传址, lpStri ng1.参数数据2, 字节型, 传址, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取字节数组数据地址_,整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 字节型, 传址数组, lpStri ng1.参数数据2, 字节型, 传址数组, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取字节集数据地址_, 整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 字节集, 传址, lpStri ng1.参数数据2, 字节集, 传址, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取文本数据地址_, 整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 文本型, 传址, lpStri ng1.参数数据2, 文本型, 传址, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取文本数组数据地址_,整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 文本型, 传址数组, lpStri ng1.参数数据2, 文本型, 传址数组, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取整数数据地址_, 整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 整数型, 传址, lpStri ng1.参数数据2, 整数型, 传址, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令取整数数组数据地址_,整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn .参数数据1, 整数型, 传址数组, lpStri ng1.参数数据2, 整数型, 传址数组, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令lstrcp yn, 整数型, "kernel32.dll", "lstrcp yn", 公开, lstrcp yn.参数数据1, 文本型, 传址, lpStri ng1.参数数据2, 文本型, 传址, lpStri ng2.参数数据长度, 整数型, , iMaxLe ngth.DLL命令置线程优先级_, 整数型, "kernel32", "SetThr eadPr iorit y", 公开, $(b)设定线程的优先级别非零表示成功,零表示失败。
[易语言]“自定义数据类型”和“dll命令”的一些知识
[易语言]“自定义数据类型”和“dll命令”的一些知识雪花飞舞夜[易语言]“自定义数据类型”和“dll命令”的一些知识自定义数据类型什么是“自定义数据类型”?顾名思义,就是用户可以随时在程序中自行定义新的数据类型。
自定义数据类型时需要设置数据类型的名称及其成员。
数据类型成员各属性的设置方法等同于变量设置时相应属性的设置方法。
双击“程序”中的“自定义数据类型”就可以进入自定义数据类型的界面;自定义数据类型什么是“自定义数据类型”?顾名思义,就是用户可以随时在程序中自行定义新的数据类型。
自定义数据类型时需要设置数据类型的名称及其成员。
数据类型成员各属性的设置方法等同于变量设置时相应属性的设置方法。
双击“程序”中的“自定义数据类型”就可以进入自定义数据类型的界面;首先,“自定义数据类型”的名称是可以随意改变的,在数据类型名下面双击鼠标左键就可以修改名称,我们这里把它改变成为“自定义数据类型”吧;点击鼠标右键,选择“向后插入新行”就可以“自定义数据”;用鼠标右键选择一项创建好的成员,选择删除,就可以删除掉这一项;成员的类型跟我们以前说过的变量的设置基本相同,可以设置所有基本类型;自定义数据类型的使用。
在定义后自定义数据类型之后,我们进入工作区,在设置变量的地方,我们选择数据类型,会发现一个新的数据类型,这个数据类型就是您刚才自己创建的那个。
我们先给这个变量起一个名字,就叫作“变量”吧,我们就可以通过这个自定义的变量在设置您刚才创建的自定义类型数据中的各项的内容;讲到这里您可能会认为自定义数据类型就是把几个不同的数据类型放到一起,这样如果按照以前调用变量的方法,一个一个调用不也一样吗?如果按照我们以前的使用,确实可以这样,但是等一下我们要讲到的“dll命令”中,就涉及到一个“类”的概念,某些“dll命令”在使用当中,必须调用某几个数据的集合,而不能一项一项调用,就好像某人要买一辆车,您不可能今天卖他轮胎,明天卖他发动机的道理一样,所以如果想学好我们后面的“dll命令”自定义数据类型的概念必须非常清楚。
python调用dll详解
python调⽤dll详解公司业务需要,让我⽤python调⽤领导写好的dll库,经过⼀段时间的研究,终于调⽤成功,特此来记录⼀下过程开发环境win10+python3.6.8(64位)1.安装MinGW-w64安装这个的⽬的是⽣成dll⽂件⽤,参考地址在上⾯,讲⼀下注意的点。
1. 安装的时候version选择最新的即可。
2. 安装⽬录随便选,不是C盘也可以.3. 在这⼀步下载的时候,⼤概是20分钟左右,如果觉得慢的话,可以直接去下载源码然后解压即可,参考⽂章⾥的⼋、问题列表⾥有说明4. 安装好记得在命令⾏⾥⾯验证⼀下是否正确安装2.编写⽂件⽣成dll#include <stdio.h>extern"C" {__declspec(dllexport) int Double(int x);__declspec(dllexport) float floatAdd(float a,float b);__declspec(dllexport) void HelloWorld(char * str);__declspec(dllexport) void Ints(int * arr,int n);}int Double(int x){return x*2;}float floatAdd(float a,float b) {return a+b;}void HelloWorld(char * str){puts(str);}void Ints(int * arr,int n){for(int i=0;i<n;i++){printf("%d ",arr[i]);}puts("");}View Code⽣成dllg++ dlltest.cpp -shared -o dlltest.dll3.python调⽤dllfrom ctypes import *dll = windll.LoadLibrary('E:\code\lx_code\dlltest.dll')print(dll)a=dll.Double(123)print(type(a))print(a)输出内容<WinDLL 'E:\code\lx_code\dlltest.dll', handle 6c100000 at 0x27f2ab8bc88><class 'int'>246到这⾥,就算调⽤成功了。
易语言调用C++DLL获取结构体数据
易语言调用C++DLL获取结构体数据晴雯晴雯发表于 2017-7-6 16:16C语言源码发全我看看// VC6.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "resource.h"#include "stdio.h"#include "commctrl.h"#include <RICHEDIT.h>#include <commdlg.h>#include <shellapi.h>#define MAX_LOADSTRING 100#define COMM_OPEN 1#define COMM_CLOSE 2#define COMM_READ 3#define COMM_WRITE 4#define IDV_VERSION "3.13"#define IDS_APPTITLE "CommMonitor" IDV_VERSION "串口监视精灵(For VC6.0 DLL版)"#define IDS_APPINFO " SoftName : " IDS_APPTITLE"\r\n \Version : " IDV_VERSION "\r\n \FileSize : 52KB\r\n \BuildDate: 2010-02-05 09:55:59\r\n\Email : ************\r\n\QQ : 348677065\r\n\Home : http:\/\/\r\n \SoftWare : http:\/\/\r\n\r\n \Copyright (C) 2003-2010 jfyes网络科技 \r\n"#pragma pack(push)#pragma pack(1) //设置为1字节对齐typedef struct _HookData{BYTE ComPort; //串口号BYTE CommState; //串口状态HFILE FileHandle; //被打开的文件句柄长整型无符号int DataSize; //数据大小长整型有符号char Data [8192] ; //串口数据}THookData, *PHookData;#pragma pack(pop)//DLL 实例句柄HINSTANCE gPMonitorComm = NULL;// TOnData = function (AHook: PHookData): Integer;stdcall;typedef LONG(CALLBACK * TOnData)(LONG lParam);//启动串口监视typedef BOOL(CALLBACK * TMonitorComm)(DWORD Pid, DWORD ComIndex, TOnData lpCallFunc);//关闭串口监视, 返BOOL类型typedef BOOL(CALLBACK * TUnMonitorComm)(void);//取得全部进程IDtypedef void(CALLBACK * TGetAllProcess)(HWND hComBox);//过程变量TMonitorComm MonitorComm;TUnMonitorComm UnMonitorComm;TGetAllProcess GetAllProcess;//////////////////////////////LONG ReadT otal = 0;LONG WriteT otal = 0;HWND hMemo = NULL;HWND hHex = NULL;//是否是启动监视BOOL bActive = FALSE;HINSTANCE HInst;BOOL MouseLButtonDown = FALSE;LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);LONG ColorT oRGB(LONG Color){if (Color < 0)return GetSysColor(Color & 0x000000FF);elsereturn Color;}void SetRichEditFontColor(LONG AColor){CHARFORMAT Format;//memset(Format, 0, sizeof(CHARFORMAT));Format.cbSize = sizeof(CHARFORMAT);Format.dwMask = CFM_COLOR;Format.crTextColor = ColorToRGB(AColor);SendMessage(hMemo, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(&Format));}void SetRichEditFontName(LPCSTR FontName){CHARFORMAT Format;Format.cbSize = sizeof(CHARFORMAT);Format.dwMask = CFM_FACE;memset(Format.szFaceName, 0, sizeof(Format.szFaceName));lstrcpy(Format.szFaceName, FontName);SendMessage(hMemo, EM_SETCHARFORMAT, 0, LPARAM(&Format));}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.//加载DLLgPMonitorComm = LoadLibrary("PMonitorComm.dll");if (!gPMonitorComm){MessageBox(GetForegroundWindow(), "加载PMonitorComm.dll失败,请检察该DLL是否存在。
易语言 辅助 读取内存数据的方法
易语言辅助读取内存数据的方法
当使用易语言进行内存数据读取时,可以采用以下方法:
1. 使用API函数:通过调用Windows API函数来读取内存数据。
可以使用ReadProcessMemory函数来读取其他进程的内存数据,也可以使用GetModuleHandle和ReadMemory函数来读取当前进程的内存数据。
需要注意权限和错误处理。
2. 使用EasyHook库:EasyHook是一个用于Windows系统的开源Hooking库,可以用来读取内存中的数据。
可以使用它来注入钩子函数到目标进程中,并在其中读取内存数
据。
3. 使用FindWindow函数:通过FindWindow函数找到目标窗口的句柄,然后使用ReadProcessMemory函数读取目标进程的内存数据。
这种方法适用于读取其他进程中的数据。
4. 使用第三方工具:有一些第三方工具可以帮助读取内存数据,比如Cheat Engine 等。
可以通过这些工具来搜索并读取目标进程的内存数据。
5. 使用自定义DLL注入:编写一个自定义的DLL,然后使用DLL注入技术将其注入到目标进程中。
在DLL中编写读取内存数据的函数,然后通过远程线程调用执行这些函数。
6. 使用易语言的系统函数:易语言本身提供了一些系统函数来读取内存数据,比如VirtualAlloc、WriteProcessMemory等。
可以利用这些函数来读取其他进程的内存数据。
以上是一些常用的方法,在实际使用时需要根据具体的需求和情况来选择合适的方法。
需要注意权限、错误处理和对目标进程的合法性,以及如何处理读取到的数据。