Посоветуйте, пожалуйста, код, останавливающий проигрывание PlaySound, при движении или клике мыши или клавиатуры. Желательно по-компактней, нужно для внедрения в программу. Спасибо.
Конкретнее: В ломаной программе я в определенный момент запускаю проигрывание wav-файла... Нужно остановить проигрывание при любом событии от мыши/клавиатуры. Сейчас пробую с GetCursorPos, но много параметров приходится обрабатывать. Нет ли простенькой булевой функции, которая возвращает - было событие или нет? Думаю, достаточно обработки только мыши.
Спасибо за советы, но все предложенные функции, имеют довольно много аргументов для своего вызова, поэтому реализовал на 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
Вобщем не работает... В виде самостоятельной программы (консольной или оконной) код работоспособен, а вставленый в нужный ехе-шник, не пашет, GetCursorPos возвращает 0. Хочу попробовать GetLastInputInfo, но вызова этой функции нет в программе, как его туда интегрировать?
...оказывается нельзя было переменные размещать в сегменте кода (или как он там щас называется), все получилось.
valterg Сегмент кода не доступен для записи, что дескриптор сегмента определяет. mov dword ptr cs:[esp] не пройдёт. Вы запутались изза одинаковых сегментов данных и кода, они имеют нулевые базы и размер равный пределам ап процесса. Но тип доступа к сегменту не является атрибутами страниц. Это разные вещи.
Проблемы возникают когда ты пытаешься в эти переменные писать --> ситуация исправляется, когда в PE-заголовке подправишь флаги секции .text или расположишь переменные StartX и FinishX в стеке