2010-07-17 63 views
5

如何检测ANSI C和/或Win32 SDK中的一个键或笔划组合键?如何检测C中的一个键或笔画组合?

例如:如何检测按CTRL + ALT + DEL?

请给我提供一些源代码或任何网页链接。

请注意,我正在使用轮询机制,而不是事件。

我需要在win32控制台模式下执行此操作。

+1

您可能无法检测到用户空间应用程序中的CTRL + ALT + DEL。它由内核模式驱动程序检测到并采取行动。您将不得不编写内核模式驱动程序来截取该组合。用Eli的答案中给出的方法,大多数其他键组合应该可以在用户空间中检测到。 – 2010-07-17 11:42:50

+0

@Amardeep:我不确定Autohotkey不能拦截CTRL + ALT + DEL。如果可以的话,那么肯定比编写内核模式驱动更容易 – 2010-07-17 11:47:30

+1

@Eli - 你确定它没有安装或更改kmd吗?如果ctrl-alt-del可能被没有管理员权限的用户空间应用拦截,Windows登录安全性将受到影响。我认为有可能在kmd已经采取行动之前检测到组合键,但可能不会。 – 2010-07-17 12:22:37

回答

1

对于ANSI C,这是不可能的,因为ANSI C没有定义任何以这种方式访问​​键盘的方法。其中从用户处获得输入的最低级别函数是getc,它在输入到stdin并按下ENTER后返回一个字符。

至于Win32 API,的确可以做到这一点。在消息处理功能(WndProc)中,您应该注意WM_CHAR消息。修饰符将帮助您查看CTRL和SHIFT是否被按下。


P.S.只是一个想法,也许你正在寻找的是一个工具,如Autohotkey

+0

我需要使用main()而不是WinMain()。你可以给我提供任何解决方案吗? – anonymous 2010-07-17 16:25:52