none
בדיקה האם משתמש לחץ על כפתור אבל בתוך טיימר #C RRS feed

  • שאלה

  • אני רוצה לבדוק האם משתמש לחץ על כפתור נגיד F8 ואז להציג הודעה משהו כזה

    if (e.KeyCode == Keys.F9) 
            { 
                MessageBox.Show("Function F9");  
            } 
    

    הבעייה שלי שמתי שהפורם לא בפוקוס אז זה לא עובד.

    הפתרון שלי הוא לבנות את אותו הדבר אבל בטיימר שבודק כל 100 מאיות השנייה האם נלחץ כפתור ואם כן אז להציג את ההודעה. אבל אני לא מבין איך להפעיל את הקוד הזה בתוך טיימר.

    אם יש למישהו פתרון אחר לזיהוי של לחיצת כפתור גם שאני לא בפוקום על ה-FORM אני אשמח לדעת.

    יום רביעי 29 אוגוסט 2012 09:43

תשובות

  • הדרך לתפוס אירועי לחיצה על המקלדת גם כשאתה לא בפוקוס הוא באמצעות Hooks, מנגנון דמוי-אירועים של מערכת ההפעלה שמאפשר לתפוס לחיצה על כפתורים, כמו גם כל מיני אירועים אחרים ברמת מ"ה. 

    בפעם האחרונה שבדקתי (שהיתה לפני די הרבה זמן) לא היתה תמיכה מובנית ב-.NET ב-System Hooks. אבל אפשר למצוא כמה מימושים ב-C# שעוטפים את הקריאות ל-Win32 API וחושפים ממשק דוט-נטי פשוט. כתבתי בעצמי מימוש כזה לפני כמה זמן, ולמרות שהוא נכתב ל-Windows XP, יש סיכוי לא רע שהוא יעבוד גם היום על 7: 

    http://weblogs.asp.net/avnerk/archive/2005/10/06/by-hook-or-by-crook.aspx

    • הוצע כתשובה על-ידי tetitu יום חמישי 30 אוגוסט 2012 06:55
    • סומן כתשובה על-ידי pituachMVP, Moderator יום רביעי 16 אוקטובר 2013 10:49
    יום רביעי 29 אוגוסט 2012 10:14