HLFX.Ru Forum Страницы (5): [1] 2 3 4 5 »
Показать все 72 сообщений этой темы на одной странице

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:
1
#include <windows.h>
2
#include <stdio.h>
3
 
4
#define FILE_NAME "keylog.txt"
5
 
6
int main() {
7
  printf("Listen your keys, close to stop\n");
8
  remove(FILE_NAME);
9
  FILE *file = fopen(FILE_NAME, "a");
10
  if (file == NULL) {
11
    printf("Error opening file!\n");
12
    return 1;
13
  }
14
 
15
  DWORD keyCode;
16
  DWORD startTime = GetTickCount();
17
 
18
  while (1) {
19
    for (keyCode = 8; keyCode <= 190; keyCode++) {
20
 
21
 
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);
27
          } else {
28
            fputc(keyCode, file);
29
          }
30
        } else if (keyCode >= 48 && keyCode <= 57) {
31
          fputc(keyCode, file);
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) {
37
          fputs("[TAB]", file);
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) {
49
          fputs("[ALT]", file);
50
        } else if (keyCode == VK_UP) {
51
          fputs("[UP]", file);
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);
58
        }
59
 
60
        fprintf(file, " %ldms\n", currentTime); // time in miliseconds
61
        fflush(file);
62
 
63
      }
64
    }
65
  }
66
 
67
  fclose(file);
68
  return 0;
69
}

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 29-01-2023 в 00:53:

FiEctro
У тебя же два шифта - левый и правый. Так же, как альты и контролы.
Полагаю, что один сканкод это общий VK_SHIFT, а второй VK_L(R)SHIFT, ну и аналогично.

Цитата:
FiEctro писал:
Как от него избавиться?

ДА НЕ КАК!!
Просто игнорируй тот из сканкодов, который тебе неинтересен.

__________________

xaerox on Vivino


Отправлено 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.
Ну или возьми из кваки.

__________________

xaerox on Vivino


Отправлено 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-файлов написать. И ресемплирования при необходимости. В кваке это всё тоже есть.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 15:59:

Цитата:
XaeroX писал:
Тебе проще добавить в проект зависимость, за которой придётся следить, а то и править чужие баги, или потратить один день, разобраться и написать несложный модуль, который потом можно будет при желании как угодно расширять?


Я не настолько хороший программист как ты думаешь

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 16:43:

FiEctro
Не нужно быть хорошим программистом, чтобы выдрать звуковой движок из кваки и вставить его обратно, это даже Бумер умел.

__________________

xaerox on Vivino


Отправлено 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. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 18:17:

Цитата:
Дядя Миша писал:
FiEctro в моём понимании что карту в блокноте делать, что средствами винды выводить асинхронно звук - это одно и тоже. Может тебе на завод надо?



Ну вот я и думаю лучше либы наверное заюзать, но все же интересно как оно работает. А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть. Вообще виндовые либы какие то чудоковатые.

Цитата:
XaeroX писал:
Ты создаёшь буфер с определённым сэмпл-рейтом, допустим 22kHz.
А вав-файлы бывают 11, 22, 44 и 48 kHz. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.


Понятно, спасибо, поковыряю, хотя скорее врядли что то пойму, в коде кваки логика для меня не очень понятная.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 18:25:

Цитата:
FiEctro писал:
А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть.

Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться. Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков? Самый простой вариант - DirectSound, но и он потребует кое-каких усилий.
Цитата:
FiEctro писал:
лучше либы наверное заюзать

Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 18:41:

Цитата:
XaeroX писал:
Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?


Да очень поверхностно. Кстати тоже хороший вариант.

Добавлено 21-02-2023 в 21:41:

Цитата:
XaeroX писал:
Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться. Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков?


Ну почему же оно как бы и реализовано, но как я писал выше очень странно и нелогично. Майкрософт и народ из гугла просто предлагает вызывать их напрямую что я и делал, а вы говорите что нужно писать в общий буфер. Вот и не понятно зачем они тогда людей путают?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Временная зона GMT. Текущее время 08:04. Страницы (5): [1] 2 3 4 5 »
Показать все 72 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024