C# 无法使用System.Diagnostics.Process.GetCurrentProcess()获取当前Visual Studio实例;
我为Visual Studio 2013(VSIX项目)创建了一个新菜单 与单击菜单的Visual Studio实例相关的菜单功能 我正在使用获取当前的Visual Studio实例C# 无法使用System.Diagnostics.Process.GetCurrentProcess()获取当前Visual Studio实例;,c#,.net,visual-studio,process,vsix,C#,.net,Visual Studio,Process,Vsix,我为Visual Studio 2013(VSIX项目)创建了一个新菜单 与单击菜单的Visual Studio实例相关的菜单功能 我正在使用获取当前的Visual Studio实例 System.Diagnostics.Process vsProcess = System.Diagnostics.Process.GetCurrentProcess(); 我对它的用途是 [DllImport("User32")] private static extern int ShowWindow(int
System.Diagnostics.Process vsProcess = System.Diagnostics.Process.GetCurrentProcess();
我对它的用途是
[DllImport("User32")]
private static extern int ShowWindow(int hwnd, int nCmdShow);
ShowWindow((int)vsProcess.MainWindowHandle, 3);
但是,当使用菜单时,它总是使用执行的第一个VisualStudio实例,无论从哪个实例单击菜单
例如:VisualStudio的实例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);
我找到了一个解决方案:获取当前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);