windows - 我可以将 winRT 应用程序作为屏幕保护程序运行吗?

标签 windows windows-8 windows-runtime winrt-xaml

有没有办法让我的 winRT 应用程序成为 xaml 中的屏幕保护程序?

最佳答案

正如 Jerry 所说,没有直接的方法来制作 Windows 应用商店应用程序屏幕保护程序。但是,有一个迂回的解决方案可能适用于 Windows 8,但不适用于 Windows RT。我几乎可以正常工作了。我将分享我目前所拥有的。

屏幕保护程序只是一个带有 .scr 扩展名的可执行文件,保存在 C:\Windows\System32 中。例如,查看 C:\Windows\System32\Bubbles.scr。我想到的解决方案是创建一个 .scr 屏幕保护程序,其唯一目的是启动您的 Windows 应用商店应用程序,您说该应用程序将使用 XAML。

您无法直接从命令行启动 Windows 应用商店应用,因此您将创建一个启动器应用。查看名为 Automating the testing of Windows 8 apps 的博客文章阿什温·尼达曼加拉 (Ashwin Needamangala) 着。在文章的中途,查找名为自动激活您的应用 的部分。它包含一个示例 C++ 应用程序,可以通过以下方式启动 Windows 应用商店应用程序:

C:>Win8AppLaunch.exe Microsoft.BingNews_8wekyb3d8bbwe!AppexNews

该页面上的示例启动器需要修改,但在您这样做之前,只需将代码复制到 C++ 控制台应用程序中:

enter image description here

您几乎已准备好从命令行对其进行测试,但您需要将应用程序的名称指定为 AppUserModelId。详细信息在 Ashwin 的帖子中,但换句话说,您首先要允许在您的系统上执行 PowerShell 脚本:

PS C:> Set-ExecutionPolicy AllSigned

然后运行这个 PowerShell 脚本:

$installedapps = get-AppxPackage
foreach ($app in $installedapps)
{
    foreach ($id in (Get-AppxPackageManifest $app).package.applications.application.id)
    {
        $app.packagefamilyname + "!" + $id
    }
}

您可能喜欢在 Windows PowerShell ISE 中运行它.它很光滑。找到应用的 AppUserModelId,然后从命令行测试 Win8AppLaunch.exe,如上所示。这应该从命令行启动您的 Windows 应用商店应用程序。

接下来,修改 C++ 启动器以硬编码应用程序的 AppUserModelId,而不是从命令行参数中解析它。我创建了 a Gist of this .重要的部分是我声明 myApp 的行。

构建新的可执行文件,将其重命名为 MyScreenSaver.scr 并将其放入 C:\Windows\System32。然后它将出现在屏幕保护程序设置控制面板中。您可以在那里预览屏幕保护程序,它可以工作。但是,如果您等待屏幕保护程序启动,它会短暂地弹出一个控制台窗口并且永远不会完全启动。我不确定为什么。我尝试通过将项目切换到 Windows 应用程序来禁用控制台窗口的创建,但这没有帮助。您可以通过更改 Properties | 来自己尝试配置 |链接器 |系统 |子系统WINDOWS。这有点复杂,因为您还需要将入口点从 _tMain 更改为 _tWinMain。如果您需要详细信息,请通过我的博客与我联系。我的 StackOverflow 配置文件列出了它。

此时它几乎完全正常工作。您可以尝试从一个您知道有效的空白 C++ 屏幕保护程序开始,然后复制上面的代码。如果我有更多时间,也许我会自己尝试一下。

关于windows - 我可以将 winRT 应用程序作为屏幕保护程序运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14271025/

相关文章:

linux - 使用 Electron 自定义形状的独立 Windows 应用程序

c# - 在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间

c# - SetValue 不更新 UI 但 OnPropertyChanged 会

sqlite - 使用 SQLite-WinRT 包装器构建问题

windows-runtime - Windows Phone 8.1 中的媒体管道是否已损坏?

linux - Windows 与 Linux 上的 Python 3.4.2 Popen 差异

c# - 如何在windows universal app中创建app bar slide menu

linux - 通过 Wine 在 Linux 上运行基于 COM/DCOM 的应用程序

c# - 使用包含对自身引用的 OData 对象创建表时出现 SQLite 异常

c# - 使用存储的访问 token 自动登录