2011-05-23 133 views
0

我试图隐藏控制台窗口Ç应用这个简单WinAPI的代码空空时:如何使用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 */ 
} 

一切工作正常,如果没有反病毒程序被激活,但是当卡巴斯基运行并监视系统,我不能得到上面的代码工作,因为hWnd == 0为真,并且GetLastError() = 183 error(“当该文件已存在时无法创建文件。”“)lauched!

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

请帮助我这个东西。

非常感谢!

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

+0

如果删除控制台不是一个选项,也许你可以尝试EnumWindows(),看看它是否给运行防病毒废话不同的结果? – Lundin 2011-05-23 14:26:21

回答

4

只需拨打FreeConsole()即可删除它并AllocConsole()创建一个新的。

+0

你能否提交一些代码或URL,我可以在哪里阅读? THKS。 – mosg 2011-05-23 13:14:39

+0

没有什么,它们都不采取任何参数,谷歌的第一次点击将为您提供足够的细节。 – 2011-05-23 15:29:31

+0

谢谢@Jasper。你的建议帮助! – mosg 2011-05-24 12:06:41

2

你最好创建一个基于'Win32 Project'而不是'Win32 Console Application'的新Visual Studio项目。然后控制台将不会自动创建。 (如果需要,您仍然可以在代码中创建一个。)这将设置/ SUBSYSTEM:WINDOWS编译器设置等。

不要必须在非控制台应用程序中创建一个GUI,并且您不必具有WndProc()函数。

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

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

或者,选中向导最后一个阶段的“空项目”框,并提供自己的main.c文件和自己的_tWinMain()函数。你可能会发现这更容易。无论哪种方式,您的应用程序将像以前一样运行,除了因为它是GUI应用程序而不是控制台应用程序,操作系统在启动时不会自动为其创建控制台窗口。 (所以很明显像printf/scanf等功能将无法正常工作。)

+0

你可以给我链接到如何做到这一点的源代码? – mosg 2011-05-23 13:45:45

+0

看到我上面的修改。 – 2011-05-24 07:18:36

相关问题