1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      C++中外部程序的調用方法

      更新時間: 2011-11-16 09:51:28來源: 粵嵌教育瀏覽量:2146

          有三種SDK函數(shù)可以調用,分別是:

          WinExec, ShellExecute,CreateProcess

          其中以WinExec為簡單,ShellExecute比WinExec靈活一些,CreateProcess為復雜

          WinExec 有兩個參數(shù),前一個指定路徑,后一個指定顯示方式

          ShellExecute 可以指定工作目錄,并且還可以尋找文件的關聯(lián)直接打開不用加載與文件關聯(lián)的應用程序,ShellExecute還可以打開網(wǎng)頁,啟動相應的郵件關聯(lián)發(fā)送郵件等等

          CreateProcess 一共有十個參數(shù),不過大部分都可以用NULL代替,它可以指定進程的安全屬性,繼承信息,類的優(yōu)先級等等如果我們要得到足夠多的關于新的進程的信息,控制新的進程的細節(jié)屬性,若要達到這些目的,就需要使用CreateProcess函數(shù)了

          具體用法如下:

          WinExec這個函數(shù)簡單,只有兩個參數(shù),原型如下:  UINT WinExec(


      LPCSTR lpCmdLine, // 命令路徑

      UINT uCmdShow // 顯示方式,共有11種,具體可以查閱MSDN的ShowWindow函數(shù)

      );
       

         使用方法如下:

          WinExec("Notepad.exe", SW_SHOW); // 打開記事本

          WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以化的方式打開Test.exe(注意文件名的大小寫也必須完全一樣)

          需要注意的是若用 SW_SHOWMAXMIZED 方式去加載一個無化按鈕的程序,譬如Calc (計算器),就不會出現(xiàn)正常的窗體,但是已經(jīng)被加到任務列表里了

          ShellExecute

          原型如下:  HINSTANCE ShellExecute(
      HWND hwnd, //父窗口句柄

      LPCTSTR lpOperation, //操作, 打開方式"edit","explore","open","find","print","NULL"

      LPCTSTR lpFile, //文件名,前面可加路徑

      LPCTSTR lpParameters, //參數(shù)

      LPCTSTR lpDirectory, //默認文件夾

      INT nShowCmd //顯示方式

      );


           
       使用方法如下:  ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打開C:\Test.txt 文件
      ShellExecute(NULL, "open", "
      http://www.google", NULL, NULL, SW_SHOWNORMAL); // 打開網(wǎng)頁www.google
      ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打開目錄D:\C++
      ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txt
       

          注意:ShellExecute不支持定向輸出

          CreateProcess

          原型如下:  BOOL CreateProcess(


      LPCTSTR lpApplicationName, //執(zhí)行程序名

      LPTSTR lpCommandLine, // 參數(shù)行

      //下面兩個參數(shù)描述了所創(chuàng)建的進程和線程的安全屬性,如果為NULL則使用默認的安全屬性

      LPSECURITY_ATTRIBUTES lpProcessAttributes, //process security attributes

      LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes

      BOOL bInheritHandles, // 繼承標志

      DWORD dwCreationFlags, // 創(chuàng)建標志

      LPVOID lpEnvironment, // 環(huán)境變量

      LPCTSTR lpCurrentDirectory, // 運行該進程的初始目錄

      LPSTARTUPINFO lpStartupInfo, // 用于在創(chuàng)建子進程時設置各種屬性

      LPPROCESS_INFORMATION lpProcessInformation //用于在進程創(chuàng)建后接受相關信息

      );
       

           使用方法如下:  PROCESS_INFORMATION pi; //啟動窗口的信息
      STARTUPINFO si; //進程的信息
      memset(&si,0,sizeof(si));
      si.cb=sizeof(si);
      si.wShowWindow=SW_SHOW;
      si.dwFlags=STARTF_USESHOWWINDOW;
      bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
          由此,我就設計了三個按鈕,分別用這三種函數(shù)調用了三個應用程序,設置在每個按鈕的ONCLICK消息中:  WinExec("taskmgr",SW_NORMAL); //調用系統(tǒng)任務管理器

      ShellExecute(NULL,"open","C:\ReadMe.txt","","",SW_SHOW); //打開C盤下的ReadMe文件

      STARTUPINFO si={sizeof(si)};
      PROCESS_INFORMATION pi;
      CreateProcess(NULL,"cleanmgr",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); //調用系統(tǒng)的清理磁盤程序
       

          編譯運行后都通過了,我的對話框終于有了一點用處,可以通過單擊按鈕執(zhí)行一些應用程序了

          從網(wǎng)上看到有人說,使用這三個函數(shù)也有一些注意事項:

          1、定義頭文件

          在頭文件stdafx.h中必須定義以下兩個頭文件:

          #include <shlobj.h> // 可替換為 windows.h #include <shellapi.h>如果定義了頭文件 #include <windows.h>的話就不必定義 #include <shlobj.h>了,"windows.h" 不光是包含了"shellapi.h",它還定義了許多數(shù)據(jù)類型,如果沒有這些數(shù)據(jù)類型,shellapi.h本身會出錯

          2、定義路徑

          C++中所表示的路徑要用 " \\ "而不是平常所用的" \ ",所以以上三個函數(shù)表示路徑都為:

          Disk:\\Directory\\……\\File name

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲宅男永久在线 | 亚洲三级视频专区 | 天天在线视频精品分类 | 色狠狠一区二区三区香蕉 | 久久久综合香蕉尹人综合网 | 网址你懂的免费在线观看 |