解决方案 »
- DELPHI 如何让程序不能自己启动,要由第三方程序启动?
- Delphi通过OLE访问Excel
- fastreport中,如何在用程序指定横向打印,或纵向打印 的问题
- 我用IDSMTPServer遇到难题,请帮忙
- 谁有F1BOOK 6下载呀,delphi7的版本太低了
- delphi 的文件问题
- 如何获取自己机器的IP地址?
- 请教一个TWebBrowser的动态窗口的问题
- 我有一个数据库程序17M多,怎么办(D6)
- 我按装的Win2000 Server 要打那几个补丁,在什么地方有下?回答清楚马上给分!
- 【delphi+oracle报表解决方案(二)】临时表的使用
- 如何将已query查出的结果在两个dbgrid中关联显示??
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.