كيفية كتابة تطبيقات Windows XP الذي يقوم بتخزين بيانات التطبيق والمستخدم في الموقع الصحيح باستخدام Visual c + +

هام: تتضمن هذه المقالة معلومات حول كيفية تعديل التسجيل. تأكد من عمل نسخة احتياطية من التسجيل قبل تعديله. تأكد من معرفة كيفية استعادته في حالة حدوث مشكلة. لمزيد من المعلومات حول كيفية عمل نسخة احتياطية واستعادة وتعديل السجل، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
322756 كيفية عمل نسخة احتياطية من السجل واستعادته في نظام التشغيل Windows
ملاحظة: تدعم Microsoft Visual c + +.NET 2002 و Microsoft Visual c + +.NET 2003، Microsoft Visual c + + 2005 و Microsoft Visual c + + 2008 كل من طراز التعليمات البرمجية المدارة التي يتم توفيرها من قبل Microsoft.NET Framework وغير المدارة نموذج التعليمات البرمجية الأصلية في Microsoft Windows. تنطبق المعلومات الواردة في هذه المقالة فقط على التعليمات البرمجية غير المدارة Visual c + +

ملخص

التطبيقات التي تستخدم مع نوعين من الوثائق: تلك التي يقوم المستخدم بإنشاء وتلك التي تقوم بإنشاء التطبيق. يجب على التطبيقات الخاصة بك استخدم الدالة shell شجيتفولديرباث لاسترداد مواقع مجلد صحيح لتخزين البيانات الخاصة بالمستخدم والتطبيق. وهذا ضروري لتطبيقات نظام التشغيل Windows XP لدعم العديد من المستخدمين الذين يستخدمون نفس الكمبيوتر وتمكين المستخدمين من التبديل بسرعة.

توضح هذه المقالة كيفية تخزين بيانات المستخدم في المكان الصحيح في الخطوات التالية:
  • إنشاء تطبيق Win32.
  • خيار " حفظ باسم " لإضافة
    القائمة " ملف ".
  • استخدم القياسية حفظ ملف مربع الحوار الافتراضي إلى الموقع الصحيح.
  • تحقق من موقع حفظ الملف الصحيح.
  • تذكر التحديد السابق الخاص بالمستخدم.
  • تحقق من تحديد المستخدم السابقة.
في الخطوات التالية، توضح هذه المقالة أيضا كيفية التأكد من أن يتم تخزينه في المواقع المناسبة وأين يجب تخزين بيانات التطبيق:
  • تصنيف بيانات التطبيق.
  • تخزين بيانات التطبيق في الموقع الصحيح.
  • استخدام التسجيل عدالة.

متطلبات

توضح القائمة التالية الأجهزة الموصى بها، البرامج، البنية الأساسية للشبكة، والمهارات والمعارف وحزم الخدمات التي تحتاجها:
  • Windows XP Professional أو Windows XP Home Edition
  • Visual Studio 2008 Visual سوديو 2005 أو Visual Studio.NET.
  • علم مسبق بتطوير تطبيقات Win32

إنشاء تطبيق Win32

بدء تشغيل Visual Studio ومن إنشاء تطبيق Win32 جديد يسمى سافينجداتا.
  • في Visual Studio.NET, انقر فوق مشاريع Visual c + + ضمن أنواع المشروعومن ثم انقر فوق
    مشروع Win32 ضمن قوالب. قبول الإعدادات الافتراضية التطبيق يعرض معالج إعداد التطبيق.
  • في Visual Studio 2005 أو 2008، انقر فوق Visual c + +ضمن أنواع المشاريع، ومن ثم انقر فوق مشروع Win32 ضمن قوالب. قبول الإعدادات الافتراضية التطبيق.

أضف حفظ كخيار القائمة "ملف"

  1. انقر فوق طريقة عرض مورد، وانقر نقراً مزدوجاً فوق
    IDC_SAVINGDATA.
  2. إضافة خيار قائمة حفظ باسم
    القائمة " ملف ". استخدام IDM_FILE_SAVEAS كمعرّف عنصر القائمة.
  3. تحديد موقع WndProc الإطار الداخلي التطبيق داخل SavingData.cppm وإضافة بيان حالة جديدة داخل قسم WM_COMMAND لمعالجة خيار القائمة ' حفظ باسم . استدعاء دالة أونفيليسافيس ، التي ستقوم بإنشائها في المقطع التالي. تحتاج هذه الدالة على أية معلمات.

    يجب أن تظهر التعليمات البرمجية الخاصة بك كما يلي:
    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;

استخدم القياسية "حفظ ملف" مربع الحوار الافتراضي إلى الموقع الصحيح

عندما يعرض مستخدم مربع حوار حفظ الملف (أو فتح ملف) الخاص بالتطبيق للمرة الأولى، يجب أن الافتراضية مربع الحوار إلى مجلد المستندات الخاص بالمستخدم (أو تابع "المستندات"، مثل الصور لبيانات الصور والموسيقى للملفات الصوتية).

ملاحظة: يجب عدم جد رمز مسار داخل التطبيق الخاص بك نظراً لعدم تضمن موقعة الفعلي. على سبيل المثال، مسؤول قد نقل مجلد المستندات إلى موقع شبكة.
  1. في أعلى SavingData.cpp، إضافة تتضمن البيانات ما يلي:
    #include <commdlg.h>   // for GetSaveFileName#include <shlobj.h>    // for SHGetFolderPath

  2. إضافة النموذج الأولى التالية للدالة أونفيليسافيس :
    void OnFileSaveAs( HWND hWnd );
  3. إنشاء دالة أونفيليسافيس الجديدة. داخل هذه الدالة، استخدم الدالة شجيتفولديرباث بالاقتران مع معرف كسيدل CSIDL_MYPICTURES استرداد موقع المجلد الصحيح لتخزين بيانات الصورة. تمرير موقع هذا المجلد للدالة جيتسافيفيلينامي لعرض مربع الحوار حفظ ملفقياسي.

    يجب أن تظهر التعليمات البرمجية الخاصة بك كما يلي:
    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.
    }
    }

التحقق من صحة الملف موقع الحفظ

  1. اضغط المفتاح F5 لإنشاء المشروع.
  2. قم بتشغيل التطبيق، وانقر فوق حفظ باسممن القائمة ملف .
  3. تأكد من أن مربع حوار حفظ الملف القياسي الافتراضي لمجلد "الصور"، كما يحدد CSIDL_MYPICTURES .
  4. انقر فوق إلغاء الأمر لإغلاق مربع الحوار، ثم إغلاق التطبيق.

تذكر التحديد السابق الخاص بالمستخدم

لاستخدام لاحق حفظ الملف (أو
فتح ملف) مربع الحوار، فمن المستحسن الافتراضي مربع الحوار للمستخدم تحديد الموقع مسبقاً.

إذا لم تقم بكتابة موقع مجلد أولية داخل بنية فتح الملف ، جيتسافيفيليناميGetOpenFileName) عرض قياسي حفظ ملف أو فتح ملف مربع الحوار، الذي يشير إلى المجلد "المستندات". بالإضافة إلى ذلك، إذا استخدمت أحد مربعات الحوار هذه مسبقاً المستخدم ثم اختيار مجلد غير افتراضي، هذه المهام تلقائياً بشكل افتراضي المجلد مستخدمة مسبقاً.

لدعم أفضل الممارسات الموصى بها لاستهداف موقع مجلد معين (مثل الصور) في المرة الأولى مستخدم حفظ أو تحميل ملف وافتراضياً إلى الموقع المحدد مسبقاً للمستخدم بعد ذلك، يجب استخدام متغير Boolean لتعقب ما إذا كانت هذه هي المرة الأولى يؤديه المستخدم حفظ أو عملية مفتوحة.
  1. إنشاء متغير BOOL ثابت مسمى بفيرستسافي في الدالة أونفيليسافيس وتهيئة إلى TRUE.
  2. تعديل التعليمات البرمجية داخل أونفيليسافيس لاستدعاء شجيتفولديرباث وتعيين عضو لبسترينيتيالدير بنية OPENFILENAME ، فقط في حالة تحقق بفيرستسافي .
  3. المستخدم بالنقر فوق حفظ
    مربع الحوار حفظ ملف، مجموعة بفيرستسافي إلى
    خطأ.

    يجب أن تظهر التعليمات البرمجية الخاصة بك كما يلي:
    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.
    }
    }

تحقق من تحديد المستخدم السابق

  1. بناء المشروع، وتشغيل التطبيق.
  2. من القائمة ملف ، انقر فوق حفظ باسم.
  3. الاستعراض من مجلد "الصور" إلى مجلد "المستندات"، حدد ملف وانقر فوق حفظ.
  4. من القائمة ملف ، انقر فوق حفظ باسم مرة أخرى.
  5. تأكد من أن مربع الحوار الافتراضي إلى التحديد السابق (في هذه الحالة، "المستندات").
  6. انقر فوق إلغاء الأمر لإغلاق مربع الحوار، ثم إغلاق التطبيق.
  7. قم بتشغيل التطبيق، وانقر فوق حفظ باسممن القائمة ملف .
  8. تأكد من أن مربع الحوار الافتراضي إلى مجلد "الصور".
  9. إغلاق مربع الحوار، ثم إنهاء التطبيق.

تصنيف بيانات التطبيق

لا يجب تخزين البيانات الخاصة بالتطبيق (مثل الملفات المؤقتة وتفضيلات المستخدم ملفات تكوين التطبيق وهكذا) في المجلد "المستندات". بدلاً من ذلك، استخدم موقعا مناسباً في "تسجيل Windows" (للبيانات التي لا يزيد عن 64 كيلو بايت) أو ملف الخاصة بالتطبيق الموجود في مجلد "بيانات التطبيق" صالح.

من المهم لتخزين بيانات التطبيق في الموقع الصحيح للسماح لعدة أشخاص باستخدام نفس الكمبيوتر دون إفساد أو الكتابة فوق بيانات بعضها البعض والإعدادات.

لتحديد أنسب مكان لبيانات التطبيق الخاص بك، استخدم الفئات التالية لتصنيف البيانات:
  • لكل مستخدم (المتجولة): يصف هذه الفئة بيانات التطبيق الخاصة بمستخدم معين ويجب أن تتوفر للمستخدم كما أنه أو أنها تتحرك بين أجهزة الكمبيوتر ضمن مجال (على سبيل المثال، قاموس مخصص). لاحظ أن هذا الإعداد لا ينطبق على التطبيقات غير المصممة تعمل في بيئة مجال.
  • لكل مستخدم (غير المتجولة): يصف هذه الفئة بيانات التطبيق الخاصة بمستخدم معين ولكنها تنطبق فقط على جهاز كمبيوتر واحد (على سبيل المثال، دقة جهاز عرض المحددة من قبل المستخدم).
  • لكل كمبيوتر (غير مستخدم معينة وغير المتجولة): يصف هذه الفئة بيانات التطبيق التي تنطبق على كافة المستخدمين والكمبيوتر (على سبيل المثال، وضع قاموس تطبيق أو ملف سجل أو ملف مؤقت).

تخزين بيانات التطبيق في الموقع الصحيح

يمكنك استخدام الدالة شجيتفولديرباث لاسترداد مجلد "بيانات التطبيق" الصحيح. عدم تخزين بيانات التطبيق مباشرة في هذا المجلد. بدلاً من ذلك، استخدم الدالة باثابيند لإضافة مجلد فرعي للمسار الذي شجيتفولديرباث بإرجاع. تأكد من أنه يمكنك استخدام الاصطلاح التالي:
شركة إصدار Name\Product Name\Product
على سبيل المثال، قد يظهر المسار الكامل الناتجة كما يلي:
\Documents وكافة المستخدمين بيانات Data\My Company\My Product\1.0
لتحديد موقع مجلد "بيانات التطبيق" الصحيح، تمرير القيمة كسيدل المناسبة، استناداً إلى فئة بيانات التطبيق الخاص بك.
  • لكل مستخدم البيانات (المتجول)، استخدم قيمة CSIDL_APPDATA . الافتراضي هو المسار التالي:
    \Documents وبيانات \Application Settings\ <اسم المستخدم>
  • لكل مستخدم البيانات (غير التجوال)، استخدم قيمة CSIDL_LOCAL_APPDATA . الافتراضي هو المسار التالي:
    \Documents وبيانات \Local Settings\Application Settings\ <اسم المستخدم>
  • لكل بيانات الكمبيوتر (غير مستخدم معينة وعدم التجول)، استخدم القيمة CSIDL_COMMON_APPDATA . الافتراضي هو المسار التالي:
    \Documents وكافة المستخدمين بيانات
يوضح جزء التعليمات البرمجية التالي كيفية فتح ملف سجل مؤقت، الذي يقع أسفل 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();
}
}

استخدام التسجيل عدالة

هام: يحتوي هذا المقطع أو الأسلوب أو المهمة على الخطوات التي توضح كيفية تعديل التسجيل. ومع ذلك، قد تحدث مشكلات خطيرة إذا قمت بتعديل التسجيل بشكل غير صحيح. لذلك، تأكد من اتباع الخطوات التالية بعناية. للحماية الإضافية، قم بعمل نسخة احتياطية للسجل قبل تعديله. بعد ذلك، يمكنك استعادة السجل في حالة حدوث مشكلة. لمزيد من المعلومات حول كيفية عمل نسخة احتياطية من السجل واستعادته، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":
322756 كيفية عمل نسخة احتياطية من السجل واستعادته في نظام التشغيل Windows

يمكنك أيضا استخدام التسجيل لتخزين كميات صغيرة من البيانات في التطبيق. للبيانات التي تتجاوز 64 كيلوبايت (KB)، يجب عليك استخدام مجلد "بيانات التطبيق". ملاحظة الإرشادات التالية عند استخدام التسجيل لتخزين بيانات التطبيق:
  • للحصول على كميات صغيرة من البيانات المستخدم، استخدم مفتاح التسجيل HKEY_CURRENT_USER (HKCU).
  • للحصول على كميات صغيرة من البيانات على الكمبيوتر، استخدم مفتاح التسجيل HKEY_LOCAL_MACHINE (HKLM). التطبيق الخاص بك يجب عدم كتابة إلى HKLM وقت التشغيل لأنه، بشكل افتراضي، يكون المستخدمين غير المسؤولين فقط الوصول للقراءة فقط إلى شجرة HKLM .
  • في وقت التثبيت، التطبيق الخاص بك يجب عدم تخزين أكثر من ما مجموعة 128 كيلو بايت عبر HKCU و HKLM.
  • يتم تسجيل مكون Object Model (COM) المكونات تحت مفتاح التسجيل HKEY_CLASSES_ROOT (HKCR). لا يتضمن الحد الأقصى 128 كيلو بايت HKCR.
  • عندما تقوم بكتابة HKLM أو HKCU، يجب إنشاء مفاتيح لاسم الشركة واسم المنتج ورقم إصدار المنتج، كما يلي:
    إصدار Name\Product Name\Product HKLM\Software\Company
    إصدار Name\Product Name\Product HKCU\Software\Company
  • استخدام التسجيل (مثل RegCreateKeyEx وريجسيتفالويكس) لقراءة وكتابة إدخالات التسجيل.

استكشاف الأخطاء وإصلاحها

  • للتأكد من تشغيل التطبيقات في الإصدارات السابقة من Windows بالإضافة إلى نظام التشغيل Windows XP، دائماً ربط تنفيذ شجيتفولديرباث في Shfolder.dll. على الرغم من أنه يتضمن Windows XP شجيتفولديرباث في Shell32.dll، قد لا تدعم الإصدارات السابقة من Windows الدالة في مكتبة الارتباط الحيوي (DLL).
  • Shfolder.dll مكونات القابلة لإعادة التوزيع، وقد يتم توزيعها مع التطبيقات الخاصة بك.
  • غير مخزن مؤهل بشكل كامل مسارات المجلد My Documents (أو مجلدات النظام الأخرى) داخل موقع الخاصة بالتطبيق مثل ملف قائمة معظم الملفات المستخدمة مؤخرا لأن المستخدم أو المسؤول قد نقل هذه المجلدات بين الاستخدامات المتتابعة للتطبيق الخاص بك.

المراجع

لمقالات أخرى Visual c + +.NET Microsoft Knowledge Base إلى أعلى، قم بزيارة في Visual c + +.NET مركز الدعم في موقع Microsoft التالي على الويب:لمزيد من المعلومات حول مجموعة كاملة من المجلدات التي يمكنك تحديد شجيتفولديرباث ، راجع وثائق Microsoft النظام الأساسي البرامج تطوير مجموعة (SDK) التالية:لمزيد من المعلومات حول برمجة shell بشكل عام، راجع موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
خصائص

رقم الموضوع: 310294 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات