我试图做一个我认为会是一个简单的脚本从一个给定的目录中select一个随机文件,并将其设置为在Windows 8上的锁屏图像。不幸的是,它看起来不像Windows直接暴露给powershell触摸锁屏。 我从Stack overflow这个问题开始, 调用windows-runtime-classes-from-powershell ,看起来像他从最开始的目标一样,但是线程并没有深入到如何设置图像。
多一点search,我发现这个链接如何更改在win8应用程序中使用JS的锁屏,这让我开始了正确的道路我也发现了如何更改锁屏的MSDN上的JavaScript,C#,C + +和VB的例子,但我只是不能完全弄清楚如何在Powershell中实现。
挑选一个随机的图像是微不足道的:
$wallpaper = Get-ChildItem $Path2wallpaper $NewWPimage = $wallpaper[(Get-Random -Maximum ($wallpaper.count))].FullName
我坚持的是如何真正设置图像。 看一切我能find我认为下面的代码应该工作,如果我知道如何将$NewWPimage
转换$NewWPimage
.Netstream?
[Windows.System.UserProfile,Windows.System.UserProfile,ContentType=WindowsRuntime] [Windows.System.UserProfile.LockScreen]::SetImageStreamAsync($img1)
如果有人能更好地向我解释如何处理这些.Net对象,或者至less需要从具有文件path(即c:\ users \ UserName \ Wallpapers \ newImage.jpg)开始,将该文件设置为锁屏这将是如此真棒。 对不起,我的编程术语很不错,所以请原谅我,如果我使用错误的条款。
从缺乏回应来看,它看起来像使用WinRT类一定很难。 不过,我找到了一种不同的方式来编程方式更改使用PowerShell的Windows 8的锁定屏幕。
感谢powershell.org上的Will over,我发现在Windows 8 / 8.1中有一个用户级别锁定屏幕和一个系统级锁定屏幕。 系统级锁定屏幕图像可以在注册表项中设置,并且用户级别锁定屏幕可以通过注册表键来禁用,这使得系统锁定屏幕成为全局锁定屏幕。 查看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 }