枚举桌面窗口的方法
1楼 bugn EnumWindows2楼 Tice BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value );
3楼 Tice 或 BOOL CALLBACK EnumWindowsProc( HWND hwnd, // handle to parent window LPARAM lParam // application-defined value );
4楼 ZencengLiu Maybe : #include "tlhelp32.h" DWORD ProcID[256]; PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); HINSTANCE handle = (HINSTANCE)CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(handle) { if(Process32First(handle,&pe32)) { do { LPSTR pCurChar = pe32.szExeFile ; ProcID[n] = pe32.th32ProcessID; printf("%d/t%s/n",n,pCurChar); ++n; } while(Process32Next(handle,&pe32)); } CloseHandle(handle);
5楼 ZencengLiu 这好像是列举进程的 !
6楼 yarao BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam ); 和 BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam); 两个函数 其中用EnumWindows来枚举窗口,lpEnumFunc 是指向第二(CallBack)函数的函数指针 当你调用EnumWindows後它就开始枚举窗口,每当枚举到一个窗口它就调用EnumWindowsProc 你可以在EnumWindowsProc中写入你对EnumWindowsProc的处理动作! 列子 在对话框中枚举每一个主(注意:对子窗口还要用其他的函数)窗口并把 窗口的Caption加入到对话框的列表框中: 对话框中有一个列表框 其ID为 IDC_LIST1 一个按钮 在对话框的枚举窗口按钮的WM_LBOUTTONDOWN消息中写下 EnumWindows(EnumWindowsProc,(LPARAM)hwnd); 其中EnumWindowsProc 为回调函数地址。hwnd为对话框窗口的句柄 而EnumWindowsProc的实现如下 BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)/*枚举窗口过程*/ { CHAR szCaption[500]; HWND hdlg; /*对话框的句柄*/ long llen; hdlg = (HWND)lParam; llen = SendMessage(hwnd,WM_GETTEXTLENGTH,0,0)+1;/*得到窗口的Caption的 长度*/ if((llen>1)&&(llen<500)) { GetWindowText(hwnd,szCaption,sizeof(szCaption));/*取得窗口的Caption 并存放在szCaption中*/ SendDlgItemMessage(hdlg,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szCaption); /*把窗口的Caption加到对话框中*/ } return true; } 以上程序 只能列出主窗口!无法列出主窗口的子窗口哦!
7楼 yarao 改正 /*把窗口的Caption加到对话框中*/ 为 /*把窗口的Caption加到对话框的列表框中*/
8楼 Tice 用FindWindow()就可以列主窗口
9楼 Tice 对不起,打错了用FindWindow()就可以列子窗口
10楼 gameboy999 我知道至少有三种方法可以枚举所有窗体,当然子窗体也可以同理来枚举了。 1。用getwindow 直接获取从0到65535的所有窗体,如果返回值不为0则存在该窗体。 不过好象这种方法有问题@@ 2.用getwindow 的参数,先取得最前面的,然后不断取得他的next,直到没有窗体得到 听说容易造成死机:0 3.EnumWindows才是最好的选择,不但可以枚举普通窗体,也可以枚举子窗体,不过在使用上也最麻烦。 有兴趣的话可以看看我的程序 论坛 共享软件 网络辅助中的 i-Fresher,里面有枚举所有窗体及其子窗体的功能,我可以提供原代码,不过是delphi写的。
11楼 yarao BOOL EnumChildWindows( HWND hWndParent, // handle to parent window WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value ); 和 BOOL EnumChildWindows( HWND hWndParent, // handle to parent window WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value ) 是用来枚举子窗口的