1

我使用 C# 在 Win7 中创建了一个服务。在该服务中,我想使用 BlockInput 功能,在 Win7 中它似乎需要管理员。

我在代码中将服务处理器安装程序、帐户、用户名和密码设置为管理员帐户,但 BlockInput 不起作用。注意:在服务属性/登录选项卡下已正确设置。

然后我为我的服务添加了一个清单并将requestedExecutionLevel 设置为“requireAdministrator”。然而 BlockInput 仍然不想工作。

我尝试将 BlockInput 向下移动到客户端级别,然后移动到客户端包装器,但它仍然不想工作。

没有想法了……有什么建议吗?

从这里开始编辑:

这是我的清单(或其中的一部分,抱歉格式很糟糕) <assemblyIdentity version="1.0.0.0" name="BlockInputService.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo>



    namespace BlockInputService
    {
       [ServiceContract(Namespace = "http://BlockInputService")]
       public interface IBlockInputTest
       {
          [OperationContract]
          void BlockInputMethod();
       }

       public class BlockInputTest : IBlockInputTest
       {
          private const string SOURCE = "BlockInputService";
          private const string LOGNAME = "Application";

          [return: MarshalAs(UnmanagedType.Bool)]
          [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
          public static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)] bool fBlockIt);

          public void BlockInputMethod()
          {
             if (!EventLog.SourceExists(SOURCE))
             {
                EventLog.CreateEventSource(SOURCE, LOGNAME);
             }

             try
             {
                bool flag = BlockInput(true);
                EventLog.WriteEntry(SOURCE, "BlockInput(true) returned: " + flag);

                EventLog.WriteEntry(SOURCE, "Sleep for 5 sec");
                Thread.Sleep(5000);
             }
             catch (Exception ex)
             {
                EventLog.WriteEntry(SOURCE, ex.Message);
             }
             finally
             {
                bool flag = BlockInput(false);
                EventLog.WriteEntry(SOURCE, "BlockInput(false) returned: " + flag);
             }
          }
       }
    }


4

1 回答 1

0

我继续前进并使用 SetWindowsHookEx 来捕获 WH_KEYBOARD_LL 和 WH_MOUSE_LL 事件。

我尝试了所有我能想到的让 BlockInput 工作的方法。我仍然认为我只是配置了我的服务错误或其他什么,但我没有时间再担心它了。

谢谢。

于 2012-09-22T14:08:29.797 回答