Не могу получить текущий экземпляр Visual Studio с помощью 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, независимо от того, из какого экземпляра было выбрано меню.

Например: был запущен экземпляр A визуальной студии, а затем B.

Независимо от того, из какого экземпляра меню было выбрано, оно всегда будет выбирать экземпляр A.

Затем я закрыл A и снова открыл его (B все еще работает)

Теперь при нажатии на меню будет выбрано B.

Любые идеи, почему это происходит и как это исправить?

Спасибо.


person user3364652    schedule 27.06.2017    source источник


Ответы (1)


Я нашел решение: получить объект DTE текущего экземпляра VS и взять оттуда 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);
person user3364652    schedule 28.06.2017