📄 main.pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, UShare, Menus, ExtCtrls;
type
TFrmMain = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
procedure CMMsgWndCreated(var Message: TMessage); message CM_MSGWNDCREATED;
public
{ Public declarations }
PatchOK : integer;
end;
var
FrmMain: TFrmMain;
DestWnd: HWND;
implementation
{$R *.dfm}
var
hLib: THandle;
InstallHook: procedure (MainWnd, DestWnd: HWND); stdcall;
UninstallHook: procedure ; stdcall;
var
MsgWnd: HWND;
procedure TFrmMain.CMMsgWndCreated(var Message: TMessage);
begin
MsgWnd := Message.WParam;
if Message.LParam = 1 then begin
PatchOK := -1;
PatchOK := SendMessage(MsgWnd, CM_BUILDMENU, 0, 0);
if PatchOK >= 0 then begin
FrmMain.Visible := False;
showmessage('打补丁成功!');
end;
end
else
//
end;
procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UninstallHook;
if hLib <> 0 then FreeLibrary(hLib);
end;
procedure TFrmMain.FormCreate(Sender: TObject);
begin
WinExec('ToBePatchedExe.exe', SW_NORMAL); //启动待打补丁的程序
sleep(500); //视情况等待一段时间,这样可以找到待打补丁程序的主窗口句柄
if hLib = 0 then begin
hLib := LoadLibrary('PatchDll.dll');
if hLib = 0 then begin
Showmessage('未找到动态链接库PatchDll.dll');
Exit;
end;
end;
//获取动态链接库中的函数
@InstallHook := GetProcAddress(hLib, 'InstallHook');
@UninstallHook := GetProcAddress(hLib, 'UninstallHook');
//获取ToBePatchedExe.exe主窗口的句柄,你可以用更好的方法来获取
DestWnd := FindWindow('TFrmHooked', '待打补丁的程序');
if DestWnd = 0 then begin
Showmessage('待打补丁的程序未找到!');
Exit;
end;
MsgWnd := 0;
//安装钩子
InstallHook(Handle, DestWnd);
PostMessage(DestWnd, WM_NULL, 0, 0);
end;
procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
DestWnd := FindWindow('TFrmHooked', '待打补丁的程序');
if DestWnd <> 0 then begin
ShowMessage('请先关闭主程序!');
CanClose := False;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -