I'm looking for some code (preferably C#) that will prevent keyboard and mouse input.
            Asked
            
        
        
            Active
            
        
            Viewed 5.1k times
        
    13
            
            
        - 
                    Can you give some more context as to why you would want to do this? – JaredPar Feb 25 '09 at 15:47
 - 
                    Do you mean only in your application or globally across the system? – Iain M Norman Feb 25 '09 at 15:48
 - 
                    And to what; after all, you could be referring to a textbox, which setting the readonly property would do it. – Rowland Shaw Feb 25 '09 at 15:48
 - 
                    Sorry I wish to block input globally – Dean Bates Feb 25 '09 at 16:10
 
3 Answers
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
        JaredPar
        
- 733,204
 - 149
 - 1,241
 - 1,454
 
- 
                    1Many thanks for this. Do you have any code which uses this signature? For example block input, wait for 30 seconds, re-enable input. Thanks – Dean Bates Feb 25 '09 at 16:12
 - 
                    Take a look at the Managed Windows API, it might have something that wraps this functionality already. http://mwinapi.sourceforge.net/ – Matthew Olenik Feb 25 '09 at 17:16
 - 
                    @Matt, i usually just grab the sig from the PInvoke Interop Assistant http://www.codeplex.com/clrinterop – JaredPar Feb 25 '09 at 17:39
 - 
                    @JaredPar I didn't work in my application! does it work on win 7? – Murhaf Sousli Apr 12 '12 at 01:01
 - 
                    2I gave this a shot and it did not work. Does it require privilege elevation? – emd Dec 03 '12 at 15:37
 - 
                    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) – Charles P. Jan 28 '15 at 00:26
 - 
                    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? – Kishori Jul 28 '15 at 05:20
 - 
                    4Can someone explain how to make this work at all? It doesn't block anything for me but apparently works for others. – Zed Jun 19 '17 at 15:18
 - 
                    @Zed 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. https://www.pinvoke.net/default.aspx/user32.blockinput – Artiom Jan 13 '20 at 06:55
 
7
            
            
        Look into the BlockInput Win32 function
Sounds like some fun testing :)
        Josh Stodola
        
- 81,538
 - 47
 - 180
 - 227
 
- 
                    Can I have only specific type of inputs to be blocked? Like only keyboard and mouse. – Kishori Jul 27 '15 at 10:36
 
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
        Grigory Zhadko
        
- 1,484
 - 1
 - 19
 - 33
 
        Suleiman Mohammed Fahim
        
- 33
 - 1
 - 6