Chinaunix首页 | 论坛 | 博客
  • 博客访问: 454792
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 17:24:49


你的那个程序根本就不是CUI程序,本质上就是GUI程序。
GUI应用程序的进入点是:WinMain/wWinMain,嵌入到可执行文件的启动函数是WinMainCRTStartup/wWinMainCRTStartup。
CUI应用程序的进入点是:main/wmain,嵌入到可执行文件的启动函数是mainCRTStartup/wmainCRTStartup。 ( wetwoo 发表于 2007-4-2 10:13:00)

同意 Kelvin_UV 的話, 何必搞這麼麻煩, 如果只是為了說明你有多麼強, 我... ... ... ( GXHETAO 发表于 2004-9-15 12:27:00)

上面我的说法有点错误,在MFC程序中,应该是0x144。 ( meteor135 发表于 2004-9-13 17:35:00)

楼上的方法果然没错,我把一个没有DOS窗口的程序,比如MFC编写的窗口程序用UltraEdit打开,然后把0x133~0x134的02改成03,然后保存,重新打开这个程序居然出现了黑窗口!为什么这个秘密之前没有人公开过呢? ( meteor135 发表于 2004-9-13 17:33:00)

我有方法可以将一个原有的 DOS 程序变为看不见
先用 16 位编辑工具开了那个执行档
在位置 0x130~0x13f (通常是 0x13c 或 0x134) 的位置之间找个数值 03,将它变为02
原来就是这么简单喔 !! ( s000792003 发表于 2004-9-13 16:55:00)

综合方案(没多少实用价值):

    #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 
    {
    }
( meteor135 发表于 2004-9-13 13:41:00)

为了不显示Console Window,必须使用/subsystem: windows Linker Option,
  但是一旦使用了它,
  如果不指定/entry: 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)
{
}

( meteor135 发表于 2004-9-13 13:39:00)

请问这样做,连接器如何设置?按照缺省设置link通不过。 ( hangwire 发表于 2004-9-11 23:53:00)

不明白!, 这样做不是更简单吗?

#include 
#include 
#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;
}
( Kelvin_UV 发表于 2004-9-11 23:23:00)

有时需要用控制台程序做一些没有用户交互的后台批量处理,不想显示命令行窗口。 ( hangwire 发表于 2004-9-11 22:35:00)

.......................................................

--------------------next---------------------

阅读(187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~