How can I block keyboard and mouse input in C#?
Asked Answered
V

3

13

I'm looking for some code (preferably C#) that will prevent keyboard and mouse input.

Vaunting answered 25/2, 2009 at 15:45 Comment(4)
Can you give some more context as to why you would want to do this?Cuticula
Do you mean only in your application or globally across the system?Brazen
And to what; after all, you could be referring to a textbox, which setting the readonly property would do it.Sphingosine
Sorry I wish to block input globallyVaunting
C
23

Expanding on Josh's (correct) answer. Here's the PInvoke signature for that method.

public partial class NativeMethods {

    /// Return Type: BOOL->int
    ///fBlockIt: BOOL->int
    [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) ;

}

public static void BlockInput(TimeSpan span) {
  try { 
    NativeMethods.BlockInput(true);
    Thread.Sleep(span);
  } finally {
    NativeMethods.BlockInput(false);
  }
}

EDIT

Added some code to demonstrate how to block for an interval

Cuticula answered 25/2, 2009 at 15:55 Comment(9)
Many thanks for this. Do you have any code which uses this signature? For example block input, wait for 30 seconds, re-enable input. ThanksVaunting
Take a look at the Managed Windows API, it might have something that wraps this functionality already. mwinapi.sourceforge.netAlroy
@Matt, i usually just grab the sig from the PInvoke Interop Assistant codeplex.com/clrinteropCuticula
@Cuticula I didn't work in my application! does it work on win 7?Elliellicott
I gave this a shot and it did not work. Does it require privilege elevation?Erk
It does require privileges for obvious reasons (you're blocking most input from the user - control-alt-del and maybe a few others will still work)Aila
This worked for me but I wanted to disable only Keyboard and mouse and support touch. BlockInput blocks everything. Does this accepts any parameter for type of input?Skidway
Can someone explain how to make this work at all? It doesn't block anything for me but apparently works for others.Underbodice
@Underbodice it also doesn't work for me, but if I run the app with Administrator rights - it works fine. It can be disabled by pressing Ctrl+Alt+Del. pinvoke.net/default.aspx/user32.blockinputEulau
A
7

Look into the BlockInput Win32 function

Sounds like some fun testing :)

Assize answered 25/2, 2009 at 15:49 Comment(1)
Can I have only specific type of inputs to be blocked? Like only keyboard and mouse.Skidway
I
0
using System.Runtime.InteropServices;
public partial class NativeMethods
{        
    [DllImport("user32.dll", EntryPoint = "BlockInput")]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool BlockInput([MarshalAs(UnmanagedType.Bool)] bool fBlockIt);
}

internal is not public. So it does not fall into the CA1401

A public or protected method in a public type has the System.Runtime.InteropServices.DllImportAttribute attribute

Immoderacy answered 6/5, 2021 at 23:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.