Microsoft WinAPI文档似乎建议user32.dll包含一个名为 GetNextWindow()
的函数,该函数应该允许它通过重复调用此函数以Z顺序枚举打开的窗口。
Pinvoke通常会给我必要的DllImport
语句,以使用C#中的WinAPI函数。但是,对于GetNextWindow()
,它没有条目。所以我试图构造自己的:
[DllImport("user32.dll")]
static extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd);
不幸的是,当尝试调用它时,我得到一个
EntryPointNotFoundException
:Unable to find an entry point named 'GetNextWindow' in DLL 'user32.dll'.
这似乎仅适用于
GetNextWindow()
; Pinvoke上列出的其他功能也可以。我可以在不引发异常的情况下调用GetTopWindow()
和GetWindowText()
。当然,如果您可以提出一种完全不同的方式来按当前的Z顺序枚举窗口,我也很高兴听到。
最佳答案
GetNextWindow()实际上是 GetWindow()的宏,而不是实际的API方法。这是为了与Win16 API向后兼容。
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
enum GetWindow_Cmd : uint {
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
(来自Pinvoke.net)