2008-10-22 13 views
22

आप एक सी/सी ++ एप्लिकेशन कैसे प्रोग्राम करेंगे जो विंडो या कंसोल खोलने के बिना चलाया जा सकता है?विंडो के बिना कोई एप्लिकेशन बनाएं

+1

संबंधित धागा: http://stackoverflow.com/questions/13051412/how-to-hide-the-console-window-in-a-win32-project-using-visual-studio-2010 – BuvinJ

उत्तर

34

जब आप एक WinMain प्रोग्राम लिखने, आप स्वचालित संकलक में खिड़कियों होने के लिए/सबसिस्टम विकल्प मिलता है। (मान लें कि आप विजुअल स्टूडियो का उपयोग करते हैं)। किसी भी अन्य कंपाइलर के लिए एक समान विकल्प मौजूद हो सकता है लेकिन ध्वज का नाम अलग हो सकता है।

यह संकलक निष्पादन योग्य फ़ाइल प्रारूप (PE format) में एक प्रविष्टि बनाने का कारण बनता है जो निष्पादन योग्य विंडोज़ के रूप में निष्पादन योग्य है।

एक बार यह जानकारी निष्पादन योग्य में मौजूद हो जाने के बाद, सिस्टम लोडर जो प्रोग्राम शुरू करता है, आपके बाइनरी को विंडोज निष्पादन योग्य के रूप में और कंसोल प्रोग्राम के रूप में नहीं मानता है और इसलिए यह चलने पर कंसोल विंडो स्वचालित रूप से खुलने का कारण नहीं बनता है।

लेकिन एक विंडोज प्रोग्राम को किसी भी विंडो को बनाने की ज़रूरत नहीं है, अगर उसे टास्कबार में चल रहे सभी प्रोग्राम और सेवाओं की तरह नहीं, लेकिन उनके लिए कोई भी संबंधित विंडो नहीं दिखती है। यह तब भी हो सकता है जब आप एक विंडो बनाते हैं लेकिन इसे दिखाने का विकल्प नहीं चुनते हैं।

तुम सब करने की ज़रूरत है, प्राप्त करने के लिए यह सब है,

#include <Windows.h> 

int WinMain(HINSTANCE hInstance, 
      HINSTANCE hPrevInstance, 
      LPTSTR lpCmdLine, 
      int  cmdShow) 
    { 
    /* do your stuff here. If you return from this function the program ends */ 
    } 

कारण आप की आवश्यकता होती है एक WinMain ही है कि एक बार आप Windows के रूप में उप-प्रणाली को चिह्नित, लिंकर मान लिया गया है कि आपके प्रवेश बिंदु समारोह (जो प्रोग्राम लोड के बाद बुलाया जाता है और सी रन टीआईएम लाइब्रेरी शुरू होता है) WinMain होगा और मुख्य नहीं होगा। यदि आप इस तरह के प्रोग्राम में WinMain प्रदान नहीं करते हैं तो आपको लिंकिंग प्रक्रिया के दौरान एक अनइंस्टॉल प्रतीक त्रुटि मिल जाएगी।

+0

मेरे पास एक समान आवश्यकता है जहां मैं टाइमर का उपयोग करता हूं। मैं प्रोग्राम को बिना रोक के दौड़ना चाहता हूं। इस कार्यक्रम में एक टाइमर सेट किया गया है। तो मैं इसे कैसे करूं। ? –

+0

यह int WINAPI WinMain (...) नहीं होना चाहिए? – uceumern

11

खिड़कियों में:

#include <windows.h> 

int APIENTRY WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 
{ 
    // <-- Program logic here 
    return 0; 
} 

के रूप में एडम Mitz ने उल्लेख किया/सबसिस्टम लिंकर स्विच का उपयोग सुनिश्चित करें।

अन्य प्लेटफार्मों पर:

int main(int argc, char**argv) 
{ 
    // <-- Program logic here 
    return 0; 
} 
+0

दो शिकायतें: यदि आप windows.h शामिल नहीं करते हैं तो WinMain अनावश्यक है; और 0 लौटें; मुख्य में वैकल्पिक है। – coppro

+2

आप 0 लौटने के लिए चाहते हैं ताकि आप इसे कॉल करने वाले कार्यक्रमों में सफलता का संकेत दे सकें। –

+0

यदि आप कंसोल एप्लिकेशन बनाते हैं और विंडोज़ के लिए int मुख्य रखते हैं तो आप एक्सई पर डबल क्लिक करते समय कंसोल विंडो पॉपअप करेंगे। –

-7

आप MSVC या दृश्य स्टूडियो उपयोग कर रहे हैं सिर्फ नए परियोजना जादूगर का उपयोग करें और चयन कंसोल आवेदन

+0

कंसोल एप्लिकेशन हमेशा एक कंसोल विंडो खुलता है जब यह – computinglife

+1

चलाता है क्या आप वाकई जानते हैं कि आप किस बारे में बात कर रहे हैं? http://en.wikipedia.org/wiki/Win32_console मुझे नहीं लगता !!! पिछली बार जब मैंने एक कंसोल ऐप देखा तो एक गैर gui win32 एप्लिकेशन था !!! – jussij

+1

जुसीज - सही। यह एक सीएलयूआई आवेदन है। और उस सीएलयूआई के साथ बातचीत करने के लिए, विंडोज़ आपके लिए सीएल जीयूआई बनाती है। – Aaron

3

यदि आपको कंसोल या विंडो के बिना अपने प्रोग्राम को चलाने की आवश्यकता है तो आपको उपयोगी deamon on *NIX या services on Windows मिल सकता है, यह .NET उदाहरण यदि आपको सादे Win32 की आवश्यकता है तो बस नमूना के लिए थोड़ा सा Google।
चूंकि आपका प्रश्न win32 के रूप में टैग किया गया है, मुझे लगता है कि सेवाएं आपके लिए अधिक प्रासंगिक हैं।

0

Win32 एप्लिकेशन बनाने के लिए विजुअल स्टूडियो विज़ार्ड का उपयोग करें। लेकिन खिड़की नहीं बनाओ यानी, आप खिड़की निर्माण समारोह को हटा दें। वैकल्पिक रूप से हम विन सेवा अनुप्रयोग बना सकते हैं।

2

विजुअल स्टूडियो एक्सप्रेस 2010 में विंडोज़ के उपप्रणाली को सेट करने के बाद (उपयोगकर्ता 17224 द्वारा सुझाए गए अनुसार) में वैकल्पिक रूप से मुख्य रूप से WinMain (उपयोगकर्ता 17224 और ब्रायन आर बॉन्डी द्वारा सुझाए गए अनुसार) को बदलने के लिए, कोई प्रविष्टि फ़ंक्शन मुख्य में सेट कर सकता है गुण, लिंकर, उन्नत, प्रवेश बिंदु: बस टेक्स्ट बॉक्स में मुख्य टाइप करें।

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