VC怎么通过进程ID得到窗口句柄

VC怎么通过进程ID得到窗口句柄,第1张

强制转换是肯定不行的,我想了个笨方法。在获得某进程的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中如何获得其他进程的窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10068672.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存