有什么办法可以枚举桌面窗口?
来源:互联网 发布:成长纪念册模板软件 编辑:程序博客网 时间:2024/04/27 20:34
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
)
是用来枚举子窗口的
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
)
是用来枚举子窗口的
- 有什么办法可以枚举桌面窗口?
- 有什么办法可以恢复U盘损坏的数据
- 有什么可以传承
- 那有什么办法可以获取网卡的真实的物理地址呢?
- Seo从业者有什么办法可以提高自身的seo技术?
- 想做一个预览窗口任意大小的camera,有什么好的办法
- 枚举桌面窗口并获取进程信息
- 用什么办法可以解决失眠?
- 什么办法可以恢复手机删除照片
- 微信现在越来越难开了,有什么办法可以快速开很多微信号呢
- 与虎谋皮,饮鸩止渴,却有什么办法呢?
- 有什么办法让积分加快
- 【处理win 7临时文件有什么办法】
- 提高模型创建速度有什么办法?
- Gentoo 做桌面的话,有什么优势?
- 枚举如何使用?有什么用处? enum
- 枚举和define有什么区别
- 执行数据库查询时,如果要查询的数据有很多,假设有1000万条,用什么办法可以提高查询速率?在数据库方面或java代码方面有什么优化的方法
- J2EE中几种面向对象的数据库映射访问策略:
- s1(java)项目实战(固定资产管理)(asset_Asset )
- 枚举的简单应用(构思)
- Test
- s1(java)项目实战(固定资产管理)(asset_AssetAdd )
- 有什么办法可以枚举桌面窗口?
- s1(java)项目实战(固定资产管理)(asset_InAndOut )
- s1(java)项目实战(固定资产管理)(frm_mainframe )
- s1(java)项目实战(固定资产管理)(op_AssetReturn )
- Custom Iterators(这是一篇很好的介绍Functional Programming的文章)
- s1(java)项目实战(固定资产管理)(op_Draw )
- s1(java)项目实战(固定资产管理)(op_EmployeeDialog )
- s1(java)项目实战(固定资产管理)(op_login )
- 区分计算机各个部件的用途