阅读:2096回复:7
如何捕获键盘消息?
由于Wince系统里的程序有很多,用键盘关闭的时候有的是ESC,有的是ALT+F4,有的是ALT C,有的是ALT X等,乱七八糟,我想把他们统一一下,比如都用ALT+F4。
所以我想先用程序捕获到键盘的消息,如果是ALT+F4的话,就找到系统当前最上面的程序,然后强制关闭他。 现在的问题是: 1、我如何捕获到键盘的消息? 由于2000下有钩子函数可以使用,这点比较容易实现,可是CE下却不支持钩子,我该如何捕获呢? 想通过键盘的驱动程序,不知道有没有可能实现? 不知哪位有没有更好点的方法? 2、如何找到当前系统中正在运行的最上面的那个程序,然后关闭他? 这点也还没有眉目,不知道可否能行的通? |
|
|
沙发#
发布于:2004-12-15 08:58
(2)通过调用GetForegroundWindow()函数可以获得当前的前台窗口。调用DestroyWindow函数可以销毁指定的窗口。
[编辑 - 12/15/04 by wwei_wang] |
|
|
板凳#
发布于:2004-12-15 12:55
关于WINCE下的HOOK的有限支持,
http://www.cnemb.com/index.php?name=PNphpBB2&file=viewtopic&t=10333 关于"如何找到当前系统中正在运行的最上面的那个程序,然后关闭他?" 好象有GetWindow(...,GW_HWNDFIRST)可以找到目前最顶端的窗口,这个窗口有可能是你的后台监控程序的窗口(如果你有创建隐藏窗口的话),也有可能就是你要关闭的那个应用程序的窗口. 反正从最顶端的窗口往下找到你要关的窗口,然后把它关掉. |
|
|
地板#
发布于:2004-12-15 14:15
对于“如何捕获到键盘的消息?”,我觉得也可以在键盘驱动程序里实现,先捕获Alt+F4,然后通知上层的应用(也可以是一个动态链接库,当然这个需要自己开发,应该很简单的),由这个应用(或动态链接库)负责关闭处于顶层的应用程序。
如果我说的不对,还请各位大侠批评指正,谢谢:))) |
|
|
地下室#
发布于:2004-12-15 15:47
如果可以修改KEYBOARD DRIVER,就可以在DRIVER里得到你要的KEY的时候,SetEvent()通知你的APPLICATION就可以了,用不着写DLL那么麻烦了;
同时还能在DRIVER里把你不想交给系统处理的KEY直接丢掉,不给GWES,也就起到了屏蔽一些KEY的作用了. |
|
|
5楼#
发布于:2004-12-16 08:35
joyfly说得没错。但是DLL也是一种应用,到底在哪里实现完全是个人所好,而且与实际情况有关。如果把这个功能放到其他的动态链接库里面,那么就可以减少一个进程的运行,这对物理内存相对比较紧缺的系统来说肯定是有益的。当然,具体的实现还是与实际的情况有关的。:))))
|
|
|
6楼#
发布于:2004-12-16 16:06
键盘捕获的问题我已经解决了,谢谢大家,我注册了一个系统热键,就可以得到了。
第二个问题就比较麻烦了,我得到窗口的句柄,那个句柄虽然不是我程序的,但可能是另外一个程序的一个自窗口的句柄,这样的话,我给那个句柄发关闭消息,结果是那个句柄的窗口(也就是子窗口)被关闭了,而不是应用程序被关闭了。 我该如何解决呢? |
|
|
7楼#
发布于:2004-12-17 08:31
兄弟你可以试试下面的函数:
HWND GetParent( HWND hWnd ); 当你得到一个窗口的句柄之后,你可以递归调用它,直到找到对应的应用程序的主窗口,然后关闭它;如果当前窗口即为主窗口,直接关闭它就可以了。 [编辑 - 12/17/04 by wwei_wang] |
|
|