我正在寻找一个窗口,其类名是“CLIPBRDWNDCLASS”(它可以在办公室应用程序和其他应用程序中find)。
如果我使用FindWindow或findwindowex,我find了第一个有这个类的HWND,但是我想要所有带有这个类的窗口,所以我决定使用recursionEnumChildWindows枚举所有窗口并find我想要的窗口:
//------------------------------------------------------------------------------- BOOL CALLBACK enum_wnd_proc(HWND h,LParaM lp) { char cls[1024] = {0}; ::GetClassNameA(h,cls,1024); if(std::string(cls) == "CLIPBRDWNDCLASS") { // match! } ::EnumChildWindows(h,enum_wnd_proc,NULL); return TRUE; } //------------------------------------------------------------------------------- int _tmain(int argc,_TCHAR* argv[]) { ::EnumWindows(enum_wnd_proc,NULL); return 0; } //-------------------------------------------------------------------------------
这就是这个窗口不能被EnumWindows返回,只能通过FindWindow返回。
有没有人可以告诉它为什么不起作用?
如何使用Python 2.7创build一个希伯来文名称的文件?
是否有任何可视化工具来实现作为输出结果的SQL查询数据的分层样式?
如何loggingWindows窗体应用程序中的键,而不是集中在窗体上?
Windows:如何在新的命令窗口中运行某些东西,使窗口在进程完成或崩溃时closures?
Python Socket绑定在0.0.0.0上,不能通过127.0.0.1连接
ContactManager.RequestStoreAsync()抛出System.UnauthorizedAccessException
C ++崩溃转储,在Win32exception(使用catch(…)时)的堆栈展开 – VS 2003
分期环境与现场环境相等多less?
在Windows上使用Ruby读取PNG文件失败
Windows控制台中的C ++键input
EnumWindows不起作用的原因是您正在寻找的窗口是一个消息窗口 。
findwindowex可以在两种情况下找到它们:
如果hwndParent和hwndChildAfter都是NULL。
如果您指定“HWND_MESSAGE”作为您的父窗口。
此代码将为您找到所有相关的窗口( 这里是一个解决方案的修改版本):
HWND hWindow = findwindowexA(HWND_MESSAGE,NULL,"CLIPBRDWNDCLASS",NULL); while (hWindow ) { // Do something here with window... // Find next window hWindow = findwindowexA(HWND_MESSAGE,hWindow,NULL); }
还要注意的是,不同于上面的链接中写的,只有消息窗口的GetParent() 不返回HWND_MESSAGE (至少不是我的测试)。
我简单的方法来枚举所有消息窗口:
EnumChildWindows(GetAncestor(findwindowex(HWND_MESSAGE,0,0),GA_PARENT),addr EnumChildProc,0)
// GetAncestor(findwindowex(HWND_MESSAGE,0,0),GA_PARENT)=“GetMessageWindow”(“Message”类)
// GetAncestor(findwindowex(HWND_DESKTOP,0,0),GA_PARENT)= GetDesktopWindow(class“#32769”)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。