调用其它程序
何志丹
WinExec 原型: UINT WinExec( LPCSTR lpCmdLine, // address of command line UINT uCmdShow // window style for new application ); 用于十六位操作系统及兼容系统. 例如: WinExec("notepad.exe f:\\调用程序.txt",SW_SHOW); WinExec("notepad.exe ",SW_SHOW); 不同的参数用空格分开,故路径中不能有空格,而大部分程序默认是安装在"...\Program Files\...",如word,这极大的限制了WinExec的应用范围. 以上可不带路径: 1,程序所在目录. 2,当前路径. 3,系统目录,可以用GetSystemDirectory得到. 4,Windows 目录. 可以用TheGetWindowsDirectory得到. 5,在环境变量中设置的目录.
ShellExecute 原型: HINSTANCE ShellExecute( HWND hwnd, //父窗口句柄 LPCTSTR lpOperation, //操作,"open","print","explore" LPCTSTR lpFile, //文件名,前面可加路径 LPCTSTR lpParameters, //参数 LPCTSTR lpDirectory, //默认文件夹 INT nShowCmd //显示方式 );
打开一个应用程序 ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe","c:\MyLog.log","",SW_SHOW );
打开一个同系统程序相关连的文档 ShellExecute(this->m_hWnd,"open","c:\abc.txt","","",SW_SHOW );
激活相关程序,发送EMAIL ShellExecute(this->m_hWnd,"open","mailto:[email protected]","","", SW_SHOW );
用系统打印机打印文档 ShellExecute(this->m_hWnd,"print","c:\abc.txt","","", SW_HIDE);
lpParameters的用法示例: 一,建立一个可以接受参数的程序call.exe,添加如下代码: BOOL CCallApp::InitInstance() { int n = __argc; for(int i = 1 ; i < n ; i++) AfxMessageBox(__targv[i]); //__targv[0]存储的是程序的文件名 ... } 二,Alt + F7的进行Project setting, Debug -> program argurments ->"1 2 3 4 5". 如果有多个参数,用空格分开. 三,运行. 四,执行ShellExecute(NULL,NULL,"f:\\call.exe","1 2 3 4 5",NULL,SW_SHOW);
BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation );
STARTUPINFO startupInfo; memset(&startupInfo,0,sizeof(STARTUPINFO)); startupInfo.cb = sizeof(STARTUPINFO);
示例: //程序最启动时最大化 startupInfo.dwFlags |= STARTF_USESHOWWINDOW; startupInfo.wShowWindow = SW_SHOWMAXIMIZED; //运行....exe PROCESS_INFORMATION ProcessInfo; BOOL bCreate = ::CreateProcess ( "f:\\call.exe",// 1 2 3 4", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &ProcessInfo);
//等到call.exe执行完毕 WaitForSingleObject(ProcessInfo.hProcess,1000000); MessageBox("调用程序结束!"); 
|