MFC

MFC带参数启动程序

c++

Posted by YiMiTuMi on April 24, 2023

MFC带参数启动程序

MFC 带参数启动一共可以通过两种方式实现:

1.写在 InitInstance() 函数中

2.写在 OnInitDialog() 函数中

InitInstance

在 InitInstance 中实现比较简单,获取一下执行的命令就可以了

//获取执行的命令行
CString strCmdline = AfxGetApp()->m_lpCmdLine;

//获取执行的命令行
LPWSTR lpCommandLen = GetCommandLine();
CString strMsg = lpCommandLen;

AfxMessageBox(strCmdline);

注意,这个获取出来的一般是:

"C:\Cshi\Csshi.exe  -1 -2"

这种,所以需要自己截取一下。

OnInitDialog

在 OnInitDialog 函数中实现:

BOOL xxx::OnInitDialog()
{
	CDialog::OnInitDialog();

	LPWSTR *szArglist = NULL;   
	int nArgs = 0;  //参数的数量
	szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);   
	if( NULL != szArglist)   
	{   
		for (int i = 0; i < nArgs; i++) 
		{  
			AfxMessageBox(szArglist[i]);
			CString strCmd = szArglist[i];

			if (strCmd == L"-1")
			{
				AfxMessageBox(L"1");
				this->ShowWindow(SW_SHOWMINIMIZED); //不需要界面可以隐藏或最小化
			}
			else if (strCmd == L"-2")
			{
				AfxMessageBox(L"-2");
				this->ShowWindow(SW_SHOWMINIMIZED);
			}
		} 
	} 
	
	//取得参数后,释放CommandLineToArgvW申请的空间   
	LocalFree(szArglist); 

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

注意,这个获取出来的一般是:

szArglist[0] == "C:\Cshi\Csshi.exe"
szArglist[1] == "-1"
szArglist[2] == "-2"

szArglist[0]一定是进程的路径,后面几个就是参数。 nArgs 是路径和参数的总个数。