2008-09-30 16 views
9

ठीक है, शायद यह वास्तव में एक साधारण जवाब है, लेकिन मैंने इसे पहले कभी करने की कोशिश नहीं की है: आप किसी ऐप के भीतर से एक वेब पेज कैसे लॉन्च करते हैं? आप जानते हैं, "हमारे अक्सर पूछे जाने वाले प्रश्नों पर जाने के लिए यहां क्लिक करें", और जब वे ऐसा करते हैं तो यह अपना डिफ़ॉल्ट वेब ब्राउज़र लॉन्च करता है और आपके पृष्ठ पर जाता है। मैं विंडोज़ में सी/सी ++ में काम कर रहा हूं, लेकिन अगर ऐसा करने के लिए एक व्यापक, अधिक पोर्टेबल तरीका है, तो मैं भी यह जानना चाहता हूं।मेरे आवेदन से वेब पेज लॉन्च करें

उत्तर

17
#include <windows.h> 

void main() 
{ 
    ShellExecute(NULL, "open", "http://yourwebpage.com", 
      NULL, NULL, SW_SHOWNORMAL); 
} 
+1

क्या यह व्यवस्थापक विशेषाधिकारों के बिना काम करता है ?? – foobar

4

मुझे विश्वास है कि आप ShellExecute() फ़ंक्शन का उपयोग करना चाहते हैं जो डिफ़ॉल्ट ब्राउज़र के उपयोगकर्ताओं की पसंद का सम्मान करना चाहिए।

3

आप शैलएक्सक्यूट फ़ंक्शन का उपयोग कर सकते हैं। नमूना कोड:

ShellExecute(NULL, "open", "http://stackoverflow.com", "", ".", SW_SHOWDEFAULT); 
4

कृपया ShellExecute के लिए docs बारीकी से पढ़ें। वास्तव में अपने कोड बुलेटप्रूफ करने के लिए, वे COM प्रारंभ करने की सलाह देते हैं। यहां दस्तावेज़ देखें, और उस भाग को देखें जो कहता है "COM को यहां दिखाए जाने के रूप में आरंभ किया जाना चाहिए"। (| COINIT_DISABLE_OLE1DDE शून्य, COINIT_APARTMENTTHREADED)

+0

डॉन COM फिर से हमला करता है .. – Everyone

4

रिकॉर्ड के लिए (जब से तुम एक पार मंच विकल्प के लिए कहा)

CoInitializeEx: संक्षिप्त उत्तर (यदि आप पहले init'd नहीं किया है COM) यह करने के लिए है , निम्नलिखित लिनक्स में अच्छी तरह से काम करता है:

#include <unistd.h> 
#include <stdlib.h> 

void launch(const std::string &url) 
{ 
    std::string browser = getenv("BROWSER"); 
    if(browser == "") return; 

    char *args[3]; 
    args[0] = (char*)browser.c_str(); 
    args[1] = (char*)url.c_str(); 
    args[2] = 0; 

    pid_t pid = fork(); 
    if(!pid) 
    execvp(browser.c_str(), args); 
} 

उपयोग के रूप में:

launch("http://example.com"); 
+2

ब्राउजर एनवी उबंटू में सेट नहीं है। यह कोड क्रैश हो जाता है जब Getenv वापस लौटाता है: 'std :: logic_error' का उदाहरण फेंकने के बाद बुलाया जाता है(): basic_string :: _ S_construct null मान्य नहीं है। –

1

किसी कारण से, ShellExecute कभी कभी काम नहीं करते है, तो आवेदन termin करने के बारे में है इसे कॉल करने के बाद सही खा लिया। हमने ShellExecute के बाद नींद (5000) जोड़ा है और यह मदद करता है।

संबंधित मुद्दे