让MFC视窗程式要兼具Dos呼叫启动功能的有关问题

让MFC视窗程式要兼具Dos呼叫启动功能的问题
在网路上查知可使用GetCommandLine()获取Command Line参数
虽然这样写好像能在开启视窗前依需求做其他处理
但是最终还是会开起视窗
要怎修改才能让程式兼具Dos呼叫启动执行完毕后自动关闭

C/C++ code

/////////////////////////////////////////////////////////////////////////////
// CZZZDlg message handlers

BOOL CZZZDlg::OnInitDialog()
{
    CString strCommand = GetCommandLine();
    if(strCommand !="")
    {
        // TODO: Add extra initialization here
                //..........
        return FALSE;
    }
    else
    {
        CDialog::OnInitDialog();

        // Add "About..." menu item to system menu.

        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            CString strAboutMenu;
            strAboutMenu.LoadString(IDS_ABOUTBOX);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);         // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon

        // TODO: Add extra initialization here
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
}



------解决方案--------------------
什么意思?
程序里调用dos命令?
WinExec的作用是运行指定的程序,其中第一个参数是程序的路径及参数,第二个参数是定义了以怎样的形式启动程序的常数值(详细请见msdn)。

比如我们要获得当前目录下的文件列表,可以这样

WinExec("cmd.exe /c dir > result.txt", SW_HIDE);

执行这行代码后,将会在当前目录下生成一个result.txt的文件,文件的内容就是执行dir命令的输出(注2)。并且不会出现dos窗口(SW_HIDE代表隐藏窗口)

有时候我们需要同时执行数条语句,是不是要执行多次system调用呢?

答案是否定的,dos自身提供了执行多条命令的功能,符号&&代表同时执行多条命令。

如“cd C:/demo && dir”会首先将目录切换到 C:/demo文件夹,然后执行dir命令。

利用&&命令可以实现这样的功能:暂停等待用户按下任意键,接下来执行某个命令。

如:pause && dir 会在屏幕上显示“请按任意键继续”和,在用户按下任意键后会执行dir命令输出文件列表。

上面利用pause命令实现暂停,但有个副作用:如果用户不按下键盘,程序就会永远停在那里。所以我们可以换个命令以实现暂停某段时间后继续。pause命令是不接受参数的,我们要换另一个命令:ping。可以大家以前也用过ping,不过一般是用来探测网络信息的吧?这里用它来实现暂停某段时间:

“ping -w 3000 w > nul”暂停三秒后继续(注3)

注1:

UINT WinExec(

LPCSTR lpCmdLine,

UINT uCmdShow

);