【发布时间】: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 页面的链接,您的评论就足以成为答案:)。
-
那么,你到底为什么要使用你不懂的代码?