MFC带参数启动指令发送与接收
MFC带参数启动指令发送与接收
发送
使用ShellExecute
函数打开文件或执行程序。
函数原型:
HINSTANCE ShellExecute(
_In_opt_ HWND hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
_In_opt_ LPCTSTR lpOperation,//操作
_In_ LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
_In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
_In_opt_ LPCTSTR lpDirectory,//默认目录
_In_ INT nShowCmd//显示类型
);
lpOperation
是一个字符串,通常为:
- edit: 用编辑器打开 lpFile 指定的文档,如果 lpFile 不是文档,则会失败
- explore: 浏览 lpFile 指定的文件夹
- find: 搜索 lpDirectory 指定的目录
- open: 打开 lpFile 文件,lpFile 可以是文件或文件夹
- print: 打印 lpFile,如果 lpFile 不是文档,则函数失败
- properties: 显示属性
- runas: 请求以管理员权限运行,比如以管理员权限运行某个exe
- NULL: 执行默认”open”动作
nShowCmd
是执行操作之后程序显示类型,指定该参数后运行起来的程序不一定能按照指定参数显示,只是通知程序的显示状态。类型如下:
- SW_HIDE 隐藏窗口,活动状态给令一个窗口
- SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
- SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOWMAXIMIZED 最大化窗口,并将其激活
- SW_SHOWMINIMIZED 最小化窗口,并将其激活
- SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
- SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
- SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
- SW_SHOWNORMAL 与SW_RESTORE相同
示例:
//打开程序
ShellExecute(NULL,L"open",L"notepad.exe", command, NULL, SW_SHOW );
//用系统打印机打印文档
ShellExecute(NULL,L"print", L"c:\\abc.txt",NULL, NULL, SW_HIDE);
//用系统查找功能来查找指定文件
ShellExecute(NULL,L"find",L"d:\\nish", NULL, NULL, SW_SHOW);
接收:参数单个的话建议方法一,多个的话建议方法三
方法一(不带本程序路径的所有参数作为整体获取)
MFC中的AFXWIN.H
中自带一个成员变量m_lpCmdLine
,该成员变量用来保存可执行文件名后的参数。
在工程的app类的InitInstance
初始化函数中,添加对m_lpCmdLine
变量的判断。
示例
m_command="无参数";//要现在app类中定义此变量
if ((m_lpCmdLine[0] != _T('\0')) )//例子
{
m_command = m_lpCmdLine;
}
方法二(带本程序地址的所有参数作为整体获取)
CString sCmdline = ::GetCommandLine();
AfxMessageBox(sCmdline);
\\将获取到 "C:\test\app.exe -1 -2"
方法三(分开获取多个参数)
c++程序的main
函数有两个参数:int main(int argc, char* argv[])
或者int main(int argc, char** argv)
- argc = argument count :表示传入main函数的数组元素(参数)个数,为int类型
- argv = argument vector :表示传入main函数的指针数组(参数数组),为char**类型。char **argv与char *argv[]等价。
第一个数组元素argv[0]是程序名称,并且包含程序所在的完整路径。argc至少为1,即argv数组至少包含程序名。
示例:
for (int i = 0; i < __argc; i++)
{
__argv[i];
AfxMessageBox(__argv[i]);
}
//将依次得到"C:\test\app.exe","参数一", "参数二"