Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hotkey oder Tastendruck simulieren (https://www.delphipraxis.net/144750-hotkey-oder-tastendruck-simulieren.html)

jens106 15. Dez 2009 20:34


Hotkey oder Tastendruck simulieren
 
Hi,

ich würde gerne für ein Spiel ein kleines Programm schreiben.

Was soll es können?
Das Programm soll, wenn ich zum Beispiel "m" drücke 2 mal "i" drücken.

Wozu brauche ich das Programm?
Nein! Das soll kein hack oder ähnliches werden. Da es bei CodMW2 leider keine binds mehr gibt will ich diese sozusagen ersetzen.


Ich habe bereits die Suchfunktion benutzt. Aber meistens kome ich dort nur zu irgendwelchen Topics bei denen ein Fehler gesucht wird. Vielleicht könnte mir jemand erklären wie ich diese idee umsetzten kann.
Wäre sehr nett :)

gruß

jens106

STaRDoGGCHaMP 15. Dez 2009 20:55

Re: Hotkey oder Tastendruck simulieren
 
Delphi-Quellcode:
function SendKey(wVk: WORD): UINT;
var Input: array of TInput;
begin
    SetLength(Input, 2);
    Input[0].Itype := INPUT_KEYBOARD;
    Input[0].ki.wVk := wVk;
    Input[0].ki.wScan := MapVirtualKey(wVk, 0);
    Input[1].Itype := INPUT_KEYBOARD;
    Input[1].ki.dwFlags := KEYEVENTF_KEYUP;
    Input[1].ki.wVk := wVk;
    Input[1].ki.wScan := MapVirtualKey(wVk, 0);
    SendInput(2, Input[0], sizeof(TInput));
end;
Diese Funktion simuliert einen Tastendruck. Wenn du jetz möchtest, dass wenn du beispielsweise "i" drückst, zwei mal "m" gedrückt wird musst du einfach nur ein Programm schreiben, welches einen globalen Hotkey setzt und dann einfach die oben genannte Funktion ausführen. (SendKey(VkKeyScan('m')). Alternativ könntest du noch nach PostMessage/SendMessage suchen, da könnte man theoretisch auch im minimierten Fensterzustand Tastendrücke simulieren.

Was aber ein generelles Problem bei solchen Sachen ist, ist die Tatsache, dass viele Spiele eine Anti-Cheat Software eingebaut haben, welche das Hacken vermeiden sollen. Und unter Hacken fallen auch Bots, welche die Funktion SendInput benutzen. Und meistens ist die Sache da mit SendInput sehr eklig, die Funktion wird in Usermode und auch in Kernelmode "gehooked", das heisst es wird sozusagen eine Funktion zwischengeschaltet, welche es nicht möglich macht SendInput zu nutzen, wenn das Spiel angeschaltet ist. Und auf Kernel-Ebene kann man das nur entfernen wenn man mit Treibern arbeitet, was auch eine etwas eklige Sache ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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