标题:
Windows CE环境下无线网卡的自动安装 03
[打印本页]
作者:
samwalton
时间:
2013-12-30 14:37
标题:
Windows CE环境下无线网卡的自动安装 03
3.3 几个具体问题的解决
下面,再讨论一下本方案中几个具体问题的解决办法。包括对注册表的操作、自动安装功能的实现、程序流程的总体控制以及将程序打包封装入操作系统的作法。
3.3.1 对注册表的操作
Windows CE中有一系列API函数可以对注册表进行操作,完成打开关闭注册表、读取或修改键值等功能。另外,Windows CE注册表中值的类型为Unicode;而配置文件config.txt是在PC机上产生的,类别为ANSI。要按cogfing.txt中读取的值设定注册表值,就要进行数据类型的转换,可以用函数MultiByteToWideChar()实现[4]。关键代码如下:
RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根键TEXT("Comm/xi8251/Parms/TcpIP"),
//打开根键下的子键
0, //预留值,必设为0
0, //不支持此项,必设为0
&hKey //最终打开键的句柄指针
);
RegSetValueEx( hKey, //对键操作的句柄
TEXT("IpAddress"),//键中的数据项名
0, //预留值,必设为0
REG_GZ, //数据项中值的类型
(CONST BYE*)((LPCTSTR)regData),//存有数据项值的缓冲区
dwDataSize //值的字节数
); //对"IpAddress"数据项的值作修改,即改变IP值
3.3.2 自动安装功能的实现
用FindWindows()函数判断对话窗口的出现;用keybd_event()函数模拟键盘输入。关键代码如下:
TCHAR g_szTitle[80]=TEXT("Unidentified PCCard Adapter"); //指定对话框的标题
HWND hWnd=..FindWindows(NULL,g_szTitle); //判断此标题名的窗口是否已出现,不论是否为前台窗口
if (hWnd! =NULL) //若窗口已出现
{..SetForegroundWindows(hWnd); //将此窗口设置前台窗口
keybd_event(0x58,0,0,0); //按下x键
keybd_event(0x58,0,KEYEVENTE_KEYUP,0); //抬起x键
//完成了按下和抬起x键的两个动作,就模拟了键盘输入字符x.
............//用同样的方法输入 'i825.dll'
keybd_event(0x0d,0,0,0);
keybd_event(0x0d,0,KEYEVENTF_KEYUP,0); //最后输入确认键
}
正确输入后,可以看到无线网卡的显示灯开始闪烁,说明网卡已经安装成功,等待进行无线通信。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0