最近,闲啊,看首页文章都看烦了(不是骂就是被骂,唉~~~),索性来鼓捣一下OpenNETCF这个玩意儿,这篇文章就从WIFI的控制开始说起吧。

首先,你可能会上网搜“.net cf msdn wifi"这个关键词,不管如何吧,肯定会看到MSDN的一篇介绍用OpenNETCF进行WIFI开发的一篇文章,我也看过那篇文章,说的的确不错,但是就是感觉怪怪的。

首先,那篇文章中使用的方法比较“老”,因为IDE总提示我有些类库太旧了,建议用新的替换掉。

其次,我只想获取本机的WIFI适配器而不需要像那篇文章获取了所有适配器。

所以,我亲自动手,和大家一起分享一下使用OpenNETCF来操作设备Wifi的经验吧。

在这篇文章中,你将学会使用OpenNETCF类库进行如下操作:

1、获取Wifi设备信息

2、控制Wifi设备的开启或关闭

3、搜索周围的接入点,并显示他们的信号强度及名称

好吧,下面,我们就来一步一步的开始动手实验:

1、首先,我们建立一个新的移动设备项目:SDF-Wifi,使用.netCF 2.0类库足够,然后平台嘛,我选择的是WM5 PPC。

2、引入OpenNETCF类库(添加引用——》OpenNETCF.Net、OpenNETCF.WindowsCE),至于这个类库大家可以到其官网下载:www.opennetcf.org 下载社区版就行了。再在程序主窗体的头部添加引用:

using OpenNETCF.Net.NetworkInformation;
using System.Runtime.InteropServices;
using OpenNETCF.WindowsCE;

3、进行UI界面的设计,这里不再赘述,我完全仿照MSDN那篇文章所描述的UI进行设计,这些内容将会在文章最后给出下载地址。

4、主要代码编写:

1)全局变量:

全局变量
 #region 全局变量
        private WirelessZeroConfigNetworkInterface m_wzc = null;//全局的WZC变量
        /// <summary>
        /// 这个Timer用于定时更新临近节点
        /// </summary>
        private Timer m_wifiTimer = new Timer();

private const int CONFIG_TAB = 0;//定义了Tab的Index
        private const int WIFI_TAB = 1;
        private AccessPointCollection m_preferredAPs;//首选节点集合
        private AccessPointCollection m_nearbyAPs;//临近节点集合
        private const int POWER_NAME = 0x00000001;//用于操作Wifi设备的电源命令
        #endregion

2)Dll引用

DLL引用
        #region DLL引用
        /// <summary>
        /// 设备电源管理,相信大家查阅MSDN后就不会陌生了
        /// </summary>
        /// <param name="pvDevice">设备在注册表中的键值</param>
        /// <param name="dwDeviceFlags">Power_Name</param>
        /// <param name="DeviceState">电源状态枚举,来自OpenNETCF.WindowsCE命名空间下的DevicePowerState</param>
        /// <returns></returns>
        [DllImport("coredll.dll", SetLastError = true)]
        private static extern int SetDevicePower(string pvDevice,int dwDeviceFlags,DevicePowerState DeviceState);
        /// <summary>
        /// 电源状态通知,用于更新顶部那个状态信息图标,参数同上
        /// </summary>
        /// <param name="device">设备在注册表中的键值</param>
        /// <param name="state">电源状态枚举,来自OpenNETCF.WindowsCE命名空间下的DevicePowerState</param>
        /// <param name="flags">Power_Name</param>
        /// <returns></returns>
        [DllImport("coredll.dll")]
        public static extern int DevicePowerNotify(string device, DevicePowerState state, int flags);
        #endregion

这里给大家说明一下,“设备在注册表中的键值”为:{98C5250D-C29A-4985-AE5F-AFE5367E5006}\+设备名称,其中,键值不会变,至少我看过好多人,使用的键值都没有变,唯一变得是设备名称,这个设备名称是从何而来呢?大家先不急,待你看到代码,自然会明白,很简单的哦!呵呵

3) 其他代码:其他代码将放在下载中,供大家仔细查阅(有点多,放上来就是Code贴了)

5、核心功能代码:

1)获取适配器信息:

Code
        void FindWirelessAdapter()
        {
            cboAdapters.Items.Clear();
            foreach (INetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
            {
                //通过下面的代码将不能在Wifi关闭状态下获取其设备名称,所以注释掉了
                //if (ni is WirelessNetworkInterface)//ni.NetworkInterfaceType==NetworkInterfaceType.Wireless80211,我手机上的无线设备类型居然为:Ethernet?!不解!
                //{
                // will be true for wireless or WZC
                cboAdapters.Items.Add(ni);
                if (ni is WirelessZeroConfigNetworkInterface)//如果符合WZC标准
                {
                    m_wzc = ni as WirelessZeroConfigNetworkInterface;
                }
                //}
            }
        }

如果阅读过MSDN那篇“老文章”的朋友就能明显开出区别了,这里使用了INetworkInterface接口代替了Adapter类,用NetworkInterface.GetAllNetworkInterfaces()代替了AdapterCollection。而这个INetworkInterface是什么呢?你可以参照OpenNETCF的文档:点击查看

而WirelessNetworkInterface这个类以及WirelessZeroConfigNetworkInterface这个类对我们取得无线适配器、接入点的信息比较重要,所以,大家也要看看哦。

在取得了设备上的适配器后,我们就要来查看这些适配器的信息了,具体信息很多,都集中在了WirelessZeroConfigNetworkInterface类中,它的属性多到爆,你慢慢看吧,取出的属性就是我们将要的信息,具体请大家看代码。

2)开启/关闭Wifi功能:

开启Wifi
 try
            {
                //先通知系统,更改Wifi状态图标,在设置Wifi电源状态
                DevicePowerNotify("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\" + ((NetworkInterface)cboAdapters.SelectedItem).Name, DevicePowerState.FullOn, POWER_NAME);
                SetDevicePower("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\" + ((NetworkInterface)cboAdapters.SelectedItem).Name, POWER_NAME, DevicePowerState.LowPower);
                Application.DoEvents();
                FindWirelessAdapter();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

这里看到了吧,是不是很简单,就传入无线设备的键值+设备名,电源状态以及电源命令,其他的由程序自动完成,具体的DevicePowerNotify函数可查阅这里:http://msdn.microsoft.com/en-us/library/ms896927.aspx

SetDevicePower则可以查看这里:http://msdn.microsoft.com/en-us/library/ms889493.aspx

关闭Wifi的代码雷同,只需修改状态参数。

好了,到此为止,这个动手实验就接近尾声了,下面是一些在我的机器上的实验截图:我手机是HTC Touch Viva

打开程序,进入主界面,从下拉菜单中选择搜索到的设备

由于我的Wifi模块暂未开启(用代码进行了InterfaceOperationalStatu的判断),弹出提示!

我们打开Wifi

可以看到正在打开:

最后,重新从下拉列表中选中刚才的无线适配器,获取到适配器现在的状态属性如下:

可以到Wifi选项卡查看更多信息:

我们关闭Wifi吧:挺费电滴(囧~)

至此,整个实验工程结束。你可以在:点击下载,下载到本实验的全部源码,其中已经包含了OpenNETCF引用的类库Dll文件,在项目的Bin\Debug文件夹下。

本实验的环境为:VS2008 TeamSuit,Windows Mobile 6.1,.net CF 2.0框架,在真机HTC T2222上测试通过。

下一次的文章,我将继续扩充这个程序的功能:

1、管理首选节点网络

2、连接到搜索到的临近节点

转载于:https://www.cnblogs.com/longqi293/archive/2009/10/25/1589486.html

『参考』OpenNETCF的动手实验——WIFI相关推荐

  1. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

    前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...

  2. 『原创』+『参考』亲手实验:使用C#在PPC中播放声音

    今天,项目中要求用声音来提示用户程序的某个状态被激活了,发现,.Net CF下没有System.Media这种好东东鸟-,于是乎,股沟.百毒最后再来个ZZK,发现MSDN和小镇的文章都有提及在PPC下 ...

  3. 『原创』+『参考』使用C#在PPC的Today界面上的任务栏加入应用程序图标

    最近在做的一个项目,需要程序像桌面版的"微缩"到任务栏中,类似于QCellCore的功能.于是乎股沟.百毒一番,发现如下两篇文章提及的方法不错,并且通过我亲手实验,验证了两篇文章所 ...

  4. 『原创』+『参考』基于PPC的图像对比程序——使用直方图度量

    前言的前言: 最近小弟闲来无聊,就想到了在PPC上面来做个图像对比的小东东,查找各方资料,终于在今天初步完成了这个程序,现在整理之后和各位共勉.程序中还存在很多不足之处,大家尽管提出自己的意见和建议, ...

  5. 『参考』使用.net CF自带库判断设备的连接状态

    问题来自 MSDN Forums : ActiveSync 连线状态 简述如下 如何抓出目前是否与 ActiveSync 连线状态,比如有连线就等于 True,没连线就等于 False 我试过 Act ...

  6. 『原创』+『参考』使用WMI在C#下获取U盘的永久不变的物理序列号

    近几天想做个只能在优盘里使用的程序,查了很多相关的获取优盘物理序列号的文章,发现基本没有几个现存的,于是就从一英文网站抄了个过来,原文名称:Retrieving Non-Volatile USB Se ...

  7. 两个构件的重合点_初三物理易错点:你被眼睛欺骗了,那些『平面镜成像』中的困惑...

    时光飞逝,一晃初三的伙伴们已经返校复课一个多月了,想必有很多感慨和困惑吧? 还有的地方初三的伙伴们还没有复课,在家乖乖地学习网课,想必也是有诸多的困惑和不解吧? 今天木木老西跟大家解开物理当中的一个困 ...

  8. Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式 本文参考输入输出 - Python 3.7.10 文档.首先声明咱的实验环境. ❯ python --version Pytho ...

  9. ###好好###远离送命题: 问答系统中语义匹配的『杀手锏』

    本文将介绍一套『独创』的语义匹配方法论和一个杀手级模型 本文受众: 自然语言处理/问答系统/智能助手/搜索/推荐 等相关行业从业者 对自然语言处理/智能助手感兴趣的普通读者 1. 引子 『问& ...

最新文章

  1. 016 | 漫谈区块链共识机制
  2. SpringMvc+ajax实现文件跨域上传
  3. Open vSwitch(OVS)源码编译Ubuntu16.04,Linux内核版本4.15
  4. 54. Leetcode 113. 路径总和 II (二叉树-二叉树路径和)
  5. 三年Java开发,java基础常问面试题
  6. ElasticSearch5.4X 搜索引擎查询java工具类
  7. 2000年一元钱牡丹图案现在值钱吗?
  8. 一本名不符实的.NET书籍: Game Engine Toolset Development
  9. NYOJ105 - 九的余数
  10. sql select 输出多行_SQL复杂查询
  11. 微信小程序轮播图滚动带动背景图变换及滚动对应图片下标
  12. Verilog 语法小结
  13. MVVM框架的了解与使用
  14. 7-3 人民币与美元汇率兑换程序 (10分)
  15. 基于R语言的主成分分析
  16. [转]大连金州不相信眼泪
  17. 个人开发作品分享:iTab新标签页
  18. 我的电脑硬盘由SSD+HD组合,在HD上成功安装CentOS6.9
  19. 测试双方距离的软件,有没有可以测量距离的app
  20. Oracle Cursor

热门文章

  1. ubuntu 释放缓存_如何通过删除缓存的程序包文件在Ubuntu Linux上释放大量磁盘空间...
  2. 如何扩大自己的知识面成为IT大神
  3. 电源常识——安规标识
  4. 不急于揭穿男人的三种谎言
  5. html实现多种风格的时间轴(附源码)
  6. STM32 IIC采集MLX90615无接触温度传感器
  7. 机器学习关键步骤(二)
  8. 基于GIS的校园公交车管理系统设计(西安电子科技大学GIS课程大作业)
  9. [笔记]深澜校园网无法打开(弹出)登陆网页解决方案
  10. 09.第五章 Galton-Watson分枝过程