HOOK與PostMessage、SendMessage模擬問題 |
尚未結案
|
kamiche
一般會員 發表:5 回覆:5 積分:2 註冊:2003-04-06 發送簡訊給我 |
這幾天在論壇上看到HOOK功能,小弟自己研究一會後發現有些地方搞不太清楚,利用SetwindowsHookEx建立HOOK後,使用PostMessage、SendMessage..等等模擬滑鼠按鍵及鍵盤動作均不會被HOOK攔截,請問我該怎麼用程式模擬按鍵被HOOK攔截到 //=======================================================
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1 : TForm1;
hHook : Integer ;
TemphHook : Integer ;
IsHotkey : Boolean ;
Canplay : Integer ;
EventArr : EVENTMSG ;
bDelay : Bool;
DelayTime : LongInt ;
TempMsg : TEventMsg;
implementation {$R *.dfm} function HookProc(iCode : Integer; wParam : wParam ;lParam : lParam):LRESULT;stdcall;
var
msg : TEventMsg;
begin
Result:=0;
if iCode < 0 then
Result := CallNextHookEx(hHook,iCode,wParam,lParam)
else if icode = HC_ACTION then
begin
msg:= pEventMSG(lParam)^;
Case msg.message of
WM_LBUTTONDOWN : begin
form1.Memo1.Lines.add(inttostr(msg.hwnd)+':'+
inttostr(msg.paramL)+'-'+
inttostr(msg.paramH)+'WM_LBUTTONDOWN');
End ;
WM_MBUTTONDOWN : Begin
Ishotkey := true ;
DelayTime := 0 ;
Tempmsg := msg ;
form1.Memo1.Lines.add(inttostr(msg.hwnd)+':'+
inttostr(msg.paramL)+'-'+
inttostr(msg.paramH)+'WM_MBUTTONDOWN');
End ;
WM_KEYDOWN : Begin
if tagMSG(Ptr(lParam)^).wParam = VK_RETURN then
form1.Memo1.Lines.add('VK_RETURN');
End ;
End ;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
hHook := SetwindowsHookEx(WH_JOURNALRECORD , hookProc, HInstance, 0);
end; procedure TForm1.Button2Click(Sender: TObject);
begin
if hHook <> 0 then
begin
UnHookWindowsHookEx(hHook);
hHook := 0;
end;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
if hHook <> 0 then
begin
UnHookWindowsHookEx(hHook);
hHook := 0;
end;
End; Procedure DoSomething;
Begin
SendMessage(TempMsg.hwnd, WM_CHAR, VK_RETURN, 0);
DelayTime := GetCurrentTime ;
End ; procedure TForm1.Timer1Timer(Sender: TObject);
begin
if IsHotkey then
if (GetCurrentTime - Delaytime) > 3000 then Begin
DoSomething ;
End ;
end;
end.
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
|
kamiche
一般會員 發表:5 回覆:5 積分:2 註冊:2003-04-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |