C語言shellexecute函式的用法

2022-02-26 12:06:56 字數 4866 閱讀 4068

1樓:豔陽高照的午後

shellexecute的功能是執行一個外部程式(或者是開啟一個已註冊的檔案、開啟一個目錄、列印一個檔案等等),並對外部程式有一定的控制。有幾個api函式都可以實現這些功能,但是在大多數情況下shellexecute是更多的被使用的,同時它並不是太複雜。

返回值:

執行成功會返回應用程式控制代碼

返回的hinstance可以將它轉換為一個整數(%d),並比較它的值大於還是小於32或比較它的錯誤**

返回值大於32表示執行成功

返回值小於32表示執行錯誤

返回值可能的錯誤有: = 0

error_file_not_found = 2;

error_path_not_found = 3;

error_bad_format = 11;

se_err_share = 26;

se_err_associncomplete = 27;

se_err_ddetimeout = 28;

se_err_ddefail = 29;

se_err_ddebusy = 30;

se_err_noassoc = 31;

示例:下面的示例演示如何啟動一個應用程式或將文件載入到其關聯的應用程式。windows api shellexecute() 函式是文件的不同於 visual basic shell() 函式,可以將 shellexecute() 函式傳遞的名稱,它將啟動關聯的應用程式,然後將檔名傳遞給應用程式。

在 visual basic 中開始一個新專案。預設情況下,將建立 form1。

將以下**新增到 form1 的通用宣告部分:

option explicit

private declare function shellexecute lib "shell32.dll" alias "shellexecutea" (byval hwnd as long, byval lpszop as string, byval lpszfile as string, byval lpszparams as string,byval lpszdir as string, byval fsshowcmd as long) as long

private declare function getdesktopwindow lib "user32" () as long

const sw_shownormal = 1

const se_err_fnf = 2&

const se_err_pnf = 3&

const se_err_accessdenied = 5&

const se_err_oom = 8&

const se_err_dllnotfound = 32&

const se_err_share = 26&

const se_err_associncomplete = 27&

const se_err_ddetimeout = 28&

const se_err_ddefail = 29&

const se_err_ddebusy = 30&

const se_err_noassoc = 31&

const error_bad_format = 11&

function startdoc(docname as string) as long

dim scr_hdc as long

scr_hdc = getdesktopwindow()

startdoc = shellexecute(scr_hdc, "open", docname, "", "c:\", sw_shownormal)

end function

private sub form_click()

dim r as long, msg as string

r = startdoc("c:\windows\arcade.bmp")

if r <= 32 then 'there was an error

select case r

case se_err_fnf

msg = "file not found"

case se_err_pnf

msg = "path not found"

case se_err_accessdenied

msg = "access denied"

case se_err_oom

msg = "out of memory"

case se_err_dllnotfound

msg = "dll not found"

case se_err_share

msg = "a sharing violation occurred"

case se_err_associncomplete

msg = "incomplete or invalid file association"

case se_err_ddetimeout

msg = "dde time out"

case se_err_ddefail

msg = "dde transaction failed"

case se_err_ddebusy

msg = "dde busy"

case se_err_noassoc

msg = "no association for file extension"

case error_bad_format

msg = "invalid exe file or error in exe image"

case else

msg = "unknown error"

end select

msgbox msg

end if

end sub

特殊用法:

如果將filename引數設定為「http:」協議格式,那麼該函式將開啟預設瀏覽器並連結到指定的url地址。若使用者機器中安裝了多個瀏覽器,則該函式將根據windows 9x/nt登錄檔中http協議處理程式(protocols handler)的設定確定啟動哪個瀏覽器。

格式一:http://**域名

www.neu.edu.cn", "", "", sw_shownormal);

格式二:http://**域名/網頁檔名

sw_shownormal);

如果將filename引數設定為「mailto:」協議格式,那麼該函式將啟動預設郵件客戶程式,如microsoft outlook(也包括microsoft outlook express)或netscape messanger。若使用者機器中安裝了多個郵件客戶程式,則該函式將根據windows 9x/nt登錄檔中mailto協議處理程式的設定確定啟動哪個郵件客戶程式。

格式一:mailto

如:shellexecute(handle,"open", "mailto:", "", "", sw_shownormal);開啟新郵件視窗。

格式二:mailto:使用者賬號@郵件伺服器地址

如:shellexecute(handle, "open"," mailto:who@mail.

neu.edu.cn", "", "", sw_shownormal);開啟新郵件視窗,並自動填入收件人地址。

若指定多個收件人地址,則收件人地址之間必須用分號或逗號分隔開(下同)。

格式三:mailto:使用者賬號@郵件伺服器地址

subject=郵件主題&body=郵件正文

如:shellexecute(handle, 『open』, 『 mailto:who@mail.

neu.edu.cn?

開啟新郵件視窗,並自動填入收件人地址、郵件主題和郵件正文。若郵件正文包括多行文字,則必須在每行文字之間加入換行轉義字元%0a。

例子(delphi):

在一個應用程式呼叫c:\project1.exe;

shellexecute(handle, 'open',"c:\project1.exe",'字串內容',"", 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相同

c語言問題,C語言問題C語言問題

沒有縮排,看來比較累 但是輸入一串字元以後要輸入結束標誌eof表示你的輸入結束了 如果你是unix,就用ctrl d,dos就用ctrl z include define maxline 1000 maximum input line length int getline char line,int...

c語言問題,C語言問題C語言問題

把檔案中所有逗號用空格替換。把if fp fopen goods.dat rb null 改成fp fopen goods.dat r null 把 feof fp 換成 0。把 一行刪除。以上3 4也可以在while前新增一行 解決 把printf s,2s,d,d n name,price,in...

什麼是C語言和C語言C語言和C語言的區別是什麼?

1 c語言。c語言誕生得非常早,當時人們普遍還習慣用組合語言編寫軟體,並且沒有什麼統一,通用的作業系統,基本上軟體都是從0開始寫的。c語言的方針便是比彙編方便易用,一起不要損失彙編的表達能力。所以c語言可以看成是 高階的彙編 語言。c語言的源 基本上可以非常容易地對應到彙編 並且可以不需要什麼執行時...