⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peviewermain.pas

📁 Jedi Code Library JCL JVCL 组件包 JCL+JVCL超过300个组件的非可视/可视大型组件包。
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -