我正在编写一个C#应用程序,将聚合几个应用程序(WMP,谷歌地球等)的控制。 对于我不是自己编写的应用程序,我作为一个进程启动,所以我有他们的句柄(handle = Process.Start(“C:\ whatever.exe”);是代码,我相信)。
为了顺利运行,我需要能够控制每个窗口的最小化/最大化状态,包括使用Process.Start()启动的那些窗口。 我见过几种声称这样做的方法,通常需要导入user32.dll并应用ShowWindow(句柄,状态)。
我问两个问题。 这是做这个最好的方法吗? 我是.NET / Windows编程新手(来自* nix)。 而且,我还没有得到它的工作,所以有没有什么怪事可以赶上一个新手?
(仅供参考:Windows 7 RTM上的VS 2008)
您也可能想要查看Windows辅助功能 API。 他们在微软广泛使用它来自动化UI测试。
如果您正在寻找窗口的句柄,那么获取流程的句柄可能是错误的句柄。
回到我的VB6的日子里,我使用的库,让你通过标题找到窗口,然后从那里你可以传递消息最小/最大/关闭/激活等,但我没有做过这样的事情,因为移动到.Net,确保.Net存在相同类型的库
回应评论:
是的,我看到有一个GetMainWindowHandle属性,所以这一步。 接下来,您需要查看Windows消息传递,这是您发送“消息”以执行各种Windows操作的位置。 我没有方便的消息代码,但是一旦知道每条消息的代码,它就相当直接了当。
如果你想要一个更自然的API来做到这一点,你可以做得比白色差。 它主要针对功能测试(基于Jim提到的Windows Accessibility API),但应该为您的目的服务。 看看这个关于使用Windows的页面 。 你可能会写一些像:
var application = Application.Attach(processID); var window = application.GetWindow(windowName); window.DisplayState = DisplayState.Minimized;