delphi4arab منتديات دلفي للعرب
تشغيل برنامج خارجي في الدلفي - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : تشغيل برنامج خارجي في الدلفي (/showthread.php?tid=9606)

الصفحات: 1 2


تشغيل برنامج خارجي في الدلفي - وليد غديري - 25-07-2018

مرحبا :
اريد اشغل برنامج خارجي في الفورم الدلفي استعملت دالةshellexucte
Fom1.window:=shellexecut(handale,'open','notepad.exe',nill,nill,sw_shownormal);

اعرف أن الكود خاطئ
هل يمكن تشغيل برنامج خارجي في مكون form
أن يوجد مكون في بيئة الدلفي يقوم بهذه العمليه
سؤال آخر حين اشغل برنامج خارجي في الدلفي هل يمكن ان اتحكم فيه من الدلفي مثلا لدى البرنامج الخارجي اختصار alt+f4للقيام بتكبير الشاشة هل يمكن ان اضع كود في الدلفي بحيث يفتح البرنامج اليا بشاشة كبيرة

وشكرا مسبق على المساعدة


RE: تشغيل برنامج خارجي في الدلفي - AX302 - 25-07-2018

السلام عليكم
الدالة ShellExecute ترجع لك قيمة أن كانت العملية ناجحة ام لا ... للتحكم في البرامج الخارجية يجب أن تبحث كيف تشتغل البرامج بعدها ابحث عن كيفية التعامل مع البرامج الخارجية في دلفي....كمثال تفقد الردود هنا :
https://stackoverflow.com/questions/796883/how-to-shell-to-another-app-and-have-it-appear-in-a-delphi-form
موفق.


RE: تشغيل برنامج خارجي في الدلفي - وليد غديري - 25-07-2018

المثال في الرابط المرفق
يقوم بفتح نوت باد وغلق التطبيق أو الفورم في الدلفي

هل لديك طريقة للتعامل مع البرامج الخارجية


RE: تشغيل برنامج خارجي في الدلفي - h-farid - 26-07-2018

ماذا تقصد بـ "التعامل" مع البرامج الخارجية ؟


RE: تشغيل برنامج خارجي في الدلفي - وليد غديري - 26-07-2018

مثل فتحه وتشغيله في مكون من مكونات دلفي اي داخل الفورم في دلفي دون أن تخرج منها وكدلك ارسال له اوامر فيه مسبقة مثل ما كتبت سابقا تكبير الشاشة alt+f4


RE: تشغيل برنامج خارجي في الدلفي - محمد عبد العزيز - 27-07-2018

السلام عليكم
بالنسبة لShellExecute استخدم خاصية البحث في المنتدى فهناك أكثر من موضوع/سؤال عنها
وهي ليست الطريقة الوحيدة لاستدعاء ملف تنفيذي...
بالنسبة لما تسال عنه لا اقول غير ممكن لكن صعب، انصحك بالاطلاع على بعص الكتب مثل Windows Graphics Programming: Win32 GDI and DirectDraw من الصيني Feng Yuan، صحيح الكتاب قديم لكنه قيم. 




RE: تشغيل برنامج خارجي في الدلفي - وليد غديري - 27-07-2018

بارك الله فيكم
الدالة أنا مجربها وتعمل بتشغيل البرنامج بقي لي أن اجعله داخل مكون في الدلفي حتى استطيع التعامل معه من داخل الدلفي


RE: تشغيل برنامج خارجي في الدلفي - AX302 - 28-07-2018

(27-07-2018, 02:03 PM)وليد غديري كتب : بقي لي أن اجعله داخل مكون في الدلفي حتى استطيع التعامل معه من داخل الدلفي

الامر ليس سهل كما تتوقع , منطقيا انت تريد وضع برنامج (Notepad) مثلا هل فكرت ان المستعمل قد يقوم بتكبير او تصغير الشاشة ? ...ان تضع برنامج داخل فورم برنامج فقد مضيعة للوقت ... كما قال لك الاْستاذ فوق يجب ان تبحث عن WIN32 GDI لانك سوف تتعامل مع الرسوميات.


RE: تشغيل برنامج خارجي في الدلفي - Agmcz - 28-07-2018

ألق نظرة هنا
Host a process window inside your applications window
الكود مكتوب بـ سي شارب
الجزء المهم منه الدالة SetParent

PHP كود :
function GetMainWindowHandleByPID(const PID: THandle): THandle;
type
  PEnumInfo 
= ^TEnumInfo;
 
 TEnumInfo = record
    ProcessID
: DWORD;
 
   HWND: THandle;
 
 end;
 
 function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;
 
 var
    PID
: DWORD;
 
 begin
    GetWindowThreadProcessID
(Wnd, @PID);
 
   Result := (PID <> EI.ProcessID) or
 
     (not IsWindowVisible(WND)) or
 
     (not IsWindowEnabled(WND));
 
   if not Result then
      EI
.HWND := WND;
 
 end;
 
 function FindMainWindow(PID: DWORD): DWORD;
 
 var
    EI
: TEnumInfo;
 
 begin
    EI
.ProcessID := PID;
 
   EI.HWND := 0;
 
   EnumWindows(@EnumWindowsProc, Integer(@EI));
 
   Result := EI.HWND;
 
 end;
begin
  if PID 
<> 0 then
    Result 
:= FindMainWindow(PID)
 
 else
    Result 
:= 0;
end;

procedure LoadApplication(const Path: string; hParent: THandle);
var
 
 SI: TStartupInfo;
 
 PI: TProcessInformation;
 
 MainWindow: THandle;
begin
  FillChar
(SI, SizeOf(TStartupInfo), #0);
 
 if CreateProcess(PChar(Path), nil, nil, nil, True, 0, nil, nil, SI, PI) then
  begin
    Sleep
(500);
 
   MainWindow := GetMainWindowHandleByPID(PI.dwProcessId);
 
 end;
 
 SetParent(MainWindow, hParent);      // Set the process parent window to the window we want
 
 SetWindowPos(MainWindow, 0, 0, 0, 0, 0, $0001 or $0040);       // Place the window in the top left of the parent window without resizing it
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadApplication
('c:\windows\system32\notepad.exe', Form1.Handle);
end; 



RE: تشغيل برنامج خارجي في الدلفي - وليد غديري - 28-07-2018

منطقيا ممكن بما أن الدلفي لغة برمجة فمن الطبيعي جدا برمجة اي شئ حتى لو كان صعب
لمدا بالدات داخل فورم ببسطاة أنا لدي برنامج معين واريد أن اربطه مع الدلفي اي ستكون المدخلات من الدلفي تمرر للبرنامج الثاني
في الاخير أقدر كل مجهوداتكم أكرر شكري وتقديري للجميع