【问题标题】:HowTo hide Console Window with WinAPI?如何使用 WinAPI 隐藏控制台窗口?
【发布时间】:2011-08-31 02:09:18
【问题描述】:

当我的 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 error(“当文件已存在时无法创建文件。”)启动!

问题:我能做什么?我只需要隐藏那个控制台窗口。

请帮帮我。

非常感谢!

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

【问题讨论】:

  • 如果删除控制台不是一个选项,也许你可以尝试 EnumWindows() 看看它是否会在运行防病毒垃圾时给出不同的结果?

标签: c winapi showwindow


【解决方案1】:

只需调用FreeConsole() 删除它并调用AllocConsole() 来创建一个新的。

【讨论】:

  • 您能否提交一些代码或 URL,我可以在哪里阅读?谢谢。
  • 没什么,两者都不带任何参数,谷歌上的第一次点击会为你提供足够的细节。
  • 谢谢@Jasper。您的建议有帮助!
【解决方案2】:

您最好基于“Win32 项目”而不是“Win32 控制台应用程序”创建一个新的 Visual Studio 项目。然后不会自动创建控制台。 (如果您愿意,您仍然可以在代码中创建一个。)这将设置 /SUBSYSTEM:WINDOWS 编译器设置等。

不必在非控制台应用程序中创建 GUI,也不必具有 WndProc() 函数。

回应“@Ian Goldby,你能给我一个指向如何做到这一点的源代码的链接吗?”

没有任何这样的源代码。只需创建一个新的 Visual C++ Win32 项目(不是 Win32 控制台应用程序)。在向导中确保选择了“Windows 应用程序”。该向导将生成大量模板代码,但您可以删除所有这些,除了 _tWinMain() 函数的骨架。这是应用程序启动时将调用的函数。只需在此处粘贴您自己的代码即可。

或者,选中向导最后阶段的“空项目”框,并提供您自己的 main.c 文件和您自己的 _tWinMain() 函数。您可能会发现这更容易。

无论哪种方式,您的应用程序都将像以前一样运行,除了因为它是一个 GUI 应用程序而不是控制台应用程序,操作系统在启动时不会自动为其创建控制台窗口。 (所以很明显 printf/scanf 等函数不起作用。)

【讨论】:

  • 你能给我链接到如何做到这一点的源代码吗?
【解决方案3】:

它是调用进程,它决定你是否有控制台。

Windows 资源管理器只为控制台应用程序创建一个,不过 例如使用用户帐户运行的计划任务将始终有一个。

在这种特殊情况下,您需要结合前面的答案:

创建一个非控制台应用程序,此外您的_tWinMain() 函数应调用FreeConsole()

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2014-08-23
    • 2019-07-22
    • 2012-10-14
    • 2012-10-14
    相关资源
    最近更新 更多