EnumWindows
这个函数列出屏幕上所有的顶级窗口,传递他们的指针给程序定义的回调函数.这个函数会一直工作到列出所有窗口,或者回调函数返回FALSE.
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);
参数
lpEnumFunc
指向程序定义的回调函数的指针.
lParam
传递给回调函数的值,由程序自己定义的.
返回值
如果函数成功了,返回一个非0值.如果失败了,返回0.
注
该函数不会列出子窗口.
该函数比GetWindow更可靠.调用GetWindow的函数执行时可能会陷入死循环中,或者使用一个已经被销毁的窗口句柄.
EnumWindowsProc
这个函数是程序自己定义的回调函数.它获得顶级窗口的句柄.
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);
参数
hwnd
顶级窗口的句柄.
lParam
EnumWindows传过来的参数
返回值
要继续枚举,函数必须返回TRUE,要停止枚举必须返回FALSE.
例:
如果要在列表框里显示所有的窗口
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
char lpWinTitle[256];
::GetWindowText(hwnd,lpWinTitle,256-1);
CString m_strTitle;
m_strTitle.Format("%s",lpWinTitle);
CListBox *p_l = (CListBox *)lParam;
if (!m_strTitle.IsEmpty())
{
p_l->AddString(lpWinTitle);
}
return TRUE;
}
调用EnumWindows(EnumWindowsProc, (LPARAM)GetDlgItem(IDC_LIST1));