直接读取键盘输入

发布于 2024-11-30 19:16:09 字数 606 浏览 2 评论 0原文

有没有办法直接读取键盘输入?

我所说的直接,是指不使用 Win API 函数或任何预先编写的程序。只是我的简单组装。

例如,我爸爸向我展示了他对 ZX-81 操作系统的拆解。我们找到了一个名为“INKEY$”的过程,它直接进入内存,复制键盘缓冲区的值,并用它们做任何需要做的事情。我知道 ZX-81 是历史性的,但我想知道是否有任何方法可以直接从缓冲区读取。

我已经反汇编了“user32.dll”并查找了 GetAsyncKeyState 和 GetKeyboardState。这是来自 GetAsyncKeyState 的一段代码,它似乎正在执行“从缓冲区读取”并决定如果按下或不按下该键该怎么办(即使在这两种情况下它们都跳转到相同的地址......)

mov edx, [ebp+vKey]
cmp edx, 2
jz loc_7DC73234
cmp edx, 1
jz loc_7DC73234

我爸爸说的现在可能不可能完成,因为键盘是通过 USB 连接的,并且它们有驱动程序和东西来执行这些低级操作。但是,您仍然可以直接从键盘驱动程序保存按键的位置直接读取。

那么,您是否仍然可以访问内存并使用简单的“mov”指令复制一个值来表示是否按下了某个键?谢谢。

Is there any way to DIRECTLY read keyboard input?

By directly, I mean WITHOUT using Win API functions, or any pre written procedure. Just my plain assembly.

For example, my dad showed me his disassembly of a ZX-81 OS. We have found a procedure named 'INKEY$' which directly goes to the memory, copies the values of the keyboard buffer, and does whatever needs to be done with them. I know ZX-81 is historic, but I wanted to know if there is ANY way to read directly from the buffer.

I have disassembled 'user32.dll' and looked up for GetAsyncKeyState and GetKeyboardState. Heres a piece of code from GetAsyncKeyState which seems to be doing the 'reading from buffer' and deciding what to do if the key is pressed or not (Even though in both cases they jump to the same address...)

mov edx, [ebp+vKey]
cmp edx, 2
jz loc_7DC73234
cmp edx, 1
jz loc_7DC73234

My dad said it might be impossible to be done now because keyboards are connected with USB and they have drivers and stuff to do these low level actions. But then you can still read directly from wherever the keyboard drivers saves the keypresses.

So, can you still go to the memory and with a plain 'mov' instruction copy a value saying a key is pressed or not? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文