Entwickler-Ecke

Windows API - problem mit simuliertem tastendruck


Diamond - Do 17.04.08 10:48
Titel: problem mit simuliertem tastendruck
hi
hab hier mal so ne kleine prozedur:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Const
  DIK_M : integer = $32;
  DIK_O : integer = $18;
  DIK_RSHIFT : integer = $36;
var
  flag : integer;
begin
    keybd_event(0, DIK_RSHIFT,flag,0);
  Sleep(100);
    keybd_event(0, DIK_M,flag,0);
  Sleep(100);
    keybd_event(0, DIK_M,KEYEVENTF_KEYUP,0);
    keybd_event(0, DIK_RSHIFT,KEYEVENTF_KEYUP, 0);
  Sleep(100);
    keybd_event(0, DIK_O,flag,0);
  Sleep(100);
    keybd_event(0, DIK_O,KEYEVENTF_KEYUP,0);


geschrieben werden sollten die buchstaben so: Mo
geschrieben werden die buchstaben aber: MO

in diesem fall soll es nicht das schlimmste sein aber ich hab eigentlich vor noch andere programme in dieser richtug zu schreiben wo es durchaus mal auf sowas ankommt ;)
hab da n problem mit "KEYEVENTF_KEYUP" drin denk ich
tastatureingaben sollen global in allen anwendungen laufen deshalb keine VKs

programmiere mit delphi 7
hab gelesen keybd_event soll veraltet sein, find auch nichts in der delphihilfe drüber
aber denk nicht dass es daran liegt, da er die tasten ja alle drückt... nur nicht wieder loslässt.


Diamond - Do 17.04.08 13:57

sprachlos? :lol:
sorry leute aber is echt wichtig..
hab ich da nen programmierfehler drin, funktioniert es nicht mit den anweisungen oder ist das ein bug in delphi 7?

thx


SAiBOT - Sa 26.04.08 08:11

versuchs mit PostMessage, dabei benötigst du allerdings das Handle!
Bsp:

Delphi-Quelltext
1:
2:
PostMessage(FindWindow(nil,PChar(ParamStr(0))), WM_CHAR, Ord('M'),0);
PostMessage(FindWindow(nil,PChar(ParamStr(0))), WM_CHAR, Ord('o'),0);


toms - Sa 26.04.08 08:32

Suche in: Delphi-Forum POSTKEYEX32


Jakob_Ullmann - Sa 26.04.08 22:31

Ich würde es einfach so machen - wenn schon mit keybd_event:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(Ord('M'), 0, 0, 0);
keybd_event(Ord('M'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
keybd_event(Ord('O'), 0, 0, 0);
keybd_event(Ord('O'), 0, KEYEVENTF_KEYUP, 0);


Diamond - Di 29.04.08 10:45

thx für die antworten
habs noch geschafft es selbst zu lösen über folgenden befehl


Delphi-Quelltext
1:
2:
3:
4:
keybd_event(VK_SHIFT, DIK_SHIFT,0,0);
keybd_event(VK_M, DIK_M, 0,0);
keybd_event(VK_M, DIK_M, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, DIK_SHIFT, KEYEVENTF_KEYUP,0);


so lässt er dann doch noch die tasten wieder los ^^