INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Tastendruck mit LV simulieren!?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.11.2007, 19:31
Beitrag #29

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Tastendruck mit LV simulieren!?
' schrieb:Aber ich erkenne keinen unterschied zwischen Mode_none und Mode_loslassen.
Da wirst du auch keinen Unterschied feststellen. Und zwar deswegen:
Das mit dem "eine Taste eingeben in einer Anwendung" funktioniert ungefähr so: Beim Drücken der Taste wird eine Windows-Message an die aktuelle Anwendung (das ist für gewöhlich die, deren Titelleiste aktiviert ist) gesendet, mit dem Inhalt "Taste X gedrückt" (WM_KeyDown). Bleibt die Taste gedrückt, wird nichts gesendet. Wird die Taste wieder losgelassen, sendet das Betriebssystem WM_KeyUp an die Anwendung. Die Anwendung stellt also im Normalfall nicht selbstständig fest, ob eine Taste noch immer als gedrückt gilt. Zwar gibt es auch hierfür Möglichkeiten (GetAsyncKeyState, GetKeyboardState etc.), aber die benutzt wahrscheinlich keine Anwendung.
Wenn du meinst, dass eine Taste ständig an die Anwendung gesendet wird, solange sie gedrückt bleibt, dann tritt hier die Key-Pepeat-Funktion des Betriebsystems ein. Dann wird eben in einem bestimmten Raster WM_KeyDown (und möglicherweise WM_KeyUp) vom Betriebssystem an die Anwendung gesendet.

Zitat:Wenn ich Mode_none ausgewählt habe, müsste eigentlich egal sein, was für ne Zeit in der Ereignisstrukur drinnen steht und er müsste mir zumindest einmal permanent auf F5 drücken
Eben so ist es nicht. Die von mir verwendete Funktion SendInput habe ich bisher nicht so programmiert, dass die automatische Repeatfunktion aktiviert ist. Selbst wenn ich das machen würde, müsstest du nach 3500ms die Taste loslassen. Du kommst also nicht umhin entweder alle 10ms zu senden mit eine Pause nach 3500 oder zum Zeitpunkt 3500 einmal Loslassen und 10ms stäter wieder drücken. Sollte sowas eine DLL machen, müsste die mehr Eigenintelligenz haben als die, die ich geschrieben habe.

Zitat:Es soll an eine Anwendung alle 10ms für genau 3,5sec. der Tastendruck (ALT und F4) geschickt werden.
Dass die Sache mit 10ms pro Tastendruck so funktioniert, da hab ich doch so meine Zweifel.

Zitat:0ms: ALT-F4 wird gedrückt
3500ms: ALT-F4 wird losgelassen (dazwischen darf es keine Unterbrechung geben)
3510ms: ALT-F4 wird gedrückt
7010ms: ALT-F4 wird losgelassen
usw.
Wie stellt denn deine Anwendung fest, dass die Taste für 3500ms gedrückt ist?
Das würde sie nur mittes GetAsyncKeyState etc machen können - und zwar mit einem Abtastraster von z.B. 1ms. Alleine durch feststellen, dass im Raster von z.B. 10ms eine Taste ankommt kann prinzipiell nicht festgetsellt werden, ob die Taste dauernd gedrückt ist, ober ob sie im Raster von 10ms gedrückt und wieder losgelassen wird. Du schreibst, dass die Taste im Bereich von 3500 bis 3510 losgelassen ist. Bei einem gerasterten Senden alle 10ms kann dieses Loslassen aber nicht festgestellt werden. So wie du das hier schreibst, solltest du mit der bisheriegen Funktionalität meiner DLL auskommen. Ich gehe aber davon aus, dass deine Anwendung die gedrückten Tasten registriert und nicht den Tastaturstatus abfragt.

Möglicherweise funktioniert deine Anwendung wie folgt: Sie erwartet ganz einfach alle 10ms (+-5ms) einen Tastendruck. Damit entsteht ein Raster von 10ms. Nach 3500ms fehlt nun genau ein Rasterpunkt - dadurch wird der von dir gewünschte Effekt - Pause zwischen 3500ms und 3510ms - erreicht.

Du hast jetzt folgende Möglichkeiten:
1) Mach ein SubVI mit hoher Priorität. Durch die hohe Priorität wird das Raster von 10ms garantiert eingehalten. Im SubVI sendet du alle 10ms einen Tastendruck Alt-F4 - einschließlich loslassen. Nach 3500ms - also nach 350 gesendeten Tasten - lässt du einmal Senden aus.
2) Du kuckst bei ni.com ob du was entsprechendes findest.
3) Du wartest, bis mir was eingefallen ist.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Tastendruck mit LV simulieren!? - jg - 31.10.2007, 17:20
Tastendruck mit LV simulieren!? - IchSelbst - 02.11.2007 19:31

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Tastendruck simulieren david126 2 3.621 19.03.2019 13:58
Letzter Beitrag: david126
  Case ausführen bei Tastendruck david126 7 5.642 14.02.2019 22:50
Letzter Beitrag: david126
  Wert per Tastendruck übernehmen NoWay 3 4.637 25.02.2015 11:48
Letzter Beitrag: NoWay
  Einfügen eines Strings bei Tastendruck im aktiven Feld dali4u 2 3.846 21.08.2014 05:51
Letzter Beitrag: sccompu
  Tastendruck aus dem VI in eine Liste umleiten twols 1 3.115 21.11.2012 22:29
Letzter Beitrag: GerdW
  Boolesche Elemente parallel per Tastendruck steuern Goerkjen 6 8.564 20.10.2011 16:54
Letzter Beitrag: fabqu

Gehe zu: