1

我正在尋找一種方法來讓我的擴展程序檢查Visual Studio 2012中當前打開的窗口是否爲1,其中用戶可以編寫代碼(或任何類型的文字,真的)。檢查Visual Studio 2012中的當前文檔是否爲代碼窗口

要檢查是否當前打開的窗口已經改變了,我用

_DTE.Events.WindowEvents.WindowActivated。

這給我EnvDTE.Window收到的重點。

當我在調試時查看那個窗口的屬性,我看EnvDTE.Window.Document.Type,它的值是"Text"

但是,如果我停止調試並嘗試訪問Document.Type property,它不存在。

如果我找這個屬性的EnvDTE.Window.Document的文檔中,它的描述說

基礎設施。僅限Microsoft內部使用。

所以現在我期待的任何意見,我怎麼可以檢查是否當前活動窗口是一個,在那裏我可以編寫代碼(或其他任何東西),或一些其他類型的文件(如解屬性例)。

編輯:

我也試過檢查Window.Type和活動窗口的Window.Kind,但他們只是告訴我,這是一個文件,而不是做一個資源文件,圖像文件或實際源之間的區別文件,這是我試圖找出。

Edit²:

我之所以要檢查,如果當前文檔是一個在那裏我可以寫代碼,是因爲我希望我的擴展存儲有關的一些這些文件的信息,我想根據我存儲的信息修改右鍵單擊上下文菜單,如果有的話。

+1

一旦你知道答案,你會怎麼做呢? –

+1

@JasonMalinowski對不起,但我不確定你想問我什麼。 – UrbanCMC

+1

我想@Jason問一個有效的問題:你想做什麼?當你的'IsTextDocument()'返回'false'時,代碼會做什麼?什麼時候「真」?當文本窗口被激活時會發生什麼?也許你的方法對於你想要做的事情是錯誤的,所以最簡單的解決方案可以是例如訂閱另一個事件,如果你沒有解釋你的最終目標,我們不能建議。 – CodeCaster

回答

0

它不是一個「真正」的答案,但是你可以按照VS轉到命令的狀態 - 這是僅適用於文本編輯器:

bool isCodeWindow = IsCommandAvailable("Edit.GoTo"); 

private bool IsCommandAvailable(string commandName) 
{ 
    EnvDTE80.Commands2 commands = dte.Commands as EnvDTE80.Commands2; 
    if (commands == null) 
     return false; 

    EnvDTE.Command command = commands.Item(commandName, 0); 
    if (command == null) 
     return false; 

    return command.IsAvailable; 
} 
+0

這些問題與這些屬性具有相同的值,無論是打開資源文件,圖像文件還是源文件。我需要的是確定是否現在處於活動狀態的文檔是我真正可以編寫代碼的文檔。 – UrbanCMC

+0

感謝您的更新答案。您在尋找其他解決方法方面爲我節省了很多麻煩。這可能不是做「最好」的方式,但它可以讓我做我需要的事情,這對我來說已經足夠好了。 – UrbanCMC

0

您可以檢查,看看是否該文件是一個「TextDocument '

bool isCodeWindow = dte.CurrentDocument.Object() is EnvDTE.TextDocument; 
相關問題