我这里有代码,有不明白之处,请高手看看:
有现成的,你不用费力了,呵呵。
library HKTest;uses
HKProc in 'HKProc.pas';exports
EnableHotKeyHook,
DisableHotKeyHook;begin
hNextHookProc := 0;//这段初始值放在这里起到什么作用,它得执行顺序(和函数比)
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
unit HKProc;interfaceuses
Windows, Messages;var
hNextHookProc: HHook;
procSaveExit: Pointer;function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
function EnableHotKeyHook: BOOL; export;
function DisableHotKeyHook: BOOL; export;
procedure HotKeyHookExit; far;implementationfunction 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;
// 侦测 Ctrl + B 组合键
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;function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,
HInstance,
0);
Result := hNextHookProc <> 0;
end;function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;procedure HotKeyHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;end.
3. 启动 Delphi 2.04. 开启 HKTest.DPR, 然後 Project | Build All 以产生 HKTest.DLL5. File | New Application 开启一个新的专案6. 将此专案 unit1 与 project1 存档, 请注意: 请存到与 HKTest.DLL 
相同的目录中.7. 在 Form1 上安置二个 TButton, 并撰写 OnClick 程式, 同时, 
在 implementation 节中宣告 EnableHotKeyHook() 与
DisableHotKeyHook(), 修改後的程式应类似:
...
...
implementation{$R *.DFM}function EnableHotKeyHook: BOOL; external 'HKTEST.DLL';
function DisableHotKeyHook: BOOL; external 'HKTEST.DLL';procedure TForm1.Button1Click(Sender: TObject);
begin
if EnableHotKeyHook then
ShowMessage('HotKey Testing...');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if DisableHotKeyHook then
ShowMessage('HotKey Testing..., DONE!!');
end;end.问题1:在DLL中设置得初始值得作用,它得执行是在什么时候?
问题2:如果把函数编在DLL中,改动方法是什么?我尝试过,总是不成功
问题3:如果我要屏蔽ALT+F4,怎么找到ALT得代码?

解决方案 »

  1.   

    1.在加载dll时执行.
    2.改动什么啊?不知道你问的什么意思?
    3.const WH_KEYBoard_LL //系统键盘钩子
    hNextHookProc := SetWindowsHookEx(WH_KEYBOARD_LL,
    KeyboardHookHandler,
    HInstance,
    0);
      

  2.   

    在代码当中函数的实现在单元文件里面,我想把它做到DLL里面去不想被别人看到原代码,怎么实现,就这个例子给出实现步骤!谢谢,高分送上!第三个问题你好像没有说明白,而且我感觉是画蛇添足?不好意思,一人之见
      

  3.   

    //问题3:如果我要屏蔽ALT+F4,怎么找到ALT得代码?
    //ALT ->VK_MENU
    (GetKeyState(vk_Menu) < 0) and (wParam = 'VK_F4') then