我正在Delphi 2007和Windows 10中编写全局键盘挂钩。我发现了Delphi LowLevelKeyboardProc回调的不同签名。像这样的人和Windows文档(https://docs.microsoft.com/es-es/previous-versions/windows/desktop/legacy/ms644985(v=vs.85))LowLevelKeyboardProc() never is executed提示lparam是指向TKBDLLHOOKSTRUCT记录的指针。但是其他的(http://www.delphifaq.com/faq/delphi_windows_API/f512.shtml和https://www.swissdelphicenter.ch/en/showcode.php?id=1722)则显示
function KeyHookFunc(Code, VirtualKey, KeyStroke: Integer): LRESULT; stdcall;
完全忽略TKBDLLHOOKSTRUCT记录指针。哪一个是正确的?我猜第一个是正确的,但我需要确定。我一直在使用这种签名,但是当我在同一单元(和DLL)中调用另一个Function并传递lParam时,在访问它时会导致访问冲突。 DLL中的所有功能和过程都使用stdcall
所有回调声明都是正确的,尽管后两个链接没有给出LowLevelKeyboardProc
的示例,而是KeyboardProc
的示例。 IOW,它们不是低级键盘挂钩。
请注意,由于使用整数而不是WPARAM,LPARAM和LRESULT,因此后两者不能在64位上工作。