Web系統(tǒng)通過(guò)EXE文件實(shí)現(xiàn)讀取客戶電腦MAC等硬件信息且兼容非IE瀏覽器
對(duì)于一般情況來(lái)說(shuō),我們用得最多的可能是使用ActiveX控件的方法來(lái)實(shí)現(xiàn),但此方案只適用于IE瀏覽器。為了能兼容不同的瀏覽器,如FireFox等,我們就需要考慮到一種比較通用的方法。此方法我們可以參考“在很多網(wǎng)站中,會(huì)在網(wǎng)頁(yè)的某個(gè)地方給一個(gè)鏈接來(lái)直接啟動(dòng)QQ來(lái)聊天”。這種方法可以實(shí)現(xiàn)Web系統(tǒng)來(lái)調(diào)用客戶端電腦的某個(gè)exe文件(前提是在客戶端必須安裝需調(diào)用的exe應(yīng)用程序)。QQ的解決方法是采用在OS中注冊(cè)一種自定義的協(xié)議,如:tencent://message/?uin=88888888&Site=abc.com&Menu=yes.
大家可以在瀏覽器地址欄中輸入以上地址,即可彈出一個(gè)QQ的聊天對(duì)話框,這樣即實(shí)現(xiàn)了Web系統(tǒng)與客戶端本地的exe應(yīng)用程序的通訊。
通過(guò)以上的方法,我們可以參考此方案來(lái)實(shí)現(xiàn)Web系統(tǒng)讀取到客戶端電腦的Mac地址等。
為了實(shí)現(xiàn)以上,我們大概需要以下幾步:
1,首先,我們需要在數(shù)據(jù)庫(kù)中建立一張表格,如:LoginTempInfo ,其字段有:
LoginID,MacAddress 兩個(gè)字段就可以了。
2,建立一個(gè)WindowsForm的應(yīng)用程序(用于接收Web傳過(guò)來(lái)登錄ID,然后獲取本地的Mac地址,并Update到后臺(tái)的LoginTempInfo表中)。主要需注意的地方為:在類Program.cs中的主方法main中傳入一個(gè)參數(shù),string[] args。
具體如下:
/// <summary> /// 應(yīng)用程序的主入口點(diǎn)。 /// </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])); } }
以上參數(shù)就是為了接收Web中的連接地址,在此地址中我們傳入一些參數(shù),來(lái)實(shí)現(xiàn)與exe的參數(shù)的傳遞.
3,我們可以在Web系統(tǒng)的登錄頁(yè)Login.aspx中window.onload方法中來(lái)增加一個(gè)連接地址,如:helloworld://hello_world/Apara=abc001.
在頁(yè)面加載完成后,先自動(dòng)生成一個(gè)唯一的LoginID,并將此LoginID插入到表LoginTempInfo中,此時(shí)其MacAddress是空的。
然后再自動(dòng)執(zhí)行一個(gè)連接:helloworld://hello_world/LoginID=**** (其中****表示此次生成的唯一登錄ID).
此時(shí),會(huì)自動(dòng)調(diào)用本地的helloworld程序,并將以上:helloworld://hello_world/LoginID=****傳入到exe程序中.
在此,Web程序暫停2秒,使用setTimeout方法來(lái)實(shí)現(xiàn),2秒后,再?gòu)臄?shù)據(jù)表中取出當(dāng)前登錄ID的MAC地址(經(jīng)過(guò)第四步來(lái)完成)。
4,本地exe程序接收到參數(shù):唯一登錄ID后,調(diào)用一個(gè)方法來(lái)獲取當(dāng)前客戶端電腦的MAC地址,并且將此MAC地址Update到數(shù)據(jù)表LoginTempInfo中,對(duì)應(yīng)的是當(dāng)前登錄ID.
5,通過(guò)以上5步,就可以實(shí)現(xiàn)Web系統(tǒng)獲取客戶端的MAC地址來(lái)做限定驗(yàn)證.
特別注意,客戶端在安裝exe程序時(shí),必須同步注冊(cè)一下注冊(cè)表信息:
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\""
附件做了個(gè)簡(jiǎn)單的例子,來(lái)實(shí)現(xiàn)Web系統(tǒng)與本地exe的通訊。(說(shuō)明:附件只是一個(gè)參考例子)
以上,只是我想到的比較通用的Web系統(tǒng)調(diào)用客戶端Mac地址的方法。如果大家有更好的辦法,歡迎大家提出討論。謝謝。
附件下載地址:http://www.dbjr.com.cn/softs/200002.html
相關(guān)文章
C# 文件保存到數(shù)據(jù)庫(kù)中或者從數(shù)據(jù)庫(kù)中讀取文件
在編程中我們常常會(huì)遇到“將文件保存到數(shù)據(jù)庫(kù)中”這樣一個(gè)問(wèn)題,雖然這已不是什么高難度的問(wèn)題,但對(duì)于一些剛剛開始編程的朋友來(lái)說(shuō)可能是有一點(diǎn)困難。2009-03-03ASP.NET MVC 導(dǎo)出Word報(bào)表
本文主要介紹了ASP.NET MVC 導(dǎo)出Word報(bào)表的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02ASP.NET 圖片防盜鏈的實(shí)現(xiàn)原理分析
防盜鏈的原理,從圖片請(qǐng)求的URL地址上判斷是否是我們自己網(wǎng)站上的域名,如果不是,恭喜,你的圖片已經(jīng)被盜鏈了!2010-01-01Visual?Studio?2022常見的報(bào)錯(cuò)以及處理方案圖文詳解
許多用戶在使用Visual Studio的過(guò)程中常會(huì)遇到各種問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Visual?Studio?2022常見的報(bào)錯(cuò)以及處理方案的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04關(guān)于.NET Framework中的設(shè)計(jì)模式--應(yīng)用策略模式為L(zhǎng)ist排序
本篇文章,小編將為大家介紹關(guān)于.NET Framework中的設(shè)計(jì)模式--應(yīng)用策略模式為L(zhǎng)ist排序,有需要的朋友可以參考一下2013-04-04.Net Core中自定義認(rèn)證實(shí)現(xiàn)
本文主要介紹了.Net Core中自定義認(rèn)證實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01asp.net Web站點(diǎn)風(fēng)格切換的實(shí)現(xiàn)
Web站點(diǎn)的風(fēng)格切換是很常見、也很受大家歡迎的功能,比如大家熟知的博客園就提供了幾十款風(fēng)格模板供大家選擇。2009-05-05如何實(shí)現(xiàn)ListView高效分頁(yè)代碼
ListView選擇自動(dòng)分頁(yè)時(shí) 其實(shí)就是添加了一個(gè)DataPager分頁(yè)控件兩者間存在著嵌套關(guān)系《Repeater與ListView》中提到這樣的分頁(yè)并不是高效的 因?yàn)閿?shù)據(jù)源還是返回了所有的數(shù)據(jù) 而非當(dāng)前頁(yè)數(shù)據(jù)2013-02-02asp.net用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名 新
最近有個(gè)朋友要做url重寫的東西,我?guī)退伺?回頭看當(dāng)年自己寫的那個(gè)文章,當(dāng)時(shí)以為自己寫的很容易理解.但現(xiàn)在再看卻覺(jué)得寫的不好.而今天百度了一下urlrewriter發(fā)現(xiàn)我這個(gè)文章竟然排第二.為了方便更多朋友,我再寫點(diǎn)東西補(bǔ)充下.2009-11-11