易语言API高级技巧总结

首先声明,本文的读者该卖是:具有相当的易言语基础的、能较熟练地把常用的的API从VB/C声明转换到易言语DLL命令的易言语喜欢者。

1,使用指针

易言语中出于安定、方便考虑,没有直接提供指针,这正在进行一些高级 纵时不是很方便,固然有一些第三方支撑库可以取出变量指针(比如我的eLib++ 注:该支撑库系Delphi开发,本人已开放源代 ,你可以到易言语下载区瞧瞧)但是仅仅为了这个 纵就带上一个支撑库不太值得。实在用一个API,加上一些技术就可以欺骗Windows和易言语,让它们报告你一个变量的指针。
这个API是lstrcpyn。用过C开发Windows下的步骤的朋友可能对这个API相比熟识,就是字符串拷贝。正在windows下取代C准则库函数strncpy的。字符串拷贝怎样能获得变量指针呢?秘密就正在这个API的返回值:

瞧瞧MSDN:“If the function succeeds, the return value is a pointer to the buffer”

该函数把第二个参数指定的字符串双制到第一个参数指定的字符串,第三个参数指定双制的长度。假如双制成功,返回第一个参数(缓冲区buffer)的地点。瞧到了吗?它返回第一个参数的地点!!那么我们把需求取地点的变量给它的第一个参数,然后想要领让它双制成功,它不就返回了那个变量的地点了吗?

界说一个DLL命令如下:

Dll命令:取文本指针

返回值类型:整数型

正在Dll库中的命令名:lstrcpyn

参数:欲取其指针的文本 数据类型:文本型 <传址>

参数:欲取其指针的文本 数据类型:文本型 <传址>

参数:保存 数据类型:整数型 备注:0

这样挪用:

文本1 = “abcdefg”

指针1 = 取文本指针 (文本1, 文本1, 0)

把文本1双制到自己,双制长度为0字节(也就是什么都不双制),然后返回文本1的指针。就这么简略。先报告Windows我要双制一个文本到某个内存地点,但同时报告它我什么都不双制,它实践上帮你取出了这个文本的指针。

上面的例子是取文本的指针,其他类型的变量也一样的,由于正在API内部(实在是正在内存中)什么类型的变量都体现为一块内存区域,原理是一样的。但是易言语是强制类型的言语,所以这次要骗骗易言语了,呵呵,再界说这个API的一个新版本,把它的参数界说成你想要的类型就可以了。

Dll命令:取整数指针

返回值类型:整数型

正在Dll库中的命令名:lstrcpyn

参数:欲取其指针的整数 数据类型:整数型 <传址> 备注:一定要传址

参数:欲取其指针的整数 数据类型:整数型 <传址> 备注:一定要传址.重双一次

参数:保存 数据类型:整数型 备注:0

2,非凡的结构用字节集代替

Window98及其后的 纵零碎提供了一个非常棒的API :GradientFill,利用这个API可以方便地画出渐变的效果。

这个API倒不是很麻烦,参考MSDN我们很快就可以正在易言语中界说出这个DLL命令:(以渐变填充矩形为例)

Dll命令:GradientFill
返回值类型:逻辑型
Dll库文件名:Msimg32.dll
正在Dll库中的命令名:GradientFill
参数:hDC 数据类型:整数型
参数:pVertex 数据类型:TRIVERTEX
参数:dwNumVertex 数据类型:整数型
参数:pMesh 数据类型:GRADIENT_RECT
参数:dwNumMesh 数据类型:整数型
参数:dwMode 数据类型:整数型

其中TRIVERTEX 和GRADIENT_RECT时自界说的数据类型:

自界说数据类型:TRIVERTEX

成员:x 数据类型:整数型
成员:y 数据类型:整数型
成员:Red 数据类型:短整数型
成员:Green 数据类型:短整数型
成员:Blue 数据类型:短整数型
成员:Alpha 数据类型:短整数型

自界说数据类型:GRADIENT_RECT

成员:UpperLeft 数据类型:整数型
成员:LowerRight 数据类型:整数型

凭据MSDN的阐明,基础没有标题,但是假如你挪用这个函数,你不会成功的。为什么?我报告你缘由正在TRIVERTEX的界说上。你或许会说,这个没有标题啊,MSDN上界说如下:

typedef struct _TRIVERTEX {
LONG x;
Long y;
COLOR16 Red;
COLOR16 Green;
COLOR16 Blue;
COLOR16 Alpha;
}TRIVERTEX, *PTRIVERTEX;

C言语的LONG 和Long正在Windows 32位下是32位,对应于易言语“整数型”,COLOR16为十六位,对应于易言语的“短整数型”没有标题啊!那假如我再报告你,易言语中的自界说数据类型的成员均是四字节对齐的,你该理解了吧。是的,易言语中的自界说数据类型的成员均是四字节对齐的,假如不敷四字节,会主动对齐到四字节的。具体到上面的界说,Red,Green,Blue,Alpha固然被界说为“短整数型”但是正在易言语内部,它们均被扩充为“整数型”了。这就是题手法泉源。解决的要领就是用字节集代替自界说数据结构。易言语的字节集不存正在四字节对齐的标题。

Dll命令:GradientFill

返回值类型:逻辑型
Dll库文件名:Msimg32.dll
正在Dll库中的命令名:GradientFill
参数:hDC 数据类型:整数型
参数:pVertex 数据类型:字节集
…… ………………..

这样界说就可以了。为了方便地生产所需求的字节集数据,我有界说了一个子步骤:

子步骤:TRIVERTEX到字节集

返回值类型:字节集

备注:由于内存对齐的缘由,务必把TRIVERTEX类型转换为字节集才可以挪用API成功

参数:VertEX 数据类型:TRIVERTEX <数组>

局部变量:元素个数 数据类型:整数型
局部变量:变量 数据类型:整数型
局部变量:数据 数据类型:字节集

元素个数 = 取数组成员数 (VertEX)

计次循环首 (元素个数, 变量)

数据 = 数据 + 到字节集 (VertEX [变量].x)
数据 = 数据 + 到字节集 (VertEX [变量].y)
数据 = 数据 + 到字节集 (VertEX [变量].Red)
数据 = 数据 + 到字节集 (VertEX [变量].Green)
数据 = 数据 + 到字节集 (VertEX [变量].Blue)
数据 = 数据 + 到字节集 (VertEX [变量].Alpha)
计次循环尾 ()
返回 (数据)

具体的请瞧附带的例程

其他具有类似特 (参数或结构中有非四字节的)的API都可以用上述的要领来变通解决。

(0)

相关推荐

  • 易语言HOOKAPI钩子操作代码实例

    DLL代码 .版本 2 .DLL命令 修改虚拟保护, 整数型, "kernel32", "VirtualProtect", , 修改虚拟保护 .参数 lpAddress, 整数型 .参数 dwSize, 整数型 .参数 flNewProtect, 整数型 .参数 lpflOldProtect, 整数型, 传址 .DLL命令 取函数地址, 整数型, "kernel32", "GetProcAddress", , 返回函数地址 .

  • 易语言NTAPI进程操纵的代码

    本程序实现的功能: 打开进程_强力 进程暂停 取api函数地址 进程结束 进程结束_强力 进程_NT内存清零 进程_取自进程ID 进程_提高权限 Kill_Process命令 DLL命令表 .版本 2 .DLL命令 打开进程_, 整数型, "kernel32.dll", "OpenProcess", 公开, 将句柄返回给过程对象 .参数 进程对象, 整数型, , dwDesiredAccess .参数 继承句柄, 整数型, , bInheritHandle .参数

  • 详解易语言DLL以及API函数

    易语言 DLL 详细解释 使用易语言多媒体教程中的例子. .版本 2 //DLL文件 ,需要插入一个窗体.标签.按钮 .程序集 窗口程序集1 .子程序 _按钮1_被单击 窗口1.销毁 () .子程序 自创信息框, , 公开 .参数 标题, 文本型 .参数 内容, 文本型 载入 (窗口1, , 假) // 载入(),必须放在前面,放在后两句的后面则提示窗口无法载入 窗口1.标题 = 标题 窗口1.标签1.标题 = 内容 //编译为自创信息框.dll //当你想调用前面的dll时,必须先插入dll命

  • 易语言关闭显示器api详解

    '关闭显示器 SendMessageA (取窗口句柄 (), #WM_SYSCOMMAND, #SC_MONITORPOWER, 2) '开启显示器 SendMessageA (取窗口句柄 (), #WM_SYSCOMMAND, #SC_MONITORPOWER, -1) 以上就是在易语言中,关闭显示器和开启显示器的相关句柄代码,感谢大家对我们的支持.

  • 详解易语言的钩子(钩子HOOK与APIHOOK区别)

    在本篇内容里我们给大家详细分析了易语言中间的钩子概念以及HOOK与APIHOOK区别 钩子 原英文名称 Hook ,钩子的意思是指拦截或截获.作用就是拦截程序中交互的数据,先经过我们预定的钩子处理接口程序,处理过后,再交还给原处理程序,或者干脆阻止,吃掉这些数据,让原处理程序什么也得不到. 钩子原来是Windows操作系统常用来检查系统与程序间通信的一些数据是否到达目标时用的,为不传之密,后来随着一些高手们的研究,逐渐的发现了这些秘密的技术并且公布了出来.同时还有更多的人在掌握了这些技术后,用在

  • 易语言API高级技巧教学

    首先声明,本文的读者该卖是:具有相当的易言语基础的.能较熟练地把常用的的API从VB/C声明转换到易言语DLL命令的易言语喜欢者. 1,使用指针 易言语中出于安定.方便考虑,没有直接提供指针,这正在进行一些高级 纵时不是很方便,固然有一些第三方支撑库可以取出变量指针(比如我的eLib++ 注:该支撑库系Delphi开发,本人已开放源代 ,你可以到易言语下载区瞧瞧)但是仅仅为了这个 纵就带上一个支撑库不太值得.实在用一个API,加上一些技术就可以欺骗Windows和易言语,让它们报告你一个变量的指

  • 易语言API高级技巧总结

    首先声明,本文的读者该卖是:具有相当的易言语基础的.能较熟练地把常用的的API从VB/C声明转换到易言语DLL命令的易言语喜欢者. 1,使用指针 易言语中出于安定.方便考虑,没有直接提供指针,这正在进行一些高级 纵时不是很方便,固然有一些第三方支撑库可以取出变量指针(比如我的eLib++ 注:该支撑库系Delphi开发,本人已开放源代 ,你可以到易言语下载区瞧瞧)但是仅仅为了这个 纵就带上一个支撑库不太值得.实在用一个API,加上一些技术就可以欺骗Windows和易言语,让它们报告你一个变量的指

  • 易语言API助手使用方法

    易语言API助手它的唯一功能就是方便查询API函数命令,能够自动在程序中加入指定dll命令声明的向导程序. 1.先了解一下API,Application Programming Interface,应用程序编程接口,编程人员通过这个接口,可以调用系统某些软件或者硬件的功能! 2.易语言的API助手对API进行了分类,可以以英文或中文的形式查看,同时提供了中英文索引查找和一些例程! 3.我们可以通过易语言的工具---执行易向导,来导入需要的API助手中的函数! 4.选中API助手,然后就会自动打开

  • 易语言API取文本长度图文讲解

    windows API 应用之"lstrlen"的应用 用易语言取出文本长度的实例教程 1.新建一个易语言窗口程序 添加一个编辑框 和 按钮组件 2.添加需要取出长度的文本 如图中所示 编辑框中添加 "百度一下你就知道"文字 3.双击DLL命令 进入DLL编辑代码 4.新建DLL命令 写入以下代码 .版本 2 .DLL命令 lstrlen, 整数型, , "lstrlenA" .参数 lpString, 文本型 5.进入程序集 写出以下代码 我们

  • 易语言API热键监控实例

    在用易语言编写软件或者游戏辅助的时候,经常用到API热键监控这个功能,我们在下面分享给大家实例代码,直接复制可以测试下. AIP热键监控 .版本 2 .支持库 JY .子程序 监视热键2, 整数型, 公开, 成功返回热键ID,失败返回0. .参数 响应子程序, 子程序指针, , 热键被按下时要触发的子程序,该回调函数可有一个参数用来接收热键ID. .参数 键代码, 整数型, , 可以使用易语言中的键代码常量 .参数 功能键码, 整数型, 可空, 键码数值见常量,可多个相加成为组合键,留空或为0则

  • 易语API监视鼠标状态教学

    调用API来进行监视鼠标状态--判断鼠标哪个键按下与放开 1.新建一个"易语言"窗口程序 2.API命令可下载易语言API编程助手进行查询 我们需要的API命令有 CallNextHookEx--呼叫下一钩子 SetWindowsHookExA--安装系统钩子 UnhookWindowsHookEx--卸载系统钩子 不同翻译的翻译结果也不同,大致了解下就可以了 3.还有一个API命令 GetModuleHandleA--取实例句柄 用来取窗口句柄的 4.对了,API的参数类型要改下,D

  • 易语言调用百度文字识别api方法

    现在百度ai特别强大,很多大公司都是调用百度的数据,那么对于习惯易语言的我们改怎么操作呢?今天以百度ai文字识别为例. 首先打开百度ai平台 注册或登录百度账号,进入控制台,选择文字识别 新建应用,获取appid和app key 选择技术文档,api文档 参考第一个调用方式,通过url调用 要获取token请参考相关链接 然后根据参数说明填写相关代码,最后结果如下: .版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .子程序 _按钮1_被单击 .局

  • 易语言统计代码行数与API的工具

    DLL命令表 .版本 2 .DLL命令 FindWindowEx, 整数型, "user32", "FindWindowExA", , 在窗口列表中寻找与指定条件相符的第一个子窗口 找到的窗口的句柄.如未找到相符窗口,则返回零.会设置GetLastError .参数 hWnd1, 整数型, , 在其中查找子的父窗口.如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) .参数 hWnd2, 整数型, , 从这个窗口后开始查找.

  • 详解易语言中的数据类型

    各种数据存放在磁盘或内存中都有其不同的存放格式,因此就存在不同的数据类型.了解各种数据的特性,对编程开发来说是十分重要. 程序中经常会进行一些运算,易语言中的运算都要使用运算符进行识别处理,并通过运算表达式来完成运算操作.程序中对各数据之间的关系的描述也要通过运算符. 1.易语言的数据类型 一个程序内部应包括两个方面的内容:1.数据的描述.2.操作步骤,即对程序动作的描述. 数据是程序操作的对象,操作的结果会改变数据的内容.打个比方:要做一道菜,做菜前先选择烹饪的原材料(即对数据进行描述),然后

随机推荐