Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5175758
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 嵌入式

2010-08-04 17:03:47

如何控制Windows Mobile 手机键盘操作


最近在做Mobile上的应用的时候,想截取Windows Mobile的按下OK键的消息,并做一些自定义处理。

在网上看了很多文章,但是发现很少有谈到这个问题的。后来还是找到了点资料。所以拿出来和大家分享一下。

首先要在OnInitDialog注册热键,这样才能在WM_HOTKEY消息中得到响应。

Java代码
  1. typedef BOOL(__stdcall *UnregisterFunc1Proc)(UINT,UINT);  
  2.     HINSTANCE hCoreDll;  
  3.     UnregisterFunc1Proc procUndergisterFunc;  
  4.     hCoreDll = LoadLibrary(_T( "coredll.dll "));  
  5.     ASSERT(hCoreDll);  
  6.     procUndergisterFunc = (UnregisterFunc1Proc)GetProcAddress(hCoreDll,_T( "UnregisterFunc1 "));  
  7.     BOOL bRes = RegisterHotKey(m_hWnd, VK_TACTION,NULL,VK_TACTION);   


在Windows Mobile Smartphone平台下,VK_TSOFT1,VK_TSOFT2等都被系统注册为热键,如果在自己的应用在需要响应这些按键事件,需要先从系统中注 销,然后注册后对WM_HOTKEY事件进行响应即可。但是注销系统热键的API函数并没有公开,需要使用一个coredll.dll中一个未公开API 函数.

注册消息映射:
Java代码
  1. ON_MESSAGE(WM_HOTKEY,&CMyllecSMS2Dlg::OnHotKey)   
  2.   
  3. HRESULT CMyllecSMS2Dlg::OnHotKey(WPARAM wParam,LPARAM lParam)  
  4. {  
  5.     int idHotKey = (int)wParam;    
  6.     UINT fuModifiers = (UINT)LOWORD(lParam);    
  7.     UINT uVirtKey = (UINT)HIWORD(lParam);  
  8.     static BOOL bPressed = FALSE;  
  9.     if   (idHotKey == VK_TACTION)  
  10.     {  
  11.         HTREEITEM selectedItem = m_mainTree.GetSelectedItem();  
  12.         SelectedTreeNodeDoubleClick(selectedItem);  
  13.     }  
  14.     else  
  15.     {  
  16.           
  17.     }   
  18.     return TRUE;  
  19. }  


另外在解决该问题时看到一些朋友发帖问如何在自己的应用中响应一些系统热键如VK_LEFT,VK_RIGHT等的KEY_DOWN事件,增加自己的处理过程,该问题有两种解法
1。向上面那样注册成热键,然后根据按键状态模拟出按键按下事件
2。利用GPAI的GXOpenInput,将所有的按键事件纳入掌控中

大家可通过下面的视图查看,键对应的Key值

Java代码
  1. // the phone keypad maps to VK_* as shown below.  
  2. // some keys might not be present, e.g. VK_TFLIP  
  3.     sofkey1     softkey2    VK_TSOFT1, VK_TSOFT2  
  4.             ^               VK_TUP  
  5.         <   +   >           VK_TLEFT, VK_TACTION, VK_TRIGHT  
  6.             v               VK_TDOWN  
  7.     home        back        VK_THOME, VK_TBACK  
  8.     talk        end         VK_TTALK, VK_TEND  
  9.     1       2       3       VK_T0..VK_T9  
  10.     4       5       6       ...  
  11.     7       8       9       ...  
  12.     *       0       #       VK_TSTAR, VK_TPOUND  
  13. // other buttons include  
  14.     VK_TRECORD  
  15.     VK_TPOWER, VK_TVOLUMEUP, VK_TVOLUMEDOWN  
  16.     VK_TFLIP 
阅读(847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~