Ottenere la schermata (screenshot) della finestra di un programma
Per ottenere la schermata (screenshot) della finestra di un programma Gambas [nota 1] o di un programma esterno, si potranno utilizzare alcune risorse della Classe Desktop attivando i Componenti gb.desktop e gb.desktop.x11 .
Mostriamo un esempio, nel quale verrà effettuata un'istantanea schermata della finestra di un programma Gambas, dalla quale si otterrà un file immagine:
Public Sub Button1_Click() Dim pc As Picture pc = Desktop.Windows.FromHandle(Me.Handle).GetScreenshot(True) pc.Save("/tmp/immagine.png", 100) End
In quest'altro caso, tenendo attiva la finestra di un programma esterno, se ne otterrà una schermata e quindi un relativo file immagine.
Poniamo il caso di avere attiva la finestra della calcolatrice (il nome della sua finestra è Calculator):
Public Sub Button1_Click() Dim i As Integer Dim pc As Picture i = Desktop.FindWindow("*Calculator*", Null, Null)[0] pc = Desktop.Windows.FromHandle(i).GetScreenshot(True) pc.Save("/tmp/immagine.png", 100) End
Usando alcune risorse del Componente gb.media
Si potranno anche usare le risorse delle Classi MediaPipeline e MediaControl del Componente gb.media, assegnando l'identificativo della finestra del programma, sia esso un programma Gambas o esterno.
Sarà catturato nel file immagine anche eventualmente il puntatore del mouse.
Public Sub Button1_Click() Dim pl As MediaPipeline Dim src, con, png, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "ximagesrc") src["xid"] = Me.Id ' Assegna il numero identificativo della finestra di un programma Gambas o esterno, dellla quale si otterrà il file PNG con = New MediaControl(pl, "videoconvert") png = New MediaControl(pl, "pngenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/immagine.png" src.LinkTo(con) con.LinkTo(png) png.LinkTo(snk) ' Crea il file PNG e poi chiude il flusso di dati: pl.Play() pl.Stop() pl.Close End
Note
- Vedere anche questa pagina della Wiki: Ottenere un'immagine del Form.