谁知道怎么把HWND转成HANDLE?

发布网友 发布时间:2022-04-23 21:18

我来回答

1个回答

热心网友 时间:2023-10-09 22:42

//得到窗口句柄
//得到此窗口的主线程ID
DWORDdwThreadId=::GetWindowThreadProcessId(parenthwnd,0);
//得到当前进程的句柄
HANDLEhApp=GetMoleHandle(NULL);//参数NULL表示获取当前调用函数的进程句柄,你也可以通过完整路径的可执行文件名/DLL,来获取当前加载在当前进程地址空间的其他模块句柄
对补充问题回答:那是不可能的,目前你只能通过GetMoleHandle来获取进程句柄。
补充回答:OpenProcess是新打开一个进程的时候获取其句柄,GetMoleHandle是用来获取已经加载调用进程地址空间的模块句柄。参数NULL表示当前进程句柄(也就是说即使你在DLL里面用了这个函数,若传入的参数为NULL,则返回的并不是DLL的句柄,而是调用DLL的进程句柄),如果要获取进程地址空间中的其他模块句柄,则需要传入模块的名字【此名字可以带全路径(注意路径要用反斜杠表示'\',当然只写文件名最好】如:
#include<windows.h
#include<iostream
usingnamespacestd;voidmain(){HANDLEhandle;
char*pNotFound={themolenotfound!};
cout<<Inthecallingprocessaddresssapce:
;//显示在调用进程地址空间中加载的模块句柄
cout<<thehandleofthecallingprocessis:;
if(handle=GetMoleHandle(NULL))cout<<handle<<endl;//调用进程句柄
elsecout<<pNotFound<<endl;
cout<<thehandleofthekernel32.dllis:;//kernel32.dll模块
if(handle=GetMoleHandle(Lkernel32))cout<<handle<<endl;//参数不带扩展名,会被默认为DLL
elsecout<<pNotFound<<endl;
cout<<thehandleofthentdll.dllis:;//netdll.dll模块
if(handle=GetMoleHandle(Lc:\windows\system32\ntdll.dll))cout<<handle<<endl;//以带全路径文件名的方式传入参数
elsecout<<pNotFound<<endl;
cout<<thehandleofthexxx.dllis:;//xxx.dll模块不存在

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com