我使用User32.dll中的FindWindow方法来查找窗口并获取句柄,但是是否可以从句柄获取窗体控件?并用它像一个普通的形式?例如:从HWND到控制
int myhwnd = FindWindow(null, "MyWindow");
form myform = SomeMagic.GetFormFromHandle(myhwnd);
myform.Visible = false;
还是我必须继续使用user32.dll中的方法来发送消息到窗口?
我使用User32.dll中的FindWindow方法来查找窗口并获取句柄,但是是否可以从句柄获取窗体控件?并用它像一个普通的形式?例如:从HWND到控制
int myhwnd = FindWindow(null, "MyWindow");
form myform = SomeMagic.GetFormFromHandle(myhwnd);
myform.Visible = false;
还是我必须继续使用user32.dll中的方法来发送消息到窗口?
如果它是一个托管窗口(您使用System.Windows.Forms创建它,并且它已从System.Windows.Forms.Control继承),则可以获得参照控制对象
Control.FromHandle(myIntPtr);
然后,您只需获得控件的父级,直到获取表单。
如果不是,则无法获取Control对象,但您可以执行的操作是创建NativeWindow,并使用AssignHandle将IntPtr句柄分配给该对象。这至少会给你一些访问WndProc和类似的东西,但就是这样。
在Win32窗口句柄周围包装Form类非常困难。微软没有提供完整的实施方案。所以,您必须使用Native函数才能与给定句柄进行通信。
你试过Control.FromHandle()?表格是(继承自)控件。如果你点击一个嵌套控件,你必须通过它的父母搜索,直到你点击你的表单。
这里假设实际上有一个Form
的地方,并且您刚刚使用user32方法找到它的HWND
。
如果窗口属于您的应用程序,您可以使用Control.FromHandle Method。否则,你将不得不继续使用win api。例如要隐藏窗口,您需要拨打ShowWindow Function.