Home  About me  Rubriche  Links 

 

Programmazione

API - VB:Ripristinare lo stato di una finestra di cui è noto il titolo

Autore: Fabio Pacioni - 2006

L' articolo vuole mostrare come con Visual Basic sia possibile, facendo uso delle API , agire su di una finestra
ridotta ad icona (anche appartenete ad un altra applicazione) ripristinandone il precedente stato

Per manipolare lo stato di una finestra la prima cosa che bisogna conoscere è il suo Handle.
Senza addentrarci troppo nel dettaglio della programmazione di sistema diciamo
semplicemente che l'Handle è un identificatore assegnato univocamente ad una
finestra al momento della sua creazione.

La funzione API FindWindow restituisce l'Handle di una finestra di cui si conosce il titolo
(cioè quello che è scritto nella barra del titolo della finestra). In realtà andrebbe passato anche
un altro parametro, la Windows Class ma, noi lo ometteremeo.In pratica come al solito senza dire
di cosa si tratti diciamo che se non esistono altre finestre aperte con lo stesso nome
(cosa alquanto rara) l'API ... non ha problemi ad identificare l'Handle di una finestra di cui
conosce solo il titolo.

Una volta noto l'Handle della finestra in esame per manipolare il suo stato abbiamo bisogno
dell'API ShowWindow. Tale funzione accetta in ingresso, oltre all'handle (ovviamente),
un altro parametro. Tale parametroè nCmdShow e definisce lo stato con cui la finestra
verrà visualizzata. Le possibili impostazioni per nCmdShow sono le seguenti:

SW_HIDE : Nasconde la finestra e ne visualizza un' altra.

SW_MAXIMIZE : Massimizza la finestra.

SW_MINIMIZE : Minimizza la finestra ed attiva la successiva secondo Z-order.

SW_RESTORE : Attiva e riporta nello stato precedente la finestra ridotta ad icona.

SW_SHOW : Attiva la finestra e la visualizza nella posizione e dimensione corrente.

SW_SHOWMAXIMIZED: Attiva e massimizza la finestra

SW_SHOWMINIMIZED : Attiva e minimizza la finestra

SW_SHOWMINNOACTIVE : Visualizza la finestra minimizzata.Se era attiva, rimane attiva.

SW_SHOWNA :Visualizza la finestra nel suo stato corrente.

SW_SHOWNOACTIVATE :Visualizza la finestra nel suo recente stato .Se era attiva ci rimane

SW_SHOWNORMAL :Attiva e visualizza la finestra.Se max o min, torna nello stato originale

I valori di ritorno sono:

non-zero : Se la finestra era visibile
zero: Se la finestra era visibile

Codice VB

Dichiarazione delle API e delle costanti. Incollare il codice seguente
all'interno di un modulo generale.

' Dichiarazione delle costanti
   Public Const SW_HIDE = 0
   Public Const SW_MAXIMIZE = 3
   Public Const SW_MINIMIZE = 6
   Public Const SW_RESTORE = 9
   Public Const SW_SHOW = 5
   Public Const SW_SHOWDEFAULT = 10
   Public Const SW_SHOWMAXIMIZED = 3
   Public Const SW_SHOWMINIMIZED = 2
   Public Const SW_SHOWMINNOACTIVE = 7
   Public Const SW_SHOWNA = 8
   Public Const SW_SHOWNOACTIVATE = 4
   Public Const SW_SCROLLCHILDREN = &H1
   Public Const SW_SHOWNORMAL = 1
'Dichiarazione delle API
 
   Public Declare Function ShowWindow Lib "user32"_
	(ByVal hwnd As Long,ByVal nCmdShow As Long) As Long
   Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA"_
   (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long


Creare una casella di testo di nome text1 ed un pulsante di comando di nome
Command1. Per la parte privata di questo incollare il seguente codice:

   Private Sub Command1_Click()
   Dim stra As String
   stra = Text1.Text
   hwn = FindWindow(0&, stra) ' trova l'handle
   ShowWindow hwn, SW_RESTORE ' la mostr nella sua posizione originaria
   End Sub
'altre API utili
'openIcon > apre una finestra ridotta a icona
'closeicon > riduce ad icona


Esempio di utilizzo.

Avviate il Blocco note

  • Lanciate nostra appicazione
  • Copiate il nome che compare nella barra del titolo del blocco note
    all 'interno della casella di testo della nostra applicazione.
  • Riducete ad icona il blocco note
  • Cliccate sul bottone della nostra applicazione e la finestra del blocco
    note verrà riportata nello stato precedente.

NB : Se il blocco note non è ridotto ad icona quando premete command1 la finestra del blocco note non prende lo stato attivo.
Questo accade perchè la pressione di Command1 causa il passaggio dello stato attivo alla nostra applicazione.
Per far si che il blocco note prenda comunque lo stato attivo dovete prima nascondere la finestra relativa e poi ripristinarla chiamando
due volte l'API ShowWindow in questo modo:

ShowWindow hwn, SW_HIDE 'nosconde la finesta
ShowWindow hwn, SW_RESTORE ' la mostra nella sua posizione originaria