الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

احصل على output لبرنامج كنسول

مغلق
بدأه DarkGAMED في 14 مايو 2002 · 5 رد · 740 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

وجدت كود منذ فترة, ولم اعطة اي اهتمام. واكن بعد ان اعطانا الأستاذ SUM الكمبايلر و جدت ان الكود يمكن ان يكون مفيذ.

الفكرة هي تنفيذ برنامج كونسول و الحصول على الخرج output عبر برنامج الدلفي.

لذلك اعتقد انه ممكن كتابة محرر editor بالدلفي للغة برمجة ما او لكمبايلر, او اي شي اخر.

(لغة برمجة الألعاب DarkBASIC الأصدار الأول لديها محرر متعب :'( , ولذلك هناك بعض المحررات التي تسهل كتابة الكود و هذة المحررات ما هي الا برامج :)

تستخدم الكمبايلر الخاص ب DarkBASIC لتصريف/تنفيذ/ستأب البرامج)

لأخذ فكرة دعنا أولا نكتب برنامج كونسول بسيط, ثم ننفذة عبر برنامج الدلفي.

cons.exe

--------:

1- أغلق كل البرامج.

2- أختر File/New/Other...

3- Consol Application

4- هذة الصورة النهائية للملف:

program cons;

{$APPTYPE CONSOLE}

uses

SysUtils;

begin

{ TODO -oUser -cConsole Main : Insert code here }

if ParamStr(1) = '-c' Then

writeln('The File Name is '+ ParamStr(2))

else

begin

writeln('command Line Error');

writeln('Syntax: cons -c filename');

end;

end.

5- ابني البرنامج اتحصل في النهايه على cons.exe

#2

والان دعنا ننفذ هذا cons.exe عبر برنامج دلفي.

وسوف نستخدم الكود الذي كتبه Superhausi

------------------------------------------

...run a console application and get its output ?

Author: Superhausi

Homepage: http://www.superhausi.ch/

{

This function runs a program (console or batch) and adds its output

to Memo1

}

{....}

private

function RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;

{....}

function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;

var

start: TStartupInfo;

procInfo: TProcessInformation;

tmpName: string;

tmp: Windows.THandle;

tmpSec: TSecurityAttributes;

res: TStringList;

return: Cardinal;

begin

Result := False;

try

{ Setze ein Temporäres File }

{ Set a temporary file }

tmpName := 'Test.tmp';

FillChar(tmpSec, SizeOf(tmpSec), #0);

tmpSec.nLength := SizeOf(tmpSec);

tmpSec.bInheritHandle := True;

tmp := Windows.CreateFile(PChar(tmpName),

Generic_Write, File_Share_Write,

@tmpSec, Create_Always, File_Attribute_Normal, 0);

try

FillChar(start, SizeOf(start), #0);

start.cb := SizeOf(start);

start.hStdOutput := tmp;

start.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;

start.wShowWindow := SW_Minimize;

{ Starte das Programm }

{ Start the program }

if CreateProcess(nil, PChar(_exeName + ' ' + _cmdLine), nil, nil, True,

0, nil, PChar(_dirName), start, procInfo) then

begin

SetPriorityClass(procInfo.hProcess, Idle_Priority_Class);

WaitForSingleObject(procInfo.hProcess, Infinite);

GetExitCodeProcess(procInfo.hProcess, return);

Result := (return = 0);

CloseHandle(procInfo.hThread);

CloseHandle(procInfo.hProcess);

Windows.CloseHandle(tmp);

{ Die Ausgaben hinzufügen }

{ Add the output }

res := TStringList.Create;

try

res.LoadFromFile(tmpName);

Memo1.Lines.AddStrings(res);

finally

res.Free;

end;

Windows.DeleteFile(PChar(tmpName));

end

else

begin

Application.MessageBox(PChar(SysErrorMessage(GetLastError())),

'RunCaptured Error', MB_OK);

end;

except

Windows.CloseHandle(tmp);

Windows.DeleteFile(PChar(tmpName));

raise;

end;

finally

end;

end;

-----------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);

begin

RunCaptured('C:', 'cons.exe', '-c Filename.txt');

end;

____________________________________________________________

بنسبة RunCaptured('C:', 'cons.exe', '-c Filename.txt');v

*- البارامتر الأول هو الدليل الجذر الذي يحتوي cons.exe

مثلا: c:MyDelphiProgrunConsolecons.exe فأن الدليل الجذر هو c:

*- نفترض ان الملف cons.exe موجود في نفس الدليل.

_____________________________________________________________________

ارجو من كل من لديه اي افكار للأستفادة من هذا الكود ان لا يبخل علينا.

وتقبلو خالص تحياتي ;)

#3

اهلاً وسهلاً بك اخي DarkGAMED

وفي الحقيقة ان فكرتك اعجبتني بالمره :D

وطبعاً انا جربت الكود وهو شغال 100%

وفكرت هذا الكود انه يقوم بتشغيل برنامج معين وعمل اجرائات علية ومن ثم عرض النتائج

وبالنسبة لفكرتك هل تريد ان تقوم بعمل بيئة برمجة تعتمد على كمبايلر لغة DarkBASIC ؟؟؟؟؟

طبعاً ممكن اساعدك انا في ذلك ولو يحصل انك تعطينا فكرة قبل عن هذه اللغة ;)

وتقبل اطيب تحياتي اخوك SUM

#4

مشكووور استادي SUM , دائما نتعلم منك الافكار الرائعة :)

في الحقيقة كنت افكر في هذا الأمر, ولكن انا مازلت مبتدأ في هذا المجال :D

راح افكر في مل قلت بس بعد ما تنتهي فترة الأمتحانات :P

مع تحياتي :)

#5

اهلاً وسهلاً بك اخي DarkGAMED

ونحن بأنظارك بس لاتتأخر علينا ;)

وتقبل اطيب تحياتي اخوك SUM

#6

صراحة انا حاولت اطبق .. لكن ما فحت !!!!!! ممكن حد يفهمنا شو كان عم بيصير فوق بالظبط ؟؟ :mad::mad:

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…