2009-10-09 34 views
3

我正在寫一個C#應用程序,將聚合控制幾個應用程序(WMP,谷歌地球等)。對於我不是自己編寫的應用程序,我作爲一個進程啓動,因此我有他們的句柄(句柄= Process.Start(「C:\ whatever.exe」);是代碼,我相信)。控制從C#應用程序的其他窗口

爲了使其順利運行,我需要能夠控制每個窗口的最小化/最大化狀態,包括使用Process.Start()啓動的那些窗口。我見過幾種聲稱這樣做的方法,通常需要導入user32.dll並應用ShowWindow(句柄,狀態)。

我問兩個問題。這是做這件事的最好方法嗎?我是.NET/Windows編程新手(來自* nix)。此外,我還沒有得到它的工作,所以有沒有什麼怪事可以吸引新手?

(FYI:VS 2008的Windows 7 RTM)

回答

1

您可能還想查看Windows Accessibility API。他們廣泛用於Microsoft內部,用於自動化UI測試。

+0

是的!這正是我所期待的! – Jay 2009-10-10 02:24:51

2

獲取進程的句柄可能是錯誤的句柄,如果你正在尋找的窗口的句柄。

回到我的VB6時代,我使用了可讓您通過標題找到窗口的庫,然後從那裏將消息傳遞給min/max/close/activate等,但是自從轉移到.Net以來,我沒有做過類似的事情。 ,但我敢肯定,相同類型的圖書館爲.NET存在

迴應評論:
是的,我看到有一個GetMainWindowHandle特性,因此多數民衆贊成一步到位了。接下來,您需要查看Windows消息傳遞,這是您發送「消息」以執行各種Windows操作的位置。我沒有方便的消息代碼,但只要知道每條消息的代碼,它就相當直接。

+0

我沒有餵養ShowWindow()方法的進程句柄。我無法完全記得(不在我的代碼前),但我相信進程句柄有一個返回其主窗口句柄的方法,這就是我正在使用的方法。 – Jay 2009-10-09 18:29:44

+0

謝謝!我會研究一下。 – Jay 2009-10-09 19:00:18

1

如果你想要一個更自然的API來做到這一點,你可能會比White更糟糕。它主要針對功能測試(並基於Jim提到的Windows Accessibility API),但應爲您的目的服務。看看this page about working with windows。你可能會寫這樣的東西:

var application = Application.Attach(processID); 
var window = application.GetWindow(windowName); 
window.DisplayState = DisplayState.Minimized; 
相關問題