Как скрыть консольное окно с WinAPI? - PullRequest
0 голосов
/ 23 мая 2011

Я пытаюсь скрыть окно консоли , когда мое C приложение запускается с помощью этого простого WinAPI кода:

#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 ошибка (" Невозможно создать файл, когда этот файл уже существует. ") lauched!

Вопрос: Что я могу сделать?Все, что мне нужно, это спрятать это окно консоли.

Пожалуйста, помогите мне с этим.

Большое спасибо!

PS.Использование Visual Studio 2010 (Visual C ++)

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

Просто позвоните FreeConsole(), избавьтесь от него и AllocConsole(), чтобы создать новый.

2 голосов
/ 23 мая 2011

Лучше создать новый проект Visual Studio на основе «Win32 Project» вместо «Win32 Console Application». Тогда консоль не будет создана автоматически. (Вы все еще можете создать его в коде, если хотите.) Это установит среди прочих параметр компилятора / SUBSYSTEM: WINDOWS.

Вы не должны создавать графический интерфейс в неконсольном приложении, и вам не нужно иметь функцию WndProc ().

В ответ на вопрос "@Ian Goldby. Не могли бы вы дать мне ссылку на исходный код, как это сделать?"

Нет никакого исходного кода как такового. Просто создайте новый проект Visual C ++ Win32 (не консольное приложение Win32). В мастере убедитесь, что выбрано «Приложение Windows». Мастер сгенерирует много шаблонного кода, но вы можете удалить все это, кроме каркаса функции _tWinMain (). Эта функция будет вызываться при запуске приложения. Просто вставьте сюда свой код.

В качестве альтернативы, установите флажок «Очистить проект» на последнем этапе работы мастера и укажите свой собственный файл main.c и собственную функцию _tWinMain (). Возможно, вам будет проще.

В любом случае ваше приложение будет работать так же, как и раньше, за исключением того, что, поскольку оно является приложением с графическим интерфейсом, а не консольным приложением, ОС не будет автоматически создавать для него консольное окно при запуске. (Очевидно, что такие функции, как printf / scanf и т. Д. Не будут работать.)

...