AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Explizites tasten event auslösen
Thema durchsuchen
Ansicht
Themen-Optionen

Explizites tasten event auslösen

Ein Thema von gibb · begonnen am 29. Mär 2010 · letzter Beitrag vom 26. Mai 2010
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 13:26
Zitat von idefix2:
Nebenbei: Wäre statt ... nicht einfacher ...
da
Zitat:
Code:
wparam := MapIntToKey(strNewSpeed[color=#ff0000][b][i][/b][/color]);
wparam := Ord(strNewSpeed[i]) + Ord('0'); oder gleich
PostMessage(HWNDControl, WM_KEYDOWN, Ord(strNewSpeed[i]) + Ord('0'), 0);
$2B or not $2B
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#12

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 13:57
Wozu soll das nochmalige ctrl-op und shft-up nach dem Tastendruck dienen?
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#13

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 14:04
das hab ich mich auch gefragt aber ist von dir:
"shift loslassen", "Taste drücken", "Taste loslassen", "shift loslassen"
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#14

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 14:12
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.
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#15

Re: Explizites tasten event auslösen

  Alt 6. Mai 2010, 12:16
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
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#16

Re: Explizites tasten event auslösen

  Alt 6. Mai 2010, 14:08
hi,

Ich hab folgendes gefunden:
http://www.delphitricks.com/source-c...oard_keys.html

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
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#17

Re: Explizites tasten event auslösen

  Alt 6. Mai 2010, 21:17
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);
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#18

Re: Explizites tasten event auslösen

  Alt 7. Mai 2010, 11:09
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
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#19

Re: Explizites tasten event auslösen

  Alt 7. Mai 2010, 12:40
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.
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#20

Re: Explizites tasten event auslösen

  Alt 7. Mai 2010, 12:56
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz