Прога не ловит MOUSE_EVENT

Тема в разделе "WASM.BEGINNERS", создана пользователем Ino, 29 июн 2010.

  1. Ino

    Ino New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    5
    Захотел протестить функцию ReadConsoleInput и для этого написал вот это:
    Код (Text):
    1. :--------------------------------------------
    2. .386
    3. .model flat, stdcall
    4. option casemap:none
    5.  
    6. include c:\masm32\include\windows.inc
    7. include c:\masm32\include\user32.inc
    8. include c:\masm32\include\kernel32.inc
    9. includelib c:\masm32\lib\user32.lib
    10. includelib c:\masm32\lib\kernel32.lib
    11.  
    12. MainProc proto
    13.  
    14. .data?
    15. hstdin dd ?
    16. hstdout dd ?
    17. ir INPUT_RECORD <>
    18. cEvRead dw ?
    19. .data
    20. ConTitle db "Цветовой диапозон атрибутов консоли",0
    21. t db (SIZEOF ConTitle) dup (0)
    22. KE db "Key Event", 0
    23. ME db "Mouse Event", 0
    24. .code
    25. start:
    26.  
    27. invoke FreeConsole
    28. invoke AllocConsole
    29.  
    30.  
    31. invoke GetStdHandle, STD_INPUT_HANDLE
    32. mov hstdin, eax
    33. invoke GetStdHandle, STD_OUTPUT_HANDLE
    34. mov hstdout, eax
    35.  
    36. _exit:
    37.  
    38. .WHILE TRUE
    39.  invoke WaitForSingleObject, hstdin, INFINITE ;(-1)
    40.   invoke ReadConsoleInput, hstdin, addr ir, 1, addr cEvRead
    41.     mov ax,ir.EventType
    42.   .IF (ax==1);KEY_EVENT)
    43.        invoke MessageBox, 0, addr KE, 0, 0
    44.   .ELSEIF (ax==2);MOUSE_EVENT)
    45.        invoke MessageBox, 0, addr ME, 0, 0
    46.   .ENDIF
    47. .ENDW
    48.  
    49. invoke ExitProcess, 0
    50. end start
    51. ;----------------------------------------------------------------
    Событие KEY_EVENT ловится отлично, а вот мышинные - никак.
    Подскажите, пожалуйста, что не так.
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Ino,

    Возможно, нужно сделать что-то вроде SetConsoleMode(hstdin, ENABLE_MOUSE_INPUT). Хотя у меня (XP SP2) мышиные ловятся.
     
  3. Ino

    Ino New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    5
    Да, писал я SetConsoleMode,hstdin, ENABLE_MOUSE_INPUT, но не помогло. Затем я отключил в cmd в свойства\умолчания\выделение мышью. И как только я это выделение отключил, так сразу же сработал SetConsoleMode, stdin, ENABLE_MOUSE_INPUT.Я так понимаю, что система как-то подавляет изменение настроек. А можно ли с этим бороться, ну чтобы не в ручную их менять, а из проги?
     
  4. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    А так?
    SetConsoleMode(hstdin, ENABLE_MOUSE_INPUT or ENABLE_EXTENDED_FLAGS)
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
  6. Ino

    Ino New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    5
    Спасибо! Именно ENABLE_EXTENDED_FLAGS оказывается и не хватало.