2009-05-13 15 views
8

मुझे एक सी ++ ऐप मिला है जिसे मैं Win32 से OSX तक पोर्ट कर रहा हूं। मैं मनमानी फाइलों को लॉन्च करने में सक्षम होना चाहता हूं जैसे उपयोगकर्ता ने उन्हें खोला। ShellExecute का उपयोग कर विंडोज़ पर यह आसान है। मैं मैक पर एक ही चीज़ कैसे पूरा करूं?ओएसएक्स ShellExecute के बराबर?

धन्यवाद!

उत्तर

14

आप किसी भी C++ एप्लिकेशन में system(); पर कॉल कर सकते हैं। ओएसएक्स पर, आप चीजों को लॉन्च करने के लिए open कमांड का उपयोग कर सकते हैं जैसे कि उन्हें क्लिक किया गया था।

खुला के लिए दस्तावेज़ से:

खुला आदेश एक फ़ाइल (या एक निर्देशिका या URL) को खोलता है, जैसे कि आपने था फ़ाइल के आइकन को डबल-क्लिक किया। यदि कोई एप्लिकेशन नाम निर्दिष्ट नहीं है, तो लॉन्च सर्विसेज के माध्यम से निर्धारित डिफ़ॉल्ट अनुप्रयोग निर्दिष्ट फ़ाइलों को खोलने के लिए उपयोग किया जाता है।

सभी एक साथ, यह दिखाई देगा:

string command = "open " + filePath; 
system(command.c_str()); 
+0

मुझे लगता है कि विंडोज़ समतुल्य "प्रारंभ" + filePath; ' – MSalters

9

एक अन्य सुझाव यदि आप कोको के साथ काम कर रहे हैं:

[[NSWorkspace sharedWorkspace] openFile:@"pathToFile"]; 

वहाँ NSWorkspace में अन्य इसी तरह के तरीके के रूप में अच्छी तरह से कर रहे हैं। उदाहरण के लिए एक आवेदन या एक URL खोलने के लिए के लिए:

[[NSWorkspace sharedWorkspace] launchApplication:@"pathToApplication"]; 
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"URL"]]; 

[NSWorkspace sharedWorkspace] के माध्यम से कार्य करना आप मानक सी system() कॉल की तुलना में थोड़ा अधिक नियंत्रण दे सकते हैं।

संपादित करें: ध्यान दें कि आप Objective-C++ उपयोग कर सकते हैं सी ++ ऑब्जेक्टिव-सी कोड के साथ कोड मिश्रण है और इस तरह के कोको तरीकों कहते हैं।

0

आप बस सिस्टम() का उपयोग कर सकते हैं; समारोह। उदाहरण के लिए, कहें कि आप अपने डॉक को स्क्रीन के कोने में रखना चाहते हैं।

आप बस रख सकते हैं:

system(defaults write com.apple.dock pinning -string end); 
sleep(1f); 
system(killall Dock); 

यह आसान है कि है। आशा है कि मैंने मदद की :)

+1

यह सही है, हालांकि आपको सिस्टम() तर्क के चारों ओर उद्धरण जोड़ने की आवश्यकता होगी। – cypheon