我使用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.