|
בכתבה זו אני אראה כיצד לכבות את מחשב כף-היד בעזרת תהליך פשוט שעושה שימוש בפונקציית API מורכבת. הקוד מדמה שליחת קודים של כפתור ה-Power אל תוך מערכת-ההפעלה וכך גורם לכיבוי הפוקט.
בכתבה תקבלו הסברים נוספים יחד עם הקוד הנדרש לביצוע הפעולה.
כתבה זו מיועדת למפתחים ומתכנתים.
השלב הראשון הוא לייבא את הפונקציה keybd_event מתוך ליבת מערכת-ההפעלה core.dll.
בעזרת פונקציה זו ניתן לשלוח קודים ומקשים וירטואלים (כמו למשל CTRL-X) ובכך לדמות את פעולת המקלדת או את כפתורי החומרה.
כך מתבצעת פעולת הייבוא ב-#C:
[DllImport("coredll.dll")] public static extern void keybd_event(byte bVK, byte bScan, int dwFlags, int dwExtraInfo);
ישנם מספר קבועים חשובים שבהם נשתמש בקריאה לפונקציה:
KEYEVENTF_KEYDOWN = 0x0 KEYEVENTF_KEYUP = 0x2 KEYEVENTF_SILENT = 0x4 VK_OFF = 0xDF
כך נראית הקריאה לפונקציה:
keybd_event(VK_OFF,0,KEYEVENTF_SILENT | KEYEVENTF_KEYDOWN,0); keybd_event(VK_OFF,0,KEYEVENTF_SILENT | KEYEVENTF_KEYUP,0);
שימו לב כי אנו קוראים לה פעמיים - הפעם הראשונה בשביל לדמות מצב שכפתור ה-Power נלחץ והפעם השניה בשביל לדמות מצב שכפתור ה-Power משוחרר.
לאחר קריאה לפונקציה keybd_event רצוי לגרום לתוכנית שלנו להפסיק לפעול ולתת למערכת-ההפעלה לכבות את המכשיר.
כך זה יתבצע ב-#C:
System.Threading.Thread.Sleep(200);
התהליך ממש אינו מסובך כמו שאתם יכולים לראות.
על הפונקציה keybd_event אני אדבר בפירוט בכתבה עתידית.
אשמח לשמוע תוספות או הערות.
להמשך דיון בנושא אנא הכנסו לפורום המפתחים.
אמיר ולדמן (BlastPPC) פורום המפתחים פוקט פיסי פריק
|