Получение сообщений консоли

Тема в разделе "WASM.WIN32", создана пользователем Evg666, 5 мар 2005.

  1. Evg666

    Evg666 New Member

    Публикаций:
    0
    Регистрация:
    12 май 2004
    Сообщения:
    17
    Адрес:
    Russia
    Как отловить нажатие клавиш в консоли Windows
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Evg666
    Код (Text):
    1. ...
    2. __EVENT UNION
    3.   KeyEvent              KEY_EVENT_RECORD          <>
    4.   MouseEvent            MOUSE_EVENT_RECORD        <>
    5.   WindowBufferSizeEvent WINDOW_BUFFER_SIZE_RECORD <>
    6.   MenuEvent             MENU_EVENT_RECORD         <>
    7.   FocusEvent            FOCUS_EVENT_RECORD        <>
    8. __EVENT ENDS
    9.  
    10. INPUT_RECORD STRUC
    11.   EventType WORD    ?
    12.             WORD    ? ; __alignmentDummy
    13.   Event     __EVENT <>
    14. INPUT_RECORD ENDS
    15.  
    16. ...
    17.  
    18. local ir : INPUT_RECORD
    19. local NumOfEvents : dword
    20. local NumOfEventsRead : dword
    21.  
    22. ...
    23.  
    24. invoke GetStdHandle, STD_INPUT_HANDLE
    25. mov esi,eax
    26.  
    27. .while 1
    28.  
    29.   invoke WaitForSingleObject, esi, INFINITE
    30.   .if eax ==  WAIT_FAILED
    31.     ...
    32.     jmp @@exit
    33.   .endif
    34.      
    35.   invoke GetNumberOfConsoleInputEvents, esi, addr NumOfEvents
    36.   .if eax == FALSE
    37.     ...
    38.     jmp @@exit
    39.   .endif
    40.  
    41.   xor ebx,ebx
    42.   .while ebx < NumOfEvents
    43.     invoke ReadConsoleInput, esi, addr ir, 1, addr NumOfEventsRead
    44.     .if eax == FALSE
    45.       ...
    46.       jmp @@exit
    47.     .endif
    48.  
    49.    .if NumOfEventsRead == 1
    50.      .if (ir.EventType               == KEY_EVENT) && \
    51.          (ir.Event.KeyEvent.bKeyDown == TRUE)
    52. !!!
    53.      .endif
    54.    .endif
    55.  
    56. ...