4

実際のプログラムを検索して実行する簡単なランチャーを作成しました。これは正常に動作しますが、問題が 1 つあります。Windows では、「砂時計付きのポインター」カーソルが約 1 秒間表示されます。プログラムを直接起動した場合、これは発生しません。

設定してみsinfo.dwFlags = STARTF_FORCEOFFFEEDBACKましたが、これは役に立ちませんでした。これは、何らかの方法でカーソルを無効にする必要があるのは私のプログラムであり、起動したプログラムがそれをうまく行うためだと思います(適切なウィンドウを作成するなど)。

これは、私のアプリケーションの関連コードです。スレッドやその他の派手なものはありません (プログラムの唯一の目的は、別のプログラムを起動し、呼び出し元に終了コードを渡すことです)。

STARTUPINFO sinfo = {0};
PROCESS_INFORMATION pinfo = {0};
if (!CreateProcess(program, buf, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) {
    Fail("Could not launch Vim");
}
if (WaitForSingleObject(pinfo.hProcess, INFINITE) == WAIT_FAILED) {
    Fail("WaitForSingleObject");
}
4

2 に答える 2

4

Apparently Windows expects a Windows program to process messages and does not consider it fully started before that point, which is why it shows the appstarting cursor.

Adding the following code to process a single dummy message solved the problem:

MSG msg;
PostMessage(NULL, WM_NULL, 0, 0);
GetMessage(&msg, NULL, 0, 0);
于 2013-12-27T02:07:09.697 に答える