Событие от клавиатуры или мыши.

Тема в разделе "WASM.BEGINNERS", создана пользователем Vituskosoy, 16 янв 2010.

  1. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    Посоветуйте, пожалуйста, код, останавливающий проигрывание PlaySound, при движении или клике мыши или клавиатуры. Желательно по-компактней, нужно для внедрения в программу.
    Спасибо.
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Vituskosoy
    сам понял что сказал? хоть бы подробности какие дал.
     
  3. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    Конкретнее:
    В ломаной программе я в определенный момент запускаю проигрывание wav-файла...
    Нужно остановить проигрывание при любом событии от мыши/клавиатуры.
    Сейчас пробую с GetCursorPos, но много параметров приходится обрабатывать.
    Нет ли простенькой булевой функции, которая возвращает - было событие или нет?
    Думаю, достаточно обработки только мыши.
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    обработать сообщения окну?
     
  5. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    Никаких окон, просто при движении мыши или нажатии любой клавиши остановить музыку.
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Vituskosoy
    http://msdn.microsoft.com/en-us/library/ms646299%28VS.85%29.aspx
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    если приложение имеет хотя бы одно окно, то вполне сойдет WaitForInputIdle
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    но как всегда окажется, что окна на самом деле есть в огромном количестве
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Не сойдет. WaitForInputIdle с другой оперы.
    Смотри GetLastInputInfo
     
  10. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    Спасибо за советы, но все предложенные функции, имеют довольно много аргументов для своего вызова, поэтому реализовал на GetCursorPos:

    invoke PlaySound, ADDR pszSound, 0, 20009h ;'1.wav', 0, SND_FILENAME | SND_ASYNC | SND_LOOP
    invoke GetCursorPos, offset StartX
    WaitMouse:
    invoke Sleep,1F4h ;500ms
    invoke GetCursorPos, offset FinishX
    mov eax,[StartX]
    cmp eax,[FinishX]
    jne SoundOff
    mov eax,[StartY]
    cmp eax,[FinishY]
    je WaitMouse
    SoundOff:
    invoke PlaySound, 0, 0, 40h ;0, 0, SND_PURGE
     
  11. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    Вобщем не работает... В виде самостоятельной программы (консольной или оконной) код работоспособен, а вставленый в нужный ехе-шник, не пашет, GetCursorPos возвращает 0.
    Хочу попробовать GetLastInputInfo, но вызова этой функции нет в программе, как его туда интегрировать?
     
  12. Vituskosoy

    Vituskosoy New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2009
    Сообщения:
    18
    ...оказывается нельзя было переменные размещать в сегменте кода (или как он там щас называется), все получилось.
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Все можно, просто надо уметь. А вообще это действительно плохой стиль.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    valterg
    Сегмент кода не доступен для записи, что дескриптор сегмента определяет. mov dword ptr cs:[esp] не пройдёт. Вы запутались изза одинаковых сегментов данных и кода, они имеют нулевые базы и размер равный пределам ап процесса. Но тип доступа к сегменту не является атрибутами страниц. Это разные вещи.
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Проблемы возникают когда ты пытаешься в эти переменные писать --> ситуация исправляется, когда в PE-заголовке подправишь флаги секции .text или расположишь переменные StartX и FinishX в стеке