mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-14 10:02:10 +08:00
81 lines
1.7 KiB
ObjectPascal
81 lines
1.7 KiB
ObjectPascal
unit uMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, DDetours;
|
|
|
|
type
|
|
TMain = class(TForm)
|
|
BtnHook: TButton;
|
|
BtnMsgBox: TButton;
|
|
BtnUnhook: TButton;
|
|
procedure BtnHookClick(Sender: TObject);
|
|
procedure BtnMsgBoxClick(Sender: TObject);
|
|
procedure BtnUnhookClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
Main: TMain;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
type TMessageBox = function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
|
|
var TrampolineMessageBox : TMessageBox;
|
|
|
|
function InterceptMessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
|
|
var
|
|
Self: TMain;
|
|
begin
|
|
Self := GetTrampolineParam(TrampolineMessageBox);
|
|
Self.Caption := 'MessageBox hooked !';
|
|
Result := TrampolineMessageBox(hWnd, 'this text was hooked', 'this title was hooked', MB_ICONWARNING);
|
|
end;
|
|
|
|
|
|
procedure TMain.FormCreate(Sender: TObject);
|
|
begin
|
|
BtnUnHook.Enabled := False;
|
|
end;
|
|
|
|
procedure TMain.BtnHookClick(Sender: TObject);
|
|
begin
|
|
TrampolineMessageBox := InterceptCreate(@MessageBox, @InterceptMessageBox, Self);
|
|
BtnUnHook.Enabled := True;
|
|
BtnHook.Enabled := False;
|
|
end;
|
|
|
|
procedure TMain.BtnMsgBoxClick(Sender: TObject);
|
|
begin
|
|
MessageBox(0, 'text', 'caption', 0);
|
|
end;
|
|
|
|
procedure TMain.BtnUnHookClick(Sender: TObject);
|
|
begin
|
|
if Assigned(TrampolineMessageBox) then
|
|
begin
|
|
InterceptRemove(@TrampolineMessageBox);
|
|
TrampolineMessageBox := nil;
|
|
BtnHook.Enabled := True;
|
|
BtnUnHook.Enabled := False;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
|
|
finalization
|
|
|
|
if Assigned(TrampolineMessageBox) then
|
|
InterceptRemove(@TrampolineMessageBox);
|
|
|
|
end.
|
|
|