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

📄 peviewermain.pas

📁 Jedi Code Library JCL JVCL 组件包 JCL+JVCL超过300个组件的非可视/可视大型组件包。
💻 PAS
📖 第 1 页 / 共 2 页
字号:
begin
  S := PeStripFunctionAW(Name);
  WinHelp(Application.Handle, PChar(FWin32Help), HELP_KEY, DWORD(S));
end;

procedure TMainForm.OpenLibrary1Execute(Sender: TObject);
begin
  if IsPeDumpChildActive then
    OpenFile(TPeDumpChild(ActiveMDIChild).ActiveLibName, False)
  else
    OpenFile(TPeSearchChild(ActiveMDIChild).ActiveLibName, False);
end;

procedure TMainForm.Copy1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or
   ((Screen.ActiveControl is TRichEdit) and ((Screen.ActiveControl as TRichEdit).SelLength > 0));
end;

procedure TMainForm.OpenLibrary1Update(Sender: TObject);
begin
  OpenLibrary1.Enabled :=
  (IsPeDumpChildActive and (TPeDumpChild(ActiveMDIChild).ActiveLibName <> '')) or
  (IsSearchChildActive and (TPeSearchChild(ActiveMDIChild).ActiveLibName <> ''));
end;

function TMainForm.ActiveListViewToStrings: TStrings;
begin
  Screen.Cursor := crHourGlass;
  try
    Result := TStringList.Create;
    try
      Result.Capacity := 256;
      ListViewToStrings(Screen.ActiveControl as TListView, Result, True);
    except
      FreeAndNil(Result);
      raise;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TMainForm.Copy1Execute(Sender: TObject);
var
  SL: TStrings;
begin
  if Screen.ActiveControl is TRichEdit then
    (Screen.ActiveControl as TRichEdit).CopyToClipboard
  else
  if Screen.ActiveControl is TListView then
  begin
    SL := ActiveListViewToStrings;
    try
      Clipboard.AsText := SL.Text;
    finally
      SL.Free;
    end;
  end;
end;

procedure TMainForm.SelectAll1Execute(Sender: TObject);
begin
  if Screen.ActiveControl is TRichEdit then
    TRichEdit(Screen.ActiveControl).SelectAll
  else
  if Screen.ActiveControl is TListView then
    ListViewSelectAll(TListView(Screen.ActiveControl));
end;

procedure TMainForm.GroupImports1Update(Sender: TObject);
begin
  with TAction(Sender) do
  begin
    Enabled := IsPeDumpChildActive;
    if Enabled then
      Checked := TPeDumpChild(ActiveMDIChild).GroupImports
    else
      Checked := False;
  end;
end;

procedure TMainForm.GroupImports1Execute(Sender: TObject);
begin
  with TPeDumpChild(ActiveMDIChild) do
  begin
    GroupImports := not GroupImports;
    GroupImports1.Checked := GroupImports;
  end;
end;

procedure TMainForm.Search1Execute(Sender: TObject);
begin
  TPeSearchChild.Create(Self);
end;

function TMainForm.IsSearchChildActive: Boolean;
begin
  Result := ActiveMDIChild is TPeSearchChild;
end;

procedure TMainForm.ViewResources1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := IsPeDumpChildActive and
    TPeDumpChild(ActiveMDIChild).HasDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
end;

procedure TMainForm.ViewResources1Execute(Sender: TObject);
var
  F: TForm;
begin
  with ActiveMDIChild as TPeDumpChild do
  begin
    F := FindPeResourceView(PeImage);
    if F = nil then
      TPeResViewChild.CreateEx(Self, PeImage)
    else
      F.BringToFront;
  end;
end;

function TMainForm.FindPeResourceView(APeImage: TJclPeImage): TForm;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to MDIChildCount - 1 do
    if (MDIChildren[I] is TPeResViewChild) and (TPeResViewChild(MDIChildren[I]).PeImage = APeImage) then
    begin
      Result := MDIChildren[I];
      Break;
    end;
end;

function TMainForm.IsPeResChildActive: Boolean;
begin
  Result := ActiveMDIChild is TPeResViewChild;
end;

procedure TMainForm.ViewResDetails1Update(Sender: TObject);
begin
  with TAction(Sender) do
  begin
    Enabled := IsPeResChildActive;
    if Enabled then
      Checked := TPeResViewChild(ActiveMDIChild).ShowSpecialDirView
    else
      Checked := False;
  end;
end;

procedure TMainForm.ViewResDetails1Execute(Sender: TObject);
begin
  with ViewResDetails1 do
  begin
    Checked := not Checked;
    TPeResViewChild(ActiveMDIChild).ShowSpecialDirView := Checked;
  end;
end;

procedure TMainForm.ViewResHex1Update(Sender: TObject);
begin
  with TAction(Sender) do
  begin
    Enabled := IsPeResChildActive;
    if Enabled then
      Checked := TPeResViewChild(ActiveMDIChild).ShowAsHexView
    else
      Checked := False;
  end;
end;

procedure TMainForm.ViewResHex1Execute(Sender: TObject);
begin
  with ViewResHex1 do
  begin
    Checked := not Checked;
    TPeResViewChild(ActiveMDIChild).ShowAsHexView := Checked;
  end;
end;

procedure TMainForm.Save1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or
    (IsPeResChildActive and TPeResViewChild(ActiveMDIChild).CanSaveResource) or
    (IsGenDefChildActive and TPeGenDefChild(ActiveMDIChild).CanSave);
end;

procedure TMainForm.About1Execute(Sender: TObject);
begin
  ShowToolsAboutBox;
end;

procedure TMainForm.SendMail1Execute(Sender: TObject);
begin
  SendEmail;
end;

procedure TMainForm.ShowUnitGen1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := IsPeDumpChildActive and
    TPeDumpChild(ActiveMDIChild).HasDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
end;

procedure TMainForm.ShowUnitGen1Execute(Sender: TObject);
var
  CurrFileName: TFileName;
begin
  CurrFileName := (ActiveMDIChild as TPeDumpChild).FileName;
  with TPeGenDefChild.Create(Self) do
    FileName := CurrFileName;
end;

function TMainForm.IsGenDefChildActive: Boolean;
begin
  Result := ActiveMDIChild is TPeGenDefChild;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  PostMessage(Handle, UM_CHECKPARAMSTR, 0, 0);
end;

procedure TMainForm.UMCheckParamStr(var Message: TMessage);
var
  I: Integer;
  FileName: TFileName;
begin
  for I := 1 to ParamCount do
  begin
    FileName := PathGetLongName(ParamStr(I));
    if (Length(FileName) > 0) and not (FileName[1] in ['-', '/']) then
      OpenFile(FileName, False);
  end;    
end;

procedure TMainForm.WMDropFiles(var Message: TWMDropFiles);
var
  FilesCount, I: Integer;
  FileName: array[0..MAX_PATH] of Char;
begin
  FilesCount := DragQueryFile(Message.Drop, MAXDWORD, nil, 0);
  for I := 0 to FilesCount - 1 do
  begin
    if (DragQueryFile(Message.Drop, I, @FileName, SizeOf(FileName)) > 0) and
      IsValidPeFile(FileName) then
        OpenFile(FileName, True);
  end;
  DragFinish(Message.Drop);
  Message.Result := 0;
  Application.BringToFront;
end;

procedure TMainForm.UnmangleNames1Update(Sender: TObject);
begin
  with TAction(Sender) do
  begin
    Enabled := IsPeDumpChildActive;
    if Enabled then
      Checked := TPeDumpChild(ActiveMDIChild).UnmangleNames
    else
      Checked := False;
  end;
end;

procedure TMainForm.UnmangleNames1Execute(Sender: TObject);
begin
  with TPeDumpChild(ActiveMDIChild) do
  begin
    UnmangleNames := not UnmangleNames;
    UnmangleNames1.Checked := UnmangleNames;
  end;
end;

procedure TMainForm.SelectAll1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or
   (Screen.ActiveControl is TRichEdit);
end;

procedure TMainForm.Find1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := TFindTextForm.CanExecuteFind;
end;

procedure TMainForm.Find1Execute(Sender: TObject);
begin
  ShowFindDialog(Screen.ActiveControl as TListView);
end;

procedure TMainForm.CoolBar1Resize(Sender: TObject);
begin
  D4FixCoolBarResizePaint(Sender);
end;

initialization
  OleInitialize(nil);

finalization
  OleUninitialize;  

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -