易语言 求取进程模块地址的方法.

易语言 求取进程模块地址的方法.,第1张

用这个 给你发个源码~

版本 2

子程序 GetModule, 整数型, , 返回指定进程中指定模块的模块地址

参数 ProcessID, 整数型

参数 模块名称, 文本型

局部变量 hObject, 整数型

局部变量 ModuleEntry32, 模块地址_

局部变量 Module, 模块地址_

' 清除数组 (Module)

hObject = API_CreateToolhelp32Snapshot (8, ProcessID) ' 若id为0表示当前进程

ModuleEntry32结构大小 = 1024

如果真 (寻找第一个32位模块_ (hObject, ModuleEntry32))

循环判断首 ()

如果真 (到小写 (到文本 (ModuleEntry32模块名称)) = 到小写 (模块名称))

API_CloseHandle (hObject)

返回 (ModuleEntry32模块句柄)

如果真结束

循环判断尾 (寻找下一个32位模块_ (hObject, ModuleEntry32))

如果真结束

API_CloseHandle (hObject)

' 调试输出 (Module)

返回 (0)

你粘贴之后直接调用“GetModule”就可以取得了

第一步,进入 *** 作系统桌面

第二步,右键任务栏,点选启动任务管理器

第三步,d出任务管理器窗口

第四步,->选择列

第五步,d出选择进程页列的窗口

第六步,点选图示句柄数的复选框,点击确定

第七步,回到刚才的任务管理器,可以看到句柄数的一列数据

进程句柄和窗口句柄应该是一一对应的关系,一个窗口句柄对应的是一个进程的句柄,我们其实可以先遍历出窗口的句柄,然后再用这个句柄得到进程句柄,这样就OK了

取窗口句柄用FindWindowExA,采用遍历的方法得到所有相同名字的窗口句柄

窗口句柄得到进程ID可以用GetWindowThreadProcessId

#include <windowsh>

#include <stdioh>

#include <tlhelp32h>

void main()

{

PROCESSENTRY32 ProcessEntry = { 0 };

MODULEENTRY32 ModuleEntry = { 0 };

HANDLE hProcessSnap;

HANDLE hModuleSnap;

ProcessEntrydwSize = sizeof(PROCESSENTRY32);

ModuleEntrydwSize = sizeof(MODULEENTRY32);

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照

BOOL bRet = Process32First(hProcessSnap,&ProcessEntry);// 遍历进程快照,轮流显示每个进程的信息,先获得第一个

while(bRet)

{

printf("\n%s\n",ProcessEntryszExeFile);//输出该进程可执行文件名(包括路径)

Sleep(200);

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessEntryth32ProcessID);//循环给每个进程的所有模块拍一个快照

bRet = Module32First(hModuleSnap,&ModuleEntry);// 遍历模块快照,轮流显示每个模块的信息,先获得第一个

while(bRet)

{

printf("\t%s\n",ModuleEntryszExePath);

Sleep(200);

bRet = Module32Next(hModuleSnap,&ModuleEntry);//下一个模块

}

bRet = Process32Next(hProcessSnap,&ProcessEntry);//下一个进程

}

}

The GetProcessHandleFromHwnd function retrieves a process handle from a window handle

HANDLE WINAPI GetProcessHandleFromHwnd(

HWND hwnd,

);

这个函数通过窗口句柄获得进程句柄。有了进程句柄,PID是不是就知道怎么获得了?什么?不知道?那我告诉你,GetProcessId可以通过进程句柄获得进程ID:

DWORD WINAPI GetProcessId(

__in HANDLE Process

);

可以通过指令查询当前进程打开了多少句柄,Linux下有exec函数族可以执行指令,把指令写进去就行了。

-查看当前进程打开了多少句柄数

# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

-根据ID号来查看进程名。

# ps aef|grep ID号

用NtQueryInformationProcess可以查询单个进程的句柄数 但是要打开进程 用NtQuerySystemInformation可以获取所有进程的统计信息,而且没有任何权限要求 这个用一个api就可以解决,你用pdh涉及到的更多

以上就是关于易语言 求取进程模块地址的方法.全部的内容,包括:易语言 求取进程模块地址的方法.、任务管理器怎么查看进程的句柄数、如何在子进程获取父进程的窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9421694.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存