改进WINCE6.0基于RAM and ROM文件系统的设备使用便利性
1. 蓝牙接收文件默认路径的修改
在\WINCE600\PUBLIC\SERVERS\OAK\FILES\servers.reg文件中,我们可以看到下面的注册表信息:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Obex\Services\{00000000-0000-0000-0000-000000000000}]
"BaseDir"=这是设定保存蓝牙接收文件时候的默认路径,这个路径我们可以根据实际的需要来更改,比如,我们的系统就是在platform.reg中增加下面的内容:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Obex\Services\{00000000-0000-0000-0000-000000000000}]
"BaseDir"=这样接收到的文件就不会因为重启而丢失了。
2. 保存在桌面和启动文件夹的文件重启丢失问题的处理
为避免保存在桌面(Desktop)和启动文件夹(StartUp)的文件重启后丢失,我们在platform.reg中增加下面的内容:
[HKEY_LOCAL_MACHINE\System\Explorer\Shell Folders]
IF LOCALE==0804
"Desktop"="\\SysDisk\\桌面"
ELSE
"Desktop"="\\SysDisk\\Desktop"
ENDIF
"StartUp"=\\SysDisk\\StartUp
这样,可以把桌面映射到flash的SysDsik这个分区中,重启后桌面上和启动文件夹里的文件就不会丢失了,但因为桌面和启动文件夹重新映射到SysDisk目录下,所以windows目录下的桌面和启动文件夹就无效了,而变成SysDisk目录下的桌面和启动文件夹是有效的。
3. 汉王输入的安装
默认情况下,需要把HANWANG文件夹复制到手持机的Windows目录下,然后运行注册表信息就可以安装并使用汉王输入法了,但如果把HANWANG文件夹保存在Windows目录下,重启之后必然会丢失,如何解决这个问题呢?我们先来看汉王输入法的《写入注册表》这个注册表文件的内容:
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\DefaultIcon]
@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\InprocServer32]
@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\IsSIPInputMethod]
@="1"
[HKEY_CURRENT_USER\Software\Hanvon\HWPEN\ZZH\Register]
"KEY"="TQTQK7458A3PZH6"
"USER"=""
"ID-2"=""
"ID-1"=""
"PSN"=""
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"HWDriverName"="\\Windows\\touch.dll"
"DriverName"="\\Windows\\HanWang\\HWTouch3.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Hanvon\HWPEN\ZZH\About]
"Version"="09.09.01"
"Path"="\\Windows\\HanWang\\HWZZH"
"PID"=dword:00000000
"Owner"="HWTAC"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}]
@="汉王输入法"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\DefaultIcon]
@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\InprocServer32]
@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll"
[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\IsSIPInputMethod]
@="1"
比如我们可以把HANWANG文件夹复制到手持机的SysDisk这个flash分区目录下,除了"HWDriverName"="\\Windows\\touch.dll"
中的Windows之外,把上面《写入注册表》注册表文件中的其他Windows改为替换为SysDisk之后,然后运行修改之后的《写入注册表》就可以安装了,安装之后不需要重启就可以使用,重启之后也可以正常使用了。
4. LoadLibrary和CreateProcess函数的使用
对于应用开发人员来说,需要用到的dll、.exe或是其他文件一般情况下是放在windows目录下的,但因为我们选择的RAM and ROM文件系统,重启之后保存在windows目录下为文件就会丢失,如何解决这个问题呢?比如C5000W,我们可以把dll或是.exe拷贝到windows目录,对于动态调用来说,可用LoadLibrary函数来把gprsdll.dll来映射到当前使用进程的地址空间中,接着就可以调用GetProcAddress函数来获取gprsdll.dll提供的API(函数)地址,然后就可以通过获取的函数地址来调用API函数了,如:
HINSTANCE hGprsinst = LoadLibrary(L”gprsdll.dll”);
系统首先会去启动exe的文件路径下搜索gprsdll.dll,如果找不到;就去windows目录下搜索,如果还是找不到;就到OEM(这里OEM是指我们成为)指定的查找路径下搜查,如果在这里依旧找不到就返回失败了。
那对于旋转RAM and ROM文件系统的设备来说,该怎么使用LoadLibrary函数呢?有下面的三种方式:
⑴使用绝对路径
我们可以把gprsdll.dll拷贝到Flash Disk这个flash分区对应的目录下,不管我们的应用程序保存在哪个目录下,只要具体制定的目录下有需要的gprsdll.dll,都可以正常使用LoadLibrary函数来把gprsdll.dll映射到当前使用进程的地址空间中,如下所示:
HINSTANCE hGprsinst = LoadLibrary(L” \\Flash Disk\\gprsdll.dll”);
⑵把gprsdll.dll放在和exe文件一个目录下
比如gprsdll.dll和test.exe都在Flash Disk目录下,就可以和之前的用法一样,不需要制定具体路径:
HINSTANCE hGprsinst = LoadLibrary(L”gprsdll.dll”);
⑶ OEM在HKEY_LOCAL_MACHINE\Loader注册表项指定搜索目录
在platform.reg中增加下面的注册表内容:
[HKEY_LOCAL_MACHINE\Loader]
"SystemPath"=multi_sz:"SysDisk\\","Flash Disk\\","Storage Card\\"
这表示我们指定在调用LoadLibrary或是CreateProcess函数时,系统最后依次去SysDisk、Flash Disk和Storage Card目录下搜索gprsdll.dll,当然了,假如gprsdll.dll就在SysDisk目录下面,系统在搜索到SysDisk的时候就停止搜索了。
上面是OEM指定的路径,用户也可以修改,比如我要把gprsdll.dll保存在Flash Disk目录的dll文件夹下面,用户可以用windows目录下的RegEdit工具来修改,一定要记住在增加的dll文件夹后面加上\这个符号,修改之前如下图:
图1
增加dll,如下图所示:
图2
修改之后重启才能生效,这样重启之后我们可以把把gprsdll.dll保存在Flash Disk\dll文件夹下面,然后用LoadLibrary(L”gprsdll.dll”)来使用了。
上面对LoadLibrary函数路径的使用,也适用于CreateProcess函数,根据上面的分析,最有效率的是第(1)和第(2)种方式,也推荐使用这两种方式。由此可见客户可以把需要的dll和exe保存flash或是TF卡中,在编程的时候指定绝对路径就可以了,当然也可以不指定,但是一定要把dll和exe文件保存上面第(3)点提到的注册表[HKEY_LOCAL_MACHINE\Loader]中SystemPath指定的路径下,不过因为这种方式虽然对于编程来说方便一些,但是效率相对第(1)和第(2)种方式会低一些,故不推荐。
5. 程序部署的路径
在默认的情况下VS2005和VS2008在部署程序的时候,默认部署到设备的Program Files目录下的,但因为我们采用RAM and ROM文件系统,部署在Program Files目录下的文件重启后会丢失,我们可以通过修改应用程序工程属性的部署路径来解决这个问题,工程文件属性Debugging的修改如下图所示:
图3
工程文件属性Deployment的修改如下图所示:
图4
做上面的修改之后,VS2005和VS2008的程序就可以部署到设备的Flash Disk目录,这样重启就不会丢失了,当然也可以根据客户的需要部署到其他目录下。