# 不太容易

Posted by cww on August 10, 1999 at 09:11:03:

In Reply to: How to distinguish the , and on both side of the keyboard? posted by Lisa Lin on August 10, 1999 at 07:49:58:

要拦截wm_keydown/wm_keyup的讯息，
其lParam 第16-23 个bits便是scan code
但是要如何拦截呢？
1.使用subclass 但是这只能使某个Window(如Form)拦截
该讯息，如果keyboard focus在Form上的textbox等
sub control便栏不到，除非一并拦截该sub control的
window procedure
2.使用keyboard hook，这可以拦截该Process所有
keyboard的动作，相同的其Hook Procedure传入的
lParam便有Scan Code(同上所述在16-23 bits)，但
不同的Process便拦不到，除非使用remote hook，但是
这不是单单VB做得到，需用c/delphi等做出一般用的
.Dll再给VB呼叫
3.使用JournalRecordHook，其Hook Procedure传入的
message如果是keyboard message则另外的paramH参数
便是scan code，这可以hook所有的Process，但只有一个
Process可用JournalRecordHook，而且系统资源很吃重

Follow Ups: