Autor Beitrag
Arbengie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66



BeitragVerfasst: Do 22.07.10 11:38 
Hey, ich will einen kl. Keybinder für ein PC Spiel machen.
Den Chat öffnet man mit der Tasten "t", also muss ich den Tastendruck ja irgendwie "simulieren". Wie kann ich das machen? Mit GetAsyncKeyState prüft man ja, ob eine bestimmte Taste gedrückt worden ist, aber kann man damit auch einen Tastendruck simulieren, obwohl ich wie bei mir die Taste "t" selber nicht drücke.

MfG
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 22.07.10 11:48 
Hallo,

ich denke dieser Thread könnte alles beinhalten was du dazu brauchst.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Fr 23.07.10 09:55 
Ich habe das nicht getestet, müsste aber so funktionieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
  KeyState: TKeyboardState;
  NewKeyState: TKeyboardState; 
  I: Integer;
begin
  ...
  GetKeyboardState(KeyState);                                 // Sichern des aktuellen Zustands
  for I := Low(NewKeyState) to High(NewKeyState) do            // löschen aller nicht beötigten Tasten-
    NewKeyState[I] := 0;                                      // zustände
  NewKeyState[VK_SHIFT] := $81;                               // z.B., wenn [Shift] + [Taste]
  NewKeyState[VK_GewuenschteTaste]] := $81;                   // Taste, die gredrückt werden soll
  SetKeyboardState(NewKeyState);                              // "neuen" Zustand setzen
  try
    SendMessage(Handle, WM_KEYDOWN, VK_GewuenschteTaste, 1);  // Tastendruck simulieren
    SendMessage(Handle, WM_KEYUP, VK_GewuenschteTaste, 1);    // Taste auch wieder loslassen!
  finally
    SetKeyboardState(KeyState);                               // alten Zustand wiederherstellen
  end;
  ... 
end;

Gruß, Trutz

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 23.07.10 10:56 
oder einfacher:

ausblenden Delphi-Quelltext
1:
2:
keybd_event(Ord('T'), 00,               0);
keybd_event(Ord('T'), 0, KEYEVENTF_KEYUP, 0);
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Fr 23.07.10 11:32 
Diese Version nutzt die Windows-API und hat den Nachteil, dass die Message nicht direkt an das gewünschte Fenster geht.
Und wenn schon API, dann besser die modernere Variante SendInput.

Gruß, Trutz

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!