ShellExecute使用詳解

有三個API函數可以運行可執行文件WinExec、ShellExecute和CreateProcess。
1.CreateProcess因為使用復雜,比較少用。
2.WinExec主要運行EXE文件。如:WinExec('Notepad.exe Readme.txt', SW_SHOW);
3.ShellExecute不僅可以運行EXE文件,也可以運行已經關聯的文件。
首先必須引用shellapi.pas單元:uses ShellAPI;
1).標準用法
  ShellExecute函數原型及參數含義如下:
  function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;
  ●hWnd:用于指定父窗口句柄。當函數調用過程出現錯誤時,它將作為Windows消息窗口的父窗口。例如,可以將其設置為應用程序主窗口
句柄,即Application.Handle,也可以將其設置為桌面窗口句柄(用GetDesktopWindow函數獲得)。
  ●Operation:用于指定要進行的操作。其中“open”操作表示執行由FileName參數指定的程序,或打開由FileName參數指定的文件或文件
夾;“print”操作表示打印由FileName參數指定的文件;“explore”操作表示瀏覽由FileName參數指定的文件夾。當參數設為nil時,表示執
行默認操作“open”。?
  ●FileName:用于指定要打開的文件名、要執行的程序文件名或要瀏覽的文件夾名。
  ●Parameters:若FileName參數是一個可執行程序,則此參數指定命令行參數,否則此參數應為nil或PChar(0)。
  ●Directory:用于指定默認目錄。
  ●ShowCmd:若FileName參數是一個可執行程序,則此參數指定程序窗口的初始顯示方式,否則此參數應設置為0。
  若ShellExecute函數調用成功,則返回值為被執行程序的實例句柄。若返回值小于32,則表示出現錯誤。
  上述僅僅是ShellExecute函數的標準用法,下面將介紹它的特殊用法。
2).特殊用法
  如果將FileName參數設置為“http:”協議格式,那么該函數將打開默認瀏覽器并鏈接到指定的URL地址。若用戶機器中安裝了多個瀏覽器
,則該函數將根據Windows 9x/NT注冊表中http協議處理程序(Protocols Handler)的設置確定啟動哪個瀏覽器。
  格式一:http://網站域名。
  如:ShellExecute(handle, ‘open’,?http://www.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);
  格式二:http://網站域名/網頁文件名。
  如:ShellExecute(handle, ‘open’,?http://www.neu.edu.cn/default.htm’,nil,nil,SW_SHOWNORMAL);


  如果將FileName參數設置為“mailt”協議格式,那么該函數將啟動默認郵件客戶程序,如Microsoft Outlook(也包括Microsoft
Outlook Express)或Netscape Messanger。若用戶機器中安裝了多個郵件客戶程序,則該函數將根據Windows 9x/NT注冊表中mailto協議處理
程序的設置確定啟動哪個郵件客戶程序。
  格式一:mailt
  如:ShellExecute(handle,‘open’, ‘mailt’, nil, nil, SW_SHOWNORMAL);打開新郵件窗口。
  格式二:mailt用戶賬號@郵件服務器地址
  如:ShellExecute(handle, ‘open’,‘ mailtwho@mail.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);打開新郵件窗口,并自動填入收
件人地址。若指定多個收件人地址,則收件人地址之間必須用分號或逗號分隔開(下同)。
  格式三:mailt用戶賬號@郵件服務器地址?subject=郵件主題&body=郵件正文
  如:ShellExecute(handle, ‘open’, ‘ mailtwho@mail.neu.edu.cn?subject=Hello&Body=This is a test’, nil, nil,
SW_SHOWNORMAL);打開新郵件窗口,并自動填入收件人地址、郵件主題和郵件正文。若郵件正文包括多行文本,則必須在每行文本之間加入換行

轉義字符%0a。
例子(Delphi):
在一個應用程序調用c:\Project1.exe;
ShellExecute(handle, 'open','c:\Project1.exe','字串內容',nil, SW_SHOWNORMAL);
在Project1.exe里可以調用:
procedure?Tform1.formCreate(Sender: TObject);
var
i: integer;
begin
for i:=1 to paramcount do
if ParamStr(i)<>'' then
??? showmessage(ParamStr(i));
end;
最后的那個參數,為窗口指定可視性方面的一個命令。請用下述任何一個常數:
SW_HIDE 隱藏窗口,活動狀態給令一個窗口
SW_MINIMIZE 最小化窗口,活動狀態給令一個窗口
SW_RESTORE 用原來的大小和位置顯示一個窗口,同時令其進入活動狀態
SW_SHOW 用當前的大小和位置顯示一個窗口,同時令其進入活動狀態
SW_SHOWMAXIMIZED 最大化窗口,并將其激活
SW_SHOWMINIMIZED 最小化窗口,并將其激活
SW_SHOWMINNOACTIVE 最小化一個窗口,同時不改變活動窗口
SW_SHOWNA 用當前的大小和位置顯示一個窗口,不改變活動窗口
SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個窗口,同時不改變活動窗口
SW_SHOWNORMAL 與SW_RESTORE相同

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

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

相關文章

javascript筆記整理(對象基礎)

一、名詞解釋 1.基于對象&#xff08;一切皆對象&#xff0c;以對象的概念來編程&#xff09; 2.面向對象編程(Object Oriented Programming&#xff0c;OOP) A.對象(JavaScript 中的所有事物都是對象) B.對象的屬性和行為 屬性:用數據值來描述他的狀態 行為:用來改變對象行為的…

java的安裝和配置

JRE (JAVA Runtime Enviroment java運行環境),包括JVM(java虛擬機)和java程序所需的核心功能類庫&#xff0c;如果只是運行java程序&#xff0c;只需安裝JRE。 JDK &#xff08;Java Development Kit 開發工具包&#xff09;包括開發JAVA程序時所需的工具&#xff0c;包括JRE…

#if, #ifdef, #ifndef, #else, #elif, #endif的用法

#ifdef的用法 靈活使用#ifdef指示符&#xff0c;我們可以區隔一些與特定頭文件、程序庫和其他文件版本有關的代碼。 代碼舉例&#xff1a;新建define.cpp文件 &#xff03;include "iostream.h" int main() { #ifdef DEBUG cout<< "Beginning ex…

redhat 6.6 安裝 (LVM)

http://www.cnblogs.com/kerrycode/p/4341960.html轉載于:https://www.cnblogs.com/zengkefu/p/4954955.html

MFC對話框最小化到托盤

1、在資源中的Icon中導入一個自己喜歡的圖標&#xff0c;ID命名為IDR_MAINFRAME&#xff0c;將先前的IDR_MAINFRAME的圖標刪除掉&#xff1b; 2、在自己的Dialog頭文件中定義一個變量 NOTIFYICONDATA m_nid&#xff0c;關于該結構體的具體信息可以查閱MSDN&#xff1b; 3、添加…

Android acache讀后感

今天了解到了一個android輕量級的開源緩存框架,(github&#xff1a;https://github.com/yangfuhai/ASimpleCache),花了一點時間研究了一下源代碼&#xff0c;大概的思路就是每個緩存目錄對應一個Acache類&#xff0c;通過mInstanceMap關聯&#xff08;個人覺得這個主要是減少對…

continue break

塊作用域 一個塊或復合語句是用一對花括號&#xff08;"{}"&#xff09;括起來的任意數量的簡單的java語句。塊定義了變量的作用范圍。 1、嵌套塊是方法內的嵌套&#xff0c;不包括類的花括號。在嵌套塊內的 變量是不可以重復定義的。 2、不允許重復定義的是局部變…

GetVersionEx 獲取系統版本信息

轉自&#xff1a;http://blog.csdn.net/yyingwei/article/details/8286658 最近在windows 8上獲取系統版本信息需要調用系統API&#xff0c;于是用到了GetVersionEx。 首先看一看函數原型&#xff1a; [cpp] view plaincopy BOOL GetVersionEx(POSVERSIONINFO pVersionInformat…

popoverController(iPad)

一、設置尺寸 提示&#xff1a;不建議&#xff0c;像下面這樣吧popover的寬度和高度寫死。 1 //1.新建一個內容控制器2 YYMenuViewController *menuVc[[YYMenuViewController alloc]init];3 4 //2.新建一個popoverController&#xff0c;并設置其內容控制器5 s…

靜態成員變量和非靜態成員變量的對比

靜態成員變量和非靜態成員變量的對比 1、存儲的數據 靜態成員變量存儲的是所有對象共享的數據 非靜態成員變量存儲的是每個對象特有的數據 2、存儲位置 靜態成員變量是隨著類的加載在方法區的靜態區開辟內存了 非靜態成員變量是隨著對象的創建再堆中開辟內存 3、調用方式 靜態成…

c++的thread類(c++線程簡單用法)

最近看了一個Thread類&#xff08;忘記在哪里看的了&#xff09;&#xff0c;感覺不錯。 創建線程時線程對應的函數必須是類的靜態成員&#xff0c;由于靜態成員無法訪問類的非靜態成員&#xff0c;我從前都是把對象的指針作為參數傳遞給線程函數來避免這個問題&#xff0c;但是…

[LeetCode]Merge Sorted Array

題目描述:(鏈接) Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:You may assume that nums1 has enough space (size that is greater or equal to m n) to hold additional elements from nums2. The number of eleme…

[LeetCode]Integer to Roman

題目描述:(鏈接&#xff09; Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 解題思路&#xff1a; 1 class Solution {2 public:3 string intToRoman(int num) {4 vector<int> values{1000…

[c++]代理對象模式

代理對象 <code class"hljs cpp has-numbering" style"display: block; padding: 0px; box-sizing: border-box; font-family: Source Code Pro, monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius:…

this static 面向對象三大特點

面向對象三大特點&#xff1a;封裝、繼承、多態 封裝&#xff1a;只對外界提供有用的屬性和行為 this&#xff1a;是一個引用&#xff0c;總是指向當前對象 static 存放位置是方法區中的靜態區 static特點 static修飾的成員變量隨著類的加載就在靜態區中開辟內存 所…

fastQC

Fastqc用途 FastQC aims to provide a simple way to do some quality control checks on raw sequence data coming from high throughput sequencing pipelines. It provides a modular set of analyses which you can use to give a quick impression of whether your data …

C++代理 Surrogate

容器通常只能包含一種類型的對象&#xff0c;所以很難在容器中存儲對象本身。存儲指向對象的指針&#xff0c;雖然允許通過繼承來處理類型不同的問題&#xff08; 多態性 &#xff09;&#xff0c;但是也增加了內存分配的額外負擔。所以我們通過定義名為 代理 的對象來解決該問…

C++ Handle(句柄) part1

本文是我學習C&#xff0b;&#xff0b;沉思錄第6章的筆記 本文主要講述了Handle類的概念&#xff0c;定義方法以及寫時復制技術。 在前文(Surrogate代理類)的講解中我們了解到了代理的實現方法. 代理類有很多好處,但是麻煩的是每次都得進行復制.如果該類是經常使用并且member很…

sscanf的高級用法

sscanf的高級用法&#xff08;總結&#xff09; 2012-04-25 18:50:25分類&#xff1a; C/C sscanf(recvbuf,"%*[^/]/%[^ ]s",buf_rev); sscanf(buf, "GET /%[^ ]", buf_rev);這個是在一個webserver.c里面的例子&#xff0c;通過sscanf&#xff08;&#xf…

選擇排序 冒泡排序 二分查找

選擇排序 int [] arr {2,48,28,32,90,12}; for&#xff08;int i 0&#xff1b; i < arr.length - 1;i&#xff09;{ for(int j i 1; j < arr.length;j){ if(arr[i] < arr[j]){ int c; c arr[i]; arr[i] arr[j]; arr[j] c; } } } 冒泡排序 for(int i 0;i <…