现在的位置: 首页 > 综合 > 正文

VC++调用其他程序

2018年04月05日 ⁄ 综合 ⁄ 共 2208字 ⁄ 字号 评论关闭
 

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","","","", 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("调用程序结束!");

抱歉!评论已关闭.