11-02-2022, 08:42 AM
السلام عليكم
استعملت اجراء لاوامر الدوس من خلال الدلفي Procedure getoutputdos
نجح الامر ولكن يتعطل البرنامج حتى نهاية التنفيذ
فما السبب وما الحل
نجح الامر ولكن يتعطل البرنامج حتى نهاية التنفيذ
فما السبب وما الحل
(11-02-2022, 09:29 PM)Ndagor كتب : [ -> ]غريب جوجل لايعطي اي نتيجة عن هذا الاسم getoutputdos هل هذه دالة محلية ؟
إقتباس :ولا تكن قاسيا في ردك لأني أكلمك باللغة التي أفهمها وتفهما وإلا كلمتك بلغة لاتفهمها أنت ولا غير . على كل شكرا على تعليقك.
(12-02-2022, 01:07 PM)I3CT كتب : [ -> ]و عليكم السلام و رحمة الله
للأسف،
استسمحك اخي الكريم ان انوه الى ان طريقة طرح الاشكال سئة جدا و لا تساعد من يطلع على الموضوع ان يجد حل للاشكال...
1- المشاركة الأولى مبهمة...
2- المشاركة الثانية لم ترفق فيها الخوارزمية (مع انها عندك) و اكتفيت فقط بذكر انك اخذتها من موقع ما...
لست ادري !!!؟ كثير من المشاركات في قسم الأسئلة تحتاج الى crystal ball لفهم الاشكال و طرح محاولة حله...
في هذه المشاركة لموضوع سابق، كان عندي نفس التعقيب و حصلت على هذه الاجابة :
https://delphi4arab.net/forum/showthread...0#pid54590
هذا تعليق الأخ:
إقتباس :ولا تكن قاسيا في ردك لأني أكلمك باللغة التي أفهمها وتفهما وإلا كلمتك بلغة لاتفهمها أنت ولا غير . على كل شكرا على تعليقك.
بعيد عن "الدوافع النفسية و سوء الفهم" طرح الاشكال يجب ان يكون عبر الأوامر Code snippets التي لم تعمل و صور Captures للاستثناءات التي يظهرها الـــ Compiler/Linker
و اصارحك القول اخي الكريم اني اطلعت على الموضوع في اول ساعات نشره و اهملت عمدا الرد بسبب طريقة طرحه...
كنت اتمنى ان يطلع الأعضاء على هذا الموضوع الذي كتبته بعضوية اخرى و ان يحاولوا اخذ فكرة و طرح الاشكال بطريقة تسهل و تربح الوقت لمن يريد المساعدة:
https://delphi4arab.net/forum/showthread.php?tid=11617
شكرا احي على اهتمامك لكن في الحقيقة عند طرحي الموضوع كنت بعيدا جدا عن الحاسب فاضطررت ان اساله عبر الجوال حيث وجدت صعوبة في طرح السورس من الهاتف خاصة انه كان لدي سؤال اخر في نفس الموضوع عن كيقية اضافة progressbar لمعرفة الوقت المتبقي لانهاء التنفيذ
فعذرا من الجميع وهذا هو الكود
; procedure TForm4.GetDosOutput(CommandLine, WorkDir: string;aMemo : Tmemo)
var
; SA: TSecurityAttribute
; SI: TStartupInfo
; PI: TProcessInformation
; StdOutPipeRead, StdOutPipeWrite: THandle
; WasOK: Boolean
; Buffer: array[0..255] of AnsiChar
; BytesRead: Cardinal
; Handle: Boolean
begin
; AMemo.Lines.Add('Commencing processing...')
with SA do begin
; nLength := SizeOf(SA)
; bInheritHandle := True
; lpSecurityDescriptor := nil
end
; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0)
try
with SI do
begin
; FillChar(SI, SizeOf(SI), 0)
; cb := SizeOf(SI)
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES
wShowWindow := SW_HIDE
hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
hStdOutput := StdOutPipeWrite
hStdError := StdOutPipeWrite
end
; Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine)
nil, nil, True, 0, nil
PChar(WorkDir), SI, PI)
;CloseHandle(StdOutPipeWrite)
if Handle then
;application.ProcessMessages
try
repeat
WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil)
if BytesRead > 0 then
begin
Buffer[BytesRead] := #0
; AMemo.Text := AMemo.Text + string(Buffer)
end
until
not
WasOK
or (BytesRead = 0)
WaitForSingleObject(PI.hProcess, INFINITE)
finally
CloseHandle(PI.hThread)
; CloseHandle(PI.hProcess)
end
finally
; CloseHandle(StdOutPipeRead)
('') AMemo.Lines.Add
; ('*******************************') AMemo.Lines.Add
; AMemo.Lines.Add('Processing completed successfully.')
; ('*******************************') AMemo.Lines.Add
; ('') AMemo.Lines.Add
;end
;end
;end
إقتباس :لدي سؤال اخر في نفس الموضوع عن كيقية اضافة progressbar لمعرفة الوقت المتبقي لانهاء التنفيذاعتماد ProgressBar معقد للحصول على وقت معالجة ما يقوم به البرنامج المستهدف (لانه مستقل بذاته)