⑴ c語言shellexecute函數的用法
ShellExecute的功能是運行一個外部程序(或者是打開一個已注冊的文件、打開一個目錄、列印一個文件等等),並對外部程序有一定的控制。有幾個API函數都可以實現這些功能,但是在大多數情況下ShellExecute是更多的被使用的,同時它並不是太復雜。
返回值:
執行成功會返回應用程序句柄
返回的HINSTANCE可以將它轉換為一個整數(%d),並比較它的值大於還是小於32或比較它的錯誤代碼
返回值大於32表示執行成功
返回值小於32表示執行錯誤
返回值可能的錯誤有: = 0 {內存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名錯誤}
ERROR_PATH_NOT_FOUND = 3; {路徑名錯誤}
ERROR_BAD_FORMAT = 11; {EXE 文件無效}
SE_ERR_SHARE = 26; {發生共享錯誤}
SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或無效}
SE_ERR_DDETIMEOUT = 28; {超時}
SE_ERR_DDEFAIL = 29; {DDE 事務失敗}
SE_ERR_DDEBUSY = 30; {正在處理其他 DDE 事務而不能完成該 DDE 事務}
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://網站域名
如:ShellExecute(Handle, "open", "http:// ;
www.neu.e.cn", "", "", SW_SHOWNORMAL);
格式二:http://網站域名/網頁文件名
如:ShellExecute(Handle, "open"," http:// ;
www.neu.e.cn/default.htm","","",
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:[email protected]", "", "", SW_SHOWNORMAL);打開新郵件窗口,並自動填入收件人地址。若指定多個收件人地址,則收件人地址之間必須用分號或逗號分隔開(下同)。
格式三:mailto:用戶賬號@郵件伺服器地址
subject=郵件主題&body=郵件正文
如:ShellExecute(handle, 『open』, 『 mailto:[email protected]?subject=Hello&Body=This is a test』,"", "", SW_SHOWNORMAL);打開新郵件窗口,並自動填入收件人地址、郵件主題和郵件正文。若郵件正文包括多行文本,則必須在每行文本之間加入換行轉義字元%0a。
例子(delphi):
在一個應用程序調用c:\Project1.exe;
ShellExecute(handle, 'open',"c:\Project1.exe",'字串內容',"", SW_SHOWNORMAL);
在Project1.exe里可以調用:
procere 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相同
⑵ 急問:用ShellExecute向程序傳遞一個參數值,在這個調用程序中如何獲取這個參數值
ShellExecute(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);
lpParameters的地方就是傳遞的參數。
接收的應用程序如果是C++開發的話,有一個
int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
其中lpCmdLine就是參數。
⑶ C語言中ShellExecute函數編譯出錯
Visual Stdio 2008 創建的工程默認是UNICODE編碼的,在輸入字元串時可以用_T("open") 來代替原來的 "open", 在UNICODE下ShellExecute函數實際對應ShellExecuteW
⑷ C語言調用外部EXE程序,用的這個ShellExecute,出現內存泄漏怎麼解決
外部程序內存泄露怎麼改?只能怪該程序的開發者太粗心。你可以選擇不使用它,而不是嘗試動態修改它,因為這會比再開發要難得多。
當然你可以對它進行一些限制,比如說完成特定功能後強制terminateprocess
⑸ C語言 調用shellexecute函數 為什麼無法解析
#include <windows.h>有沒有?
⑹ 怎樣讓程序等待ShellExecute執行完成後在繼續運行
ShellExecute()函數 執行成功會返回應用程序句柄 返回的HINSTANCE可以將它轉換
⑺ c語言的shellexecute函數打開文件和system函數打開文件有什麼區別
這個字元串。「C:\a.exe」 在命令行下是可以直接運行的,所以直接填到參數里就行了。不過需要注意的是,字元串作為參數的時候「\」要做一下轉義,要變成「\\」才行。
所以正確的使用方法應該是
system("C:\\a.exe");
注意,system在調用的時候需要加上#include <stdlib.h>的頭文件。
⑻ C語言的ShellExecute函數文件名怎麼引用字元串
傳參的時候直接傳s進去就行啦。s就是首地址嘛
⑼ 幫助調試C程序,ShellExecute的用法
#include <windows.h>
void
main()
{
ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
}
⑽ c語言用SHELLExecute()依次打開多個TXT,像1.txt,2.txt,.....n.txt
拜託不是c語言,是win-API