تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
من المنتدى القديم : السلسلة الذهبية ... تمرير باميترات إلى داخل البرنامج من الويندوز
#1
subject_contant " المشاركة رقم [1] :
هي مجموعة من الدروس والمقالات التي كانت موجودة منذ مدة في المنتديات ولكنها ضاعت مع ضياع قاعدة البيانات ، هذه واحدة منها :
اعداد : الأخ رغيد الطيب
عنوان الموضوع : تمرير البارميترات الى داخل برنامج من برامج الوينذوز .

بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله وبركاته .

في هذه الحلقة من حلقات السلسة الذهبية في المواضيع العلمية سنتعرف بإذن الله تعالى على طريقة تمرير البارميترات الى داخل برنامج من برامج الوينذوز !
و لكي نفهم سوياً ما المقصود من ذلك دعني اذكرك بكيفية تمرير الباميترات الى أي إجراء تقوم بتصميمه فمثلاً اذا افترضنا انك تريد ان تقوم بإنشاء إجراء بسيط و ظيفته عرض رسالة معينة يتم تمريرها الى الإجراء ...
من الطبيعي ان تكتب كود كالتالي :



رمز برمجي:

Sub myMsg(Text As String MsgBox Text End Sub
و لكي تستدعي الإجراء السابق ينبغي ان تقوم بتمرير النص الذي تريد عرضه في مربع حوار بالشكل التالي :

رمز برمجي:

myMsg ""Welcome Brothers""


تجربتنا السابقة كانت جميلة للغاية ... دعنا الآن نغيير تلك التجربة قليلاً :
1 - قم بفتح مشروع جديد
2 - من القائمة Project أختر البند Remove Form1
3 - من القائمة Project أيضاً أختر البند Add Module
4 - في الموديول الجديد قم بكتابة الكود التالي :


رمز برمجي:

Sub Main()
رمز برمجي:

Msgbox Command End Sub
5 - من القائمة File قم بترجمة المشروع بإسم myMsg.exe و احفظه في المجلد الرئيسي للسواقة \:C
6 - اغلق مشروعك و اتجه الى قائمة إبدأ Start ثم اختر منها تشغيل Run
7 - أكتب السطر التالي في مربع الحوار ثم انقر على موافق :

رمز برمجي:

C:\myMsg ""Welcome Brothers""



إذا كتب الله لهذا البرنامج النجاح فإنك سترى مربع حوار يظهر لك فيه النص الذي كتبته وهو Welcome Brothers ..

و لكن السؤال الآن هو ما الذي حدث بالضبط ؟!

لنجيب على السؤال يجب ان نعلم ان المتغير المعرف ضمنياً و المسمى Command يحتفظ به الفيجوال بيسك لتخزين البراميترات التي تم تمريرها الى برنامجنا .. وما قمنا نحن به هو فقط عرض البرامترات التي ممرت للبرنامج ولو أنك ذهبت الى السواقة سي C .. ثم نقرت على البرنامج myMsg.exe فانك عندها سترى بإذن الله تعالى مربع حوار فارغ ! ... و السبب هو ان النقر العادي على البرنامج لا يمرر له أي بارميترات لكنك اذا ذهبت الى القائمة تشغيل ( Run ) في إبدأ ثم كتبت مسار برنامجك كاملاً ثم اتبعته بفراغ ثم أي نص فأنه سوف يتم تشغيل البرنامج بشكل طبيعي مع تمرير النص الذي كتبته اليه عن طريق المتغير Command و يبقى على البرنامج إستخدامه بالنحو الذي يروق له

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

دعنا نضرب أمثلة !
عندما تقوم بالنقر على برنامج الوورد فأن هذا البرنامج ببساطة يتم تنفيذه وهذا شي جميل ... غير أنك اذا قمت بالنقر على أي ملف بإمتداد تابع للورد ( Doc. ) فأن الذي سيحدث حينها ان الوورد سوف يفتح أيضاً ولكن مع تشغيل الملف الذي نقرت عليه .. اليس كذلك ؟
اذا كنت معي في ما سبق فأعلم أخي ان الذي حدث هو ان الوينذوز في المرة الاولى قام بتشغيل الوورد دون تمرير أي براميترات لأنك قد نقرت عليه مباشرة و لكنك في المرة الثانية نقرت على ملف تابع للورد فقام نظام التشغيل بإتنفيذ برنامج الوورد و لكن مع تمرير أسم الملف الذي نقرت عليه انت وقام بتخزينه في المتغير Command ... و هنا يجب ان تفهم أن المبرمجين ( أمثالك عزيزي ) الذين صمموا الوورد قاموا بعمل فحص بسيط للمتغير Command عند تشغيل الورد بحيث يتم التأكد من انه لا يحمل اي قيمة ممرة ( أسم ملف ) فان كان يحمل قيمة يتم عندها فتح الملف الذي ثم تمرير أسمه ...
و إن كنت مهتماً بموضوع ارتباطات الملفات وكيف تصنع ارتباط خاص ببرنامجك فلعل الرابط التالي أن يكون مفيداً
http://www.vb4arab.com/vb/showthread.php?t=9

المزيد من الأمثلة

ان القيم الممرة للبرنامج مفيدة اكثر مما قد تتصور لهذا أسمح لي أن اغرس هذا المبدأ في رأسك غرساً ... فإذا طلبت منك ان تقوم بتشغيل مستكشف الوينذوز بواسطة زر في الفيجوال بيسك فإنك عندها ستقوم بكتابة التالي :


رمز برمجي:

Shell ""explorer.exe"", vbNormalFocus
طبعاً هذا لأن برنامج المستكشف اسمه Explorer.exe ولانه من ملفات النظام فلم نضطر الى كتابة مساره كاملاً و اكتفينا بإسمه فقط
و لانني سأفترض انك كنت مركزاً على كلامي السابق و استوعبت معظمه فأنت تعلم بفضل الله ان الكود السابق قام بتشغيل برنامج الـ explorer.exe دون أن يمرر أليه أي بارميترات ( لان التمرير يكون بوضع فراغ بعد اسم البرنامج ثم النص المراد تمريره كما عملنا مع عبارة Welcome Borthers في السابق ) .... و الان اذا جربت استبدال الكود السابق بالسطر التالي :



رمز برمجي:

Shell ""explorer.exe /e,C:\"", vbNormalFocus
اذا جرت الامور بشكل سليم فان الذي سيحدث ان المستكشف سوف يفتح و لكن التركيز سوف يكون على السواقة سي ( Drive C ) و السبب في ذلك يعود الى اننا قد قمنا بتمرير البراميتر ""\:C"" بعد اسم البرنامج ... فالجزء e/ يرمز اختصاراً لـ Explore ومعناه ( قم بتصفح ) ثم تأتي الفاصلة بعد ذلك ثم الدرايف سي ( \:C ) و معناه قم بتصفح الدرايف C واذا اردت مثلاً ان تتصفح الدرايف D اكتب السطر :


رمز برمجي:

Shell ""explorer.exe /e,D:\"", vbNormalFocus
وكذلك الحال اذا اردت تصفح مجلد معين .. فما عليك إلا ان تقوم بتمرير الرمز e/ و الذي يعرفه الـ Explorer على انه امر بالتصفح ثم يلي ذلك المجلد المراد تصفحه فمثلاً لتصفح مجلد الوينذوز اكتب التالي :


رمز برمجي:

Shell ""explorer.exe /e,C:\Windows"", vbNormalFocus
وماسبق يعني ان متصفح الوينذوز يفحص البارمترات الممرة اليه للتأكد من نوع العرض المطلوب ثم يقوم بطريقة العرض المناسبة بحسب طلبك انت

المزيد عن المتصفح ...

قبل ان انتقل الى امثلة اخرى قدرت انه ربما يكون من المفيد ان تعلم مثلاً ان هناك العديد من البراميترات الممكن تمريرها الى البرنامج وعليك البحث لمعرفة البرامترات التي يتقلبها كل برنامج لان الامر ليس محدداً و يتوقف على المبرمج نفسه فلكل برنامج بارمتراته الخاصه ... ومن المفيد ايضاً ان تعرف ان مبرمج الاكسبلورر قام بجعله يفحص بارميتر آخر اسمه Select للتاكد من انك تريد تحديد ملف معين مثلاً خذ المثال البسيط التالي :


رمز برمجي:

Shell ""explorer.exe /Select,C:\Autoexec.bat"", vbNormalFocus
سيقوم السطر السابق بفتح الاكسبرور مع تحديد الملف الممر بعد البارميتر Select وهو في حالتنا هذه الملف C:\Autoexec.bat ... و مثلا لتحديد الملف Win.ini الموجود في مجلد الوينذوز يمكن كتابة التالي :


رمز برمجي:

Shell ""explorer.exe /Select,C:\Windows\win.ini"", vbNormalFocus

[/HR]
المشاركة رقم [2] :
الى برامج آخرى ..
بعد اللمحة السريعة عن المتصفح قم بكتابة التالي :


كود:

Shell ""Notepad.exe"", vbNormalFocus
لايخفى على أحد ان هذا سوف يشغل برنامج المفكرة ... و لكي نقوم بتشغيل ملفات باستخدام المفكرة مباشرة اكتب مثلاً :
كود:

Shell ""Notepad.exe C:\Autoexec.bat"", vbNormalFocus

سوف يقوم السطر السابق بتشغيل المفكرة مع فتح الملف Autoexec.bat مباشرة لاننا قمنا بتمريره للمفكرة كابراميتر
واذا كنت قد فكرت يوماً بفتح لوحة التحكم بالكود فيكفيك ان تعرف ان لوحة التحكم ماهي إلا عبارة عن برنامج اسمه Control.exe وبالتالي لتشغيله اكتب :
كود:

Shell ""Control.exe"", vbNormalFocus
و لان لوحة التحكم تتعامل مع ملفات ذوات الاحقة CPL فيمكنك اذاً تجريب السطر التالي :


كود:

Shell ""Control.exe Desk.Cpl"", vbNormalFocus

وسوف ترى ان خصائص سطح المكتب قد ظهرت امامك لان الملف المسؤول عنها هو Desk.cpl و الذي يتم فتحه بواسطة لوحة التحكم Control Panel او الـ ( Control.exe كما عرفنا قبل قليل ) ...

دعنا نرجع الى الوراء قليلاً ...
بعيداً عن برامج الوينذوز و بالعودة الى العهد القديم للذوز فأن المبدأ نفسه كان ولازال موجوداً فعندما تكتب في محث الدوز الامر CLS فان الشاشة التي امامك سوف يتم تصفيتها لانه الامر الخاص بمسح الشاشة في الدوز و اذا قمت يكتابة اي امر بعد هذا الامر فان الناتج سوف يكون مجرد مسح الشاشة فقط :

كود:

CLS Rgheed Altaib

فلن تؤثر العبارة Rgheed Altaib على الامر بشيء لانه ببساطة يتجاهل البارميترات الممرة اليه اما اذا كتبت الامر DIR :

كود:

DIR
فانه سوف يقوم بعرض محتويات المجلد الحالي امامك و اما اذا اعدت صياغة الامر DIR ليصبح كالتالي :


كود:

DIR /o:-n
فانك سوف ترى ان النتائج الظاهرة امامك هي بترتيب تنازلي لأن البارميتر O يرمز للترتيب ( Order ) و الحرف n يعني تصاعدي واما اذا سبقتها بعلامة سالبة فيعني ذلك عكس الترتيب
وكذلك الامر اذا كتبت :

كود:
DIR /a:h
هذا الامر سوف يعرض جميع الملفات المخفية لك الان الحرف a اختصار لـ ( Attribute ) و التي تعني صفة الملف و الحرف h يرمز للملفات المخفية Hidden
وينطبق المبدأ على باقي اوامر الدوز و التي ليست الا برامج عادية لا تختلف عن برامجنا في الفجيوال إلا بانها خاصة ببيئة الدوز ... ولذا فينبغي عليك عندما ترى امر مثل :

كود:

DEL C:\myFile.txt

انت تفهم بوضوح ان الامر DEL ماهو إلا برنامج خاص بالدوز و ان اسم الملف c:\myFile.txt ماهو إلا بارمتير ممر الى البرنامج DEL

تلميح للاستفادة
كما سبق ان قلنا ان العديد من البرامج تضع لنفسها بارمتيرات معينة لتفحصها عند الاقلاع و على اساسها تحدد نوع العرض او العمل الذي ستنتهجه فلو انك اطلعت على موضوع شاشات التوقف الذي ناقشه الاخوة ، فستعرف ان شاشة التوقف ( Screen Saver ) ماهي إلا برامج يمكن ان تكييف نفسها للعرض باكثر من طريقة واحدة اعتماداً على البارمترات التي يمررها لها نظام التشغيل.

ودعني اضرب مثالاً اكثر بساطة ... فلو انك مدمن ماسنجر فلربما كنت قد جعلت الماسنجر (MSN Messenger) يعمل بمجرد تشغيل الوينذوز وسوف وينبغي ان تعرف كيف استطاع الماسنجر ان يفرق بين نقرك العادي عليه ( وعندها يفتح مباشرة ) و بين تشغيله عند الاقلاع وعندها يمكث في الخلفية ويظهر فقط رمزه بجوار الساعة دون ان يزعجك ؟ ... لكي تعرف السبب قم بالتاكد من البرامج التي تعمل عند تشغيل جهازك ( اكتب msconfig في القائمة تشغيل و اذهب الى اخر بنذ Startup )
وسوف تجد قائمة بجميع البرامج التي تعمل عند تشغيل الجهاز ابحث عن الماسنجر msnmsgr وانظر الى المسار المكتوب !
سوف تجد انه قد كتب لك مسار الماسنجر متبوعاً ببراميتر اسمه backgound/ يعرف من خلاله الماسنجر انك تريد تشغيله في الخلفية دون ازاعج المستخدم...

لماذا لا نقوم نحن بالتجربة ؟
لقد ذهبنا بعيداً في وصف برامج ليست ملكنا و سيكون من المفيد ان نجرب نحن شيئاً مفيداً لنا .. واذا كنت تتذكر البرنامج الظريف myMsg الذي قمنا بتصميمه في اول المقال ... فحبذا لو عدلناه قليلاً كي يصبح اكثر فائدة ... قم فقط بتعديل الكود الذي فيه من :


كود:

Sub MainMsgbox Command

End Sub

ليصبح بالشكل التالي :

كود:

Sub MainClipboard.Clear
Clipboard.SetText Command
End Sub



التعديل الذي قمت به انا هنا هو فقط تصفية محتويات الحافظة ( ذاكرة الوينذوز ) ثم قمت بنسخ محتويات المتغير Command ( الذي يحتوي على البارميترات الممره للبرنامج ) اليها ...
و الان قم بترجمة هذا المشروع الى ملف exe و اجعل اسمه myPath وضعه في المجلد الرئيسي \:C ...
والان سنقوم بتسجيل البرنامج في الريجستري كي يتم ربطه مع جميع الملفات ... لتسهيل العملية عليك افتح مشروع جديد وضع الكود التالي في زر امر ونفذه :

كود:

Private Sub Command1_ClickDim Shl As Object



Set Shl = CreateObject(""Wscript.Shell"")
Shl.regwrite ""HKCR\*\Shell\مسار الملف\command\"", ""C:\myPath.exe %l""End Sub




الكود السابق سوف يسهل عليك بفضل الله تعالى تعديل الريجستري يدوياً
و الان اذا كنت قد اللتزمت بإسم البرنامج myPath.exe وكذلك مساره في السواقة سي ... فيمكنك ان تذهب الى اي ملف في الوينذوز ثم تنقر عيله بالزر الايمن وسوف تجد ان امراً جديداً قد انضاف الى القائمة بإذن الله تعالى ... اسمه ( مسار الملف ) قم بالنقر عليه وسوف يخزن مسار الملف الحالي في الذاكرة بحيث يمكن ان تلصقه بعد ذلك مباشرة في اي برنامج للاستفادة منه ... و بهذا نكون قد عرفنا طريقة بسيطة لمعرفة المسار الكامل لاي ملف في النظام
قبل ان اتركك عزيزي !
بالفعل بدأت اشعر ببعض الإرهاق غير اني احب قبل ان اذهب ان اضرب لك مثال اخير ربما كان مفيداً لتثيبت الفكرة .... لنفترض انك تريد ان تعمل برنامج لا يمكن للمستخدم ان يشغله مباشرة عن طريق النقر عليه و تريد ان تقوم انت فقط بفتحه عن طريق تمرير كلمة تخصك لتشغيله ...
لتنفيذ شيء مشابة قم بفتح مشروع جديد و صمم الواجهة التي تريدها لبرنامج ثم اكتب الكود التالي في الحدث Load للفورم :


كود:



Private Sub Form_Load
If Command
الرد }}}
تم الشكر بواسطة:
#2
هذا الموضوع تم نشره اليا لتجريب نقل المواضيع من [b]Vb4arab
[/b]
الرد }}}
تم الشكر بواسطة:
#3
جميل جدا

بارك الله فيك
الرد }}}
تم الشكر بواسطة:
#4
بقي مشكلة الصور والمرفقات

لازم ادور مركز وارفعها عليه
الرد }}}
تم الشكر بواسطة:
#5
ارفعها الى مركز رفع ملفات المنتدى
الرد }}}
تم الشكر بواسطة:
#6
ماعتقد يكفي

لدي 25 ميغا فقط
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تشغيل اي ملف تنفيذي داخل فورم mouhcin 2 3,529 02-06-16, 11:36 AM
آخر رد: CLARO

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم