Windows Mobile 上模拟按键操作
2010-03-13 20:32:00 来源:WEB开发网摘要:本文总结了如何在Windows Mobile上实现模拟按键的操作,并阐述了通过模拟按键我们可以实现的种种有意义的应用。
Windows CE /Windows Mobile的键盘消息处理方式和桌面版本的 Windows大体相同。当一个键被按下的时候,OS会发送一系列的消息给焦点窗体。通常首先是一个WM_KEYDOWN消息,如果按下的键代表的是一个字符或者数字,Windows会接着发送一个WM_CHAR的消息。当键被释放(松开)的时候,Windows会发送一个WM_KEYUP的消息。如果一个键被一直按着到足够长的时间(足以被OS认定为自动重复模式),则会在释放前重复发送WM_KEYDOWN和WM_CHAR的消息。
Tips一些功能键和鼠标键是不代表任何字符和数字的,这时需要在按键时由程序截获WM_KEYDOWN消息来获知按键信息。当然,目前对于Windows Mobile的大部分设备,并没有鼠标键和诸多功能键的实现。此外,当Alt键被按住的时候,如果有其他键被按下,则前面提到的消息分别会是:WM_SYSKEYDOWN, WM_SYSCHAR和WM_SYSKEYUP。
之前的一些随笔中曾用到过在Windows Mobile如何实现模拟按键的方法,比如:
在.NET Compact Framework中获取来电号码和屏蔽来电
Windows Mobile如何编程实现免提功能
现在可以来总结一下在Windows Mobile上面模拟按键是一件多么有趣的事情了。
在前面的两篇文章里面都提到了keybd_event这个函数,在Windows CE SDK中我们可以找到它,从文档中可以看到这个函数能产生WM_KEYUP 或 WM_KEYDOWN的消息。也就是说你可以将按键的信息广播至整个系统。
该函数定义如下:
VOID keybd_event (BYTE bVk, //VK键值
BYTE bScan, //WinCE下通常设为0
DWORD dwFlags, //按键状态标示
DWORD dwExtraInfo//WinCE下通常设为0
);
参数的含义文档上已经做了说明,这里不再赘述。在前面文章用过的例子中可以看到,要模拟一次按键行为,需要调用keybd_event两次(如果是组合按键的话将会是2n次)。第一次是按下键,只需传递一个键值和一个非KEYEVENTF_KEYUP的状态(一般是KEYEVENTF_KEYDOWN)。第二次是传递该键值和KEYEVENTF_KEYUP标志,表示松开按键。这里还有一个常用的状态标志是使用KEYEVENTF_SILENT(0x4)标志,表示模拟击键而不产生常规按键时敲击的“嘟”声音。
Tips 关于Windows Mobile/Windows CE常见的VK键值表可以参考:
更多精彩
赞助商链接