EnvDTE-C#を使用したVisualStudioの「FindResult1」ウィンドウからテキストの検索結果を取得します

123iamking

この投稿よると、VisualStudioに検索させることができます。

ビルドエラーを排除するために、記事のAsif IqbalKのコードを少し更新します。

public const string vsWindowKindFindResults1 = "{0F887920-C2B6-11D2-9375-0080C747D9A0}";
public string FindInFiles(string searchText)
{
    EnvDTE80.DTE2 dte;
    dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
    dte.MainWindow.Activate();
    EnvDTE.Find find = dte.Find;
    find.Action = EnvDTE.vsFindAction.vsFindActionFindAll;
    find.FindWhat = searchText;
    find.MatchWholeWord = false;
    find.ResultsLocation = EnvDTE.vsFindResultsLocation.vsFindResults1;
    find.Target = EnvDTE.vsFindTarget.vsFindTargetSolution;
    find.PatternSyntax = EnvDTE.vsFindPatternSyntax.vsFindPatternSyntaxRegExpr;
    find.SearchSubfolders = true;
    var x = dte.Find.FindWhat;
    EnvDTE.vsFindResult result = find.Execute();
    var findWindow = dte.Windows.Item(vsWindowKindFindResults1);
    string data = "";

    System.Threading.Thread.Sleep(5000);//Comment out this code to see the problem, this line of code is not the solution though.

    if (result == EnvDTE.vsFindResult.vsFindResultFound)
    {
        var selection = findWindow.Selection as EnvDTE.TextSelection;
        selection.SelectAll();
        data = selection.Text;
    }
    return data;
}

問題は、関数が文字列(文字列データ)を返すのが早すぎるため、結果ウィンドウからすべてのテキストを取得できないことです。

そのため、コードは検索テキストを取得するために非常に近くなります。残りのパズルの1つは、検索プロセスが完了したかどうかを確認してから、テキストを取得することです。

したがって、問題は次のとおりです。どのコードをコードに置き換えるか

System.Threading.Thread.Sleep(5000);

関数FindInFiles()が「FindResult1」ウィンドウのすべてのテキストを取得できるようにします。

読んでくれてありがとう。

123iamking

これが解決策です

    EnvDTE80.DTE2 s_dte;
    EnvDTE.FindEvents s_findEvents;
    public const string vsWindowKindFindResults1 = "{0F887920-C2B6-11D2-9375-0080C747D9A0}";

    public frmFindHelper()
    {
        InitializeComponent();

        s_dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");
        s_dte.MainWindow.Activate();
        s_findEvents = s_dte.Events.FindEvents;
        s_findEvents.FindDone += new EnvDTE._dispFindEvents_FindDoneEventHandler(OnFindDone);
    }

    private void OnFindDone(EnvDTE.vsFindResult result, bool cancelled)
    {
        if (result == EnvDTE.vsFindResult.vsFindResultFound)
        {
            var findWindow = s_dte.Windows.Item(vsWindowKindFindResults1);
            string data = "";
            var selection = findWindow.Selection as EnvDTE.TextSelection;
            selection.SelectAll();
            data = selection.Text;
            MessageBox.Show("Done!");
        }
    }

    private void btnFind_Click(object sender, EventArgs e)
    {
        EnvDTE.Find find = s_dte.Find;
        find.Action = EnvDTE.vsFindAction.vsFindActionFindAll;
        find.FindWhat = txtSearch.Text;
        find.MatchWholeWord = false;
        find.ResultsLocation = EnvDTE.vsFindResultsLocation.vsFindResults1;
        find.Target = EnvDTE.vsFindTarget.vsFindTargetSolution;
        find.PatternSyntax = EnvDTE.vsFindPatternSyntax.vsFindPatternSyntaxRegExpr;
        find.SearchSubfolders = true;
        var x = s_dte.Find.FindWhat;
        EnvDTE.vsFindResult result = find.Execute();
    }

この投稿のEdDoreに感謝します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

独自のVisualStudio拡張機能でウィンドウフォーカスが失われる(EnvDTEを使用)

分類Dev

envdte configurationmanager プロジェクト StartOptions

分類Dev

EnvDTE.ProjectAPIからdotnetコアプロジェクトを検出します

分類Dev

EnvDTEおよび属性から定数値を取得する

分類Dev

Visual StudioIDEの外部でEnvDTE.DTEインスタンスを取得する

分類Dev

EnvDTEを使用してクラスのusingステートメントを取得するにはどうすればよいですか?

分類Dev

envdte参照でシンボル「Dte」を解決できません

分類Dev

EnvDTE.Projectが利用可能かどうかの判断

分類Dev

EnvDTEを使用してプログラムでVisualStudioプロジェクトのデバッグプロパティを変更する

分類Dev

EnvDTEによってプログラムでVisualStudioプロジェクトのデバッグプロパティを変更します

分類Dev

envDTEを使用してプログラムでnupkgをインストールします

分類Dev

EnvDTEを参照するJetBrainsRiderおよびT4MVCテンプレート

分類Dev

EnvDTE.DTEは、Visual Studio2015用の空のC ++プロジェクトを作成します

分類Dev

EnvDTEのタイプライブラリはどこにありますか?

分類Dev

Determining if a EnvDTE.Project is available

分類Dev

開いているドキュメントでテキストカーソルを表示/アクティブ化するにはどうすればよいですか?[C#、EnvDTE]

分類Dev

Mono.Cecil.MethodDefinitionが特定のEnvDTE.CodeFunctionと同じ関数を参照しているかどうかの判断

分類Dev

EnvDTE.ExecuteCommandを使用して、プログラムで特定のプロジェクトのデバッグを開始します

分類Dev

ENVDTE-既存のソリューションに新しいプロジェクトを追加し、特定のフォルダーに配置します

分類Dev

Visual Studio-EnvDTE.DTE.Solution.Openは、ソリューション/プロジェクトを最近のリストに追加しません

分類Dev

タイプ「System .__ ComObject」のCOMオブジェクトをインターフェイスタイプ「EnvDTE.Project」にキャストできません

分類Dev

ウィンドウ1のテキストボックスから取得したテキストをウィンドウ2で使用できません

分類Dev

EnvDTE:プロパティが仮想としてマークされているかどうかを確認する方法

分類Dev

すべてのEnvDTEアセンブリがプライマリ相互運用ではないのはなぜですか...混乱していますか?

分類Dev

Cannot resolve symbol 'Dte' with envdte reference

分類Dev

ENVDTE使用中のJavaスクリプト-既存のソリューションに新しいプロジェクトを追加し、特定のサブフォルダーに配置します

分類Dev

ウィキペディアのAPIを使用して検索クエリから結果を取得する

分類Dev

ドロップダウン選択からTrue / Falseテキストの結果を取得します

分類Dev

特定のウェブサイトの検索結果からプレーンテキストを抽出しようとしています

Related 関連記事

  1. 1

    独自のVisualStudio拡張機能でウィンドウフォーカスが失われる(EnvDTEを使用)

  2. 2

    envdte configurationmanager プロジェクト StartOptions

  3. 3

    EnvDTE.ProjectAPIからdotnetコアプロジェクトを検出します

  4. 4

    EnvDTEおよび属性から定数値を取得する

  5. 5

    Visual StudioIDEの外部でEnvDTE.DTEインスタンスを取得する

  6. 6

    EnvDTEを使用してクラスのusingステートメントを取得するにはどうすればよいですか?

  7. 7

    envdte参照でシンボル「Dte」を解決できません

  8. 8

    EnvDTE.Projectが利用可能かどうかの判断

  9. 9

    EnvDTEを使用してプログラムでVisualStudioプロジェクトのデバッグプロパティを変更する

  10. 10

    EnvDTEによってプログラムでVisualStudioプロジェクトのデバッグプロパティを変更します

  11. 11

    envDTEを使用してプログラムでnupkgをインストールします

  12. 12

    EnvDTEを参照するJetBrainsRiderおよびT4MVCテンプレート

  13. 13

    EnvDTE.DTEは、Visual Studio2015用の空のC ++プロジェクトを作成します

  14. 14

    EnvDTEのタイプライブラリはどこにありますか?

  15. 15

    Determining if a EnvDTE.Project is available

  16. 16

    開いているドキュメントでテキストカーソルを表示/アクティブ化するにはどうすればよいですか?[C#、EnvDTE]

  17. 17

    Mono.Cecil.MethodDefinitionが特定のEnvDTE.CodeFunctionと同じ関数を参照しているかどうかの判断

  18. 18

    EnvDTE.ExecuteCommandを使用して、プログラムで特定のプロジェクトのデバッグを開始します

  19. 19

    ENVDTE-既存のソリューションに新しいプロジェクトを追加し、特定のフォルダーに配置します

  20. 20

    Visual Studio-EnvDTE.DTE.Solution.Openは、ソリューション/プロジェクトを最近のリストに追加しません

  21. 21

    タイプ「System .__ ComObject」のCOMオブジェクトをインターフェイスタイプ「EnvDTE.Project」にキャストできません

  22. 22

    ウィンドウ1のテキストボックスから取得したテキストをウィンドウ2で使用できません

  23. 23

    EnvDTE:プロパティが仮想としてマークされているかどうかを確認する方法

  24. 24

    すべてのEnvDTEアセンブリがプライマリ相互運用ではないのはなぜですか...混乱していますか?

  25. 25

    Cannot resolve symbol 'Dte' with envdte reference

  26. 26

    ENVDTE使用中のJavaスクリプト-既存のソリューションに新しいプロジェクトを追加し、特定のサブフォルダーに配置します

  27. 27

    ウィキペディアのAPIを使用して検索クエリから結果を取得する

  28. 28

    ドロップダウン選択からTrue / Falseテキストの結果を取得します

  29. 29

    特定のウェブサイトの検索結果からプレーンテキストを抽出しようとしています

ホットタグ

アーカイブ