2009-02-28 13 views
9

**** सी न्यूबी अलर्ट **** मैं एक सी ऐप कैसे संकलित करूं ताकि यह विंडोज़ पर कंसोल विंडो दिखाए बिना चलता है? मैं विंडोज एक्सपी और जीसीसी 3.4.5 (मिंगव-विस्टा विशेष आर 3) का उपयोग कर रहा हूं। मैं विस्तृत रूप से इस googled है और मैं जिसके बाद, मैं क्या पढ़ा है के अनुसार, लगता है जैसे कि यह चाल करना चाहिए था के साथ आ गया है, लेकिन अपने सिस्टम पर नहीं करता है:जीसीसी/सी कंसोल विंडो को कैसे छिपाना है?

#include <windows.h> 
#include <stdlib.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    system("start notepad.exe"); 
} 

मैं हमने जीसीसी को "-विंडोज़" तर्क का कोई फायदा नहीं हुआ है। कोड नमूना नोटपैड लॉन्च करता है लेकिन फिर भी कमांड प्रॉम्प्ट को चमकता है।

संपादित करें: एफडब्ल्यूआईडब्ल्यू मैंने शेलएक्सक्यूट को सिस्टम() के लिए एक अल्टरनेटिव के रूप में भी आजमाया है, हालांकि मुझे इस बिंदु पर काम कर रहे खाली मुख्य() या WinMain() के साथ एक ऐप भी प्राप्त करने में खुशी होगी।

उत्तर

14

-mwindows ध्वज को बनाये रखें और इस का उपयोग करें:

#include <windows.h> 
#include <process.h> 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    execl("c:\\winnt\\system32\\notepad.exe", 0); 
    // or: execlp("notepad.exe", 0); 
} 

नोट: यदि आप execl() कॉल के लिए पूरा पथ नहीं बल्कि execlp() एक जरूरत है।

संपादित करें: यह क्यों काम करता है इसका एक संक्षिप्त विवरण - सिस्टम() का उपयोग करके एक कंसोल विंडो को उत्पन्न करने वाले कमांड को निष्पादित करने के लिए एक खोल (cmd.exe) शुरू होता है। Execl का उपयोग नहीं करता है।

+0

बिल्कुल सही! धन्यवाद। –

+0

आह, संपादन के लिए भी धन्यवाद - मुझे लगा कि यह ऐसा कुछ था। (+2 बटन कहां है? ;-) –

+0

यदि आप execlp() का उपयोग करते हैं तो आपको पूर्ण पथ की आवश्यकता नहीं होनी चाहिए। – paxdiablo

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