delphi4arab منتديات دلفي للعرب

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

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

وشكرا مسبق على المساعدة
السلام عليكم
الدالة ShellExecute ترجع لك قيمة أن كانت العملية ناجحة ام لا ... للتحكم في البرامج الخارجية يجب أن تبحث كيف تشتغل البرامج بعدها ابحث عن كيفية التعامل مع البرامج الخارجية في دلفي....كمثال تفقد الردود هنا :
https://stackoverflow.com/questions/7968...elphi-form
موفق.
المثال في الرابط المرفق
يقوم بفتح نوت باد وغلق التطبيق أو الفورم في الدلفي

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

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

الامر ليس سهل كما تتوقع , منطقيا انت تريد وضع برنامج (Notepad) مثلا هل فكرت ان المستعمل قد يقوم بتكبير او تصغير الشاشة ? ...ان تضع برنامج داخل فورم برنامج فقد مضيعة للوقت ... كما قال لك الاْستاذ فوق يجب ان تبحث عن WIN32 GDI لانك سوف تتعامل مع الرسوميات.
ألق نظرة هنا
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; 
منطقيا ممكن بما أن الدلفي لغة برمجة فمن الطبيعي جدا برمجة اي شئ حتى لو كان صعب
لمدا بالدات داخل فورم ببسطاة أنا لدي برنامج معين واريد أن اربطه مع الدلفي اي ستكون المدخلات من الدلفي تمرر للبرنامج الثاني
في الاخير أقدر كل مجهوداتكم أكرر شكري وتقديري للجميع
الصفحات : 1 2