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

Win11下C#程序调用SnippingTool剪辑模式报错:找不到指定文件

解决Win11中SnippingTool启动失败的问题

问题原因

Win11里SnippingTool的启动机制与文件路径和Win10存在差异,硬编码绝对路径会导致系统找不到指定文件。而且Win11中的SnippingTool实际是Snip & Sketch的别名,按旧路径调用会直接失效。

解决方案

1. 移除硬编码路径,直接通过进程名启动

系统会自动在系统路径中查找SnippingTool.exe,无需指定绝对路径,同时天然适配32/64位进程:

private void btnImagen_Click(object sender, EventArgs e)
{
    string _Path = "SnippingTool.exe";

    pbxImagen.BackgroundImage = null;
    if (Process(_Path, "/clip") == true)
    {
        pbxImagen.BackgroundImageLayout = ImageLayout.Stretch;
        // 增加短暂延迟,确保剪贴板已写入截图
        System.Threading.Thread.Sleep(500);
        pbxImagen.BackgroundImage = Clipboard.GetImage();
    }
}

2. 优化进程启动逻辑

启用ShellExecute提升系统应用启动的兼容性,同时调整退出判断逻辑(Win11中剪辑模式下的退出码可能不为0):

public virtual bool Process(string _Dir, string Arg)
{
    using (System.Diagnostics.Process _Process = new System.Diagnostics.Process())
    {
        _Process.StartInfo.FileName = _Dir;
        _Process.StartInfo.Arguments = Arg;
        _Process.StartInfo.UseShellExecute = true;

        try
        {
            _Process.Start();
            _Process.WaitForExit();
            // 改用剪贴板是否包含图片作为成功判断依据
            return Clipboard.ContainsImage();
        }
        catch (Exception ex)
        {
            MessageBox.Show($"启动截图工具失败:{ex.Message}");
            return false;
        }
    }
}

3. 备选:直接调用Win11默认的Snip & Sketch

如果SnippingTool仍无法启动,可直接调用Win11原生的Snip & Sketch,它同样支持/clip参数:

// 方式1:通过协议启动
string _Path = "ms-screenclip:";
// 方式2:通过进程名启动
// string _Path = "SnipSketch.exe";

关键说明

  • Win11中不要硬编码系统文件路径,系统会自动维护应用的正确路径,直接使用进程名或协议启动更可靠。
  • 增加短暂延迟是为了避免截图工具还未完成剪贴板写入就读取,提升功能稳定性。

内容的提问来源于stack exchange,提问作者DS Reveles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:10:09