从PowerShell调用Windows运行时类 - 窗口8锁屏切换器

时间:2014-12-19 18:53:45

标签: windows powershell lockscreen

我正在尝试创建一个我认为是一个简单的脚本来从给定目录中选择一个随机文件并将其设置为Windows 8上的锁屏图像。不幸的是,它看起来不像Windows暴露任何东西直接用powershell触摸锁屏。 我从堆栈溢出开始讨论这个问题,call-windows-runtime-classes-from-powershell看起来他开始的目标与我的目标相同,但线程没有涉及如何实际设置图像。

通过更多的搜索,我发现这个链接How to change Lockscreen using JS in win8 app让我开始走正确的道路我还在msdn上找到了关于如何更改锁屏的Javascript,C#,C ++和VB的示例但我真的无法弄清楚如何在Powershell中实现。

挑选随机图像很简单:

$wallpaper = Get-ChildItem $Path2wallpaper
$NewWPimage = $wallpaper[(Get-Random -Maximum ($wallpaper.count))].FullName

我坚持的是如何实际设置图像。看看我能找到的一切,如果我知道如何将$NewWPimage转换为.Net流,我认为下面的代码应该有用吗?

[Windows.System.UserProfile,Windows.System.UserProfile,ContentType=WindowsRuntime]
[Windows.System.UserProfile.LockScreen]::SetImageStreamAsync($img1)

如果有人能够更好地向我解释如何使用这些.Net对象,或者至少需要从拥有文件路径(即c:\ users \ UserName \ Wallpapers \ newImage.jpg)到设置文件作为锁屏这将是如此棒。对不起我的编程术语很周,所以如果我使用了错误的术语,请原谅我。

1 个答案:

答案 0 :(得分:0)

从缺乏响应来判断,看起来使用WinRT类必须很难。但是我确实找到了一种不同的方法,使用PowerShell以编程方式更改Windows 8中的锁定屏幕。

感谢Will over powershell.org我发现在Windows 8 / 8.1中有一个用户Level Lock屏幕和一个系统级锁定屏幕。可以在注册表项中设置系统级别锁定屏幕图像,并且可以使用注册表项禁用用户级别锁定屏幕,这使系统锁定屏幕成为全局锁定屏幕。查看eightforums.com了解详情。

所以这是我设置随机锁屏的代码。

$wallpaper = Get-ChildItem $Path2wallpaper
$NewWPimage = $wallpaper[(Get-Random -Maximum ($wallpaper.count))].FullName
$RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization"
if (Test-Path -Path $RegPath)
{
    Set-ItemProperty -Path $RegPath -Name LockScreenImage -Value $NewWPimage
}
else
{
    New-Item -Path $RegPath -Type Directory
    New-ItemProperty -Path $RegPath -Name NoChangingLockScreen -PropertyType DWORD -Value 1
    New-ItemProperty -Path $RegPath -Name LockScreenImage -PropertyType String -Value     $NewWPimage
}