我想写一个易语言程序按键改写指针的值 接下来该如何写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想写一个易语言程序按键改写指针的值 接下来该如何写?相关的知识,希望对你有一定的参考价值。
F5按键控制改写指针的值达到改变某种功能 接下来该如何写?
这是对方的进程,不是本进程,是需要打开进程的说明一下,GetWindowThreadProcessId获取进程ID
OpenProcess打开进程句柄
ReadProcessMemory 读取某内存空间的值
WriteProcessMemory 将某个值写入到指定的内存空间
CloseHandle关闭进程句柄
如果读内存我不建议你什么十六转十的方式去读,明明就已经知道偏移了,还编写代码再去转一次,不是浪费了那么一点的CPU资源吗?
以下是两个读写内存的函数,打不开进程句柄那证明对方进程有保护,如果打得开,读写不了内存
再调用一下VirtualProtectEx函数看看!
.版本 2
.子程序 读小数, 小数型
.参数 窗口句柄, 整数型
.参数 内存地址, 整数型
.局部变量 hProcess, 整数型
.局部变量 dwProcessId, 整数型
.局部变量 lpBuffer, 小数型
GetWindowThreadProcessId (窗口句柄, dwProcessId)
hProcess = OpenProcess (2035711, 0, dwProcessId)
ReadProcessMemory (hProcess, 内存地址, lpBuffer, 4, 0)
CloseHandle (hProcess)
返回 (lpBuffer)
.子程序 写小数, 逻辑型
.参数 窗口句柄, 整数型
.参数 内存地址, 整数型
.参数 写入的值, 小数型
.局部变量 dwProcessId, 整数型
.局部变量 hProcess, 整数型
.局部变量 ret, 逻辑型
GetWindowThreadProcessId (窗口句柄, dwProcessId)
hProcess = OpenProcess (2035711, 0, dwProcessId)
ret = WriteProcessMemory (hProcess, 内存地址, 写入的值, 4, 0)
CloseHandle (hProcess)
返回 (ret)
.版本 2
.DLL命令 CloseHandle, 逻辑型, "Kernel32", "CloseHandle"
.参数 hObject, 整数型
.DLL命令 OpenProcess, 整数型, "kernel32", "OpenProcess"
.参数 dwDesiredAccess, 整数型
.参数 bInheritHandle, 整数型
.参数 dwProcessId, 整数型
.DLL命令 GetWindowThreadProcessId, 整数型, "user32.dll", "GetWindowThreadProcessId"
.参数 hWnd, 整数型
.参数 lpdwProcessId, 整数型, 传址
.DLL命令 WriteProcessMemory, 逻辑型, "kernel32.dll", "WriteProcessMemory"
.参数 hProcess, 整数型
.参数 lpBaseAddress, 整数型
.参数 lpBuffer, 小数型, 传址
.参数 nSize, 整数型
.参数 lpNumberOfBytesWritten, 整数型
.DLL命令 ReadProcessMemory, 逻辑型, "kernel32", "ReadProcessMemory"
.参数 hProcess, 整数型
.参数 lpBaseAddress, 整数型
.参数 lpBuffer, 小数型, 传址
.参数 nSize, 整数型
.参数 lpNumberOfBytesRead, 整数型 参考技术A 你这功能不是都搞定了???
异步回调函数
我想写一个函数指针,异步执行完就调用该函数。可是,我不大明白,要是这个函数是某个类中的成员方法,该怎么写这个函数指针声明?
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自已定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。程序在调用一个函数(function)时(通常指api).相当于程序(program)呼叫(Call)了一个函数(function)关系当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的操作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!
Windows 系统还包含着另一种更为广泛的回调机制,即消息机制。消息本是 Windows 的基本控制手段,是一种变相的函数调用。发送消息的目的是通知收方运行一段预先准备好的代码,相当于调用一个函数。消息所附带的 WParam 和 LParam 相当于函数的参数,应用程序可以主动发送消息,更多情况下是坐等 Windows 发送消息。一旦消息进入所属消息队列,便检感兴趣的那些,跳转去执行相应的消息处理代码。操作系统本是为应用程序服务,由应用程序来调用。而应用程序一旦启动,却要反过来等待操作系统的调用。这分明也是一种回调,或者说是一种广义回调。其实,应用程序之间也可以形成这种回调。假如进程 B 收到进程 A 发来的消息,启动了一段代码,其中又向进程 A 发送消息,这就形成了回调。这种回调比较隐蔽,弄不好会搞成递归调用,若缺少终止条件,将会循环不已,直至把程序搞垮。利用消息也可以构成狭义回调。把回调函数地址换成窗口 handle。如此,当需要比较数据大小时,不是去调用回调函数,而是借 API 函数 SendMessage 向指定窗口发送消息。收到消息方负责比较数据大小,把比较结果通过消息本身的返回值传给消息发送方。所实现的功能与回调函数并无不同。当然,此例中改为消息纯属画蛇添脚,反倒把程序搞得很慢。但其他情况下并非总是如此,特别是需要异步调用时,发送消息是一种不错的选择。假如回调函数中包含文件处理之类的低速处理,调用方等不得,需要把同步调用改为异步调用,去启动一个单独的线程,然后马上执行后续代码,其余的事让线程慢慢去做。一个替代办法是借 API 函数 PostMessage 发送一个异步消息,然后立即执行后续代码。这要比自己搞个线程省事许多,而且更安全。
回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指针。 其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。 参考技术A void a()
void b(void *a)
void c()
b((void * ) a);
大致如此,你调试调试本回答被提问者采纳
以上是关于我想写一个易语言程序按键改写指针的值 接下来该如何写?的主要内容,如果未能解决你的问题,请参考以下文章