WinCE 6.0 禁用触摸屏的几种方法:
在WinCE 6.0中触摸屏是GWES(Graphic Windowing and Event system)的一部分,在系统启动时,就直接加载到GWES系统中,没有通用的API能够使能或者禁止触摸屏。但是在实际的使用过程中,有些使用者希望触摸屏可以被禁止并在需要的时候恢复其功能,因此,我搜索了很多资料。禁止触摸屏的常用的方法总结如下,由于小弟刚刚接触WinCE,难免有不妥之处,还望各位大侠指正。
1.可以在应用层过滤掉触摸屏上报的消息,或者让应用程序不对触摸屏上报的消息作出响应;
2.屏蔽触摸屏中断,需要在驱动中增加相应的接口供应用层调用;
3.修改注册表,使触摸屏不能工作;
触摸屏的注册表项为[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH],可以修改注册表中触摸屏动态库的名字即DeviceName的键值实现,但需要重启。重启时由于触摸屏动态库的名字不正确,GWES系统不能加载触摸屏驱动,导致触摸屏失效。恢复触摸屏的使用当然要将注册表中触摸屏驱动的名字修改回正确的并重启。这种方法需要重启,显然有些不灵活。
4.动态加载触摸屏驱动(动态库),然后通过GetProcAddress()函数获取TouchPanelDisable()等函数的指针,并执行,C++实现的代码如下;
HINSTANCE hModule = LoadLibrary(L"touch.dll"); if(hModule == NULL) { MessageBoxW(_T("Load DLL fail!"),0,0); return; } typedef void (CALLBACK *TPDis)(void); TPDis TPdisable = (TPDis)GetProcAddress(hModule, L"TouchPanelDisable"); if(TPdisable == NULL) { MessageBoxW(_T("Can not get function address!"),0,0); return; } TPdisable(); FreeLibrary(hModule);
此方法我曾做过测试,各个函数的返回值正常,但最后调用TPdisable()函数之后并没有实现触摸屏的禁用,不知道原因是什么!
5.同样也是在驱动中增加相应的接口,供应用层调用,不过可以通过直接关闭触摸屏的电源来实现,具体实现时可以直接在驱动中调用TSP_PowerOff()函数。不过需要注意的是,在系统睡眠又被重新唤醒时,系统会自动重启打开触摸屏的电源,还需要在驱动中做一点处理,不过很容易实现。