VC FindWindow、FindWindowEx和EnumWindows

一.  对于有指定的窗口标题名称的窗口用FindWindow就可以满足要求;


二. 对于同一应用程序的多个实例枚举(ViewWnd.exe同时运行了3个实例,要把它们都要枚举出来),可以使用FindWindowEx。例如:


HWND hwndLog=NULL;
 HWND hWnd[10]={NULL,NULL,NULL,NULL};
 int nCount =0;
 do
 {
  hwndLog=::FindWindowEx(NULL,hwndLog,NULL,_T("ViewWnd"),);
  if(hwndLog!=NULL && nCount<10 )
   hWnd[nCount++] = hwndLog;
 }
 while(hwndLog!=NULL);


三. 如果对于题栏自动改变,比如我们要检测 Notepad是不是已运行而事先不知道Notepad的标题栏,显然FindWindow和FindWindowEx都是无能为力的。这种情况我们可以通过枚举 windows任务列表的办法来实现


//我自己对要找到的窗口进行相应的操作


BOOL ProceWndTask(HWND hWnd)
{


...............................
 return TRUE;
}


//定义一个EnumWindows要调用的回调函数
BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
          TCHAR szClass[256]={0};
          TCHAR szWindow[256]={0};
          ::GetWindowText(hWnd, szWindow, 255); //获取窗口标题
         ::GetClassName(hWnd, szClass, 255); //获取窗口类名称
        if ( ::IsWindow(hWnd) &&   //判断是否为一个窗口
             ::IsWindowVisible(hWnd) &&  //如果指定的窗口及其父窗口具有WS_VISIBLE风格即可见窗口
             (::GetWindowLong(hWnd, GWL_EXSTYLE)&WS_EX_TOOLWINDOW)!=WS_EX_TOOLWINDOW &&
             ::GetWindowLong(hWnd, GWL_HWNDPARENT)==0 )
        {
                  int i=wcslen(szClass);
                  TCHAR* cFind = NULL;
                 cFind = wcsstr(szWindow,_T("ViewWnd"));
                if(cFind)
                {
                       ProceWndTask(hWnd);
               }
         }


}
 return TRUE;
}


然后在我们的程序里可以调用 EnumWindows(EnumWindowProc, NULL)即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值