45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:枚举桌面窗口的方法

枚举桌面窗口的方法

2016-09-08 19:01:20 来源:www.45fan.com 【

枚举桌面窗口的方法

1楼 bugn

EnumWindows


2楼 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

)

是用来枚举子窗口的

 

本文地址:http://www.45fan.com/a/question/73760.html
Tags: 桌面 办法 枚举
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部