Delphi WinExec ShellExec 用法介紹

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

Delphi WinExec ShellExec 用法介紹

在Windows程序設計中WinAPI也為我們提供了類似的函數,它們就是WinExec()和ShellExecute(),下面就來討論一下這兩個函數的用法。?

1)WinExec() 函數原型:?
UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);?
參數說明:(激活的意思是能接受焦點,即標題欄變成藍色)?
lpCmdLine:以0結尾的字符串,命令行參數。?
uCmdShow:新的應用程序的運行方式。其取值如下:?
SW_HIDE 隱藏?
SW_MAXIMIZE 最大化?
SW_MINIMIZE 最小化,并把Z order順序在此窗口之后(即窗口下一層)的窗口激活?
SW_RESTORE 激活窗口并還原為初始化大小 SW_SHOW 以當前大小和狀態激活窗口?
SW_SHOWDEFAULT 以默認方式運行?
SW_SHOWMAXIMIZED 激活窗口并最大化?
SW_SHOWMINIMIZED 激活窗口并最小化?
SW_SHOWMINNOACTIVE 最小化但不改變當前激活的窗口?
SW_SHOWNA 以當前狀態顯示窗口但不改變當前激活的窗口?
SW_SHOWNOACTIVATE 以初始化大小顯示窗口但不改變當前激活的窗口?
SW_SHOWNORMAL 激活并顯示窗口,如果是最大(小)化,窗口將會還原。第一次運行程序 時應該使用這個值?
比如說,我想要用記事本打開"C:\HDC.TXT",以正常方式運行:?
WinExec("notepad c:\\hdc.txt",SW_SHOWNORMAL);?
如果調用成功,這個函數會返回一個不小于31的值,否則調用失敗,其返回值的意義如下:?
0 系統內存或資源不足?
ERROR_BAD_FORMAT .EXE文件格式無效(比如不是32位應用程序)?
ERROR_FILE_NOT_FOUND 指定的文件設有找到?
ERROR_PATH_NOT_FOUND 指定的路徑沒有找到?
這個函數和system()非常類似,只能運行.EXE文件,這樣在WINDOWS中有它不盡人意的地方,比如不能用此方法通過關聯的方法打開文件,例如WinExec("1.html",SW_SHOWNA);就不能打開此文檔。?
2)ShellExecute()?
函數原型:?
HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );?
參數說明:?
hwnd 窗口的句柄?
lpOperation 進行的操作,如"open","print","explore"分別對應"打開","打印","游覽", 也可以為空(""),此時表示進行默認的操作。?
lpFile 要操作的文件。?
lpParameters 如果lpFile指定的是一個可執行文件則表示參數?
lpDirectory 操作進行的目錄 nShowCmd 程序的運行方式,其取值見上例。?
如果這個函數調用成功,將返回實例的句柄,如果不成功,返回值包含錯誤信息,由于類型比較多,這里就不一一列舉了,詳見WinApi的幫助。?
這樣,上面的例子就可以改變為(假設窗口的句柄為Handle)?
ShellExecute(Handle,"open","notepad","c:\\hdc.txt","",SW_SHOWNORMAL);?
其實不用那么復雜,因為.TXT的關聯程序就是記事本,所以只要這樣就可以了?
ShellExecute(Handle,"","c:\\hdc.txt","","",SW_SHOWNORMAL);?
這個函數和WIN9X中的命令行命令"start"類似,不光可以對文件進行操作,還可以對HTTP、MAILTO等進行操作。這樣我們就可以設計有超級鏈接風格的程序了。 例如在VB中,我們首先聲明此函數(可由VB自帶的API游覽器得到):?
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long?
然后放置兩個Label,設置其屬性為:?
Name lbHomepage lbEMail Caption?http://bcbtop.126.commailto:hugsnow@126.com?
并把字體改為藍色有下劃線,然后分別在兩個Label的Click事件中加入以下代碼:?
ShellExecute(Me.hWnd,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);?
ShellExecute(Me.hWnd,"",lbEMail.Caption,"","",SW_SHOWNORMAL);?
OK!試試看,如何?夠酷的吧!?
從上面可看出,ShellExecute的功能要強得多,并且可以完全替代WinExec(),事實上,WinExec()也是為了和以前版本兼容而保留,所以,我們要盡量使用ShellExecute()。?
介紹一個功能強大的API函數 ShellExecute?
編譯 趙湘寧?
問題的提出:?
我使用MFC編寫一個APP,要求About對話框中顯示LOGO、公司名、地址和公司的URL鏈接。使用戶點擊URL鏈接以后,啟動瀏覽器訪問Web頁面,這種對話框中的熱鏈接使應用程序增色不少。我琢磨的方法是從系統注冊表中通過查找.htm 或 .html文件的關聯程序來獲得缺省瀏覽器的名字,這樣好象有很多工作要做。此外,如果瀏覽器已經打開,總是開始一個新的實例替代當前已有的一個實例。想找一個容易一點的方法,但我查過有關的資料,沒有收獲,請高手指教。?
解決方法:?
如果有這樣的一個API函數該多好:OpenThisHereURLForMeNowPlease(),問題不就解決了!!我告訴你吧,有,但它不是你所想象的那個函數。到目前為止,有關文檔中還沒有提到過這么一個有用的函數,它能打開桌面上的任何文件,也能打開Internet URL。唯一我能找到的參考資料是在Microsoft® Access KnowledgeBase中很曖昧地提到過這個函數。?
這個不可思議的函數就是:ShellExecute,取代了WinExec。你可以給它任何文件的名字,它都能識別出來并打開它。例如:?
ShellExecute(NULL,"open","iloveu.bmp",NULL,NULL,SW_SHOWNORMAL);?
用缺省的位圖編輯器打開一個叫iloveu.bmp的位圖文件,這個缺省的位圖編輯器可能是Microsoft Paint, Adobe Photoshop, 或者 Corel PhotoPaint。?
有關ShellExecute的詳細用法信息自己去參考有關資料吧,重要的是你知道了這個函數能打開任何文件,甚至是桌面和URL快捷方式( .ink或 .url)。ShellExecute解析系統注冊表HKEY_CLASSES_ROOT中所有的內容,判斷啟動那一個執行程序,并且啟動一個新的實例或使用DDE將文件名連到一打開的實例。然后,ShellExecute 返回打開文件的應用的實例句柄。?
更奇妙的是ShellExecute不僅能打開機器上的文件,還能打開Internet的站點地址。例如:?
ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL);?
這個代碼使你能訪問微軟的主頁。當ShellExecute遇到文件名前面的“http:”時,可以判斷出要打開的文件是Web文件,隨之啟動Internet Explorer 或者 Netscape Navigator 或者任何你使用的別的瀏覽器打開文件。ShellExecute還能識別其它協議,象FTP、GOPHER。甚至識別“mailto”,如果文件名指向“mailto:zxn@hq.cninfo.net”,它啟動電子郵件程序并打開一個待編輯的新郵件。總之,ShellExecute函數就是如此簡單地打開磁盤文件和Internet文件。如果將第二個參數“OPEN”改為“PRINT”或者“EXPLORE”,ShellExecute將能打印文件和打開文件夾。ShellExecute還有一個擴展函數ShellExecuteEx,所帶參數中有一個特殊的結構,功能更強,它的用法參見有關文檔。?
現在,你知道了ShellExecute的秘密,用它很容易增加一個鏈接到你的About對話框。不是嗎。?
怎樣加載其他的應用程序??
三個SDK函數 winexec, shellexecute,createprocess可以使用。WinExec最簡單,兩個參數,前一個指定路徑,后一個指定顯示方式.后一個參數值得說一下,比如泥用 SW_SHOWMAXMIZED方式去加載一個無最大化按鈕的程序,就是Neterm,calc等等,就不會出現正常的窗體,但是已經被加到任務列表里了。?
ShellExecute較 WinExex靈活一點,可以指定工作目錄,下面的Example就是直接打開 c:\temp\1.txt,而不用加載與 txt文件關聯的應用程序,很多安裝程序完成后都會打開一個窗口,來顯示Readme or Faq,我猜就是這么作的啦.?
ShellExecute(NULL,NULL,_T("1.txt",NULL,_T("c:\\temp",SW_SHOWMAXMIZED)?
CreateProcess最復雜,一共有十個參數,不過大部分都可以用NULL代替,它可以指定進程的安全屬性,繼承信息,類的優先級等等.來看個很簡單的Example:?
STARTUPINFO stinfo?
//啟動窗口的信息?
PROCESSINFO procinfo //進程的信息?
CreateProcess(NULL,_T("notepad.exe",NULL,NULL.FALSE,?
NORMAL_PRIORITY_?
CLASS,NULL,NULL, &stinfo,&procinfo),


轉載于:https://my.oschina.net/u/582827/blog/648493

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

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

相關文章

各大主流編程語言性能PK,結果出乎意料

出品 | OSC開源社區(ID:oschina2013)“什么編程語言速度最快”,為了回答這個問題,The Benchmarks Game 專門面向主流編程語言設計了性能測試。測試的項目包括(可點擊文末閱讀原文查看詳情)&…

閉包 —JavaScript面向對象高級

# 閉包 # 我的理解:面試時,先說作用域鏈,再說閉包產生的原因,然后是垃圾回收GC,最后說閉包。 a.一個函數內部聲明的變量,就是它的私有變量. b.在javascript中特性中,函數是可以訪…

【MapBox】5種地圖(底圖)樣式自由切換附源碼

文章目錄 一、不同地圖顯示樣式1. 衛星2. 淺色3. 深色4. 街道5. 戶外二、完整源碼一、不同地圖顯示樣式 MapBox提供了5種不同形式的地圖顯示樣式: 1. 衛星 2. 淺色

[轉]vue項目中,main.js,App.vue,index.html如何調用

1、main.js是我們的入口文件,主要作用是初始化vue實例,并引入所需要的插件 2、App.vue是我們的主組件,所有頁面都是在App.vue下進行切換的。其實你也可以理解為所有的路由也是App.vue的子組件。所以我將router標示為App.vue的子組件。 index…

C語言試題138之畫橢圓

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:畫橢圓 ellipse 2 、溫馨提示…

2016年Web前端面試題

2016年Web前端面試題目匯總 以下是收集一些面試中經常會遇到的經典面試題以及自己面試過程中無法解決的問題,通過對知識的整理以及經驗的總結,重新鞏固自身的前端基礎知識,如有錯誤或更好的答案,歡迎指正。:) 閱讀目錄…

光纖熔接過程詳細說明

在我們實際的網絡工作當中會遇到光纖的熔接,由于目前光纖熔接的工藝已經成熟完善,對于一根六芯光纖整個熔接過程需要2名工程師,大約需要花費1個小時的時間就可以完成。我們首先考慮的是為光纖線纜留出足夠的長度來,多了好辦&#…

Playwright之錄制

前言前段時間看了大佬分享的關于Playwright.NET的文章感覺挺有意思,想要閱讀點擊:此處,然后跟隨大佬的腳步,學習了一點自動化玩,其中有一個錄制功能感覺挺好玩,下面就來簡單看看介紹手動操作瀏覽器&#xf…

【MapBox】在地圖上創建多個Marker點,設置鼠標經過提示信息,單擊跳轉到鏈接

本文講述在MapBox地圖上創建多個Point點,然后設置鼠標經過每個點提示信息,再讓每個點鼠標點擊跳轉到指定的不同的鏈接地址。 任務描述: 顯示MapBox地圖添加Marker設置鼠標經過提示設置Marker單擊鏈接效果展示: 點擊Marker跳轉到指定的鏈接地址。 源碼贈送: <!DOCTYPE …

Timequest的波形窗口調出

在使用TIMEQUEST做時序約束的時候,波形是很直觀的一個界面,但是在操作的時候順手向下一拉,波形窗口就不見了, 再report timing的時候就這樣了,只有summary,沒有波形窗口了. 找了半天的的view等等菜單沒找到怎么打開,最后將鼠標放在下圖位置他又出現了 出現上下拉的標簽向上拉就…

[轉]vue-codemirror 代碼編輯器

codemirror 是一個非常強大的代碼編輯器插件&#xff0c;但官方并沒有提供 vue 的支持版本&#xff0c;不過跟 vue 集成的步驟并不復雜&#xff0c;以下是具體實現 更多精彩 更多技術博客&#xff0c;請移步 IT人才終生實訓與職業進階平臺 - 實訓在線相關網址 Vue 官方插件庫推…

C語言試題139之輸入 3 個數 a,b,c,按大小順序輸出(利用指針)

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:輸入 3 個數 a,b,c,按大小順…

【ArcGIS Pro微課1000例】0001:Win7系統ArcGIS Pro2.5安裝權威教程(附軟件安裝包下載)

ArcGIS Pro是ESRI桌面產品線的新秀,集很多新技術于一身,原生支持64位系統,Ribbon界面,支持二三維一體化等。可以與別的版本的ArcGIS軟件共存。 文章目錄 1. 系統環境配置2. 安裝ArcGIS pro3. 打補丁,登錄賬戶4. 安裝中文5. ArcGIS pro 2.5下載地址1. 系統環境配置 ?

Maven發布工程到私服

所謂發布工程就是把工程打包成jar包&#xff0c;然后選擇上傳到私服的某個倉庫里&#xff0c;然后其他人就可以在私服上的倉庫中下載到你發布的工程。 簡單介紹Nexus上自帶的一些倉庫&#xff1a; 如果想要發布工程是需要一個擁有發布權限的用戶的&#xff0c;沒有發布權限的游…

善用兵者,藏于無形,90 分鐘深度講解最佳推廣價值作品

&#x1f4a1;提示本文帶有極大的主觀色彩&#xff0c;及不代表微軟組織的可視化大賽觀點&#xff0c;也不代表作者本人觀點。全部解讀均為這里的獨到觀點&#xff0c;任何解釋錯誤與作者或大賽無關。沒有作品文件下載&#xff0c;全文僅從外觀推斷和賞析整個結構。如果你已經被…

字體類形:font-family, font-style

語法&#xff1a;{font-family:字體1,字體2,字體3,...} 作用&#xff1a;調用客戶端字體 font-family: "Lantinghei SC","Microsoft Yahei",宋體,Arial,Helvetica,sans-serif; 當字體名稱包含兩個以上分開的單詞時&#xff0c;用“”把該字體名稱括起來。…

Java-開源工具類

一、集合 org.springframework.util.CollectionUtils&#xff1b; 二、字符串 com.google.common.base.Strings&#xff1b; org.apache.commons.lang3.StringUtils&#xff1b; 三、時間 java.time.LocalDateTime&#xff1b; 四、json com.alibaba.fastjson&#xff1b; 五、…

C語言試題140之輸入數組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數組

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:輸入數組,最大的與第一個元…

[轉]cmd 設置環境cmd環境變量命令set 設置永久環境變量命令setx

set命令 set命令用于設置當前cmd窗口中的環境變量&#xff0c;只在當前cmd窗口有效&#xff0c;cmd窗口關閉后將會失效。而其不會影響到系統中保存的用戶環境變量&#xff0c; setx命令 setx設置永久用戶環境變量 setx env_name env_value注意:有的路徑中會帶有空格,所以最好用…

【ArcGIS Pro微課1000例】0003:ArcGIS pro 2.5加載OSGB點云模型案例教程

Esri采用的spk i3s標準(Indexed 3D Scene),是Esri推出的開放標準。I3S標準作為開放的標準已經得到了市面上主流的傾斜攝影測量建模軟件的支持,如Bentley的 ContextCapture(國內簡稱為Smart 3D)、Pix4D、Vricon,這些軟件均支持基于I3S標準的數據格式SLPK的導出,生成的SLP…