我怎样才能在C#中使用GetNextWindow()?

Microsoft WinAPI文档似乎build议user32.dll包含一个名为GetNextWindow()的函数,据称允许通过重复调用此函数来枚举打开的窗口,以其Z顺序。

Pinvoke通常会给我必要的DllImport语句来使用C#中的WinAPI函数。 但是,对于GetNextWindow()它没有条目。 所以我试图构build自己的:

 [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上列出的其他function都没有问题。 我可以调用GetTopWindow()GetWindowText()而不会引发exception。

当然,如果你可以build议一个完全不同的方式来枚举当前的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 )

GetNextWindow是一个调用GetWindow的c ++宏,所以你不能从.NET调用它。 改为调用GetWindow。

来自MSDN :

使用此函数与设置了GW_HWNDNEXT或GW_HWNDPREV标志的GetWindow函数相同