Web系統如何做到讀取客戶電腦MAC等硬件信息且兼容非IE瀏覽器


我們在實際Web應用中,可能會遇到“需要限定特定的電腦或用戶才能使用系統”的問題。

 

對於一般情況來說,我們用得最多的可能是使用ActiveX控件的方法來實現,但此方案只適用於IE瀏覽器。為了能兼容不同的瀏覽器,如FireFox等,我們就需要考慮到一種比較通用的方法。此方法我們可以參考“在很多網站中,會在網頁的某個地方給一個鏈接來直接啟動QQ來聊天”。這種方法可以實現Web系統來調用客戶端電腦的某個exe文件(前提是在客戶端必須安裝需調用的exe應用程序)。QQ的解決方法是采用在OS中注冊一種自定義的協議,如:tencent://message/?uin=88888888&Site=abc.com&Menu=yes.

 

大家可以在瀏覽器地址欄中輸入以上地址,即可彈出一個QQ的聊天對話框,這樣即實現了Web系統與客戶端本地的exe應用程序的通訊。

 

通過以上的方法,我們可以參考此方案來實現Web系統讀取到客戶端電腦的Mac地址等。

 

為了實現以上,我們大概需要以下幾步:

1,首先,我們需要在數據庫中建立一張表格,如:LoginTempInfo ,其字段有:

   LoginID,MacAddress  兩個字段就可以了。

2,建立一個WindowsForm的應用程序(用於接收Web傳過來登錄ID,然后獲取本地的Mac地址,並Update到后台的LoginTempInfo表中)。主要需注意的地方為:在類Program.cs中的主方法main中傳入一個參數,string[] args。

  具體如下:

  /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            int argsLength = args.Length;
            MessageBox.Show(argsLength.ToString());
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (argsLength == 0)
            {
                Application.Run(new Form1());
            }
            else
            {
                MessageBox.Show(args[0]);
                Application.Run(new Form1(args[0]));
            }
        }

     以上參數就是為了接收Web中的連接地址,在此地址中我們傳入一些參數,來實現與exe的參數的傳遞.

3,我們可以在Web系統的登錄頁Login.aspx中window.onload方法中來增加一個連接地址,如:helloworld://hello_world/Apara=abc001.

在頁面加載完成后,先自動生成一個唯一的LoginID,並將此LoginID插入到表LoginTempInfo中,此時其MacAddress是空的。

然后再自動執行一個連接:helloworld://hello_world/LoginID=****  (其中****表示此次生成的唯一登錄ID).

此時,會自動調用本地的helloworld程序,並將以上:helloworld://hello_world/LoginID=****傳入到exe程序中.

在此,Web程序暫停2秒,使用setTimeout方法來實現,2秒后,再從數據表中取出當前登錄ID的MAC地址(經過第四步來完成)。

 

4,本地exe程序接收到參數:唯一登錄ID后,調用一個方法來獲取當前客戶端電腦的MAC地址,並且將此MAC地址Update到數據表LoginTempInfo中,對應的是當前登錄ID.

5,通過以上5步,就可以實現Web系統獲取客戶端的MAC地址來做限定驗證.

 

特別注意,客戶端在安裝exe程序時,必須同步注冊一下注冊表信息:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\HelloWorld]
@="HelloWorld Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\HelloWorld\DefaultIcon]
@="E:\\HW_TEST\\HelloWorld.exe,1"
[HKEY_CLASSES_ROOT\HelloWorld\shell]
@=""
[HKEY_CLASSES_ROOT\HelloWorld\shell\open]
@=""
[HKEY_CLASSES_ROOT\HelloWorld\shell\open\command]
@="\"E:\\HW_TEST\\HelloWorld.exe\" \"%1\""

 

附件做了個簡單的例子,來實現Web系統與本地exe的通訊。(說明:附件只是一個參考例子)

 

以上,只是我想到的比較通用的Web系統調用客戶端Mac地址的方法。如果大家有更好的辦法,歡迎大家提出討論。謝謝。

 

附件下載地址:

http://files.cnblogs.com/cjbandy/Web%E7%A8%8B%E5%BA%8F%E8%B0%83%E7%94%A8%E6%9C%AC%E5%9C%B0exe%E6%96%87%E4%BB%B6%E4%B9%8B%E6%96%B9%E6%B3%95%28%E5%B9%B6%E4%BC%A0%E5%8F%82%E5%88%B0CS%E7%A8%8B%E5%BA%8F%29.7z

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM