2009-02-25 4 views
10

Je cherche du code (de préférence C#) qui empêchera la saisie au clavier et à la souris.Comment puis-je bloquer l'entrée du clavier et de la souris en C#?

+0

Pouvez-vous donner un peu plus de contexte quant à la raison pour laquelle vous voulez faire cela? – JaredPar

+0

Voulez-vous dire uniquement dans votre application ou globalement à travers le système? –

+0

Et à quoi? après tout, vous pourriez faire référence à une zone de texte, qui définirait la propriété readonly le ferait. –

Répondre

7

Regardez dans la fonction Win32 BlockInput

Ça a l'air comme un test amusant :)

+0

Puis-je bloquer uniquement certains types d'entrées? Comme seulement le clavier et la souris. – Kishori

19

expansion sur la réponse de Josh (correct). Voici la signature PInvoke pour cette méthode.

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

ajouté du code pour montrer comment bloquer pendant un intervalle

+1

Un grand merci pour cela. Avez-vous un code qui utilise cette signature? Par exemple, bloquer l'entrée, attendre 30 secondes, réactiver l'entrée. Merci –

+0

Jetez un coup d'œil à l'API Managed Windows, il y a peut-être quelque chose qui enveloppe déjà cette fonctionnalité. http://mwinapi.sourceforge.net/ –

+0

@Matt, je prends habituellement la signature de l'assistant PInvoke Interop http://www.codeplex.com/clrinterop – JaredPar

Questions connexes