C# 提供了要打开的文件路径,如何获得新窗口的句柄?

C# 提供了要打开的文件路径,如何获得新窗口的句柄?,c#,winapi,windows-shell,C#,Winapi,Windows Shell,我想实现一个shell上下文菜单“打开到左/右”,用户可以打开一个文件,新窗口被重新定位,占据屏幕的左/右半部分。基本上,我只需调用Process.Start(fileName),获取进程的MainWindowHandle,然后将句柄传递给SetWindowPos,以设置窗口的位置 但有些应用程序(如Word)作为单例实例运行,因此Process.Start(“new.docx”)只需将文件名传递给运行的实例,并返回null,因此我无法获取窗口句柄来进行重新定位 有解决办法吗 欢迎使用任何方法(

我想实现一个shell上下文菜单“打开到左/右”,用户可以打开一个文件,新窗口被重新定位,占据屏幕的左/右半部分。基本上,我只需调用
Process.Start(fileName)
,获取进程的
MainWindowHandle
,然后将句柄传递给
SetWindowPos
,以设置窗口的位置

但有些应用程序(如Word)作为单例实例运行,因此
Process.Start(“new.docx”)
只需将文件名传递给运行的实例,并返回
null
,因此我无法获取窗口句柄来进行重新定位

有解决办法吗

欢迎使用任何方法(最好用C#编写)。


另外,我知道我可以使用
EnumWindows
列出所有顶级窗口,并让用户选择要重新定位的窗口。但这是另一个使用场景。我想在shell上下文菜单中实现该功能。

对此没有简单的解决方案,您无法发现它是一个单实例应用程序,以及它执行何种内部协商。使用MainWindowHandle通常是一种有损的方法,你会移动一些应用的启动屏幕。。。因此,我认为我必须求助于某种受过教育的猜测——比如比较文件打开前后的顶级窗口,以“猜测”哪个窗口是一个。仍然有损,但可以在临时使用中工作。在用户关闭登录窗口之前,可能无法创建主窗口。“如果你想支持每一个软件的每一个版本,你需要做大量的教育,”盛江说蒋晟 我的初衷是并排打开两个文档以便于比较/参考,因此MS Office、记事本、PDF阅读器和浏览器是第一个目标软件。