المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
السلام عليكم
استعملت اجراء لاوامر الدوس من خلال الدلفي
Procedure getoutputdos
نجح الامر ولكن يتعطل البرنامج حتى نهاية التنفيذ
فما السبب وما الحل
المشاركات : 129
المواضيع 4
:
: 22
الإنتساب : Feb 2022
غريب جوجل لايعطي اي نتيجة عن هذا الاسم getoutputdos هل هذه دالة محلية ؟
المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
(11-02-2022, 09:29 PM)Ndagor كتب : غريب جوجل لايعطي اي نتيجة عن هذا الاسم getoutputdos هل هذه دالة محلية ؟
مرحبا
كلا وجدتها على احد المواقع اعتقد stackoverflow
انها تنفذ الامر لكن البرنامج يتوقف حتى تتم العملية كاملة ثم يعود لطبيعته
المشاركات : 134
المواضيع 72
:
: 0
الإنتساب : Aug 2015
و عليكم السلام و رحمة الله
للأسف،
استسمحك اخي الكريم ان انوه الى ان طريقة طرح الاشكال سئة جدا و لا تساعد من يطلع على الموضوع ان يجد حل للاشكال...
1- المشاركة الأولى مبهمة...
2- المشاركة الثانية لم ترفق فيها الخوارزمية (مع انها عندك) و اكتفيت فقط بذكر انك اخذتها من موقع ما...
لست ادري
!!!؟ كثير من المشاركات في قسم الأسئلة تحتاج الى
crystal ball لفهم الاشكال و طرح محاولة حله...
في هذه المشاركة لموضوع سابق، كان عندي نفس التعقيب و حصلت على هذه الاجابة :
https://delphi4arab.net/forum/showthread...0#pid54590
هذا تعليق الأخ:
إقتباس :ولا تكن قاسيا في ردك لأني أكلمك باللغة التي أفهمها وتفهما وإلا كلمتك بلغة لاتفهمها أنت ولا غير . على كل شكرا على تعليقك.
بعيد عن "الدوافع النفسية و سوء الفهم" طرح الاشكال يجب ان يكون عبر الأوامر
Code snippets التي لم تعمل و صور
Captures للاستثناءات التي يظهرها الـــ
Compiler/
Linker
و اصارحك القول اخي الكريم اني اطلعت على الموضوع في اول ساعات نشره و اهملت عمدا الرد بسبب طريقة طرحه...
كنت اتمنى ان يطلع الأعضاء على هذا الموضوع الذي كتبته بعضوية اخرى و ان يحاولوا اخذ فكرة و طرح الاشكال بطريقة تسهل و تربح الوقت لمن يريد المساعدة:
https://delphi4arab.net/forum/showthread.php?tid=11617
كل من 1 user says قال شكرا ل I3CT على المشاركة المفيدة1 user says Thank You to I3CT for this post
• jeanjamil
المشاركات : 129
المواضيع 4
:
: 22
الإنتساب : Feb 2022
هل جربت BeginThread التي تسمح بتنفيذ الامر في Thread مستقل مايمنع جمود البرنامج حتى نهاية العملية
المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
(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
المشاركات : 134
المواضيع 72
:
: 0
الإنتساب : Aug 2015
الأوامر التي ارفقتها في مشاركتك الأخيرة تحتوي على:
WaitForSingleObject(PI.hProcess,
INFINITE)
و هذا يحعل متابعة التنفيذ يتوقف الى غاية انتهاء عمل البرنامج المستهدف... (خصوصا اذا كان البرنامج المستهدف
ينتظر ان
يدخل المستخدم شئ ما)
انصحك ان تغير wShowWindow :=
SW_HIDE الى wShowWindow :=
SW_SHOWNORMAL لكي تفهم ما يطلبه البرنامج المستهدف...
إقتباس :لدي سؤال اخر في نفس الموضوع عن كيقية اضافة progressbar لمعرفة الوقت المتبقي لانهاء التنفيذ
اعتماد
ProgressBar معقد للحصول على
وقت معالجة ما يقوم به البرنامج المستهدف (لانه مستقل بذاته)
كحل اولي، اضافة فحص يتأثر بتحديد وقت الانتظار (
Time out)