[अंतिम संपादित करें]
एक ऐसी ही तो सवाल यह सब कुछ ऊपर कहा विलीन हो जाती है और आप अपने उत्पादन हो जाता है C++ popen command without console
[संपादित किया गया]
erk। खेद है कि मैं spawning प्रक्रियाओं के बारे में उत्साहित हो गया। मैं आपके क्यू को फिर से पढ़ता हूं। और अतिरिक्त खिड़की के अलावा आप वास्तव में प्रक्रियाओं के stdout/stderr प्राप्त करने की कोशिश कर रहे हैं। मैं बस उस उद्देश्य के लिए इसे जोड़ना चाहता हूं, मेरे सभी सुझाव दुखद रूप से अप्रासंगिक हैं। लेकिन मैं उन्हें संदर्भ के लिए यहां छोड़ दूंगा।
[संपादित]
कोई अच्छा विशिष्ट कारण के लिए (कि "खुला" को छोड़कर दोनों खिड़कियों और Macs के लिए काम करता है), मैं नहीं बल्कि CreateProcess से स्पॉन प्रक्रियाओं के लिए ShellExecute का उपयोग करें। मैं बाद में शोध करूंगा..लेकिन यहां मेरा स्टार्टप्रोसेस फ़ंक्शन है।
छिपी हुई या न्यूनतम एक ही परिणाम उत्पन्न करने लगती है। cmd विंडो में आ रहा है लेकिन यह कम हो गया है और डेस्कटॉप पर कभी भी पॉप अप नहीं होता है जो आपका प्राथमिक लक्ष्य हो सकता है।
#if defined(PLATFORM_WIN32)
#include <Windows.h>
#include <shellapi.h>
#elif defined(PLATFORM_OSX)
#include <sys/param.h>
#endif
namespace LGSysUtils
{
// -----------------------------------------------------------------------
// pWindow : {Optional} - can be NULL
// pOperation : "edit", "explore", "find", "open", "print"
// pFile : url, local file to execute
// pParameters : {Optional} - can be NULL otherwise a string of args to pass to pFile
// pDirectory : {Optional} - set cwd for process
// type : kProcessWinNormal, kProcessWinMinimized, kProcessWinMaximized, kProcessHidden
//
bool StartProcess(void* pWindow, const char* pOperation, const char* pFile, const char* pParameters, const char* pDirectory, LGSysUtils::eProcessWin type)
{
bool rc = false;
#if defined(PLATFORM_WIN32)
int showCmd;
switch(type)
{
case kProcessWinMaximized:
showCmd = SW_SHOWMAXIMIZED;
break;
case kProcessWinMinimized:
showCmd = SW_SHOWMINIMIZED;
break;
case kProcessHidden:
showCmd = SW_HIDE;
break;
case kProcessWinNormal:
default:
showCmd = SW_NORMAL;
}
int shellRC = (int)ShellExecute(reinterpret_cast<HWND>(pWindow), pOperation,pFile,pParameters,pDirectory,showCmd);
//Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise.
if(shellRC > 32)
{
rc = true;
}
#elif defined(PLATFORM_OSX)
char cmd[1024];
sprintf(cmd, "%s %s", pOperation, pFile);
int sysrc = system(cmd);
dbPrintf("sysrc = %d", sysrc);
rc = true;
#endif
return rc;
}
}
[और जैसा कि पहले उल्लेख]
आपको लगता है कि शुरू की है आवेदन के लिए स्रोत कोड के नियंत्रण में है, तो आप अपने main.cpp के शीर्ष करने के लिए इस जोड़ने की कोशिश कर सकते हैं (या आप जो कुछ भी इसे नामित किया गया)
// make this process windowless/aka no console window
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
आप उन विकल्पों को सीधे लिंकर को भी खिला सकते हैं। अलग बिल्ड कॉन्फ़िगरेशन imho के लिए उपरोक्त खेलना आसान है।
क्या यह अभी भी दिखाता है कि क्या आप इसे कहीं भी आउटपुट रीडायरेक्ट करते हैं?एक और पाइप या एक फ़ाइल के लिए? http://msdn.microsoft.com/en-us/library/ms682499.aspx (मुझे नहीं पता, मैं केवल अनुमान लगा रहा हूं) –