从HWND到控制

Cru*_*lIO 11 c# winforms

我使用user32.dll中的FindWindow方法找到一个窗口并获取句柄,但是可以从句柄获取表单控件吗?并使用它像一个普通的形式?例:

int myhwnd = FindWindow(null, "MyWindow");
form myform = SomeMagic.GetFormFromHandle(myhwnd);
myform.Visible = false;
Run Code Online (Sandbox Code Playgroud)

或者我是否必须继续使用user32.dll中的方法向窗口发送消息?

Onk*_*org 17

如果它是一个托管窗口(您使用System.Windows.Forms创建它,并且它继承自System.Windows.Forms.Control),您可以获得对Control对象的引用

Control.FromHandle(myIntPtr);
Run Code Online (Sandbox Code Playgroud)

然后你得到控件的父级,直到你得到表单.

如果没有,则无法获取Control对象,但您可以做的是创建NativeWindow,并使用AssignHandle将IntPtr句柄分配给对象.这将至少为您提供一些WndProc的访问权限,类似,但就是这样.