כתיבת תוכנות אשר משתלבות עם מערכת ההפעלה עלולה להוות תסכול רב למתכנתים שאינם מנוסים. כל מתכנת אשר ברצונו לפתח תוכנה שתבצע אינטראקציה עם תוכנות אחרות/הסביבה שבה היא נמצאת (מערכת ההפעלה) צריך לדעת מה המונח "להתממשק" אומר ולמה הוא כל כך חשוב. במדריך זה נלמד מה המונח "להתממשק" אומר וכיצד הוא עוזר לנו לבצע אינטראקציה עם הסביבה.
מה הוא API?
ה-API כולל בתוכו ערכות של ספריות קוד, פקודות, פונקציות ופרוצדורות מן המוכן, בהן יכולים המתכנתים לעשות שימוש פשוט, בלי להידרש לכתוב אותן בעצמם. במילים אחרות, ממשקי תכנות יישומים מאפשרים לנו לקבל מידע מן הסביבה שאיתה אנו רוצים לתקשר ולבצע בה שינויים בקלות.
לדוגמא, כאשר אנו אומרים כי אנו רוצים לכתוב תוכנה אשר תשלח דואר אלקטרוני מה-Outlook אנו בעצם מתכוונים לכך שאנו רוצים "להתממשק" עם ה-Outlook ולנצל תכונות מסוימות שהוא מכיל. לדוגמא, אם נרצה לפתח תוכנה אשר תשווה לנו מספר חלונות שאינם חלק מן התוכנה שלנו (חלונות של הדפדפן, חלונות של מסמכי טקסט ועוד) על ידי לחיצה על קיצור מקשים מסוים אפילו אם התוכנה שלנו ממוזערת. מכאן נגיע ל-WinAPIs, ממשק תכנות היישומים של Windows.
הכרת WinAPIs
WinAPI מאפשר לנו להתממשק עם מערכת ההפעלה ולבצע פעולות כמו: פתיחת תהליכים, סגירת חלונות, שינוי מיקום העכבר ולחיצה על כפתורים במקלדת. כאשר אנו רוצים להתממשק עם סביבה מסוימת עלינו לקרוא את התיעוד (Documentation) של ה-API שבו אנו מעוניינים להשתמש. תיעוד זה מכיל בתוכו מידע על פונקציות וספריות שאותו ה-API מכיל וכך עוזר לנו למצוא מידע שיעזור לנו להשתמש באותו הממשק.
בכדי שנוכל למצוא מידע על ממשק התכנות של Windows עלינו לגשת ל-MSDN (רשת המפתחים של מיקרוסופט) שם ניתן למצוא מידע רב על פונקציות שונות שהממשק מכיל. בכדי להקל עלינו קצת ניתן לגשת לפונקציות (מסודרות לפי קטגוריות) בקישור הבא.
לפני שנתחיל להתתמשק עם מערכת ההפעלה עלינו להבין כיצד מערכת ההפעלה עובדת. מערכת ההפעלה מורכבת מחלונות (Windows), כל חלון משויך לתהליך מסוים (Process). בכדי שנוכל לגרום לשינויים בחלונות מסוימים עלינו להשיג את ה-Handle שלו, מספר המייצג חלון מסוים או אם תרצו מעין תעודת זהות של אותו החלון שאיתו אנו רוצים לתקשר. כאשר למשל נרצה לסגור חלון מסוים, עלינו קודם כל להשיג את ה-Handle של אותו החלון ורק אחר כך לשלוח לו הודעת סגירה. ניתן לקרוא על הודעות וסוגי הודעות בקישור הבא. הפונקציה הבסיסית המשמשת לשליחת הודעות נקראת SendMessage. פונקציה זו מכילה 4 פרמטרים:
- HWND – ה-Handle (תעודת הזהות) של החלון שאליו נרצה לשלוח את ההודעה.
- Msg – ההודעה שנרצה לשלוח לאותו החלון (מתוך רשימת ההודעות).
- WPARAM – מידע נוסף השייך להודעה (פרמטר אופציונאלי).
- LPARAM – מידע נוסף השייך להודעה (גם כן, פרמטר אופציונאלי).
בהנחה שנרצה לסגור את חלון ה-Media Player שפתוח באמצעות התוכנה שלנו, עלינו לבצע את השלבים הבאים:
- להשיג את ה-Handle של אותו החלון (בהמשך המדריך נסביר איך ניתן להשיג Handle של חלונות שונים).
- להשתמש בפונקצית ה-SendMessage עם הודעת ה-WM_CLOSEבכדי לשלוח לחלון הודעת סגירה.
הפרמטר 110 הוא ה-Handle של חלון ה-Media Player, הפרמטר WM_CLOSE הוא בעצם מספר (השתמשנו בו כאן בתור משתנה) אשר אומר למערכת לסגור את החלון. מפני שאיננו צריכים פרמטרים נוספים, את שאר הפרמטרים נשאיר בעלי ערך של 0. נקרא לפונקציה באופן הבא:
SendMessage(110, WM_CLOSE, 0, 0);
אם נכתוב את הקוד הנ"ל בפרויקט שלנו, תופיע לנו שגיאה. הסיבה לכך היא שלא הכרזנו על הפונקציה SendMessage, ובהמשך המדריך עוד נלמד כיצד להכריז על פונקציות מתוך WinAPI.
שינוי שקיפות חלונות באמצעות צירוף מקשים
כעת ניקח את הידע שצברנו ונממש אותו בסביבת הפיתוח של .Net ב-C#.
אייקון התוכנה שנכתוב |
התוכנה שנכתוב תהיה פשוטה לשימוש ותהווה עזר למשתמש. היא תאפשר למשתמש להפוך את החלון הנוכחי שבו הוא צופה לשקוף (את רמת השקיפות המשתמש יבחר באמצעות קיצור מקשים). למשל, כאשר המשתמש ירצה לסכם מסמך שהוא קורא מן האינטרנט, הוא יוכל להפוך את חלון ה-Word לשקוף ולכתוב את הסיכום במקביל. התוכנה שנכתוב תפעל כך:
- כאשר המשתמש לוחץ על הקיצור Win + X שקיפות החלון הנוכחי תרד.
- כאשר המשתמש לוחץ על הקיצור Win + Z שקיפות החלון הנוכחי תעלה.
- כאשר המשתמש לוחץ על הקיצור Win + C החלון יחזור למצב הרגיל (ללא שקיפות כלל).
עלינו לבצע שלושה פעולות בכדי לשנות את השקיפות של החלון הנוכחי באמצעות קיצורי מקשים:
- לזהות צירופי מקשים כמו Win + X.
- להשיג את ה-Handle של החלון הנוכחי בכדי שנוכל לשנות את השקיפות.
- לשנות את שקיפות החלון.
כאשר נסיים לכתוב את התוכנה נוכל לעשות את הדבר הבא:
כתיבה וקריאה בו זמנית על ידי שינוי שקיפות החלון |
להורדת התוכנה המוגמרת (קובץ ההרצה בלבד) בכדי לראות את המוצר המוגמר לחצו כאן.
לאחר שהבנו את שלושת הפעולות שאנו רוצים לבצע, נחפש פונקציות המאפשרות ל-Windows לשלוח לתוכנה שלנו הודעה כאשר נילחץ על קיצור מקשים מסוים. אם נחפש ב-MSDN פונקציה העונה לצורך שלנו נמצא תחת הקטגוריה Keyboard Input Functions את הפונקציה RegisterHotKey. פונקציה זו שולחת לחלון אשר משויך אליה הודעה כאשר צירוף מקשים מסוים נלחץ. באמצעות פונקציה זו נוכל לגרום ל-Windows לשלוח הודעות לחלון שלנו ולהודיע לו כי המשתמש לחץ על צירוף מקשים מסוים.