Cara menggunakan fungsi SHGetFolderPath dari Visual Basic

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 252652 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Anda dapat menggunakan SHGetFolderPath fungsi untuk mendapatkan jalan untuk Microsoft Windows folder khusus, yang diidentifikasi oleh mereka CSIDL nilai. Artikel ini mencakup kode contoh menggunakan SHGetFolderPath fungsi dari Microsoft Visual Basic untuk mendapatkan jalan folder aplikasi Data masuk pengguna. Lintasan khas untuk map ini mungkin:
C:\Winnt\Profiles\Broder\Local Settings\Application Data

INFORMASI LEBIH LANJUT

SHGetFolderPath adalah fungsi API baru untuk Windows 2000. Jika Anda tidak sedang menjalankan Windows 2000, kemudian SHGetFolderPath fungsi memerlukan bahwa Anda mendistribusikan berkas SHFolder.dll. Berkas SHFolder.dll bebas redistributable dan dapat diperoleh dari terbaru Platform Software Development Kit (SDK), yang tersedia dari situs Web berikut:
http://www.Microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm
Karena lokasi folder khusus dapat mengubah dari satu sistem ke sistem, Microsoft menyarankan agar Anda menggunakan SHGetFolderPath fungsi untuk menentukan jalur untuk folder khusus. Sebagai contoh, Anda mungkin ingin menentukan folder aplikasi Data pengguna untuk menyimpan data pengguna tertentu untuk aplikasi Anda. Anda dapat menentukan ini pada jangka waktu menggunakan SHGetFolderPath fungsi.

Silakan merujuk pada dokumentasi MSDN untuk menentukan folder yang didukung oleh SHGetFolderPath fungsi.

Sebagai alternatif, jika Anda mengatur referensi Runtime Scripting Microsoft di Referensi kotak dialog, Anda dapat menggunakan FileSystemObject's GetSpecialFolder metode untuk mendapatkan lokasi folder khusus.

Contoh langkah demi langkah

  1. Dalam Visual Basic, mulai projek Standard EXE yang baru. Form1 dibuat secara default.
  2. Tambahkan CommandButton dan TextBox mengontrol Form1.
  3. Di bagian Deklarasi umum jendela kode untuk Form1, paste kode berikut:
    Option Explicit
    
    Private Const S_OK = &H0                ' Success
    Private Const S_FALSE = &H1             ' The Folder is valid, but does not exist
    Private Const E_INVALIDARG = &H80070057 ' Invalid CSIDL Value
    
    Private Const CSIDL_LOCAL_APPDATA = &H1C&
    Private Const CSIDL_FLAG_CREATE = &H8000&
    
    Private Const SHGFP_TYPE_CURRENT = 0
    Private Const SHGFP_TYPE_DEFAULT = 1
    Private Const MAX_PATH = 260
    
    Private Declare Function SHGetFolderPath Lib "shfolder" _
        Alias "SHGetFolderPathA" _
        (ByVal hwndOwner As Long, ByVal nFolder As Long, _
        ByVal hToken As Long, ByVal dwFlags As Long, _
        ByVal pszPath As String) As Long
    
    Private Sub Command1_Click()
    Dim sPath As String
    Dim RetVal As Long
    
    ' Fill our string buffer
    sPath = String(MAX_PATH, 0)
    
    RetVal = SHGetFolderPath(0, CSIDL_LOCAL_APPDATA Or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, sPath)
    
    Select Case RetVal
        Case S_OK
            ' We retrieved the folder successfully
            
            ' All C strings are null terminated
            ' So we need to return the string upto the first null character
            sPath = Left(sPath, InStr(1, sPath, Chr(0)) - 1)
            Text1.Text = sPath
        Case S_FALSE
            ' The CSIDL in nFolder is valid, but the folder does not exist.
            ' Use CSIDL_FLAG_CREATE to have it created automatically
            MsgBox "The folder does not exist"
        Case E_INVALIDARG
            ' nFolder is invalid
            MsgBox "An invalid folder ID was specified"
        
    End Select
    End Sub
    
    					
  4. Tekan tombol F5 untuk menjalankan projek.
  5. Klik CommandButton kontrol. The TextBox kontrol penuh dengan path ke folder aplikasi Data pengguna saat ini.
Perhatikan bahwa CSIDL_FLAG_CREATE Bendera digunakan. Jika folder tidak ada, maka SHGetFolderPath fungsi menciptakan untuk Anda, mengisi string buffer dengan jalan, dan kembali S_OK. Jika Anda tidak menggunakan CSIDL_FLAG_CREATE Bendera, dan folder tidak ada, maka SHGetFolder fungsi kembali S_FALSE dan tidak ada ditempatkan dalam buffer string Anda. Untuk menemukan lokasi folder khusus lainnya, Anda perlu untuk mengubah nFolder parameter lain CSIDL nilai. Konstanta untuk nilai-nilai ini dapat ditemukan di MSDN.

REFERENSI

MSDN dokumentasi di SHGetFolderPath
Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
227051 Cara menentukan lokasi file atau folder pada Windows 2000

Properti

ID Artikel: 252652 - Kajian Terakhir: 21 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 5.0 Professional Edition, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
  • Microsoft Visual Basic 6.0 Professional Edition, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Kata kunci: 
kbapi kbhowto kbshellgrp kbmt KB252652 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:252652

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com