无法使用 System.Diagnostics.Process.GetCurrentProcess() 获取当前 Visual Studio 实例;

Cant get current Visual Studio instance with System.Diagnostics.Process.GetCurrentProcess();

我为 Visual Studio 2013(VSIX 项目)创建了一个新菜单

菜单的功能与单击菜单的 Visual Studio 实例相关。

我正在获取当前 Visual Studio 实例

System.Diagnostics.Process vsProcess = System.Diagnostics.Process.GetCurrentProcess();

我的用途是

[DllImport("User32")]
private static extern int ShowWindow(int hwnd, int nCmdShow);

ShowWindow((int)vsProcess.MainWindowHandle, 3);

但是当使用菜单时,它总是采用第一个执行的 Visual Studio 实例,无论从哪个实例单击菜单。

例如:启动了visual studio的实例A,然后启动了B.

无论从哪个实例点击菜单,它总是选择实例A。

然后我把A关了再打开(B还是运行)

现在点击菜单时会选择B。

知道为什么会发生这种情况以及如何解决它吗?

谢谢。

我找到了一个解决方案:获取当前 VS 实例的 DTE 对象并从那里获取 MainWindowHandle

EnvDTE.DTE vsDte =  (EnvDTE.DTE)ServiceProvider.GlobalProvider.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE));

var mainWindowHandle = (IntPtr)vsDte.MainWindow.HWnd;

ShowWindow((int)mainWindowHandle, 3);