需要GetAsyncKeyState说明

时间:2015-05-15 21:31:31

标签: c# function keylogger

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

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?

1 个答案:

答案 0 :(得分:1)

  

如果我的理解是正确的,那么写行只会在我们得到-32767时发生,谁知道什么?

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

根据文件:

  

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