c# - IMessageFilter 不在管理权限下工作
问题描述
我正在使用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;
}
但我的问题是,当一个进程在管理权限下运行时,我没有收到任何消息。如何获取在管理权限下运行的进程的这些消息?
解决方案
推荐阅读
- typescript - 如何在没有分区键的 DynamoDb 表中查找值?
- ros - Github Action 和 ROS
- .net-core - 使用 Entity Framework Core 5 的自引用表
- c++ - 当用户输入错误的字符时,我的 do while 循环将永远重复
- sql-server - 是否可以利用 SQL Server 数据库项目来管理一组具有各种架构差异的数据库?
- python - 同一类的第二次初始化后 GUI 的 Qlabels 未更新
- flutter - 如何在颤动中赋予 CustomRadioButton 形状?
- sql - 表变量中多列的唯一约束
- r - 如何在 R 中编译神经网络的网格搜索
- graphics - vulkan管道屏障是如何在GPU或其驱动方面实现的?