Windows API EnmuWindows的学习使用

  最近一直在纠结EnmuWindows的使用方法,后来才搞明白,现将自己测试用的代码贴出来,下面对代码做一个解释。

 1 #include<windows.h>
 2 #include<string>
 3 /****************************************************************************
 4 当你调用完EnumWindows(EnumWindowsProc ,NULL );后。系统自动会枚举所有的窗口
 5 每当枚举到一个窗口,就会自动进入EnumWindowsProc,你可在函数里利用hWnd句柄处理
 6 你要做的事情,比如获取窗口标题。当执行完你自己需要处理的代码后,退出函数。系统又
 7 会枚举下一个窗口,当获得下一个窗口后,又会再次进入EnumWindows(EnumWindowsProc ,NULL )
 8 ****************************************************************************/
 9 BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
10 {
11     if (GetParent(hWnd) == NULL  &&  IsWindowVisible(hWnd))  //判断是否顶层窗口并且可见
12     {//在这个函数中可以进行你需要的操作
13         char WindowTitle[100];
14         ::GetWindowText(hWnd, WindowTitle, 100);//获取WindowTitle
15         if (strcmp(WindowTitle, (char *)lParam) == 0)//如果两个字符串相同
16         {
17 
18             ::MessageBox(NULL, WindowTitle, NULL, MB_OK);//如果匹配上以对话框的形式打印出来
19             //停止枚举返回false
20             return false;
21         }    
22     }
23     return true;
24 }
25  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
26 {
27     char TestTitle[100] = "httpd";//为了方便我在这里设置了字符串为窗口的WinCaption
28     EnumWindows(EnumWindowsProc, (LPARAM)TestTitle);//第一个参数是回调函数,第二个是回调函数的第二个参数。
29     
30 }

BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam );该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数,其中lParam是传递给lpEnumFunc的参数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。

 

这个例子的功能是在main函数输入一个窗口的WinCaption,也就是你想要查找的窗口的WinCaption,然后枚举所有的桌面窗口调用EnumWindowsProc函数,直到找到所要查找的窗口时用MessageBox()函数将Wincaption的名字显示出来。停止枚举。就是这么简单,本程序创建一个win32应用程序,可以直接运行。在vs2015上测试通过。

posted @ 2016-08-01 18:30  有梦想不彷徨  阅读(266)  评论(0编辑  收藏  举报