2010-10-22 4 views
10

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

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

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

ответ

14

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

Control.FromHandle(myIntPtr); 

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

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

1

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

2

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

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

1

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

Смежные вопросы