我实际只打开了4个窗口,但得到的iWndNums为什么会是100多个呢?
另外,在EnumWindowsProc函数中,我已经得到了窗口的句柄hwnd,我怎么把它转化为CWnd类型,以便对这个窗口操作呢?int iWndNums;
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
// CWnd *pWnd;
iWndNums = 0;
LPARAM lmyParam = 0;
if(EnumDesktopWindows(NULL, (WNDENUMPROC)EnumWindowsProc,lmyParam))
AfxMessageBox("aa");
int a = iWndNums;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
if(hwnd==NULL)
{
return false; //结束枚举
}
//这个hwnd就是枚举到的当前窗体的句柄
//统计窗口的数量
iWndNums++;
//继续枚举
return true;
}
另外,在EnumWindowsProc函数中,我已经得到了窗口的句柄hwnd,我怎么把它转化为CWnd类型,以便对这个窗口操作呢?int iWndNums;
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
// CWnd *pWnd;
iWndNums = 0;
LPARAM lmyParam = 0;
if(EnumDesktopWindows(NULL, (WNDENUMPROC)EnumWindowsProc,lmyParam))
AfxMessageBox("aa");
int a = iWndNums;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
if(hwnd==NULL)
{
return false; //结束枚举
}
//这个hwnd就是枚举到的当前窗体的句柄
//统计窗口的数量
iWndNums++;
//继续枚举
return true;
}
{
//判断是否是主窗口句柄,因为一个进程不定只有一个主窗口哦
if (GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE)
{
iWndNums++;}
return true;
}
用了你的那个判断后,得到的窗口数量明显少了。不过我只开了五个窗口,显示的是9个窗口,这是什么原因呢?劳驾,谢谢!!!
可以了,我试了Attach,为什么会出错呢?(终止,重试,忽略的对话框)
CWnd pWnd;
pWnd.Attach(hWnd);
pWnd.DoSomething...
pWnd.Detach();
static CWnd* PASCAL FromHandle( HWND hWnd );
函数,它会给你一个临时CWnd对象,但是不能保存这个指针.MFC中,将CWnd与Hwnd进行了映射, 我们现在得到的hWnd是其他进程创建的窗口,所以在自己的程序中没有建立映射,因此,你就不能得到CWnd.