HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Вопросы по WinAPI (https://hlfx.ru/forum/showthread.php?threadid=5934)
Отправлено FiEctro 28-01-2023 в 23:20:
Вопрос по GetAsyncKeyState
Имеется программка которая записывает мои нажатые клавиши в файлик в духе:
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms
И всё бы хорошо, но при нажатии клавиш Shift, Ctrl или Alt он генерирует лишнее пустое событие. Как от него избавиться?
3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms
Собственно сам код:
C++ Source Code:
4 | #define FILE_NAME "keylog.txt" |
7 | printf("Listen your keys, close to stop\n"); |
9 | FILE *file = fopen(FILE_NAME, "a"); |
11 | printf("Error opening file!\n"); |
16 | DWORD startTime = GetTickCount(); |
19 | for (keyCode = 8; keyCode <= 190; keyCode++) { |
22 | if (GetAsyncKeyState(keyCode) & 0x8000) { |
23 | DWORD currentTime = GetTickCount() - startTime; |
24 | if (keyCode >= 65 && keyCode <= 90) { |
25 | if (!(GetAsyncKeyState(VK_SHIFT) & 0x8000)) { |
26 | fputc(keyCode + 32, file); |
30 | } else if (keyCode >= 48 && keyCode <= 57) { |
32 | } else if (keyCode == VK_SPACE) { |
33 | fputs("[SPACE]", file); |
34 | } else if (keyCode == VK_RETURN) { |
35 | fputs("[ENTER]", file); |
36 | } else if (keyCode == VK_TAB) { |
38 | } else if (keyCode == VK_BACK) { |
39 | fputs("[BACKSPACE]", file); |
40 | } else if (keyCode == VK_ESCAPE) { |
41 | fputs("[ESCAPE]", file); |
42 | } else if (keyCode == VK_CAPITAL) { |
43 | fputs("[CAPSLOCK]", file); |
44 | } else if (keyCode == VK_SHIFT) { |
45 | fputs("[SHIFT]", file); |
46 | } else if (keyCode == VK_CONTROL) { |
47 | fputs("[CTRL]", file); |
48 | } else if (keyCode == VK_MENU) { |
50 | } else if (keyCode == VK_UP) { |
52 | } else if (keyCode == VK_DOWN) { |
53 | fputs("[DOWN]", file); |
54 | } else if (keyCode == VK_LEFT) { |
55 | fputs("[LEFT]", file); |
56 | } else if (keyCode == VK_RIGHT) { |
57 | fputs("[RIGHT]", file); |
60 | fprintf(file, " %ldms\n", currentTime); // time in miliseconds |
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 29-01-2023 в 00:53:
FiEctro
У тебя же два шифта - левый и правый. Так же, как альты и контролы.
Полагаю, что один сканкод это общий VK_SHIFT, а второй VK_L(R)SHIFT, ну и аналогично.
Цитата:
FiEctro писал:
Как от него избавиться?
ДА НЕ КАК!! 
Просто игнорируй тот из сканкодов, который тебе неинтересен.__________________
Отправлено FiEctro 29-01-2023 в 19:41:
XaeroX
Спасибо. Действительно срёт дополнительно ещё левым альтом.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено FiEctro 21-02-2023 в 10:18:
Ещё такой вопрос, как можно средствами винды выводить звук асинхронно?
Пробовал с помощью Winmm использовать PlaySound, довольно просто его вызвать, и указывать флаги на синхронную и асинхронную загрузку, однако смешиваться он не умеет.
Попробовал с помощью mciSendString, вроде то что надо, но для каждого потока он в трее вызывает отдельный ffdshow audio decoder что немного выглядит нелепо, но зато звуки смешиваются 
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-02-2023 в 14:05:
FiEctro
Напиши свой микшер для WaveMapper.
Ну или возьми из кваки.
__________________
Отправлено FiEctro 21-02-2023 в 15:50:
Цитата:
XaeroX писал:
Напиши свой микшер для WaveMapper.
Как это должно работать?
Цитата:
XaeroX писал:
Ну или возьми из кваки.
Мде, лучше уж тогда библиотеки внешние юзать.__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-02-2023 в 15:58:
Цитата:
FiEctro писал:
Мде, лучше уж тогда библиотеки внешние юзать.
Чем лучше?
Тебе проще добавить в проект зависимость, за которой придётся следить, а то и править чужие баги, или потратить один день, разобраться и написать несложный модуль, который потом можно будет при желании как угодно расширять?
Добавлено 21-02-2023 в 10:58:
Цитата:
FiEctro писал:
Как это должно работать?
Да в общем-то так же, как работает любой микшер - хоть виндовский WaveMapper или DirectSound, хоть линуксовая ALSA, хоть маковский CoreAudio.
1. Открываешь устройство
2. Устанавливаешь нужные параметры вывода
3. Заполняешь буферы семплами из твоих wav-файлов (в отдельном потоке или в специальной апдейт-функции)
4. Засылаешь буферы в устройство
А, ну придётся ещё код загрузки wav-файлов написать. И ресемплирования при необходимости. В кваке это всё тоже есть.__________________
Отправлено FiEctro 21-02-2023 в 15:59:
Цитата:
XaeroX писал:
Тебе проще добавить в проект зависимость, за которой придётся следить, а то и править чужие баги, или потратить один день, разобраться и написать несложный модуль, который потом можно будет при желании как угодно расширять?
Я не настолько хороший программист как ты думаешь 
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-02-2023 в 16:43:
FiEctro
Не нужно быть хорошим программистом, чтобы выдрать звуковой движок из кваки и вставить его обратно, это даже Бумер умел. 
__________________
Отправлено FiEctro 21-02-2023 в 16:47:
Можно кстати поподробнее про пункт 3 и ресемплирование? Я не очень понял этот момент.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Дядя Миша 21-02-2023 в 17:38:
FiEctro в моём понимании что карту в блокноте делать, что средствами винды выводить асинхронно звук - это одно и тоже. Может тебе на завод надо?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 21-02-2023 в 17:47:
Цитата:
FiEctro писал:
Можно кстати поподробнее про пункт 3 и ресемплирование? Я не очень понял этот момент.
Ты создаёшь буфер с определённым сэмпл-рейтом, допустим 22kHz.
А вав-файлы бывают 11, 22, 44 и 48 kHz. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.__________________
Отправлено FiEctro 21-02-2023 в 18:17:
Цитата:
Дядя Миша писал:
FiEctro в моём понимании что карту в блокноте делать, что средствами винды выводить асинхронно звук - это одно и тоже. Может тебе на завод надо?
Ну вот я и думаю лучше либы наверное заюзать, но все же интересно как оно работает. А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть. Вообще виндовые либы какие то чудоковатые.
Цитата:
XaeroX писал:
Ты создаёшь буфер с определённым сэмпл-рейтом, допустим 22kHz.
А вав-файлы бывают 11, 22, 44 и 48 kHz. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.
Понятно, спасибо, поковыряю, хотя скорее врядли что то пойму, в коде кваки логика для меня не очень понятная.__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-02-2023 в 18:25:
Цитата:
FiEctro писал:
А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть.
Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться.
Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков? Самый простой вариант - DirectSound, но и он потребует кое-каких усилий.
Цитата:
FiEctro писал:
лучше либы наверное заюзать
Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?__________________
Отправлено FiEctro 21-02-2023 в 18:41:
Цитата:
XaeroX писал:
Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?
Да очень поверхностно. Кстати тоже хороший вариант.
Добавлено 21-02-2023 в 21:41:
Цитата:
XaeroX писал:
Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться. Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков?
Ну почему же оно как бы и реализовано, но как я писал выше очень странно и нелогично. Майкрософт и народ из гугла просто предлагает вызывать их напрямую что я и делал, а вы говорите что нужно писать в общий буфер. Вот и не понятно зачем они тогда людей путают?__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!