Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Erikoiskansion haku

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

Kommentit

Antti Laaksonen [24.07.2004 12:26:04]

#

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

sooda [24.07.2004 12:31:38]

#

Kummia kyllä noi apihommelit kun stringit ei käy variantteina vaikka se sisältäisi stringiä...

Mestre [24.07.2004 16:15:14]

#

Jee, just tätä mä tarviin.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta