Как я могу использовать GetNextWindow () в C #? - PullRequest
7 голосов
/ 28 апреля 2009

Документация 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 ]

24 голосов
/ 28 апреля 2009

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 )

2 голосов
/ 28 апреля 2009

GetNextWindow - это макрос на языке c ++, который вызывает GetWindow, поэтому его нельзя вызывать из .NET. Вместо этого вызовите GetWindow.

С MSDN :

Использование этой функции аналогично вызову функции GetWindow с установленным флагом GW_HWNDNEXT или GW_HWNDPREV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...