大侠们帮我看看这个钩子函数,为什么不能屏蔽win键,别的键都行。(200分)

  • 主题发起人 主题发起人 book523
  • 开始时间 开始时间
B

book523

Unregistered / Unconfirmed
GUEST, unregistred user!
unit HKProc;
interface
uses
Windows,Messages,dialogs;
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;

implementation
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;
//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;
////检测'B'键,可以拦截,可以屏蔽
if (wParam = Ord('B')) then
begin
Result := 1;
end;
//检测win键,可以拦截,但是不能屏蔽
if (GetKeyState(VK_LWIN)<0) or (GetKeyState(VK_RWIN)<0) then
begin
Result:=1;
sleep(1000);
end;
end;
function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;


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
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;
end.
 
要用地层键盘钩子WH_KEYBOARD_LL
 
WH_KEYBOARD_LL不是只能用在2000和nt上吗?
 
是啊,只能在2000和XP下用
 
那98下怎么办?WH_KEYBOARD_LL的具体值是多少啊?delphi中好像没有定义啊!
 
DELPHI6做了定义
 
这个可以屏蔽win键
procedure TTestForm.BitBtn1Click(Sender: TObject);
var
Temp: Integer;
begin
SystemParametersInfo(SPI_ScreenSaverRunning,1,@Temp,0);
end;

procedure TTestForm.BitBtn2Click(Sender: TObject);
var
Temp: Integer;
begin
SystemParametersInfo(SPI_ScreenSaverRunning,0,@Temp,0);
end;

 
TO MLZHOU
只要求屏蔽WIN键,这个连其他有用的热键也屏蔽了。。。
 
在什么单元啊?
 
2000下好像不起作用啊!
 
帮帮忙啊!
 
我搞定了,呵呵,同时可以把系统的任何键都搞死
我是用DELPHI5做的,
 
to 张无忌:
能不能发一份给我,
xiaowenhuang@sina.com
 
时髦!

贴出来看看吧!
 
gz gz gz
发一个大家瞧瞧吧
 
接受答案了.
 
后退
顶部