![]() |
Re: Explizites tasten event auslösen
Zitat:
Zitat:
Delphi-Quellcode:
oder gleich
wparam := Ord(strNewSpeed[i]) + Ord('0');
Delphi-Quellcode:
PostMessage(HWNDControl, WM_KEYDOWN, Ord(strNewSpeed[i]) + Ord('0'), 0);
|
Re: Explizites tasten event auslösen
Wozu soll das nochmalige ctrl-op und shft-up nach dem Tastendruck dienen?
|
Re: Explizites tasten event auslösen
das hab ich mich auch gefragt ;) aber ist von dir:
"shift loslassen", "Taste drücken", "Taste loslassen", "shift loslassen" |
Re: Explizites tasten event auslösen
Eben fällt mir ein - Wenn ich die Messages verfolge, die ein echter Tastendruck produziert, dann wird beim Keyup meistens $8000 und nicht $C000 als LPARAM erzeugt und an meine Hook-Routine übergeben. Das Bit 30 bezieht sich auf den vorherigen Zusatnd der Taste, ich weiss aber nicht sicher, wie der Wert wirklich genau sein muss.
Ich habe jetzt nicht nachgelesen und es nicht probiert, aber versuche doch einmal, das Keyup statt mit LPARAM=$C000 mit LPARAM=$8000 zu erzeugen, möglicherweise kommt dann keine zweite Ziffer nach. ----- Ich habe gemeint danach nicht keyup, sondern keydown, damit der gleiche Status wie vor Deinen künstlichen Tastaturerignissen herrscht. Entschuldige, hab mich verschrieben. Das ganze natürlich nur, wenn die Shift Taste tatsächlich gedrückt war, den Status liefert Dir vorher ShftIsPressed := GetKeyState(VK_SHIFT) and $80 = 0; Für ctrl analog Nachdem die Messages nur an Dein eigenes Fenster gehen, ist das keydown danach wahrscheinlich ohnehin überflüssig, aber ganz sicher bin nicht. |
Re: Explizites tasten event auslösen
Hi
Also hab das getestet. 1. das Piepsen kommt immer noch wenn ich ctrl oder shift drücke, das keyup ctrl hat also keinen einfluss! 2. Das Keyup event produziert auch mit $8000 als lparam weiterhin einen 2 ten tastendruck! mhmm, was kann ich sonst noch machen? gruss gibb |
Re: Explizites tasten event auslösen
hi,
Ich hab folgendes gefunden: ![]() was will er mir damit erklären=? * NOTE: * Setting the keyboard state will not work across applications * running in different memory spaces on Win32 unless AttachThreadInput * is used to connect to the target thread first. *Created: 02/21/96 16:39:00 by P. Below weil das hier klingt doch gut: * Description: * Uses keybd_event to manufacture a series of key events matching * the passed parameters. The events go to the control with focus. <- scheisse aber kann man ja anpassen * Note that for characters key is always the upper-case version of <- gut aber versteh leider nicht wie er das genau macht. * the character. Sending without any modifier keys will result in * a lower-case character, sending it with [ssShift] will result * in an upper-case character! ***************************** habs, wmkeyup muss als lparam $C0000000 mitgegeben werden damits funzt. Also das nur noch 1 Zahl entsteht =D jetzt habe ich aber immer noch das Problem mit ctrl, shift und neu auch gefunden '^' Sieht jemand wie er das umgeht? Gruss gibb |
Re: Explizites tasten event auslösen
Delphi-Quellcode:
ShftGedrueckt := GetKeyState(VK_SHIFT) and 128 = 0; // Shift Status abfragen
CtrlGedrueckt := GetKeyState(VK_CTRL) and 128 = 0; // Ich glaub die Taste heisst VK_CTRL if ShftGedrueckt then keybd_event (VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); if CtrlGedrueckt then keybd_event (VK_CTRL, 0, KEYEVENTF_KEYUP, 0); keybd_event (Taste,0,0,0) keybd_event (Taste,0,KEYEVENTF_KEYUP,0) if ShftGedrueckt then keybd_event (VK_SHIFT, 0, 0, 0); if CtrlGedrueckt then keybd_event (VK_CTRL, 0, 0, 0); |
Re: Explizites tasten event auslösen
GetKeyState(VK_SHIFT) and 128 = 0;
Das ergibt true auch wenn keine shift taste gedrückt ist ^^' aber wofür ist das and 128=0 gut? diese bedingung ist ja immer False.... wie kann dann das result true sein? gruss Sgibb |
Re: Explizites tasten event auslösen
GetKeyState(VK_SHIFT) liefert ein byte, in Bit 8 des Bytes ist der gedrückt-Status der Taste
mit "and 128" wird dieses Bit maskiert, Du kannst auch "and $80" schreiben, dann ist vielleicht noch klarer, was gemeint ist wenn da null herauskommt war die Taste gedrückt, wenn die Taste oben war, kommt 128 heraus, das ist <>0. Schau Dir die Delphi-hilfe zu GetKeyState an Du kannst auch Klammern setzen, wenn Dir die Operatorpriorität nicht unmittelbar klar ist. Der Ausdruck bedeutet (GetKeyState(VK_SHIFT) and 128) = 0 und nicht GetKeyState(VK_SHIFT) and (128 = 0) Die Vergleichsoperatoren haben die niedrigste Priorität von allen Operatoren. |
Re: Explizites tasten event auslösen
mhmm, das ganze gibt trozdem true zurück wenn shift nicht gedrückt ist.
Aber danke für die erklärung mit den klammern. wie das mit dem Maskieren funktioniert habe ich nicht verstanden, kannst du mir hierzu das ganze einweig veranschaulichen? ist das wie bei den Subnetzen wo mit der and operation das binäre verglichen resp. umgeschrieben wird? einfach auf 128 abfragen dann stimmts, nur kommt der leider nie mehr raus aus dem shift/CTRL wenn der mal von meiner app gesetzt wurde... Das einzige was hilft, die app manuell mit der maus beenden und ctrl, shift tasten links und rechts auf der tastatur zu drücken, sonst erholt der sich nimmer XD |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz