评论: |
Kelvin_UV:为什么不直接用Win32 Application呢, 既然控制台程序不要命令行窗口, 又为什么用控制台程序呢? (发表于2004-9-11 21:28:00) hangwire:有时需要用控制台程序做一些没有用户交互的后台批量处理,不想显示命令行窗口。 (发表于2004-9-11 22:35:00) Kelvin_UV:不明白!, 这样做不是更简单吗? #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC); Sleep(50); PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC); Sleep(50); PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC); Sleep(50); return 0; } (发表于2004-9-11 23:23:00) hangwire:请问这样做,连接器如何设置?按照缺省设置link通不过。 (发表于2004-9-11 23:53:00) meteor135:为了不显示Console Window,必须使用/subsystem: windows Linker Option, 但是一旦使用了它, 如果不指定/entry:<function> Linker Option,Linker将查找WinMain作为entry point. 此时只要为程序提供WinMain入口函数即可。 如果不用WinMain而用main,就必须为Linker指定/entry:mainCRTStartup 由此可见,具体方案有两个: 方案1: #pragma comment( linker, "/subsystem:windows" ) int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { } 方案2: #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) int main(void) { } (发表于2004-9-13 13:39:00) meteor135:综合方案(没多少实用价值): #define ENTRY_SCHEME 1 //控制使用何种方案的宏常量 #if ENTRY_SCHEME==1 #pragma message("------------main---------------") #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) int main( void ) #else #pragma message("-----------WinMain-------------" ) #pragma comment( linker, "/subsystem:windows" ) int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) #endif { } (发表于2004-9-13 13:41:00) s000792003:我有方法可以将一个原有的 DOS 程序变为看不见 先用 16 位编辑工具开了那个执行档 在位置 0x130~0x13f (通常是 0x13c 或 0x134) 的位置之间找个数值 03,将它变为02 原来就是这么简单喔 !! (发表于2004-9-13 16:55:00) meteor135:楼上的方法果然没错,我把一个没有DOS窗口的程序,比如MFC编写的窗口程序用UltraEdit打开,然后把0x133~0x134的02改成03,然后保存,重新打开这个程序居然出现了黑窗口!为什么这个秘密之前没有人公开过呢? (发表于2004-9-13 17:33:00) meteor135:上面我的说法有点错误,在MFC程序中,应该是0x144。 (发表于2004-9-13 17:35:00) GXHETAO:同意 Kelvin_UV 的話, 何必搞這麼麻煩, 如果只是為了說明你有多麼強, 我... ... ... (发表于2004-9-15 12:27:00) wetwoo:你的那个程序根本就不是CUI程序,本质上就是GUI程序。 GUI应用程序的进入点是:WinMain/wWinMain,嵌入到可执行文件的启动函数是WinMainCRTStartup/wWinMainCRTStartup。 CUI应用程序的进入点是:main/wmain,嵌入到可执行文件的启动函数是mainCRTStartup/wmainCRTStartup。 (发表于2007-4-2 10:13:00) .......................................................................... |