0

私はVC++を初めて使用し、デフォルトのテンプレートを使用して単純なWin32アプリケーションを構築します。実行すると、メニューバー付きの通常のウィンドウが表示されます。

InitInstance関数でcurl操作を実行するシステムコールを追加しました。

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

   HWND hWnd;
   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);

   UpdateWindow(hWnd);

   //EDITED THIS WILL CREATE A FILE.HTML

   system("curl www.google.co.in > file.html");


   return TRUE;
}

すべて正常に動作します。

しかし、問題は、システムを呼び出すと、コンソールウィンドウで開くことです。そのコマンドプロンプトウィンドウを表示しない非表示のプロセスにしたい。

これで私を助けてください。

4

3 に答える 3

2

このsystem関数は常にコンソールウィンドウを表示します。非表示のコンソールウィンドウが必要な場合は、CreateProcess直接呼び出す必要があります。DETACHED_PROCESS次に、コンソールなしで実行されるを要求できます。プロセスが終了するのを待たないことに注意してくださいCreateProcess。そのため、自分で待機を実行する必要があります。

于 2012-08-19T13:05:40.567 に答える
1

urlとfilenameをパラメーターとして、コードを別の関数に入れました。

    #include <tchar.h>
    #include <windows.h>

    BOOL DownloadWithoutConsole(TCHAR* pszURI, TCHAR* pszFileName)
    {
    //here we will calculate our command line length in bytes
    DWORD dwLen = (lstrlen(pszURI) + lstrlen(pszFileName) + 20)*sizeof(TCHAR);
    //memory allocation for the command line
    TCHAR* pszCmdLine = (TCHAR*)HeapAlloc(GetProcessHeap(), 0, dwLen);
    ZeroMemory(pszCmdLine, dwLen);
    //making command line
    _stprintf_s(pszCmdLine,dwLen/sizeof(TCHAR), TEXT("cmd /c curl %s > %s"), pszURI, pszFileName);

    //preparing arguments for CreateProcess
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);

    PROCESS_INFORMATION pi;
    ZeroMemory(&pi, sizeof(pi));

    //creating new process 
    BOOL bResult = CreateProcess(NULL, pszCmdLine, NULL, NULL, FALSE, CREATE_NO_WINDOW,
    NULL, NULL, &si, &pi);

    if(bResult)
    {
    //waiting for process termination
    WaitForSingleObject(pi.hProcess, INFINITE);
    //cleanup
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    }
    //freeing memory
    HeapFree(GetProcessHeap(), 0, pszCmdLine);
    return(bResult);
    }

   int __cdecl _tmain(void)
   {
      DownloadWithoutConsole(TEXT("stackoverflow.com"), TEXT("test.txt"));
      return(0);
   }
于 2012-08-19T15:36:20.690 に答える
0

(ShowWindow)に設定nCmdShowします。SW_HIDE(0)このようにして、cmdプロンプトなしで実行します

于 2012-08-19T12:54:01.697 に答える