根据进程id获取主窗口句柄

EnumWindows枚举屏幕上的所有顶层窗口,不包括子窗口
BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
第一个参数是WNDENUMPROC类型的回调函数,每个枚举窗口都会被调用一次,而且会把窗口的句柄作为参数传给该回调函数,如果该回调函数返回FALSE则停止枚举
第二个参数可以传入我们自定义的数据,这里传入一个包含进程号和窗口句柄的结构,进程号假设已经获取到,在找到该进程号对应的窗口时将窗口句柄赋值给该结构的句柄变量
回调函数的形式
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
第一个参数为窗口句柄,第二个参数是传给EnumWindows的lParam参数 

struct ProcessWindowData
{
	HWND hWnd;
	unsigned long lProcessId;
};

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
	ProcessWindowData& wndData = *(ProcessWindowData*)lParam;
	unsigned long lProcessId = 0;
	::GetWindowThreadProcessId(hWnd, &lProcessId);
	if ((wndData.lProcessId != lProcessId) || (::GetWindow(hWnd, GW_OWNER) != (HWND)0) || !::IsWindowVisible(hWnd))
	{
		return TRUE;
	}
	wndData.hWnd = hWnd;
	return FALSE;
}

HWND GetMainWindowHwnd(unsigned long lProcessId)
{
    ProcessWindowData wndData;
	wndData.hWnd = 0;
	wndData.lProcessId = lProcessId;
	::EnumWindows(EnumWindowsProc, (LPARAM)&wndData);
	return wndData.hWnd;
}

如果要枚举指定桌面的窗口可以使用EnumDesktopWindows

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值