有什么办法可以枚举桌面窗口?
2007-02-07 14:30
459 查看
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
= 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
)
是用来枚举子窗口的
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
= 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
)
是用来枚举子窗口的
相关文章推荐
- 用什么办法可以解决失眠?
- 弹出窗口Session丢失,是什么原因?有没有办法解决?
- 有什么办法可以消除眼袋吗?
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么 办法主动通知虚拟机进行垃圾回收?
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- Windows桌面应用开发-什么是窗口
- 【账户ID被盗,有什么好的办法可以应急?】
- 除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)
- win2000远程桌面登陆。断开?注销?直接关闭远程桌面窗口?各有什么区别?谁能给个权威的答案?
- 桌面支持--如果窗口不能弹出(可以将级别调到最低)
- 显示桌面按钮不小心被删,有什么办法找回?
- 执行数据库查询时,如果要查询的数据有很多,假设有1000万条,用什么办法可以提高查询速率?在数据库方面或java代码方面有什么优化的方法
- 请问谁知道有什么办法可以--检测是否是同一台电脑通过不同的代理访问某个网站吗?
- Linq to sql 有什么办法可以实现消除列重复?
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 什么办法可以恢复手机删除照片
- 那有什么办法可以获取网卡的真实的物理地址呢?
- win8 开机后无法进入桌面可以进入管理任务器 解决办法
- 远程桌面连接窗口与主机不同步解决办法
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?