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

📄 unitjad.pas

📁 JAVA源文件反编译工具,希望对大家有用. 我用着还可以.
💻 PAS
字号:
unit Unitjad;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, SkinCaption, WinSkinData,ExtCtrls, ToolWin,
  ComCtrls, FileCtrl,shellAPI,about, unit2jad, ComObj;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SkinData1: TSkinData;
    SkinCaption1: TSkinCaption;
    Panel1: TPanel;
    Label1: TLabel;
    FileSelSpace: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    OpenSingClassFile: TBitBtn;
    SaveSingJavaFile: TBitBtn;
    SingFileSet: TGroupBox;
    openJavaDir: TCheckBox;
    defaultOpen: TRadioButton;
    viewOpen: TRadioButton;
    doNotOpen: TRadioButton;
    ToolBar1: TToolBar;
    DecompilesSingClassFile: TBitBtn;
    CallCMD: TBitBtn;
    About: TBitBtn;
    Quit: TBitBtn;
    LinkMyEmail: TBitBtn;
    GroupBox3: TGroupBox;
    Memo1: TMemo;
    DirSelSpace: TGroupBox;
    SouceFileDir: TGroupBox;
    FileListBox1: TFileListBox;
    ViewFile: TBitBtn;
    Openfile: TBitBtn;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Edit5: TEdit;
    ClearView: TBitBtn;
    DecompilesClassDir: TBitBtn;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    apply: TBitBtn;
    break: TBitBtn;
    StatusBar1: TStatusBar;
    procedure Label6Click(Sender: TObject);
    procedure helpClick(Sender: TObject);
    procedure breakClick(Sender: TObject);
    procedure ClearViewClick(Sender: TObject);
    procedure OpenfileClick(Sender: TObject);
    procedure ViewFileClick(Sender: TObject);
    procedure DecompilesClassDirClick(Sender: TObject);
    procedure BitBtn14Click(Sender: TObject);
    procedure BitBtn13Click(Sender: TObject);
    procedure applyClick(Sender: TObject);
    procedure LinkMyEmailClick(Sender: TObject);
    procedure AboutClick(Sender: TObject);
    procedure CallCMDClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SaveSingJavaFileClick(Sender: TObject);
    procedure QuitClick(Sender: TObject);
    procedure OpenSingClassFileClick(Sender: TObject);
    procedure DecompilesSingClassFileClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation



{$R *.dfm}
var
  Opened,Saved,Decompiled,openedClassDir,savedJavaDir:Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Opened:=false;
  Saved:=false;
  Decompiled:=false;
  openedClassDir:=false;
  savedJavaDir:=false;
end;

function ExecuteFile(const FileName, Params, DefaultDir: String; ShowCmd: Integer): THandle;
var
  zFileName, zParams, zDir: array[0..79] of Char;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
  StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
  StrPCopy(zDir, DefaultDir), ShowCmd);
end;

function GetFileWithOutEx( filenames: String):String;      // GetFile函数功能是获得无扩展名的文件名,filenames为“全路径”变量。
var
  delex,filenameWithEx:string;      //无扩展名的文件名。
  lengWithEx,lengWithOutEx,i,j:integer;
begin
  filenameWithEx:=ExtractFileName(filenames);
  lengWithEx:=length(filenameWithEx); //获得有扩展名文件名的长度。
  lengWithOutEx:=length(ExtractFileExt(filenames));
  i:=lengWithEx-lengWithOutEx;  //获得文件名长度。
  SetLength(delex,i);
  for j:=1 to i do
     delex[j]:=filenameWithEx[j];
  result:=delex;
end;

procedure TForm1.DecompilesSingClassFileClick(Sender: TObject);
var
   classdir:string;
begin
if (Opened=true) and (saved=true) then
  begin
      classdir:=edit1.Text;
      WinExec(PChar('jad.exe -o -d '+edit2.Text+' -s java '+classdir),SW_HIDE); // 隐藏这个窗口,并激活另一个窗口。

      Decompiled:=true;
  end
  else
    MessageDlg('请先选定Class文件路径和Java源文件保存路径,否则无法进行左反编译!',mtInformation,[mbOK], 0);
end;

procedure TForm1.OpenSingClassFileClick(Sender: TObject);
var
  spaceDir:string;
  i,j:integer;
  rightDir:boolean;
  label
    foundSpace;
begin
foundSpace:
rightDir:=true;
if OpenDialog1.Execute then
   begin
        if FileExists(OpenDialog1.FileName) then
        begin
          spaceDir:=OpenDialog1.FileName;
          i:=length(spaceDir);
          for j:=1 to i do
            if  spaceDir[j] = ' '  then
            begin
             MessageDlg('抱歉...!您选择的路径中目录名存在空格,"jad"命令行不支持此种路径!请重新选择,给您带来不便请谅解!',mtInformation,[mbOK], 0);
             rightDir:=false;
             goto  foundSpace;
            end;
          if  rightDir = true  then
          begin
            Edit1.Text:=opendialog1.FileName;
            Opened:=true;
          end;
        end
   end;
end;

procedure TForm1.QuitClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.SaveSingJavaFileClick(Sender: TObject);
var
  temp,i,j:integer;
  spaceDir:string;
  rightDir:boolean;
  label
    foundSpace;
begin
foundSpace:
   form2.ShowModal;
   spaceDir:=form2.ShellTreeView1.SelectedFolder.PathName;
   i:=length(spaceDir);
      for j:=1 to i do
      if  spaceDir[j] = ' '  then
      begin
        rightDir:=false;
        MessageDlg('抱歉...!您选择的路径中目录名存在空格,"jad"命令行不支持此种路径!请重新选择,给您带来不便请谅解!',mtInformation,[mbOK], 0);
        goto  foundSpace;
      end;
   if  Edit2.Text<>''  then
      begin
        temp:=MessageDlg('原来保存路径非空!是否用新选择覆盖原路径?',mtInformation,[mbYes,mbNo], 0);
        if temp = 6 then
          edit2.Text:=form2.ShellTreeView1.SelectedFolder.PathName;
          Saved:=true;
        if temp = 7 then
          MessageDlg('请确保原保存路径的正确性!',mtInformation,[mbOK], 0);
      end
   else
      begin
        Edit2.Text:=form2.ShellTreeView1.SelectedFolder.PathName;
        Saved:=true;
     end
end;





procedure TForm1.CallCMDClick(Sender: TObject);
begin
 ShellExecute(handle,'open','cmd.exe','','',SW_SHOWNORMAL);
end;

procedure TForm1.AboutClick(Sender: TObject);
begin
  AboutBox.ShowModal;
end;

procedure TForm1.LinkMyEmailClick(Sender: TObject);
begin
  executefile('mailto:fylsc2005@gmail.com','','',0);
end;



procedure TForm1.applyClick(Sender: TObject);
var
  javaFileName,javafileFulldir:String;
begin
  javaFileName:=GetFileWithOutEx(Edit1.Text)+'.java';
  javafileFulldir:=Edit2.Text+javaFileName;
  if Decompiled = true then
  begin
      if  defaultOpen.Checked = true  then
      begin

        ShellExecute(handle,'open',PChar(javaFileName),'','',SW_SHOWNORMAL);
      end
      else
        if viewOpen.Checked = true  then
        begin
           Memo1.Lines.LoadFromFile(javafileFulldir);
        end;
      if openJavaDir.Checked = true  then
        ShellExecute(handle,'open',PChar(edit2.Text),'','',SW_SHOWNORMAL);
  end
  else
      MessageDlg('请先进行反编译,然后再应用!',mtInformation,[mbOK], 0);

end;

procedure TForm1.BitBtn13Click(Sender: TObject);
var
  temp:integer;
begin
  form2.ShowModal;
  if  Edit4.Text<>''  then
      begin
        temp:=MessageDlg('原来的Class文件目录路径非空!是否用新选择覆盖原路径?',mtInformation,[mbYes,mbNo], 0);
        if temp = 6 then
          edit4.Text:=form2.ShellTreeView1.SelectedFolder.PathName+'\';
          openedClassDir:=true;
        if temp = 7 then
          MessageDlg('请确保原目录路径存在!',mtInformation,[mbOK], 0);
      end
   else
      begin
        Edit4.Text:=form2.ShellTreeView1.SelectedFolder.PathName+'\';
        openedClassDir:=true;
      end

end;

procedure TForm1.BitBtn14Click(Sender: TObject);

var
  temp:integer;
begin
   form2.ShowModal;
   if  Edit5.Text<>''  then
      begin
        temp:=MessageDlg('原来保存路径非空!是否用新选择覆盖原路径?',mtInformation,[mbYes,mbNo], 0);
        if temp = 6 then
          edit5.Text:=form2.ShellTreeView1.SelectedFolder.PathName+'\';
          savedJavaDir:=true;
        if temp = 7 then
          MessageDlg('请确保原保存路径的正确性!',mtInformation,[mbOK], 0);
      end
   else
      begin
        Edit5.Text:=form2.ShellTreeView1.SelectedFolder.PathName+'\';
        savedJavaDir:=true;
      end
end;


procedure TForm1.DecompilesClassDirClick(Sender: TObject);
var
   classdir:string;
begin
if (openedClassDir=true) and (savedJavaDir=true) then
  begin
      classdir:=edit4.Text;
      WinExec(PChar('jad.exe -o -d '+edit5.Text+' -s java '+classdir+'*.class'),SW_HIDE);
       // SW_HIDE隐藏这个窗口,并激活另一个窗口。
  end
  else
    MessageDlg('请先选定Class文件目录和Java源文件保存路径,否则无法进行右反编译!',mtInformation,[mbOK], 0);
  FileListBox1.Directory:=Edit5.Text;
  FileListBox1.Update;
end;

procedure TForm1.ViewFileClick(Sender: TObject);
begin
    if FileListBox1.FileName<>'' then
        Memo1.Lines.LoadFromFile(FileListBox1.FileName)
    else
        MessageDlg('请先选定准备预览的Java源文件!',mtInformation,[mbOK], 0)
end;

procedure TForm1.OpenfileClick(Sender: TObject);
begin
    if FileListBox1.FileName<>'' then
        ShellExecute(handle,'open',PChar(ExtractFileName(FileListBox1.FileName)),'','',SW_SHOWNORMAL)
    else
        MessageDlg('请先选定准备打开的Java源文件!',mtInformation,[mbOK], 0)

end;

procedure TForm1.ClearViewClick(Sender: TObject);
begin
  Memo1.Clear;
end;


procedure TForm1.breakClick(Sender: TObject);
begin
      FileListBox1.Directory:=Edit5.Text;
      FileListBox1.Update;
end;



procedure TForm1.helpClick(Sender: TObject);
var
   Returnvalue : integer;
begin
    Returnvalue:=ShellExecute(handle,'open','GUIjad_Decompiles_Help.htm',nil,nil,SW_SHOWNORMAL);
    if ReturnValue <= 32 then
    case Returnvalue of
   0 : MessageBox(handle,'错误: 内存不足','Error ExploreWeb',0);
   ERROR_FILE_NOT_FOUND:
     begin
          if ShellExecute(handle,'open','C:\Program Files\GUIjad-Decompiles\GUIjad_Decompiles_Help.htm',nil,nil,SW_SHOWNORMAL)=ERROR_FILE_NOT_FOUND then
              MessageBox(handle,'错误:没有找到文件,请到安装目录下找帮助文件(这是本软件唯一缺憾,作者暂时还解决不了这个问题,请原谅!)','Error ExploreWeb',0)
          else
              ShellExecute(handle,'open','C:\Program Files\GUIjad-Decompiles\GUIjad_Decompiles_Help.htm',nil,nil,SW_SHOWNORMAL);
     end;
   ERROR_PATH_NOT_FOUND : MessageBox(handle,'错误: 目录错误,请到安装目录下找帮助文件','Error ExploreWeb',0);
   ERROR_BAD_FORMAT : MessageBox(handle,'错误: 错误的文件格式,请到安装目录下找帮助文件','Error ExploreWeb',0);
   // 各种错误信息
   else MessageBox(handle,PChar('错误号: '+IntToStr(Returnvalue)+'在 ShellExecute中(软件结构问题,请原谅!)'),'Error ExploreWeb',0)
   end
end;

procedure TForm1.Label6Click(Sender: TObject);
var
 app:Variant;
begin
   app:=CreateOleObject('InternetExplorer.Application');
   app.navigate('http://www.geocities.com/SiliconValley/Bridge/8617/jad.html');
   app.visible:=TRUE;
end;
end.

⌨️ 快捷键说明

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