发新话题
打印

[C/C++] 隐藏Console程序的黑色窗口的方法

隐藏Console程序的黑色窗口的方法

默认程序编译的目标子系统和程序入口的指定是关联的,例如Console应用程序
/subsystem:console /entry:mainCRTStartup (ANSI版)
/subsystem:console /entry:wmainCRTStartup (UNICODE版)
Windows应用程序:
/subsystem:windows /entry:WinMain (ANSI版)
/subsystem:windows /etnry:wWinMain (UNICODE版)
入口地址和子系统也可以进行不关联(非默认)设置。这样的话可以写这样的程序:
//强行设置入口地址
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int main(int argc, char** argv)
{
    MessageBox(NULL, "hello", "Notice", MB_OK);
    return 0;
}
也可以写这样的程序:
#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup)
void main()
{
    for(int i=0; i<100000000;i++)
        ;
}
上面的程序就可以隐藏console窗口,但如果用system()调用系统命令时还是
会有黑色的窗口一闪而过(跟用BAT就没什么差别了),用于“秘密”程序还是有不足。

补充一下:一个程序运行于什么子系统当中并不是由程序单独决定的。如写一个Console程序,但在windows系统中用双击方式运行它,则Console窗口会一闪而过,需要打开Windows命令提示符,重新运行exe文件。
九 九 教 院 毕 业 生,出 校 三 载 网 管 职,欲 写 病 毒 为 红 颜,谁 知 时 间 流 水 过,如 今 美 梦 影 成 空。

TOP

太难了  迷茫啊

TOP

蜂蜜幸运草

提示: 作者被禁止或删除 内容自动屏蔽

TOP

楼上的,你是电影公司的枪手是不?天天看你打电影广告,
强烈要求景天删掉此人的ID!
一个人的性格决定一个人的命运!

TOP

发新话题