Программное обеспечение для записи мыши и клавиатуры - имеет ли этот псевдокод смысл? - PullRequest
0 голосов
/ 25 апреля 2019

Мне очень жаль, поскольку у меня нет конкретного кода для показа.Я чрезвычайно новичок в программировании, и я просто ищу общий совет или подсказку / совет.Мне больше некуда было отправлять.Мне бы очень хотелось, чтобы с самого начала не тратить бесчисленные часы, делая что-то совершенно не так.Спасибо за понимание.

Я пытаюсь сделать простой небольшой программный проект на C для курса моего университета.Я решил сделать его Windows-платформой и использовать WinAPI.

Основная цель программы - позволить пользователю записывать нажатия клавиш клавиатуры и движения курсора до тех пор, пока запись не прекратится.А затем разрешите ему воспроизвести записанную последовательность N раз, имитируя записанное движение.Мне не требуется превосходная точность.

Я уже почти охватил часть записи перемещения курсора, и теперь мне нужно добавить часть записи нажатий клавиш и связать ее вместе.

Мой вопрос связан сэто: имеет ли какой-либо смысл следующий псевдокод основной концепции функции записи?

0. Start the recording function. Initialize clean buffer for keystrokes and continuously keep 
reading the keystrokes into that buffer. Create empty queue.
1. Sleep(50)
2. Put sleep(50) into the queue.
3. Get cursor position's and put it into the queue.
3. If buffer is empty, go back to step 1. 
4. If not, keep removing one-by-one keystroke from the buffer and put it into the queue. 
Do that until the buffer is empty.
5. Go back to step 1.

Я полагаю, что при использовании Sleep(50) движение курсора должно составлять почти 20 FPS, что делает его достаточно плавным.Кроме того, процессор не будет использовать 100%.Я думал, что очередь должна быть singly linked list.(вставка в конце списка, чтение с начала).После того, как процесс записи будет завершен, воспроизведение движения будет просто выталкивать одного за другим из очереди.

Моя главная проблема - чтение нажатий клавиш.Как мне сделать это эффективно?Как вы думаете, GetAsyncKeyState из WinAPI должно соответствовать моим потребностям?Также проблема в том, что если во время действия Sleep(50) пользователь ввел, например, три нажатия клавиш.Я не хочу вводить многопоточность, так как на данный момент это далеко от моих знаний.

Есть ли у вас какие-либо советы о том, как обрабатывать нажатия клавиш?Есть ли у вас какие-либо общие советы?Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

Даже самый простой программный проект включает в себя много знаний, особенно метод вызова функций.

Для проекта, над которым вы работаете сейчас, вы должны сначала понять технологию hook ,создание и использование библиотек DLL и сохранение записей.

Detail : Microsoft встроила в API окно сообщения Hook, а именно функцию SetWindowsHookEx, которая можетсначала перехватить информацию, переданную в конкретное окно, и обработать информацию, необходимую для перехватчика, а затем передать ее в оконную функцию или следующую функцию подключения.Первым параметром функции является idHook, который должен установить тип hook.В следующем примере кода они решили установить тип перехватчика WH_GETMESSAGE для перехвата WM_KEYDOWN информации о клавиатуре.

Примечание : если вы хотите использовать эту функцию для получения информации о глобальном окне процесса Hook,вам нужно использовать вызов DLL, поскольку в настоящее время информация о процессах в системе Windows изолирована друг от друга, только путем внедрения других процессов через DLL вы можете получить информацию о других окнах процессов.

Здесь я приведу демонстрационную версию для справкитолько.

https://github.com/Strive-Sun/winapi.git

Надеюсь вам помочь.

...