[AHK] Screenshot Snipping Tool-lal és automatikus file-ba mentése

Windows 7-től kezdve az egyik legtöbbet használt beépített program a Snipping Tool volt – hiszen a legtöbb képernyőmentésnél nincs szükség a teljes képernyőre, csak egy kis részletére. Automatizáljuk, hogy még kényelmesebb legyen!

Ehhez az egy másik kedvenc programomat, az AutoHotKey-t használom, amivel szuper makrókat lehet – programspecifikusakat is(!) – írni.

A kódtól az alábbi megoldást vártam el:

  1. indítsa el a Snipping Tool-t
  2. mentse el file-ba a kivágott képernyőképet
  3. a clipboard tartalma maradjon meg

A feladat első részéhez meg kellett keresnem a Snipping Tool-t a Windowsban – meglepő módon a “C:\WINDOWS\system32\SnippingTool.exe” útvonalon érhető el. CLI-ből a /clip paraméterrel indítva a felhasználói felület nélkül indul el (és ezzel az utómegmunkálási funkciók is elérhetetlenné válnak).

A Clipboard-ba lementett Bitmap filet akár közvetlenül is le lehet menteni, de én nem szeretem a bmp file-okat. Rövid keresés után rátaláltam az Autohotkey fórumán egy beszélgetésre, amiben egy direkt AHK-hoz készült grafikus könyvtárat ajánlanak megoldásként. Nincs új a nap alatt, mindenkinek egy kicsit hasonlóak az igényei. A grafikus könyvtár használata mellett szól, hogy kevés fogalmam van a gdi könyvtárról, és a bitmapek lelki életéről, ezért más, szintén fórumokon talált megoldások bugfixelése (és mindig kell őket bugfixelni) megnehezítette volna a feladat végrehajtását.

Ahogy a legtöbb programozási feladatnál, itt is csak egymás után kellett pakolni a feladat megoldásához szükséges részegységeket.

A makró egy előre definiált könyvtárba menti el a file-t. Ezt Te is megadhatod a SCREENSHOT_DIR -nél. A file neve Screenshot_9999-99-99_99:99:99.jpg formájú. Ha aláhúzás helyett szóközt akarsz használni, akkor idézőjelbe kell rakni a file nevét.

A RunWait, C:\WINDOWS\system32\SnippingTool.exe /clip elindítja a Snipping Tool-t és addig vár, amíg a program befejezésre nem kerül. Ez már csak azért is célszerű, mert előtte nem lesz a Clipboardban a lementett képernyőkép.

A Gdip-et inicializálni kell, ha nem sikerül indítani, akkor hibajelzéssel megáll, majd a megfelelő funkció () kiszedi a clipboardból a bitmap adatokat, illetve egy másik funkció meg lementi. A végén lezárom a GDIP-et (felszadadítja a szükséges DLL-eket a memóriából).

;Ctrl-Alt-S -> Snippet
;https://autohotkey.com/board/topic/117365-clipboard-as-jpeg/
;download Tic's library gdip_all.ahk from here http://www.autohotkey.com/forum/topic32238.html
;and put save it

#include Gdip_All.ahk
!^S::
SCREENSHOT_DIR=
FormatTime, CurrentDateTime,, yyyy-MM-dd_HH.mm.ss ; It will look like 2010-12-21 03:53:11
sFile=%SCREENSHOT_DIR%\Screenshot_%CurrentDateTime%.jpg

RunWait, C:\WINDOWS\system32\SnippingTool.exe /clip


If !pToken := Gdip_Startup() {
MsgBox, 48, gdiplus Error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
return
}
pBitmap:=Gdip_CreateBitmapFromClipboard()
Gdip_SaveBitmapToFile(pBitmap, sFile)

Exit:
Gdip_Shutdown(pToken)
return

Ráadásképpen a sima Snipping Tool-t is rákötöttem egy billentyű parancsra, mostantól a Ctrl-Alt-Shift S -re tudom elővadászni.

; Ctrl-Alt-Shift-S -> Snippet
!^+S::
Run, C:\WINDOWS\system32\SnippingTool.exe
Return

Neked mi a kedvenc makród?