无法使用 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);
我为 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);