10 votes

Enregistrer une image à partir du presse-papiers à l'aide de PowerShell

J'essaie d'enregistrer une image du presse-papiers dans le chemin d'accès au fichier. J'ai essayé le script script ci-dessous et il renvoie "clipboard does not contain image data".

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"
}

En tant que Clipboard ne peut être utilisée que dans les threads en mode "single thread apartment" (STA).

J'ai essayé d'exécuter le script en

powershell -NoProfile -Sta -File $file

J'ai également essayé de relancer l'application si l'espace de travail n'est pas STA, mais cela n'a rien donné.

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

11voto

thom schumacher Points 848

Dans PowerShell 5.1, vous pouvez utiliser Get-clipboard

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

Cela devrait également fonctionner :

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"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X