根据进程id查找窗体句柄的方法 百度找到的不好用 自己写了个更简单的分享给大家
本帖最后由 77341991 于 2014-4-28 15:15 编辑//方法一 SendMessage WM_CLOSE无效
HWND GetProcessIdToHand(DWORD dwProcessID)
{
HWND hWnd = FindWindowEx(HWND_MESSAGE,0,NULL,0); //HWND_MESSAGE 仅查找所有消息窗口
int nCount = 0;
while(hWnd)
{
DWORD pid = 0;
DWORD dwTheardId = GetWindowThreadProcessId(hWnd,&pid);
//OutputDebugString(sPath+"\r\n");
if(dwProcessID == pid)
break;
hWnd = GetNextWindow(hWnd,GW_HWNDNEXT);//同级别下一个
}
return hWnd;
}
//方法2 使用SendMessage有效 建议用这个
HWND GetProcessIdToHand(DWORD dwProcessId)
{
HWND _hWnd = FindWindow(0,0);
_hWnd = GetNextWindow(_hWnd,GW_HWNDLAST); //同级别最后一个
while(_hWnd)
{
DWORD lpdwProcessId;//标识地址符
DWORD tid=::GetWindowThreadProcessId(_hWnd,&lpdwProcessId);//取进程ID
//CString strName = GetProcessExeName(lpdwProcessId);
if(lpdwProcessId == dwProcessId)
{
TCHAR lpClassName = {0};
GetClassName(_hWnd,lpClassName,MAX_PATH);
if(stricmp(lpClassName,"这里填写你要查找的主窗体类名") == 0)//
{
return _hWnd;
}
}
_hWnd = GetNextWindow(_hWnd,GW_HWNDPREV);//同级别上一个
}
return 0;
}
很专业 赞一个 太专业了,我看不懂。{:1_907:} 天书一样····{:301_973:} 感谢楼主分享。 大神!真大神啊! 学习了,{:1_918:}
页:
[1]