
强制转换是肯定不行的,我想了个笨方法。在获得某进程的Id后,获取桌面上每个窗口的进程Id,再与先获得的进程Id进行比较,然后就能知道哪个窗口属于哪个进程的了。
另外网上找的一篇文章:>
HWND nhWnd[10];
int count;
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID ;
GetWindowThreadProcessId(hwnd, &dwID) ;
if (dwID == (DWORD)lParam && IsWindowVisible(hwnd) && GetParent(hwnd) == NULL)
{
nhWnd[count++] = hwnd;
}
return (count == 10) false : true;
}
void GetProcessTopWindows(DWORD dwPID)
{
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
}
GetProcessTopWindows(dwPID)//dwPID进程句柄
将属于 dwPID进程的所有顶层可见窗口句柄保存到nhWnd 中 最多 10 个
思路有问题,应该如下做(只限于有标题栏的窗口)
1找到窗口,通过标题,如下:
HWND
myHwnd;
/////////找到窗口的HDR
myHwnd=::FindWindow(
NULL,/
class
name/
"窗口名称"
//LPCTSTR
lpWindowName
//
window
name
);
if(myHwnd==NULL)
//"Cannot
Find");
2
//找到窗口的位置及大小
::GetWindowRect(
myHwnd,
//
handle
to
window
mRect
//
client
coordinates
);
3获得屏幕句柄
HDC
hdc
=
::GetDC(NULL);
4通过mRect
和hdc
对界面进行 *** 作
对于当前窗口:HWND hwnd = GetActiveWindow();
对于特定窗口:HWND hwnd = FindWindow(NULL, TEXT("my window"));
这两个是API函数,与MFC无关,因此通用性较强,可以在MFC中使用,也可以是纯WIN32中使用。
以上就是关于VC怎么通过进程ID得到窗口句柄全部的内容,包括:VC怎么通过进程ID得到窗口句柄、vc 子窗口怎么调用父窗口的函数和变量啊、VC中如何获得其他进程的窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)