المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : جعل memo واجهة للDOS


hamam2008
09-04-2010, 12:03 PM
السلام عليكم
يعد التحية :
كيف استعمل TMemo مع الDOS
أي تطبيق اوامر الDOS في واجهة الدلفي عبر TMemo
أو اي مركبة اخرى بارك الله فيكم

kachwahed
09-04-2010, 12:32 PM
وعليكم السلام ورحمة الله

{
The example runs 'chkdsk.exe c:\' and displays the output to Memo1

Put a TMemo (Memo1) and a TButton (Button1) in your form Put this code in the
OnCLick of Button1:
}

procedure TForm1.Button1Click(Sender: TObject);

procedure RunDosInMemo(DosApp:String;AMemo:TMemo);
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes;
ReadPipe,WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
With Security do begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
if Createpipe (ReadPipe, WritePipe,
@Security, 0) then begin
Buffer := AllocMem(ReadBuffer + 1);
FillChar(Start,Sizeof(Start),#0);
start.cb := SizeOf(start);
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES +
STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;

if CreateProcess(nil,
PChar(DosApp),
@Security,
@Security,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
start,
ProcessInfo)
then
begin
repeat
Apprunning := WaitForSingleObject
(ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT);
Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil);
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
AMemo.Text := AMemo.text + String(Buffer);
until (BytesRead < ReadBuffer);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;

begin {button 1 code}
RunDosInMemo('chkdsk.exe c:\',Memo1);
end
بالتوفيق.

paix144
09-04-2010, 03:05 PM
و عليكم السلام و رحمة الله
أو هذا
http://www.delphi4arab.com/forum/showpost.php?p=15693&postcount=1

hamam2008
10-04-2010, 02:29 AM
السلام عليكم
حقيقة ما عساي ان اقول الا كلمات ادعوا الله عز وجل ان يستجيب لها
جازاكم الله كل خير ورزقكم الفردوس ان شاء الله و زادكم علما
لقد تقدمت في مشروعي 80% بفضل الله ثم بفضلكم يا إخوتي
و مزال لدي اشكال لإتمام البرنامج و هو
الوصول الى واجهة TELNET عبر MEMO أي عند كتابة أمر TELNET لا يستجيب و على سبيل المثال
الأوامر التالية
TELNET
O
192.168.1.1
usernam:admin
password:admin
reset
كيف تطبيقها في memo دفعة واحدة
دمتم لنا اساتذتنا بارك الله فيكم

Lam.Abdeldjalil
16-01-2011, 10:20 PM
السلام عليكم و رحمة الله

إضافة لما ذكره الأستاذ kachwahed

في الدلفي 2009 و + يجب إضافة

...
UniqueString(DosApp);
if CreateProcess(nil,
PChar(DosApp),
...
و إلا واجهت :

Exception class EAccessViolation with message 'Access violation at address 7C82F284 in module 'kernel32.dll'. Write of address 004B21F2'
...

UniqueString is used only in cases where an application modifies the contents of a string after



Casting the string to a PAnsiChar or PWideChar in Delphi ...


و السلام عليكم