QQ登录

只需一步,快速开始

枚举全部窗口及关闭等任意操作

[ 复制链接 ]

枚举全部窗口及关闭等任意操作

枚举全部窗口及关闭等任意操作
枚举全部窗口及关闭等任意操作
功能展示
系统运行时会同时运行多个程序,或打开多个窗口,在设备改造时需要对正在运行的上位机软件进行操作,如关闭,点击指定按钮等,当前例程实现获取运行中的全部窗口,并关闭指定窗口功能,效果如图,点击<枚举窗口>按钮,例程会将当前可见窗口罗列在列表框中,在获取窗口过程中对指定窗口进行关闭操作;
要点提示
窗口的枚举功能实现,例程中是通过两函数EnumWindows,EnumWindowsProc完成,在函数EnumWindowsProc()中我们就可以获取全部的窗口句柄,例程中用一个数据链进行了保存。有了全部的窗口句柄我们就可以从中进行遍历,通过函数GetWindowText()查找窗口标题,通过函数GetClassName()查找类名,然后向满足条件的窗口发送一系列的消息,控制满足条件的窗口
实现功能

1.新建基于对话框的应用程序

2.添加一列表控件,ID保存默认<IDC_LIST1>,添加一按钮控件<枚举窗口>关联按钮的点击函数
  1. void CGkbc8Dlg::OnEnumerate()
  2. {
  3.         CListBox *pListBox = (CListBox *)GetDlgItem(IDC_LIST1);
  4.         char cTitle[MAX_PATH];
  5.         char cClassName[MAX_PATH];
  6.         CString sText;
  7.         ::EnumWindows(EnumWindowsProc,NULL);//枚举全部可见窗口
  8.         int nCount = hWnd_List.GetCount();
  9.         for(int i=0;i<nCount;i++)
  10.         {
  11.                 HWND hWnd = hWnd_List.GetAt(hWnd_List.FindIndex(i));
  12.                 ::GetWindowText(hWnd,cTitle,MAX_PATH);
  13.                 if(strcmp(cTitle,"Windows Task Manager") ==0 )//额外实现想要功能,如关闭窗口
  14.                         ::PostMessage(hWnd,WM_CLOSE,0,0);
  15.                 ::GetClassName(hWnd,cClassName,MAX_PATH-1);
  16.                 sText.Format("%d  标题:%s  类名%s",i,cTitle,cClassName);
  17.                 pListBox->AddString(sText);
  18.         }
  19. }
复制代码

3.上面的函数中调用了hWnd_List,EnumWindowsProc(),所以再在函数前边添加以下代码
  1. #include<Afxtempl.h >
  2. CList<HWND,HWND> hWnd_List;
  3. BOOL  CALLBACK  EnumWindowsProc(HWND hWnd, LPARAM lParam)
  4. {
  5.         if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
  6.         {
  7.                 hWnd_List.AddHead(hWnd);
  8.         }
  9.         return true;
  10. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:枚举全部窗口及关闭等任意操作.txt 
文件大小:48 Bytes  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索