Сохранить изображение из буфера обмена с помощью PowerShell - PullRequest
3 голосов
/ 18 марта 2019

Я пытаюсь сохранить изображение из буфера обмена в путь к файлу.Я попробовал приведенный ниже скрипт, и он возвращает «буфер обмена не содержит данных изображения».

Add-Type -AssemblyName System.Windows.Forms
if ($([System.Windows.Forms.Clipboard]::ContainsImage())) {
    $image = [System.Windows.Forms.Clipboard]::GetImage()
    $filename='e:\test\test.png'         

    [System.Drawing.Bitmap]$image.Save($filename, [System.Drawing.Imaging.ImageFormat]::Png)
    Write-Output "clipboard content saved as $filename"
} else {
    Write-Output "clipboarsd does not contains image data"
}

Поскольку класс Clipboard может использоваться только в потоках, настроенных на однопотоковый режим (STA).

Я попытался запустить скрипт в

powershell -NoProfile -Sta -File $file

Также я попытался перезапустить, если runspace не STA, это не помогло.

Add-Type -AssemblyName System.Windows.Forms
if ($host.Runspace.ApartmentState -ne "STA") {
    "Relaunching"
    $file = "./saveImage.ps1"
    powershell -NoProfile -Sta -File $file 
    return
}

1 Ответ

0 голосов
/ 18 марта 2019

В PowerShell 5.1 вы можете использовать Get-clipboard

 get-clipboard -format image
 $img = get-clipboard -format image
 $img.save("c:\temp\temp.jpg")

это тоже должно работать:

Add-Type -AssemblyName System.Windows.Forms
$clipboard = [System.Windows.Forms.Clipboard]::GetDataObject()
if ($clipboard.ContainsImage()) {
    $filename='c:\temp\test3.png'         
    [System.Drawing.Bitmap]$clipboard.getimage().Save($filename, [System.Drawing.Imaging.ImageFormat]::Png)
    Write-Output "clipboard content saved as $filename"
} else {
    Write-Output "clipboard does not contains image data"
}
...