在DLL里如何获取宿主的HWND(不传参数的情况下) 我在CSDN上看过这样的问题,那个帖子里的回答是遍历所有进程,然后在遍历所有模块,然后在用模块跟DLL实例比较。我试过了,但是发现根本就不行,因为不同进程的模块可能是一样的,所以那种办法根本就不行。求高手解答。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在dll中获得当前进程ID和线程ID.再通过这个得到窗口句柄. 这是我dll里的函数,传的参数的当前DLL的实例,是否正确?HWND GetHost(HINSTANCE hin){ HANDLE hProcess=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); HANDLE hModule; HINSTANCE hh=hdll; PROCESSENTRY32 pro32; if((HANDLE)-1==hProcess) return NULL; pro32.dwSize=sizeof(PROCESSENTRY32); MODULEENTRY32 module32; module32.dwSize=sizeof(MODULEENTRY32); BOOL bl1=::Process32First(hProcess,&pro32); BOOL bl2; while(bl1) { hModule=::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pro32.th32ProcessID); if((HANDLE)-1==hModule) { CloseHandle(hProcess); return NULL; } bl2=::Module32First(hModule,&module32); while(bl2) { if(hin==module32.hModule) { CloseHandle(hModule); CloseHandle(hProcess); //成功 return FindHWND(pro32.th32ProcessID); } bl2=::Module32Next(hModule,&module32); } CloseHandle(hModule); bl1=::Process32Next(hProcess,&pro32); } ::CloseHandle(hProcess); return NULL;} 自己解决了,用GetCurrentProcessId获取宿主的进程ID 辞职中,散分求好运! 基于RTP\RTSP协议的数据传输时,发送文件,文件名要如何发送... 大家帮帮我好吗? VC有消息机制吗? 二进制文件的合并 为什么我的vs2005没有datagridview控件??? 在线求助:将一张表中内容搬到另一个数据库中某张表,ODBC中报告出错,错在哪里? 分数不多,只为求知!请大侠赐教! 如何获取对话框的句柄指针!很简单的问题!不要错过机会阿! 树形控件的问题 实时监控火狐浏览器中输入的URL,确定是否关闭该页面。。。 求一个窗体创建函数
{
HANDLE hProcess=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
HANDLE hModule;
HINSTANCE hh=hdll;
PROCESSENTRY32 pro32;
if((HANDLE)-1==hProcess)
return NULL;
pro32.dwSize=sizeof(PROCESSENTRY32);
MODULEENTRY32 module32;
module32.dwSize=sizeof(MODULEENTRY32);
BOOL bl1=::Process32First(hProcess,&pro32);
BOOL bl2;
while(bl1)
{
hModule=::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pro32.th32ProcessID);
if((HANDLE)-1==hModule)
{
CloseHandle(hProcess);
return NULL;
}
bl2=::Module32First(hModule,&module32);
while(bl2)
{
if(hin==module32.hModule)
{
CloseHandle(hModule);
CloseHandle(hProcess);
//成功
return FindHWND(pro32.th32ProcessID);
}
bl2=::Module32Next(hModule,&module32);
}
CloseHandle(hModule);
bl1=::Process32Next(hProcess,&pro32);
}
::CloseHandle(hProcess);
return NULL;
}