ITBlog

IT Blog w tematach różnych...

  • O blogu…
  • Edukacja
    • Moodle – stare
    • Moodle2
    • Testy
    • Wykłady IT
  • Firma

ClipSave – zapisywanie obrazów ze schowka systemu Windows

Napisane przez Igor Brzeżek on 15 czerwca 2026
Napisane w: Programowanie.

Contents
  1. ClipSave – monitor schowka Windows – zrzuty ekranu automatycznie zapisywane do pliku
  2. Do czego służy ClipSave?
  3. Jak to działa – mechanizm wewnętrzny
  4. Wymagania
  5. Wersja Python
  6. Wersja ANSI C (samodzielna)
  7. Instalacja i uruchomienie
  8. Python
  9. ANSI C – kompilacja
  10. Opcje wiersza poleceń – szczegółowy opis
  11. Głębia kolorów – opcja --bpp
  12. Kompresja – opcja -c / --compression
  13. Schemat nazewnictwa – opcja --name
  14. Nadpisywanie plików
  15. Pełne przykłady użycia
  16. 1. Domyślne uruchomienie
  17. 2. Kolorowe JPEGi do wybranego folderu
  18. 3. BMP w skali szarości z sekwencyjnym nazewnictwem
  19. 4. Własny wzorzec z datą i licznikiem
  20. 5. JPEG z regulacją jakości
  21. 6. Maksymalna kompresja PNG (najmniejsze pliki, wolniej)
  22. 7. Tryb palety 256 kolorów
  23. 8. Nadpisywanie bez pytania
  24. Różnice między wersją Python a ANSI C
  25. Formaty plików a głębia kolorów
  26. Zatrzymywanie programu
  27. Podsumowanie

ClipSave – monitor schowka Windows – zrzuty ekranu automatycznie zapisywane do pliku

ClipSave to lekki program (dostępny zarówno w Pythonie, jak i w samodzielnej wersji ANSI C), który automatycznie zapisuje do pliku wszystkie obrazy trafiające do schowka Windows. Wystarczy zrobić zrzut ekranu za pomocą Win+Shift+S, PrtScn, narzędzia Wycinanie (Snipping Tool) lub skopiować dowolny obraz (Ctrl+C) – ClipSave sam zajmie się resztą.

Program wykorzystuje natywne API AddClipboardFormatListener – nie ma żadnego aktywnego odpytywania (pollingu), więc zużycie procesora pozostaje na poziomie ~0% przez cały czas oczekiwania.

GitHub: github.com/IgorBrzezek/ClipSave

Do czego służy ClipSave?

ClipSave rozwiązuje problem „ulotności” schowka – obraz, który skopiujesz, znika natychmiast po skopiowaniu następnego elementu. Dzięki ClipSave każdy obraz jest trwale zapisywany na dysku, co przydaje się w wielu scenariuszach:

  • Dokumentacja błędów – zrzuty ekranu z testów automatycznie lądują w folderze.
  • Prezentacje i szkolenia – robisz serię zrzutów, a program je numeruje i zapisuje bez Twojej ingerencji.
  • Praca badawcza – zbieranie wizualnych dowodów, analiza UI, archiwizacja.
  • Bez kopiuj-wklej – nie musisz ręcznie otwierać Paint ani zapisywać pliku; program robi to za Ciebie.

Jak to działa – mechanizm wewnętrzny

ClipSave rejestruje w systemie ukryte okno Windows i nasłuchuje komunikatów WM_CLIPBOARDUPDATE. Gdy tylko zawartość schowka się zmieni (a jest to obraz), program:

  1. Pobiera bitmapę ze schowka przez GetClipboardData(CF_DIB).
  2. Oblicza hash FNV-1a obrazu – jeśli bitmapa jest identyczna z ostatnio zapisaną, pomija ją (deduplikacja).
  3. Konwertuje kolory do wybranej głębi bitowej (8/16/24 bpp lub paleta 256).
  4. Zapisuje plik w formacie PNG, JPEG lub BMP we wskazanym katalogu.
  5. Wyświetla w konsoli komunikat z nazwą pliku, rozmiarem w pikselach i wielkością pliku.

Całość działa w pętli komunikatów Windows, a zatrzymanie programu odbywa się przez Ctrl+C.

Wymagania

Wersja Python

  • Python 3.7 lub nowszy
  • Biblioteka Pillow (pip install Pillow)
  • Windows 10 lub 11

Wersja ANSI C (samodzielna)

  • Kompilator GCC (MinGW-w64) – dowolna nowsza wersja
  • Windows 10 lub 11
  • Żadnych zewnętrznych bibliotek – program korzysta wyłącznie z wbudowanych API Windows: GDI+ (gdiplus), GDI (gdi32), COM (ole32) oraz UUID (uuid)
  • Wynikowy plik .exe ma ok. 170 KB i nie wymaga żadnych dodatkowych bibliotek runtime

Instalacja i uruchomienie

Python

pip install Pillow
python clipsave.py

ANSI C – kompilacja

gcc -O2 -municode clipsave.c -lgdiplus -lgdi32 -lole32 -luuid -o clipsave.exe

Po skompilowaniu uruchamiasz:

clipsave.exe [opcje]

Opcje wiersza poleceń – szczegółowy opis

Opcja Opis Domyślnie
-h Krótka pomoc –
--help Pełna dokumentacja z przykładami –
-d KATALOG Katalog docelowy dla zapisywanych plików (zostanie utworzony, jeśli nie istnieje) . (bieżący)
-f FORMAT Format pliku: png, jpg lub bmp png
--bpp N Głębia kolorów: 8 (skala szarości), P (paleta 256), 16 (RGB565), 24 (pełny RGB) 16
-c N / --compression N Stopień kompresji – szczegóły poniżej zależy od formatu
--name TRYB Schemat nazewnictwa plików – szczegóły poniżej DATETIME
--overwrite Nadpisuj istniejące pliki bez pytania pyta

Głębia kolorów – opcja --bpp

ClipSave pozwala redukować liczbę kolorów w zapisywanym obrazie, co zmniejsza rozmiar pliku:

Wartość Opis Szczegóły implementacji w C
8 Skala szarości (tryb Luminancja BT.601: L = 0.299R + 0.587G + 0.114B) Każdy piksel konwertowany ze wzorem (R*77 + G*150 + B*29) >> 8
P 8-bitowa paleta, 256 kolorów. Adaptacyjna kwantyzacja z ditheringiem Floyd-Steinberga GDI+ rysuje 24-bitową kopię na 8-bitowej bitmapie indeksowanej z ditheringiem
16 RGB565 – 5 bitów dla czerwieni, 6 dla zieleni, 5 dla niebieskiego (65 536 kolorów). Dla plików PNG dodawany jest znacznik sBIT sygnalizujący rzeczywistą głębię Używane są tablice LUT LUT_R5, LUT_G6, LUT_B5 do kwantyzacji
24 Pełny RGB – 8 bitów na kanał (16,7 mln kolorów). Wierna kopia oryginału Kopiowanie ARGB → 24bpp RGB z pominięciem kanału alfa

Kompresja – opcja -c / --compression

Format Zakres Domyślnie Uwagi
jpg 0 – 100 95 Procent jakości – wyższa wartość = lepsza jakość, większy plik. 0 = najgorsza jakość / najmniejszy plik, 100 = najlepsza jakość / największy plik.
png 1 – 10 6 Poziom kompresji zlib – 1 = najszybciej / największy plik, 10 = najwolniej / najmniejszy plik.

Schemat nazewnictwa – opcja --name

DATETIME (tryb domyślny) – tworzy nazwy w postaci clip_YYYYMMDD_HHMMSS_000.png (data, czas, licznik).

Wzorzec niestandardowy – dowolny tekst z tokenami:

Token Rozwijane do Przykład
[N] Numer sekwencyjny: 1, 2, 3… scan[N] → scan1.png
[NN] Numer z wiodącymi zerami: 01, 02… img[NN] → img01.png
[NNN] 001, 002… (dowolna liczba znaków N) pic[NNN] → pic001.png
[D] Aktualna data: RRRRMMDD
[T] Aktualny czas: GGMMSS
[DT] Data i czas: RRRRMMDD_GGMMSS
[TD] Czas i data: GGMMSS_RRRRMMDD

Nadpisywanie plików

Domyślnie ClipSave pyta przed nadpisaniem istniejącego pliku:

[?] File exists: clip_20260610_112105_063.png. Overwrite? [y/N]

Dodanie flagi --overwrite pomija to pytanie i zawsze nadpisuje.

Pełne przykłady użycia

1. Domyślne uruchomienie

python clipsave.py

Zapisuje obrazy w formacie PNG, 16-bit RGB565, w bieżącym katalogu.

2. Kolorowe JPEGi do wybranego folderu

clipsave.exe -d C:\Zrzuty -f jpg --bpp 24

Pełny kolor, format JPEG, jakość domyślna 95, katalog C:\Zrzuty.

3. BMP w skali szarości z sekwencyjnym nazewnictwem

clipsave.exe -f bmp --bpp 8 --name scan[N]

Tworzy pliki scan1.bmp, scan2.bmp, itd. w skali szarości.

4. Własny wzorzec z datą i licznikiem

clipsave.exe --name photo_[DT]_[NN]

Tworzy pliki photo_20260610_112105_01.png, photo_20260610_112106_02.png, itd.

5. JPEG z regulacją jakości

clipsave.exe -f jpg -c 85

JPEG z jakością 85 – dobry balans między rozmiarem a jakością.

6. Maksymalna kompresja PNG (najmniejsze pliki, wolniej)

clipsave.exe -f png -c 10

7. Tryb palety 256 kolorów

clipsave.exe -f png --bpp P

Obraz z paletą 256 kolorów z ditheringiem – mały rozmiar pliku, wizualnie bliski oryginałowi.

8. Nadpisywanie bez pytania

clipsave.exe --overwrite

Różnice między wersją Python a ANSI C

Cecha Python ANSI C
Środowisko uruchomieniowe Python 3.7+ + Pillow Samodzielny plik .exe (~170 KB)
Znacznik sBIT w PNG dla 16 bpp Dodawany Brak (ograniczenie GDI+)
True 16-bit BMP Ręczne pakowanie BITFIELDS GDI+ zapisuje jako 24-bitowy kontener
Rozmiar kodu ~500 linii ~750 linii

Poza tymi różnicami technicznymi obie wersje są identyczne – te same opcje, to samo zachowanie, ten sam mechanizm nasłuchu schowka.

Formaty plików a głębia kolorów

W zależności od wybranej głębi kolorów i formatu pliku, ClipSave odpowiednio dostosowuje zapis:

Format 8 bpp P bpp 16 bpp 24 bpp
PNG Skala szarości, 8-bit Paleta 256, 8-bit RGB ze znacznikiem sBIT (5,6,5) RGB, 24-bit
JPEG Skala szarości Paleta → RGB RGB, kolory skwantowane RGB, pełny kolor
BMP Skala szarości, 8-bit Paleta 256, 8-bit True 16-bit BITFIELDS (tylko Python); w C: 24-bit RGB, 24-bit

Zatrzymywanie programu

Naciśnij Ctrl+C w oknie terminala. Program wyświetli podsumowanie z liczbą przechwyconych obrazów:

Finished. Captured images: 42

Podsumowanie

ClipSave to eleganckie, minimalistyczne narzędzie dla każdego, kto regularnie pracuje ze zrzutami ekranu w systemie Windows. Dzięki natywnemu API AddClipboardFormatListener program jest niezwykle oszczędny – czeka w tle, nie zużywając zasobów. Bogaty zestaw opcji (format, głębia kolorów, kompresja, elastyczne nazewnictwo) sprawia, że sprawdzi się zarówno w codziennej pracy, jak i w zautomatyzowanych procesach dokumentacji czy testowania.

Wersja ANSI C dodatkowo oferuje całkowitą niezależność – pojedynczy, kilkusetkilobajtowy plik .exe, który działa na każdym Windows 10/11 bez żadnych zależności. To doskonały przykład, jak napisać lekki, skuteczny program monitorujący w czystym C z użyciem GDI+.

Źródła: github.com/IgorBrzezek/ClipSave

Nawigacja

← Zwalnianie miejsca w Windows 10
nanogen – generowanie obrazów za pomocą NanoBanana ale przez WWW →
  • Szukaj

  • Kategorie

    • IT ogólnie (147)
      • Bezpieczeństwo (19)
        • Model AAA (7)
        • Szyfrowanie (1)
      • CCTV (3)
      • Hardware (2)
      • Podstawy informatyki (1)
      • Sieci (35)
        • Cisco (4)
          • Obsługa haseł (2)
        • MikroTik (8)
        • Pomiary w sieciach LAN (6)
          • iptraf-ng (3)
        • Protokół ARP (5)
        • Symulator sieci GNS3 (3)
        • WLAN / WiFi (5)
      • Software (78)
        • Bazy danych (13)
        • Programowanie (21)
        • Systemy operacyjne (21)
          • Linux Debian (18)
        • Windows (8)
      • WiFi (2)
      • Wirtualizacja (26)
  • Ostatnie wpisy

    • WinScreen czyli terminal z wirtualnymi oknami
    • Style Mover czyli przenoszenie stylów HTML
    • Generator obrazów AI za pomocą API
    • Generator modulacji AM i FM
    • Generator plików tekstowych i binarnych
  • Strona odwiedzona

    od 11.01.2013

  • Doskonała platforma e-learningowa Uzyskaj certyfikat IT

Proudly powered by WordPress Theme: Parament by Automattic.
7ads6x98y