■ SHGetSpecialFolderLocation

デスクトップ、お気に入り、ごみ箱等の特殊なフォルダのパス名を取得します
取得したパス名はLong型のIDで返されるので、SHGetPathFromIDList を使用して
ID値をパス名に変換する必要があります
変換後のパス名格納バッファは少なくとも260バイト以上にします
指定可能な特殊フォルダはこちら (足りないものがあるかも知れません) を参照してください

Const CSIDL_DESKTOP = &H0         ' デスクトップ
Const MAX_PATH = 260

Declare Function SHGetSpecialFolderLocation Lib "shell32" _
        (ByVal hwndOwner As Long, ByVal nFolder As Long, _
        ByRef pIdl As Long) As Long

Declare Function SHGetPathFromIDList Lib "shell32.dll" _
        Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
        ByVal pszPath As String) As Long

Dim w_ret   As Long               ' 戻り値
Dim w_pidl  As Long               ' パスID値
Dim w_buff  As String * MAX_PATH  ' パス名格納バッファ

    ' デスクトップのパスを取得する
    w_ret = SHGetSpecialFolderLocation(Form1.hWnd, CSIDL_DESKTOP, w_pidl)
    ' 正常に取得できた場合
    If w_ret = 0 Then
        ' パス名格納バッファを初期化
        w_buff = String$(MAX_PATH, vbNullChar)
        ' 返却されたID値をパス名に変換する
        w_ret = SHGetPathFromIDList(w_pidl, w_buff)
    End If