Autor Beitrag
Rufus
Hält's aus hier
Beiträge: 2

Win XP Prof, Win 98 SE, Mandr. Linux 10
D7 Ent
BeitragVerfasst: Mi 09.02.05 15:32 
Hier mein Prob ich will mit SendInput einen string schreiben lassen aber das SendInput schreibt keine sonderzeichen wie -_ . : ; , ?
Kennt einer von euch den grund oder kennt einer ne alternative zu SendInput?

Hier mein code der den String schreibt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button1Click(Sender: TObject);
var
  Inp: TInput;
  I: Integer;
  Str: string;
begin
  Str := Edit1.text;
  Sleep(4000);
  for I := 1 to Length(Str) do
  begin
    // press
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(Str[i]);
    Inp.ki.dwFlags := 0;
    SendInput(1, Inp, SizeOf(Inp));

    // release
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(Str[i]);
    Inp.ki.dwFlags := KEYEVENTF_KEYUP;
    SendInput(1, Inp, SizeOf(Inp));

    Application.ProcessMessages;
    Sleep(80);
  end;
end;


Hoffe das mir einer von euch helfen kann.

mfg Rufus

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.
Noop
Hält's aus hier
Beiträge: 12

Win 98 SE, Win 2000, Win XP SP1, Win XP SP2, Win 2003 Server
D5 Ent., D7 Prof
BeitragVerfasst: Mi 09.02.05 22:53 
Hi,

ich würde es so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Str: string;
  u: SHORT;
begin
  Str := Edit1.text;
  Sleep(1000);
  for I := 1 to Length(Str) do
  begin

    u:=VkKeyScan(Str[i]);

    // press
    if (u and $0100)<>0 then keybd_event(VK_SHIFT, 000);
    if (u and $0200)<>0 then keybd_event(VK_CONTROL, 000);
    if (u and $0400)<>0 then keybd_event(VK_MENU, 000);
    keybd_event(u, 000);

    // release
    keybd_event(u, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

    Application.ProcessMessages;
    Sleep(50);
  end;
end;


Anmerkung: keybd_event ist von der Technik her das gleiche wie SendInput

du hast eine Kleinigkeit vergessen, nämlich SendInput und auch keybd_event verlangt ein virtual-key codes, während du mit Ord() ein ASCII Code übergeben hast ... so kam es, das Sonderzeichen nicht funktionieren wollten, weil die Codes nur teilweise kompatibel waren weil du nämlich SHIFT, ALT usw. seperat simulieren musst.

Fehlerzeile: Inp.ki.wVk := Ord(Str[i]);

Du solltest wissen, "virtual key"'s hat für jede Taste EIN Code, und da gibt es auch kein Unterschied zwischen zB "a" und "A", da die beiden A's auf der selben Taste liegen und den Code $41 haben im Gegensatz zu ASCI-II, wo A = $41 und a = $61 ist.
Rufus Threadstarter
Hält's aus hier
Beiträge: 2

Win XP Prof, Win 98 SE, Mandr. Linux 10
D7 Ent
BeitragVerfasst: Mi 09.02.05 23:33 
Ich bin beeindruckt man lehrnt nie aus^^
Vielen dank für den hinweis und den Code. :flehan: :flehan: :flehan:

mfg Rufus