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

如何实现Windows 10时间线点击后打开应用最近编辑的文件?

实现Windows 10时间线活动点击打开最近编辑文件

嘿,我来帮你搞定这个需求!你已经有了创建UserActivity的基础代码,接下来只需要补充文件关联和激活处理的部分,就能让用户点击时间线活动时直接打开对应的文件啦。

一、完善UserActivity的文件关联逻辑

首先,你需要把要打开的文件信息绑定到UserActivity上,这样点击活动时才能知道要打开哪个文件。推荐使用自定义URI协议来传递文件路径,代码修改如下:

var activityId = Guid.NewGuid().ToString();
UserActivityChannel channel = UserActivityChannel.GetDefault();
UserActivity userActivity = await channel.GetOrCreateUserActivityAsync(activityId);

userActivity.VisualElements.DisplayText = PageTitle.Text;
if (File != null)
{
    userActivity.VisualElements.Description = File.DisplayName;
    // 用自定义URI传递文件路径,这里的myapp://openfile是你自己定义的协议
    var encodedPath = Uri.EscapeDataString(File.Path); // 转义特殊字符避免解析错误
    userActivity.ActivationArguments = new UserActivityArguments(
        UserActivityActivationKind.Open, 
        new Uri($"myapp://openfile?path={encodedPath}")
    );
}

// 保存并发布活动到时间线(这两步不能少,否则活动不会出现在时间线里)
await userActivity.SaveAsync();
await channel.PublishActivityAsync(userActivity);

二、处理应用的激活事件

当用户点击时间线活动时,系统会通过你定义的URI协议激活你的应用,所以需要在App.xaml.cs里处理激活逻辑:

protected override void OnActivated(IActivatedEventArgs args)
{
    base.OnActivated(args);

    // 判断是否是UserActivity触发的激活
    if (args is UserActivityActivatedEventArgs activityArgs)
    {
        var activationUri = activityArgs.UserActivity.ActivationArguments.Uri;
        if (activationUri != null && activationUri.Scheme == "myapp" && activationUri.Host == "openfile")
        {
            // 解析文件路径(两种方式选一种即可)
            // 方式1:用HttpUtility解析(需要引用System.Web)
            var path = Uri.UnescapeDataString(System.Web.HttpUtility.ParseQueryString(activationUri.Query).Get("path"));
            
            // 方式2:手动解析(无需额外引用)
            // var path = activationUri.Query.Replace("?path=", "");
            // path = Uri.UnescapeDataString(path);

            // 打开文件的核心逻辑:导航到编辑页面并加载文件
            var rootFrame = Window.Current.Content as Frame;
            if (rootFrame == null)
            {
                rootFrame = new Frame();
                Window.Current.Content = rootFrame;
            }

            // 假设你的编辑页面是EditFilePage,把文件路径作为参数传递过去
            if (System.IO.File.Exists(path))
            {
                rootFrame.Navigate(typeof(EditFilePage), path);
                Window.Current.Activate();
            }
        }
    }
}

三、注册自定义URI协议(关键步骤!)

要让系统识别你定义的myapp://协议,需要在Package.appxmanifest里添加声明:

  1. 打开Package.appxmanifest文件,切换到声明选项卡
  2. 在可用声明列表里选择协议,点击添加
  3. 在右侧属性面板里:
    • 显示名称:填你的应用名称(比如“我的文件编辑器”)
    • 名称:填myapp(必须和代码里的协议名完全一致)

四、注意事项

  • 确保File.Path是绝对路径,否则应用会找不到目标文件
  • 如果文件在用户的文档库/图片库等受保护位置,需要在Package.appxmanifest里声明对应的权限(比如“文档库访问权限”)
  • 测试时,先创建一个活动,然后按Win+Tab打开时间线,找到对应的活动点击,验证是否能正确激活应用并打开文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:07