Как определить маленькие и большие буквы на клавиатуре? - PullRequest
0 голосов
/ 10 сентября 2018

Как мне захватить как большие, так и маленькие клавиши с помощью (Keys) Marshal.ReadInt32 (lParam) + проверки Shift.

Я хочу научиться захватывать все клавиши клавиатуры, но не знаю, как это сделать правильно.

public delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
private static readonly LowLevelKeyboardProc _proc = HookCallback;

private static IntPtr _hookID = IntPtr.Zero;

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
  if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
  {
    try
    {
       Console.WriteLine((Keys)Marshal.ReadInt32(lParam));
    }
    catch (AccessViolationException ex) { Console.WriteLine($"Error: {ex.ToString()}"); }
  }
  return NativeMethods.CallNextHookEx(_hookID, nCode, wParam, lParam);
}

Многое не понятно.А как можно определить символьные клавиши?

Можно ли конвертировать ключи ToUnicodeEx?

1 Ответ

0 голосов
/ 10 сентября 2018

Проверьте функциональность моего кейлоггера Здесь :

функции, которые вы можете захотеть проверить:

private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false;
            try {
                gHook = new GlobalKeyboardHook(); // Create a new GlobalKeyboardHook
                                                  // Declare a KeyDown Event
                gHook.KeyUp += new KeyEventHandler(gHook_KeyUp);
                gHook.KeyDown += new KeyEventHandler(gHook_KeyDown);
                // Add the keys you want to hook to the HookedKeys list
                foreach (Keys key in Enum.GetValues(typeof(Keys)))
                    gHook.HookedKeys.Add(key);
            }
            catch (Exception z)
            {

            }

        }

public void gHook_KeyDown(object sender, KeyEventArgs e)
        {

            String getCharVar = getCharDown(e.KeyValue);
           if(getCharVar!=null)
                richTextBox1.Text += getCharVar;

        }



private String getCharDown(int Value)
        {

            if (Value > 95 && Value < 106)
                return ((char)(Value-48)).ToString();

            if (Value > 64 && Value < 91)
            {if(!Control.IsKeyLocked(Keys.CapsLock))
                return ((char)(Value+32)).ToString();
            else
                    return ((char)(Value)).ToString();
            }
            if (Value > 47 && Value < 58)
                return ((char)Value).ToString();


            return null;
        }

PS: Вы можете перестроить проект, чтобы можно было проверить.

...