C# 线程中的块输入不工作

C# 线程中的块输入不工作,c#,C#,如果我在主线程中运行blockinput,那么它执行时不会出现问题。 如果我把它放在一个线程中,然后执行它,那么它会返回true,但不会阻止输入。 更有趣的是,如果我从线程内部(而不是从一开始)调试代码也可以 知道为什么吗?不是每个线程都应该有主线程的特权吗。顺便说一句,我是在行政特权下运行它的。我认为这应该行得通: [System.Runtime.InteropServices.DllImportAttribute("User32.dll", EntryPoint = "BlockInput"

如果我在主线程中运行blockinput,那么它执行时不会出现问题。 如果我把它放在一个线程中,然后执行它,那么它会返回true,但不会阻止输入。 更有趣的是,如果我从线程内部(而不是从一开始)调试代码也可以


知道为什么吗?不是每个线程都应该有主线程的特权吗。顺便说一句,我是在行政特权下运行它的。

我认为这应该行得通:

[System.Runtime.InteropServices.DllImportAttribute("User32.dll", EntryPoint = "BlockInput")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);

尝试将清单文件添加到您的项目中,并以管理员权限运行您的应用程序。在清单文件中复制此行

BeginInvoke((MethodInvoker)delegate{ BlockInput(true); });


然后再次尝试运行,您的BlockInput必须正确运行。

您是否检查了
GetLastError
返回的内容?消息队列,即BlockInput阻止的内容,是一个特定于线程的数据结构。Brian,没有错误,它运行平稳。Hans,这是什么意思?我怎样才能找到解决办法?必须有一种方法将BlockInput运行到单独的线程中!
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />