2017-06-27 9 views
1

Visual Studio 2013(VSIXプロジェクト)用の新しいメニューを作成しましたSystem.Diagnostics.Process.GetCurrentProcess()で現在のVisual Studioインスタンスを取得します。

メニューをクリックしたVisual Studioインスタンスに関連するメニューの機能です。私は

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

そして、それは私の使用して、現在のVisual Studioのインスタンスを取得しています

[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がまだ実行されていますか)?

ありがとうございました。

答えて

0

I解決策を見つけました:現在の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); 
関連する問題