簡體   English   中英

從HWND到控制

[英]From HWND to control

我使用user32.dll中的FindWindow方法來查找窗口並獲取句柄,但是是否可以從句柄獲取表單控件? 並像普通形式一樣使用它? 例:

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

還是我必須繼續使用user32.dll中的方法向窗口發送消息?

如果是托管窗口(您已經使用System.Windows.Forms創建了它,並且它是從System.Windows.Forms.Control繼承的),則可以通過以下方式獲取對Control對象的引用:

Control.FromHandle(myIntPtr);

然后,您只需獲取控件的父級,直到獲得表單。

如果沒有,您將無法獲得Control對象,但是您可以做的是創建一個NativeWindow,然后使用AssignHandle將IntPtr句柄分配給該對象。 這樣至少可以使您對WndProc有所訪問,並且類似,但是僅此而已。

您是否嘗試過Control.FromHandle() 表單是(繼承自)控件。 如果您打了一個嵌套控件,則必須在其父控件中進行搜索,直到您單擊窗體。

假設實際在某處有一個Form ,並且您剛剛使用過user32方法來定位其HWND

將Form類包裝在Win32窗口句柄周圍非常困難。 Microsoft沒有提供完整的實現。 因此,您僅需使用本機函數與給定的句柄進行通信。

如果窗口屬於您的應用程序,則可以使用Control.FromHandle方法 否則,您將不得不繼續使用Win API。 例如,要隱藏窗口,您需要調用ShowWindow Function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM