ABA


"Keys Listener ב-C#"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15288 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15288
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   17:56   25.04.09   
אל הפורום  
  Keys Listener ב-C#  
 
   שלום לכולם,
אני מחפש דרך ב-C# לנתח מקשים שנלחצים במקלדת.
כולם מכירים את ה Events של KeyDown או KeyPress או KeyUp

כל אלו עובדים יפה, אבל רק שהפוקוס נמצא ב-Form או בפקדים.

התוכנה שבניתי, פועלת ב-Tray כל הזמן, ואני רוצה לעשות מקשי קיצור.

הצלחתי לעשות משהו כזה אבל בעזרת קוד שכל פעם בודק איזה מקש נלחץ דרך ה-User32.dll (זה הקוד הבא)


//הגדרת השיטה, מתוך קובץ חיצוני
public static extern short GetAsyncKeyState(int vKey);


//דוגמא לשימוש השיטה
while (true)
{
if (GetAsyncKeyState((int)System.Windows.Forms.Keys.A) != 0)
MessageBox.Show("A was pressed");
}

הבעיה בקוד הזה כמו שאתם רואים הוא ללא Event ולכן יש צורך לבדוק בלולאה של While(True) (שפועלת תמיד) איזה מקש נלחץ.

למישהו יש דרך לפתור לי את הבעיה? או בעצם קוד אחר לגמרי?
תודה רבה!!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא הבנתי מה אתה צריך... ובשביל מה אתה צריך את זה אם אפשר לשאול? Nesher  25.04.09 18:11 1
     אממ אוקי.. BlacK EaglE 25.04.09 18:14 2
         זה נקרא Global Hooks Sn00py  25.04.09 18:49 3
             זה באמת Global Hook Net_Boy  25.04.09 21:27 4
                 תודה! BlacK EaglE 26.04.09 00:51 6
             אוקי ...שאלה BlacK EaglE 26.04.09 00:53 7
  ועוד משהו שאני מוסיף Net_Boy  25.04.09 21:29 5
     אני אבדוק ואחזור עם תשובות השבוע, תודה לכם!! BlacK EaglE 26.04.09 00:53 8

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   18:11   25.04.09   
אל הפורום  
  1. לא הבנתי מה אתה צריך... ובשביל מה אתה צריך את זה אם אפשר לשאול?  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   18:14   25.04.09   
אל הפורום  
  2. אממ אוקי..  
בתגובה להודעה מספר 1
 
   כמו שאמרתי אני עובד על תוכנה חדשה שפועלת ב-Tray (תמיד).
בוא נגיד שאם אני לוחץ על Control+f12 או כל צירוף מקשים אחר, התוכנה תעשה משהו.

בעזרת הקוד שצירפתי זה אפשרי! אבל עדיין, הלולאה של ה-While(true) תקועה..

הבנת עכשיו בערך?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   18:49   25.04.09   
אל הפורום  
  3. זה נקרא Global Hooks  
בתגובה להודעה מספר 2
 
   לגבי הקוד שרשמת: אתה יכול לשים את הלולאה בת'ראד נפרד, ואז היא תעבוד בלי להפריע לתוכנית שלך. אם אתה מסתבך עם זה תכתוב, זה ממש פשוט.

האופציה הנכונה יותר: להשתמש ב- WH_KEYBOARD_LL. גוגל יעזור לך בזה. נדמה לי שגם יש דוגמה ב CodeProject.

בהצלחה.

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   21:27   25.04.09   
אל הפורום  
  4. זה באמת Global Hook  
בתגובה להודעה מספר 3
 
   וכדי לכתוב GLOBAL HOOK
המכניזם שמטפל בכל ההודעות המבוקשות צריך להכתב ב DLL
ואז יש מעין מנגנון של Injection לכל process קיים
וה DLL (שזה בעצם EXECTUABLE לכל דבר ועניין) מקבל את ההודעות מכל התהליכים .

וכן עדיף להשתמש בLow Level כדי לקהל הכל.


יש הסברים מפורטים ב MSDN וזה מנגנון מאד מעניין

בהצלחה

נ.ב
אם אתה מתכוון לכתוב KEYLOGGER אז בצורה הנאיבית כל אנטי וירוס הכי פרימטיבי יזהה HOOK גלובלי לKEYBOARD כוירוס. סתם שתדע..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   00:51   26.04.09   
אל הפורום  
  6. תודה!  
בתגובה להודעה מספר 4
 
   נ.ב
זה לא KeyLogger, זה כמו שאמרתי קיצור מקשים מסויים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   00:53   26.04.09   
אל הפורום  
  7. אוקי ...שאלה  
בתגובה להודעה מספר 3
 
   ניסיתי לעשות את השיטה הזו ב-Thread, התוכנה עדיין פועלת ברקע באין מפריע כביכול.
אבל עדיין, התוכנה כל הזמן עובד עם ה-While True הזה..ותופסת מן הסתם 100% מה-CPU בגלל שהיא לא נחה לרגע.

יש פתרון למצב כזה?
תודה רבה!

נ.ב אני אבדוק לגבי האופציה הנכונה יותר. תודה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   21:29   25.04.09   
אל הפורום  
  5. ועוד משהו שאני מוסיף  
בתגובה להודעה מספר 0
 
   אם אתה רוצה סתם מקשים גלובלים לתוכנית שלך
יש מה שנקרא
Global HotKeys

אני אישית נגד השימוש בהם אבל אם בכל זאת אתה רוצה , יש פה אחלה מדריך
http://www.codeproject.com/KB/system/nishhotkeys01.aspx


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   00:53   26.04.09   
אל הפורום  
  8. אני אבדוק ואחזור עם תשובות השבוע, תודה לכם!!  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net