鼠标和键盘录制软件 - 这个伪代码有意义吗?

问题描述 投票:-1回答:1

我真的很抱歉,因为我没有任何特定的代码可以显示。我对编程非常陌生,我只是在寻找一般建议或提示/提示。我无处可发布。我希望不要花费无数个小时从一开始就做一些完全错误的事情。感谢您的理解。

我正在尝试在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,使其相当平滑。此外,CPU不会使用100%。我以为队列应该是singly linked list。 (插入列表末尾,从头开始阅读)。在完成录制过程后,移动的重放将简单地从队列中逐个弹出。

我的主要问题是阅读击键。我该如何有效地做到这一点?你认为来自GetAsyncKeyStateWinAPI应该适合我的需求吗?问题还在于,如果在Sleep(50)的持续时间内,用户输入了例如三次击键。我不想引入多线程,因为目前这远远超出我的知识。

您对如何处理按键录音有什么建议吗?你有什么一般建议吗?谢谢。

c winapi automation keyboard keystroke
1个回答
-1
投票

即使是最简单的软件项目也需要大量的知识,特别是调用函数的方法。

对于您正在进行的项目,您必须首先了解hook技术,DLLs的创建和使用以及记录的保存。

细节:微软内置了一个用于Hook窗口消息的API,即SetWindowsHookEx函数,它可以拦截提交给特定窗口的信息,并处理拦截器所需的信息,然后将其提交给窗口函数或下一个钩子函数。函数的第一个参数是idHook,它需要设置hook的类型。在下面的代码示例中,他们选择安装钩子类型WH_GETMESSAGE来拦截WM_KEYDOWN键盘信息。

注意:如果要将此函数用于Hook全局进程窗口信息,则需要使用DLL调用,因为Windows系统中的进程信息现在彼此隔离,只有通过DLL注入其他进程才能获得有关的信息。其他流程窗口。

这里我提供的演示仅供参考。

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

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.