Q&A

  • 키보드 후킹 도와주세요.
Black}{ole 님의 소스를 보고 조금수정하여
키보드 후킹을 하고 있습니다.
지금 만들고 있는 것은 웹브라우져 입니다.
F5의 refresh는 막았으나 웹페이지의 백스페이스 를 막는 과정에서
텍스트 상자의 글을 지우는 기능(유지) 와 페이지 history back(무시)을 구현하기가 어려워 가르침을 받고자 합니다.
더불어 Alt+방향키(좌,우) 도 막고 싶습니다.

현재 키보드 후킹관련부분은 아래와 같습니다.

function KeyBoardProc(nCode: integer; wParam, lParam: longint): longint; stdcall;
begin
  if DisableKBButton and ((wParam = 116) or (wParam = 18)) then
  begin
    Result := HC_SKIP;
  end
  else
    Result := CallNextHookEx(HookKBID, nCode, wParam, lParam);
end;

//==================================================================
Black}{ole 님의 오른쪽마우스 얼리기 입니다.
//==================================================================
var
Form1 : TForm;
HookID : THandle;
DisableRButton : boolean;

implementation

function MouseProc(nCode: integer; wParam,
lParam: longint): longint; stdcall;

function GetClassNameEnh(Handle: Hwnd): string;
var
ClassName: PChar;
Buffer: integer;
begin
Buffer := 40;
getmem(ClassName, Buffer);
windows.GetClassName(Handle, ClassName, Buffer);
Result := ClassName;
Freemem(ClassName);
end;

var
P: TPoint;
begin
if (nCode < 0) then
Result := CallNextHookEx(HookID, nCode, wParam, lParam)
else if DisableRButton and ((wParam = WM_RBUTTONDOWN) or (wParam =
WM_RBUTTONUP)) then
begin
GetCursorPos(P);
if Pos('Internet Explorer_', GetClassNameEnh(WindowFromPoint(P))) <> 0 then
Result := HC_SKIP
else
Result := CallNextHookEx(HookID, nCode, wParam, lParam);
end
else
Result := CallNextHookEx(HookID, nCode, wParam, lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DisableRButton := True;
HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId());
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookID <> 0 then
UnHookWindowsHookEx(HookID);
end;
//==================================================================
0  COMMENTS