Corsi on-line

Catturare finestre con imagegrabwindow() e PHP

imagegrabwindow() è una funzione nativa di PHP praticamente sconosciuta ai più che però svolge una funzione spesso richiesta nei forum di discussione, il suo compito è infatti quello di catturare l’immagine di una finestra aperta all’interno di un programma, come per esempio un browser Web, crea quindi uno screenshot; purtroppo, dato che si basa su costrutti che necessitano l’oggetto COM, è utilizzabile soltanto su Windows.

Ecco un semplice esempio sull’utilizzo di questa funzione:

<?php
// istanzia dell'oggetto COM
$ie = new COM("InternetExplorer.Application");
// richiama la proprietà HWND
$handle = $ie->HWND;
// rende visibile la risorsa
$ie->Visible = true;
// cattura la finestra
$img = imagegrabwindow($handle);
// chiude l'istanza all'oggetto
$ie->Quit();
// salva l'immagine in PNG
imagepng($img, "screenshot.png");
// libera la memoria occupata dall'immagine
imagedestroy($img);
?>

La funzione restituisce FALSE nel caso non riesca a produrre lo screenshot desiderato. HWND non è altro che un’API utilizzabile per effettuare una chiamata ad una finestra.

Post correlati
  • Michele Salvador

    Sto cercando di usare imagegrabwindow per fare uno screenshot del browser.
    ciò che faccio è:
     – Imposto come pagina iniziale di IE (sto usando il 7) quella che vorrei catturare
     – Copio l’esempio proposto in un file ‘cattura.php’
     – Lo apro in IE.  ho provato anche ad aprirlo con Chrome e Firefox
     – Con tutti i browsi viene aperta una finestra di IExplorer, e in pochi istanti chiusa.
     – Nella cartella dove sta ‘cattura.php’ compare “screenshot.png” in cui è stata effettivamente catturata la finestra di IE, ma… sempre con pagina completamente bianca, e nel titolo della scheda 

    ho provato a togliere  $ie->Quit()
    la finestra di IE rimane aperta, ma sempre con “Connessione in corso…” e non apre la pagina iniziale nè nessun altra, rimane solo bianca.  
    Ho provato anche a cambiare qualche opzione in IE sull’apertura di nuove finestre… ma nulla cambia.

    Prendendo spunto da http://www.php.net/manual/en/function.imagegrabwindow.php
    ho aggiunto 
      $browser->Navigate(“http://www.libgd.org”);che però apre l’url in una TERZA scheda, e non nella finestra che viene catturata!anche da Chrome o Firefox accade lo stesso. sempre seguendo l’esempio in php.net ho aggiunto  while ($browser->Busy) { com_message_pump(4000); }
    il quale però non sembra produrre alcun cambiamento.

    Lo screenshot della finestra di IE presenta sempre una pagina bianca e il titolo della scheda ‘Connessione in corso…’

    Come posso fare uno screenshot di una pagina html con imagegrabwindow ?

    Grazie

  • Anonimo

    Se non vuoi fotografare la schermata corrente devi utilizzare il metodo navigate() a cui passare l’URL della pagina che t’interessa; ad esempio:

    $browser->Visible = true;
    $browser->Navigate(“http://www.google.com”);

I più letti del mese
Tematiche