【发布时间】:2025-12-18 14:25:01
【问题描述】:
根据this post,可以让Visual Studio找到。
我稍微更新了文章中 Asif Iqbal K 的代码以消除构建错误。
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;
}
我看到问题是函数返回字符串(字符串数据)太早,所以它无法从结果窗口中获取所有文本。
所以代码非常接近于获取查找文本。剩下的一个难题是检查查找过程是否完成,然后获取文本。
所以问题是:用代码替换什么代码
System.Threading.Thread.Sleep(5000);
这样函数FindInFiles()就可以得到'FindResult 1'窗口的所有文本。
感谢阅读。
【问题讨论】:
标签: c# visual-studio envdte