收录日期:2020/10/31 20:52:58 时间:2016/07/04 16:42:23 标签:Windows客户端开发
jiangyongtao 于 2009-11-29 14:46:32 编辑 在Windows Mobile上有办法用代码开启Wi-Fi吗,我没找到类似的api,有高手知道吗?
查找无线管理器里的函数
连接管理器相关函数
我也发过类似求助帖,  也试过很多办法,尚未解决阿!
2楼的,LZ问的是开启和关闭WIFI,不是建立连接,连接管理器能完成功能么?
用无线管理器ChangeRadioState函数可以指定打开或关闭某一设备,包括WIFI.
首先使用函数HRESULT GetWirelessDevices()获得一个设备链表,在设备链表中根据设备类型,找到wifi设备,然后调用ChangeRadioState()打开或者关闭指定的设备。
有关上述函数的详细使用,可以查windows mobile 6 documentation
需要设备支持这样的查询接口,楼上的思路不错。
up
GetWirelessDevices(),ChangeRadioState()都是MS公布给OEM的标准接口,WM6都是支持的。 
引用 6 楼 JavaCsharpCpp 的回复:
需要设备支持这样的查询接口,楼上的思路不错。
openNETCF有,且有例子,你找找去。
哪位能提供wrlspwr.h吗?
帮up
以下代码我测试过,可行

开wifi

[DllImport("coredll.dll", SetLastError = true)]
        public static extern int SetDevicePower(string pvDevice, int dwDeviceFlags, DevicePowerState DeviceState);


        public enum DevicePowerState : int
        {
            Unspecified = -1,
            D0 = 0,
            D1 = 1,
            D2 = 2,
            D3 = 3,
            D4 = 4,
        } 

public static void Wifion()
        {
            string[] sNames = null;
            RegistryKey keyWlan = null;
            try
            {
                keyWlan = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Power\State");
                sNames = keyWlan.GetValueNames();
                //MessageBox.Show(sNames.Count().ToString());
            }
            catch { }
            finally
            {
                if (keyWlan != null) keyWlan.Close();
            }
            foreach (string wl in sNames)
            {

                if (wl.StartsWith("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\"))
                {
                    //POWER_NAME = 0x00000001
                    SetDevicePower(wl, 0x00000001, DevicePowerState.D0);
                    break;
                }
            }
        }

关wifi
 public static void Wifioff()
        {
            string[] sNames = null;
            RegistryKey keyWlan = null;
            try
            {
                keyWlan = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Power\State");
                sNames = keyWlan.GetValueNames();
                //MessageBox.Show(sNames.Count().ToString());
            }
            catch { }
            finally
            {
                if (keyWlan != null) keyWlan.Close();
            }
            foreach (string wl in sNames)
            {

                if (wl.StartsWith("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\"))
                {
                    //POWER_NAME = 0x00000001
                    SetDevicePower(wl, 0x00000001, DevicePowerState.D4);
                    break;
                }
            }

        }
to:forestwind
RegistryKey 从那里来的?
有的只有本机代码有接口。
用无线管理器ChangeRadioState函数可以指定打开或关闭某一设备,包括WIFI. 
首先使用函数HRESULT GetWirelessDevices()获得一个设备链表,在设备链表中根据设备类型,找到wifi设备,然后调用ChangeRadioState()打开或者关闭指定的设备。 
有关上述函数的详细使用,可以查windows mobile 6 documentation 
 
 
C#的我写过, 可以实现
read register or GetWirelessDevices function。
在机器上装一个虚拟网卡就可以使用了
唉,这个老大难问题了,有没有完美的解决方案呢~~~
引用 15 楼 gengzhen_2005 的回复:
用无线管理器ChangeRadioState函数可以指定打开或关闭某一设备,包括WIFI.
首先使用函数HRESULT GetWirelessDevices()获得一个设备链表,在设备链表中根据设备类型,找到wifi设备,然后调用ChangeRadioState()打开或者关闭指定的设备。
有关上述函数的详细使用,可以查windows mobile 6 documentation


windows mobile 6 documentation 
中也没有这两个函数啊。msdn里面也没有找到。。强烈建议给出具体位置。
使用OpenCFNet
学习了谢谢!

c语言下数据类型的奇怪问题 c#代码如何转换成vb.net代码? 求助!!!路由器使用方法!!!!! 那位高手能帮下忙,解释下博弈论上的一点东西 MFC开辟线程用于监听,已连接就出错 如何使用VB打印与输入字符串同名的excel表格 为什么VC中局部变量的对齐不按照__alignof的值 开心 本人90后高中毕业如何找到一份好工作 return 有那些用法呢? 关于node.io爬虫的问题 娘娘的!一个月整整打了三次胎! [color=#FF0000]做移动短信开发,日数据处理量百万级别需要注意什么?[/color] 按钮的按下的效果是咋实现的呢 MySQL创建数据库出错 小工具,后台上传excel,word文件 求教一个算法 如何直接调用 TTF 字库文件 谁给个C语言的编程工具链接或直接发给我邮箱 这段代码会让你失身! 折腾了半个月了 跪求高手解决一下 Linux IE6 无法启动 delphi 怎么将webbrowser的cookie给idhttp用!! 谁DELPHI5开发人员指南 看完了 能卖我本不 急!请教一下,怎么用C++读取Excel文件中的数据???? 最近在做https双向认证的时候发现异常请帮忙看看 急急急,myeclipse中怎样导入tomcat啊? 想搞点积分 如何实现百度导航的拖动效果 字符与ASCII输出的问题