Page 1 of 1

c++/c KEYBOARD

Posted: Fri Mar 30, 2007 9:34 pm
by p3040074
Μπορεί κάποιος να βοηθήσει; Σε c++ ή c κώδικα πρόγραμμα που να μου εμφανίζει τι πλήκτρα πατάει ο χρήστης;

Posted: Fri Mar 30, 2007 11:05 pm
by AmmarkoV
Σε τι λειτουργικό ?

Posted: Fri Mar 30, 2007 11:59 pm
by p3040074
windows xp

Posted: Sat Mar 31, 2007 12:53 am
by AmmarkoV
Θέλεις να καταγράφεις γενικότερα keystrokes ή σε ένα συγκεκριμένο παράθυρο ?

Posted: Mon Apr 02, 2007 12:38 am
by p3040074
γενικα...

Posted: Mon Apr 02, 2007 6:59 pm
by AmmarkoV
Για γενικότερη καταγραφή όποιου key και να πατήσει ο χρήστης δεν ξέρω , (βασικά δεν μου έχει χρειαστεί και δεν έχω ασχοληθεί..) , αν ψάξεις στο google για "key logger" θα βρείς ούκ ολίγα πράγματα..

Τώρα για να πάρεις συγκεκριμένα κάποιο κουμπί που πατήθηκε στο παράθυρο σου , αρκεί να βάλεις την παρακάτω καταχώρηση για να κάνει intercept τα μηνύματα WM_KEYDOWN (ο κώδικας παρακάτω είναι σε Free Pascal , αν δεν κάνω λάθος το Casing των σταθερών είναι κεφαλαία σε C/C++) , κατα αυτό τον τρόπο κάθε φορά που ο χρήστης πατάει ένα κουμπί και είναι focused το παράθυρο θα κάθεται στην τιμή vkpressed η τιμή του κουμπιού που πατήθηκε..

Code: Select all

function WindowProc(Window: HWnd; AMessage2, WParam,LParam: Longint): Longint; stdcall; export;
begin
  WindowProc:=0;
  case AMessage2 of
    wm_keydown : begin vkpressed:=wparam; end;
  end;
end;
Αν θές να αποθηκεύσεις σε μια μεταβλητή database τι πραγματικά πατήθηκε αρκεί το παρακάτω..

Code: Select all

case vkpressed of
vk_lbutton: database:='LEFT MOUSE';
vk_rbutton : database:='RIGHT MOUSE' ;
vk_mbutton : database:='MIDDLE MOUSE' ;
vk_back : database:='BACKSPACE' ;
vk_tab : database:='TAB' ;
vk_return : database:='ENTER' ;
vk_control : database:='CONTROL' ;
vk_pause : database:='PAUSE' ;
vk_shift : database:='SHIFT' ;
vk_menu : database:='ALT' ;
vk_escape : database:='ESCAPE' ;
vk_space : database:=' ' ;
vk_prior : database:='PAGE UP' ;
vk_next : database:='PAGE DOWN' ;
vk_end : database:='END' ;
vk_home : database:='HOME' ;
vk_left : database:='LEFT ARROW' ;
vk_right : database:='RIGHT ARROW' ;
vk_up : database:='UP ARROW' ;
vk_down : database:='DOWN ARROW' ;
vk_snapshot : database:='PRINTSCREEN' ;
vk_insert : database:='INSERT' ;
vk_delete : database:='DELETE' ;
vk_0 : database:='0' ;
end;