有谁做过MouseHook的Dll?

Tarquila 2003-10-16 11:07:07
有谁做过MouseHook的Dll吗?能不能支持一个,我这几急着用。
谢谢了。
e-mail:tequila_yang822@hotmail.com
...全文
53 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tarquila 2003-10-17
  • 打赏
  • 举报
回复
消息是可以截取了,可是知道不知道如何把消息过滤掉,就是不发送给窗体。
pankun 2003-10-16
  • 打赏
  • 举报
回复
我把我做的一个HOOK DLL改了一下,只是一个框架,你再扩展一下吧.

library Hook;

uses
SysUtils,windows, Messages;

type
PMyDLLVar = ^TMyDLLVar;
TMyDLLVar = record
HookWindow, SpyWindow: LongWORD; //要安装HOOK的窗口及用于接收消息的窗口
hHook: LongWORD; //HOOK句柄
MsgHwnd: LongWORD;
Msg: TMessage;
end;

var
DLLData: PMyDLLVar;

{------------------------------------}
{过程名:HookProc
{过程功能:HOOK过程
{过程参数:nCode, wParam, lParam消息的相
{ 关参数
{------------------------------------}
procedure HookProc(nCode, wParam, lParam: LongWORD);stdcall;
begin
//加上你要做的功能
//调用下一个Hook
CallNextHookEx(DLLData^.hHook, nCode, wParam, lParam);
end;


{------------------------------------}
{函数名:InstallHook
{函数功能:在指定窗口上安装HOOK
{函数参数:HWindow:要安装HOOK的窗口
{ SWindow:用于接收消息的窗口
{返回值:成功返回TRUE,失败返回FALSE
{------------------------------------}
function InstallHook(HWindow, SWindow: LongWORD):Boolean;stdcall;
var
ThreadID: LongWORD;
begin
Result := False;
DLLData^.hHook := 0;
DLLData^.HookWindow := HWindow;
DLLData^.SpyWindow := SWindow;
ThreadID := GetWindowThreadProcessId(HWindow, nil);
//给指定窗口挂上钩子
DLLData^.hHook := SetWindowsHookEx(WH_MOUSE, @HookProc, Hinstance, ThreadID);
if DLLData^.hHook > 0 then Result := True; //是否成功HOOK
end;

{------------------------------------}
{过程名:UnHook
{过程功能:卸载HOOK
{过程参数:无
{------------------------------------}
procedure UnHook;stdcall;
begin
//先做其它卸载工作
//卸载Hook
UnhookWindowsHookEx(DLLData^.hHook);
end;

{------------------------------------}
{过程名:DLL入口函数
{过程功能:进行DLL初始化,释放等
{过程参数:DLL状态
{------------------------------------}
procedure MyDLLHandler(Reason: Integer);
var
FHandle: LongWORD;
begin
case Reason of
DLL_PROCESS_ATTACH:
begin //建立文件映射,以实现DLL中的全局变量
FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, $ff, 'MYDLLDATA');
if FHandle = 0 then
if GetLastError = ERROR_ALREADY_EXISTS then
begin
FHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'MYDLLDATA');
if FHandle = 0 then Exit;
end else Exit;
DLLData := MapViewOfFile(FHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if DLLData = nil then
CloseHandle(FHandle);
end;
DLL_PROCESS_DETACH:
if Assigned(DLLData) then
begin
UnmapViewOfFile(DLLData);
DLLData := nil;
end;
DLL_THREAD_ATTACH:;
DLL_THREAD_DETACH:;
end;
end;

{$R *.res}
exports
InstallHook, UnHook, HookProc;

begin
DLLProc := @MyDLLHandler;
MyDLLhandler(DLL_PROCESS_ATTACH);
end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧