norains的专栏

只专注于WINCE开发

用户操作
[即时聊天] [发私信] [加为好友]
norainsID:norains
142908次访问,排名598,好友0人,关注者53人。
代码其实是一种乐趣
norains的文章
原创 189 篇
翻译 0 篇
转载 10 篇
评论 274 篇
norains的公告
联系方式请看置顶文章
最近评论
dfdf:讨厌MFC!我觉得MFC就是太乱了!看似无用的代码不要不行,MD微软啥都给我们做完了,原理性的东西我们却永远没法搞懂了!
ironox:有个地方 我觉得很别扭,不知道怎么办好

比如说 CReg reg(HKEY_CURRENT_USER,TEXT("ControlPanel\Volume"));
ControlPanel\Volume 有可能不存在呀,这个该怎么处理哦?对象虽然创建了,出错了也没提示
szterry:呵呵,果然工作狂技术狂,同感,一样的感觉……不过我才刚毕业一年……搞IT就是玩……
jinlking:这个botton的实现只是在主窗口画了一块区域,对于事件的处理还要放在主窗口的窗口处理函数之中,在对应的消息处理上调用CheckTap来判断是否是此“按钮”,问一下,这种方法与把按钮封装在子窗口中有什么区别,二者使用那个更好?
KUODY:博主真是好人
文章分类
收藏
    相册
    动漫
    文章图片
    程序交流
    xumercury的BLOG
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 WinCE获取设备ID收藏

    新一篇: Qt4 For Dev-Cpp的最简单配置 | 旧一篇: 写给那些因分手而痛苦的兄弟

    //========================================================================
    //TITLE:
    //    WinCE获取设备ID
    //AUTHOR:
    //    norains
    //DATE:
    //    Sunday  4-November-2007
    //Environment:
    //        EVC4.0 + Windows CE 5.0 Standard SDK
    //========================================================================

        在Wince下获取设备ID(Device ID)并不困难,只要简单地调用KernelIoControl即可.不过至于能否获得设备ID,并且获得的ID属于什么类型,则关系到驱动层的实现.而设备ID的实现,在不同的平台有不同,比如在夏普的LH71404的开发板中,设备ID位于platform.c中.不过本文目的不关注如何设置或编写设备ID,而仅仅是通过函数调用获得该设备ID而已.
       
        首先我们来看看设备ID在winCE下的定义:

        typedef struct _DEVICE_ID {
        DWORD   dwSize;
        DWORD   dwPresetIDOffset;
        DWORD   dwPresetIDBytes;
        DWORD   dwPlatformIDOffset;
        DWORD   dwPlatformIDBytes;
    } DEVICE_ID, 
    *PDEVICE_ID;

         结构清晰明了,而我们所要关注的仅仅是这两个字段:dwPlatformIDOffset和dwPlatformIDBytes.
       
        现在假设我们有一个平台,该平台的设备ID为一个字符串:"MyDeviceId",那么我们可以通过下面一个简单的例子获得该设备ID:

        char szBuf[MAX_PATH] = {0};
        DEVICE_ID devID 
    = {0};
        GetDeviceID((BYTE 
    *)szBuf,MAX_PATH,&devID);
        
    char szDeviceID[MAX_PATH] = {0};
        strcpy(szDeviceID,szBuf 
    + devID.dwPlatformIDOffset);

        此时szDeviceID中存储的字符串就是"MyDeviceId".
       
        代码中的GetDeviceID是自己写的一个获取ID函数,该代码如下:
        DWORD GetDeviceID(BYTE *pOutBuf,DWORD dwBufSize,DEVICE_ID *pDeviceID)
            {
                DWORD dwRead 
    = 0;
                
    if(KernelIoControl(IOCTL_HAL_GET_DEVICEID, NULL, 0, pOutBuf, dwBufSize, &dwRead) == FALSE)
                {
                    
    return 0;
                }
            
                pDeviceID 
    = (PDEVICE_ID)pOutBuf;
            
                
    return dwRead;
            }

      pOutBuf是传入的存储缓冲区,dwBufSize是缓冲区大小,pDeviceID是接受设备ID的结构信息,函数返回值是读取的字节数,当为0的时候,很可能是函数读设备ID失败.调用方法很简单,可参考上文的例子.
      
      代码中出现的IOCTL_HAL_GET_DEVICEID是WinCE下定义的宏,专注于获取设备ID,该宏的定义如下:
      #define IOCTL_HAL_GET_DEVICEID      CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)

      
      最后需要说的是,要使该段代码工作正常,尚且需要包含该头文件:Pkfuncs.h

    发表于 @ 2007年11月04日 22:26:00|评论(loading...)|编辑

    新一篇: Qt4 For Dev-Cpp的最简单配置 | 旧一篇: 写给那些因分手而痛苦的兄弟

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © norains