GetAsyncKeyState 需要说明
GetAsyncKeyState Explanation required
我想使用控制台应用程序制作一个小的键盘记录器,但我在网上偶然发现了这个源代码,但我很难理解它。
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 循环。如果我错了请纠正我。
因此,如果我们当前按下的键被正确...按下,它将 return 一些值(想知道这是什么值...也许是键码值?请纠正我,因为我我确定我错了)。
但是IF是我完全失去它的部分。如果我的理解是正确的,那么写行只有在我们得到 -32767 时才会发生,谁知道呢?这就是我想知道的。为什么是-32767?为什么即使我们从来没有得到-32767,它仍然有效,例如 LMB 是 1...?
If my understanding is correct, then the write line will only happen if we get -32767 which is who knows what?
-32767
(0x8001)的值是一个重要的值。 GetAsyncKeyState
return是一个short
,表示它是16位return值的最低位(0)。
根据文档:
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.
That means it is looking for a key press between calls.
我想使用控制台应用程序制作一个小的键盘记录器,但我在网上偶然发现了这个源代码,但我很难理解它。
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 循环。如果我错了请纠正我。
因此,如果我们当前按下的键被正确...按下,它将 return 一些值(想知道这是什么值...也许是键码值?请纠正我,因为我我确定我错了)。
但是IF是我完全失去它的部分。如果我的理解是正确的,那么写行只有在我们得到 -32767 时才会发生,谁知道呢?这就是我想知道的。为什么是-32767?为什么即使我们从来没有得到-32767,它仍然有效,例如 LMB 是 1...?
If my understanding is correct, then the write line will only happen if we get -32767 which is who knows what?
-32767
(0x8001)的值是一个重要的值。 GetAsyncKeyState
return是一个short
,表示它是16位return值的最低位(0)。
根据文档:
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. That means it is looking for a key press between calls.