
用这个 给你发个源码~
版本 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涉及到的更多
以上就是关于易语言 求取进程模块地址的方法.全部的内容,包括:易语言 求取进程模块地址的方法.、任务管理器怎么查看进程的句柄数、如何在子进程获取父进程的窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)