我正在开发一个应用程序,最终将成为推动WPF应用程序UI测试的API.
在我们正在进行的初始测试的一个点上,我们得到2个Windows安全弹出窗口.我们有一些循环10次的代码,它使用FindWindowByCaption方法获取其中一个弹出窗口的句柄并输入信息并单击确定.
10次中有9次可以正常运行,但我们偶尔会看到看起来像是一场比赛的情况.我的怀疑是,当只有一个窗口打开时,循环开始,而当它输入信息时,第二个窗口打开并窃取焦点; 在此之后它只是无限期地挂起.
我想知道的是,如果有任何方法来获取给定标题的所有窗口句柄,那么我们可以等到2开始循环之前.
如何在C++中将窗口的屏幕截图作为位图对象?假设我已经有了窗口句柄.而且我想知道当窗口处于最小化状态时是否可以获取窗口的屏幕截图?
这里的C++意味着VC++包含与Windows XP +(win32)相关的所有库.
Microsoft WinAPI文档似乎表明user32.dll包含一个被调用的函数GetNextWindow(),该函数允许通过重复调用此函数来枚举其Z顺序中的打开窗口.
Pinvoke通常给我一个必要的DllImport声明来使用C#中的WinAPI函数.但是,因为GetNextWindow()它没有条目.所以我试着构建自己的:
[DllImport("user32.dll")]
static extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd);
Run Code Online (Sandbox Code Playgroud)
不幸的是,当试图打电话给我时,我得到一个EntryPointNotFoundException说法:
Unable to find an entry point named 'GetNextWindow' in DLL 'user32.dll'.
Run Code Online (Sandbox Code Playgroud)
这似乎只适用于GetNextWindow(); Pinvoke上列出的其他功能都很好.我可以打电话GetTopWindow()而GetWindowText()不会抛出异常.
当然,如果您可以建议一种完全不同的方式来枚举当前Z顺序中的窗口,我也很高兴听到这一点.