كيف موثوق تحصل على سرعة إطلاق المجلد XP و Vista ؟

StackOverflow https://stackoverflow.com/questions/76080

  •  09-06-2019
  •  | 
  •  

سؤال

نحن بحاجة إلى موثوق تحصل على سرعة إطلاق مجلد لكل جميع المستخدمين الحاليين في إطار كل من فيستا و XP.أنا النامية في C++, ولكن هذا هو على الارجح أكثر من عام Windows API السؤال.

للإشارة هنا هو رمز للحصول على المجلد "بيانات التطبيق" في كلا النظامين:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

وأظن أن هذا هو مجرد مسألة معرفة أي مجلد فرعي يستخدم Microsoft.

تحت Windows XP, التطبيق البيانات فرعي هو:

Microsoft\Internet Explorer\Quick Launch

تحت ويندوز فيستا ، يبدو أن المجلد الفرعي الذي تم تغييرها إلى:

Roaming\Microsoft\Internet Explorer\Quick Launch

ولكن أريد أن تأكد من أن هذا هو الطريق الصحيح لتحديد الموقع الصحيح.

العثور على الصحيح طريقة لتحديد هذا الموقع مهم جدا ، كما تعتمد على الثابت ترميز أسماء المجلدات دائما تقريبا فواصل كما يمكنك الانتقال إلى تثبيت ، الخ...حقيقة أن المجلد المسمى 'التجوال في فيستا يجعلني أتساءل عما إذا كان هناك معالجة خاصة ذات الصلة إلى هذا المجلد (أقرب إلى الإعدادات المحلية المجلد تحت XP).

تحرير:المقالة msdn التالي: http://msdn.microsoft.com/en-us/library/bb762494.aspx يشير إلى أن CSIDL_APPDATA ما معرف FOLDERID_RoamingAppData التي لا يبدو أن الدعم StocksR تأكيد أن CSIDL_APPDATA لا عودة C:\Users\xxxx\AppData oaming لذلك ينبغي أن يكون من الممكن استخدام نفس المسار النسبي على CSIDL_APPDATA للوصول إلى التشغيل السريع (\Microsoft\Internet Explorer\Quick Launch).

لذا الخوارزمية التالية هو الصحيح في MS:

HRESULT hres; 
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";

كما سيكون فكرة جيدة للتحقق من hres لضمان أن الدعوة إلى SHGetSpecialFolderPath كانت ناجحة.

هل كانت مفيدة؟

المحلول

AppData على ويندوز فيستا يشير إلى C:\Users\xxxx\AppData oaming لا C:\Users\xxxx\AppData المجلد انها النفس.

أيضا هذا الخبر http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx على موقع مايكروسوفت يعني أن لديك ببساطة إلى استخدام مسار نسبي إلى المجلد appdata

نصائح أخرى

السؤال الكبير!

مهما فعلت ، لا تعطي في إغراء حفر في التسجيل للعثور على هذه المعلومات!

أيضا, يجب علينا أن نقاوم إغراء رمز من الصعب بعض الطريق ، ولو جزئيا.إذا حصلنا على الخاص AppData مسار ، ثم ببساطة إلحاق سلسلة إلى نهاية هذا قد كسر تحت غير الولايات المتحدة تثبيت البرنامج حيث يكون اسم المجلد المترجمة إلى تلك اللغة.E. g. GetSpecialFolderPath(APP_DATA) + "\\Fonts" لا تعمل على إصدارات غير الإنجليزية من Windows.

نأمل شخص ما لديه الجواب الصحيح على سؤالك;أنا الغريب لمعرفة ذلك بنفسي!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top