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

实现无交互随机设置锁屏图片:API引用问题及替代方案咨询

解决方案

一、UWP项目实现方式

如果选择UWP方案,需创建UWP应用而非普通控制台项目,具体调整如下:

  1. 必要命名空间
    引入以下命名空间即可使用目标API:
using Windows.Storage;
using Windows.System.UserProfile;
using Windows.Storage.Search;
  1. 权限配置
    在Package.appxmanifest中添加两项权限:
  • 功能选项卡中勾选图片库,获取图片访问权限
  • 在Capabilities节点手动添加锁屏设置权限:
    <Capability Name="userProfileInformation" />
    
  1. 修正后的异步代码
    UWP需正确处理异步操作,不能直接调用GetResults(),改用await实现:
using System;
using Windows.Storage;
using Windows.System.UserProfile;

namespace RandomLockScreenUWP
{
    public sealed partial class MainPage : Windows.UI.Xaml.Controls.Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            SetRandomLockScreenAsync().Wait(); // 启动时同步等待执行完成
            Application.Current.Exit(); // 设置完成后自动退出
        }

        private async System.Threading.Tasks.Task SetRandomLockScreenAsync()
        {
            var picturesFolder = KnownFolders.PicturesLibrary;
            // 筛选支持的图片格式
            var queryOptions = new QueryOptions(CommonFileQuery.DefaultQuery, new[] { ".jpg", ".jpeg", ".png", ".bmp" });
            var imageFiles = await picturesFolder.CreateFileQueryWithOptions(queryOptions).GetFilesAsync();

            if (imageFiles.Count > 0)
            {
                var rnd = new Random();
                var randomImage = imageFiles[rnd.Next(imageFiles.Count)];
                await LockScreen.SetImageFileAsync(randomImage);
            }
        }
    }
}

配置完成后,双击UWP应用即可无交互完成锁屏壁纸设置。

二、普通.NET控制台程序实现方式(无需UWP)

普通.NET控制台可通过调用PowerShell命令实现,无需引用特殊程序集,配置更简单:

  1. 完整代码
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;

namespace RandomLockScreenConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var picturesFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            // 筛选支持的图片格式
            var imageExtensions = new[] { ".jpg", ".jpeg", ".png", ".bmp", ".gif" };
            var imageFiles = Directory.GetFiles(picturesFolder)
                                      .Where(f => imageExtensions.Contains(Path.GetExtension(f).ToLower()))
                                      .ToArray();

            if (imageFiles.Length == 0) return;

            var rnd = new Random();
            var randomImage = imageFiles[rnd.Next(imageFiles.Length)];

            // 隐藏窗口执行PowerShell命令设置锁屏
            var psi = new ProcessStartInfo
            {
                FileName = "powershell.exe",
                Arguments = $"-Command \"(New-Object -ComObject Shell.Application).Namespace('{picturesFolder}').ParseName('{Path.GetFileName(randomImage)}').InvokeVerb('Set as lock screen')\"",
                WindowStyle = ProcessWindowStyle.Hidden,
                CreateNoWindow = true
            };
            Process.Start(psi);
        }
    }
}

该方案无需额外权限,双击即可无交互运行。

三、原代码问题说明

你使用的StorageFile和LockScreen是UWP专属API,普通.NET控制台项目无法直接引用——这些API属于Windows Runtime(WinRT)生态,仅在UWP或指定Windows目标版本的.NET 5+项目中可用。若要在非UWP项目中使用WinRT API,需配置特定目标框架并引入对应NuGet包,但配置复杂度远高于上述两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:35:01