如何在c#中获取已创建进程的窗口ID?

问题描述

我正在处理一个 C# .net 核心项目。我创建了一个进程来运行 "xdotool windowactivate $windowpid"。我应该存储在其上运行的进程的 windowID。解决方案可以是任何我找不到 xdotool 的属性,或者有没有办法在创建进程时获取它的 windowId?

一个尝试是: 我用这种方法创建了我的页面我试图获取进程的主窗口标题;由于单个进程,我无法获取标题

 static List<string> chromeTitles = new List<string>();
 public static Process StartChrome(string filePath)
 {  
            

            string dataDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Chrome-UserData");
            filePath += " --user-data-dir=" + dataDirectory;
            var Chrome = new Process
            {
                StartInfo =
                {
                    FileName = "C:/Program/chrome.exe",Arguments =  filePath,UseShellExecute = false,CreateNowindow=true,WindowStyle = ProcessWindowStyle.Maximized,}
             
            };
            Chrome.Start();
            string title = Chrome.MainWindowTitle;
            chromeTitles.Add(title);
 }

然后我称之为:

 StartChrome("https://tr.wikipedia.org/wiki/Anasayfa");
 Thread.Sleep(2000);
 StartChrome("https://tureng.com/");

解决方法

您可以使用 Process 类来访问更多功能。

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.FileName = "xdotool.exe";
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;
        startInfo.Arguments = $"windowactivate $windowpid";
        process.StartInfo = startInfo;
        process.Start();

要获取代码运行的进程的 PID,可以使用 Process.ID 属性:

process.Id;

如果要读取输出,可以添加以下代码:

string output = process.StandardOutput.ReadToEnd();

要获取输出,startInfo.RedirectStandardOutput 应为 True。