使用Process.Start(new ProcessStartInfo(url))來打開某一網址的時候,往往會被360提示 類似這樣的 信息: “威脅:修改此註冊表項將更改IE連接設置。少數軟體會修改此項,如果隨意修改,可能造成無法上網。如果您不認識此程式,請阻止。” 這是由於 360 會判斷啟動 ...
使用Process.Start(new ProcessStartInfo(url))來打開某一網址的時候,往往會被360提示 類似這樣的 信息:
“威脅:修改此註冊表項將更改IE連接設置。少數軟體會修改此項,如果隨意修改,可能造成無法上網。如果您不認識此程式,請阻止。”
這是由於 360 會判斷啟動瀏覽器的父視窗,如果父視窗是系統或受信程式則通過,反之,若是未知的程式 則 提示威脅。
瞭解了這個,我們就可以想到 用 api函數 ShellExecute,通過指定 父視窗參數為 null(0)來避免360提示。如下:
[DllImport("shell32.dll")] public extern static IntPtr ShellExecute(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd); public enum ShowWindowCommands : int { SW_HIDE = 0, SW_SHOWNORMAL = 1, SW_NORMAL = 1, SW_SHOWMINIMIZED = 2, SW_SHOWMAXIMIZED = 3, SW_MAXIMIZE = 3, SW_SHOWNOACTIVATE = 4, SW_SHOW = 5, SW_MINIMIZE = 6, SW_SHOWMINNOACTIVE = 7, SW_SHOWNA = 8, SW_RESTORE = 9, SW_SHOWDEFAULT = 10, SW_MAX = 10 } ShellExecute(0, @"open",@"http://www.baidu.com", null, null, (int)ShowWindowCommands.SW_NORMAL);
附上 ShellExecute的 一些參考信息:
1.函數功能:
你可以給它任何文件的名字,它都能識別出來並打開它。
2.函數原型:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
3.參數說明:
hwnd:
用於指定父視窗句柄。當函數調用過程出現錯誤時,它將作為Windows消息視窗的父視窗。
lpOperation:
用於指定要進行的操作。
“open”操作表示執行由lpFile參數指定的程式,或打開由lpFile參數指定的文件或文件夾;
“print”操作表示列印由lpFile參數指定的文件;
“explore”操作表示瀏覽由lpFile參數指定的文件夾。
當參數設為NULL時,表示執行預設操作“open”。
lpFile:
用於指定要打開的文件名、要執行的程式文件名或要瀏覽的文件夾名。
lpParameters:
若lpFile參數是一個可執行程式,則此參數指定命令行參數,否則此參數應為NULL.
lpDirectory:
用於指定預設目錄.
nShowCmd:
若lpFile參數是一個可執行程式,則此參數指定程式視窗的初始顯示方式,否則此參數應設置為0。
這個參數常用的常數:
SW_HIDE 隱藏視窗,活動狀態給令一個視窗
SW_MINIMIZE 最小化視窗,活動狀態給令一個視窗
SW_RESTORE 用原來的大小和位置顯示一個視窗,同時令其進入活動狀態
SW_SHOW 用當前的大小和位置顯示一個視窗,同時令其進入活動狀態
SW_SHOWMAXIMIZED 最大化視窗,並將其激活
SW_SHOWMINIMIZED 最小化視窗,並將其激活
SW_SHOWMINNOACTIVE 最小化一個視窗,同時不改變活動視窗
SW_SHOWNA 用當前的大小和位置顯示一個視窗,不改變活動視窗
SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個視窗,同時不改變活動視窗
SW_SHOWNORMAL 與SW_RESTORE相同
若ShellExecute函數調用成功,則返回值為被執行程式的實例句柄。若返回值小於32,則表示出現錯誤。
4.返回值
執行成功會返回應用程式句柄
返回的HINSTANCE可以將它轉換為一個整數(%d),並比較它的值大於還是小於32或比較它的錯誤代碼
返回值大於32表示執行成功
返回值小於32表示執行錯誤
msdn:If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.
返回值可能的錯誤有: = 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; {沒有相關聯的應用程式}
5.使用方法:
例如:
ShellExecute(NULL,"open","iloveu.bmp",NULL,NULL,SW_SHOWNORMAL);
用預設的點陣圖編輯器打開一個叫iloveu.bmp的點陣圖文件,這個預設的點陣圖編輯器可能是 Microsoft Paint, Adobe Photoshop, 或者 Corel PhotoPaint。
這個函數能打開任何文件,甚至是桌面和URL快捷方式( .ink或 .url)。ShellExecute解析系統註冊表HKEY_CLASSES_ROOT中所有的內容,判斷啟動那一個執行程式,並且啟動一個新的實例或使用DDE將文件名連到一打開的實例。然後,ShellExecute 返回打開文件的應用的實例句柄。
ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL);
這個代碼使你能訪問微軟的主頁。當ShellExecute遇到文件名前面的“http:”時,可以判斷出要打開的文件是Web文件,隨之啟動Internet Explorer 或者 Netscape Navigator 或者任何你使用的別的瀏覽器打開文件。
ShellExecute還能識別其它協議,象FTP、GOPHER。甚至識別“mailto”,如果文件名指向“mailto:[email protected]”,它啟動電子郵件程式並打開一個待編輯的新郵件,例如:
ShellExecute(NULL, "open",“mailto:[email protected]”, NULL, NULL, SW_SHOWNORMAL);打開新郵件視窗。
總之,ShellExecute函數就是如此簡單地打開磁碟文件和Internet文件。如果將第二個參數“OPEN”改為“PRINT”或者“EXPLORE”,ShellExecute將能列印文件和打開文件夾。ShellExecute還有一個擴展函數ShellExecuteEx,所帶參數中有一個特殊的結構,功能更強,或者任何你使用的別的瀏覽器打開文件。
------------------------------------------------------------------------------------
原文:https://blog.csdn.net/snakorse/article/details/20035437