Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tasten ausgeben (https://www.delphipraxis.net/112932-tasten-ausgeben.html)

KleinAmann 29. Apr 2008 20:20


Tasten ausgeben
 
Hallo,

Ich bin neu in dem Fourm und beschäftige mich seit einiger Zeit mit Delphi.

Nun hab ich das Problem dass ich eine Taste ausgeben will, also einen Tastendruck simulieren.

Ich hab schon gesucht aber leider nichts gefunden wäre nett wenn ihr mir ein paar Tips gibt oder ein Beispiel machen/geben könntet.

Arbeite mit Delphi7

Mfg KleinAmann

Mackhack 29. Apr 2008 20:22

Re: Tasten ausgeben
 
Hast wirklich schon mal versucht Hier im Forum suchenTastendruck simulieren in der Suchfunktion einzugeben? Und da kommt nichts raus?

KleinAmann 29. Apr 2008 20:35

Re: Tasten ausgeben
 
hey,

ich hab bis jetzt immer nach virtuelle tastatur oder virtuellen tastendruck gesucht.
Wollte grad meinen Code den ich jetzt gerade noch geschrieben habe Posten hab da noch Fragen.

Naja sorry :(

PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);

dieser Code virtualisiert ja eine Leertaste wenn ich aber VK_1 angebe also die Taste "1"
dann bringt er ein fehler was muss ich tun?

Fussball-Robby 29. Apr 2008 20:49

Re: Tasten ausgeben
 
Hier wurde die komplette Liste der virtuellen KeyCodes gepostet.

Mfg

KleinAmann 30. Apr 2008 16:21

Re: Tasten ausgeben
 
hey wenn ich jetzt schreib :

Delphi-Quellcode:
PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0);
dann schreibt er ein "c" statts ne "1".

Wa hab ich falsch gemacht?

Mfg KleinAmann

Fussball-Robby 30. Apr 2008 16:34

Re: Tasten ausgeben
 
Probiers mal mit den Prozeduren hier:
Delphi-Quellcode:
procedure PressKey(Key: Word);overload;
begin
  keybd_event(Key, 0, 0, 0);
  keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;

procedure PressKey(Key: Char);overload;
begin
  PressKey(vkKeyScan(Key));
end;

//Aufruf:

  PressKey(vk_SPACE);//Entweder mit virtuellem KeyCode
  PressKey('h');    //Oder mit Char
Mfg

s-off 30. Apr 2008 18:02

Re: Tasten ausgeben
 
Zitat:

Zitat von Fussball-Robby
Hier wurde die komplette Liste der virtuellen KeyCodes gepostet.

Die stehen übrigens auch in der Delphi-Hilfe.

KleinAmann 2. Mai 2008 03:32

Re: Tasten ausgeben
 
hey,

Danke für die Funktion und in der Delphi Help steht nur Key_1 statt VK_NUMPAD1.

Ich hab folgendes Problem und zwar wen ich den befehl
PressKey(vk_NUMPAD1);
ausführen lasse dann erscheint im Editor nichts, wenn ich aber

PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);
PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);
PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);

ausführen lasse dann ist eine Seite voller Einser (1), ich versteh das iwi nicht.
Sieht dann so aus -.-
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
nur die ganze Seite voll.
Ich hab hier den kompletten Code ist nur der Entwurf für ein Programm für mein Kumpel.
Delphi-Quellcode:
unit panel_start;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar, Menus, ComCtrls, ExtCtrls, StdCtrls, FileCtrl,
  Outline, DirOutln, OleCtrls, SHDocVw, OleServer, WordXP;

type
  TPanel = class(TForm)
    menu: TMainMenu;
    menucontroll: TMenuItem;
    Beenden2: TMenuItem;
    Minimieren1: TMenuItem;
    Kalender: TMonthCalendar;
    Button1: TButton;
    procedure Beenden2Click(Sender: TObject);
    procedure Minimieren1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Panel: TPanel;

implementation

{$R *.dfm}

procedure PressKey(Key: Word);overload;
begin
  keybd_event(Key, 0, 0, 0);
  keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;

procedure PressKey(Key: Char);overload;
begin
  PressKey(vkKeyScan(Key));
end;

procedure TPanel.Beenden2Click(Sender: TObject);
begin
Panel.Close;
end;

procedure TPanel.Minimieren1Click(Sender: TObject);
begin
Panel.WindowState := wsMinimized;
end;

procedure TPanel.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('notepad', nil);
  begin
    wnd := FindWindowEx(wnd, 0, 'Edit', nil);

    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);
    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);
    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);


  end;
end;

end.
Hab mir den unteren Teil so vorgestellt :
Delphi-Quellcode:
procedure TPanel.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('notepad', nil);
  begin
    wnd := FindWindowEx(wnd, 0, 'notepad', nil);

    Sleep(5000);
    PressKey(vk_NUMPAD4);
    Sleep(5000);
    PressKey(vk_NUMPAD1);
    Sleep(5000);
    PressKey(vk_NUMPAD2);
    Sleep(5000);
    PressKey(vk_NUMPAD3);
    Sleep(5000);

  end;
end;
Das erste Sleep ist dafür dass man dummerweise auf den Button meines Programmes klicken muss und dann in das Fenser wo es dann
senden soll. Dann funktionierst. Da wollte ich Fragen ob es dort keine direkte engabe gibt dachte dass müsste mit FindWindow funktionieren.

MFG D©MI

toms 2. Mai 2008 03:59

Re: Tasten ausgeben
 
Zitat:

Zitat von KleinAmann
hey wenn ich jetzt schreib :

Delphi-Quellcode:
PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0);
dann schreibt er ein "c" statts ne "1".

Wa hab ich falsch gemacht?

Mfg KleinAmann

Wenn du die Tasten mit keybd_event sendest, muss Notepad den Focus haben.
Mit PostMessage nicht.

Probiere es so:
Delphi-Quellcode:
PostKey(wnd, VK_NUMPAD1);
Delphi-Quellcode:
procedure PostKey(hWindow: HWND; key: Word);
begin
  if IsWindow(hWindow) then begin
    PostMessage(hWindow, WM_KEYDOWN, key,
      MakeLong(0, MapVirtualKey(key, 0)));
    PostMessage(hWindow, WM_KEYUP, key,
      MakeLong(0, MapVirtualKey(key, 0) or $C000));
  end;
end;

KleinAmann 7. Mai 2008 13:10

Re: Tasten ausgeben
 
hey danke für die Antworten,

Delphi-Quellcode:
procedure TPanel.Button1Click(Sender: TObject);
var
  i : Integer;
  wnd: HWND;
begin
  wnd := FindWindow('cabalmain', nil);
  if wnd <> 0 then
  begin
        wnd := FindWindowEx(wnd, 0, 'cabalmain', nil);
        i := 1;
        while i < 10 do
            begin
              if i = 1 then begin Sleep(4000); PressKey(vk_NUMPAD4); Edit2.Text := 'Taste 4 aktiviert'; i:= i+1; Sleep(1900); end;
              begin
                if i > 1 then
                begin
                  i:= i+1;
                  Edit2.Text := 'Taste 1 aktiviert';
                  PressKey(vk_NUMPAD1);
                  Sleep(1400);
                  Edit2.Text := 'Taste 2 aktiviert';
                  PressKey(vk_NUMPAD2);
                  Sleep(1400);
                  end else Edit2.Text := 'faild';
        end;
    end;
  end;
end;
leider funktioniert dass hier nur in Notepad und nicht bei der cabalmain.exe

was ist zu tun?

Naja sorry das ich Frag hatt kaum Internet letzter Zeit viel stress und meine Kumpels wollen endlich dass Programm also sry.

Mfg D○MI

toms 7. Mai 2008 20:57

Re: Tasten ausgeben
 
Was für eine Anwendung ist cabalmain?

KleinAmann 8. Mai 2008 13:29

Re: Tasten ausgeben
 
das ist ein Rollenspiel ^^ soll aber kein Bot werden dafür bin ich zu dumm seht ihr ja ^^
nur so ein away skript.

MFG KleinAmann

toms 12. Mai 2008 17:02

Re: Tasten ausgeben
 
Hast du meine PostKey() Prozedur ausprobiert?

mkinzler 12. Mai 2008 17:05

Re: Tasten ausgeben
 
Und was ist der Unterschied zu einem Bot?

KleinAmann 13. Mai 2008 16:57

Re: Tasten ausgeben
 
PosstKey() prozedur habe ich galube shcon ausprobiert.

Ich meine mit BOT ein Programm dass deinen Char lvlt und skillt mit einem Awayskript meine
ich ein Programm das kann vorteile bringt.
Mfg

toms 14. Mai 2008 20:21

Re: Tasten ausgeben
 
Zitat:

Zitat von KleinAmann
PosstKey() prozedur habe ich galube shcon ausprobiert.

Ich meine mit BOT ein Programm dass deinen Char lvlt und skillt mit einem Awayskript meine
ich ein Programm das kann vorteile bringt.
Mfg

Kannst du dies noch nach Deutsch übersetzen?

KleinAmann 15. Mai 2008 14:58

Re: Tasten ausgeben
 
hey sorry, tut mir echt leid steh grad voll unter stress,

Ich meinte :

" Mit einem BOT meine ich ein Programm das einem Spieler vorteile bringt,
mit einem Awayskript meine ich ein Programm das nicht nützlich sondern nur zum
Spass benutzt wird, es bringt einem Spiele keine gemeinen Vorteile,
ich will ein Programm entwicklen/programmieren dass wen meine Kumpels,
oder ich aus dem Spiel sind, unsere Chars in der Stadt(des Games) atacken abschießt,
in unserem Spiel kann mann seine Attacken anderen zeigen und testen ohne
dass dabei etwas geschiet bzw der Angriff auf Spieler oder MOBS gerichtet ist,
da spielt sich nur die Grafik ab, und die Attacke geht sozusagen in die Luft."

Ich hoffe das dass jetzt verständlich ist,

Mfg KleinAmann ^^

KleinAmann 20. Mai 2008 07:37

Re: Tasten ausgeben
 
jo mt PostKey() hab ichs ausprobiert,
leider nur teilweiße erfolg :(
Abundzu nach dem xten Start funzt es mal kurz.

Das Programm kann man auch mit der windows virtual tastatur bedienen also müsste es ja eigentlich gehn.

Mf KleinAmann

CreekMary 20. Mai 2008 09:28

Re: Tasten ausgeben
 
Hallo,

vielleicht sollten wir unsere Ergebnisse mal zusammenführen?

Ich will das gleiche Programm programmieren, wie du, nur in einem anderen Spiel =)

Mein Thread: http://www.delphipraxis.net/internal...3977&highlight

Bei meinem Programm funktioniert alles perfekt, solange ich alles im Notepad abspielen lasse, doch sobald ich die Aktion auf das Spiel übertragen will, funktioniert nichts.
Dies liegt daran das ich nicht die genauen WND einstellungen von dem Spiel kenne.
Bei Notepad is ja klar, aber bei andern Programmen ???

Auch noch aufgegriffen habe ich: DirectInput !

weiß da jemand drüber was?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz