You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Process.MainWindowTitle返回空字符串问题求助

解决Windows 11中启动calc.exe后无法获取MainWindowTitle的问题

问题原因

Windows 11的计算器是UWP应用,C:\Windows\System32\calc.exe只是一个轻量启动器,它仅负责引导启动真正的UWP计算器进程(Calculator.exe),你当前代码获取的是这个启动器进程的信息——启动器本身不会创建计算器窗口,启动后很快就会退出,自然无法读取到窗口标题。另外,WaitForInputIdle()方法针对传统Win32程序设计,对UWP应用的启动流程不适用,无法正确等待窗口加载完成。

解决方案

方案1:通过Shell启动并查找目标进程

修改启动参数,使用Shell执行方式适配UWP应用,然后通过进程名查找真正的计算器进程:

using System;
using System.Diagnostics;
using System.Threading;

class Program
{
    static void Main()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Windows\System32\calc.exe");
        startInfo.UseShellExecute = true; // 改为true,适配UWP应用启动逻辑
        startInfo.WindowStyle = ProcessWindowStyle.Normal;

        var launcherProcess = Process.Start(startInfo);
        launcherProcess.WaitForExit(); // 等待启动器完成引导并退出

        // 等待片刻让计算器窗口完全加载
        Thread.Sleep(1000);

        // 查找名为"Calculator"的进程
        Process[] calculatorProcesses = Process.GetProcessesByName("Calculator");
        if (calculatorProcesses.Length > 0)
        {
            Console.Write("Main window Title : " + calculatorProcesses[0].MainWindowTitle);
        }
        else
        {
            Console.WriteLine("未找到计算器进程");
        }
    }
}

方案2:循环等待窗口初始化完成

如果担心固定等待时间不够准确,可以循环检查直到找到带有窗口标题的计算器进程:

using System;
using System.Diagnostics;
using System.Threading;
using System.Linq;

class Program
{
    static void Main()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Windows\System32\calc.exe");
        startInfo.UseShellExecute = true;
        startInfo.WindowStyle = ProcessWindowStyle.Normal;

        Process.Start(startInfo);

        // 最多等待5秒,每次间隔100毫秒检查
        Process calcProcess = null;
        int maxWaitTimes = 50;
        while (maxWaitTimes-- > 0)
        {
            calcProcess = Process.GetProcessesByName("Calculator")
                                 .FirstOrDefault(p => !string.IsNullOrEmpty(p.MainWindowTitle));
            if (calcProcess != null)
                break;
            Thread.Sleep(100);
        }

        if (calcProcess != null)
        {
            Console.Write("Main window Title : " + calcProcess.MainWindowTitle);
        }
        else
        {
            Console.WriteLine("无法获取计算器窗口标题");
        }
    }
}

关键说明

  • UseShellExecute=true:UWP应用依赖Shell环境完成启动流程,必须设置此参数才能正确触发后续的UWP进程启动。
  • 避免直接依赖启动器进程:calc.exe启动器生命周期极短,无法关联到真正的计算器窗口,必须通过实际的Calculator.exe进程获取窗口信息。

内容的提问来源于stack exchange,提问作者Vivek Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:16