Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要GetAsyncKeyState解释_C#_Function_Keylogger - Fatal编程技术网

C# 需要GetAsyncKeyState解释

C# 需要GetAsyncKeyState解释,c#,function,keylogger,C#,Function,Keylogger,我想使用console应用程序制作一个小键盘记录器,我在网上偶然发现了这个源代码,我很难理解它 while(true) { Thread.Sleep(10); for (int i = 0; i < 255; i++) { int keyState = GetAsyncKeyState(i); if (keyState == -32767) { Console.WriteLine((Keys

我想使用console应用程序制作一个小键盘记录器,我在网上偶然发现了这个源代码,我很难理解它

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

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

        if (keyState == -32767)
        {
            Console.WriteLine((Keys)i);
        }
    }
}
while(true)
{
睡眠(10);
对于(int i=0;i<255;i++)
{
int keyState=GetAsyncKeyState(i);
如果(键状态==-32767)
{
控制台写入线((键)i);
}
}
}
据我所知,keystate基本上是一个函数,它告诉我们当前是否按下了某个键。因为我们想检查255个键盘键中是否有任何一个正在被检查,所以我们需要一个for循环。如果我错了,请纠正我

所以如果我们现在按下的键是好的。。。按下,它将返回一些值(想知道这是什么值…可能是键码值?请更正,因为我肯定我错了)

但是如果是我完全失去它的那部分。如果我的理解是正确的,那么只有当我们得到-32767,写行才会发生,谁知道呢?这就是我想知道的。为什么是-32767?为什么即使我们永远得不到-32767,它也能工作,例如LMB是1

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

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

根据文件:

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


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