从C#app控制其他窗口

时间:2009-10-09 18:21:48

标签: .net windows showwindow

我正在编写一个C#应用程序,它将聚合多个应用程序(WMP,Google Earth等)的控制。对于我自己不写的应用程序,我是作为一个进程启动的,所以我有它们的句柄(handle = Process.Start(“C:\ whatever.exe”);是代码,我相信)。

为了使它顺利运行,我需要能够控制每个窗口的最小化/最大化状态,包括我使用Process.Start()启动的那些窗口。我见过几种方法声称这样做,通常需要导入user32.dll并应用ShowWindow(句柄,状态)。

我问两个问题。这是最好的方法吗?我是.NET / Windows编程的新手(来自* nix)。此外,我无法让它工作,所以是否有任何怪癖可以吸引新手?

(仅供参考:Windows 7 RTM上的VS 2008)

3 个答案:

答案 0 :(得分:2)

如果您正在寻找窗口的句柄,那么获取进程的句柄可能是错误的句柄。

回到我的VB6时代,我使用的库让你可以通过标题查找窗口,然后从那里你可以将消息传递给min / max / close / activate等,但是我没有做过类似的事情,因为转移到.Net,虽然我确信.Net

存在相同类型的库

对评论的回复:
是的,我看到有一个GetMainWindowHandle属性,因此只需一步。接下来,您需要查看Windows消息传递,这是您发送“消息”以执行各种Windows操作的位置。我没有方便的消息代码,但是一旦你知道每条消息的代码就会非常直接。

答案 1 :(得分:1)

您可能还想查看Windows Accessibility API。它们在Microsoft中广泛用于自动化UI测试。

答案 2 :(得分:1)

如果你想要一个更自然的API来做到这一点,你可能会比怀特更糟糕。它主要针对功能测试(并且基于Jim提到的Windows Accessibility API),但应该用于您的目的。看看this page about working with windows。你可能会写一些类似的东西:

var application = Application.Attach(processID);
var window = application.GetWindow(windowName);
window.DisplayState = DisplayState.Minimized;