' 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.