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顺序的窗口,我也很高兴听到这一点。
答案 0 :(得分:24)
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)
答案 1 :(得分:2)
GetNextWindow是一个调用GetWindow的c ++宏,所以你不能从.NET调用它。改为调用GetWindow。
来自MSDN:
使用此函数与使用GW_HWNDNEXT或GW_HWNDPREV标志设置调用GetWindow函数相同