首先是它的原型
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // 回调函数的地址--说白了就是回调函数的名字放这
LPARAM lParam // 要是枚举桌面所有窗口添0或NULL就行
);
在来看看回调函数原型
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, //句柄参数,这里返回的就是窗口句柄
LPARAM lParam // application-defined value--什么意思不知道,我是用不上
);
回调函数使用的时候一定要把上面的原型写出来,要一模一样,EnumWindowsProc这个函数名字可以
随便启的,比如:BOOL CALLBACK abcd(HWND hwnd,LPARAM lParam);把“;”去掉接函数体就可以了,函数体就是你要执行的代码,比如:
BOOL CALLBACK abcd(HWND hwnd,LPARAM lParam)
{
CString text;
int len=::GetWindowTextLength (hwnd);//获得窗口句柄hwnd指向的窗口标题长度
::GetWindowText (hwnd,(LPSTR)(LPCTSTR)text,len+1);获得窗口句柄hwnd指向的窗口标题
m_list.AddString ((LPSTR)(LPCTSTR)text);//m_list是指向列表框的CListBox m_list
return 1;//这里必须返回1,返回0就不在枚举了
}
example:
BOOL CALLBACK MyEnumProc(HWND hwnd, LPARAM lParam )
{
printf("窗口句柄是%x,传递的参数是%d", hwnd, lParam);
}
main
{
int n=3;//任意的一个参数
EnumWindows(MyEnumProc, (LPARAM)n);
...
}