Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

From HWND to control

Tags:

c#

winforms

Im using the FindWindow method from user32.dll to find a window and get the handle, but is it possible to get the form control from the handle? and the use it like an ordinary form? Example:

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

or do I have to continue to use the methods in user32.dll to send a message to the window?

like image 293
CruelIO Avatar asked Oct 22 '10 11:10

CruelIO


2 Answers

If it's a managed window (you've created it with System.Windows.Forms, and it has inherited from System.Windows.Forms.Control) you can get a reference to the Control object with

Control.FromHandle(myIntPtr);

Then you just get the parent of the control until you get the form.

If not, you can't get a Control object, what you can do though is to is to create a NativeWindow, and assign the IntPtr handle to the object with the AssignHandle. That will at least give you some access to the WndProc, and similar, but that's it.

like image 124
Onkelborg Avatar answered Nov 19 '22 15:11

Onkelborg


Have you tried Control.FromHandle()? Forms are (inherit from) Controls. If you hit a nested control, you'll have to search up through its parents until you hit your Form.

This assumes there actually is a Form somewhere, and you've just used the user32 methods to locate its HWND.

like image 4
Pontus Gagge Avatar answered Nov 19 '22 14:11

Pontus Gagge