1

システムコールを使用してのみ実行できる多くの「dosスタイル」コマンドラインプログラムを実行する必要があるWindows(7)用のアプリケーションを作成しています..システムコールを実行すると、大きな黒いボックスがポップアップして消えます..実行が非常にずさんで非常に遅く見えます (私は 25 個が好きで、非常に悪いように見えます) それらを画面から完全に非表示にして、ただ実行したいのですが...これを行う方法はありますか? 私はすべてを見てきましたが、これについては何も見つかりません..

ありがとう!

4

2 に答える 2

4

の代わりにsystem、 を使用ShellExecuteして指定できますSW_HIDE。または、 を使用CreateProcessして指定することもできますDETACHED_PROCESS。コマンド ラインで指定した実行可能ファイルの切り離されたプロセスを作成するデモ コードを次に示します。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <stdio.h>

void system_error(char *name) {
// Retrieve, format, and print out a message from the last error.
// The `name' that's passed should be in the form of a present tense
// noun (phrase) such as "opening file".
//
    char *ptr = NULL;
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM,
        0, GetLastError(), 0, (char *)&ptr, 1024, NULL);

    printf("\nError %s: %s\n", name, ptr);
    LocalFree(ptr);
}

PROCESS_INFORMATION p;

BOOL WINAPI die(DWORD reason) {
    TerminateProcess(p.hProcess, 1);
    return TRUE;
}

int main(int argc, char **argv) {

    STARTUPINFO s;

    memset(&s, 0, sizeof s);
    s.cb = sizeof(s);

    if (!CreateProcess(argv[1], argv[2], NULL, NULL, TRUE,
        DETACHED_PROCESS, NULL, NULL, &s, &p))
    {
        system_error("Spawning program");
        return 1;
    }

    SetConsoleCtrlHandler(die, TRUE);

    WaitForSingleObject(p.hProcess, INFINITE);
    return 0;
}
于 2012-05-25T05:53:20.987 に答える
0

これらのコマンド ラインによって実行されるタスク間に依存関係がある場合は、CreateProcess または ShellExecuteEx を使用することをお勧めします。これにより、ここで説明するように、結果のプロセス ハンドルで WaitForSingleObject を実行できるようになります。そのため、次のタスクを開始する前に、タスクが完了するのを待つことができます。

于 2012-05-28T13:16:17.720 に答える