AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Anwendungen steuern - Delphi unfähiger als andere Sprachen?
Thema durchsuchen
Ansicht
Themen-Optionen

Anwendungen steuern - Delphi unfähiger als andere Sprachen?

Ein Thema von Ajin · begonnen am 24. Sep 2007 · letzter Beitrag vom 24. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Ajin

Registriert seit: 23. Feb 2006
Ort: Mons
252 Beiträge
 
Delphi 2010 Professional
 
#1

Anwendungen steuern - Delphi unfähiger als andere Sprachen?

  Alt 24. Sep 2007, 13:03
Hi Leute!

Ich habe vor einem Jahr ca. einen Login Bot für ein japanisches Grind-MMORPG geschrieben. Damals schon stiess ich auf die "Grenzen" von Delphi eine andere (3D) Anwendung zu steuern. Während meiner heutige DP Suchvorgänge bin ich auf einige Threads gestossen welche das gleiche Thema beherrbergten und es nie zur Lösung kam: wieso reagiert die die andere Anwendung nicht auf sämtliche Tricks des Delphi-Postmessage, Sendkeys oder mouse_events?

Ich wollte für ein paar Freunde einen Angel Bot für eines dieser japanischen online rollenspiele schreiben. Es müssen nur 2 "Buttons" gedrückt werden. Alternativ kann ich auch die Taste 1 und/oder 2 nutzen. So eine sehr banale Sache erledigt auch so manche Hardware: das Nostromo Speedpad oder die G15 Tastatur von Logitech. Ich sagte den Jungs aber: kein Problem, wenn euch das so wichtig ist braucht könnt ihr euch die 30€ bzw die 70€ sparen, ich schreib schnell ein paar Zeilen und gut ist.

Weit gefehlt!
Alles klappt wunderbar: Mauspositionen finden, das Fensterhandle der Anwendung finden, Mausposition an die richtige Stelle verschieben.... aber die wichtigste Aktion: das Drücken des Buttons geht mit keinem einzigen Trick.
Ich hab sämtliche vorgeschlagene Methoden der Suchergebnisse angewand:

Delphi-Quellcode:
 mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
 mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
 PostMessage(clientHandle, wm_KeyDown, $31,0);
 SendKeys('1',FALSE);
 PostKeyEx32(Ord('1'), [], False);
 SendMessage(clientHandle, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(50, 50));
 SendMessage(clientHandle, WM_LBUTTONUP, 0, MakeLParam(50, 50));
Es ist absolut nix zu machen.... Komischerweise gibts aber nen Haufen sogenannter Bots welche alle möglichen eingaben im Spiel machen, sogar die Spielfigur bewegen und und und...
Wer weiss mit welcher Sprache die geschrieben wurden, aber Delphi schafft es bis heute net einen simplen Knopfdruck zu machen.
Meines wissens hat das spiel net mal einen anti_cheat mechanismus.

Geht das so tief in die Hardware dass da nur C++ ne Chance hat?
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 13:11
Delphi hat überhaupt keine Möglichkeiten zur Manipulation anderer Programme. Die von dir genannten sind allesamt Windows-API-Funktionen und die sind für alle Sprachen gleich. Mit C++ kannst du zwar "hardwarenäher" programmieren (Treiber etc.), aber im Endeffekt nützt dir das nichts für die Fernsteuerung von Programmen, weil Windows die Programme voreinander schützt und dementsprechend auch nur der Umweg über Windows zielführend ist. Das Programm reagiert vermutlich deshalb nicht darauf, weil es entweder doch einen Anti-Cheat-Mechanismus hat, oder weil es einfach einen anderen Mechanismus für die Eingabe verwendet als den, auf den du im Endeffekt zugreifst. Davon abgesehen halte ich es nachwievor für fragwürdig, für ein Onlinespiel Cheats/Bots zu benutzen. Beim G15 _könnte_ es sogar sein, dass die Tastatur die Makrofolge tatsächlich als Tastendrücke an den Rechner sendet.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Ajin

Registriert seit: 23. Feb 2006
Ort: Mons
252 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 13:12
Nachtrag: ich muss fairerweise dazusagen, dass einige Keys trotzdem gehen. Also z.B. ein VK_Return wird ausgeführt (die Return Taste bewirkt das Aufklappen eines Chatfensters) Wenn ich nach dem aufpoppen des CHatfensters dann die Taste 1 Sende, steht auch im Chat eine 1...

Das heisst die Informationen kommen an, aber nicht so wie man es sich wünscht.
Bei geschlossenem CHatfenster bewirkt das Senden der 1 nix, obwohl die 1 ein Hotkey für die "Angel" ist. Wenn das Chatfenster offen ist kommt die 1 an....

Ich versteht das überhauptnicht.

Sicher ist es fragwürdig Bots, Cheats usw zu schreiben, aber mich interessiert es nun technisch wieso das andere SPrachen schaffen und Delphi nicht.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 13:14
Ich kann dir zwar nicht endgültig zur Lösung beitragen, aber ich wiederhole nochmal: Das hat nichts mit der Sprache/Umgebung Delphi zu tun. Wenn dein Programm es nicht schafft, liegt es an den von dir verwendeten Funktionen und nicht an Delphi.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 14:12
Vielleicht wertet das Programm die Buttonclicks aus und denkt sich: Wer es schafft innerhalb von 0.000 ms einen Button anzuklicken, ist kein richtiger Mensch.... Bau doch mal ein Sleep zwischen DOWN und UP rein.....
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
24. Sep 2007, 15:11
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 15:14
anhand des geposteten Quelltextes würde ich vermuten das du die Hilfe zu den Funktionen nicht gelesen hast?!

Bei Verwendung von:
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
erwarte ich das so gut wie nichts passiert was du gern hättest. Der Grund wird dir klar wenn du die Hilfe zu der Funktion anschaust ( http://msdn.microsoft.com/library )
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 15:15
Hi,
hast du es schon mal mit der procedure "PostKeyEx32" probiert?
Diese hat soweit ich weiß den Vorteil, das sie wirklich ein Tastendruck auslöst, während sendmessage diesen "simuliert".

Procedure:
Delphi-Quellcode:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
type TShiftKeyInfo = record shift: Byte; vkey: Byte; end; byteset = set of 0..7;
const shiftkeys: array [1..3] of TShiftKeyInfo = ((shift: Ord(ssCtrl); vkey: VK_CONTROL),(shift: Ord(ssShift); vkey: VK_SHIFT),(shift: Ord(ssAlt); vkey: VK_MENU));
var flag: DWORD; bShift: ByteSet absolute shift; i:Integer;
begin
 for i := 1 to 3 do
  begin
   if shiftkeys[i].shift in bShift then keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
  end;
 if specialkey then flag := KEYEVENTF_EXTENDEDKEY else flag := 0;
 keybd_event(key, MapvirtualKey(key, 0), flag, 0);
 flag := flag or KEYEVENTF_KEYUP;
 keybd_event(key, MapvirtualKey(key, 0), flag, 0);
 for i := 3 downto 1 do
  begin
   if shiftkeys[i].shift in bShift then keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),KEYEVENTF_KEYUP, 0);
  end;
end;
Aufruf:
Delphi-Quellcode:
PostKeyEx32(VK_TAB, [ssshift], False);
application.ProcessMessages;
sleep(100);
Vielleicht hilft dir das ja, auch wenn es nicht um dein angesprochenes Thema geht.
greez
gabneo

[Edit]
Der Code funktioniert bei mir mit dem Fernsteuern vieler Anwendungen. Deswegen bin ich von Sendmessage() weggegangen.
[/Edit]

PS:Ich weiß nicht mehr woher ich den Code habe...sry
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 15:17
Der Code ist von toms und findet man hier im Forum
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Anwendungen steuern - Delphi unfähiger als andere Sprach

  Alt 24. Sep 2007, 15:22
Zitat von Ajin:
Anwendungen steuern - Delphi unfähiger als andere Sprachen?
Definiere "Andere Sprachen"!
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz