IMessageFilter не работает с правами администратора - PullRequest
0 голосов
/ 02 мая 2018

Я использую IMessageFilter для отслеживания пользовательского ввода с помощью мыши и клавиатуры.

static void Main()
{
    try
    {
         AddKeyboardMouseDevice(this.Handle);
         RegisterDevices();
    }
    catch (Exception ex)
    {
        Console.WriteLine("Unhandled exception occurred tray application." + ex.Message);
    }
}

public void AddKeyboardMouseDevice(IntPtr windowHandle)
{
    devices.Add(new RAWINPUTDEVICE(1, 6, 0x100, windowHandle));
    devices.Add(new RAWINPUTDEVICE(1, 2, 0x100, windowHandle));
}

public bool RegisterDevices()
{
    if (devices.Count == 0) return false;
    log.DebugFormat("Registering for keyboard mouse hook");
    RAWINPUTDEVICE[] d = devices.ToArray();
    bool result = RegisterRawInputDevices(d, devices.Count, Marshal.SizeOf(typeof(RAWINPUTDEVICE)));
    return result;
}

public bool PreFilterMessage(ref Message m)
{
    if (m.Msg == WM_INPUT)
    {
        int pcbSize = Marshal.SizeOf(typeof(RawInput));

        RawInput pData = new RawInput();
        int result = GetRawInputData(m.LParam,
            RawInputCommand.Input, out pData,
            ref pcbSize, Marshal.SizeOf(typeof(RAWINPUTHEADER)));
        if (result != -1)
        {
            ProcessRawInput(pData, m.LParam);
        }
    }
    return false; 
}

Но моя проблема в том, что когда процесс запускается с правами администратора, я не получаю никаких сообщений. Как я могу получить эти сообщения для процесса, работающего с правами администратора?

...