有关钱达智先生的键盘HOOK的例子!(50分)

  • 主题发起人 liuyonghua
  • 开始时间
L

liuyonghua

Unregistered / Unconfirmed
GUEST, unregistred user!
该程序启动后,不知道为什么别的文本
窗口不能正常的接受输入!
请各位大虾赐教,例子!
 
截获键盘消息后,还需要调用CallNextHookEx把键盘消息传出来;
否则,其它程序就得不到这个消息了.
在你的Hook函数出口调用一下CallNextHookEx就可以了.
 
dubhe:
钱达智先生的键盘HOOK有CallNextHookEx,结果是相同的!
liuyonghua:
CJ给我他改过的例子,但同样有此毛病!
 
是不是全局hook? 那样得判断接受者是不是需要的窗口,如果不是就什么也别做直接
CallNextHookEx,并返回CallNextHookEx的返回值.
 
a gree with eyes
but I did not try that example carefully.
mail to qian da zhi and ask him )
 
钱达智先生的email那位能告诉我?
 
这是那个钩子函数,确实用到了CallNextHookEx,
可是我的意思是把函数的最后一个"Result:=1"也替换成
"Result:=CallNextHookEx(hNextHookProc, iCode, wParam, lParam)"
如果不替换的话,在别的程序里面就接收不到Ctrl+B的消息.

function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
const
_KeyPressMask = $80000000;

begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
//^^^^^^^^^^^
WinExec('Notepad.exe', sw_Normal);
end;
end;
 
dubhe:
这50分肯定是你的了,不过我还想知道如何判断LEFT OR RIGNT CONTROL 呢?
 
左右键的虚键不同:
VK_LSHIFT,VK_RSHIFT
VK_LCONTROL,VK_RCONTROL
VK_LMENU, VK_RMENU

例如:GetKeyState(vk_LControl)便是获得左Control键的状态
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
615
import
I
I
回复
0
查看
848
import
I
顶部