Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [win32] API PrintWindow

    Ho postato questa domanda anche nel forum dedicato a Visual basic, ma forse trattandosi di API, anche se richiamate da VB, è più appropiato questo.... ripropongo la domanda:

    Dunque, il mio scopo è quello di catturare regolarmente immagini BMP della finestra di un programma esterno al mio, ANCHE QUALORA LA FINESTRA SIA IN SECONDO PIANO, cioè coperta in tutto o in parte da altre finestre.

    Il problema, IN TEORIA, si risolve facilmente, noto Hwnd e dimensioni della finestra esterna, definite in una variabile bounds as Rectangle, tramite poche righe di codice utilizzando la API PrintWindow:

    codice:
    Dim Screenshot As New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb)
    Dim graph as Graphics = Graphics.FromImage(Screenshot)
    Dim DC As IntPtr = graph.GetHdc()
    PrintWindow(Hwnd, DC, 0)
    graph.ReleaseHdc()
    graph.Dispose()
    Screenshot.Save(File, System.Drawing.Imaging.ImageFormat.Bmp)
    Screenshot.Dispose()
    IN PRATICA, non so per quale motivo, utilizzando questo codice ricorsivamente (catturo uno screenshot ogni mezzo secondo), la finestra originale del programma esterno si riempie random (nel senso di spesso ma non sempre) di "porcherie: parti della finestra stessa non si aggiornano e parti si, oppure se pongo in secondo piano una finestra che la copre in tutto o in parte... nella finestra che sto catturando rimane spesso (ma non sempre) "impressa" la parte dell' altra finestra che ho messo in secondo piano, rendendo problematica la sua cattura.

    Insomma, mi sembra che la API non solo catturi la finestra, ma crei anche molti problemi alla sua visualizzazione grafica così come si presenta sul desktop.

    Ho notato che premendo e ripremendo velocemente il pulsante Desktop la finestra si ripulisce perfettmente, ma non posso ricorrere via codice a questo sistema ogni mezzo secondo: lo sfarfallio mi rovinerebbe la vista in 10 minuti.

    A questo punto la domanda è: come ovviare all' inconveniente e far si che la mia finestra di target rimanga sempre bella pulita ed aggiornata? Qualche API specifica da suggerire? Io proprio non ne trovo che servano alla bisogna

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    No, va benissimo l'area dedicata a VB: ci si riferisce sempre al linguaggio usato.

    Oltretutto, riproporre lo stesso quesito su posti diversi non è ammesso dal ergolamento (cross-posting).

    Lascio aperta la discussione in VB.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.