2009-02-25 12 views
10

Sto cercando un codice (preferibilmente C#) che impedisca l'input da tastiera e mouse.Come posso bloccare l'input della tastiera e del mouse in C#?

+0

Puoi dare qualche altro contesto sul perché vorresti farlo? – JaredPar

+0

Intendi solo nella tua applicazione o in tutto il sistema? –

+0

E a cosa; dopo tutto, potreste riferirvi a una casella di testo, che l'impostazione della proprietà readonly lo farebbe. –

risposta

7

Guardate nella funzione BlockInput Win32

Suona come un certo divertimento test :)

+0

Posso avere solo tipi specifici di ingressi da bloccare? Come solo tastiera e mouse. – Kishori

19

Ampliando (corretta) la risposta di Josh. Ecco la firma PInvoke per quel metodo.

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

aggiunto un po 'di codice per dimostrare come bloccare per un intervallo

+1

Mille grazie per questo. Avete qualche codice che usi questa firma? Ad esempio, inserire il blocco, attendere 30 secondi, riattivare l'input. Grazie –

+0

Dai un'occhiata all'API di Windows gestito, potrebbe avere qualcosa che avvolge già questa funzionalità. http://mwinapi.sourceforge.net/ –

+0

@Matt, di solito prendo il sig dall'Interop Assistant PInvoke http://www.codeplex.com/clrinterop – JaredPar