От HWND до контроля - PullRequest
       1

От HWND до контроля

11 голосов
/ 22 октября 2010

Я использую метод FindWindow из user32.dll, чтобы найти окно и получить дескриптор, но возможно ли получить элемент управления формы из дескриптора? а польза это как обычная форма? Пример:

int myhwnd = FindWindow(null, "MyWindow");
form myform = SomeMagic.GetFormFromHandle(myhwnd);
myform.Visible = false;

или я должен продолжать использовать методы из user32.dll для отправки сообщения в окно?

Ответы [ 4 ]

17 голосов
/ 22 октября 2010

Если это управляемое окно (вы создали его с помощью System.Windows.Forms и оно унаследовало от System.Windows.Forms.Control), вы можете получить ссылку на объект Control с помощью

Control.FromHandle(myIntPtr);

Тогда вы просто получаете родительский элемент управления, пока не получите форму.

Если нет, вы не можете получить объект Control, хотя вы можете создать NativeWindow и назначить дескриптор IntPtr для объекта с помощью AssignHandle. По крайней мере, это даст вам некоторый доступ к WndProc и тому подобное, но это все.

2 голосов
/ 22 октября 2010

Вы пробовали Control.FromHandle () ? Формы являются (наследуются) от Controls. Если вы нажмете на вложенный элемент управления, вам придется искать его родителей, пока вы не нажмете на свою форму.

Это предполагает, что на самом деле где-то есть Form, и вы только что использовали методы user32, чтобы найти его HWND.

1 голос
/ 22 октября 2010

Если окно принадлежит вашему приложению, вы можете использовать Control.FromHandle Method . В противном случае вам придется продолжать использовать win api. Например, чтобы скрыть окно, вам нужно вызвать ShowWindow Function.

1 голос
/ 22 октября 2010

Очень сложно обернуть класс Form вокруг дескриптора окна Win32.Полноценной реализации, предоставленной Microsoft, не существует.Таким образом, вы должны использовать собственные функции только для связи с данным дескриптором.

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