因为结束窗口可以调用EndDialog,所以此问题归结于是如何找出此窗口的句柄。
1、法一
通过自己的线程创建此窗口,然后通过线程句柄枚举窗口。
2、法二
因为法一的缺点是窗口跑在线程必竟不太恰当,那么有没有更好的方法呢?
通过法一,在枚举窗口时,得到窗口句柄,此时通过句柄得到窗口类名:
0 == (iResult = ::GetClassName(hwnd, wWindClassName, MAX_PATH))
这样我们不通过法一,而是通过类名找到窗口句柄了:
// 测试:根据窗口类名找窗口句柄
if ( NULL != (hWndTemp = ::FindWindowEx(NULL, NULL, wWindClassName, NULL)) )
{
L_WARN(L"FindWindowEx failed\n");
}
在XP开机的登录框中得到的窗口信息为:
在XP锁定时得到的窗口信息为:
发现登录框类名为“#32770”,可见它是标准对话框。