Kirjoittaja: sooda
Kirjoitettu: 24.07.2004 – 24.07.2004
Tagit: koodi näytille, vinkki
Hakee käyttäjän omia erikoiskansioita tyyliin työpöytä, käynnistävalikko...
Public Enum ERKKARIKANSIOT
ERKKARIKANSIO_OMAT_TIEDOSTOT = &H5&
ERKKARIKANSIO_TYÖPÖYTÄ = &H0&
ERKKARIKANSIO_KÄYNNISTÄVALIKKO = &HB&
ERKKARIKANSIO_OHJELMAT = &H2& 'käynnistä-valikossa
ERKKARIKANSIO_KÄYNNISTYS = &H7& 'käynnistä-valikko/ohjelmat:ssa
ERKKARIKANSIO_TIEDOSTOT = &H8& 'käynnistä-valikossa
ERKKARIKANSIO_SUOSIKIT = &H6& 'joskus tämäkin käynnistävalikossaki
ERKKARIKANSIO_LÄHETÄ = &H9& 'klikkaa oikeella filua -> lähetä-homma! Tadaa.
ERKKARIKANSIO_UUSI = &H15& 'klikkaa kansion tyhjää tilaa oikella->uusi-homma
ERKKARIKANSIO_FONTIT = &H14&
End Enum
'hakee id:n
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hWndOwner As Long, ByVal nFolder As ERKKARIKANSIOT, pidl As Long) As Long
'hakee ite kansion
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
'vapauttaa id:n
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
Function HankiErkkariKansio(Kansio As ERKKARIKANSIOT) As String
Dim Polku As String, Idee As Long 'pitää dimmata jotta stringi toimisi. Ideekään ei toiminut mulla dimmaamattomana
If SHGetSpecialFolderLocation(vbNull, Kansio, Idee) = 0 Then 'jos ei virheitä
Polku = Space(255) 'täytetään se, muuten ei toimi. tämä hakee 255 ekaa merkkiä jotka varmaan riittää, 255 on vaan kiva luku :D
If SHGetPathFromIDList(ByVal Idee, ByVal Polku) Then 'jos löytyy
CoTaskMemFree ByVal VarPtr(Idee) 'vapautellaan muistia
HankiErkkariKansio = Left(Polku, InStr(Polku, Chr(0)) - 1) 'ja haetaan se
End If
End If
End FunctionHyvin tuntui toimivan. Tässä pari muuta erikoishakemistoa:
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Function HaeWindowsHakemisto() As String
Dim nimi As String * 255, pituus As Integer
pituus = GetWindowsDirectory(nimi, 255)
HaeWindowsHakemisto = Left(nimi, pituus)
End Function
Function HaeJarjestelmaHakemisto() As String
Dim nimi As String * 255, pituus As Integer
pituus = GetSystemDirectory(nimi, 255)
HaeJarjestelmaHakemisto = Left(nimi, pituus)
End Function
Function HaeValiaikaisHakemisto() As String
Dim nimi As String * 255, pituus As Integer
pituus = GetTempPath(255, nimi)
HaeValiaikaisHakemisto = Left(nimi, pituus)
End FunctionKummia kyllä noi apihommelit kun stringit ei käy variantteina vaikka se sisältäisi stringiä...
Jee, just tätä mä tarviin.