0
[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);

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

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

4

2 回答 2

0

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

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

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

于 2016-09-21T04:22:53.963 回答
-1

我认为这应该有效:

BeginInvoke((MethodInvoker)delegate{ BlockInput(true); });
于 2013-11-04T21:17:03.287 回答