当前位置: 首页 > news >正文

c# everthing.exe 通信

1 获取everthing进程  调用 Everything 搜索创建SearchWithEverything函数

using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.IO;
using System.Management;
using System.Text;class EverythingHelper
{// 方法 1:从进程获取路径public static string GetEverythingPathFromRunningProcess(){Process[] processes = Process.GetProcessesByName("Everything");if (processes.Length == 0){return null; // Everything 未运行}try{return processes[0].MainModule.FileName;}catch{return null; // 权限不足}}// 方法 2:从 WMI 获取路径(更可靠)public static string GetEverythingPathFromWMI(){string query = "SELECT ExecutablePath FROM Win32_Process WHERE Name = 'Everything.exe'";try{using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))using (ManagementObjectCollection results = searcher.Get()){if (results.Count == 0) return null;foreach (ManagementObject process in results){try{object pathObj = process["ExecutablePath"];if (pathObj != null){string exePath = pathObj.ToString();if (!string.IsNullOrWhiteSpace(exePath) && File.Exists(exePath)){return exePath;}}}catch (ManagementException ex){// 记录错误或忽略(权限不足等)Debug.WriteLine($"WMI Access Error: {ex.Message}");}}}}catch (Exception ex){Debug.WriteLine($"WMI Query Failed: {ex.Message}");}return null;}// 方法 3:从注册表获取public static string GetEverythingPathFromRegistry(){using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Everything")){if (key != null){object installLocationObj = key.GetValue("InstallLocation");string installLocation = installLocationObj?.ToString(); // 安全转换if (!string.IsNullOrEmpty(installLocation)){string exePath = Path.Combine(installLocation, "Everything.exe");if (File.Exists(exePath)) return exePath;}}}return null;}// 获取 Everything 选中的文件和目录列表// 版本检测:需要 Everything 1.4.1+public static bool CheckEverythingVersion(){try{string exePath = FindEverythingExe();var versionInfo = FileVersionInfo.GetVersionInfo(exePath);return versionInfo.FileMajorPart > 1 ||(versionInfo.FileMajorPart == 1 && versionInfo.FileMinorPart >= 4);}catch{return false;}}// 增强版获取选中项(带状态反馈)public static (List<string> items, string message) GetSelectedItemsWithStatus(){try{// 检查 Everything 是否运行if (Process.GetProcessesByName("Everything").Length == 0)return (new List<string>(), "Everything 未运行");if (!CheckEverythingVersion())return (new List<string>(), "需要 Everything 1.4.1 或更高版本");var items = new List<string>();string exePath = FindEverythingExe();using (Process process = new Process()){process.StartInfo = new ProcessStartInfo{FileName = exePath,Arguments = "-export-selected-items-to-stdout",UseShellExecute = false,RedirectStandardOutput = true,CreateNoWindow = true,StandardOutputEncoding = Encoding.UTF8};process.Start();// 异步读取输出while (!process.StandardOutput.EndOfStream){string line = process.StandardOutput.ReadLine()?.Trim();if (!string.IsNullOrEmpty(line) && (File.Exists(line) || Directory.Exists(line))){items.Add(line);}}if (!process.WaitForExit(3000)) // 最多等待3秒{process.Kill();return (items, $"获取超时,已找到 {items.Count} 个有效项");}}return items.Count > 0? (items, $"成功获取 {items.Count} 个选中项"): (items, "Everything 中没有选中的有效文件/目录");}catch (Exception ex){return (new List<string>(), $"获取失败: {ex.Message}");}}// 显示选中项在 RichTextBox(带格式)public static void DisplaySelectedItems(RichTextBox box){var (items, status) = GetSelectedItemsWithStatus();box.Clear();box.SelectionColor = Color.Blue;box.AppendText(status + "\n\n");for (int i = 0; i < items.Count; i++){// 序号box.SelectionColor = Color.Green;box.AppendText($"{i + 1}. ");// 路径类型bool isDir = Directory.Exists(items[i]);box.SelectionColor = isDir ? Color.Orange : Color.Black;box.AppendText(isDir ? "[目录] " : "[文件] ");// 路径box.SelectionColor = Color.Black;box.AppendText(items[i] + "\n");}}// 综合查找public static string FindEverythingExe(){// 1. 尝试从运行进程获取string exePath = GetEverythingPathFromWMI() ?? GetEverythingPathFromRunningProcess();if (exePath != null) return exePath;// 2. 尝试从注册表获取exePath = GetEverythingPathFromRegistry();if (exePath != null) return exePath;// 3. 尝试默认路径string[] commonPaths ={@"C:\Program Files\Everything\Everything.exe",@"C:\Program Files (x86)\Everything\Everything.exe",Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Everything", "Everything.exe")};foreach (string path in commonPaths){if (File.Exists(path)) return path;}// 4. 让用户手动选择OpenFileDialog openFileDialog = new OpenFileDialog{Title = "请选择 Everything.exe",Filter = "Everything.exe|Everything.exe|所有文件 (*.*)|*.*",InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)};if (openFileDialog.ShowDialog() == DialogResult.OK)  // 不是 true,而是 DialogResult.OK{return openFileDialog.FileName;}throw new FileNotFoundException("未找到 Everything.exe。");}// 调用 Everything 搜索public static void SearchWithEverything(string query){string everythingExe = FindEverythingExe();Process.Start(everythingExe, $"-s \"{query}\"");}
}

http://www.lryc.cn/news/601748.html

相关文章:

  • Android基础(一) 运行HelloWorld
  • 【java】 IntelliJ IDEA高效编程设置指南
  • 大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam
  • Java 代理机制详解:从静态代理到动态代理,彻底掌握代理模式的原理与实战
  • 雪花算法原理深度解析
  • 【0基础PS】PS工具详解--选择工具--快速选择工具
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.4 计算预订订单数量和总金额 (Calculating booked orders)
  • 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  • Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 高格办公空间:以 “空间为基,服务为翼”,重塑办公场景生态
  • 【语义分割】记录2:yolo系列
  • libomxil-bellagio移植到OpenHarmony
  • java小白闯关记第一天(两个数相加)
  • Python-初学openCV——图像预处理(三)
  • XSS利用
  • Web-Machine-N7靶机攻略
  • 文件权限标记机制在知识安全共享中的应用实践
  • JavaEE初阶第十二期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十)
  • C++学习(线程相关)
  • 05 - spring security权限控制
  • Java Ai(day04)
  • [Linux入门] Linux 远程访问及控制全解析:从入门到实战
  • 【工具】python汇总发票(含源码)
  • InfluxDB 与 MQTT 协议集成实践(二)
  • Linux网络-------2.应⽤层⾃定义协议与序列化
  • 基于深度学习的图像分割:使用DeepLabv3实现高效分割
  • 【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
  • 程序代码篇---python向http界面发送数据
  • 【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)