📄 mainfrm.pas
字号:
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
const
WM_Send = WM_USER + 1201;
WM_SendTo = WM_USER + 1202;
WM_Connect = WM_USER + 1203;
const HOOK_MEM_FILENAME = 'MEM_FILE';
type
TShared = record
Buf: array[0..2048] of char; //save buf
srcPort : array[0..5] of Char; //save srcport
DestPort : array[0..5] of Char;
srcIp :array[0..16] of Char;
DestIp : array[0..16] of Char;
end;
PShared = ^TShared;
TMainpas = class(TForm)
MainMenu1: TMainMenu;
Syste1: TMenuItem;
Set1: TMenuItem;
Exit1: TMenuItem;
About1: TMenuItem;
Memo1: TMemo;
Start1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
procedure Set1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Start1Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Sendto(var Msg: TMessage); message WM_SendTo;
procedure Send(var Msg: TMessage); message WM_Send;
procedure Connect(var Msg: TMessage); message WM_Connect;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
MapHandle: THandle;
pShare: PShared;
Procedure Starthook;
Procedure StartMap;
end;
var
Mainpas: TMainpas;
Hooked : Boolean;
InstallHook : function (SWindow: THandle):Boolean;stdcall;
UnHook: procedure;stdcall;
function sendudp( srcip , dstip:String ; srcprt ,dstprt : integer; buf :string; bufsize:integer):integer;stdcall;external 'SendUdp.dll';
implementation
uses SetFrm;
{$R *.dfm}
procedure TMainpas.SendTo(var Msg: TMessage);
begin
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Sendto- - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('srcIP:'+PShare^.srcIp);
Mainpas.Memo1.Lines.Add('srcPort:'+PShare^.srcPort);
Mainpas.Memo1.Lines.Add('DestIp:'+PShare^.DestIp);
Mainpas.Memo1.Lines.Add('DestPort:'+PShare^.DestPort);
Mainpas.Memo1.Lines.Add('Data:'+PShare^.Buf);
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Sendto- - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('');
end;
procedure TMainpas.Connect(var Msg: TMessage);
begin
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Connect- - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('srcIP:'+PShare^.srcIp);
Mainpas.Memo1.Lines.Add('srcPort:'+PShare^.srcPort);
Mainpas.Memo1.Lines.Add('DestIp:'+PShare^.DestIp);
Mainpas.Memo1.Lines.Add('DestPort:'+PShare^.DestPort);
Mainpas.Memo1.Lines.Add('Data:'+PShare^.Buf);
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Connect- - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('');
end;
procedure TMainpas.Send(var Msg: TMessage);
begin
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Send- -- - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('srcIP:'+PShare^.srcIp);
Mainpas.Memo1.Lines.Add('srcPort:'+PShare^.srcPort);
Mainpas.Memo1.Lines.Add('DestIp:'+PShare^.DestIp);
Mainpas.Memo1.Lines.Add('DestPort:'+PShare^.DestPort);
Mainpas.Memo1.Lines.Add('Data:'+PShare^.Buf);
Mainpas.Memo1.Lines.Add('- - - - - - - - - - -Send- - - - - - - - - - - - -');
Mainpas.Memo1.Lines.Add('');
end;
Procedure TMainpas.Starthook;
var
ModuleHandle: THandle;
TmpWndHandle: THandle;
begin
TmpWndHandle := 0;
TmpWndHandle := FindWindow(nil, Pchar(setpas.Edit1.Text));
if not isWindow(TmpWndHandle) then
begin
mainpas.Memo1.Lines.Add('Windows not Find!');
exit;
end;
ModuleHandle := LoadLibrary('Hook.dll');
@InstallHook := GetProcAddress(ModuleHandle, 'InstallHook');
@UnHook := GetProcAddress(ModuleHandle, 'UnHook');
if InstallHook(FindWindow(nil, Pchar(setpas.Edit1.Text))) then
mainpas.Memo1.Lines.Add('Hook init OK');
Hooked := True;
end;
Procedure tMainpas.StartMap;
begin
MapHandle := OpenFileMapping(FILE_MAP_WRITE,
False,
HOOK_MEM_FILENAME);
if MapHandle = 0 then
begin
mainpas.Memo1.Lines.Add('Map Not init!');
exit;
end; //Shared: PShared;
pShare := PShared(MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0));
if pShare = nil then
begin
CloseHandle(MapHandle);
mainpas.Memo1.Lines.Add('Can''t View Memory Map!');
exit;
end;
FillChar(pShare^, SizeOf(TShared), 0);
mainpas.Memo1.Lines.Add('Map Init OK!');
end;
procedure TMainpas.Set1Click(Sender: TObject);
begin
Setpas.ShowModal;
end;
procedure TMainpas.Exit1Click(Sender: TObject);
begin
//UnHook ;
if Hooked then
UnHook;
CloseHandle(MapHandle);
Close;
end;
procedure TMainpas.Start1Click(Sender: TObject);
begin
Starthook ;
//Sleep(2000);
StartMap;
end;
procedure TMainpas.Memo1Change(Sender: TObject);
begin
if Memo1.Lines.Count >= strtoint(setpas.Edit2.Text) then
memo1.Clear;
end;
procedure TMainpas.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Hooked then
UnHook;
CloseHandle(MapHandle);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -