我们在实际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

Web系统如何做到读取客户电脑MAC等硬件信息且兼容非IE浏览器的更多相关文章

  1. Web网站中利用JavaScript中ActiveXObject对象获取硬件信息(显示器数量、分辨率)从而进行单双屏跳转

    前言:最近这两天工作上,要实现一个功能,在好友阿聪的帮助下,算是比较好的解决了这个需求. B/S的Web网站,需要实现点击按钮时,根据客户端连接的显示屏(监视器)数量进行,单双屏跳转显示新页面. 由于 ...

  2. 通过python脚本读取多台虚机硬件信息

    主要通过fabric模块实现 import fabric ''' hosts = [] ,): host = "192.168.75." + str(i) hosts.append ...

  3. Linux 系统下查看硬件信息命令大全

    有许多命令可以用来查看 Linux 系统上的硬件信息.有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息. 这个教程可以带大家快速了解一下查看各种硬件 ...

  4. lshw-查看系统硬件信息

    lshw是系统日常使用会比较常用到的命令,一般是用它来查看新硬件的信息. 跟觉man,lshw会读取的文件有: /usr/local/share/pci.ids /usr/share/pci.ids ...

  5. 苹果电脑Mac OS系统重装图文详解

    苹果电脑Mac OS系统重装图文详解 本文来自于[系统之家] www.xp85.com现在电脑都很强大,可是也很脆弱,常常需要你去维护,甚至经常需要你重装系统,那么Mac OS又如何重装系统呢?刚刚使 ...

  6. Web系统大规模并发——电商秒杀与抢购

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  7. Web系统大规模并发——电商秒杀与抢购 【转】

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  8. 徐汉彬:Web系统大规模并发——电商秒杀与抢购(转)

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...

  9. 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...

随机推荐

  1. 我永远的 dell 15r

    陪伴我三年多的15r  让我疯狂过.努力过.更记录了我很多的成长,与很多个瞬间.看到它是有感情的.还记得第一次失去她.我好像失去了自己. 我是一个程序员.每个程序员都有自己的环境配置.不同的软件.就是 ...

  2. oc随笔六:字典

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  3. IOS 错误集合以及解决办法(持续整理中)

    1 . 如下错误: app:resource fork, Finder information, or similar detritus not al site:forums.developer.ap ...

  4. DTO学习系列之AutoMapper(二)

    本篇目录: Flattening-复杂到简单 Projection-简单到复杂 Configuration Validation-配置验证 Lists and Array-集合和数组 Nested m ...

  5. CC开发问题一

    CC编译成功,启动失败,debug状态下报错如下,未能加载文件或程序集 这个问题查了一些资料,http://blog.csdn.net/shellching/article/details/82947 ...

  6. BZOJ 3277 串 (广义后缀自动机)

    3277: 串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 309 Solved: 118 [Submit][Status][Discuss] De ...

  7. 初识CLR

    眨眼间我已经实习了半年时间并且转正了,身份也正式从一个学生转变为一个职场人,这个博客自从开始实习以来就一直没有更新过= =没错,就是我懒癌晚期,不过不行!一切都要开始走向正轨,此博会继续见证我的成长, ...

  8. ueditor 百度编辑器 自定义图片上传路径和格式化上传文件名

    今天项目中需要自定义图片上传的保存路径,并且不需要按照日期自动创建存储文件夹和文件名,我的ueditor版本是1.3.6.下面记录一下我配置成功的方法,如果有什么不对的地方欢迎指出,共同学习: 1:我 ...

  9. FP—Growth算法

    FP_growth算法是韩家炜老师在2000年提出的关联分析算法,该算法和Apriori算法最大的不同有两点: 第一,不产生候选集,第二,只需要两次遍历数据库,大大提高了效率,用31646条测试记录, ...

  10. Raspberrypi安装使用开发简要说明

    Raspberrypi安装使用开发简要说明 (更新于2013年8月25日 newsuppy) 一,安装 使用win32diskimager将操作系统的image刷在SD卡上,image文件可以在htt ...