如何能得知OnMouseMove在FORM之外的动作(如金山词霸)(100分)

  • 主题发起人 主题发起人 子玉
  • 开始时间 开始时间

子玉

Unregistered / Unconfirmed
GUEST, unregistred user!
如题谢谢!
是不是用HOOK?
还是抓消息?
另:有谁知道DELPHI原版中文手册里有那些东东,有几本,各是什么?
主题目分:80分
另题目分:10分
最辛苦分:10分
 
得用Hook! Hook就是获得Windows的消息而后采取相应的动作。
 
use hook api :
SetWindowsHookEx(WH_MOUSE,...
 
Hehe, 搜索一下论坛,以前答过类似的问题的,还有源代码奉送,:)
 
最方便就是用钩子.但也可以用把所有消息都处理的方法实现(不嫌累,可还真有这种软件)
 
HOOK.
不同的版本,DELPHI原版中文手册的数量是不同的.
1.0是三本,3.0是三本(我见过),4.0好象是四本(听说).
一本用户指南,一本开发指南,一本数据库指南.
部分内容可从 许新华 抄译著的系统Delphi参考书中得到.
 
SetWindowsHookEx(WM_MOUSEMOVE,...)
CallNextHookEx()
UnHookWindowsHookEx()
能不能详细的讲一讲,我看过以前的问题了,但还是感觉不太好懂
,我是刚开始学习HOOK的,希望大家讲得通俗详细些。
小弟在此谢过了。
 
SetWindowsHookEx 是启动 Hook 功能,
SetWindowsHookEx(WM_MOUSEMOVE, ...对WM_MOUSEMOVE消息进行hook
CallNextHookEx() 将截获的消息往下一个消息接收地传送,
UnHookWindowsHookEx() 解除Hook功能 ,

例子: 这个只是在一般的application中的例子, 若要截获applicationForm之外的
消息, Hook必须放在dll程序中. dll 中要有启动和撤销功能.

var
Form1: TForm1;
YourHook: HHOOK;
function YourHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;

implementation

{$R *.DFM}
function YourHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;
begin
if Msg.Message = WM_MOUSEMOVE then begin
form1.Edit1.text := inttostr(msg.wParam);//做你要做的事
end
Result := CallNextHookEx(YourHook, Code, WParam, Longint(@Msg)); //放出消息给下一个.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
YourHook := SetWindowsHookEx(WH_GETMESSAGE, @YourHookProc, 0, GetCurrentThreadID); //
end;
 
这个问题不用HOOK也可以!
用一个定时器不断地GetCursorPos(@pos)就行了!
API为:
BOOL GetCursorPos(

LPPOINT lpPoint // address of structure for cursor position
);
 
啊?我提的问题,呵呵,晚了:-(
 
可以使用Timer来实现
判断一定时间间隔中鼠标的位置是否变化,就可以知道鼠标是否移动。
我写过一个程序,就是Form中的一只小狗的眼睛会跟着鼠标走,
无论这个窗口是否被Active。

可以去http://tale.topcool.net看看
如果要源码,写信给我。tale_sun@263.net
 
谢谢各位分来了!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
795
import
I
I
回复
0
查看
572
import
I
后退
顶部