BOOL SHGetSpecialFolderPath(
    HWND hwndOwner,
    LPTSTR lpszPath,
    int nFolder,
    BOOL fCreate
);

解决方案 »

  1.   

    vb程序供参考Const CSIDL_DESKTOP = &H0
    Private Const CSIDL_SYSTEM = &H25
    Private Const CSIDL_WINDOWS = &H24Private Type SHITEMID
        cb As Long
        abID As Byte
    End Type
    Private Type ITEMIDLIST
        mkid As SHITEMID
    End Type
    Private Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hWnd As Long, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long
    Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
    Private Sub Form_Load()
        'KPD-Team 1998
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        'Show an about window
        ShellAbout Me.hWnd, App.Title, "Created by the KPD-Team 1999", ByVal 0&
        'Set the graphical mode to persistent
        Me.AutoRedraw = True
        'Print the folders to the form
        Me.Print " 系统system目录" + GetSpecialfolder(CSIDL_SYSTEM)
        Me.Print "windows目录.: " + GetSpecialfolder(CSIDL_WINDOWS)
        Me.Print "桌面.: " + GetSpecialfolder(CSIDL_DESKTOP)
    End Sub
    Private Function GetSpecialfolder(CSIDL As Long) As String
        Dim r As Long
        Dim IDL As ITEMIDLIST
        'Get the special folder
        r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
        If r = NOERROR Then
            'Create a buffer
            Path$ = Space$(512)
            'Get the path from the IDList
            r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path$)
            'Remove the unnecessary chr$(0)'s
            GetSpecialfolder = Left$(Path, InStr(Path, Chr$(0)) - 1)
            Exit Function
        End If
        GetSpecialfolder = ""
    End Function
      

  2.   

    delphi6里面不行呀:
    uses
    windows,shellapi,.....;var
    p:pchar
    beginshgetspecialfolderlocation(handle,CSIDL_DESKTOPDIRECTORY,p);end;//////////
    [Error] Main.pas(193): Undeclared identifier: 'shgetspecialfolderlocation'[Error] Main.pas(193): Undeclared identifier: 'CSIDL_DESKTOPDIRECTORY'