调用其它程序

    技术2022-05-11  184

    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 );

    激活相关程序,发送EMAILShellExecute(this->m_hWnd,"open","mailto:nishinapp@yahoo.com","","", 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("调用程序结束!");


    最新回复(0)