Newsgroup: it.comp.lang.visual-basic
Titolo: PATH

Come faccio in VB5 a ricavarmi i percorsi della cartella di Windows e
Windows\System ???
Grazie a tutti !!!
Davide
dad...@tin.it

...


 valore.
C'è un pericolo... Questa è la descrizione dei parametri di GetWindowsDirectory
--------------------------------------
UINT GetWindowsDirectory(
  LPTSTR lpBuffer,  // address of buffer for Windows directory
  UINT uSize        // size of directory buffer
);
Parameters
lpBuffer
Pointer to the buffer to receive the null-terminated string containing the path.
This path does not end with a backslash unless the Windows directory is the root
directory. For example, if the Windows directory is named WINDOWS on drive C,
the path of the Windows directory retrieved by this function is C:\WINDOWS. If
Windows was installed in the root directory of drive C, the path retrieved is
C:\.
uSize
Specifies the maximum size, in characters, of the buffer specified by the
lpBuffer parameter. This value should be set to at least MAX_PATH to allow
sufficient room in the buffer for the path.
-----------------------------------
Come mai imposti 32 come dimensione della stringa? Avevo fatto delle prove, e
avevo notato che se la stringa era sottodimensionata si mandava in crash
l'applicazione. In questo caso funziona lo stesso (a parte il fatto che , poiché
il path di windows è quasi sempre lo stesso (meno di 32 char), ma la logica
generale mi sembra errata. Non sarebbe più corretta così?
Dim sWind as String * 260 '260 è il valore di MAX_PATH
Dim lBuf as Long
Dim lResult as Long
lBuf = 0&
lResult  = GetWindowsDirectory(lBuf, sWind) 'lResult viene caricato con la
lunghezza effettiva del buffer, zero di terminazione escluso
lBuf =lResult
lResult  = GetWindowsDirectory(lBuf, sWind)
sWind = left$(sWind, lResult)
...E così via anche per System?
Scusami i dubbi, ciao
Flavio Ronco
f.ronco@*NonMiServeNiente*
flashnet.it
http:\\
www.geocities.com
\Paris\3461\
-------------------------------------------------------------
"Dio ha uno screensaver. Speriamo che non tocchi il mouse..."


(Ciao Domendico :-))
X Davide:
Giusto per conoscenza, sappi che e' possibile ricavare anche le cartelle
standard che windows usa per gestire il sistema operativo, tipo:
il path del Descktop
il path dei SendTo
il path della cartella Programmi
Ecc.. ecc...
per far cia' devi usare queste API:
Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hwndOwner
As Long, ByVal nFolder As Long, ByRef ppidl As Long) As Long
Declare Function SHGetPathFromIDListA Lib "shell32" (ByVal pidl As Long,
ByRef pszPath As Byte) As Long
Un semplice e chiaro esempio d'uso lo puoi trovare sul Sito Comune di questo
NG, nell'esempio chiamato CartelleSTD.ZIP
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://www.murialdo.it/it_lang_vb

sWind = left$(sWind, lResult)
Il resto potrebbe anche andare bene, ma col tuo sistema sei costretto a
chiamare due volte GetWindowsDirectory: una per sapere di quanti caratteri è
il path, e la seconda per riempire il buffer con i caratteri.
Piuttosto, le dichioarazioni che ho dato ieri sono sbagliate, a causa di
ListAPI. In realtà tutti i parametri di entrambe le funzioni devono essere
ByVal.
Saluti,
Domenico

 Domenico
Chiedo venia, |:-[ trovo le pulci e dimentico gli elefanti... Hai ragione, sono
l'eterno distratto, mi inginocchio sui ceci...
Solo un appunto sul mio metodo: è vero che faccio due chiamate, ma ottengo la
dimensione della stringa, che uso con l'istruzione Len per ripulire la stringa
restituita. Mi è sembrato più elegante che usare Instr per cercare il chr$(0).
Il codice è meno incasinato. Questione di gusti.
Ciao e grazie per le correzioni. I tipi distratti ne sono sempre grati.
Si potrebbe disquisire sul fatto che un distratto faccia il programmatore, ma
qui mi ritiro.
Ciao
Flaivo Ronco
