vc中調用其他應用程序的方法(函數) winexec,shellexecute ,createprocess

三個SDK函數:?
WinExecShellExecute?CreateProcess可以實現調用其他程序的要求,其中以WinExec最為簡單,ShellExecute比WinExec靈活一些,CreateProcess最為復雜。
????WinExec?兩個參數,前一個指定路徑,后一個指定顯示方式。
????ShellExecute?可以指定工作目錄,并且還可以尋找文件的關聯直接打開不用加載與文件關聯的應用程序,ShellExecute還可以打開網頁,啟動相應的郵件關聯發送郵件等等。
????CreateProcess?一共有十個參數,不過大部分都可以用NULL代替,它可以指定進程的安全屬性,繼承信息,類的優先級等等。如果我們要得到足夠多的關于新的進程的信息,控制新的進程的細節屬性,若要達到這些目的,我們就需要使用CreateProcess函數了。
?
三個SDK函數(?WinExec、ShellExec、CrateProcess?)的語法:
?

WinExec

這個函數最簡單,只有兩個參數,原型如下:

?
??????UINT?WinExec(

??????LPCSTR?lpCmdLine,???//?命令路徑

??????UINT?uCmdShow??????//?顯示方式

??????;

使用方法如下:

WinExec("Notepad.exe",?SW_SHOW);??//?打開記事本
WinExec("D:\\Program?Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);?//?以最大化的方式打開Test.exe
需要注意的是若用?SW_SHOWMAXMIZED?方式去加載一個無最大化按鈕的程序,譬如Neterm,Calc?等等,就不會出現正常的?窗體,但是已經被加到任務列表里了。
?

ShellExecute

原型如下:

??????HINSTANCE?ShellExecute(

??????HWND?hwnd,???????????//父窗口句柄

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

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

??????LPCTSTR?lpParameters,???//參數

??????LPCTSTR?lpDirectory,????//默認文件夾

??????INT?nShowCmd??????????//顯示方式

);

使用方法如下:

ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);?//?打開C:\Test.txt?文件
ShellExecute(NULL,?"open",?"::URL::http://www.google.com",/?NULL,?NULL,?SW_SHOWNORMAL);?//?打開網頁www.google.com
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,?//執行程序名

??????LPTSTR?lpCommandLine,??//?參數行

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

??????LPSECURITY_ATTRIBUTES?lpProcessAttributes,??//?process?security?attributes

??????LPSECURITY_ATTRIBUTES?lpThreadAttributes,???//?thread?security?attributes

??????BOOL?bInheritHandles,??//?繼承標志

??????DWORD?dwCreationFlags,?//?創建標志

??????LPVOID?lpEnvironment,??//?環境變量

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

??????LPSTARTUPINFO?lpStartupInfo,??//?用于在創建子進程時設置各種屬性

??????LPPROCESS_INFORMATION?lpProcessInformation?//用于在進程創建后接受相關信息

??????;?

使用方法如下:
?????????????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);
?

可以看出,通過上面的幾個不同的方法,都可以實現在應用程序中打開其他應用程序的目的,其中有些方法可能會麻煩一點,所以就需要我們根據不同的目的去選擇最適合自己的方法去實現自己的目的!

?

?

關于三個SDK函數:?WinExec,?ShellExecute,CreateProcess?其他注意事項:

1、定義頭文件

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

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

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

Disk:\\Directory\\...\\File?name

WinExec("D:\\Program?Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);

ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool?fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447230.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法入門篇 一 時間復雜度

時間復雜度 要求&#xff1a;只要高階項&#xff0c;不要低階項常數操作&#xff1a;操作花費的時間和數據量無關&#xff0c;比如數組尋址&#xff0c;直接利用偏移量找到對應元素的位置&#xff1b;非常數操作&#xff1a;比如list(鏈表)&#xff1b;查找元素需要遍歷鏈表&a…

遍歷文件夾下所有文件和文件夾

1 void find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLEhFind::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE hFind)  return;while(TRUE){if(FindFileData.dw…

算法入門篇二 認識O(NlogN)的排序

遞歸 例子引出 使用遞歸的方法求出數組中的最大值&#xff08;利用的是棧&#xff09;求中點的方法改進 mid (left right) / 2 //但是如果left和right的數很大&#xff0c;相加會造成內容溢出 改進為 mid left (right - left) / 2 //(right - left)得到整個的長度&…

算法入門篇三 詳解桶排序和整理排序知識 堆的相關操作 補充 不完整

歸并排序不使用遞歸 使用一個變量&#xff0c;使其按照1、2、4、8遞增&#xff0c;控制左右兩邊1個元素、2個元素、4個元素等元素的合并 完全二叉樹 完全二叉樹 要不全是滿的&#xff0c;要不葉子節點出現在最后一層&#xff0c;只要出現了葉子節點&#xff0c;后面的都是葉子…

C++著名程序庫

1、C各大有名庫的介紹——C標準庫標準庫中提供了C程序的基本設施。雖然C標準庫隨著C標準折騰了許多年&#xff0c;直到標準的出臺才正式定型&#xff0c;但是在標準庫的實現上卻很令人欣慰得看到多種實現&#xff0c;并且已被實踐證明為有工業級別強度的佳作。 1.1、Dinkumware…

2023年12月24日學習總結

今日to do list&#xff1a; 做kaggle上面的流量預測項目?? 學習時不刷手機&#x1f921; okkkkkkkkkkkkkk 開始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在預測一個名字叫做elborn基站的下行鏈路流量&#xff0c;用過去29天的數據預測未來10天的數據 1、…

Mac/Linux系統連接遠端服務器以及相同IP地址的服務器賬號密碼重置,ssh失敗問題

連接遠端服務器 ssh 賬號IP地址 輸入完成之后會提示輸入密碼&#xff0c;密碼輸入正確后&#xff0c;就可以連接成功了 重置ssh密鑰 如果連接的服務器除了IP地址沒有改變&#xff0c;其余的賬號、密碼、系統等都變了的話&#xff0c;因為曾經連接過的歷史數據會保存到本地&a…

內存泄漏快速定位方法

主要方法&#xff1a;利用系統帶的函數&#xff1a;EnableMemLeakCheck() 和函數重載&#xff0c;能快速準備的定位到內存泄漏的地方&#xff0c;方法簡單且實用&#xff0c;值得借用。 #include <crtdbg.h> #ifdef_DEBUG //重載一下new函數&#xff0c;這樣能得到使…

Linux操作系統監視NVIDIA的GPU使用情況

對于GPU相關參數介紹 使用命令周期性查看GPU運行情況最常用的參數是 -n&#xff0c; 后面指定是每多少秒來執行一次命令。監視顯存&#xff1a;設置為每 1s 顯示一次顯存的情況&#xff1a;使用命令ctrlz退出 watch -n 1 nvidia-smi 參數介紹 Fan&#xff1a;顯示風扇轉速&am…

一個軟件工程師的職業規劃

[1]好好規劃自己的路&#xff0c;不要跟著感覺走&#xff01;根據個人的理想決策安排&#xff0c;絕大部分人并不指望成為什么院士或教授&#xff0c;而是希望活得滋潤一些&#xff0c;爽一些。那么&#xff0c;就需要慎重安排自己的軌跡。從哪個行業入手&#xff0c;逐漸對該行…

算法入門篇四 桶排序

桶排序 計數排序&#xff08;基于統計&#xff09; 要求數據是有限的&#xff0c;和數據狀況有關&#xff0c;比如對于200個人統計他們的年齡分布&#xff0c;這個時候需要申請200個桶&#xff0c;因此對于輸入數據的規模有限制&#xff0c;如果輸入規模是不定的&#xff0c;…

RTP概述

1.1. RTP是什么 RTP全名是Real-time Transport Protocol&#xff08;實時傳輸協議&#xff09;。它是IETF提出的一個標準&#xff0c;對應的RFC文檔為RFC3550&#xff08;RFC1889為其過期版本&#xff09;。RFC3550不僅定義了RTP&#xff0c;而且定義了配套的相關協議RTCP&…

Java需要注意的一些小細節

更加精確的鎖定時間 判定納秒維度的時間 //使用System.nanoTime(); //例子 long start System.nanoTime(); long end System.nanoTime(); System.out.println(start); System.out.println(end);

live555的安裝 RTSP點播消息流程實例(客戶端:VLC, RTSP服務器:LIVE555 Media Server)

live555是一個開源的軟件&#xff0c;主要用來生成rtsp,rtp和sip服務器和客戶端的軟件。前幾天需要看一下vlc中的rtsp的功能&#xff0c;在vlc中rtp和rtsp的功能都是使用live555中的函數來生成的。該開源軟件的編譯&#xff0c;可以使用vc,mingw和cygwin等軟件。我安裝的時候使…

算法入門篇五 鏈表

牛客網 算法入門篇 判斷一個鏈表是否為回文結構 給定一個單鏈表的頭節點head&#xff0c;請判斷這個鏈表是否為回文結構1->2->1&#xff0c;返回為True;1->2->3為False 思路&#xff1a; 1&#xff0c;遍歷鏈表&#xff0c;將所有元素壓入棧中&#xff0c;然后再…

實時流媒體編程基于Linux環境開發

一、流媒體簡介 隨著Internet的日益普及&#xff0c;在網絡上傳輸的數據已經不再局限于文字和圖形&#xff0c;而是逐漸向聲音和視頻等多媒體格式過渡。目前在網絡上傳輸音頻/視頻&#xff08;Audio/Video&#xff0c;簡稱A/V&#xff09;等多媒體文件時&#xff0c;基本上只有…

算法入門篇六 二叉樹

牛客網 算法入門篇 左程云老師 個人復習&#xff0c;如果侵全&#xff0c;設為私密 二叉樹遍歷&#xff08;遞歸&#xff09; 先序遍歷&#xff08;中&#xff0c;左&#xff0c;右&#xff09; 中序遍歷&#xff08;左&#xff0c;中&#xff0c;右&#xff09; 后序遍歷&a…

VLC詳細的使用說明以及配置說明綜合示范實例精通VLC開發

vlc的全名是Video LanClient&#xff0c;是一個開源的、跨平臺的視頻播放器。VLC支持大量的音視頻傳輸、封裝和編碼格式&#xff0c;完整的功能特性列表可以在這里獲得http://www.videolan.org/vlc/features.html&#xff0c;下面給出一個簡要的不完整的列表&#xff1a;操作系…

算法入門篇七 前綴樹

牛客網 左程云老師的算法入門課 找二叉樹的節點的后繼節點 原則 如果節點有右子樹&#xff0c;那么后繼節點就是右子樹的最左邊的第一個節點如果節點沒有右子樹&#xff0c;如果節點是父節點的右孩子&#xff0c;就繼續往上找&#xff0c;直到找到一個父節點是沿途節點的父節…

VLC視頻播放器原理詳細分析含TS流格式分析

vlc是一個功能強大的玩意&#xff0c;能做很多有意思的事情。最簡單的&#xff0c;從界面打開一個文件播放&#xff0c;也可以在命令行下使用&#xff0c;如C:\Program Files\VideoLAN\VLC>vlc.exe test.ts獲取內置的幫助&#xff0c;會寫到vlc-help.txtC:\Program Files\Vi…