让MFC视窗程式要兼具Dos呼叫启动功能的有关问题
让MFC视窗程式要兼具Dos呼叫启动功能的问题
在网路上查知可使用GetCommandLine()获取Command Line参数
虽然这样写好像能在开启视窗前依需求做其他处理
但是最终还是会开起视窗
要怎修改才能让程式兼具Dos呼叫启动执行完毕后自动关闭
------解决方案--------------------
什么意思?
程序里调用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
);
在网路上查知可使用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
);