Hier ist eine virtuelle Touchpad-Taste. Wenn ich die 'TOUCH' auf dem Bildschirm drücke, wird 'ab' angezeigt. Ich versuche BlockInput zu verwenden, um die Eingabe von Maus und Tastatur für 2 Sekunden zu verhindern, direkt nachdem die TOUCH-Taste gedrückt wurde. Aber es funktioniert nicht, ich denke, man muss einen Timer für den BlockInput setzen, any1 weiß, wie man das macht? Hier ist mein Code:Verwenden von BlockInput zum Sperren der Tastatur- und Mauseingabe
public partial class TRY
{
[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 void TOUCH(string key)
{
if (key == "Press")
{
PressAndRelease("a");
PressAndRelease("b");
ReleaseKeys();
TRY.BlockInput(true);
Thread.Sleep(2000);
TRY.BlockInput(false);
}
}
Sie suchen nicht nach Fehlern, Sie ignorieren den Rückgabewert von BlockInput(). Sie können also nicht wissen, warum es nicht funktioniert. Wirf eine Win32Exception, wenn sie false zurückgibt. –
@HansPassant: Thx für Ihre Info. Mein Code hat keinen Fehler, wenn ich versuche, es zu kompilieren. Aber in der Zeit von 'Thread.Sleep (2000)' kann die Benutzereingabe immer noch empfangen werden. Kannst du mir den Weg zeigen, es zu reparieren? – hakunabean
Vermeiden Sie den Schlaf in diesem (UI?) Thread und verwenden Sie einen Hintergrund-Worker. –