C# Process.Start()函數打開url被360攔截問題

来源:https://www.cnblogs.com/Shaina/archive/2019/06/21/11064569.html
-Advertisement-
Play Games

使用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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.遍歷key值 同理,可把下列代碼的d改為d.keys() notice:python2除了上述兩種方法外,還可以寫為d.iterkeys() 2.遍歷value值 同理,可把下列代碼的d改為d.values() notice:python2除了上述兩種方法外,還可以寫為d.itervalues( ...
  • 容器可設置佈局管理器,管理容器中組件的佈局: container.setLayout(new XxxLayout()); Java有6種佈局管理器,AWT提供了5種: FlowLayout BorderLayout GridLayout GridBagLayout CradLayout Swing還 ...
  • Github https://github.com/gongluck/SDL2 study/tree/master/Csdl2 Csdl2.h Csdl2.cpp 測試 C++ include "Csdl2.h" include include include define TESTCHECKRET ...
  • 讓我們考慮一個簡單的編程挑戰:對大數組中的所有元素求和。現在可以通過使用並行性來輕鬆優化這一點,特別是對於具有數千或數百萬個元素的巨大陣列,還有理由認為,並行處理時間應該與常規時間除以CPU核心數一樣多。事實證明,這一壯舉並不容易實現。我將向您展示幾種並行執行此操作的方法,它們如何改善或降低性能以及 ...
  • 在前面兩篇隨筆《ABP開發框架前後端開發系列---(7)系統審計日誌和登錄日誌的管理》和《ABP開發框架前後端開發系列---(8)ABP框架之Winform界面的開發過程》開始介紹了許可權管理的內容,其中只是列出了內部的許可權系統的審計和登陸信息,以及對Winform界面的整合,本篇隨筆繼續介紹ABP開... ...
  • 軟體開發中最常用的模式之一是緩存,這是一個簡單但非常有效的概念,想法是重用操作結果,執行繁重的操作時,我們會將結果保存在緩存容器中,下次我們需要該結果時,我們將從緩存容器中取出它,而不是再次執行繁重的操作。 例如,要獲得某人的頭像,您可能需要前往資料庫。我們不會每次都執行那次查詢,而是將結果保存在緩 ...
  • 在上一篇文章中學習了ABP的倉儲(Repository)功能,Repository對資料庫進行增刪改查操作。在這一篇文章中我們主要瞭解應用服務層。 應用服務用於將領域(業務)邏輯暴露給展現層。展現層通過傳入DTO(數據傳輸對象)參數來調用應用服務,而應用服務通過領域對象來執行相應的業務邏輯並且將DT... ...
  • 微軟從C#1.0的委托,到C#2.0的匿名方法,再到C#3.0的Lambda表達式,一步步升級,帶給我們的是代碼上的優美,簡潔,可讀性強。Lambda 表達式廣泛用於編寫LINQ查詢表達式等方面。本文全面的介紹了Lambda 表達式的概念、由來及使用方法。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...