2013-02-10 32 views
5

में ज्ञात फ़ोल्डर GUID से फ़ोल्डर पथ कैसे प्राप्त करें मेरे पास KNOWNFOLDERID है और मैं सी: .... \ फ़ोल्डर जैसे संबंधित पथ को जानना चाहता हूं।डेल्फी

KNOWNFOLDERID यहां पाया जा सकता है। http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx

मैं (मैं सभी KNOWNFOLDERID और रास्तों के साथ एक सरणी का निर्माण नहीं करना चाहती) को उपयोग जीत एपीआई चाहते हैं।

धन्यवाद

उत्तर

4

बस SHGetKnownFolderPath एपीआई फ़ंक्शन पर कॉल करें।

चूंकि यह फ़ंक्शन Vista में जोड़ा गया था, इसलिए इसे डेल्फी 7 के साथ भेजे गए लाइब्रेरी इकाइयों में घोषित नहीं किया जाएगा। इसलिए आपको इसे स्वयं घोषित करने की आवश्यकता होगी।

type 
    KNOWNFOLDERID = TGuid; 

function SHGetKnownFolderPath(
    const rfid: KNOWNFOLDERID; 
    dwFlags: DWORD; 
    hToken: THandle; 
    out ppszPath: PWideChar 
): HResult; stdcall; external 'Shell32.dll'; 

अब, चूंकि यह फ़ंक्शन Vista में जोड़ा गया था, इसलिए XP पर इसे कॉल करने का प्रयास विफलताओं का कारण बन जाएगा। तो, मैं विस्टा ज्ञात फ़ोल्डर एपीआई के बजाय सीएसआईडीएल कार्यों का उपयोग कर इस से निपटने की सिफारिश करता हूं।

+0

GUID स्ट्रिंग के रूप में दिया जाता है। क्या मैं स्ट्रिंगटोगुइड का उपयोग स्ट्रिंग को GUID में बदलने के लिए कर सकता हूं और फिर SHGetKnownFolderPath – user382591

+1

पर कॉल कर सकता हूं सुनिश्चित करें कि आप ऐसा कर सकते हैं। –

0

आप जाना जाता फ़ोल्डर आईडी और रास्तों की एक सरणी का निर्माण नहीं कर सकते, क्योंकि इसका कोई आश्वासन नहीं रास्तों हर प्रणाली में एक ही हो जाएगा। ज्ञात फ़ोल्डर के लिए डिफ़ॉल्ट पथ हैं लेकिन वे केवल डिफ़ॉल्ट हैं, उन्हें बदला जा सकता है। कई कॉर्पोरेट वातावरण ऐसा करते हैं, उदाहरण के लिए, उपयोगकर्ता के दस्तावेज़ फ़ोल्डर को नेटवर्क शेयर में ले जाएं जिसे अधिक आसानी से बैक अप किया जा सकता है।

SHGetKnownFolderPath विन एपीआई समारोह है कि जाना जाता फ़ोल्डर का पथ देता है:

किसी भी मामले में लिंक आपके द्वारा दी गई में एक लिंक सभी जानकारी की आवश्यकता होती है। ध्यान दें कि आपको CoTaskMemFree को कॉल करके स्वयं को लौटाए गए यूनिकोड चार पॉइंटर को रिलीज़ करने की आवश्यकता है।

यदि आप COM ऑब्जेक्ट के साथ काम करना पसंद करते हैं, तो आप इसके बजाय IKNOWNFOLDER का उपयोग कर सकते हैं।