Skip to content
Menu kontekstowe eksploratora Windows z zaznaczoną opcją Wklej obraz jako plik
Blog
Narzędzia

Wklej obraz jako plik — prosty trik dla eksploratora Windows

Skrypt PowerShell i wpis rejestru, które dodają do menu kontekstowego opcję zapisania obrazka ze schowka prosto jako plik PNG.

Screenshot, zrzut ze Snipping Tool albo obrazek skopiowany z przeglądarki trafia do schowka — a potem i tak trzeba go wkleić do jakiegoś programu, żeby zapisać jako plik. Ten mały trik dodaje do menu kontekstowego eksploratora Windows opcję „Wklej obraz jako plik”, która robi to za jednym kliknięciem, bezpośrednio w bieżącym folderze.

Menu kontekstowe z opcją Wklej obraz jako plik

Jak to działa

Rozwiązanie to dwa pliki:

  • paste-image.ps1 — skrypt PowerShell, który odczytuje obraz ze schowka (obsługuje zarówno surowe dane PNG kopiowane np. z Chrome/Edge, jak i zwykłe bitmapy) i zapisuje go jako plik wklejony_RRRRMMDD_GGMMSS.png w folderze, z którego został wywołany.
  • install-paste-image.reg — wpis rejestru, który dodaje pozycję „Wklej obraz jako plik” do menu kontekstowego tła folderu (klik prawym przyciskiem na pustym miejscu w eksploratorze).

Po instalacji wystarczy skopiować obraz do schowka, kliknąć prawym przyciskiem w folderze docelowym i wybrać nową opcję.

Zapisany plik PNG w eksploratorze Windows

Skrypt PowerShell

Sedno rozwiązania to obsługa dwóch formatów danych w schowku. Chrome i Edge kopiują obrazek jako surowy strumień PNG (format "PNG"), natomiast większość innych aplikacji (Paint, Word, Snipping Tool) wrzuca do schowka gotowy obiekt System.Drawing.Image. Trzeba obsłużyć oba przypadki:

param(
    [string]$Folder
)

$Folder = $Folder.TrimEnd('\')
$logPath = Join-Path $env:TEMP "paste-image-error.log"

try {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    if (-not $Folder -or -not (Test-Path $Folder)) {
        throw "Zly folder docelowy: '$Folder'"
    }

    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $dataObj = [System.Windows.Forms.Clipboard]::GetDataObject()

    if ($dataObj.GetDataPresent("PNG")) {
        # surowe bajty PNG prosto ze schowka - tak kopiuje m.in. Chrome/Edge
        $stream = $dataObj.GetData("PNG")
        $path = Join-Path $Folder "wklejony_$timestamp.png"
        $fs = [System.IO.File]::Create($path)
        $stream.CopyTo($fs)
        $fs.Close()
    }
    elseif ([System.Windows.Forms.Clipboard]::ContainsImage()) {
        $img = [System.Windows.Forms.Clipboard]::GetImage()
        $path = Join-Path $Folder "wklejony_$timestamp.png"
        $img.Save($path, [System.Drawing.Imaging.ImageFormat]::Png)
    }
    else {
        [System.Windows.Forms.MessageBox]::Show("Schowek nie zawiera obrazka.", "Info") | Out-Null
    }
}
catch {
    $_ | Out-File -FilePath $logPath -Append
    [System.Windows.Forms.MessageBox]::Show("Blad: $_`n`nSzczegoly w $logPath", "Blad") | Out-Null
}

Kilka szczegółów, które mają znaczenie:

  • $dataObj.GetDataPresent("PNG") sprawdzane jako pierwsze — surowy strumień PNG zachowuje oryginalną jakość i przezroczystość, w przeciwieństwie do Clipboard.GetImage(), który czasem gubi kanał alfa.
  • %V z rejestru trafia jako $Folder — to bieżący folder eksploratora, więc plik ląduje dokładnie tam, gdzie kliknięto prawym przyciskiem.
  • Błędy lecą do logu w %TEMP%, a nie tylko do okienka z komunikatem — przydatne, gdy skrypt jest wywoływany bez konsoli i nie widać, co poszło nie tak.
  • Brak obrazka w schowku nie jest traktowany jak błąd — użytkownik dostaje informację, a nie czerwony wyjątek.

Wpis rejestru jest już tylko cienkim wrapperem, który podpina skrypt pod menu kontekstowe:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\WklejObrazJakoPlik]
@="Wklej obraz jako plik"
"Icon"="imageres.dll,-5302"

[HKEY_CLASSES_ROOT\Directory\Background\shell\WklejObrazJakoPlik\command]
@="powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File \"C:\\Tools\\paste-image.ps1\" \"%V\""

-WindowStyle Hidden i -NoProfile sprawiają, że nie migocze okno konsoli i nie ładuje się cały profil PowerShell — dla jednorazowego zadania to zbędny narzut.

Instalacja

  1. Skopiuj plik paste-image.ps1 do C:\Tools\ (utwórz folder, jeśli nie istnieje).
  2. Kliknij dwukrotnie install-paste-image.reg i potwierdź dodanie wpisu do rejestru.
  3. Gotowe — opcja „Wklej obraz jako plik” pojawi się w menu kontekstowym po kliknięciu prawym przyciskiem na pustym miejscu w dowolnym folderze.

Żeby odinstalować, wystarczy usunąć klucz HKEY_CLASSES_ROOT\Directory\Background\shell\WklejObrazJakoPlik w Edytorze rejestru.

Pliki

Mały trik, ale oszczędza kilka kliknięć za każdym razem, gdy trzeba szybko zrzucić coś ze schowka na dysk.