2011-05-23 198 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

相關問題