📄 unitjad.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 + -