Ottenere la schermata (screenshot) della finestra di un programma

Da Gambas-it.org - Wikipedia.

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