السلام عليكم ورحمة الله وبركاته
اولا اعتذر لتأخيري في متابعة طلبي على المنتدى وذلك لاني والحمد لله مرضت قليلاً.
ثانيا إجراء التحقق يعمل كما ارسله الاستاذ I3CT لكني عدلت عليه حتى يقوم باختبار ملفين وليس ملف واحد فاصبح هناك مشكله ان الاجراء لا يقبل MessageBoxA(Handle, لماذا لا ادري , فهل يمكنني ارسال كود الوحدة كاملاً حتى يتم وضع ملاحظات من حضراتكم حتى استفيد منها ؟
للعلم الملف الذي اقوم بالتعديل عليه خاص بجهاز dvr حيث اني قمت بقراءة وحفظ نسخة من سوفت وير هذا الجهاز ولكن المشكله عند كتابة هذا الملف على جهاز اخر نفس النوع ونفس الهاردوير يفتح الجهاز ولكن تظهر رسالة ان السيريال غير صحيح ويجب ان ارجع للبائع فقمت بالتجربة على ملفين مختلفين لنفس نوعية الجهاز حتى حصلت على العنوان الذي يحوي معلومات التشفير الخاصة بالهاردوير فقمت بنسخها من سوفتوير الجهاز القديم وكتبت تلك الكتلة من البيانات الى الملف الجديد ثم كتب الملف الجديد الى الجهاز فعمل جيداً وبقيت مشكلة اخرى لا تهمني كثيراً .
انا اوضحت الموضوع كله لأوضح انني استطيع حل مشكلتي ببرنامج الهيكس ورك شوب فقط ولكني اتخذتها فرصة حتى اجرب ان اتعلم دلفي على اشياء تفيد عملي حتى اشعر بلذة النتيجة وايضا حتى تقابلني مشاكل اثناء البرمجة كي اتعلم عملي .
كود الوحدة اعلم ان به بعض الاخطاء ولكن ماذا يجب علي فعله لتحسين الكود ؟
كود :
unit UnitMain;
interface
uses
System.SysUtils, Vcl.Graphics, Vcl.Forms, Winapi.Windows,
Vcl.Dialogs, Vcl.Controls, Vcl.StdCtrls, System.Classes, Winapi.Messages, System.Variants;
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
btnModify: TButton;
Label1: TLabel;
btnSelectWorkFile: TButton;
btnSelectBadFile: TButton;
Label2: TLabel;
Label3: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
lblAuthor: TLabel;
procedure btnModifyClick(Sender: TObject);
procedure btnSelectWorkFileClick(Sender: TObject);
procedure btnSelectBadFileClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
// procedure btnModifyExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses unitLogin;
Type
ByteArray = array of Byte;
//=============================================
procedure notCorrectFile(okFile, badFile: string; var isErr: Boolean);
var
MS1, MS2: TMemoryStream;
okFileVal, badFileVal: integer;
begin
MS1 := TMemoryStream.Create;
MS2 := TMemoryStream.Create;
try
MS1.LoadFromFile(okFile);
MS1.Seek($00FE0008, soFromBeginning);
MS1.Read(okFileVal, 3);
MS2.LoadFromFile(badFile);
MS2.Seek($00FE0008, soFromBeginning);
MS2.Read(badFileVal, 3);
if IntToHex(okFileVal, 3) <> '304D43' then
begin
ShowMessage('Choose correct work file for Tdvr4i !');
isErr := True
end
else if IntToHex(badFileVal, 3) <> '304D43' then
begin
ShowMessage('Choose correct bad file for Tdvr4ii !');
isErr := True;
end
else
finally
begin
MS1.Free;
MS2.Free;
end;
end;
end;
//==============================================================================
function read_(FileName : string; Offset : DWORD; Length : DWORD; out bArray : ByteArray): Integer;
var
MS : TMemoryStream;
begin
MS := TMemoryStream.Create;
try
MS.LoadFromFile(FileName);
MS.Position := Offset;
SetLength(bArray, Length);
Result := MS.Read(bArray[0], Length);
finally
MS.Free;
end;
end;
//==============================================================================
function write_(FileName : string; Offset : DWORD; var bArray : ByteArray): Integer;
var
MS : TMemoryStream;
begin
Result := 0;
MS := TMemoryStream.Create;
try
MS.LoadFromFile(FileName);
MS.Position := Offset;
Result := MS.Write(bArray[0], Length(bArray));
MS.SaveToFile(fileName);
finally
MS.Free;
end;
end;
//==============================================================================
procedure TForm2.btnSelectWorkFileClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Edit1.Text := OpenDialog1.FileName;
end;
end;
//==============================================================================
procedure TForm2.btnSelectBadFileClick(Sender: TObject);
begin
if OpenDialog1.Execute() then
begin
Edit2.Text := OpenDialog1.FileName;
end;
end;
//==============================================================================
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
end;
//==============================================================================
procedure TForm2.btnModifyClick(Sender: TObject);
var
err : Boolean;
i : integer;
bArray: ByteArray;
okFile, badFile : string;
begin
okFile := Edit1.Text;
badFile := Edit2.Text;
try
if not FileExists(okFile) then
ShowMessage('Please select working file!')
else if not FileExists(badFile) then
ShowMessage('Please select bad file!')
finally
err := False;
end;
try
notCorrectFile(okFile, badFile, err);
if err then
Exit;
read_(okFile, $FDFFF0, $1de, bArray);
write_(badFile, $FDFFF0, bArray);
lblAuthor.Visible := False;
for i := 0 to 2 do
begin
Label1.Visible := True;
application.ProcessMessages;
sleep(400);
Label1.Visible := False;
application.ProcessMessages;
sleep(400);
end;
lblAuthor.Visible := True;
application.ProcessMessages;
Sleep(1000);
Application.Terminate;
except
ShowMessage('There''s been a problem!');
end;
end;
end.