我下载了一个烟.样本,该样本没有工作。 因此,我 stripped掉了所有不必要的 st子,并想知道其中什么是错的。 当我开始该方案时,该方案和德尔菲冻结方案,我不得不通过任务结束。
申请:
type
...
procedure ms(var message: tmessage); message WM_USER+1234;
end;
var
MainHookTestForm: TMainHookTestForm;
implementation
procedure HookMouse; stdcall; external MouseHook.DLL ; // Added stdcalls;
procedure UnHookMouse; stdcall; external MouseHook.DLL ;
{$R *.dfm}
procedure TMainHookTestForm.FormCreate(Sender: TObject);
begin
HookMouse;
end;
procedure TMainHookTestForm.FormDestroy(Sender: TObject);
begin
UnHookMouse;
end;
procedure TMainHookTestForm.ms(var message: tmessage);
begin
Label1.Caption:=format( %d - %d ,[message.LParam, message.WParam]); // Edited
end;
Lib:
library MouseHook;
uses
Forms,
Windows,
Messages;
var Hook: HHOOK;
{$R *.res}
function HookProc(nCode: Integer; MsgID: WParam; Data: LParam): LResult; stdcall;
var
mousePoint: TPoint;
begin
mousePoint := PMouseHookStruct(Data)^.pt;
PostMessage(FindWindow( TMainHookTestForm , Main ), WM_USER+1234, mousePoint.X, mousePoint.Y); // Edited class name
Result := CallNextHookEx(Hook,nCode,MsgID,Data);
end;
procedure HookMouse; stdcall;
begin
if Hook = 0 then Hook:=SetWindowsHookEx(WH_MOUSE,@HookProc,HInstance,0);
end;
procedure UnHookMouse; stdcall;
begin
UnhookWindowsHookEx(Hook);
Hook:=0;
end;
exports
HookMouse, UnHookMouse;
begin
end.
我认为,这是很简单的。 冻结是在<代码>HookMouse的号召下进行的,执行这一条线时,整个民主选举学会冻结,我可以进一步推敲。 但我看不到这一程序有任何错误。
I am using XE2, if that helps. Thanks for the troubleshooting
<><>><>>>>>>>>>: I edited the calls of HookMouse
and UnhookMouse
with stdbet;
and the name of thewn to found. 现在似乎在工作 n,它显示了正确的价值,只有在 mo曲者不处在 app窗下的情况下,才会显示最佳的数值——当我把 mo改到窗户时,它会修改