📄 peviewermain.pas
字号:
unit PeViewerMain;
{$I JCL.INC}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ActnList, ToolWin, ComCtrls, StdActns, ImgList, ShellAPI, JclPeImage;
const
UM_CHECKPARAMSTR = WM_USER + $100;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
ActionList: TActionList;
File1: TMenuItem;
StatusBar1: TStatusBar;
FileOpen1: TAction;
Edit1: TMenuItem;
Window1: TMenuItem;
Exit1: TAction;
Exit2: TMenuItem;
InvokeHelp1: TAction;
Copy1: TAction;
Save1: TAction;
Copytoclipboard1: TMenuItem;
OpenFileDialog: TOpenDialog;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowTileVertical1: TWindowTileVertical;
Cascade1: TMenuItem;
TileHorizontally1: TMenuItem;
TileVertically1: TMenuItem;
ToolbarImagesList: TImageList;
Savetofile1: TMenuItem;
Open1: TMenuItem;
Help1: TMenuItem;
About1: TAction;
About2: TMenuItem;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton11: TToolButton;
N3: TMenuItem;
SaveDialog: TSaveDialog;
OpenLibrary1: TAction;
ToolButton2: TToolButton;
SelectAll1: TAction;
Selectall2: TMenuItem;
IconImageList: TImageList;
GroupImports1: TAction;
View1: TMenuItem;
Openlibrary2: TMenuItem;
FindinWin32APIhelp1: TMenuItem;
N1: TMenuItem;
Search1: TAction;
ToolButton6: TToolButton;
N2: TMenuItem;
Search2: TMenuItem;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
Groupimports2: TMenuItem;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ViewResources1: TAction;
Viewresources2: TMenuItem;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ViewResDetails1: TAction;
ViewResHex1: TAction;
ToolButton16: TToolButton;
ToolButton17: TToolButton;
Viewdetails1: TMenuItem;
Viewashex1: TMenuItem;
SendMail1: TAction;
Support1: TMenuItem;
ShowUnitGen1: TAction;
ToolButton18: TToolButton;
Pascalunitgenerator1: TMenuItem;
UnmangleNames1: TAction;
ToolButton19: TToolButton;
Unmanglenames2: TMenuItem;
Find1: TAction;
ToolButton20: TToolButton;
N4: TMenuItem;
Findtext1: TMenuItem;
procedure Exit1Execute(Sender: TObject);
procedure InvokeHelp1Update(Sender: TObject);
procedure FileOpen1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure InvokeHelp1Execute(Sender: TObject);
procedure Save1Execute(Sender: TObject);
procedure OpenLibrary1Execute(Sender: TObject);
procedure Copy1Update(Sender: TObject);
procedure OpenLibrary1Update(Sender: TObject);
procedure Copy1Execute(Sender: TObject);
procedure SelectAll1Execute(Sender: TObject);
procedure GroupImports1Update(Sender: TObject);
procedure GroupImports1Execute(Sender: TObject);
procedure Search1Execute(Sender: TObject);
procedure ViewResources1Update(Sender: TObject);
procedure ViewResources1Execute(Sender: TObject);
procedure ViewResDetails1Update(Sender: TObject);
procedure ViewResDetails1Execute(Sender: TObject);
procedure ViewResHex1Update(Sender: TObject);
procedure ViewResHex1Execute(Sender: TObject);
procedure Save1Update(Sender: TObject);
procedure About1Execute(Sender: TObject);
procedure SendMail1Execute(Sender: TObject);
procedure ShowUnitGen1Update(Sender: TObject);
procedure ShowUnitGen1Execute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure UnmangleNames1Update(Sender: TObject);
procedure UnmangleNames1Execute(Sender: TObject);
procedure SelectAll1Update(Sender: TObject);
procedure Find1Update(Sender: TObject);
procedure Find1Execute(Sender: TObject);
procedure CoolBar1Resize(Sender: TObject);
private
FWin32Help: string;
function ActiveListViewToStrings: TStrings;
function IsWin32Help: Boolean;
function IsPeDumpChildActive: Boolean;
function IsPeResChildActive: Boolean;
function IsSearchChildActive: Boolean;
function IsGenDefChildActive: Boolean;
procedure OnActiveFormChange(Sender: TObject);
procedure UMCheckParamStr(var Message: TMessage); message UM_CHECKPARAMSTR;
procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
public
function FindPeResourceView(APeImage: TJclPeImage): TForm;
procedure InvokeWin32Help(const Name: string);
procedure OpenFile(const FileName: TFileName; CheckIfOpen: Boolean);
end;
var
MainForm: TMainForm;
const
icoHeader = 0;
icoDirectory = 1;
icoImports = 2;
icoExports = 3;
icoResources = 4;
icoSection = 5;
icoSortAsc = 6;
icoSortDesc = 7;
icoDelayImport = 8;
icoBoundImport = 9;
icoLoadConfig = 10;
icoRelocation = 11;
icoDebug = 12;
icoFolderShut = 13;
icoFolderOpen = 14;
icoResItem = 15;
icoWarning = 16;
implementation
uses ActiveX, ClipBrd, ToolsUtils, JclFileUtils, JclSysUtils,
About, PeDump, PeSearch, PeResView, PeGenDef, FindDlg;
{$R *.DFM}
{ TMainForm }
procedure TMainForm.Exit1Execute(Sender: TObject);
begin
Close;
end;
function TMainForm.IsPeDumpChildActive: Boolean;
begin
Result := ActiveMDIChild is TPeDumpChild;
end;
procedure TMainForm.InvokeHelp1Update(Sender: TObject);
begin
TAction(Sender).Enabled := IsWin32Help and IsPeDumpChildActive and
(TPeDumpChild(ActiveMDIChild).ActiveWin32Function <> '');
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
var
I: Integer;
begin
with OpenFileDialog do
begin
FileName := '';
if Execute then
for I := 0 to Files.Count - 1 do OpenFile(Files[I], False);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FWin32Help := Win32HelpFileName;
Screen.OnActiveFormChange := OnActiveFormChange;
DragAcceptFiles(Handle, True);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Screen.OnActiveFormChange := nil;
WinHelp(Application.Handle, PChar(FWin32Help), HELP_QUIT, 0);
DragAcceptFiles(Handle, False);
end;
procedure TMainForm.OnActiveFormChange(Sender: TObject);
begin
if IsPeDumpChildActive then
begin
// GroupImports1.Checked := TPeDumpChild(ActiveMDIChild).GroupImports;
StatusBar1.Panels[0].Text := TPeDumpChild(ActiveMDIChild).FileName;
end else
if IsPeResChildActive then
begin
StatusBar1.Panels[0].Text := TPeResViewChild(ActiveMDIChild).PeImage.FileName;
end else
if IsGenDefChildActive then
begin
StatusBar1.Panels[0].Text := TPeGenDefChild(ActiveMDIChild).FileName;
end else
StatusBar1.Panels[0].Text := '';
end;
procedure TMainForm.OpenFile(const FileName: TFileName; CheckIfOpen: Boolean);
var
EI: TJclPeImage;
I: Integer;
begin
if CheckIfOpen then
begin
for I := 0 to MDIChildCount - 1 do
if MDIChildren[I] is TPeDumpChild and (TPeDumpChild(MDIChildren[I]).FileName = FileName) then
begin
MDIChildren[I].BringToFront;
Exit;
end;
end;
Screen.Cursor := crHourGlass;
EI := TJclPeImage.Create;
try
try
EI.FileName := FileName;
TPeDumpChild.CreateEx(Self, EI);
except
EI.Free;
raise;
end;
finally
Screen.Cursor := crDefault;
end;
end;
procedure TMainForm.InvokeHelp1Execute(Sender: TObject);
begin
InvokeWin32Help(TPeDumpChild(ActiveMDIChild).ActiveWin32Function);
end;
procedure TMainForm.Save1Execute(Sender: TObject);
var
SL: TStrings;
begin
if IsPeResChildActive and TPeResViewChild(ActiveMDIChild).CanSaveResource then
TPeResViewChild(ActiveMDIChild).SaveResource
else
if IsGenDefChildActive then
TPeGenDefChild(ActiveMDIChild).SaveUnit
else
with SaveDialog do
begin
if IsPeDumpChildActive then
FileName := ChangeFileExt(TPeDumpChild(ActiveMDIChild).FileName, '.txt')
else
FileName := '';
if Execute then
begin
SL := ActiveListViewToStrings;
try
SL.SaveToFile(FileName);
finally
SL.Free;
end;
end;
end;
end;
function TMainForm.IsWin32Help: Boolean;
begin
Result := FWin32Help <> '';
end;
procedure TMainForm.InvokeWin32Help(const Name: string);
var
S: string;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -