?? 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 + -