【问题标题】:GetAsyncKeyState Explanation requiredGetAsyncKeyState 需要说明
【发布时间】:2015-05-15 21:31:30
【问题描述】:

我想使用控制台应用程序制作一个小键盘记录器,但我在网络上偶然发现了这个源代码,但我无法理解它。

while(true)
{
    Thread.Sleep(10);

    for (int i = 0; i < 255; i++)
    {
        int keyState = GetAsyncKeyState(i);

        if (keyState == -32767)
        {
            Console.WriteLine((Keys)i);
        }
    }
}

所以据我了解,keystate 基本上是一个函数,它告诉当前是否正在按下某个键。由于我们要检查是否正在检查 255 个键盘键中的任何一个,我们需要一个 for 循环。如果我错了,请纠正我。

所以如果我们当前按下的键很好......按下,它将返回一些值(想知道这是什么值......也许是键码值?纠正我,因为我确定我错了) .

但 IF 是我完全失去它的部分。如果我的理解是正确的,那么只有当我们得到 -32767 时才会发生写入行,这谁知道呢?这就是我想知道的。为什么是-32767?即使我们从来没有得到 -32767,它怎么会起作用,例如 LMB 是 1...?

【问题讨论】:

  • 读取 msdn 页面的 Return Code 部分 - 如果设置了高位,则按键按下,如果自上次调用后按下,则低位为 1 - 对应于-32767 === 0x8001
  • @Petesh 如果您还提供指向 MSDN 页面的链接,您的评论就足以成为答案:)。
  • 那么,你到底为什么要使用你不懂的代码?

标签: c# function keylogger


【解决方案1】:

如果我的理解是正确的,那么只有当我们得到 -32767 时才会发生写入行,这谁知道呢?

-32767 (0x8001) 的值是一个重要的值。 GetAsyncKeyState 返回一个 short,这意味着它是 16 位返回值的最低有效位 (0)。

根据文档:

如果函数成功,则返回值指定自上次调用 GetAsyncKeyState 以来是否按下了键,以及该键当前是向上还是向下。 如果设置了最高有效位,则按键按下,如果设置了最低有效位,则在上一次调用 GetAsyncKeyState 后按键被按下。 这意味着它正在寻找呼叫之间的按键。

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多