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

    [VB6] "pulire" il desktop uscendo da gioco

    quando (tramite alt+tab o il tasto windows) passo da un gioco basato su direct-x al desktop di windows (cioè lasciando il gioco in esecuzione in background), di norma in due-tre secondi si passa pulitamente al normale desktop, con tutte le applicazioni eventualmente in esecuzione

    tuttavia alcune volte (sarà la videata o chissà che) non solo ci mette molto di più, ma il desktop rimane "macchiato" da parti del video del gioco, e per pulire lo schermo occorre magari minimizzare e rimassimizzare qualche applicazione (e magari la barra di start rimane "sporca" per qualche centimetro), salvo "pulirla" aprendo una nuova applicazione

    insomma, spero di essermi spiegato

    ora la domanda è: c' è un modo (tramite una api o una routine particolare) di "pulire" il desktop via VB?

    tramite la GetForegroundWindow in un timer potrei capire quando il gioco perde il focus... ma poi per pulire il desktop?

  2. #2
    mmm forse dovresti de-inizializzare e re-inizializzare alcune parti delle directx per farlo funzionare correttamente
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Originariamente inviato da daniele_dll
    mmm forse dovresti de-inizializzare e re-inizializzare alcune parti delle directx per farlo funzionare correttamente
    ehm, forse non mi sono spiegato bene... sto parlando di giochi non miei, come CoD o America's Army...

    se chiudo i giochi... tutto bene... se passo ad un altra finesta lasciandoli aperti a volte (non sempre) lo schermo mi rimane mezzo pieno di porcherie...

    ci sarà un modo per ripulire lo schermo, dannazione!

  4. #4
    In questo esempio se premo su command1 disegno un quadrato del lato di 50 pixels (sullo schermo) nella posizione (0, 0)

    per cancellarlo premi su command2 che esegue un refresh dello schermo.

    il refresh è eseguito dalla funzione Invalidate rect alla qualle passo come argomento il device context(che è quello dello schermo cioè zero, il rettangolo di cui fare il refresh che ha come coord (0,0) e la lraghezza e l'altezza del mio schermo (ma tu usi quella del tuo), l'ultimo argomento lascialo invece a true.

    a te lunica funz che interessa è invalidaterect, il resto te lh' messo solo come esempio.




    Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long



    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type

    Private Sub Command1_Click()
    Dim dc As Long
    dc = GetDC(0)
    Rectangle dc, 0, 0, 50, 50
    End Sub

    Private Sub Command2_Click()
    Dim rc As RECT
    rc.Left = 0
    rc.Top = 0
    rc.Bottom = 768-1
    rc.Right = 1024-1
    InvalidateRect 0, rc, True

    End Sub

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 © 2025 vBulletin Solutions, Inc. All rights reserved.