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 1 von 5  1 23     Letzte »    
gibb

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

Explizites tasten event auslösen

  Alt 29. Mär 2010, 18:07
Hallo zusammen,

Ich mache folgendes:
Delphi-Quellcode:
procedure TSFontroler.UpdateFanSpeed(AFan : TFanOverlayObject);
var
  HWNDControl : HWND;
  i:Integer;
  wparam: smallint;
  strNewSpeed:String;
begin
  HWNDControl:= getControlHandle(AFan.ControleNumber);
  if Afan.NewSpeed <> -1 then begin
    if HWNDControl <> 0 then begin
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, 0); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, 0); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, 0); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, 0); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, 0); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, 0); // Delete taste rauf
      strNewSpeed:= inttostr(AFan.NewSpeed);
      GPModLog.AddToLog('Speddfancontrole: fan'+ AFan.overlayName + ': ' + strNewSpeed );

      For i:= 1 to Length(strNewSpeed) do begin
        wparam:= MapIntToKey(strNewSpeed[i]);
        PostMessage(HWNDControl, WM_KEYDOWN, wparam,0); // Ctrl runter
    // PostMessage(HWNDControl, WM_KEYUP , wparam, 0); // Taste runter
      end;
    end;
  end;
end;

Function TSFontroler.MapIntToKey(akey: String) : Smallint;
begin
  Case StrToInt(akey) of
    0: Result:= 48;
    1: Result:= 49;
    2: Result:= 50;
    3: Result:= 51;
    4: Result:= 52;
    5: Result:= 53;
    6: Result:= 54;
    7: Result:= 55;
    8: Result:= 56;
    9: Result:= 57;
  End;
end;
So, der grund wieso postmessage mit dem keyUp event auskommentiert ist das der mir immer noch einmal eine Zahl hinzufügt. Scheint irgendwie mit dem lparam zusammen zu hängen... obwohl ich das nicht ganz verstanden habe was da sonst mit muss...

Ausserdem habe ich festgestellt das wenn ich das keyUp event weglasse und ich ctrl oder schift gedrückt halte auf der tastatur es diese messegas auch beinflusst... leider. Lässt sich das irgendwie umgehen? denn das programm läuft im hintergrund mit einem interval von 3 sec und jedesmal machts bing wenn ich die ctrl taste gedrückt halte

Tja jetzt meine frage an euch 1. was sollte da bei lparam mit damit er mir nicht jedesmal beim keyup nochmal ein zeichen hinzufügt?
2. Was kann ich machen damit ctrl&co ignoriert wird?

Danke und Gruss
GIBB
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 30. Mär 2010, 11:18
Hallo

Keiner ne idee? mir währe es extrem wichtig zu wissen wie ich den einfluss von ctrl/Shift und andere dinge die manuell getätigt werden auf meine events unterbinden kann.

Das nervt wirklich ungemein... und ist sozusagen betriebsverhindernd.

Gruss GIBB
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Explizites tasten event auslösen

  Alt 30. Mär 2010, 14:52
Versuchs doch mal mit der Unit SndKeys32: http://www.delphi3000.com/articles/article_1617.asp
Andreas
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 30. Mär 2010, 16:59
Hi,
Danke für die anttwort. Leider hilft Sie mir nichts da ich die message direkt in ein spinedit einer anderen applikation sende. Das geht mit deiner Funktion leider nicht.
Nichtsdestotrotz danke vielmals. Hab mich gerade gefragt ob ich nicht irgendwie feststellen könnte ob zur Zeit gerade shift gedrückt ist und wenn ja dies schnell für 1ms deaktivieren und wieder aktivieren könnte.

Weitere Vorschläge her

Gruss gibb
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Explizites tasten event auslösen

  Alt 30. Mär 2010, 18:14
Also die Taste Control-S müsste doch so aussehen:
Delphi-Quellcode:
const
  LPARAM_KEYUP = $C000; // Bit 31 & 30 gesetzt wie bei WM_KEYUP vorgeschrieben

PostMessage(HWND, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(HWND, WM_KEYDOWN, Ord('S'), 0);
PostMessage(HWND, WM_KEYUP, Ord('S'), LPARAM_KEYUP);
PostMessage(HWND, WM_KEYUP, VK_CONTROL, LPARAM_KEYUP);
Bringt dich das vielleicht weiter?
Andreas
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 30. Mär 2010, 18:25
Hi, naja ganz verkehrt ist es nicht ^^'

aber ich will ja das NICHT controle und NICHT shift gedrückt ist wenn ich ne tasten eingabe mache... aber ev. hast du recht was der erste teil betrifft. Da ich zur zeit gerade mit ner trial version programmiere hab ich die hilfe nicht.

werds aber testen. ev wenn lparam stimmt dann hat er auch nicht mehr das gefühl das shift gedrückt ist. Mein kleiner hoffnungsschimmer

Gruss gibb
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 3. Mai 2010, 16:22
mhmm, ich habe immer noch ein ungelöstes problem.

und zwar ctrl und die "^" taste haben dieselbe auswirkung wie die shift. Ich habe jetzt um das mit der shift taste zu umgehen einfach die werte vom Zahlenpad genommen. (die die mit numlock aktiviert werden) das funktioniert zwar bei shift aber beim resten noch nicht.

Also was mache ich das bei postmessage das useringaben ignoriert werden?

Gruss gibb
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 10:35
Hi,

irgendwie scheint für dieses problem niemand eine lösung zu kennen. Nun Folgende Idee was passiert wenn jemand gerade im word am schreiben ist und shift gedrückt hält, und ich immer ein keyup shift, ctrl usw. sende? Das wird ja nur an diesen handle gesendet oder?

gruss Sev
  Mit Zitat antworten Zitat
idefix2

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

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 12:16
Wenn Du unmittelbar hintereinander "shift loslassen", "Taste drücken", "Taste loslassen", "shift loslassen" schickst, sollte eigentlich nichts unerwümschtes passieren.

Es gibt übrigens die Funktion "sendinput", mit der eine Reihe von Tastatutereignissen mit einem einzigen API-Aufruf in die Messagequeue gestellt werden können, die sollten dann wirklich in jedem Fall unmittelbar hintereinander in der Queue stehen.


Nebenbei: Wäre statt
Delphi-Quellcode:
  Case StrToInt(akey) of
    0: Result:= 48;
    1: Result:= 49;
    2: Result:= 50;
    3: Result:= 51;
    4: Result:= 52;
    5: Result:= 53;
    6: Result:= 54;
    7: Result:= 55;
    8: Result:= 56;
    9: Result:= 57;
  End;
nicht einfacher
 Result := StrToInt (akey) + 48;
  Mit Zitat antworten Zitat
gibb

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

Re: Explizites tasten event auslösen

  Alt 4. Mai 2010, 12:26
hi, hab das jetzt folgendermassen gelöst:
Delphi-Quellcode:
procedure TSFontroler.UpdateFanSpeed(AFan : TFanOverlayObject);
var
  HWNDControl : HWND;
  i:Integer;
  wparam: smallint;
  strNewSpeed:String;
begin

  HWNDControl:= getControlHandle(AFan.ControleNumber);
  if Afan.NewSpeed <> -1 then begin
    if HWNDControl <> 0 then begin
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, $C000); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, $C000); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 46,0); // Delete taste runter
      PostMessage(HWNDControl, WM_KEYUP , 46, $C000); // Delete taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // backspace taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, $C000); // backspace taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // backspace taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, $C000); // backspace taste rauf
      PostMessage(HWNDControl, WM_KEYDOWN, 8,0); // backspace taste runter
      PostMessage(HWNDControl, WM_KEYUP , 8, $C000); // backspace taste rauf
      strNewSpeed:= inttostr(AFan.NewSpeed);
// GPModLog.AddToLog('Speddfancontrole: fan'+ AFan.overlayName + ': ' + strNewSpeed );

      For i:= 1 teo Length(strNewSpeed) do begin
        wparam:= MapIntToKy(strNewSpeed[i]);
        PostMessage(HWNDControl, WM_KEYUP , 17, $C000); // ctrl up
        PostMessage(HWNDControl, WM_KEYUP , 16, $C000); // shift up
        PostMessage(HWNDControl, WM_KEYDOWN, wparam, 0); // Ctrl runter
   // PostMessage(HWNDControl, WM_KEYUP , wparam, $C000); // Taste runter
         PostMessage(HWNDControl, WM_KEYUP , 17, $C000); // ctrl up
        PostMessage(HWNDControl, WM_KEYUP , 16, $C000); // shift up
      end;
    end;
  end;
end;
Das ist wie es gelöst ist zur zeit... kanns leider gerade nicht testen, aber ihr denkt so sollte das gehen das shift und ctrl ignoriert wird? Ausserdem habe ich immernoch das Problem das es mir murks schreibt beim KeyUp resp. das er mir dieselbe zahl nochmals schreibt....

und doch das sieht viel einfacher aus

gruss Sev
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     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 22:05 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