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

时间:2013-01-11 03:08:09

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

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

2 个答案:

答案 0 :(得分:3)

正如Jerry所说,制作Windows应用商店应用屏幕保护程序并没有直接的方法。但是,有一个迂回的解决方案可能适用于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 apps的博客文章。在文章的中间部分,查找名为自动激活应用的部分。它包含一个示例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 | Configuration | Linker | System | SubSystem更改为WINDOWS。由于您还需要将入口点从_tMain更改为_tWinMain,因此需要更多参与。如果您需要详细信息,请通过我的博客与我联系。我的StackOverflow配置文件列出了它。

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

答案 1 :(得分:1)

很酷的主意。但是,没有。

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

  

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

目前有以下类型的扩展程序:

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

自动播放(扩展程序) 当用户将设备连接到计算机时,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执行环境中运行相关联。该shell不会延伸到当前版本的Windows中的“开始”菜单之外。所以,没有办法在外面执行 - 就像屏幕保护程序一样。屏幕保护程序仍然是“旧时尚方式”。