0

この単純なWinAPIコードでCアプリケーションを起動するときに、コンソール ウィンドウを非表示にしようとしています。

#define CONSOLE_NAME "6FD66E14-FF0F-4B94-B8AF-AFE3D42DC399"

void hide_window(void)
{
    // Ставим заголовок для консольного окна / Setting window caption
    SetConsoleTitle(TEXT(CONSOLE_NAME));

    // Находим по заголовку Handle для окна / Searching Handle of the window
    HWND hWnd = FindWindow(NULL, TEXT(CONSOLE_NAME));
    if (hWnd == 0)
    {
        ErrorExit(TEXT("FindWindow"));
    }

    // Скрываем консоль / Hidding console
    ShowWindow(hWnd, SW_HIDE);
}

int _tmain(int argc, _TCHAR* argv[])
{
    hide_window();

    /* other code */
}

アンチウイルスがアクティブ化されていない場合はすべて正常に動作しますが、Kasperskyが実行されてシステムを監視している場合、上記のコードを実行できません。これhWnd == 0は true であり、GetLastError()= 183 エラー(「そのファイルが既に存在する場合、ファイルを作成できません。」)のためです。起動しました!

質問: どうすればよいですか? 必要なのは、そのコンソール ウィンドウを非表示にすることだけです。

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

まことにありがとうございます!

PS。Visual Studio 2010 (Visual C++) の使用

4

3 に答える 3

4

FreeConsole()get を呼び出しAllocConsole()て、新しいものを作成するだけです。

于 2011-05-23T11:49:23.580 に答える
2

「Win32 コンソール アプリケーション」ではなく、「Win32 プロジェクト」に基づいて新しい Visual Studio プロジェクトを作成することをお勧めします。その後、コンソールは自動的に作成されません。(必要に応じてコードで作成することもできます。) これにより、/SUBSYSTEM:WINDOWS コンパイラ設定が設定されます。

コンソール以外のアプリケーションで GUI を作成する必要はなく、WndProc() 関数を用意する必要もありません

「@Ian Goldby それを行う方法のソース コードへのリンクを教えていただけませんか?」

そのようなソースコードはありません。新しい Visual C++ Win32 プロジェクト (Win32 コンソール アプリケーションではない) を作成するだけです。ウィザードで、[Windows アプリケーション] が選択されていることを確認します。ウィザードは多くのテンプレート コードを生成しますが、_tWinMain() 関数のスケルトンを除いて、これらすべてを削除できます。これは、アプリケーションの起動時に呼び出される関数です。ここに独自のコードを貼り付けるだけです。

または、ウィザードの最後の段階で [空のプロジェクト] ボックスをオンにして、独自の main.c ファイルと独自の _tWinMain() 関数を提供します。これは簡単かもしれません。

どちらの方法でも、アプリケーションは以前と同じように実行されますが、それはコンソール アプリケーションではなく GUI アプリケーションであるため、OS は起動時にコンソール ウィンドウを自動的に作成しません。(したがって、明らかに printf/scanf などの機能は機能しません。)

于 2011-05-23T11:45:30.757 に答える