4

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

4

2 回答 2

3

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

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

您无法直接从命令行启动 Windows 应用商店应用,因此您将创建一个启动器应用。请查看由 Ashwin Needamangala 撰写的名为Automating the testing of Windows 8 应用程序的博客文章。在文章的中途,查找名为Automating the activation of your app的部分。它包含一个示例 C++ 应用程序,它可以通过以下方式启动 Windows 应用商店应用程序:

C:>Win8AppLaunch.exe Microsoft.BingNews_8wekyb3d8bbwe!AppexNews

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

在此处输入图像描述

您几乎已准备好从命令行对其进行测试,但您需要将应用程序的名称指定为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您的应用程序,而不是从命令行参数解析它。我创建了一个 Gist of this。重要的部分是我声明的那一行myApp

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

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

于 2013-01-11T07:19:04.707 回答
1

很酷的想法。但不是。

如果您希望您的应用程序真正为 Windows 做一些事情而不是作为一个简单的应用程序运行,那么您编写一个扩展应用程序。这是官方的说法:

扩展 扩展就像应用程序和 Windows 之间的协议。扩展允许应用程序开发人员扩展或自定义标准 Windows 功能,主要用于他们的应用程序,并可能用于其他应用程序。

现在有这些类型的扩展应用程序:

帐号图片提供者(扩展) 当用户决定更改他们的帐号图片时,他们可以选择现有图片或使用应用程序拍摄新图片。如果您的应用可以拍照,您可以使用此扩展程序让 Windows 在“帐户图片设置”控制面板中列出您的应用。从那里,用户可以选择它来创建新的帐户图片。有关此扩展的更多信息,请参阅 UserInformation 参考主题。您还可以查看我们的帐户图片名称示例。

AutoPlay(扩展) 当用户将设备连接到计算机时,Windows 会触发 AutoPlay 事件。此扩展使您的应用可以被列为一个或多个自动播放事件的自动播放选项。

后台任务(扩展) 应用程序可以使用后台任务来运行应用程序代码,即使在应用程序暂停时也是如此。后台任务适用于不需要与用户交互的小型工作项目。

相机设置(扩展) 您的应用可以提供自定义用户界面,用于在使用相机拍摄照片或视频时选择相机选项和选择效果。有关此扩展的详细信息,请参阅为相机开发 Windows 应用商店设备应用。

联系人选择器(扩展) 此扩展使您的应用能够注册以提供联系人数据。每当用户需要访问其联系人时,Windows 都会显示您的应用程序列表中的应用程序。有关此扩展的详细信息,请参阅 Windows.ApplicationModel.Contacts.Provider 参考主题。您还可以查看管理用户联系人。

文件激活(扩展名) 具有相同文件扩展名的文件属于相同的文件类型。您的应用可以使用现有的、众所周知的文件类型,例如 .txt,或创建新的文件类型。文件激活扩展使您能够定义新的文件类型或注册以处理文件类型。

游戏资源管理器(扩展) 您的应用可以在 Windows 中注册为游戏。为此,您必须创建一个游戏定义文件 (GDF),将其构建为应用程序中的二进制资源,并在包清单中声明该资源。

打印任务设置(扩展) 您可以设计一个显示自定义打印相关用户界面并直接与打印设备通信的应用程序。当您突出显示特定于特定品牌和型号的打印设备的功能时,您可以提供更丰富、更增强的用户体验。

协议激活(扩展) 您的应用可以使用现有协议进行通信,例如 mailto,或创建自定义协议。协议激活扩展使您能够定义自定义协议或注册以处理现有协议。

SSL/证书(扩展) 数字证书用于向另一个实体验证一个实体。例如,证书通常用于通过 SSL 对用户进行 Web 服务的身份验证。此扩展使您能够在您的应用程序中安装数字证书。

引用:http: //msdn.microsoft.com/en-us/library/windows/apps/hh464906.aspx

不幸的是,与屏幕保护程序无关。技术原因,此时,您无法编写用作屏幕保护程序的 Windows 8 应用程序,因为 Windows 8 应用程序从根本上绑定到在 WinRT 执行环境中运行。在当前版本的 Windows 中,该外壳不会超出“开始”菜单。因此,无法在外部执行 - 就像作为屏幕保护程序一样。屏幕保护程序仍然是“旧时尚方式”。

于 2013-01-11T03:32:31.647 回答