我正在尝试阻止我的程序中的输入但它不起作用...我读到了这篇文章并且没有找到解决方案只有来自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);
}
}
}
答案 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并吞下所有输入事件是较小的罪恶。