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.

ClipSave – Panel


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
–color Wyświetlanie informacji w kolorach off
–beep Dźwięki przy przechwytywaniu obrazu i zapisie off
–keys KEY Kombinacja klawiszy wyłączająca/włączająca przechwytywanie CTRL-SHIFT-F11

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 (158)
      • AI (1)
      • Bezpieczeństwo (20)
        • Model AAA (7)
        • Szyfrowanie (1)
      • CCTV (3)
      • Hardware (2)
      • Podstawy informatyki (1)
      • Sieci (47)
        • Cisco (4)
          • Obsługa haseł (2)
        • MikroTik (8)
        • Monitorowanie sieci (3)
        • Pomiary w sieciach LAN (6)
          • iptraf-ng (3)
        • Protokół ARP (5)
        • Symulator sieci GNS3 (5)
        • Tunelowanie ruchu (6)
          • Tunele GRE (2)
          • Tunele SSH (4)
        • WLAN / WiFi (7)
      • Software (78)
        • Bazy danych (13)
        • Programowanie (21)
        • Systemy operacyjne (21)
          • Linux Debian (18)
        • Windows (8)
      • Wirtualizacja (26)
  • Ostatnie wpisy

    • Opencode – darmowe kredyty
    • Tunel SSH – zwrotny (remote forwading)
    • GNS3 – Interfejsy sieciowe
    • GNS3 – Konfiguracja urządzenia IOU (L2/L3)
    • Tunel GRE + EoIP na Cisco
  • Strona odwiedzona

    od 11.01.2013

  • Doskonała platforma e-learningowa Uzyskaj certyfikat IT

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

Powered by
Necessary cookies enable essential site features like secure log-ins and consent preference adjustments. They do not store personal data.
None
Functional cookies support features like content sharing on social media, collecting feedback, and enabling third-party tools.
None
Analytical cookies track visitor interactions, providing insights on metrics like visitor count, bounce rate, and traffic sources.
None
Advertisement cookies deliver personalized ads based on your previous visits and analyze the effectiveness of ad campaigns.
None
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
None
Powered by