function myHookProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall;
var
X, Y : Integer;
begin
result:=0;
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log('Stop Hook at' + inttostr(X) + ';' + inttostr(Y));
//UnhookWindowsHookEx(myHook);
//应该是 CallNextHook吧
exit;
end;if (wParam = WM_NCMouseMove) or (wParam=WM_MOUSEMOVE) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log(inttostr(X) + ';' + inttostr(Y));
end;
var
X, Y : Integer;
begin
result:=0;
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log('Stop Hook at' + inttostr(X) + ';' + inttostr(Y));
//UnhookWindowsHookEx(myHook);
//应该是 CallNextHook吧
exit;
end;if (wParam = WM_NCMouseMove) or (wParam=WM_MOUSEMOVE) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log(inttostr(X) + ';' + inttostr(Y));
end;
var
X, Y : Integer;
begin
result:=0;
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log('Stop Hook at' + inttostr(X) + ';' + inttostr(Y));
UnhookWindowsHookEx(myHook);
exit;
end;if (wParam = WM_NCMouseMove) or (wParam=WM_MOUSEMOVE) then
begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
log(inttostr(X) + ';' + inttostr(Y));
end;result := CallNextHookEx(myHook, iCode, wParam, lParam);
end;不好意思,我粘少了一段我有 callnext我就是需要再点击了后就立刻停止HOOK,然后记录那一刻的鼠标座标哦
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
就不再用Hook了?
如果要继续使用就不要UnHook
begin
result:=0;
if (wParam = WM_LBUTTONDOWN) or (wParam=WM_NCLBUTTONDOWN) then
begin
//发消息通知你的程序用GetCusorPos取得鼠标位置
//CallNext
end;
end;
我曾经用这种方法作过一个屏幕取色程序
SENDMESSAGE明明可以给窗口句柄发送消息,确实是成功了为什么偏偏移出窗体就不可以了呢?