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

في هذه المقالة، ستتعلم كيفية بناء واجهة مستخدم النصوص الخاصة بك بواسطة PowerShell عن طريق تقسيم العملية إلى خطوات.
متطلبات البيئة والمعرفة
قبل أن تنغمس، يرجى التأكد من تلبية الحد الأدنى من المتطلبات التالية:
- Windows 7 أو أحدث
- Windows PowerShell 3 أو أحدث – قد يعمل أحدث إصدار من .NET Core 3.0 مع PowerShell 7 المعاينة على Windows بسبب الدعم المضاف حديثًا لـ WPF و WinForm، ولكنه لم يتم اختباره.
- .NET Framework 4.5 أو أحدث
- A familiarity with Windows Forms (WinForms) You can, however, due this with WPF too though.
لهذا المشروع، الخبر السار هو أنك لن تحتاج حقًا إلى الاعتماد على Visual Studio، PoshGUI، أو أي أداة تطوير واجهة مستخدم أخرى كأن العناصر الأساسية التي سيعتمد عليها هذا المشروع هي الآتية:
- NotifyIcon – سيمثل هذا أيقونة صينية النظام قابلة للتخصيص للمستخدم للتفاعل معها.
- قائمة السياق – حاوية عندما يقوم المستخدم بالنقر بزر الماوس الأيمن على أيقونة العلبة.
- عنصر القائمة – كائنات فردية لكل خيار ضمن قائمة النقر بزر الماوس الأيمن.
افتح محرر النصوص الخاص بك في PowerShell المفضل لديك ولنبدأ!
لهذا المشروع، ستقوم ببناء ثلاث وظائف: وظيفتان لإظهار/إخفاء النافذة لتوفير تجربة مستخدم أنظف ووظيفة واحدة لإضافة عناصر إلى قائمة النظام الخاصة بك. ستكون هذه الوظائف أساسًا للاستخدام لاحقًا لتسهيل حياتك كما ستتعلم قليلاً في هذا المقال.
إظهار/إخفاء نافذة الكونسول
ما لم يتم إخفاؤه، عندما تقوم بتشغيل نص PowerShell، ستظهر نافذة الكونسول PowerShell المألوفة. نظرًا لأن عناصر القائمة في النموذج PowerShell الذي ستقوم بإنشائه ستشغل النصوص، يجب عليك التأكد من أن الكونسول لا تظهر. تريد فقط تنفيذها.
عند تنفيذ نص، يمكنك تبديل إظهار أو عدم إظهار نافذة الكونسول PowerShell باستخدام .NET الصغير.
أضف أولاً نوع الـ .NET Window إلى الجلسة الحالية. للقيام بذلك، ستستخدم بعض C# كما سترى أدناه. الطريقتين التي تحتاج إلى تحميلهما في السياق هما GetConsoleWindow و ShowWindow. من خلال تحميل هذه المكتبات الديناميكية في الذاكرة، أنت تكشف عن أجزاء معينة من واجهة البرمجة، مما يتيح لك استخدامها في سياق سيناريو PowerShell الخاص بك:
أنشئ وظيفتين باستخدام الأساليب المحملة أعلاه باستخدام GetConsoleWindow()
و ShowWindow()
كما هو موضح أدناه.
باستخدام هاتين الوظيفتين، لديك الآن وسيلة يمكنك من خلالها إظهار أو إخفاء نافذة الكونسول حسب الرغبة.
ملحوظة: إذا كنت ترغب في رؤية الإخراج من السيناريوهات التي تم تنفيذها عبر القائمة، يمكنك استخدام سجلات PowerShell أو ميزات تسجيل النصوص الأخرى. يتيح لك ذلك السيطرة مقابل تشغيل جلسة PowerShell فقط بمعلمة WindowStyle للإخفاء.
ابدأ الآن في بناء شيفرة السيناريو عن طريق استدعاء Start-HideConsole
. عند تنفيذ سيناريو PowerShell الذي يعتمد على القائمة، سيضمن ذلك أن نافذة وحدة التحكم في PowerShell لا تظهر.
إنشاء خيارات القائمة
حان الوقت الآن لإنشاء خيارات القائمة. من أجل ضمان إمكانية إنشاء خيارات جديدة بسهولة لاحقًا، قم بإنشاء وظيفة أخرى هذه المرة تُسمى New-MenuItem
. عند استدعاء هذه الوظيفة، ستقوم بإنشاء كائن MenuItem جديد .NET يمكنك بعد ذلك إضافته إلى القائمة لاحقًا.
سيقوم كل خيار في القائمة بتشغيل سكريبت آخر أو الخروج من المشغل. لتوفير هذه الوظيفة، تحتوي الوظيفة New-MenuItem
على ثلاثة معلمات:
Text
– التسمية التي سينقر عليها المستخدمMyScriptPath
– المسار إلى النص البرمجي PowerShell للتنفيذExitOnly
– الخيار للخروج من المشغل.
أضف مقتطف الوظيفة التالي إلى نص القائمة.
مواصلة بناء الوظيفة New-MenuItem
، قم بإنشاء كائن MenuItem عن طريق تعيينه إلى متغير.
بعد ذلك، قم بتعيين التسمية النصية لعنصر القائمة.
الآن أضف خاصية مخصصة إلى MenuItem تسمى MyScriptPath
. سيتم استدعاء هذا المسار عند النقر فوق العنصر في القائمة.
أضف حدث النقر إلى MenuItem الذي يطلق النص الذي تريده. يوفر Start-Process طريقة نظيفة للقيام بذلك ضمن كتلة try/catch بحيث يمكنك التأكد من أن أي أخطاء في تشغيل النص (مثل عدم توفر PowerShell أو عدم وجود النص في المسار المحدد) تتوجه إلى كتلة الـ catch الخاصة بك.
أضف المنطق المتبقي لتوفير شرط الخروج للمشغل تليها إرجاع MenuItem الجديد الخاص بك ليتم تعيينه إلى متغير آخر في وقت التشغيل.
يجب أن يكون لديك الآن الوظيفة New-MenuItem
تم إنشاؤها! يجب أن تبدو الوظيفة النهائية مثل هذا:
اختبار وظيفة New-MenuItem
عن طريق نسخ ولصق الكود أعلاه في نافذة تحكم PowerShell الخاصة بك وتشغيل الوظيفة مع توفير بعض قيم المعلمات الوهمية. سترى أنه يتم إرجاع كائن MenuItem من .NET.
إنشاء نموذج مشغل
هل ترغب في المزيد من النصائح مثل هذه؟ تحقق من مدونتي الشخصية لـ PowerShell على: https://nkasco.com/FriendsOfATA
الآن بما أنه يمكنك بسهولة إنشاء عناصر قائمة جديدة، حان الوقت لإنشاء مشغل لشريط النظام الذي سيعرض القائمة.
إنشاء كائن نموذج أساسي لإضافة المكونات إليه. لا يحتاج هذا إلى أي شيء معقد حيث سيكون مخفيًا للمستخدم النهائي وسيبقي تشغيل الوحدة النمطية في الخلفية أيضًا.
بعد ذلك، قم بإنشاء الرمز الذي سيظهر في علبة النظام. فيما يلي الرمز الذي اخترته لاستخدامه PowerShell. في وقت التشغيل، يقوم الكود أدناه بإنشاء رمز فعلي في علبة النظام. يمكن تخصيص هذا الرمز حسب رغبتك عن طريق تعيين متغير SystrayIcon
إلى الرمز المرغوب.
تحقق من وثائق فئة System.Drawing.Icon لرؤية طرق أخرى يمكنك من خلالها تحميل رمز إلى الذاكرة.
عند تشغيل النص، يجب أن ترى رمز PowerShell يظهر في علبة النظام كما هو موضح أدناه.
الآن، قم بإنشاء حاوية لعناصر القائمة الخاصة بك باستخدام كائن ContextMenu جديد وقم بإنشاء جميع عناصر القائمة الخاصة بك. لهذا المثال، ستحتوي القائمة على سكريبتين للتشغيل وخيار للخروج.
بعد ذلك، أضف جميع عناصر القائمة التي تم إنشاؤها إلى قائمة السياق. سيتأكد ذلك من ظهور كل خيار في قائمة النموذج.
أظهر نموذج الإطلاق
الآن بعد أن تم الانتهاء من النموذج، آخر شيء يجب فعله هو عرضه مع التأكد من عدم ظهور نافذة وحدة التحكم PowerShell. قم بذلك باستخدام Start-HideConsole
، عرض نموذج الإطلاق، ثم عرض وحدة التحكم مرة أخرى باستخدام Start-ShowConsole
لتجنب تعليق عملية powershell.exe.
هل ترغب في المزيد من النصائح مثل هذه؟ تفضل بزيارة مدونتي الشخصية حول PowerShell على: https://nkasco.com/FriendsOfATA
يمكن العثور على الشيفرة الكاملة هنا: https://github.com/nkasco/PSSystrayLauncher
ملخصك
تهانينا، لقد أكملت هذا المشروع! في هذا المقال تعلمت:
- كيفية كشف مكونات واجهة برمجة التطبيقات في نظام Windows.
- كيفية العمل مع قوائم السياق عبر WinForms وإضافة عناصر القائمة الفرعية.
- كيفية إنشاء رمز في علبة النظام باستخدام PowerShell.
يجب أن يمنحك هذا المشروع فهمًا كافيًا وتجربة لإنشاء قائمة systray الخاصة بك لنصوص PowerShell!