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

كيف أتحكم في مخرجات برامج أخرى من داخل برنامجي

بدأه maajed555 في 9 ديسمبر 2008 · 16 رد · 1,672 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم وكل عام وانتم بخير

يا جماعة ابي اقوم بتصدير الحوارات الكتابية من برنامج

(Paltak)

إلى برنامجي ،، ثم أتصرف فيها من داخل برنامجي

وكيف أستطيع ان أتحكم في برامج أخرى من داخل برنامجي؟؟

ولكم جزيل الشكر والتقدير

:)

تم تعديل هذه المشاركة بواسطة maajed555 في 9 ديسمبر 2008 في 17:43

#2

يمكن عبر الأمر

SendKey

#3

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

Do you have dreams?

Do you think you can do anything and nothing impossibale?

Well think again , Dream less , and Never wish (Advice)!!

#4

الاخ فوفو ... هل يمكنك ضرب مثال على طريقة استخدام SendKey

الاخ Zius

اتمنى لك أمتع جو دافئ وهانئ حتى تمتعني بردك الساخن .... في انتظارك يالغالي :)

#5

وين فريق الاسعاف الطبي ،،،، شكل الخدمات اليوم مضروبة :)

وين اصحاب الوعود ، مشكلة لما واحد يوعد ولا يوفي بوعده ... والشاطر يفهم :)

بليزززززززززززززززز ابي شي مفيد في الموضوع .... ودمتم سالمين

#6

لا أتصور أن احد من الإخوة يعرف الجواب ثم يبخل به .....

ارجو من الإخوة التفاعل مع الموضوع ..أم أن السؤال صعب بحيث لا يعرف جوابه احد

:)

#7

يمكنك عمل ذلك من خلال تقنية DDE --- Dynamic Data Exchange

راجع هذه الروابط

http://msdn.microsoft.com/en-us/library/d2se9adx(VS.80).aspx

/index.ph...c+Data+Exchange

تم تعديل هذه المشاركة بواسطة عبدالفتاح حسن في 13 ديسمبر 2008 في 14:48

كن كالنخيل عن الأحقاد مرتفعا .. يرمى بصخر فيرمى أطيب الثمر

#8

الاخ / عبد الفتاح حسن ... شكرا لك على المشاركة

لكني بحاجة إلى مثال على استخدام هذه المكتبة للربط بين برنامجي وبين برنامج آخر

كما أن المكتبة بحاجة إلى شرح وافي ...

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

انتظر :)

#9

فى المثال المرفق مثال مع ملف وورد به الشرح

DDE.rar

كن كالنخيل عن الأحقاد مرتفعا .. يرمى بصخر فيرمى أطيب الثمر

#10

أخي عبد الفتاح حسن ... لك مني الشكر الجزيل على هذا المثال الجميل

يبقى لي سؤال ... لاني لاحظت أننا احتجنا أن نغير في خصائص البرنامج المسمى (Server)

وهو البرنامج الذي نستقبل منه البيانات إلى برنامجنا الخاص ... طيب

في البرامج الأخرى مثل (paltak) هل أستطيع استخدام نفس الطريقة لاستقبال التكست الحواري الكتابي إلى برنامجي؟؟؟؟

لأن برنامج البالتوك لا أدري هل خصائص برمجته تسمح بذلك أم لا ....

#11
maajed555 كتب:
وين فريق الاسعاف الطبي ،،،، شكل الخدمات اليوم مضروبة :)

وين اصحاب الوعود ، مشكلة لما واحد يوعد ولا يوفي بوعده ... والشاطر يفهم :)

بليزززززززززززززززز ابي شي مفيد في الموضوع .... ودمتم سالمين

اعتزر عن التاخر كان برد شديد جدا الحمد لله

المهم اليكم مشال عن برنامح يقوم بالحصول على العنوان address الموجود فى انترنت اكسبلورار 7 وايضا يمكن من خلال المثال ان ترسل اى نص لل ie7 كا wbesite address

اتمنا ان يفيداك

get_settext.rar

Do you have dreams?

Do you think you can do anything and nothing impossibale?

Well think again , Dream less , and Never wish (Advice)!!

#12

أخي الكريم Ziud

لقد كان في منتهى الكرم أن تتفضل بالجواب ، ولكن لا يستغرب الشيء من معدنه ،،، تقبل تحياتي

لكن المثال الأخير غير مشروح ، وربما يفيد في بعض الجوانب ولكن لا يوفيها كل ما تحتاجه ...

المطلوب هو / كيفية تصدير التكست من برنامج الـ(Paltak) إلى برنامجي الخاص؟؟ ماهي الأدوات المستخدمة؟؟ كيف أستطيع التعامل مع البرامج الأخرى من داخل برنامجي؟؟

(........................................ المطلوب شرح وافي للمتطلبات ........................................)

لازلت أنتظر مع شكري الجزيل لكل من ساهم في الاجابة :)

تم تعديل هذه المشاركة بواسطة maajed555 في 15 ديسمبر 2008 في 20:53

#13

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

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

اولا هناك ثلاث دوال مستخدمة

Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, _

ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long

Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long

الدالة الاولى findwindow

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

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

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

كيف تعمل هذة الدالة: بعد ان تعلن عن الدالة فى المديول او منطقة التصريحات العاملة module or General Declarations تقوم بحجز متغير من نوع long ثم تساوية بهذه الدالة hWnd = FindWindow("WindowName", vbNullString) كما نلاحظ يتم تمرير معاملبن اما اسم النافذة او الكلاس نيمclassname اذا قمت بتمرير اسم النافذة لا تمرر الكلاس نيم والعكس كما انه يجب وضع المعامل بين علامتي تنصيص

كيف يمكن الحصول على اكلاس نيم من خلال برناج spy++ الذى ياتى مع الفجوال

الدالة الثانية findwindowEx

وطيفة الدالة: تجلب لنا النافذة الابن لاى نافذة اب؟؟؟ حسنا كل زر او تكست بوكس او اى اداة اخرى هو نافذة ولها مفبض خاض بيها وهو نافذة ابن لنافذة اب على سبيل المثال التكست بوكس فى الانترنت اكسبلورار التى تحتوى على عنوان او لنك هذا الموضوع هى نافذة ابن لها مفبض خاص بيها وللحصول على هذا المقبض نستحدم الدالة findwindowEx

كا اختها من الدوال بعد الاعلان عنها نقوم باستخدامها كالتالى: hWnd2 = FindWindowEx(hWnd, 0, "className", "windownName")

حيث ان hWnd هو مقبض النافذة الاب و className هو الكلاس نيم الخاص بالنافذة و windowname هو اسم النافذة فى حالة وجود اسم النافذة تعطى القيمة VbnullString للكلاس نيم والعكس فى حالة وجود الكلاس نيم تعكى نفس القيمة لل Windowname ولا تنسو ازل علامتى التنصيص قبل وبعد vbnullstring

الدالة الثالثةSendMessage

هناك العديد من الرسائل التى مكننا تمريرها لبرناج اخر او لنفس البرنامج الذى نصنعة كل ما علينا فعلة هو الاعلان عن الدالة sendmessage ثم الاعلان عن القيمة الثابتة لنوع الرسالة مثلا اذا اردنا ارسال نص لتكست بوكس تعلن عن الثابت الخاص بذلك وهو :Const WM_SETTEXT = &HC طبعا بعد ان نعلن عن الدالة sendmessage لك حريت الاختيار عن كيفة الاعلان عن الدوال او الثابت الخاص بالرسالة اما فى مديول او فى جنرال دكلريشان فقط لا تنسى Public or Private

بعد ذالك نقوم بحجز متغير من نوع long وتعطية الدالة فى الشاكل النهائى كالتالى:retval = SendMessage(hwnd2, WM_SETTEXT, ByVal CLng(0), ByVal wintext) هيث ان hwnd2 هو مقبض التكست بوكس و wintext هو متغير من نوع استرنج string يحمل النص الذى سيرسل الى التكست بوكس

ملحوظه هامه جدا: احيانا ما يكون مفبض النافذة المراد ارسال الرسائل اليها صعب الحصول عليه ذلك لانها نافذة ابن لنافذة اخر ابن لنافذة اب لذلك يجب علينا اتباع التسلسل من خلال الدالة findwindowEx بمساعدة برنامج spy++ يمكنكم ملاحظة استخدمى للدالة اكثر من مرة فى المثال الاول للحصول على مقبض التكست بوكس الخاصة بحمل عنوان المواقع فى انترنت اكسبلورار

ارجو ان اكون قد اوضحت وان شاء الله ارد على اى تساؤل وبالتوفيق للجميع

سوف ارفق مثال ارسال نص للياهو مسنجر النسحة 7

yahooedit.rar

Do you have dreams?

Do you think you can do anything and nothing impossibale?

Well think again , Dream less , and Never wish (Advice)!!

#14

ممتاز ... وفقك الله واسعدك اخي الكريم

سأراجع هذه المعلومات القيمة ثم أطرح عليك بعض الأسئلة المتعلقة بالموضوع ...

شكرا لك تواصلك وما تفضلت به من معلومات قيمة ...

سأعود قريباً :)

#15

أحسنت أخي الكريم ... وقد جربت المثال على برنامج المفكرة ونجحت العملية

ولكن في برنامج البالتوك لم أستطع العثور على النافذة التي يتم من خلالها إدخال النصوص ... حاولت ولكني لم أستطع

والآن ....

هل يمكن أن توضح كيف أستطيع أن أرسل لأحد الأزرار أمرا بالتنفيذ (كليك) ؟؟

وكيف أستطيع فتح برنامج آخر من داخل برنامجي ؟؟

ــــــــــــــــــــــــــــــ مع الأمثلة ــــــــــــــــــــــــــــــ

وتقبل تحياتي :)

تم تعديل هذه المشاركة بواسطة maajed555 في 19 ديسمبر 2008 في 10:42

#16

بالنسبة للنافذة الخاصة بالبالتك يجب عليك تتبع تسلسل النوافذ من خلال spy++ ثم استعن بالمثال الخاص ببرنامج الياهو فى التسلسل لتصل لمقبض النافذة

اما بالنسبه لارسال الحدث كلك ستقوم بنفس المثال لكن ستضيف الثابت الخاص بارسال الحدث كلك وهو :Public Const BM_CLICK = &HF5

ثم تقوم بمعمل متغير من نوع لونج وتعطية قيمة الدالة كالتالى

SendMessage(BM_hwnd, BM_CLICK, ByVal CLng(0), ByVal CLng(0))

هيث ان BM_hwnd هو مقبض الزر

اذا كنت مهتم بهذا النوع من البرمجة انصحك بنصحتين اولا حاول ان تحسن من مستواك فى ال اى بى اي API ثانيا تعلم لغةc++

فهذه اللغة جعلت للتعامل مع السيستم ولها رفرنس كبير جدا وابسط فى تعاملها مع برمجة النظام من الفجوال بيسك بكثير

اليك ايضا افضل موقع وجدتة خاص ببرمجة الاى بى اي لكن يجب ان تكون اللغة الانجليزية عندك معقولة :http://www.xs4all.nl/~rjg70/vbapi/index.html

ارجو ان اكون افدت

c++ ملحوظة انا ايضا ساتعلم :D

اما بالنسة لفتح برنامج اخر من خلال برنامجك كل ما عليك فعله استخدام الامر shell

اليك ابسط صورة فى استخدامة:Shell "C:\windows\NOTEPAD.exe" كل ما عليك فعلة تمرير المسار للملف التنفيذى للبرنامج فى هذا الامر سيقوم الكود بقتح النوتباد فى حالة اذا ما كان الوندوز مثبت على دريقر C

تم تعديل هذه المشاركة بواسطة Zius في 23 ديسمبر 2008 في 13:55

Do you have dreams?

Do you think you can do anything and nothing impossibale?

Well think again , Dream less , and Never wish (Advice)!!

#17

أخي الكريم ،،، شكرا لك على مزيد لطفك وتواصلك

واعجبني كلامك حول لغة السي بلس بلس ، وهي لغة أنوي تعلمها مثلك :)

أما بالنسبة لدوال api فللأسف لم أجد شرحا موسعا لها باللغة العربية ، مع أني أنوي تعلم اللغة الانقليزية بشكل أفضل حتى أتمكن من التعمق في البرمجة بشتى أنواعها ، لكني أتمنى أن أجد كتاب يشرح هذه الدوال بشكل جيد ، لأنها مفيدة جدا لأي برنامج تريد أن تصنعه بطريقة متميزة ...

إذا كنت تعرف كتاب باللغة العربية يشرح دوال Api بشكل جيد فأرجو أن تدلني عليه ... وتقبل تحياتي

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

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

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

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

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