![]() |
|
تعلم معي كيف تتعامل مع البرامج الخارجيّة - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : تعلم معي كيف تتعامل مع البرامج الخارجيّة (/showthread.php?tid=710) |
تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 19-03-2009 بسم الله الرحمان الرحيم... اخواني الكرام سلام الله عليكم اجمعين... اليوم معنا درس عن كيفيّة التعامل مع البرامج الخارجيّة... وهذا موضوع سيتم تطويره ان شاء الله شئ فشيئا بئذن الله.... يعني على نهج الأخ العزيز الحبيب nabilkeb بارك الله له وجزاه الله كل خير...\ يعني سامحني اخي نبيل على اخذ طريقتك في القآء الدروس :p لكن منك نستفيد اخي الحبيب نعم.... الدرس اقوم به لأستفيد انا بإذن الله ويستفيد الإخوة معي... وأود ان ابحر في هذا المجال بإذن الله ولذلك قد يكون هذا الموضع كبداية جيّدة بإذن الله... ويجب ان انبّه الإخوة ان هذا الموضوع سيكون فقت اساسيّات في هذا المجال وانا لست خبيرا في هذا المجال... لذلك من لديه اي شئ ممكن ان يفيدنا ويفيد الإخوة من حولي فبارك الله فيك وجزاه الله كل خير على نشر العلم وتعليمه... وقبل ان ابدئ بلدرس يجب ان ادل على صاحب الموضوع الأصلي وهو الأخ الفاضل SUM من منتدى الفريق العربي للبرمجة طيب ماذا نستفيد من هذا الموضوع ان كان الأخ قد شرحه مسبقا ؟ نعم اولا... الموضوع شوي قديم... ولكن هو الوحيد على الساحة العربية( الذي رأيته انا ) الذي يتكلم عن هذا الموضوع والله المستعان... ولهذا قد يكون مفيدا لو تم اعادة صياغة الموضوع... بلإضافة الى انني سأحاول ان اشرح الموضوع بطريقة اسهل بإذن الله... ومن لديه اي سؤال فلا يتردد في سؤآله... ان كنت اعلم الإجابة اجيب... وان لم اكن اعلم فنبحث سويا بإذن الله... تابعوا معي اولا حمّل البرنمجين من المرفقات... الأول اسمه Win X_1.3 وهو يعمل بدون تثبيت... (وأظن انه مبرمج بلدلفي ان لم اكن مخطئ والله اعلم) والثاني وهو برنامج اسمه WinDowse ويحتاج الى تنصيب ... حمله ونصبه... بارك الله لك لأني الدرس سيعتمد على هاذين البرنامجين.... .../...يتبع..../.... تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 19-03-2009 نبدئ بإذن الله.... اولا... سنقوم بعمل برنامج يأخذ الكتابة من المفكرة... يعني ال Notepad وبنفس الوقت سنرسل من خلال البرنامج الذي نصممه نصوص الى الفكرة... مستعدّون ؟ نعم... اولا اعطيكم فكرة عن سير الموضوع والبرنامج... سنتعام مع الهاندل لبرنامج المفكرة... Handel نأخذ الهاندل للمفكرة... ونرسل عن طريقه نص او نصوص الى المفكرة... وكذلك العكس... نأخذ الهاندل ونجلب النصوص من المفكرة والعملية سهلة جدا ويسيرة بإذن الله... سنتعرف ونتعامل مع الامر SendMessage ولهذا السبب نحتاج الى معرفة الهاندل لأن هذا الأمر يعتمد اعتمادا كليّا على الهاندل... طيب ما هو الهاندل ؟ نعم هو ممكن ببساطة ان اقول لكم انه رقم يتعرف الوندوز على البرنامج من خلاله... (هل الهاندل خاص فقد للوندوز ؟ ام لكل انظمة التشغيل؟) وفي البرنامج هناك عدة مكونات ... وكل هذه المكونات لديها هاندل خاص بها... يعني حتى نستطيع ان نصل الى المكون المطلوب... يجب معرفة الهاندل... لكن المحيّر مع هذا الهاندل هو انه يتغير في كل مرة نقوم بفتح البرنامج... وهنا كانت مشكلتي الكبرى... وهي.. ان كان الرقم يتغير في كل مرة... فكيف نقوم ببرمجة برنامج يتعامل معه؟ هل يجب ان نصمم برنامج يستخدم مرة واحدة فقت؟ وبعدها نبرمج برنامج آخر؟ ليس معقولا ان يكون الأمر بهذا الشكل ووقفت عند هذه النقطة حائرا لا ادري كيف السبيل الى الحل... لكن بفضل الله تمكنت من تجاوز هذا السؤال سريعا بعد قرائة موضوع الأخ SUM عدة مرات... خلاصة الموضوع هو ان الهاندل نجلبه بأمر معين دون ان نحتاج الى معرفة رقمه بظبط وسنرى هذا بعد قليل... سأرتاح قليلا وأكمل بعدها ان شاء الله.. .../...يتبع..../.... تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 20-03-2009 بسم الله الرحمان الرحيم... نعم اخواني لنكمل ان شاء الله... الأن نبدئ بلمشروع الذي ذكرته وهو التعامل مع الفكرة... نفتح المفكرة اولا لنستطلعها... ماذا موجود بها؟ نعم موجود قائمة في الأعلى... وموجود مساحة حتى نكتب بها اي انها Memo او ما شابه ذلك... المهم عندنا الآن هو الميمو لأنه هو المكون الذي سنتعامل معه.. لكن يجب انبه الآن الإخوة الكرام على شئ مهم... وهو ان هذا الميمو موجود داخل البرنامج المفكرة اليس كذلك؟ يعني انه لديه رقم هاندل خاص به, اليس كذلك؟ جميل.. لكن حتى نستطيع الوصول الى هاندل الميمو يجب اولا الوصول الى هاندل الأب... Parent وو الى آخره... يعني انتم تعرفون كيف تتعاملون مع ال الأب و الأبناء في دلفي Parent and Childrens و التنبيه هو اخواني الكرام... ان اردتم ان تصلوا الى مكون في اي برنامج يجب ان تعرفوا الآب... وبعدها الإبن وبعدها ابن الإبن وو الى آخره حتى تصلوا الى المكون المراد التعامل معه... واضح؟ ان كان واضحا فلحمد لله... وان لم يكن... فلا تترددوا في السؤال بارك الله لكم... ... نعم... الآن امامنا المفكرة... نفتح البرنامج الذي اسمه Win X_1.3 ونجد في احدى الزواية مربع كما في الصورة... (البرنامج والله اعلم بلفرنسيّة لم اجد نسخة بلإنجليزية.. سامحونى) ![]() نضغط على ذلك المربع... ونسحبه الى زاوية المفكرة... حتى يصبح بلشكل الذي في الصورة... ![]() الآن هذا اهو الأب الكبير للبرنامج... تلاحظون العلامة الزرقاء حول البرنامج؟ نعم... الآن افلت المربع وسيأتي معلومات عن البرناج المفكرة داخل البرنامج Win X_1.3 تلاحظونها؟ نعم... جرب الآن نفس الشئ ولكن اسحب حتى تصل الى الميموا ويصبح الون بلأحمر... كما في الصورة اسفل... ![]() هذا هو ابن الأب الكبير ههههههه ...... رقم الهاندل تجدوه في البرنامج بجانب اسم Handle وفي حالتي انا الآن فهو... 132884 ولكن المهم بنسبة لنا هو ما مكتوب بجانب ال Classe: طيب اخواني الكرام... انا الآن اكتب من المدرسة وأثناء الدرس ايضى... هههههههه اكمل لاحقا ان شاء الله... ان كان هناك اي سؤال او تريدون اي توضيح فهذا ممنوع :eek: ههههه امزح... والسلام عليكم ورحمة الله .../...يتبع..../.... تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 22-03-2009 بسم الله الرحمان الرحيم نكمل بعض الشئ بإذن الله تعلى... نصمم شكل البرنامج اولا... سيكون بشكل التالي… نضع المكونات التالية كود : Button1
Button2
Edit1
Label1الصورة توضح... ![]() الأن اخواني حان وقت العمل مع الكود نبدئ على بركة الله... اولا يجب ان نعرّف بعض المتغيّرات التي هي ستكون المسؤلة عن الهاندل للمفكرة... لكن كم واحدة هي؟ نعم,, اولا نحتاج الى متغيّر يأتي بهندل تبع الأب الكبير لبرنامج المفكرة... وبعدها نحتاج الى متغير يقوم بجلب الهاندل للميمو التي هي الإبن للأب الكبير... هل نحتاج شئ آخر؟ لا... ليس الآن... ولكن لو افترضنا انه لدينا 5 من الأبناء... اذا سنحتاج 1 متغيّر للأب و 5 للأبناء... واضح؟ طيب... اذا نعرف2 من المتغيرات .,, انا استخدمت هذين ... والمتغيّرات بلتأكيد سيكونون من النوع تي هاندل... مثال... var كود : forr, edi : THandle;هذا اولا... ثانيا... نحتاج الى متغير يكون المسؤل عن النص الذي سيتم جلبه او ارساله... وهو يكون من النوع سترينج طبعا... هكذا كود : Tex: string;والنتيجة هي التالي لحد الآن... كود : procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;نعم.. بين ال كود : Beginكود : Endنستخدم كلمة او الأمر كود : FindWindowكود : forrونضغط على المربع ونسحبه على المفكرة والنتيجة في ال كود : Classeكود : Notepadهذه مهمة الآن... نكتب التالي في الدلفي... كود : forr := FindWindow('Notepad',nil);كود : Beginنعم ال كود : FindWindowولكن هاندل لماذا؟ نعم هاندل للأب الكبير الذي اسمه كود : Notepadبعدها يجب ان نستخدم الأمر... كود : FindWindowExيعني هو خصصيصا للأبناء.. تكتب التالي... كود : edi := FindWindowEx(forr,0,'Edit',nil);والذي هو يعنوان كود : Editواضح لحد الآن؟ نعم... وكما تم شرح في السابق .. يجلب الهاندل ويضع في المتغير الثاني والذي هو كود : Ediكود : SetLength(Tex,Max_Path);بعدها نضع التالي... كود : SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));كود : Ediكود : Ediكود : Texنعم هذا ما اعرفه لحد الآن والله المستعان ان كان احد الخبراء يعلم المزيد عن هذا السطر فلا بيخل علينا بارك الله فيه... نعم وفي الآخير... نضع السطر التالي... كود : edit1.Text:=Tex;يعني نحدد اليديت بوكس تيكست ليظهر التيكست المجلوب... يعني في الآخر... يكون شكل الكود بلكامل على هذا الحال.. كود : procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
edit1.Text:=Tex;
end;هذا كل شئ لحد الآن... بارك الله لكم آخيرا اود ان اقول لكم ان اردتم ان ترسلو كتابة الى المفكرة... بإمكاننا ان نستخدم نفس الكود ولكن نغير حرف واحد... وهو الحرف ؟؟؟؟؟؟؟؟؟؟ نعم هذا عليكم... حاولوا ان تعرفوا ما هو الحرف وبعدها ان لم تستطيعوا... اقول لكم ما هو... نعم هو حرف واحد بارك الله لكم وجزاكم خيرا... وان شاء الله سأعطيكم مهمة تنجزونها حتى اتأكت انكم استفدتم من الدرس... ![]() بارك الله لكم وجزاكم خيرا ولا نسوني من صالح دعائكم... والسلام عليكم ورحمة الله وبكاته .../...انتها الدرس... ولكن بقي ان تجيبوا على السؤآل + مهمة تأتيكم لاحقا ..../.... تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 23-03-2009 نعم اخواني الكرام... الحرف هو؟ نعم مازلت انتظر الجواب... هو سهل ويسير... يعني مع شوية تركيز فقد... :eek: امهلكم لحد الأحد المقدم... وبعدها ان لم يضع احد الجواب اضعه انا ان شاء الله حتى يستفيد الإخوة جميعا بإذن الله... ونسيت ان اذكركم بعنوان مهم وهو من الأخ الحبيب العزيز kachwahed الرابط يتحدث عن نفس الشئ تقريبا ولكن مع قليل من التفصيل وهو مفيد جدا... بارك الله فيك اخي kachwahed على الرابط ![]() نجدون الرابط هنا... وهو بلإنجليزية والله المستعان بارك الله لكم والسلام عليكم ورحمة الله تعلم معي كيف تتعامل مع البرامج الخارجيّة - galag8 - 24-03-2009 السلام عليكم ان شاء الله يكون الحل ![]() كود : procedure TForm1.Button2Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
i:integer;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
if Edit1.Text='' then
ShowMessage('please enter the message u want to send')
else
text:=Edit1.Text;
for i:= 1 to Length(Text) do
begin SendMessage(edi, WM_CHAR,ord(text[i]), 0);
end;
end;تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 24-03-2009 نعم اخي galag8 حيّاك الله... اجابة مقبولة ما شاء الله عليك مع انه تم تغيّر الكثير من الكود :eek:.. على كل حال تم ارسال النص الى المفكرة وهذا هو المهم... شكرا على مشاركتك اخي الحبيب ![]() ننتظر مشاركات الإخوة والجواب على السؤآل... ![]() والسلام عليكم تعلم معي كيف تتعامل مع البرامج الخارجيّة - abualmonther - 24-03-2009 moh__ كتب :آخيرا اود ان اقول لكم ان اردتم ان ترسلو كتابة الى المفكرة... السلام عليكم انا مبتدئ (تحضيرى) وهذا المنتدى هو مدرستىواحاول يوميا معكم حسب ما توصلت اليه الحرف استبدال sمكان g فى كلمتى get and set الا اننى لم افهم كثيرا حيث فهمت انه يستعمل للكتابة فى المفكرة (notpade) وعندما طبقته وجدته يغيير عنوان الفورم حسب edit ويجلب عنوان الفورم الى edit ****ا ان تبشط مع توضيح فيما يمكن ان نستعمله وشكرا لك ولكل الاساتذة الكرام كود : procedure TForm1.Button5Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));//
edit3.Text:=Tex;تعلم معي كيف تتعامل مع البرامج الخارجيّة - AL-MOB4RM3G - 25-03-2009 حيّاكم الله جميعا اخواني... إقتباس :حسب ما توصلت اليه الحرف استبدال sمكان g فى كلمتى get and set نعم هذا صحيح اخي الحبيب.. بارك الله لك وما شاء الله عليكإقتباس :الا اننى لم افهم كثيرا حيث فهمت انه يستعمل للكتابة فى المفكرة نعم اخي الكريم... هذا هو الدرس.. لتطبيقق لدرس ستتمكن من ارسال + جلب معلومات نصّيا من المفكرة... إقتباس :عندما طبقته وجدته يغيير عنوان الفورم حسب edit ويجلب عنوان الفورم الى edit نعم اخي, حقيقة حصل معي هذا الشئ عندما جربت انا كود الأخ galag8 ولكن كان الهدف هو أخذ المعلومات من الفكرة... يعني لم انبه الأخ على هذا ... وعدلت على الكود انا قليلا حتى تمكنت من التخلص من هذا الشئ لكن اخي ان كتبت انت الكود التالي كود : procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1]));
edit1.Text:=Tex;
end;ماذا يحدث معك ؟ جربه ورد علي خبر... هل يتغير العنوان للفورم؟ هل تستطيع جلب المعلومات من المفكرة؟ بارك الله لك وشكرا على استفسارك
تعلم معي كيف تتعامل مع البرامج الخارجيّة - abualmonther - 25-03-2009 السلام عليكم نعم البرنامج يقوم بجلب المعلومات ،وارسالها الى المفكرة مع تغيير بسيط كما قلت هو تغيير حرف مع تحديد النص المراد ارساله قبل الامر sendMessage كود : procedure TForm1.Button1Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
SendMessage(edi,WM_GETTEXT,Max_Path,LongInt(@Tex[1])); //***204;***225;***200; ***199;***225;***228;***213; ***227;***228; ***199;***225;***227;***221;***223;***209;***201;
memo1.Text:=tex;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
forr, edi : THandle;
Tex: string;
begin
forr := FindWindow('Notepad',nil);
edi := FindWindowEx(forr,0,'Edit',nil);
SetLength(Tex,Max_Path);
Tex:= memo1.Text;// ***202;***219;***237;***237;***228; ***199;***225;***228;***213; ***199;***225;***227;***209;***199;***207; ***199;***209;***211;***199;***225;***229;
SendMessage(edi,WM_SETTEXT,Max_Path,LongInt(@Tex[1]));// ***199;***209;***211;***199;***225; ***199;***225;***228;***213; ***199;***225;***236; ***199;***225;***227;***221;***223;***209;***201;
end; |