![]() |
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 |
Re: Tasten ausgeben
Hast wirklich schon mal versucht
![]() |
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? |
Re: Tasten ausgeben
|
Re: Tasten ausgeben
hey wenn ich jetzt schreib :
Delphi-Quellcode:
dann schreibt er ein "c" statts ne "1".
PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0);
Wa hab ich falsch gemacht? Mfg KleinAmann |
Re: Tasten ausgeben
Probiers mal mit den Prozeduren hier:
Delphi-Quellcode:
Mfg
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 |
Re: Tasten ausgeben
Zitat:
|
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:
Hab mir den unteren Teil so vorgestellt :
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.
Delphi-Quellcode:
Das erste Sleep ist dafür dass man dummerweise auf den Button meines Programmes klicken muss und dann in das Fenser wo es dann
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; 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 |
Re: Tasten ausgeben
Zitat:
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; |
Re: Tasten ausgeben
hey danke für die Antworten,
Delphi-Quellcode:
leider funktioniert dass hier nur in Notepad und nicht bei der cabalmain.exe
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; 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 |
Re: Tasten ausgeben
Was für eine Anwendung ist cabalmain?
|
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 |
Re: Tasten ausgeben
Hast du meine PostKey() Prozedur ausprobiert?
|
Re: Tasten ausgeben
Und was ist der Unterschied zu einem Bot?
|
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 |
Re: Tasten ausgeben
Zitat:
|
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 ^^ |
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 |
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: ![]() 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