Start · Sprachen · PHP · Referenz · imagegrabwindow

imagegrabwindow

Funktion

Erstellt einen Screenshot eines bestimmten Fensters unter Windows anhand seines Handles und gibt ein GD-Bildobjekt zurück.

seit PHP 5.2.2 Kategorie: image

Signatur

imagegrabwindow(int $handle, bool $client_area = false): GdImage|false

Beschreibung

imagegrabwindow() nimmt einen Screenshot eines einzelnen Fensters auf einem Windows-System. Dabei wird das Fenster über sein Handle (HWND) identifiziert, das beispielsweise mit der WinAPI ermittelt werden kann. Die Funktion ist ausschließlich auf Windows verfügbar und steht auf anderen Betriebssystemen nicht zur Verfügung.

Mit dem optionalen Parameter client_area lässt sich steuern, ob nur der Client-Bereich (also der innere Inhalt ohne Titelleiste, Rahmen usw.) oder das gesamte Fenster inklusive Dekorationen erfasst werden soll. Das Ergebnis ist ein GdImage-Objekt, das anschließend wie jedes andere GD-Bild gespeichert, bearbeitet oder ausgegeben werden kann.

Ein typischer Anwendungsfall ist die automatisierte Erzeugung von Bildschirmfotos bestimmter Anwendungsfenster in Windows-Skripten, etwa für Monitoring-, Test- oder Dokumentationszwecke. Das erzeugte Bild kann mit Funktionen wie imagepng(), imagejpeg() oder imagedestroy() weiterverarbeitet werden.

  • Die Funktion erfordert, dass PHP unter Windows läuft und das Fenster tatsächlich existiert.
  • Das Fenster muss sichtbar sein; verdeckte Bereiche können möglicherweise nicht korrekt erfasst werden.

Parameter

Name Typ Default Beschreibung
$handle Pflicht int Das Windows-Fenster-Handle (HWND) des zu erfassenden Fensters als Integer-Wert.
$client_area bool false Wenn true, wird nur der Client-Bereich (Fensterinhalt ohne Rahmen und Titelleiste) erfasst. Bei false (Standard) wird das gesamte Fenster inklusive Dekorationen aufgenommen.

Rückgabewert

Typ
GdImage|false
Beschreibung
Gibt ein GdImage-Objekt zurück, das den Screenshot enthält. Bei einem Fehler (z. B. ungültiges Handle oder nicht unterstütztes Betriebssystem) wird false zurückgegeben.

Beispiele

Screenshot eines Fensters anhand seines Handles speichern

<?php
// Beispiel unter Windows: Handle eines Fensters ermitteln und Screenshot erstellen
// Das Handle wird hier als bekannter Wert angenommen (z. B. aus einer WinAPI-Abfrage)
$handle = 0x000A0B2C; // Beispiel-HWND

$screenshot = imagegrabwindow($handle);

if ($screenshot === false) {
    echo 'Fehler: Fenster konnte nicht erfasst werden.';
} else {
    // Screenshot als PNG speichern
    imagepng($screenshot, 'fenster_screenshot.png');
    imagedestroy($screenshot);
    echo 'Screenshot erfolgreich gespeichert.';
}
Screenshot erfolgreich gespeichert.

Nur den Client-Bereich eines Fensters aufnehmen

<?php
// Nur den inneren Bereich (ohne Titelleiste und Rahmen) erfassen
$handle = 0x000A0B2C; // Beispiel-HWND

$clientBild = imagegrabwindow($handle, true);

if ($clientBild !== false) {
    // Breite und Höhe des aufgenommenen Bereichs ausgeben
    echo 'Breite: ' . imagesx($clientBild) . ' px' . PHP_EOL;
    echo 'Höhe:   ' . imagesy($clientBild) . ' px' . PHP_EOL;

    imagepng($clientBild, 'client_bereich.png');
    imagedestroy($clientBild);
} else {
    echo 'Fehler beim Erfassen des Client-Bereichs.';
}
Breite: 800 px Höhe: 600 px

// Wichtig · Fallstricke

Plattformbeschränkung: imagegrabwindow() ist ausschließlich unter Windows verfügbar. Der Aufruf unter Linux oder macOS führt zu einem fatalen Fehler oder gibt false zurück.

Sichtbarkeit: Das Zielfenster muss auf dem Desktop sichtbar und nicht vollständig von anderen Fenstern verdeckt sein, da andernfalls verdeckte Bereiche im Screenshot möglicherweise schwarz oder unvollständig erscheinen.

Berechtigungen: Unter neueren Windows-Versionen (Vista und höher) können Berechtigungen oder UAC-Einschränkungen das Erfassen bestimmter Fenster (z. B. von Systemdialogen) verhindern.