الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن تشغيل برنامج تنفيذى Exe مضمن داخل نموذج

بدأه هانى عوض في 22 مارس 2009 · 8 رد · 2,786 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبة

المشكلة هى : كيف يمكن تشغيل ملف تنفيذى وليكن الآلة الحاسبة مضمنة داخل محتوى النموذج

قمت باستخدام فكرة Parent / Child ولكنها تعمل جيداً داخل الفيجوال بيسك وهذا هو الكود

Option Explicit
Private Const GW_HWNDNEXT As Long = 2
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private old_parent As Long
Private child_hwnd As Long

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Const MF_BYPOSITION As Long = &H400&
Private Const MF_REMOVE As Long = &H1000&

Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Private Type RECT
	Left As Long
	Top As Long
	Right As Long
	Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Private Function InstanceToWnd(ByVal target_pid As Long) As Long
Dim test_hwnd As Long
Dim test_pid As Long
Dim test_thread_id As Long
	test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
	Do While test_hwnd <> 0
		If GetParent(test_hwnd) = 0 Then
			test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
			If test_pid = target_pid Then
				InstanceToWnd = test_hwnd
				Exit Do
			End If
		End If
		test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
	Loop
End Function

Private Sub cmdFree_Click()
	SetParent child_hwnd, old_parent
	cmdRun.Enabled = True
	cmdFree.Enabled = False
End Sub

Private Sub cmdRun_Click()
Dim pid As Long
Dim buf As String
Dim buf_len As Long
Dim R As RECT
	pid = Shell(txtProgram.Text, vbNormalFocus)
	If pid = 0 Then
		MsgBox "Error starting program"
		Exit Sub
	End If
	GetWindowRect InstanceToWnd(pid), R
	MoveWindow InstanceToWnd(pid), 0, 0, R.Right - R.Left, R.Bottom - R.Top, 1
	MakeUnMoveable InstanceToWnd(pid)
	child_hwnd = InstanceToWnd(pid)
	old_parent = SetParent(child_hwnd, picChild.hwnd)
	Refresh
	cmdRun.Enabled = False
	cmdFree.Enabled = True
End Sub

Private Sub MakeUnMoveable(Handle As Long)
Dim hSysMenu As Long, nCnt As Long
' Get handle to our form's system menu
' (Restore, Maximize, Move, close etc.)
hSysMenu = GetSystemMenu(Handle, False)

If hSysMenu Then
	' Get System menu's menu count
	nCnt = GetMenuItemCount(hSysMenu)
	If nCnt Then
		' Menu count is based on 0 (0, 1, 2, 3...)
		RemoveMenu hSysMenu, nCnt - 6, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
		DrawMenuBar Handle
		' Force caption bar's refresh. Disabling X button
		SetWindowText Handle, "Embedded Calc"
	End If
End If
End Sub

Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub

ولكن عند التطبيق داخل الأكسس لم يعمل وظهرت عدة مشاكل التحويل من Vb إلى Vba فى خواص الدوال

مرفق المثال بالفيجوال بيسك

تقبلوا فائق تحياتى

StartInFixedWindow.rar

#2

بســم الله الـرحمــن الرحيــم

مرحباً معلم هاني :D...

إن كنت فهمتك صح فالموضوع سهل جداً بالأكسيس

ضع العبارة التالية تحت أي زر أمر

Shell("C:\WINDOWS\System32\CALC.EXE", 1)

وطبعاً يتم التغيير حسب مسار وجود البرنامج التنفيذي المطلوب

تم تعديل هذه المشاركة بواسطة ايهاب عثمان في 22 مارس 2009 في 10:11

طبتم واهتديتم :)

===================================

إقرأ معي

رابط متجدد لكتاب أقرؤه فشاركني فيه

======

فضائح الرافضة ومخازيهم حين يكتب عنها أحد خصومهم فهذا شيء متوقع ،فإن كتب عنها أحدهم فهو شيء غير مألوف ، وإن كان الكاتب أحد مراجعهم وأخص خواصهم فهذا شيء متناهي الغرابة ، وإن علمت أن الكاتب قد قتل بعد نشر الكتاب فقد حان وقت قراءة الكتاب

الكتاب :

حسين الموسوي - لله تم للتاريخ ، كشف الأسرار وتبرئة الأئمة الأطهار

اضغط على الصورة لتحميل الكتاب

%E1%E1%E5%20%CB%E3%20%E1%E1%CA%C7%D1%ED%CE.jpg

-----------

كتب سابقة

سعد الدين الشاذلي - مذكرات حرب أكنتوبر

#3

تحياتي للأخ / هاني

والأستاذ / إيهاب

ولكن اتوقع يا استاذ إيهاب

انه الأخ هاني يريد فتح التطبيق داخل الفورم مثل النموذج الفرعي :blink:

وهنا تكن الصعوبه في نظري :)

#4

معلمى الكبير ايهاب عثمان

شكراً لسرعة الرد

اقتباس
Shell("C:\WINDOWS\System32\CALC.EXE", 1)

ولكن بالرغم من أن هذا الكود يقوم بتشغيل الملف ويضعه بالتركيز ولكن إذا كان النموذج المستخدم فى استدعائة أخذ خاصية التركيز وفى الحدث أيضاً تختفى الآلة الحاسبة وراء النموذج

اقتباس
ولكن اتوقع يا استاذ إيهاب

انه الأخ هاني يريد فتح التطبيق داخل الفورم مثل النموذج الفرعي

وهنا تكن الصعوبه في نظري

نعم أخى أبو يـــ KNDR ــارا

ومن هنا جاءت فكرة أن تكون الحاسبة مضمنة داخل مربع نص مثلاً داخل النموذج ولا يمكن تحريكها

كالمثال المرفق

تحياتى للجميع

#5

طيب اذا كان التركيز هو المشكلة فقم بابطال مفعوله بالنسبة للنموذج في السطر السابق لسطر استدعاء الملف التنفيذي

ثم قم باعادة الخاصية للنموذج تحت حدث اخر من احداث النهوذج وهو On Activate

هذا حل

اما ان يكون الملف مضمنا كهدف بحد ذاته فسأحاول البحث إن شاء الله

طبتم واهتديتم :)

===================================

إقرأ معي

رابط متجدد لكتاب أقرؤه فشاركني فيه

======

فضائح الرافضة ومخازيهم حين يكتب عنها أحد خصومهم فهذا شيء متوقع ،فإن كتب عنها أحدهم فهو شيء غير مألوف ، وإن كان الكاتب أحد مراجعهم وأخص خواصهم فهذا شيء متناهي الغرابة ، وإن علمت أن الكاتب قد قتل بعد نشر الكتاب فقد حان وقت قراءة الكتاب

الكتاب :

حسين الموسوي - لله تم للتاريخ ، كشف الأسرار وتبرئة الأئمة الأطهار

اضغط على الصورة لتحميل الكتاب

%E1%E1%E5%20%CB%E3%20%E1%E1%CA%C7%D1%ED%CE.jpg

-----------

كتب سابقة

سعد الدين الشاذلي - مذكرات حرب أكنتوبر

#6

صراحة فكرة عمل الملف التنفيذى داخل النموذج هى الهدف

مرفق مثال Exe لمن لايوجد لديه VB

StartInFixed.rar

#7

أخي الفاضل هاني عوض

يتمتع برنامج فيجوال بيسك 6 أو فيجوال بيسك دوت نت الاصدار 2005 او 2008

علي آداه لاضافة مشروع جديد وهذا المشروع الجديد New Project مخصص لتحزيم البرنامج اوخراجة بصيغة ملف تنفيذي EXE

وعند التحزيم يتيح لك برنامج فيجوال بيسك تضمين ملفات خارجية كمثال يمكنك تضمين ملف Execl مع المشروع أو اكسس او ملف مثلا

دوت نت فريم وورك أو ملف تنفيذي آخر مثل الاله الحاسبة

لكن برنامج الاكسس اعتقد ان نموذج الاكسس لا يستطيع فعل ذلك لان البرنامج اصلا لا يحتوي علي آداه او خيار يمكنك من تضمين شيء بداخل المشروع

لكن الشيء الوحيد الذي يمكنك من فعل ذلك هو استخدام لبرنامج Microsoft developer Extension

والذي سيمكنك من تضمين اي ملف خارجي مع ملف Setup

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

الاستاذ الغالي / محمد

ما يطلبه الاخ ( هاني ) شيء اخر

انظر للمرفق وما يريده هو فكرة فقط

عند تشغيل البرنامج ثم عمل رن

سنجد انه يشغل الالة الحاسبه وهذا عادي

لكن المطلوب هو شفط الالة الحاسبه لداخل فورم البرنامج لتصبح كانها جزء من البرنامج

طبعا الفكرة رائعه جدا

واتوقع انها فوق امكانيات الاكسس

ولكن لا يوجد مستحيل :)

#9

up

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…