如何从已编译的程序中删除命令行?

时间:2012-02-09 00:02:11

标签: winapi user-interface command-line codeblocks

我最近开始学习如何使用Windows API编写GUI代码,我遇到了一个意想不到的问题,我认为这有点愚蠢。我正在使用Code :: Blocks和OpenWatcom编译器作为默认值,我已经创建了一个简单的GUI程序编译和链接。问题是当我尝试启动程序时,即使是从发布版本开始,类似命令行显示在我的程序窗口后面,就像我试图通过编译和放大器运行它一样。运行Code :: Blocks的选项。有没有办法删除命令行显示?This is how it looks like when I run it.

编辑:我的主要定义不是问题。这是我的主要定义:|

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)    

3 个答案:

答案 0 :(得分:3)

在Windows中,PE可执行格式有一个标志,指示可执行模式是“控制台模式”还是“GUI模式”。如果是“控制台模式”,那么只要程序运行,操作系统就会附加一个控制台窗口(必要时打开一个新窗口)。

在构建环境中的某处将有一个链接器设置,用于控制您生成的EXE是标记为控制台还是GUI。

答案 1 :(得分:2)

这由/SUBSYSTEM链接器选项控制。它目前设置为CONSOLE,您需要将其更改为WINDOWS。文档规定了main需要如何更改:

  

应用程序不需要控制台,可能是因为它创建了   它自己的窗口用于与用户交互。如果 WinMain wWinMain   是为本机代码定义的,或 WinMain(HISTANCE *,HINSTANCE *,char   *,int) wWinMain(HINSTANCE *,HINSTANCE *,wchar_t *,int)是为托管代码定义的,WINDOWS是默认值。

特别是对于Code::Blocks,链接器选项可以由this process更改:

  

在Code :: Blocks中只需打开Project-> Properties对话框,切换到   “构建目标”选项卡并更改构建目标的“类型”   想要修改为“GUI应用程序”或“控制台应用程序”。没必要   担心“主要”功能。

答案 2 :(得分:0)

而不是main函数,您需要使用Win32的标准入口点WinMain

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow);

请参阅:http://sol.gfxile.net/wintut/ch2.html

或者,如果您无法重新编译,则可以在Windows 7中执行以下操作:

START myProgram {enter}

请参阅:http://support.microsoft.com/kb/126410