Как получить дескриптор окна
Перейти к содержимому

Как получить дескриптор окна

Получение дескриптора окна (HWND)

В этом разделе показано, как в классическом приложении получить маркер окна для окна. область охватывает Windows библиотека пользовательского интерфейса (винуи) 3, Windows Presentation Foundation (WPF)и Windows Forms (WinForms) ; примеры кода представлены в C# и C++/WinRT.

Перечисленные выше платформы разработки и пользовательского интерфейса (в фоновом режиме) основаны на API-интерфейсе Win32. В Win32 объект окна определяется по значению, называемому маркером окна. И тип дескриптора окна — это HWND (хотя он отображается в C# как IntPtr). В любом случае вы услышите термин HWND , используемый в качестве краткой формы для дескриптора окна.

Существует несколько причин для получения HWND для окна в классическом приложении винуи 3, WPF или WinForms. одним из примеров является использование HWND для взаимодействия с определенными объектами среда выполнения Windows (WinRT), которые зависят от CoreWindow для вывода пользовательского интерфейса. Дополнительные сведения см. в разделе Отображение объектов пользовательского интерфейса WinRT, зависящих от CoreWindow.

Винуи 3 с C #

В приведенном ниже коде C# показано, как получить дескриптор окна (HWND) для объекта окна винуи 3. В этом примере вызывается метод жетвиндовхандле для класса взаимодействия C# для WinRT. виндовнативе . Дополнительные сведения о классах взаимодействия C# см. в разделе вызов интерфейсов COM-взаимодействия WinRT из приложения .NET 5 +.

Винуи 3 с C++

В приведенном ниже коде C++/WinRT показано, как получить дескриптор окна (HWND) для объекта Window винуи 3. В этом примере вызывается метод ивиндовнативе:: get_WindowHandle .

WPF с C #

В приведенном ниже коде C# показано, как получить дескриптор окна (HWND) для объекта окна WPF. В этом примере используется класс WindowInteropHelper .

WinForms с C #

В приведенном ниже коде C# показано, как получить дескриптор окна (HWND) для объекта формы WinForms. В этом примере используется свойство NativeWindow. Handle .

Как получить дескриптор окна

После создания окна, создающая функция возвращает дескриптор окна (window handle) , который уникально идентифицирует окно. Дескриптор окна имеет тип данных HWND; прикладная программа должна использовать этот тип при объявлении переменной, которая содержит в себе дескриптор окна. Прикладная программа использует этот дескриптор в других функциях, чтобы направить их действия на это окно.

Прикладная программа может использовать функцию FindWindow , чтобы выявить, существует ли в системе окно с заданным именем класса или именем окна. Если такое окно существует, FindWindow возвращает дескриптор окна. Чтобы ограничить поиск в дочерних окнах отдельной прикладной программы, используйте функцию FindWindowEx .

Функция IsWindow определяет, правильно ли идентифицирует дескриптор окна существующее окно. Имеются специальные константы, которые могут заменять дескриптор окна в некоторых функциях. Например, приложение может использовать HWND_BROADCAST в функциях SendMessage и SendMessageTimeout или HWND_DESKTOP в функции MapWindowPoints .

Как получить дескриптор окна

После создания окна, создающая функция возвращает дескриптор окна (window handle), который уникально идентифицирует окно. Прикладная программа использует этот дескриптор в других функциях, чтобы направить их действия на это окно. Дескриптор окна имеет тип данных HWND; прикладная программа должна использовать этот тип при объявлении переменной, которая содержит в себе дескриптор окна.

Win32 API включает в себя несколько специальных констант, которые могут заменять дескриптор окна в некоторых функциях. Например, прикладная программа может использовать HWND_TOPMOST в функции SendMessageTimeout, HWND_BROADCAST в функции SendMessage, или HWND_DESKTOP в функции MapWindowPoints.

Хотя константа ПУСТО (NULL) — не дескриптор окна, Вы можете использовать её в некоторых функциях, чтобы определить, нет ли воздействия на какое-либо окно. Например, установив значение ПУСТО (NULL) в параметре hwndParent функции CreateWindowEx, создается окно, у которого нет какого либо родителя или владельца. Некоторые функции могут возвращать значение ПУСТО (NULL) вместо дескриптора, указывая, что данное действие не применяется ни к какому окну.

Прикладная программа может использовать функцию FindWindow, чтобы обнаружить, существует ли в системе окно с определенным именем класса или именем окна. Если такое окно существует, FindWindow возвращает дескриптор окна. Чтобы ограничивать поиск в дочерних окнах отдельной прикладной программы, используйте функцию FindWindowEx. Функция IsWindow определяет, правильно ли идентифицирует дескриптор окна существующее окно.

Дополнительные материалы на сайте.

«Шаг 116 — Посылка сообщений между программи»
«N/A»
«N/A»
«N/A»
«N/A»
«N/A»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *