![]() |
Keybinder - GTA SA
Erstmal einen schönen guten Tag!
Ich versuche derzeit folgendes Programm nachzuprogrammieren: ![]() Grundgedanke: Bei GTA SanAndreas gibt es einen inoffiziellen Multiplayer Modus. Viele Aktionen laufen über Befehle ab wie zum Beispiel "/enter" zum betreten eines bestimmten Gebäudes. Über "t" öffnet man ein Feld in der man diese Befehle eingeben kann. Um die Schreibarbeit zu minimieren gibt es Keybinder(s.o) die für mich den tastendruck "t" simulieren -> den eingespeicherten String an das durch "t" geöffnete Feld übergeben -> Enter-Taste simulieren um zu bestätigen Bisher nutzte ich GetSysFocus um das Handle des aktuellen Fensters zu erhalten.
Delphi-Quellcode:
Jedoch erreiche ich dadurch nicht die DirectX Oberfläche sondern verändere lediglich die Caption des Fensters("GTA SA" wird dann zB zu "/enter".
function TForm1.GetSysFocus: HWND;
var ThreadID, CurrThrId: cardinal; begin Result := 0; ThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil); CurrThrId := GetCurrentThreadId; if ThreadID <> CurrThrId then begin if AttachThreadInput(ThreadID, CurrThrId, true) then begin Result := GetFocus; AttachThreadInput(ThreadID, CurrThrId, false); end; end else Result := GetFocus; end; Unter Windows klappt GetSysFocus einwandfrei. Wie erreiche ich es nun dass der String dem EingabeFeld in GTA übergeben wird? |
Re: Keybinder - GTA SA
Zitat:
Diese Anwendung zeichnet dieses "virtuelle" Eingabefeld nur als Grafik. Eingaben gehen weiterhin an die Anwendung und bei dieser kommt es darauf an, wie sie die eingegebenen Tasten ausließt, denn an diese Schnittstelle muß man dann die gewünschten "simulierten" Tastenanschläge schicken. PS: Einige Programme unterbinden z.B. vorallem die einfachen Wege, wie z.B. WM_KEY und Co. Dieses soll das Cheaten erschweren. |
Re: Keybinder - GTA SA
meinst du dass ich beispielsweise für den befehl /enter folgende tasten simulieren muss: "t"->"/"->"e"->"n"->"t"->"e"->"r"->"Enter" ?
Das würde dann über DirectInput anlaufen oder? PS: irgendwie gefällt mir der Gedanke nicht solche umwege zu laufen:/ |
Re: Keybinder - GTA SA
Der einfache Weg:
Schau mal nach SendKey und versuch die Tasten global zu senden, dann landen sie beim "aktiven" Programm und mit viel Glück ließt GTA diese Schnittstelle ja aus. Und ja, egal was du machst, am Ende müssen die Tasten so oder so bestimmt einzeln gesendet werden. Wobei es eher so enden wird: Zitat:
![]() ![]() PS: 60 MB (61.355KB) kommt mir für soein Programm ein bissl viel vor. :lol: |
Re: Keybinder - GTA SA
hmm bin noch nicht ganz überzeugt von der technik:D
zum beispiel kann jedes spiel doch auch die zwischenablage nutzen. gibt es nicht einen weg darüber der geeigneter ist? weil dieses tastensimulation erscheint mir sehr begrenzt in seiner wirkungsweise. PS: ja da gibt die seite falsche infos raus. da programm ist nur 60kb groß^^ da wollte wohl jemand die größe in byte angeben:D |
Re: Keybinder - GTA SA
Niemand anwesend der mir helfen kann? :gruebel:
Im prinzip geht es doch nur um eine simple informationsweitergabe...aber wie sende ich diese an eine DirectX anwendung? |
Re: Keybinder - GTA SA
Ganz im Ernst, dieses war noch die Beschreibung eines einfachen Weges.
Alle Programme empfangen die Tasten einzeln, also kannst du sie auch nur einzeln senden. Hast du denn mal nach SendKey geschaut? Diesem gibt man z.B. einen String, es zerlegt ihn und versendet dann die einzelnen Tastencodes. |
Re: Keybinder - GTA SA
Zitat:
|
Re: Keybinder - GTA SA
himitsu du verstehst glaube nicht was ich will. der string soll eben nicht zerlegt werden. das ist meiner meinung nach kein guter programmierstil es über die simulation von tastendrücken zu realisieren.
luckie lese erstmal das thema bevor du sone behauptung verbreitest. Wie bereits gesagt das Programm ist 60kb groß nicht 60mb;) und nen trojaner hätte keine größe von 60mb:D |
Re: Keybinder - GTA SA
Was ist daran kein guter Programmstiel?
Wie gibst du diese Text/Befehl selber ein? Genau, Taste drücken, Taste loslassen, nächste Taste drücken, Taste loslassen, ... Und genau das muß dann auch dein "simulieren". Sei es nun durch deinen eigenen Code oder über Funktionen/Komponenten wie SendKey ... was glaubst du denn, daß ich ständig auf sowas verweise? Es ist nunmal nicht so, daß man hier in dem gewünschten Programm ein bestimmtest Control vorfindet, welches so wie ein Edit eine schöne Schnittstelle (z.B. ala SendMessage+WM_SETTEXT oder SetWindowText) bietet. Zitat:
(da bin ich mir relativ sicher und zur Klarstellung, ich wußte auch vorher schon, daß diese 60 MB nicht stimmen konnten und was Kleineres gemeint war :zwinker: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 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