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

كيف يتخاطب برنامجين بالاعتماد على Api

بدأه prof.programer في 12 أغسطس 2009 · 2 رد · 1,090 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني الاعضاء لدي مشكلة واجهتني في اطار تطويري لنظام و اضطررت الى التالي:

لدي نظام قمت بتطويره يقوم بمهام معينة و لكن المشكلة انه يتشارك مع برنامج اخر في موارد الملفات فيحصل احيانا خطا يضطر البرنامج الاخر الى الاغلاق و من هذه النقطة اضطررت الى

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

المشكلة تكمن في ان البرنامج الاخر يحتاج الى اسم مستخدم و كلمة سر حتى يبدا العمل (ملاحظة : شاشة ال login ليسست واجهة البداية و هذه مشكلة اضافية )

فانا مضطر الى التعامل مع موضوع api لتمرير النص الى حقل اسم المستخدم ثم تمرير نص اخر الى حقل الباسورد

و من ثم ضرورة جعل البرنامج يرسل امر تنفيذ زر الدخول

و حبذا لو تضيفون الى الافكار بعض النقاط لاني افكر في التحكم بقوائم البرنامج الاخر من داخل برنامجي لجعله قادرا على تنفيذ مهام

حبذا لو تكون الاكواد vb.net

شاكرا لكم على الافكار

اقتباس

أبكـــــي فتبتسم الجراح من البكا

فكـــــأنّها في كـل جارحـــــــة فـم ُ

يالابتسـام الجــرح كـم أبكي و كم

ينساب فــــوق شفاهه الحمرا دم

ُ

#2

توجد بعض الحلول لمشكلتك ما جاء بذهنى هو

1 - لا تقم بإغلاق البرنامج الأخر و لكن عوضا عن هذا قم بعمل Suspend للـ Main Thread لهذا البرنامج (هذا فى حالة ان البرنامج يعمل على Single Thread) و بعد الإنتهاء قم بعمل Resume له.

2 - فى حالة إغلاقك للبرنامج و فتحه من جديد ستحتاج لمعرفة Handle الخاص بشاشة الباسورد (ممكن معرفته بمعرفة اسم الشاشه) و بعدها ستحتاج معرفة الـ ID الخاص بكل من الـ Textboxes لإسم المستخدم و كلمة المرور و زر دخول او ايا كان اسمه و بعد ذلك قم بإستخدام الداله SendMessege مع WM_SETTEXT لوضع القيمه داخل مربع النص و BM_CLICK لمحاكاة الضغط على الزر.

3 - يمكنك استخدام DDE إذا كان البرنامج الأخر يتيح لك ذلك.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#3

االاخ محمد علاء

شاكرا لك جزيل الشكر

الأفكار كانت ممتازة و تم التعامل مع البرنامج الأخر عن طريق الكود التالي والذي يتم التلاعب فيه بحالة الـ process و تم وضع الكود لتعم الفائدة

Function CloseProc(ByVal ProcessName As String)
		'
		Dim Prc() As Process = Nothing
		Dim B As Boolean = False
		'
		Prc = Process.GetProcesses(My.Computer.Name)
		'
		For i As Integer = 0 To UBound(Prc)
			'
			'MsgBox(Prc(i).ProcessName)
			If Prc(i).ProcessName = ProcessName Then
				'

				Try
					'
					If Prc(i).PriorityClass = ProcessPriorityClass.Idle Then
						'
						Prc(i).PriorityClass = ProcessPriorityClass.Normal
					Else
						Prc(i).PriorityClass = ProcessPriorityClass.Idle
					End If
					'Prc(i).Kill()
					'B = True
					Exit For
				Catch ex As Exception
					'
					MsgBox("Error while try closing process", MsgBoxStyle.Critical, "ErrorCloseProc")
				End Try
			Else
				B = False
			End If
		Next
		'
		Return B
	End Function

في القريب العاجل ساقوم بتجهيز نفس العملية عن طريق messaging و find window و ... الخ لادخال القيم الى الحقول الخاصة بها لتتوسع الافكار عملياً

مع تحياتي

اقتباس

أبكـــــي فتبتسم الجراح من البكا

فكـــــأنّها في كـل جارحـــــــة فـم ُ

يالابتسـام الجــرح كـم أبكي و كم

ينساب فــــوق شفاهه الحمرا دم

ُ

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