aardio - 向API函数传址取文本的方法探讨

2023-11-08 17:08

本文主要是介绍aardio - 向API函数传址取文本的方法探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于Aardio中调用API时,变量传址的方法,一般用 struct 类型可以了,用起来很简单。

 

但是对于文本型,方法可能很多。

本文重点探讨一下传递各种类型变量给API函数,并取回文本型数据的方法。

下面就以 GetWindowText 为例,演示各种取API中文本数据的方法:

import console; 
import winvar gwt,t,r//===========================================================console.log('\n先声明,再调用:\n')//声明为string类型
gwt = ::User32.api("GetWindowTextA","int(addr,string,int)")// 用string类型变量t = string.repeat(255,'\x0')r = gwt (..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('1、声明为 string,传递 string,变量值:'+t,r+"个字符")// 用buffer类型变量t = raw.buffer(255)r = gwt (..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('2、声明为 string,传递 buffer,变量值:'+ t,r+"个字符")//声明为string&类型
gwt = ::User32.api("GetWindowTextA","int(addr,string&,int)")// 用string类型变量r,t = gwt (..win.getForeground(),string.repeat(255,'\x0'),255)t = raw.tostring(raw.toPointer(t))console.log('3、声明为 string&,传递 string,返回值:'+t,r+"个字符")r,t = gwt (..win.getForeground(),raw.buffer(255),255)t = raw.tostring(raw.toPointer(t))console.log('4、声明为 string&,传递 buffer,返回值:'+t,r+"个字符")//声明为pointer类型
gwt = ::User32.api("GetWindowTextA","int(addr,pointer,int)")// 用string类型变量t = string.repeat(255,'\x0')r = gwt (..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('5、声明为 pointer,传递 string,变量值:'+ t,r+"个字符")// 用buffer类型变量t = raw.buffer(255)r = gwt (..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('6、声明为 pointer,传递 buffer,变量值:'+ t,r+"个字符")//声明为struct&类型
gwt = ::User32.api("GetWindowTextA","int(addr,struct&,int)")// 用struct类型变量t = {byte t[255]}r = gwt (..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t.t))console.log('7、声明为 struct&,传递 struct,变量值:'+ t,r+"个字符")// 用struct类型变量r,t = gwt (..win.getForeground(),{byte t[255]},255)t = raw.tostring(raw.toPointer(t.t))console.log('8、声明为 struct&,传递 struct,变量值:'+ t,r+"个字符")//===========================================================console.log('\n不声明,直接调用:\n')//直接传递string类型t = string.repeat(255,'\x0')r = User32.GetWindowTextA(..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('1、直接传递 string,变量值:'+ t,r+"个字符")//直接传递buffer类型t = raw.buffer(255)r = User32.GetWindowTextA(..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t))console.log('2、直接传递 buffer,变量值:'+ t,r+"个字符")//直接传递struct类型t = {byte t[255]}r = User32.GetWindowTextA(..win.getForeground(),t,255)t = raw.tostring(raw.toPointer(t.t))console.log('3、直接传递 struct,变量值:'+ t,r+"个字符")//直接传递struct类型r,t = User32.GetWindowTextA(..win.getForeground(),{byte t[255]},255)t = raw.tostring(raw.toPointer(t.t))console.log('4、直接传递 struct,返回值:'+ t,r+"个字符")//===========================================================
console.log('\n')
console.pause(true);

运行结果如下:

============================================================

有其他方法的,欢迎留言告知。

这篇关于aardio - 向API函数传址取文本的方法探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/371272

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam