Hi erstmal =)
also ich ahb ein problem ich möchte mir ein programm schreiben das mir automatisch immer wieder nach einer gewissen zeit "1" drückt und dies an ein spiel ^^...
mein problem dabei ist das ich dem game keine Taste senden kann...
habe schon sendkey probiert als auch send input...
das sendkey nicht funktioniert ok wär auhc zu einfach gewesen ^^ aber send input auch nicht O.o...
also die programme als solches gehen kann zum beispiel an den editor meine zahlen schicken nur an das game nicht - nur wenn ich den chat im game aktiviere sendet er mir die zahlen... ( er soll ja aber nicht chatten sondern spielen ...)
habt ihr noch ne idee an was es liegen könnte und wie ich das lösen könnte?
danke im vorraus für eure hilfe 😃
Du kannst es ja mal mit keybd_event (WinAPI) probieren:
http://www.pinvoke.net/default.aspx/user32/keybd_event.html
Das funktioniert aber auch nicht immer, weil bestimmte Spiele da Schutzmaßnahmen haben.
Das ist aus 2 Gründen nicht zu lösen.
Das spiel wird seine eigene Tastaturroutinen haben, also entwerder DirectX oder selber die Tastatur Pollen.
Ist das Cheaten verboten. Und auch wenn es dir nicht passt, dieses Forum
wird sich nicht an illegalen Aktionen beteiligen (wollen).
Wieso sollte das Illegal sein?
@op
hier findest du evtl etwas was dir weiterhilft:
http://www.gamedev.net/community/forums/topic.asp?topic_id=339282
http://forum.cheatengine.org/viewtopic.php?p=4289508&sid=
hab auch schon daran gedacht das es nicht geht... hab deshalb mal mit osk versucht und mit der gehts und die macht doch auch nix anderes? oder?!
Hallo FZelle,
- Ist das Cheaten verboten
auf viele Onlinespiele wird das zutreffen. Für viele Offline-Spiele aber nicht. Ein so generelles Verbot, dass man fest davon ausgehen kann, dass der Fragesteller etwas verwerfliches vor hat, gibt es also sicher nicht.
Hallo xyzMann,
Und auch wenn es dir nicht passt, dieses Forum wird sich nicht an illegalen Aktionen beteiligen (wollen).
das stimmt natürlich uneingeschränkt. Wenn du also wirklich etwas rechts- oder vertragswidriges vorhaben solltest, bitten wir dich dringend, davon Abstand zu nehmen und auch keine weiteren Nachfragen zu stellen.
herbivore
auf viele Onlinespiele wird das zutreffen. Für viele Offline-Spiele aber nicht. Ein so generelles Verbot, dass man fest davon ausgehen kann, dass der Fragesteller etwas verwerfliches vor hat, gibt es also sicher nicht.
ich habe nix "verwehrfliches" vor - also cheaten indem ich mir ein vorteil gegenüber andere. Zocke nur offline games online spiele sind mir zu zeitaufwenig und zu kostenspielig
@xyzMann: Probier mal mit der PostMessage API. m_ipHandle ist handle von Windows wo du Taste senden willst.
Keys keySpace;
const uint WM_KEYDOWN = 0x100;
const uint WM_KEYUP = 0x101;
public void BuffPet()
{
keySpace = Keys.Space;
PostMessage(m_ipHandle, WM_KEYDOWN, (uint)keySpace, 0);
Thread.Sleep(100);
PostMessage(m_ipHandle, WM_KEYUP, (uint)keySpace, 0);
//System.Windows.Forms.SendKeys.Send("");
}
huhu
also danke erstmal für die antworten hatte jetzt zeit mal bichen rumzuprobieren...
also ich nutz visual studio 2008
@rongchaua
also PostMessage kennt er nich - fehlt mir ein using?
Thread sleep ... mit system.threading.thread.sleep gehts...
was genau ist m_ipHandle? - meinst du den keycode?
der code klang auhc nicht schlecht
SendInput function is the right answer. Correct way to use it with DInput is something like this:
//********************************************************* // Sets a button to down state static void SetInputDX(WORD input_code_set) { INPUT inp[1]; memset(inp,0,sizeof(INPUT)); inp[0].type = INPUT_KEYBOARD; inp[0].ki.wScan = input_code_set; SendInput(1, inp, sizeof(INPUT)); } //********************************************************* // Sets a button to up state static void ReleaseInputDX(WORD input_code_release) { INPUT inp[1]; memset(inp,0,sizeof(INPUT)); inp[0].type = INPUT_KEYBOARD; inp[0].ki.dwFlags |= KEYEVENTF_KEYUP; inp[0].ki.wScan = input_code_release; SendInput(1, inp, sizeof(INPUT)); }
For DInput to see these codes properly you should pass DInput constants like:
DIKEYBOARD_A but only first two bytes (letter "a" is 0x041e , and so on).
I'we tried this, it realy works.
aber da kommt er auch aus dem meckern nich mehr raus ^^
weis aber auch nicht für was die variablen stehen wie INPUT und das array inp[1]...
könnte mir einer die funktion erklären bitte?
Hallo xyzMann,
siehe zunächst [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).
also PostMessage kennt er nich - fehlt mir ein using?
PostMessage ist eine Win32-Funktion, die du per DllImport einbinden musst. Beispiele findest du im Netz.
aber da kommt er auch aus dem meckern nich mehr raus ^^
Das ist auch kein C#-, sondern C- oder C++-Code. Den kannst du so nicht verwenden.
herbivore
hab mich mal allein durchgewurstelt leider funkioniert folgender code nicht =/
er aktiviert mir mein fenster aber die taste wird nicht geschickt:
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hwnd, int msg, int wparam, int lparam);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow(null, "Rechner");
if (calculatorHandle == IntPtr.Zero)
{
MessageBox.Show("Programm ist nicht offen");
return;
}
SetForegroundWindow(calculatorHandle)
int WM_KEYDOWN = 0x100;
int WM_KEYUP = 0x101;
int Taste1 = 0x31;
PostMessage(Handle, WM_KEYDOWN, Taste1, 0);
System.Threading.Thread.Sleep(200);
PostMessage(Handle, WM_KEYUP, Taste1, 0);
}
könnte mir bitte einer erklären warum X(
danke
@xyzMann:
PostMessage(Handle, WM_KEYDOWN, Taste1, 0);
Die "Handle" Variable muss calculatorHandle sein.
Nach dem Korrigieren muss dein Code funktionieren. Ich habe schon getestet. Darunter ist mein Code. Es kann nummer 1 ans Calculator (ich habe Windows Englisch Version) Programm schicken.
Außerdem prüfst du nochmal mit Spy++ ob Name des Rechner Fensters richtig ist.
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hwnd, int msg, int wparam, int lparam);
static void Main(string[] args)
{
IntPtr calculatorHandle = FindWindow(null, "Calculator");
if (calculatorHandle == IntPtr.Zero)
{
return;
}
int WM_KEYDOWN = 0x100;
int Taste1 = 0x31;
PostMessage(calculatorHandle, WM_KEYDOWN, Taste1, 0);
}
@rongchaua
ah danke =) jetzt funzt es nur leider nur im calc =/ nicht im game
@floste
sendinput habe ich schon versucht postmessage jetzt auch sendkeys funzt sowieso nicht =/
gibt es noch irgendeine möglichkeit =(?
nochmal danke für die echt gute hilfe hier 👍
Kar hab ich ne Idee! Besorg Dir ne billige usb Tastatur für 5 Euro und kleb die Taste mit sekundenkleber fest. Dann anschliessen und bingo 😉
Wenn du etwas Geld ausgeben kannst/willst, dann könntest du dir von Logitech eine G11/G15/... besorgen. Die haben Programmierbare Tasten, die entweder eine Tastenabfolge (inkl. Pausen), oder Scripte abspielen können.
Hab selber die G15 zu Hause und bisher hat das Abspielen von Tastaturabfolgen immer funktioniert. An das Scripten hab ich mich bisher noch nicht herangewagt, da ich es noch nicht gebraucht habe.
Die Scriptsprache ist LUA, wenn ich mich nicht irre.
Hoffe das hilft dir weiter.
MfG LaMa Jan
Hast du denn meine erste Antwort bereits getestet (keybd_event)? Ist zwar nicht garantiert, dass das funktioniert hat aber bei mir schon oefter funktioniert.
Ich finde es ist einen Versuch wert 😉
Du koenntest vll auch mal schreiben, von was fuer einem Spiel du redest.
@Vitab
ja hab ich =/
hab folgenden code versucht:
void PressKey(byte keyCode)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
funzt im calc super im game nich bzw nur im chat =(
also ums mal konkret zu machen es handelt sich um das spiel shaiya - und bevor hier wieder cheating vorwürfe kommen - ich spiel es NICHT online und ich will mir keinen bot bauen (die könnt ich mir schnell im netz runterladen xD)
hab das keyevent in warcraft 3 probiert klappt super nur in shaiya irwie nich =(
haste ma den scancode eingetragen? irgendwie gibts sowas wie mapvirtualkey (oder ähnlich, auf mycsharp gibts was) und außerdem uipi und uac beachten
@Floste danke erstmal für die antwort =)
also hatte jetzt mal wieder zeit und hab mapvirtualkey versucht
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
public const int KEYEVENTF_EXTENDEDKEY = 0x01;
public const int KEYEVENTF_KEYUP = 0x02;
das prog funzt im calc wieder super xD... in shaiya leider nur wenn ich was schreibe im spiel selber nicht =(
uipi kann ich damit glaub ausschließen (musste googeln was du damit meinst ^^) denn wenn das beim schreiben funzt und sonst nich hats ja nix mit dem prozess als soches zu tun oder?
uac same like uipi hab gegloogelt und würd sagen das is völlig egal ob ichs mit admin oder nich start ^^
Also, was auf jeden Fall geht, wäre einen eigenen Tastaturtreiber zu schreiben und den einzubinden.
das geht aber dann definitiv nicht mehr in C#, sondern nur in C(++) mit dem DDK.
Ty 4 Info
ich dachte immer das c# besser is als c++ ^^
leider hab ich von c++ 0 ahnung XD hat des schonmal einer gemacht mit dem treiber? bzw is des schwer ^^
Hallo xyzMann,
ich dachte immer das c# besser is als c++ ^^
solch pauschale Aussagen stimmten stimmen selten absolut. Es kommt eben immer auch auf den Einsatzzweck an.
hat des schonmal einer gemacht mit dem treiber? bzw is des schwer ^^
Für jemanden, der das noch nie gemacht hat, ist das sicher alles andere als trivial.
Zumal man mit einen falsch programmierten Treiber leicht das ganz System runterreißen kann, was einem bei normaler Anwendungsprogrammierung ja eher selten passiert.
herbivore
Kann Herbivore nur zustimmen, habe vergessen zun erwähnen, dass das absolut nicht zu empfehlen ist, wenn man nicht gerade fortgeschrittener C(++) Programmierer mit viel Hintergrundwissen und Treiberprogramierungs Know-How ist.
und ein fertigen Treiber - bekommt man sowas? weil ich kann zwar c# (mehr oder weniger gut xD) aber c++ wär neuland
Das hier sieht ganz vielversprechend aus:
http://www.oblita.com/hooking-part1
Wenn Du dich wirklich mit Treiberprogrammierung beschäftigen willst, dann must Du ein bischen nach DDK und "Keyboad Filter driver" googeln. Dafür sind aber zwingend weitreichende Kentnisse in C++ und Windows Treiberprogrammierung notwendig und selbst dann ist das ganze umständlich, weil es kaum Debugmöglichkeiten gibt und Fehler im treiber das ganze System lahmlegen. Zusätlich meckert Windows noch rum, wenn man unsignierte treiber installieren will und dann hat man noch Ärger wegen geänderteten Treiberschnittstellen unter W2K,XP , Vista und Win7.
Also kurz gesagt : VERGISS ES. 😉
Vielleicht bringt dich ja auch der link oben weiter.