2010-03-09 134 views
1

有一個調用我的C#dll中的方法的軟件。在這個dll方法中,我需要有調用我的dll的程序/窗口的窗口句柄。獲取調用窗口的窗口句柄

如何得到這個「調用窗口句柄」?

謝謝!

+0

該方法如何被調用?你可以添加一個'hwnd'參數嗎? – SLaks 2010-03-09 14:57:01

回答

2

這可以返回主窗口句柄。

System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle 

據我所知,沒有辦法得到一個具體的窗口,因爲它不超過Form對象。 但Form類有一個屬性Handle。您可以將它作爲參數傳遞給dll方法調用。

+0

多數民衆贊成的問題,我不能從我的dll方法從源程序。所以我不能通過處理。我需要找出我的dll方法中的句柄 – Tobi 2010-03-09 15:15:29

+0

嗯......不幸的是解決問題的唯一方法是重寫dll。我看到這裏沒有麻煩(如果dll和可執行文件都是由你編寫的,所以你有源代碼),除了彙編的設計將受到影響... – ILya 2010-03-09 15:56:08

+0

是的,我實現了你告訴我的代碼,這個工程。沒有調用程序的來源,所以我不得不使用GetCurrentProcess()。MainWindowHandle。我認爲沒有其他「乾淨」的方式? – Tobi 2010-03-09 16:22:18

2

你不能:windows不調用方法,代碼調用方法。

您應該最好爲您的方法添加一個窗口句柄參數。如果這是絕對不可能的,那麼可以使用API​​函數GetActiveWindow使窗口在當前線程上處於活動狀態。這不保證工作;也許沒有窗戶打開。

你需要什麼窗口手柄?

+0

修改調用窗口,目前我使用GetForegroundWindow,但這不是一個很好的解決方案,所以如果用戶正在更改窗口immediatelly,我將有錯誤的句柄 – Tobi 2010-03-09 15:16:25