使用Process.Start(new ProcessStartInfo(url))來打開某一網址的時候,每每會被360提示 相似這樣的 信息:shell
「威脅:修改此註冊表項將更改IE鏈接設置。少數軟件會修改此項,若是隨意修改,可能形成沒法上網。若是您不認識此程序,請阻止。」api
這是因爲 360 會判斷啓動瀏覽器的父窗口,若是父窗口是系統或受信程序則經過,反之,如果未知的程序 則 提示威脅。瀏覽器
瞭解了這個,咱們就能夠想到 用 api函數 ShellExecute,經過指定 父窗口參數爲 null(0)來避免360提示。以下:app
[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.返回值函數
執行成功會返回應用程序句柄url
返回的HINSTANCE能夠將它轉換爲一個整數(%d),並比較它的值大於仍是小於32或比較它的錯誤代碼
返回值大於32表示執行成功
返回值小於32表示執行錯誤spa
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..net
返回值可能的錯誤有: = 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:zxn@hq.cninfo.net」,它啓動電子郵件程序並打開一個待編輯的新郵件,例如:
ShellExecute(NULL, "open",「mailto:zxn@hq.cninfo.net」, NULL, NULL, SW_SHOWNORMAL);打開新郵件窗口。
總之,ShellExecute函數就是如此簡單地打開磁盤文件和Internet文件。若是將第二個參數「OPEN」改成「PRINT」或者「EXPLORE」,ShellExecute將能打印文件和打開文件夾。ShellExecute還有一個擴展函數ShellExecuteEx,所帶參數中有一個特殊的結構,功能更強,或者任何你使用的別的瀏覽器打開文件。
------------------------------------------------------------------------------------ 原文:https://blog.csdn.net/snakorse/article/details/20035437