2017-11-21 3 views
-4

Können Sie mir bitte den Code sagen, um die Shift-Taste für eine Weile gedrückt zu halten und dann loszulassen? Ich habe versucht, Sendkeys.Send ("+") zu verwenden, aber es drückt es nur einmal, und ich möchte es für ungefähr 3 Sekunden halten und dann freigeben. Vielen Dank im Voraus für Ihre Hilfe.Wie man eine Taste gedrückt hält?

enter image description here

+0

Kein Bild von Code schreiben . Es wird zu Abstimmungen kommen. – LarsTech

+1

Siehe https://Stackoverflow.com/a/16343101/832052 – djv

+0

Basierend auf Ihrem anderen Kommentar klingt es so, als ob Sie nur die Umschalttaste drücken müssen, wenn Sie sich bewegen. Das ist eine andere Frage. – LarsTech

Antwort

0

einen Versuch geben diese. Sie müssen es möglicherweise auch auf Sekunden formatieren.

Natürlich kann ich keinen praktischen Grund, warum Sie dies tun möchten, denken.

+0

Ich mache ein Programm, das auf bestimmte Orte klickt, z. B. auf einen Autocounter mit Koordinaten. Aber zu jeder Zeit muss ich klicken, um die Umschalttaste an einem Ort zu halten. Und ich weiß nicht, wie ich das machen soll. – Happy

+0

Google "Visual Studio SendKeys". Erster Link Seitenende. (https://msdn.microsoft.com/it-it/library/system.windows.forms.sendkeys.send(v=vs.110).aspx) – Jimi

1

Ich glaube, das hier schon beantwortet haben:

How to simulate held down keys with VB.NET or C#?

Sie haben erwähnt, dass DoEvents nicht das Beste, was sein kann, hier wie so in einer Schleife zu tun, ist ein alternativer Ansatz: https://www.experts-exchange.com/questions/22634280/Holding-a-key-down-my-code-not-working-VB-NET.html

und für den Fall, dass der Link stirbt: Wenn Sie einen "echten" Tastaturschlaf simulieren möchten, würde ich dann mit Systemeinstellungen für Tastaturverzögerung/Geschwindigkeit gehen. Dies kann mit Systemparameter API

Const SPI_GETKEYBOARDDELAY = 22 
Const SPI_GETKEYBOARDSPEED = 10 

Private Declare Function SystemParametersInfo Lib "user32" Alias _ 
    "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, _ 
    ByRef lpvParam As Integer, ByVal fuWinIni As Integer) As Integer 


Private Sub HoldKeyDown(ByVal key As Byte, ByVal durationInSeconds As Integer) 
    Dim targetTime As DateTime = DateTime.Now().AddSeconds(durationInSeconds) 
    Dim kb_delay As Integer 
    Dim kb_speed As Integer 

    SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, kb_delay, 0) 
    SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, kb_speed, 0) 

    While targetTime.Subtract(DateTime.Now()).TotalSeconds > 0 
     keybd_event(key, MapVirtualKey(key, 0), 0, 0) ' Up key pressed 
     keybd_event(key, MapVirtualKey(key, 0), 2, 0) ' Up key released 
     System.Threading.Thread.Sleep(kb_delay + kb_speed) 
    End While 

End Sub 

Nicht sicher erfolgen, wenn dies funktionieren wird, so scheint es drücken Sie einfach die Taste eines Haufen - ich habe keine Chance gehabt zu testen diese

+0

Ordentliche Lösung, jedoch darauf hingewiesen, dass [** 'keybd_event () '**] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304 (v = vs.85) .aspx) ist offiziell veraltet und wird ersetzt durch [**' SendInput() '**] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310 (v = vs.85) .aspx), sodass der vorherige möglicherweise in der Zukunft entfernt wird. –

+0

Ich habe eine objektorientierte Bibliothek (namens 'InputHelper') erstellt, die die neuesten Funktionen verwendet, um Eingaben zu simulieren (' InputHelper.Keyboard' verwendet 'SendInput'). Ich habe noch nicht die Zeit genommen, um eine angemessene Dokumentation dafür zu erstellen, aber die Code- und Release-Dateien enthalten XML-Kommentare, die von Visual Studio während der Codierung automatisch in IntelliSense angezeigt werden. - ** Link ** (mit einer kurzen Erklärung): https://stackoverflow.com/a/45420637/3740093 –

Verwandte Themen