Làm th? nào đ? vi?t m?t ?ng d?ng Windows XP lưu các d? li?u ngư?i s? d?ng và ?ng d?ng vào v? trí đúng b?ng cách s? d?ng Visual C++

ID c?a bài: 310294 - Xem s?n ph?m mà bài này áp d?ng vào.
Quan tr?ng Bài vi?t này ch?a thông tin v? làm th? nào đ? thay đ?i s? đăng k?. Hãy chắc chắn sao lưu sổ đăng ký trước khi bạn sửa đổi nó. Hãy chắc chắn rằng bạn biết cách khôi phục sổ đăng ký nếu sự cố xảy ra. Để biết thêm thông tin về cách sao lưu, phục hồi, và sửa đổi sổ đăng ký, hãy bấm số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
322756 Cách sao lưu và lưu tr? s? đăng kư trong Windows
Chú ý Microsoft Visual C++.NET 2002, Microsoft Visual C++.NET 2003, Microsoft Visual C++ 2005 và Microsoft Visual C++ 2008 h? tr? c? hai đư?c qu?n l? m? mô h?nh đư?c cung c?p b?i Microsoft.NET Framework và không đư?c qu?n l? b?n đ?a c?a Microsoft Windows ngư?i m?u m?. Thông tin trong bài vi?t này ch? áp d?ng cho không đư?c qu?n l? Visual c ++ m?
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

?ng d?ng ho?t đ?ng v?i hai lo?i tài li?u: nh?ng ngư?i mà ngư?i dùng t?o ra, và nh?ng ?ng d?ng t?o ra. Các ?ng d?ng c?a b?n nên s? d?ng các SHGetFolderPath ch?c năng tr?nh bao đ? l?y các c?p h?p l? đ?a đi?m đ? lưu tr? d? li?u đó là đ?c trưng cho ngư?i dùng và các ?ng d?ng. Đây là đi?u c?n thi?t cho Windows Các ?ng d?ng XP đ? h? tr? nhi?u ngư?i s? d?ng đang s? d?ng cùng m?t máy tính và đ? cho phép ngư?i dùng chuy?n đ?i nhanh chóng.

Bài vi?t này mô t? làm th? nào đ? lưu tr? d? li?u ngư?i dùng trong v? trí chính xác trong các bư?c sau:
  • T?o m?t ?ng d?ng Win32.
  • Thêm m?t Löu laøm tùy ch?n cho cácTệp tr?nh đơn.
  • S? d?ng các tiêu chu?n T?p lưu h?p tho?i đ? Theo m?c đ?nh v? trí chính xác.
  • Ki?m tra l?i t?p tin chính xác lưu v? trí.
  • H?y nh? r?ng s? l?a ch?n c?a ngư?i dùng trư?c đó.
  • Xác minh c?a ngư?i s? d?ng l?a ch?n trư?c.
Trong các bư?c sau đây, bài vi?t này c?ng mô t? nơi b?n ph?i lưu tr? d? li?u ?ng d?ng và làm th? nào đ? đ?m b?o r?ng nó đư?c lưu tr? trong các Đ?a đi?m thích h?p:
  • Phân lo?i d? li?u ?ng d?ng.
  • Lưu tr? d? li?u ?ng d?ng ? đúng v? trí.
  • S? d?ng registry khôn ngoan.

Yêu c?u

Danh sách sau v?ch ra đư?c đ? ngh? ph?n c?ng, ph?n m?m, m?ng cơ s? h? t?ng, k? năng, ki?n th?c, và d?ch v? gói mà b?n c?n:
  • Windows XP Home Edition ho?c Windows XP Chuyên nghi?p
  • Visual Studio 2008, tr?c quan Sudio 2005 ho?c Visual Studio.NET.
  • Ki?n th?c trư?c khi phát tri?n ?ng d?ng Win32

T?o m?t ?ng d?ng Win32

B?t đ?u Visual Studio và t?o ra m?t ?ng d?ng Win32 m?i đ?t tên SavingData.
  • Trong ph?ng thu tr?c quan.NET, nh?p Visual c ++ Các d? án dư?i Các lo?i d? án, sau đó b?mWin32 d? án dư?i Khuôn mẫu. Ch?p nh?n các thi?t đ?t ?ng d?ng m?c đ?nh r?ng các ?ng d?ng thi?t l?p thu?t s? hi?n th?.
  • Trong Visual Studio 2005 ho?c năm 2008, nh?p vào Visual c ++dư?i Các lo?i d? án, sau đó b?m Win32 Dự án dư?i Khuôn mẫu. Ch?p nh?n m?c đ?nh thi?t đ?t ?ng d?ng.

Thêm m?t lưu là tùy ch?n tr?nh đơn t?p tin

  1. Nh?p vào Tài nguyên View, và sau đó b?m đúp chu?tIDC_SAVINGDATA.
  2. Thêm m?t Löu laøm Tuøy choïn menu đ? cácTệp tr?nh đơn. S? d?ng IDM_FILE_SAVEAS như ID m?c tr?nh đơn.
  3. Xác đ?nh v? trí c?a ?ng d?ng WndProc th? t?c c?a s? trong SavingData.cppm và thêm m?t m?i trư?ng h?p tuyên b? trong v?ng các WM_COMMAND o dan adran đ? quá tr?nh các Löu laøm tr?nh đơn tùy ch?n. Cu?c g?i các OnFileSaveAs ch?c năng, mà b?n s? t?o ra trong ph?n k? ti?p. Đi?u này ch?c năng m?t không có tham s?.

    M? c?a b?n s? xu?t hi?n như sau:
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        case IDM_FILE_SAVEAS:
            OnFileSaveAs(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    

S? d?ng tiêu chu?n t?p tin lưu h?p tho?i đ? m?c đ?nh đ? đúng v? trí

Khi m?t ngư?i s? d?ng s? hi?n th? m?t ?ng d?ng T?p lưu(ho?c T?p m?) h?p tho?i l?n đ?u tiên, h?p tho?i ph?i m?c đ?nh thư m?c My Documents c?a ngư?i s? d?ng (ho?c h?u du? c?a tôi Tài li?u, ch?ng h?n như h?nh ?nh c?a tôi cho d? li?u h?nh ?nh và âm nh?c c?a tôi cho âm thanh t?p tin).

LƯU ?: B?n không bao gi? h?t ph?i m? đư?ng d?n bên trong ?ng d?ng c?a b?n b?i v? b?n không bao gi? có th? đ?m b?o v? trí v?t l? c?a nó. Ví d?, ngư?i qu?n tr? có th? d?i thư m?c My Documents v? trí m?ng.
  1. ? trên SavingData.cpp, thêm bao g?m sau đây báo cáo:
    #include <commdlg.h>   // for GetSaveFileName
    #include <shlobj.h>    // for SHGetFolderPath
    					
  2. Thêm nguyên m?u sau cho các OnFileSaveAs ch?c năng:
    void OnFileSaveAs( HWND hWnd );
    					
  3. T?o m?i OnFileSaveAs ch?c năng. Trong ch?c năng này, s? d?ng các SHGetFolderPath ch?c năng k?t h?p v?i các CSIDL_MYPICTURES CSIDL đ?nh danh đ? l?y các v? trí chính xác c?p đ? lưu tr? d? li?u h?nh ?nh. Vư?t qua v? trí thư m?c này đ? các GetSaveFileName ch?c năng đ? hi?n th? các tiêu chu?n T?p lưuh?p tho?i.

    M? c?a b?n s? xu?t hi?n như sau:
    void OnFileSaveAs(HWND hWnd)
    {
       OPENFILENAME openFile;
       TCHAR szPath[MAX_PATH];
       TCHAR szFile[MAX_PATH];
    
        // Initialize OPENFILENAME structure.
        ZeroMemory( &openFile, sizeof(OPENFILENAME) );
        openFile.lStructSize = sizeof(OPENFILENAME);
    
        szFile[0] = '\0';
        openFile.hwndOwner = hWnd;
        openFile.lpstrFile = szFile;
        openFile.nMaxFile = sizeof(szFile)/sizeof(*szFile);
    
        // Default to My Pictures. First, get its path.
        if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_MYPICTURES, 
                                              NULL, 0, szPath ) ) )
        {
           // Set lpstrInitialDir to the path that SHGetFolderPath obtains. 
           // This causes GetSaveFileName to point to the My Pictures folder.
              openFile.lpstrInitialDir = szPath;
        }
        // Display the standard File Save dialog box, defaulting to My Pictures.
        if ( GetSaveFileName( &openFile ) == TRUE )
        {
            // User clicks the Save button.
            // Save the file
        }
        else
        {
           // User cancels the File Save dialog box.
        }
    }
    

Ki?m ch?ng l?i t?p chính xác lưu v? trí

  1. B?m phím F5 đ? xây d?ng các d? án.
  2. Ch?y ?ng d?ng, và nh?p vào Löu laømt? các Tệp tr?nh đơn.
  3. Xác minh r?ng các tiêu chu?n T?p lưu h?p tho?i h?p m?c đ?nh đ? c?p ?nh c?a tôi, như CSIDL_MYPICTURES ch? đ?nh.
  4. Nh?p vào H?y b? đ? đóng h?p tho?i, và đóng ?ng d?ng.

H?y nh? r?ng s? l?a ch?n c?a ngư?i dùng trư?c đó

Đ? s? d?ng ti?p theo c?a các T?p lưu (ho?c T?p m?) h?p tho?i, đó là khuy?n cáo r?ng h?p tho?i Theo m?c đ?nh c?a ngư?i dùng trư?c đó l?a ch?n v? trí.

N?u b?n không cung c?p m?t v? trí thư m?c đ?u tiên trong các OPENFILENAME c?u trúc, GetSaveFileName (và GetOpenFileName) hi?n th? các tiêu chu?n T?p lưu ho?c Tệp M? h?p tho?i, mà đi?m đ?n thư m?c My Documents. Ngoài ra N?u ngư?i dùng đ? s? d?ng m?t trong các h?p tho?i trư?c đây và đ? ch?n m?t thư m?c không m?c đ?nh, các ch?c năng t? đ?ng m?c đ?nh các trư?c đây s? d?ng c?p.

Đ? h? tr? th?c hành t?t nh?t đư?c gi?i thi?u nh?m m?c tiêu m?t v? trí thư m?c c? th? (ví d? như h?nh ?nh c?a tôi) l?n đ?u tiên m?t ngư?i s? d?ng ti?t ki?m ho?c t?i m?t t?p tin, và sau đó đ? m?c đ?nh cho ngư?i dùng trư?c đó đ? ch?n v? trí, b?n nên s? d?ng m?t bi?n Boolean đ? theo d?i cho dù đây là l?n đ?u tiên th?i gian ngư?i s? d?ng đ? bi?u di?n lưu hay m? chi?n d?ch.
  1. T?o ra m?t t?nh BOOL thay đ?i tên bFirstSave trong các OnFileSaveAs ch?c năng, và kh?i t?o nó đ? S? TH?T.
  2. Thay đ?i m? trong v?ng OnFileSaveAs đ? g?i SHGetFolderPath và thi?t l?p các lpstrInitialDir thành viên c?a các OPENFILENAME cơ c?u t? ch?c, ch? khi bFirstSave là S? TH?T.
  3. N?u ngư?i dùng nh?p chu?t Lưu trong cácT?p lưu h?p tho?i, set bFirstSave đ?SAI.

    M? c?a b?n s? xu?t hi?n như sau:
    void OnFileSaveAs(HWND hWnd)
    {
        OPENFILENAME openFile;
        TCHAR szPath[MAX_PATH];
        TCHAR szFile[MAX_PATH];
        static BOOL bFirstSave = TRUE;
    
        // Initialize OPENFILENAME structure.
        ZeroMemory( &openFile, sizeof(OPENFILENAME) );
        openFile.lStructSize = sizeof(OPENFILENAME);
    
        szFile[0] = '\0';
        openFile.hwndOwner = hWnd;
        openFile.lpstrFile = szFile;
        openFile.nMaxFile = sizeof(szFile)/sizeof(*szFile);
    
        // The first time the user saves a document, default to My Pictures.
        if ( TRUE == bFirstSave )
        {
            if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_MYPICTURES, 
                NULL, 0, szPath ) ) )
            {
                // Set lpstrInitialDir to the path that SHGetFolderPath obtains.
                // This causes GetSaveFileName to point to the My Pictures folder.
                openFile.lpstrInitialDir = szPath;
            }
        }
        // Display standard File Save dialog box, defaulting to My Pictures
        // or the user's previously selected location.
        if ( GetSaveFileName( &openFile ) == TRUE )
        {
            // User clicks Save.
            // Save the file.
            bFirstSave = FALSE;
        }
        else
        {
            // User cancels the File Save dialog box.
        }
    }
    

Xác minh c?a ngư?i dùng trư?c đó l?a ch?n

  1. Xây d?ng d? án, và ch?y các ?ng d?ng.
  2. T? các Tệp tr?nh đơn, nh?p vào Lưu Như.
  3. Duy?t t? c?p ?nh c?a tôi đ?n các tài li?u c?a tôi thư m?c, ch?n t?p và b?m Lưu.
  4. T? các Tệp tr?nh đơn, nh?p vào Lưu Như m?t l?n n?a.
  5. Ki?m ch?ng r?ng h?p tho?i m?c đ?nh c?a b?n trư?c l?a ch?n (trong trư?ng h?p này, tài li?u c?a tôi).
  6. Nh?p vào H?y b? đ? b? qua h?p tho?i, và đóng ?ng d?ng.
  7. Ch?y ?ng d?ng, và nh?p vào Löu laømt? các Tệp tr?nh đơn.
  8. Ki?m ch?ng r?ng h?p tho?i m?c đ?nh tr? l?i đ? h?nh ?nh c?a tôi thư m?c.
  9. Đóng h?p tho?i và thoát kh?i ?ng d?ng.

Phân lo?i d? li?u ?ng d?ng

B?n không nên lưu tr? d? li?u ?ng d?ng c? th? (ví d? như t?m th?i t?p, s? thích ngư?i dùng, t?p tin c?u h?nh ?ng d?ng và vv) trong các c?a tôi C?p tài li?u. Thay vào đó, s? d?ng ho?c là m?t đ?a đi?m thích h?p trong các c?a s? Cơ quan đăng k? (đ?i v?i các d? li?u mà không vư?t quá 64 kilobyte) ho?c m?t t?p tin ?ng d?ng c? th? n?m ? m?t d? li?u ?ng d?ng h?p l? thư m?c.

Nó là quan tr?ng đ? lưu tr? d? li?u ?ng d?ng trong đúng v? trí đ? cho phép m?t s? ngư?i s? d?ng cùng m?t máy tính mà không corrupting ho?c ghi đè lên nhau c?a d? li?u và thi?t đ?t.

Đ? xác đ?nh nh?t thích h?p v? trí cho d? li?u ?ng d?ng c?a b?n, s? d?ng các lo?i sau đ? phân lo?i d? li?u:
  • Cho m?i ngư?i dùng (chuy?n vùng): Th? lo?i này mô t? d? li?u ?ng d?ng đó là c? th? cho m?t ngư?i dùng c? th? và nên có s?n cho ngư?i dùng khi h? di chuy?n gi?a các máy tính trong m?t tên mi?n (ví d?, là m?t t? đi?n tùy ch?nh). Lưu ? r?ng đi?u này thi?t l?p không áp d?ng cho các ?ng d?ng không đư?c thi?t k? đ? ch?y trong m?t tên mi?n môi trư?ng.
  • Cho m?i ngư?i dùng (không chuy?n vùng): Th? lo?i này mô t? d? li?u ?ng d?ng đó là c? th? cho m?t ngư?i dùng c? th? nhưng ch? áp d?ng cho m?t máy vi tính (ví d?, m?t phân gi?i màn h?nh ngư?i dùng đ? ch? đ?nh).
  • Cho m?i máy tính (không có ngư?i s? d?ng c? th? và không chuy?n vùng): Th? lo?i này mô t? d? li?u ?ng d?ng áp d?ng cho t?t c? ngư?i s? d?ng và m?t máy tính c? th? (ví d?, m?t ?ng d?ng t? đi?n, m?t đăng nh?p t?p, ho?c t?p t?m th?i).

Lưu tr? d? li?u ?ng d?ng ? đúng v? trí

B?n s? d?ng các SHGetFolderPath ch?c năng đ? l?y các thư m?c d? li?u ?ng d?ng đúng. Không lưu tr? d? li?u ?ng d?ng tr?c ti?p trong c?p này. Thay vào đó, s? d?ng các PathAppend ch?c năng đ? g?n thêm m?t thư m?c con cho con đư?ng mà SHGetFolderPath tr? v?. H?y ch?c ch?n r?ng b?n s? d?ng các công ư?c sau đây:
Phiên b?n Name\Product công ty Name\Product
Ví d?, đư?ng d?n đ?y đ? k?t qu? có th? xu?t hi?n như sau:
\Documents và Settings\All Users\Application Data\My Company\My Product\1.0
Xác đ?nh v? trí thư m?c ?ng d?ng d? li?u chính xác, vư?t qua các thích h?p CSIDL giá tr?, d?a trên các lo?i d? li?u ?ng d?ng c?a b?n.
  • Đ?i v?i m?i d? li?u ngư?i dùng (chuy?n vùng), s? d?ng các CSIDL_APPDATA giá tr?. Đi?u này m?c đ?nh đư?ng d?n sau đây:
    \Documents và Settings\Tên ngư?i dùng> \Application data
  • Đ?i v?i m?i d? li?u ngư?i dùng (không chuy?n vùng), s? d?ng các CSIDL_LOCAL_APPDATA giá tr?. Đi?u này m?c đ?nh đư?ng d?n sau đây:
    \Documents và Settings\Tên ngư?i dùng> \Local Settings\Application data
  • Cho m?i d? li?u máy tính (không có ngư?i s? d?ng c? th? và không chuy?n vùng), s? d?ng các CSIDL_COMMON_APPDATA giá tr?. Đi?u này m?c đ?nh đư?ng d?n sau đây:
    \Documents và Settings\All Users\Application Data
Đo?n m? sau đây ch?ng t? làm th? nào đ? m? m?t t?m th?i t?p tin đăng nh?p, mà n?m bên dư?i CSIDL_COMMON_APPDATA:
include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
void CreateTemporaryFile()
{
   TCHAR szPath[MAX_PATH];
   // Get path for each computer, non-user specific and non-roaming data.
   if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, 
                                    NULL, 0, szPath ) ) )
   {
      TCHAR szTempFileName[MAX_PATH];
      // Append product-specific path - this path needs to already exist
      // for GetTempFileName to succeed.
      PathAppend( szPath, _T("\\My Company\\My Product\\1.0\\") );
      // Generate a temporary file name within this folder.
      if (GetTempFileName( szPath, 
                           _T("PRE"),
                           0,
                           szTempFileName ) != 0 )
      {
         HANDLE hFile = NULL;
         // Open the file.
         if (( hFile = CreateFile( szTempFileName, 
                                   GENERIC_WRITE, 
                                   0, 
                                   NULL, 
                                   CREATE_ALWAYS, 
                                   FILE_ATTRIBUTE_NORMAL, 
                                   NULL )) != INVALID_HANDLE_VALUE )
         {
            // Write temporary data (code omitted).
            CloseHandle( hFile );
         }
      }
      else
          DWORD err = GetLastError();
   }
}

S? d?ng Registry khôn ngoan

Quan tr?ng Ph?n, phương pháp ho?c nhi?m v? này ch?a các bư?c cho b?n bi?t làm th? nào đ? s?a đ?i registry. Tuy nhiên, v?n đ? nghiêm tr?ng có th? x?y ra n?u b?n s?a đ?i registry không chính xác. V? v?y, h?y ch?c ch?n r?ng b?n làm theo các bư?c sau m?t cách c?n th?n. Đ? b?o v? đư?c thêm vào, sao lưu s? đăng k? trư?c khi b?n s?a đ?i nó. Sau đó, b?n có th? khôi ph?c s? đăng k? n?u m?t v?n đ? x?y ra. Đ? bi?t thêm chi ti?t v? làm th? nào đ? sao lưu và khôi ph?c s? đăng k?, h?y nh?p vào s? bài vi?t sau đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
322756 Cách sao lưu và lưu tr? s? đăng kư trong Windows

B?n c?ng có th? s? d?ng registry đ? lưu tr? nh? m?t lư?ng d? li?u ?ng d?ng. D? li?u vư?t quá 64 kilobyte (KB), b?n ph?i s? d?ng m?t thư m?c d? li?u ?ng d?ng. Quan sát các hư?ng d?n sau khi b?n s? d?ng đăng k? đ? lưu tr? d? li?u ?ng d?ng:
  • Đ?i v?i m?t lư?ng nh? d? li?u ngư?i dùng, s? d?ng các HKEY_CURRENT_USER (HKCU) khóa s? đăng k?.
  • Đ?i v?i m?t lư?ng nh? d? li?u máy tính, s? d?ng các HKEY_LOCAL_MACHINE (HKLM) khóa s? đăng k?. ?ng d?ng c?a b?n không nên vi?t đ? HKLM t?i ch?y th?i gian b?i v?, theo m?c đ?nh, không qu?n tr? ngư?i dùng ch? ch? đ?c truy c?p vào các HKLM cây.
  • Vào lúc cài đ?t, ?ng d?ng c?a b?n không ph?i lưu tr? nhi?u hơn n?a so v?i t?ng s? là 128 KB trên HKCUHKLM.
  • Các thành ph?n đ?i tư?ng mô h?nh (COM) thành ph?n đư?c đăng k? bên dư?i nh?ng HKEY_CLASSES_ROOT (HKCR) khóa s? đăng k?. T?i đa 128 KB không bao g?m HKCR.
  • Khi b?n vi?t thư cho HKLM ho?c HKCU, b?n ph?i t?o phím cho tên công ty, tên s?n ph?m, và s?n ph?m s? phiên b?n, như sau:
    Phiên b?n Name\Product HKLM\Software\Company Name\Product
    Phiên b?n Name\Product HKCU\Software\Company Name\Product
  • S? d?ng các ch?c năng cơ quan đăng k? (ví d? như RegCreateKeyExRegSetValueEx) đ? đ?c và vi?t thư m?c đăng k?.

Khắc phục sự cố

  • Đ? giúp đ?m b?o r?ng các ?ng d?ng ch?y trên phiên b?n trư?c c?a Windows thêm vào Windows XP, luôn luôn liên k?t v?i các SHGetFolderPath th?c hi?n trong Shfolder.dll. M?c dù Windows XP bao g?m SHGetFolderPath trong Shell32.dll, phiên b?n trư?c c?a Windows có th? h? tr? các ch?c năng trong v?ng này thư vi?n liên k?t đ?ng (DLL).
  • Shfolder.dll là m?t thành ph?n redistributable và có th? phân ph?i v?i các ?ng d?ng c?a b?n.
  • Không lưu tr? đ? đi?u ki?n đư?ng d?n đ?n tài li?u c?a tôi thư m?c (ho?c các thư m?c h? th?ng khác) trong m?t ?ng d?ng c? th? đ?t như m?t danh sách t?p c?a h?u h?t g?n đây đ? s? d?ng t?p tin b?i v? m?t ngư?i dùng hay qu?n tr? viên có th? di d?i các thư m?c gi?a s? d?ng k? ti?p c?a ?ng d?ng c?a b?n.

THAM KH?O

Đ?i v?i các đ?u trang-hit Visual C++.NET Microsoft Knowledge Base bài vi?t, h?y truy c?p Visual C++.NET trung tâm h? tr? t?i Microsoft sau đây Web site:
Visual c + +.Trung tâm h? tr? m?ng (2002)
http://support.Microsoft.com/Default.aspx?xmlid=FH%3BEN-US%3Bvcnet
Đ? bi?t thông tin t?ng quát hơn v? Visual C++.NET, truy c?p vào các nhóm tin Microsoft Usenet sau đây:
Microsoft.Public.DotNet.languages.VC
Đ? bi?t thêm v? b? hoàn ch?nh các thư m?c đó SHGetFolderPath có th? xác đ?nh, xem ph?n m?m n?n t?ng sau đây c?a Microsoft Phát tri?n Kit (SDK) tài li?u:
CSIDL
http://MSDN.Microsoft.com/en-US/Library/bb762494.aspx
Đ? bi?t thêm chi ti?t v? v? l?p tr?nh nói chung, xem các Microsoft Developer Network (MSDN) Web site sau:
Hư?ng d?n l?p tr?nh Shell
http://msdn2.Microsoft.com/en-US/Library/bb776778.aspx

Thu?c tính

ID c?a bài: 310294 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
T? khóa: 
kbhowtomaster kbnewsgrouplink kbmt KB310294 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:310294

Cung cấp Phản hồi