Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione SHGetSpecialFolderPath
Se vi avete la necessità di gestire cartelle speciali quali 'Favoriti' o 'Temporary Internet Files' dovrete sicuramente utilizzare questa funzione.
Ad esempio ad alcuni sarà capitato di dover lavorare con i files contenuti nella cache del proprio computer. L'API SHGetSpecialFolderPath risolve questo problema.
L'unico inconveniente è l'assoluta mancanza di alcun indicazione nell'API Viewer, sia dal punto di vista della dichiarazione sia da quello dell'enumerazione delle costanti.
Indicheremo allora all'interno di questo articolo la lista completa delle costanti necessarie a manipolare la funzione.
Cominciamo innanzitutto a vedere la dichiarazione della SHGetSpecialFolderPath:

Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" (ByVal _
hWnd As Long, ByVal lpszPath As String, ByVal nFolder As Integer, ByVal fCreate As Boolean) As _
Boolean

Come si denota facilmente dalla dichiarazione, la SHGetSpecialFolderPath fa parte di Shell32.DLL e necessita di quattro parametri, due dei quali in forma di intero a 32 bit (quelli che vengono dichiarati As Long), uno in forma testuale (As String) ed un altro in forma booleana ossia nella forma True-False (As Boolean). E' necessario conoscere quali tipi di dati assegnare alla funzione per l'elaborazione, per evitare errori successivi.
Il fatto che sia presente un Alias indica che in Shell32 è presente sia la versione ANSI che la Unicode di questa stessa funzione. La terminazione con il carattere 'A' della dicitura 'HGetSpecialFolderPathA' ci ricorda che delle due versioni viene utilizzata quella in formato ANSI.
Recuperando la discussione sui parametri da passare alla funzione, vediamoli uno per uno in dettaglio nella seguente tabella:

hWnd E' il riferimento alla Form che si sta utilizzando. Nel caso in cui ci si riferisca a Form1 dunque sarà necessario indicare Form1.hWnd oppure Me.hWnd se la finestra in questione è la stessa nella quale è stata dichiarata la SHGetSpecialFolderPath;
lpszPath E' il buffer ossia la quantità di memoria utilizzata per archiviare il valore di ritorno della funzione (che è un valore in formato testuale in quanto indica un percorso fisico all'interno dell'hard disk, ad esempio: C:\Documenti\Sottocartella).
Il buffer in questione può essere inizializzato al massimo con 255 caratteri. Converrà in ogni caso indicare tale valore in quanto a priori non si conosce la lunghezza massima della stringa di ritorno;
nFolder Indica quale tipo di cartella speciale prendere in considerazione. Il valore di tale parametro è da ricercare nelle costanti elencate all'interno della tabella successiva.
fCreate E' il valore booleano al quale si faceva riferimento poco prima. fCreate indicherà se sarò necessario creare una cartella con le caratteristiche di quella che si sta cercando nel caso in cui manchi all'interno dell'hard disk;

E' piuttosto difficile trovare le costanti della SHGetSpecialFolderPath in quanto MSDN Library non ne fa riferimento, nonostante rappresentino il tipo di directory che s'intende ricercare all'interno dell'hard disk. In ogni caso l'elenco completo è il seguente:
CSIDL_ADMINTOOLS directory di sistema utilizzata per archiviare gli strumenti per ogni singolo utente;
CSIDL_ALTSTARTUP directory di sistema che corrisponde al gruppo di programmi nel menu Startup di Avvio;
CSIDL_APPDATA directory di sistema che archivia particolari dati delle applicazioni. Un comune percorso per questa cartella è ad esempio C:\Windows\Profili\**nomeutente**\Application Data;
CSIDL_BITBUCKET directory virtuale contenente tutti gli oggetti archiviati nel Cestino;
CSIDL_COMMON_ALTSTARTUP directory di sistema che corrisponde al gruppo di programmi nel menu Startup di Avvio. Costante valida solamente per Windows NT;
CSIDL_COMMON_APPDATA directory di sistema che archivia particolari dati delle applicazioni per tutti gli utenti. Un comune percorso per questa cartella è ad esempio C:\Windows\Profili\**nomeutente**\Application Data;
CSIDL_COMMON_DESKTOPDIRECTORY directory di sistema che archivia le cartelle ed i files che appaiono sul desktop;
CSIDL_COMMON_FAVORITES directory di sistema che archivia gli oggetti aggiunti a Preferiti. Costante valida soltanto per Windows NT;
CSIDL_COMMON_PROGRAMS directory di sistema che archivia i programmi presenti nel menu Avvio;
CSIDL_CONTROLS directory virtuale che archivia le icone della cartella Pannello di Controllo;
CSIDL_COOKIES directory di sistema che archivia tutti i cookies;
CSIDL_DESKTOP directory virtuale del desktop;
CSIDL_DESKTOPDIRECTORY directory che archivia tutti i dati del desktop (da non confondere con CSIDL_DESKTOP);
CSIDL_DRIVES directory che archivia tutti i dati del computer locale;
CSIDL_FAVORITES directory di sistema che archivia tutti i dati che vengono aggiunti a Preferiti;
CSIDL_FONTS directory di sistema che archivia tutti i tipi di carattere utilizzati dal computer;
CSIDL_HISTORY directory di sistema che archivia tutti i dati della cronologia Internet;
CSIDL_INTERNET directory che rappresenta l'area Internet;
CSIDL_INTERNET_CACHE directory di sistema nella quale sono archiviati i documenti internet temporanei;
CSIDL_PRINTERS directory virtuale che contiene i dati delle stampanti installate;
CSIDL_PROFILE directory virtuale che contiene il profilo dell'utente;
CSIDL_PROGRAM_FILES directory 'Program Files' contenuta nella cartella C\;
CSIDL_RECENT directory di sistema che contiene i files recenti;
CSIDL_SENDTO directory di sistema che contiene le voci del menu 'Invia a...' (es: Invia a cestino, invia a floppy da 3,5 pollici ecc.);

Per concludere l'articolo, facciamo un esempio nel quale si andrà a ricercare il percorso della cartella 'Avvio', che per default in Windows 95,98 e Me è posizionata all'indirizzo C:\Windows\Menu Avvio.
Cominciamo a dichiarare la funzione e le sue costanti; tutte le dichiarazioni verranno eseguite come Private in quanto l'area nella quale dovranno operare sarà limitata alla Form unica, che per default è Form1.
Il secondo passo da compiere consiste nel dichiarare all'interno della sottoprocedura Load di Form1 le variabili che fungeranno da parametri una volta riempite di dati ed assegnate alla funzione SHGetSpecialFolderPath:

Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" (ByVal _
hWnd As Long, ByVal lpszPath As String, ByVal nFolder As Integer, ByVal fCreate As Boolean) As Boolean
Private Const CSIDL_DESKTOP = &H0
Private Const CSIDL_INTERNET = &H1
Private Const CSIDL_PROGRAMS = &H2
Private Const CSIDL_CONTROLS = &H3
Private Const CSIDL_PRINTERS = &H4
Private Const CSIDL_PERSONAL = &H5
Private Const CSIDL_FAVORITES = &H6
Private Const CSIDL_STARTUP = &H7
Private Const CSIDL_RECENT = &H8
Private Const CSIDL_SENDTO = &H9
Private Const CSIDL_BITBUCKET = &HA
Private Const CSIDL_STARTMENU = &HB
Private Const CSIDL_DESKTOPDIRECTORY = &H10
Private Const CSIDL_DRIVES = &H11
Private Const CSIDL_FONTS = &H14
Private Const CSIDL_TEMPLATES = &H15
Private Const CSIDL_COMMON_STARTMENU = &H16
Private Const CSIDL_COMMON_PROGRAMS = &H17
Private Const CSIDL_COMMON_STARTUP = &H18
Private Const CSIDL_COMMON_DESKTOPDIRECTORY = &H19
Private Const CSIDL_APPDATA = &H1A
Private Const CSIDL_ALTSTARTUP = &H1D
Private Const CSIDL_COMMON_ALTSTARTUP = &H1E
Private Const CSIDL_COMMON_FAVORITES = &H1F
Private Const CSIDL_INTERNET_CACHE = &H20
Private Const CSIDL_COOKIES = &H21
Private Const CSIDL_HISTORY = &H22
Private Sub Form_Load()
Dim blnReturn As Long
Dim strBuffer As String
strBuffer = Space(255)
blnReturn = SHGetSpecialFolderPath(0, strBuffer, CSIDL_STARTMENU, False)
strBuffer = Left(strBuffer, InStr(strBuffer, Chr(0)) - 1)
End Sub



Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it