المشاركات : 76
المواضيع 15
:
: 0
الإنتساب : Sep 2010
25-07-2018, 06:59 PM
(آخر تعديل لهذه المشاركة: 25-07-2018, 07:28 PM بواسطة محمد عبد العزيز.)
مرحبا :
اريد اشغل برنامج خارجي في الفورم الدلفي استعملت دالةshellexucte
Fom1.window:=shellexecut(handale,'open','notepad.exe',nill,nill,sw_shownormal);
اعرف أن الكود خاطئ
هل يمكن تشغيل برنامج خارجي في مكون form
أن يوجد مكون في بيئة الدلفي يقوم بهذه العمليه
سؤال آخر حين اشغل برنامج خارجي في الدلفي هل يمكن ان اتحكم فيه من الدلفي مثلا لدى البرنامج الخارجي اختصار alt+f4للقيام بتكبير الشاشة هل يمكن ان اضع كود في الدلفي بحيث يفتح البرنامج اليا بشاشة كبيرة
وشكرا مسبق على المساعدة
المشاركات : 216
المواضيع 30
:
: 26
الإنتساب : Aug 2017
السلام عليكم
الدالة ShellExecute ترجع لك قيمة أن كانت العملية ناجحة ام لا ... للتحكم في البرامج الخارجية يجب أن تبحث كيف تشتغل البرامج بعدها ابحث عن كيفية التعامل مع البرامج الخارجية في دلفي....كمثال تفقد الردود هنا :
https://stackoverflow.com/questions/7968...elphi-form
موفق.
:: من يملك المعلومة يملك الميدان ::
المشاركات : 76
المواضيع 15
:
: 0
الإنتساب : Sep 2010
المثال في الرابط المرفق
يقوم بفتح نوت باد وغلق التطبيق أو الفورم في الدلفي
هل لديك طريقة للتعامل مع البرامج الخارجية
المشاركات : 400
المواضيع 2
:
: 274
الإنتساب : Nov 2009
ماذا تقصد بـ "التعامل" مع البرامج الخارجية ؟
من قال حاد عن أصله أو قال مات فقد كذب
المشاركات : 76
المواضيع 15
:
: 0
الإنتساب : Sep 2010
مثل فتحه وتشغيله في مكون من مكونات دلفي اي داخل الفورم في دلفي دون أن تخرج منها وكدلك ارسال له اوامر فيه مسبقة مثل ما كتبت سابقا تكبير الشاشة alt+f4
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
السلام عليكم
بالنسبة لShellExecute استخدم خاصية البحث في المنتدى فهناك أكثر من موضوع/سؤال عنها
وهي ليست الطريقة الوحيدة لاستدعاء ملف تنفيذي...
بالنسبة لما تسال عنه لا اقول غير ممكن لكن صعب، انصحك بالاطلاع على بعص الكتب مثل Windows Graphics Programming: Win32 GDI and DirectDraw من الصيني Feng Yuan، صحيح الكتاب قديم لكنه قيم.
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
المشاركات : 76
المواضيع 15
:
: 0
الإنتساب : Sep 2010
بارك الله فيكم
الدالة أنا مجربها وتعمل بتشغيل البرنامج بقي لي أن اجعله داخل مكون في الدلفي حتى استطيع التعامل معه من داخل الدلفي
المشاركات : 216
المواضيع 30
:
: 26
الإنتساب : Aug 2017
(27-07-2018, 02:03 PM)وليد غديري كتب : بقي لي أن اجعله داخل مكون في الدلفي حتى استطيع التعامل معه من داخل الدلفي
الامر ليس سهل كما تتوقع , منطقيا انت تريد وضع برنامج (Notepad) مثلا هل فكرت ان المستعمل قد يقوم بتكبير او تصغير الشاشة ? ...ان تضع برنامج داخل فورم برنامج فقد مضيعة للوقت ... كما قال لك الاْستاذ فوق يجب ان تبحث عن WIN32 GDI لانك سوف تتعامل مع الرسوميات.
:: من يملك المعلومة يملك الميدان ::
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
28-07-2018, 01:16 PM
(آخر تعديل لهذه المشاركة: 28-07-2018, 01:20 PM بواسطة Agmcz.)
ألق نظرة هنا
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;
سبحان الله وبحمده سبحان الله العظيم
المشاركات : 76
المواضيع 15
:
: 0
الإنتساب : Sep 2010
منطقيا ممكن بما أن الدلفي لغة برمجة فمن الطبيعي جدا برمجة اي شئ حتى لو كان صعب
لمدا بالدات داخل فورم ببسطاة أنا لدي برنامج معين واريد أن اربطه مع الدلفي اي ستكون المدخلات من الدلفي تمرر للبرنامج الثاني
في الاخير أقدر كل مجهوداتكم أكرر شكري وتقديري للجميع