QQ登录

只需一步,快速开始

获取当前全部打开窗口两种方法--上位机vc

[ 复制链接 ]
获取当前全部打开窗口两种方法--上位机vc

获取当前全部打开窗口两种方法--上位机vc

获取当前全部打开窗口两种方法--上位机vc


遍历全部已打开窗口是很常用的功能,当前例程用两种方法实现当前全部打开窗口的获取功能

拖拽一列表控件ID保持默认IDC_LIST1,再添加两按钮,关联点击 函数,实现两种功能;
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  4.         pList->DeleteAllItems();
  5.         pList->SetRedraw(FALSE);

  6.         CWnd* pDesktopWnd = CWnd::GetDesktopWindow();//获得桌面窗口
  7.         CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);//获得第一个子窗口
  8.         while (pWnd != NULL)
  9.         {               
  10.                 int nItem = pList->GetItemCount();

  11.                 //获得窗口类名
  12.                 CString strClassName = _T("");
  13.                 ::GetClassName(pWnd->GetSafeHwnd(), strClassName.GetBuffer(256), 256);
  14.                 strClassName.ReleaseBuffer();
  15.                 pList->InsertItem(nItem, strClassName);

  16.                 //获得窗口标题
  17.                 CString strWindowText= _T("");
  18.                 ::GetWindowText(pWnd->GetSafeHwnd(), strWindowText.GetBuffer(256), 256);
  19.                 strWindowText.ReleaseBuffer();
  20.                 pList->SetItemText(nItem, 1, strWindowText);

  21.                 //继续下一个子窗口
  22.                 pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  23.         }

  24.         pList->SetRedraw(TRUE);       
  25. }



  26. BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
  27. {
  28.         if (hwnd == NULL)
  29.         {
  30.                 return FALSE;
  31.         }
  32.         CListCtrl* pList = (CListCtrl*)lParam;
  33.         int nItem = pList->GetItemCount();
  34.         //获得窗口类名
  35.         CString strClassName = _T("");
  36.         ::GetClassName(hwnd, strClassName.GetBuffer(256), 256);
  37.         strClassName.ReleaseBuffer();
  38.         pList->InsertItem(nItem, strClassName);
  39.         //获得窗口标题
  40.         CString strWindowText= _T("");
  41.         ::GetWindowText(hwnd, strWindowText.GetBuffer(256), 256);
  42.         strWindowText.ReleaseBuffer();
  43.         pList->SetItemText(nItem, 1, strWindowText);
  44.         return TRUE;
  45. }
  46. void CGkbc8Dlg::OnButton2()
  47. {
  48.         CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  49.         pList->DeleteAllItems();
  50.         pList->SetRedraw(FALSE);
  51.         ::EnumWindows(EnumWndProc, (LPARAM)pList);//枚举窗口
  52.         pList->SetRedraw(TRUE);
  53. }
复制代码



记得列表控件在程序 初始化时添加表头及一些属性的设置
  1. CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  2.         pList->ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);
  3.         pList->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  4.         pList->InsertColumn(0, _T("窗口类名"), LVCFMT_LEFT, 150);
  5.         pList->InsertColumn(1, _T("窗口标题"), LVCFMT_LEFT, 150);
复制代码
请点击此处下载

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

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

文件名称:获取当前全部打开窗口两种方法--上位机vc.rar 
文件大小:125.26 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


回复

使用道具 举报

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