Entwickler-Ecke

Open Source Projekte - AutoCheater


Silas - Di 10.04.07 20:48
Titel: AutoCheater
Hallo!

Ich möchte hier ein kleines, (hoffentlich) lebenserleichterndes Programm vorstellen, dass ich entwickelt habe.
Der Name des Programms kommt von der Verwendungsart, für die ich es eigentlich geschrieben habe: Für die erleichterung des Cheat-Eingebens (Ja, ich gestehe, ich verwende Cheats!).
Mithilfe des Programms kann man jeder der F-Tasten einen String zuweisen (oder auch nicht), der automatisch eingegeben wird, sobald man sie drückt. Das ganze funktioniert global, also auch, wenn die Anwendung im Hintergrund läuft. Damit ist das Programm aber auch dann geeignet, wenn z.B. die Zwischenablage nicht ausreicht.
Die Zuordnungen lassen sich in eine Textdatei mit der Endunt .cht speichern (INI-Format) und wieder einlesen.


F34r0fTh3D4rk - Di 10.04.07 20:54

ich glaube, dass das aber nicht unbedingt bei jedem Programm/Spiel funktioniert, es sei denn du machst das ganze auf Treiberebene. Welche Spiele hast du getestet ?

wenn ich eine andere F Taste wähle und da was eintrage, muss ich erst deaktivieren und aktivieren, damit die änderung wirksam ist, solltest du ändern ;)


mfg


Silas - Mi 11.04.07 15:24

Das Abfragen der F-Tasten läuft über GetAsyncKeyState (für Hooks war ich zu faul), das senden der Strings über keybd_event.
Getestet hab ich das Programm nur mit GTA: Vice City (dafür hab ich's auch eigentlich entwickelt, weil ich es leid war jedesmal mir mit "getthereamazinglyfast" für ein neues Auto die Finger kaputtzutippen wenn das alte geschrottet war, vor allem weil das bei mir ungefähr alle dreißig Sekunden der Fall ist :D). Da funktioniert es einwandfrei.
Die Sache mit dem Aktivieren/Deaktivieren-Knopf ist (zumindest ursprünglich) Absicht gewesen, weil bei jedem Aktivieren die Edits und Checkboxen in Arrays übertragen werden (meines Wissens ist es deutlich resourcenschonender, ständig ein Array mit "for" zu durchlaufen als jedes Mal die Komponente erst mit "FindComponent" ausfindig zu machen und dann die jeweilige Eigenschaft auszulesen).
Ich hab jetzt eine neue Version hochgeladen, das Button-Chaos ist beseitigt (jetzt läuft alles über Menüs) und es gibt einen Eintrag, mit dem sich im aktivierten Zustand die Edits und Checkboxen neu einlesen lassen.


Silas - Fr 13.04.07 13:06

Ich würde jetzt gerne noch die Möglichkeit einbauen, Tasten festzulegen, die zusätzlich zur F-Taste gedrückt werden müssen (also Ctrl, Alt, usw.).

Also es gibt drei Checkboxen (Ctrl, Alt und Shift), die nach Modifiers_* übertragen werden. Wenn eine ausgewählt wurde (Modifiers_? = true) und sie gedrückt ist (Boolean(GetAsyncKeyState(VK_?)) = true), dann soll der Cheat gesendet werden

Wie mach ich da am einfachsten die Abfrage? Bis jetzt ist mir nur

Delphi-Quelltext
1:
2:
if ((Modifiers_Alt and Boolean(GetAsyncKeyState(VK_MENU)) or ((not Modifiers_Alt) 
and (not Boolean(GetAsyncKeyState(VK_MENU))) and (Modifiers_Ctrl //... und so weiter
eingefallen. (Ich hoffe ich hab mich mit den Klammern nicht vertan)

Danke schon mal im Voraus!


F34r0fTh3D4rk - Fr 13.04.07 19:47


Delphi-Quelltext
1:
if Boolean(GetAsyncKeyState(VK_MENU)) and not (Boolean(GetAsyncKeyState(VK_ALT) xor Modifiers_alt)                    


wäre glaube ich eine möglichkeit, dann darfst du aber auch nicht die alt taste drücken, wenn der modifier aus ist ;) das machst du dann für alle (alt shift und ctrl)


mfg


Silas - Sa 14.04.07 19:06

Ich steck jetzt an dieser Stelle fest: Wenn kein Modifier ausgewählt ist funktioniert's (also activatemodifiers = false), sobald aber einer ausgewählt ist funktioniert es nicht mehr... er scheint nicht erkennen zu können ob Ctrl gedrückt ist... ich komm hier einfach nicht weiter:

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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
procedure TCheatForm.Timer1Timer(Sender: TObject);
var i: byte;
begin
  // überprüfen ob der letzte Tastendruck mindestens 300 msek zurückliegt
  if LastCallTime + 300 < GetTickCount then begin
    // wenn irgendwelche Modifier aktiv sind
    if ActivateModifiers then begin
      // Strg
      if (Boolean(GetAsyncKeyState(VK_CONTROL)) and not
         (Boolean(GetAsyncKeyState(VK_CONTROL)) xor
         Modifiers_Ctrl))
         // Alt
         and (Boolean(GetAsyncKeyState(VK_MENU)) and not
         (Boolean(GetAsyncKeyState(VK_MENU)) xor
         Modifiers_Alt))
         // Shift
         and (Boolean(GetAsyncKeyState(VK_SHIFT)) and not
         (Boolean(GetAsyncKeyState(VK_SHIFT)) xor
         Modifiers_Shift))
         // Windows
         and (Boolean(GetAsyncKeyState(VK_LWIN)) and not
         (Boolean(GetAsyncKeyState(VK_LWIN)) xor
         Modifiers_Win))
         // Altgr
         and ((Boolean(GetAsyncKeyState(VK_CONTROL)) and
         Boolean(GetAsyncKeyState(VK_MENU))) and not
         ((Boolean(GetAsyncKeyState(VK_CONTROL)) and
         Boolean(GetAsyncKeyState(VK_MENU))) xor
         Modifiers_Alt)) then begin
        // Alle 12 F-Tasten überprüfen
        for i := 0 to 11 do
          // wenn dieser Key zugewiesen ist...
          if (ListActive[i]) and
          // überprüfen, ob er gedrückt ist (VK_FKey enthält die Codes von VK_F1 bis VK_F12
            (Boolean(GetAsyncKeyState(VK_Fkey[i]))) then
          // entsprechenden Cheat senden (extra Prozedur)
          SendKeyString(ListCheat[i]);
      end;
    end else begin
      // wenn keine Modifier aktiv sind, das ganze ohne abfrage:
      for i := 0 to 11 do
        if (ListActive[i]) and
          (Boolean(GetAsyncKeyState(VK_Fkey[i]))) then
        SendKeyString(ListCheat[i]);
    end;
  end;
end;


@F34r0fTh3D4rk: Dein Codestück müsste meines Erachtens eigentlich schon stimmen (Danke!!!)


Silas - Di 17.04.07 18:54

*schieb* ( :oops: )