鼠标和键盘录音软件-此伪代码有意义吗?

时间:2019-04-25 19:33:44

标签: c winapi automation keyboard keystroke

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

我正在尝试用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。 (插入列表的末尾,从头开始读取)。录制过程完成后,只需简单地从队列中逐个弹出机芯的重放即可。

我的主要问题是阅读按键。我应该如何有效地做到这一点?您认为GetAsyncKeyState中的WinAPI应该符合我的需求吗?同样的问题是,如果在Sleep(50)的持续时间内用户输入了例如三个击键,该怎么办?我现在不想引入多线程,因为这远远超出了我的了解。

您对如何处理击键记录有任何建议吗?您有什么一般建议吗?谢谢。

1 个答案:

答案 0 :(得分:-1)

即使最简单的软件项目也需要很多知识,尤其是调用函数的方法。

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

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

注意:如果要将此函数用于Hook全局进程窗口信息,则需要使用DLL调用,因为如今Windows系统中的进程信息是相互隔离的,只能通过注入通过DLL的其他进程可以获取其他进程窗口的信息。

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

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

希望能为您提供帮助。