C++如何枚举已经打开的窗口,如何获取窗口名称,以及窗口类 C++如何枚举已经打开的窗口,如何获取窗口名称,以及窗口类,最好能给个实例谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MFC有一套转换机制,MFC的窗口类,可以得到类,如果不是,会给你一个转换后的MFC类,可不一定对 HANDLE hSnapShot = NULL;//进程映像int iNum;CString myCmd = (CString)CommandLineToArgvW((LPCWSTR)GetCommandLine(),&iNum)[0];//得到当前程序命令行的第一个参数int iStart = 0;int iEnd = 0;while (iStart >= 0){ iEnd = iStart; iStart = myCmd.Find(_T("\\"),iStart + 1);}if (myCmd.Find(_T("\\"), 0) <0) iEnd = -1;myCmd = myCmd.Right(myCmd.GetLength() - iEnd - 1);// 实际运行文件名,不含路径hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获取当前进程快照PROCESSENTRY32 prosInfo;//定义PROCESSENTRY32结构prosInfo.dwSize = sizeof(prosInfo);//设置PROCESSENTRY32结构大小BOOL bStatus = Process32First(hSnapShot, &prosInfo);//获得第一个进程的句柄while(bStatus){ CString strName = prosInfo.szExeFile; CString strProcessID; // 进程ID strProcessID.Format(_T("%d"), prosInfo.th32ProcessID); bStatus = Process32Next(hSnapShot, &prosInfo);//下一个}CloseHandle(hSnapShot);//关闭快照 http://www.vckbase.com/document/viewdoc/?id=1482 // 加上头文件#include <tlhelp32.h> 有一个非常不错的办法,去下个spy4win的程序,用它捕获到的窗口,它还可以生成怎样捕获枚举到这个窗口的VC,VB,Delphi代码. 引用的代码是针对进程遍历(可以得到进程的运行程序名和PROCESSID),不适合LZ的问题LZ是要得到窗口标题?应该用EnumWindows来实现这个函数的第一个参数是个回调函数,在回调里写你要显示的东西等我找一下代码,网上有现成的 三楼给的代码是枚举进程的,不是枚举窗口的,用EnumWindows加上自己写的回调函数就行了BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam)//这是回调函数,楼主要的窗口标题,窗口类可以通过hwnd ,调用GetWindowLong来获取 { char str[100]; ::GetWindowText(hwnd,str,sizeof(str)); buf[n++]=str; return 1; } void CEnumWindowsDlg::OnOK()//这里调用EnumWindows来列举窗口 { // TODO: Add extra validation here n=0; EnumWindows(lpEnumFunc,NULL); int i; for(i=0;i<n;i++) { if(buf!="") m_list.AddString(buf.c_str()); } EnumWindows(EnumWindowsProc, 0); // 枚举窗口BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) // 回调函数{ TCHAR szTitle[200]; TCHAR szClass[200]; GetWindowText(hWnd, szTitle, sizeof(szTitle) / sizeof(TCHAR)); // 获取窗口名称 GetClassName(hWnd, szClass, sizeof(szClass) / sizeof(TCHAR)); // 窗口类 return TRUE;} BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam) ; //声明::EnumWindows(EnumWindowsProc,0);//调用BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam){ GetClassName(); GetWindowThreadProcessId(); GetWindowText(); ..... return TRUE ;} EnumWindowsProc不可以用来做回调函数的名字吧 EnumWindowsProc不可以用来做回调函数的名字吧==========可以,回调函数名可以自己随便用,只要不和系统其它API冲突 联想薪资咨询 求高人,如何实现GIF背景透明 EditBox 释放内存 OCX在TOMCAT7上怎么用??? 请教下数据链路帧。。。。 关于webbrowser控件的问题 如何让CPorpertySheet里的TabCtl的标题排列在左边? 请高手帮我介绍RegEnumKeyEx的参数,好多,好乱,好难 祝贺以下用户当选2002年度微软亚洲“最有价值专家”! 使用socket问题 用vc6.0做了一个对话框程序,怎样才能按Enter键后窗口不关闭? 画刷等为什么要先保存原先的呢
int iNum;
CString myCmd = (CString)CommandLineToArgvW((LPCWSTR)GetCommandLine(),&iNum)[0];//得到当前程序命令行的第一个参数
int iStart = 0;
int iEnd = 0;
while (iStart >= 0)
{
iEnd = iStart;
iStart = myCmd.Find(_T("\\"),iStart + 1);
}
if (myCmd.Find(_T("\\"), 0) <0) iEnd = -1;
myCmd = myCmd.Right(myCmd.GetLength() - iEnd - 1);// 实际运行文件名,不含路径hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获取当前进程快照
PROCESSENTRY32 prosInfo;//定义PROCESSENTRY32结构
prosInfo.dwSize = sizeof(prosInfo);//设置PROCESSENTRY32结构大小BOOL bStatus = Process32First(hSnapShot, &prosInfo);//获得第一个进程的句柄
while(bStatus)
{
CString strName = prosInfo.szExeFile;
CString strProcessID; // 进程ID
strProcessID.Format(_T("%d"), prosInfo.th32ProcessID);
bStatus = Process32Next(hSnapShot, &prosInfo);//下一个
}CloseHandle(hSnapShot);//关闭快照
#include <tlhelp32.h>
LZ是要得到窗口标题?
应该用EnumWindows来实现
这个函数的第一个参数是个回调函数,在回调里写你要显示的东西
等我找一下代码,网上有现成的
BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam)
//这是回调函数,楼主要的窗口标题,窗口类可以通过hwnd ,调用GetWindowLong来获取
{
char str[100];
::GetWindowText(hwnd,str,sizeof(str));
buf[n++]=str;
return 1;
}
void CEnumWindowsDlg::OnOK()//这里调用EnumWindows来列举窗口
{
// TODO: Add extra validation here
n=0;
EnumWindows(lpEnumFunc,NULL);
int i;
for(i=0;i<n;i++)
{
if(buf!="")
m_list.AddString(buf.c_str());
}
{
TCHAR szTitle[200];
TCHAR szClass[200];
GetWindowText(hWnd, szTitle, sizeof(szTitle) / sizeof(TCHAR)); // 获取窗口名称
GetClassName(hWnd, szClass, sizeof(szClass) / sizeof(TCHAR)); // 窗口类 return TRUE;
}
{
GetClassName();
GetWindowThreadProcessId();
GetWindowText();
.....
return TRUE ;
}
==========
可以,回调函数名可以自己随便用,只要不和系统其它API冲突