Il .NET Framework ci ha abituato troppo bene perchè il set di classi è molto ricco e copre (
"wrappa") molte delle funzionalità e quindi delle
API del Sistema Operativo. Tutte queste classi del Framework sono costruite sulla struttura precedente del sistema (built on top).
Qualcosa però è rimasto fuori. Chi programma in Visual C++ sa cosa vuol dire. Con
Visual C++ infatti si hanno a disposizione tutti gli header files (.h) e si può accedere virtualmente a tutte le funzionalità di Windows dalle più semplici alle più complesse.
Gli ingegneri di Microsoft però hanno pensato a tutto e hanno dato a noi sviluppatori la possibilità di creare interoperabilità fra .NET e Win32 quindi il vecchio sistema di API unmanaged. Ma a cosa ci può servire l'interoperabilità ?
Ci può servire appunto per richiamare oggetti COM sviluppati in altri linguaggi oppure più banalmente chiamare funzioni API non incluse nel Framework.
Vediamo quindi qui di seguito com'è possibile con .NET nascondere o visualizzare la barra degli strumenti di Windows. Quello che ci serve innazitutto è definire e importare le due API di base che sono
FindWindow e
ShowWindow.
La prima delle due ci serve per recuperare l'
Handle della finestra e la seconda per visualizzare o nasconderla. Ricordiamo che anche la barra degli strumenti di Windows è una finestra come tutte le altre.
Utilizziamo in linguaggio
VB.NET per realizzare il nostro esempio pratico.
Importiamo quindi le due funzioni:
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Sono necessarie anche due costanti:
Public Const SW_HIDE = 0
Public Const SW_SHOW = 5
Ed ora passiamo al codice. Prima quello per nascondere la Barra:
VB.NETDim lngHandle As Long
lngHandle = FindWindow("Shell_TrayWnd", "")
ShowWindow(lngHandle, SW_HIDE)
e poi il codice per farla riapparire:
VB.NETDim lngHandle As Long
lngHandle = FindWindow("Shell_TrayWnd", "")
ShowWindow(lngHandle, SW_SHOW)
Il codice è molto simile, cambia solo il secondo parametro della funzione
ShowWindow. E' molto semplice capire che un parametro significa finestra nascosto e l'altro finestra visibile.
Alla funzione
FindWindow invece abbiamo passato il nome della classe della finestra,
Shell_TrayWnd. Se volete ripetere l'esperimento con altre finestre ciò è possibile. Se avete bisogno di sapere che nome ha la classe della finestra potete usare un famoso strumento contenuto in
Visual Studio chiamato
Spy++.