最近一直在纠结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上测试通过。
时间: 2024-10-05 17:40:33