Я использую 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;
}
Но моя проблема в том, что когда процесс запускается с правами администратора, я не получаю никаких сообщений. Как я могу получить эти сообщения для процесса, работающего с правами администратора?