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 Function
Hyvin 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 Function
Kummia kyllä noi apihommelit kun stringit ei käy variantteina vaikka se sisältäisi stringiä...
Jee, just tätä mä tarviin.