如何用同一个DLL注入到同一进程的不同窗口中

fbiboss 2010-09-10 04:34:17
我想用子类化监视另一进程的几个窗口的消息,网上找的那篇跨进程子类化的方法只能注入一次,我想用一个DLL就把窗口都注入了,怎么做啊?
我自己改了下,连注入都不会了,不知道怎么回事
以前在网上找的要用到全局的共享变量,我不想用那个就改了下怎么完全不能用了啊,DLL都没注入进去,难道非要用那个全局共享变量才行吗

library Hook;
uses
windows, Messages; //SysUtils,
const
HOOK_EVENT_NAME = 'MyHook';
WM_MYCPSHOWWINDOW=WM_USER+600;
var
OldWndProc: pointer; {旧的窗口过程}
HookWindow, SpyWindow: LongWORD; {要安装HOOK的窗口及用于接收消息的窗口}
hHook: LongWORD; {HOOK句柄}
{----------}
{函数名:NewWndProc
{函数功能:新的窗口过程
{函数参数:hHwnd:窗口句柄 Msg:消息ID
{ wParam, lParam:消息参数
{函数返回值:下一个窗口过程的返回值
{----------}
function NewWndProc(hHwnd, Msg, wParam, lParam: LongWORD): Longint; stdcall;
begin
{给监视窗口发送拦载新消息的消息}
if (Msg=WM_SHOWWINDOW) then begin
SendMessage(SpyWindow,WM_MYCPSHOWWINDOW,wParam, lParam);
end;

Result := CallWindowProc(OldWndProc, hHwnd, Msg, wParam, lParam);
end;
{----------}
{过程名:HookProc
{过程功能:HOOK过程
{过程参数:nCode, wParam, lParam消息的相{关参数{----------}
procedure HookProc(nCode, wParam, lParam: LongWORD);stdcall;
var
hEvent: THandle;
begin
{保存窗口过程地址并子类化}
if hEvent <> 0 then
begin
WaitForSingleObject(hEvent, INFINITE);
CloseHandle(hEvent);
end;
OldWndProc := pointer(GetWindowLong(HookWindow, GWL_WNDPROC));
SetWindowLong(HookWindow, GWL_WNDPROC, integer(@NewWndProc));
hEvent := OpenEvent(Synchronize, False, HOOK_EVENT_NAME);

{调用下一个Hook}
CallNextHookEx(hHook, nCode, wParam, lParam);
end;


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

{----------}
{过程名:UnHook
{过程功能:卸载HOOK
{过程参数:无
{----------}
procedure UnHook;stdcall;
begin
{发送卸载子类化消息给指定窗口}
{卸载Hook}
UnhookWindowsHookEx(hHook);
end;

{----------}
{过程名:DLL入口函数
{过程功能:进行DLL初始化,释放等
{过程参数:DLL状态
{----------}
procedure MyDLLHandler(Reason: Integer);
var
FHandle: LongWORD;
begin
case Reason of
DLL_PROCESS_ATTACH:;
DLL_PROCESS_DETACH:;
DLL_THREAD_ATTACH:;
DLL_THREAD_DETACH:;
end;
end;


exports
InstallHook, UnHook, HookProc;

begin
DLLProc := @MyDLLHandler;
MyDLLhandler(DLL_PROCESS_ATTACH);
end.
...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
全局的就是hook了所有的窗口消息啊
2007-6-4 VER 1.3.0.83
增加了Zlib压缩解压缩支持库,并在 EncryptFile.sps 示例增加了演示
虚拟机会检查 System 路径和程序路径下是否存在Zlib.dll文件
如果不存在,程序会在 System32 路径下释放此文件
(Zlib.Dll是国外著名的开源压缩程序,压缩率仅次于Winrar,而且速度很快)
修正了对VBS和JS文件的程序对象支持,现在可以在VBS脚本或JS脚本使用App全局对象了
2007-6-3 VER 1.3.0.71
修正了窗体 CtrlItems 对象的 DrawControl 捕获错误能力,如果提供了不被支持的控件,将会结束程序
增加了著名的几个加密 及解密 控件 SEncrypt.DLL 和示例 EncryptFile.sps
增加了窗体关闭时的事件捕捉及取消关闭窗口的能力,同时 所有的 vbscript 窗体过程必须写为 function 形式,对原有的 sub 形式不再支持

2007-6-2 VER 1.3.0.63
增强了同一脚本程序的多脚本语言功能,真正实现了同一脚本里使用多种语言
增加例程 javascript学习.sps 演示了VBS调用JS的函数并得到返回值
修正了多语言脚本的Code代码段读取分析问题
2007-6-1 VER 1.3.0.50
增加了Base64加密类支持
修整了网络服务器和网络客户端的示例
增加了网络服务器监听指定IP地址的功能,现在已经可以捕捉监听出错
增加了网络客户端连接时出错的捕获,连接超时为15秒


超级脚本虚拟机简介:

尖科超级脚本虚拟机是一个功能强大、基于微软Windows系统操作系统的脚本虚拟机
主要功能有:

·支持图形界面的开发,通过CForm对象的CreateForm 方法创建具有可处理事件的Windows标准图形窗体,并且基于VB的控件管理技术让你使用Windows标准控件及处理他们的事件。

·支持多种脚本语言,并且可以同一脚本文件使用不同的语言,并且通过共享内存方式共享不同语言的脚本的数据。

·支持资源文件的使用,可以定义资源文件包括字符串(可以写出多语言特征的程序)、图片、文件等

·支持包含源文件,可以将一个大程序分成几个小模块

·支持面向对象(指VBS的类和JS的function),学过VBS或JS的就可以上手

·支持控制台程序的开发,开发出基于命令行交互的程序。

·支持非传址API调用,支持变量按名称访问(需全局变量)

·支持DLL注入进程内存访问、修改,可以用来做内存注册机,示例“Dll注入测试”有演示。

·支持日志功能,运行日志全程跟踪

·全套内置支持的控件近40多个,可以充分写出漂亮界面功能强大的应用程序,并且支持使用ActiveX 以扩展功能 。

·SkinForm皮肤有 24 种风格可选,XPStyle 控件可以在Windows2000使用XP三种风格的界面

你可以用VBScript来创建图形界面,用JavaScript来处理他们的事件,内置的App类可以管理你的程序,内置文件系统CFileSystem类,输入输出CFileIO类,及注册表访问CRegistry类等,


特别注意的是,用它写出标准的桌面应用程序,企业数据库管理软件等 请看示例



软件可已做成控件形式的(ActiveExe ,像WinWord,Excel等,接口类为CApp),供二次开发使用 ,首次运行请加 /regserver参数

软件安装简单,请看“安装必读.txt”
详细的使用例程

QQ群29940046
Email:lcgyzsl@163.com
周少礼 2007-1

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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