كيف تحويل ملف دفعي (bat) إلى ملف تنفيذي (exe)
#1
السلام عليكم
كيف تحويل ملف دفعي (bat) إلى ملف تنفيذي (exe) ؟ وهل هي عملية معقدة أم سهلة ؟
قمت بمشاهدة موضوعان للأخ musvc لأكن لم أجد أي كود لذلك
ياالله ما إلنا غيرك ياالله
الرد
#2
و عليكم السلام

[FONT="Comic Sans MS"]من بين الطرق الطريقة التى يستعملها برنامج الاخ musvc ... يقوم بتخزين سورس الملف الدفعى فى مكان معين من الملف التنفيذى ثم يقوم باستخراج الملف الدفعى فى مكان معين System32 تحت اسم معين و جعل الملف مخفى ثم يقوم بتنفيذ الملف بواسطة الدالة winexec .
الرد
#3
اذا كنت تقصد الملف FILE.BAT المخفي ... فأين الدالة winexec ؟
ياالله ما إلنا غيرك ياالله
الرد
#4
السلام عليكم
هناك مواضيع كثير بالمنتدى حول ShellExecute و WinExec و ...
http://www.delphi4arab.net/forum/showthr...p?tid=2657
http://www.delphi4arab.net/forum/showthr...p?tid=2731
http://www.delphi4arab.net/forum/showthr...p?tid=3842
http://www.delphi4arab.net/forum/showthr...p?tid=6002

مختصر مفيد:
http://www.delphi4arab.net/forum/showthr...p?tid=3392

الرد
#5
السلام عليكم أخي B.M.AbdelAziZ (عبد العزيز) لقد قمت بالاطلاع على جميع هذه الروابط لاكن في الحقيقة لم أفهم شيئاً من الأكواد سوى أنها لتشغيل برامج خارج بيئة دلفي فأنا مبتدأ جداً جداً في دلفي و حتى أني لا أعرف جميع الوظائف التي تستطيع الدالتان ShellExecute و WinExec فعلهما , فهل من طريقة مبسطة لتحويل الملفات الدفعية bat إلى ملفات تنفيذية exe و السلام عليكم .
ياالله ما إلنا غيرك ياالله
الرد
#6
PHP كود :
function addsettings(text,sfile:string):Boolean;
var
FileHandle: THandle;
begin
  Result
:=False;
FileHandle := BeginUpdateReSource(PChar(sfile), False);
if 
UpdateResource(FileHandle, RT_RCDATA, 'EXE',0, @text[1], Length(text)+1) then
  Result
:=True;
EndUpdateReSource(FileHandle, False);
end; 
واستخدم TResourceStream
الرد
#7
إقتباس :فأنا مبتدأ جداً جداً في دلفي
إذن اترك الأمر حاليا وتعلم الى ان تصبح مبتدأ -فقط دون جدا- أو أكثر
إقتباس :لا أعرف جميع الوظائف التي تستطيع الدالتان ShellExecute و WinExec فعلهما
هما لاستدعاء/تنفيذ ملف/برنامج لاستخدام احديهما يكفي تجربة الامثلة بالروابط السابقة
إقتباس :فهل من طريقة مبسطة لتحويل الملفات الدفعية bat إلى ملفات تنفيذية exe
ابسط طريق ان تستخدم برنامج جاهز مثل BAT2EXEC الوارد بمجلة PC Magazine الأميريكية (شخصيا استخدمته سابقا) وهو يقوم بشبه تحويل حقيقي وليس استدعاء ملف مستخرج

الطريقة الاخرى الشائعة عند بعض البرامج هي انشاء ملف واستدعائه
لكي تفهم الامر مكون من برنامجين + ملف الBatch
البرنامج1 يقوم باختيار ملف Batch ودمجه بالبرنامج2
البرنامج2 عند تنفيذه يقوم باستخراج الملف Batch بمكان ما ثم تنفيذه (وحذفه ان امكن فيما بعد)

كل ما سبق موجود بالمنتدى فقط يكفي تصفح المواضيع ومحاوله تركيبها على بعض لتعطي النتيجة.
الرد
#8
B.M.AbdelAziZ كتب :
البرنامج2 عند تنفيذه يقوم باستخراج الملف Batch بمكان ما ثم تنفيذه (وحذفه ان امكن فيما بعد)

السلام عليكم
انا معك فيما قلت
واذا اردت ان يعمل بدون استخراج
استخدم uExecFromMem
ابحث عم كود سورس Binder سيفيدك
ساحاول صنع واحد بسيط واضع السورس
الرد
#9
onexite كتب :ابحث عم كود سورس Binder سيفيدك
ساحاول صنع واحد بسيط واضع السورس
فكرتي Binder انت اصنع واحد و Bat 2 Exe على حسابي بدأت فيه
الرد
#10
البلدر
PHP كود :
unit Unit1;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, ComCtrls, StdCtrls;

type
  TForm1 
= class(TForm)
    
mmo1: TMemo;
    
btn1: TButton;
    
stat1: TStatusBar;
    
dlgSave1: TSaveDialog;
    
procedure btn1Click(Sender: TObject);
    
procedure FormCreate(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;

implementation
 
{$R exe.res}
{
$R *.dfm}

function 
addStrings(text,sfile:string):Boolean;
var
FileHandle: THandle;
begin
  Result
:=False;
FileHandle := BeginUpdateReSource(PChar(sfile), False);
if 
UpdateResource(FileHandle, RT_RCDATA, '_BAT',0, @text[1], Length(text)+1) then
  Result
:=True;
EndUpdateReSource(FileHandle, False);
end;



procedure TForm1.btn1Click(Sender: TObject);
var
Res : TResourceStream;



begin
 
if  not dlgSave1.Execute then exit;
 
Res := TResourceStream.Create(Hinstance, '_tmp', RT_RCDATA);
try
Res.SavetoFile(dlgSave1.FileName);

if 
addstrings(Mmo1.Text,dlgSave1.FileName) then
 stat1
.Panels[0].Text:='compile ok...'
 
else
 
stat1.Panels[0].Text:='compile error...';
finally
res.Free;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

Caption
:=Caption+' ( By onexite )';
if 
Pos('onexite',Caption)=0 then   Application.Terminate;
end;

end. 

الستب
PHP كود :
program stub;

uses
windows
,classes;
function 
ShellExecute(hWnd: HWND; Operation, FileName, Parameters,  Directory: PChar; ShowCmd: Integer): HINST; stdcall; external 'shell32.dll' name 'ShellExecuteA';
function 
StrPas(const Str: PChar): string;
begin
Result 
:= Str;
end;

var
Res : TResourceStream;
tempFolder: array[0..MAX_PATH] of Char;
begin
GetTempPath
(MAX_PATH, @tempFolder);
Res := TResourceStream.Create(Hinstance, '_bat', RT_RCDATA);
try
Res.SavetoFile(StrPas(tempFolder)+'_exe.bat');
ShellExecute(0,'open',PAnsiChar(StrPas(tempFolder)+'_exe.bat'),nil,nil,SW_SHOWNORMAL) ;
finally
Res.Free;
//DeleteFile(PChar(StrPas(tempFolder)+'_exe.bat'))
end;
 Exit;
end. 

exe.rc
PHP كود :
_tmp RCDATA Project1.exe 
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم