BlockInput方法不能在Windows 7上运行?

时间:2013-12-30 14:27:44

标签: c# .net

我正在尝试阻止我的程序中的输入但它不起作用...我读到了这篇文章并且没有找到解决方案只有来自vista-7及以上windows的问题... 我也在这里找到了未解决的话题,我希望你能帮助我...

来自

的代码
  在youtube video

左翼小姐

他完美地跑了......

我尝试了代码,但什么都没发生......

//------------------------------------------Block Class----------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    namespace WindowsFormsApplication14
    {
        static class InputBlocker
        {
            [DllImport("user32.dll")]
            static extern bool BlockInput(bool fBlockIt);
            private static Timer timer = new Timer();
            static InputBlocker()
            {
                timer.Tick += new EventHandler(tick);
            }
            public static void Block(int mill)
            {
                BlockInput(true);
                timer.Interval = mill;
                timer.Start();
            }
            private static void tick(object sender ,EventArgs e)
            {
                BlockInput(false);
                timer.Stop();
            }
        }
    }

//------------------------------------------Form class---------------------------------
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication14
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                InputBlocker.Block(10000);
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

正确实施pinvoke是战斗的95%。它需要看起来像这样:

    [DllImport("user32.dll", SetLastError = true)]
    static extern bool BlockInput(bool fBlockIt);

    public static void Block(int mill)
    {
        if (!BlockInput(true)) {
            throw new System.ComponentModel.Win32Exception();
        }
        // etc..
    }

期望您现在可以获得一条好的异常消息,告诉您失败的原因。由于显而易见的原因,期望您将“访问被拒绝”,阻止用户操作他的计算机需要UAC elevation

这是一个非常大的锤子,实施IMessageFilter并吞下所有输入事件是较小的罪恶。