Как использовать GetNextWindow () в C#?
документация Microsoft WinAPI, похоже, предполагает, что user32.dll содержит функцию с именем GetNextWindow()
который предположительно позволяет перечислять открытые окна в порядке Z, вызывая эту функцию повторно.
вызов PInvoke обычно дает мне необходимые DllImport
оператор для использования функций WinAPI из C#. Однако для 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, я тоже рад это слышать.
2 ответов
GetNextWindow() - это на самом деле макрос GetWindow(), а не фактический метод API. Это для обратной совместимости с API Win16.
[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-это макрос c++, который вызывает GetWindow, поэтому вы не можете вызвать его .Сеть. Вместо этого позвоните в GetWindow.
с MSDN:
использование этой функции равносильно вызову функции GetWindow с флагом gw_hwndnext или gw_hwndprev set