在 PowerShell 中使用 UWP API 命名空间

在 PowerShell 中使用 UWP API 命名空间

我正在寻找如何使用命名空间在 PowerShell 中处理 Windows 10 锁定屏幕,并遇到了这个答案:https://superuser.com/a/1062551/700258,但它没有说明如何导入或将该命名空间添加到 PowerShell 以供使用。我尝试查找程序集的引用 DLL 文件,但它们不在我的计算机上。当我看到它们是 Windows 桌面扩展 API 的一部分时,我出去下载了 Windows 10 SDK,但 DLL 文件也不在其中。如何在 PowerShell 脚本中从 Windows.System.UserProfile 命名空间使用此 LockScreen 类?

答案1

首先你需要告诉 PowerShell 你想要使用 UWP 类:

[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime] | Out-Null

第一部分是类名,第二部分是 UWP 命名空间,第三部分仅表示它是一个 UWP 类。加载类型后,您可以通过其名称([Windows.System.UserProfile.LockScreen]在本例中仅为第一部分)引用该类型。

下一个技巧是 Windows 运行时方法是异步的,并使用与 .NET Framework 方法不同的异步任务类。从 PowerShell 调用它们需要一些额外的基础结构,这是我最初为另一个答案

Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}
Function AwaitAction($WinRtAction) {
    $asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and !$_.IsGenericMethod })[0]
    $netTask = $asTask.Invoke($null, @($WinRtAction))
    $netTask.Wait(-1) | Out-Null
}

Await可用于调用返回 的函数IAsyncOperation,即产生值的函数。它采用 WinRT 任务对象和输出类型。AwaitAction可用于调用返回 的函数IAsyncAction,即只执行某些操作而不返回结果的函数。它仅采用 WinRT 任务对象。

对于此应用程序,我们需要StorageFile类型也可访问:

[Windows.Storage.StorageFile,Windows.Storage,ContentType=WindowsRuntime] | Out-Null

现在我们可以开始调用一些函数了。首先我们使用GetFileFromPathAsync获取IStorageFile所需锁屏图像的实例:

$image = Await ([Windows.Storage.StorageFile]::GetFileFromPathAsync('C:\path\to\image.ext')) ([Windows.Storage.StorageFile])

最后我们将该图像传递给SetImageFileAsync设置锁屏背景:

AwaitAction ([Windows.System.UserProfile.LockScreen]::SetImageFileAsync($image))

更改应立即生效。

相关内容