זה זמן לפרויקט סופשבוע שוב והיום תלמד איך לבנות תפריט טריי מערכת קל משום כך ב-PowerShell, בו תוכל להפעיל בקלות ובמהירות את סקריפטי ה-PowerShell האהובים עליך הכי הרבה. תוכל לראות למטה את התוצאה הסופית.

במאמר זה, תלמד כיצד לבנות תפריט GUI שלך באמצעות PowerShell על ידי פיצול התהליך לשלבים.
דרישות סביבה וידע
לפני שתתעמ淩淩n淩淩d淩淩淩淩淩c淩淩淩淩淩淩淩淩淩淩淩淩淩טש לעממינ淩淩d淩淩淩淩淩淩淩ו淩淩o淩淩淩淩淩ע淩עד:
- Windows 7 או מאוחר יותר
- Windows PowerShell 3 או מאוחר יותר – הגרסה האחרונה של .NET Core 3.0 עם PowerShell 7 התצוגה מתאימה לעבודה בחלונות עקב לתמיכה התוווספה לאחרונה ב-WPF וב-WinForm, אך איננה נבדקת.
- .NET Framework 4.5 או מאוחר יותר
- A familiarity with Windows Forms (WinForms) You can, however, due this with WPF too though.
לפרויקט זה, החדשות הטובות הן שאין צורך באמת להיסמך על Visual Studio, PoshGUI, או כל כלי פיתוח UI אחר כי הרכיבים העיקריים של פרויקט זה יתבססו על הרכיבים הבאים:
- NotifyIcon – זה ייווצג כסמל המערכת הניתן להתאמה אישית בשורת המשתמש.
- תפריט ההקשר – מכיל כאשר המשתמש ילחץ על התמונה במגש המשימה.
- פריט תפריט – אובייקטים יחידים לכל אפשרות בתפריט לחיצה ימנית.
פתחו את עורך סקריפט הפוורשל המועדף עליכם ובואו נתחיל!
עבור פרויקט זה תצטרכו לבנות שלוש פונקציות: שתי פונקציות להצגה/הסתרה של המסוף כדי לספק חוויית משתמש נקייה ואחת להוספת פריטים לתפריט המשימה שלכם. פונקציות אלו ישמשו כיסוד לשימוש מאוחר יותר ויקלו על חייכם הרבה יותר, כפי שתלמדו מעט מאוחר יותר במאמר זה.
הצגה/הסתרה של חלון המסוף
מלבד אם נסתר, כאשר אתם מפעילים סקריפט פוורשל, המסוף המוכר של פוורשל יופיע. מאחר ופריטי התפריט בטופס הפוורשל שתיצרו יפעילו סקריפטים, עליכם לוודא שהמסוף לא יופיע. אתם רק רוצים שיבצע.
כאשר סקריפט מופעל, אתם יכולים להחליף את תצוגת חלון המסוף של פוורשל להצגה או לא להצגה באמצעות פעולה מעטה של .NET.
הוסף תחום Window .NET להפעלה הנוכחית. לעשות זאת, יש להשתמש ב-C# כפי שמוצג למטה. שני השיטות שיש לך צורך לטעון להקשר הם GetConsoleWindow ו-ShowWindow. על ידי טעינת אלו DLLs לזכרון, אתה חושף חלקים מסוימים של ה-API, מה שמאפשר לך להשתמש בהם בהקשר של סקריפט PowerShell שלך:
צור שתי פונקציות באמצעות הטעינה למעלה באמצעות השימוש בשיטות GetConsoleWindow()
ו-ShowWindow()
כפי שמוצג למטה.
עם שתי פונקציות אלו, יש לך כעת אמצע להציג או להסתיר את חלון הקונסול כרצונך.
הערה: אם ברצונך לראות פלט מהסקריפטים שנכנסים דרך התפריט, תוכל להשתמש בPowerShell transcripts או בתכונות הלוג שמבוססות על טקסט אחר. זה מאפשר לך לשמור שליטה בניגוד להפעלת ישיבת ה-PowerShell רק עם הפרמטר WindowStyle כדי להסתיר.
כעת התחל לבנות קוד סקריפט על ידי קריאה ל-Start-HideConsole
. כאשר הסקריפט הנקבע בתפריט PowerShell מופעל, זה יוודא שחלון ישיבת ה-PowerShell לא יופיע.
יצירת אפשרויות תפריט
עכשיו זה הזמן ליצור את אפשרויות התפריט. לוודא שתוכל ליצור בקלות אפשרויות חדשות מאוחר יותר, יש ליצור פונקציה נוספת הפעם בשם New-MenuItem
. כאשר אתה קורא לפונקציה זו, היא תיצור אובייקט MenuItem חדש מ-.NET שתוכל להוסיף אז לתפריט.
כל אפשרות בתפריט תפעיל סקריפט אחר או תיצא מהמשימה. כדי להתאים לפונקציונליות זו, לפונקציה New-MenuItem
יש שלוש פרמטרים:
Text
– התווית שהמשתמש ילחץ עליהMyScriptPath
– הנתיב לתסריט PowerShell שיש להריץExitOnly
– האפשרות לצאת מהמשימה.
יש להוסיף את קטע הפונקציה הבא לתסריט של התפריט.
המשיכו לבנות את הפונקציה New-MenuItem
, צרו אובייקט MenuItem על ידי הקצאתו למשתנה.
לאחר מכן, הקצו את התווית לפריט התפריט.
כעת הוסיפו מאפיין מותאם אישית לפריט התפריט בשם MyScriptPath
. נתיב זה ייקרא כאשר הפריט יילחץ בתפריט.
הוסף אירוע לחיצה לפריט התפריט שמפעיל את התסריט הרצוי. Start-Process מספק דרך נקייה לעשות זאת בתוך בלוק try/catch כך שתוכל לוודא שכל שגיאות ההפעלה של התסריט (כגון אי התאמת PowerShell או התסריט אינו קיים בנתיב הספק) ייפלו לבלוק התפיסה שלך.
הוסף את הלוגיקה הנותרת כדי לספק תנאי יציאה למשדר ולאחר מכן החזר את הפריט שנוצר למשתנה אחר בזמן הריצה.
כעת אמור לך להיות פונקציית 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 תלוי.
רוצה עוד טיפים כמו אלה? בדקו בבלוג הפושר-שלי בכתובת: https://nkasco.com/FriendsOfATA
הקוד המלא נמצא כאן: https://github.com/nkasco/PSSystrayLauncher
המסקנות שלך
ברכות, סיימת את הפרויקט הזה! במאמר זה למדת:
- איך לחשוף רכיבים של ממשק ה- Windows API.
- איך לעבוד עם תפריטי הקשר דרך WinForms ולהוסיף פריטי תפריט נוספים.
- איך ליצור אייקון בסרגל המשימות בפווֹושֶל.
הפרויקט הזה צריך לתת לך מבוא וניסיון מספיק ליצירת תפריט סיסטרי משלך עבור סקריפטים שלך בפווֹשֶל!