الرئيسية / دورة تعليم autoit / الدرس الثامن في دورة تعلم لغة autoit

الدرس الثامن في دورة تعلم لغة autoit

بسم الله الرحمان الرحيم, الملك القدوس العزيز الحكيم.
والصلاة والسلام على أشرف الأنبياء والمرسلين, سيدنا وحبيبنا محمد ابن عبد الله صلى الله عليه وسلم.
أما بعد فأيها الإخوى والأخوات الكرام بتحية الإسلام أحييكم, وتحية الإسلام السلام فالسلام عليكم ورحمةًا من الله تعالى وبركاته.
أيها الأحباب تكملة للدورة التي قد بدأناها في تعليم لغة البرمجة autoit
ففي
الدرس السابع
كنا قد تعرفنا على دالة InputBox
أما اليوم فسنتعرف على عدة دوال مهمة
ألا وهي دوال تشغيل العمليات
سنتطرق لكل الطرق الخاصة بتشغيل العمليات الموجودة في هذه اللغة الرهيبة, البسيطة, الرائعة.

ما المقصود بدوال تشغيل العمليات

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

أمر مهم يجب أن نتعرف عليه قبل البداية

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

تعريف

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

كيف أحصل على رقم الخطء

عزيزي كي تحصل على رمز الخطء في هذه اللغة يكفي استخدام الأمر
@error
طبعا إذا لم يكن هناك خطء فلا يعمل هذا الأمر
وهذا يمكن استخدامه في رسالة كي نعرض رقم الخطء 
مثلا
msgBox(0, "رقم الخطء هو", @error)
كما يمكن استخدامه في أمر شرطي
مثلا
if @error then

msgBox(0, "هناك خطء", "رمز الخطء هو " & @error)
طبعا علامة 
&
التي استخدمناها هي فاصل بين النص والأمر
وسوف نتعرف عليها لاحقا
كما يمكننا إستخدام رمز الخطء في أمر شرطي وذالك كما يلي
مثال
if @error = 1then
msgBox(0, "هناك خطء", "لم نتمكن من العثور على الملف")
elseIf @error = 2 then
")msgBox(0, "هناك خطء", "لم نتمكن من تشغيل الملف")
else
")msgBox(0, "هناك خطء", "خطء آخر")
endIf
كما يمكننا إستخدامه في مواضع عديدة
وسوف يكثر استخدام هذا الأمر في ما سَيلي

والآن دعونا نعد لدرسنا

ما هي الطرق المتاحة لتشغيل العمليات

عزيزي هناك 6 طرق موجودة لتشغيل العمليات
نحن سنذكر أربعة
وهي

  • Run
  • RunWait
  • ShellExecute
  • ShellExecuteWait

سنتطرق إلى كل ما يخص هذه الدوال
وسوف نتعرف على إستخداماتها وخصائصها
قبل هذا دعونا نرى الفرق بينها

ما الفرق بين هذه الدوال

إنا دالة
run
وَدالة
runWait
متشابهتان
كما أن دالة
ShellExecute
ودالة
ShellExecuteWait
متشابهتان
حيث الدالتين الأوليتين
يعني
run
وكذا runWait
هما دالتين داخليتين في اللغة يستخدمو لتشغيل البرامج
أما دالة
run
فهي تستخدم لتشغيل أي عملية ثم يكمل البرنامج عمله
يعني تنفيذ الأوامر الأخرى
أما دالة
runWait
فهي تشغل العملية ثم تنتظر إلى غاية إنتهائها وبعد ذالك يكمل البرنامج مسيرته في تنفيذ الأوامر الأخرى
أما الدوال
ShellExecute
ودالة
ShellExecuteWait
فهما تستخدمان لتشغيل العمليات
لاكن هما داخليتين في النظام
حيث عملهم هو نفسه عمل
خاصية
run
الموجودة في النظام
أو
start
الموجودة في لغة CMD
وطبعا كما الأولة فإن
ShellExecute
فتستخدم لتشغيل أي عملية
ثم يكمل البرنامج مسيرت تنفيذ الأوامر
أمى
ShellExecuteWait
فتشغل عملية ثم يتوقف البرنامج عن تنفيذ الأوامر الأخرى إلى أن تنتهي العملية
يعني
شبه
start /wait
الخاصة بلغة CMD
طبعا سنتطرق لهما دالتين دالتين لأن كل نوع يحمل نفس الخصائص
وقد عرفنا الفرق بينهما
أما الآن فسنبدء مع

run و runWait

متطلبات الدالتين
لا تحتاجا أي ملف إستدعاء
فالدالتين مدموجتين في اللغة

شكل الدالتين

إن لدالتين شكل واحد
فإذا تحدثنا عن واحدة منهما فإنا نتحدث عن الأخرى
لذا نكتفي بالتحدث على واحدة
وكل شيء ينطبق على الأخرى
وإن كان فرق فسأذكره
شكل الدالة يكن كالتالي
Run(“program”, “workingdir”, show_flag, opt_flag)

إعدادات الدالة

program المسار الكامل للبرنامج (EXE, BAT, COM, or PIF)
workingdir [optional]مجلد العمل. في حال تركها فارغه (“”) يستخدم مجلد العمل الحالي. هذا ليس المسار الخاص بلبرنامج.
show_flag [optional] علامات الإظهار الخاص بالنافذة:
    @SW_HIDE = نافذة مخفية (أو رمز Default)
    @SW_MINIMIZE = نافذة مصغرة
    @SW_MAXIMIZE = نافذة مكبرة
opt_flag [optional]يتحكم في الخيارات المختلفة المتعلقة بكيفية تفاعل العملية الأصل والتابعة.
    $STDIN_CHILD (0x1) = Provide a handle to the child’s STDIN stream
    $STDOUT_CHILD (0x2) = Provide a handle to the child’s STDOUT stream
    $STDERR_CHILD (0x4) = Provide a handle to the child’s STDERR stream
    $STDERR_MERGED (0x8) = Provides the same handle for STDOUT and STDERR. Implies both $STDOUT_CHILD and $STDERR_CHILD.
    $STDIO_INHERIT_PARENT (0x10) = Provide the child with the parent’s STDIO streams. This flag can not be combined with any other STDIO flag. This flag is only useful when the parent is compiled as a Console application.
    $RUN_CREATE_NEW_CONSOLE (0x10000) = The child console process should be created with it’s own window instead of using the parent’s window. This flag is only useful when the parent is compiled as a Console application.

يتم تعريف الثوابت في AutoItConstants.au3.

نتائج الدالة

إذا نجح تشغيل العملية
فالدالة تعطينا رمز pid الخاص بالعملية
حيث يمكن غلقها أو التحكم فيها
هذا بخصوص
run
أما الناتج في دالة
runWait
هو رمز الخروج من البرنامج

وفي حال لم تنجح العملية فالناتج
يكن
0
ورمز الخطء يكن
0

ملاحظة

1. إذا كان المسار يحتوي على مسافات ومزدوجات فعليك أن تحصره
داخل
علامات التنصيص المنفردة (”)

2. يمكنك تشغيل أي عملية بأوامر سطرية عادي
3. إذا أردت تشغيل أوامر CMD مثلا فالطريقة تكن كالتالي :
Run(@ComSpec & ” /c الأمر”, “”, @SW_HIDE)
ونفس الطريقة تصلح مع كل البرامج التي تحتوي على أوامر سطرية

أما الآن فلنتوجه إلى الدالتين االأخرتين

ShellExecute و ShellExecuteWait

هذه الدالة لا تتطلب أي ملفات إستدعاء

شكل الدالة

شكل الدالة يكن كالتالي
ShellExecute (“filename”, “parameters”, “workingdir”, “verb”, showflag)
الإعدادات الإفتراضية هي
الخانة الأولا فقط أي
filename

إعدادات الدالة

filename إسم ومسار الملف الذي تريد تشغيله (EXE, .txt, .lnk, etc).
parameters [optional] أي أوامر سطرية خاصة بالبرنامج. فارغة (“”) يعني لا إعدادات.
workingdir [optional] مجلد العمل. فارغة (“”) يعني استخدام مجلد العمل الحالي.
verb [optional] الفعل الذي يطبق,
    $SHEX_OPEN (“open”) = فتح الملف المحدد. الملف يمكن أن يكن ملف تنفيذي, مستند, أو مجلد
    $SHEX_EDIT (“edit”) = تشغيل محرر وفتح مستند لتحريره. إن كان “filename” ليس مستند, الدالة لا تعمل
    $SHEX_PRINT (“print”) = طباعة الملف المحدد. إن كان “filename” ليس مستند, الدالة لن تعمل
    $SHEX_PROPERTIES (“properties”) = فتح خصائص الملف أو المجلد
إقرء الملاحظة للمزيد من المعلومات عن خصائص الفعل

الثوابت توجد في “AutoItConstants.au3”.

showflag [optional] إعدادات الإظهار الخاصة بالإظهار
    @SW_HIDE = نافذة مخفية
    @SW_MINIMIZE = نافذة مصغرة
    @SW_MAXIMIZE = نافذة مكبرة

نتائج الدالة

إذا نجح تشغيل العملية
فالدالة تعطينا رمز pid الخاص بالعملية حيث يمكن غلقها أو التحكم فيها.
إن وجد وإلا فالناتج يكن
-1
هذا بخصوص الدالة
ShellExecute
أما الدالة
ShellExecuteWait
فالناتج يكن رمز إنتهاء البرنامج
وفي حال لم تنجح العملية فالناتج
يكن
0
ورمز الخطء يكن
0

ملاحظات

إذا لم تقم بتخصيص فعل فإن الفعل الإفتراضي سيستخدم.
الفعل الإفتراضي هو الفعل المخزن في الرجيستري.
إن كان لا يوجد فعل إفتراضي في الرجيستري فالفعل “open” سيستخدم.
إن لم تتمكن الدالة من تطبيق الفعل “open” فالفعل الأول الموجود في الرجيستري سيستخدم.
يمكنك تشغيل رابط من خلال هذه الدالة
وذالك
بكتابته مكان مسار الملف

أمثلة

عزيزي هنا سأقم بتقديم أمثلة على كل حالة
طبعا المثال الذي أعطيه لدالة يتطبق على الدالة التي تشابهها
ملاحظة :
سأستخدم في هذا الدرس المتغيرات النظامية التي تعرفنا عليها في
الدرس الثالث
لنبدء على بركة الله

أمثلة عن الدالة run

تشغيل برنامج NVDA

#include <MsgBoxConstants.au3>
local $run = run(@programFilesDir & "\NVDA\NVDA.exe")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "رمز pid", $run, 0, "")


إنشاء نسخة محمولة من برنامج NVDA في المسار c:\NVDA

#include <MsgBoxConstants.au3>
local $run = run(@programFilesDir & "\NVDA\NVDA.exe --create-portable --portable-path c:\NVDA")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "رمز pid", $run, 0, "")


إنشاء نسخة محمولة من برنامج NVDA في المسار c:\NVDA وإظهار رسالة بعد الإنتهاء

#include <MsgBoxConstants.au3>
local $run = runWait(@programFilesDir & "\NVDA\NVDA.exe --create-portable --portable-path c:\NVDA")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "تم غنشاء النسخة", "تم إنشاء النسخة المحمولة في المسار c:\NVDA", 0, "")

أمثلة عن الدالة ShellExecute

سوف أقم بوضع نفس الأمثلة السابقة على الدالة
ShellExecute
تشغيل برنامج NVDA

#include <MsgBoxConstants.au3>
local $run = ShellExecute(@programFilesDir & "\NVDA\NVDA.exe")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "رمز pid", $run, 0, "")


إنشاء نسخة محمولة من برنامج NVDA في المسار c:\NVDA

#include <MsgBoxConstants.au3>
local $run = ShellExecute(@programFilesDir & "\NVDA\NVDA.exe", "--create-portable --portable-path c:\NVDA")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "رمز pid", $run, 0, "")


إنشاء نسخة محمولة من برنامج NVDA في المسار c:\NVDA وإظهار رسالة بعد الإنتهاء

#include <MsgBoxConstants.au3>
local $run = ShellExecuteWait(@programFilesDir & "\NVDA\NVDA.exe", "--create-portable --portable-path c:\NVDA")
MSGBox($MB_OK+$MB_ICONINFORMATION+$MB_SYSTEMMODAL, "تم غنشاء النسخة", "تم إنشاء النسخة المحمولة في المسار c:\NVDA", 0, "")

خاتمة

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

ومسك الختام السلام فالسلام عليكم ورحمة الله تعالى وبركاته

عن ناصر بعزيز

شاهد أيضاً

الدرس السابع في دورة تعلم لغة autoit

الدرس السابع في دورة تعلم لغة البرمجة autoit في هذا الدرس تطرقنا لمربعات الحوار input box

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *