Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.09.2021, 16:17

Tastatureingaben kommen icht im Game an?!

Hallo Community,

ich bin relativ neu auf dem Gebiet C++.
Vorher habe ich mich überwiegend nur mit C# und Embedded programmierung beschäftigt.

Nun möchte ich tiefer in die C++ programmierung eintauchen. Bücher sind auch schon vorhanden ;).

Meine Frage die ich jetzt habe..

Ich würde gerne etwas ausprobieren. Dazu habe ich mir ein kleines "Tool" oder einen "Trainer" geschrieben.
Es geht um eine schnelle Bewegungsausführung im Spiel.
Dafür sprintet man, rutscht, und beendet das rutschen mit einem Sprung.
Soweit so gut.
Im Notepad kommen die Tastatureingaben die ich mit dem Programm sende auch an..
Nur im Spiel wird das leider nicht angenommen.
Woran könnte sowas liegen?

C-/C++-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
48
int main()
{
    LPCWSTR window_title = L"Call of Duty®: Modern Warfare®";
    HWND hWND = FindWindow(NULL, window_title);
    if (hWND)
    {
        cout << "#####################################\r\n";
        cout << "#\r\n";
        cout << "#\r\n";
        cout << "#      [CodSliderTrainer] Game is running..\r\n";
        cout << "#\r\n";
        cout << "#\r\n";
        cout << "#####################################\r\n";
    }
    else
    {
        cout << "#####################################\r\n";
        cout << "#\r\n";
        cout << "#\r\n";
        cout << "# [CodSliderTrainer] Game is not running..\r\n";
        cout << "#\r\n";
        cout << "#\r\n";
        cout << "#####################################\r\n";
    }

    INPUT inputs = { 0,0 };
    inputs.type = INPUT_KEYBOARD;
    inputs.ki.wVk = 0x43; // 'c'

    cin.clear();
    fflush(stdin);

    while (true)
    {
        if ( !keyDown(0x43) )
        {
            cout << "[CodSliderTrainer] " << SendInput(1, &inputs, sizeof(INPUT)) << "\r\n";
            inputs.ki.wVk = VK_SPACE;
            cout << "[CodSliderTrainer] " << SendInput(1, &inputs, sizeof(INPUT)) << "\r\n";
            Sleep(1000);
            inputs.ki.wVk = VK_SPACE;
            cout << "[CodSliderTrainer] " << SendInput(1, &inputs, sizeof(INPUT)) << "\r\n";
            Sleep(1000);
            inputs.ki.wVk = VK_SPACE;
            cout << "[CodSliderTrainer] " << SendInput(1, &inputs, sizeof(INPUT)) << "\r\n";
        }
    }
}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.09.2021, 16:21

Probier mal das Programm mit Admin-Rechten zu starten.

3

29.09.2021, 16:21

wird das nicht default über VS sowieso gemacht?
Aber nach wie vor das selbe^^

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

29.09.2021, 16:32

Kann den ein Programm unterscheiden ob es sich jetzt um reale Hardware handelt oder ob es um Software geht also wer die Eingabe getätigt hat.
Evtl. filtert das Spiel diese Eingaben?.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

29.09.2021, 16:34

Geht wahrscheinlich irgendwie, glaube aber nicht, dass das der Fall ist. Probier's mal mit keybd_event.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

29.09.2021, 17:04

Übrigens hast du vergessen die Taste virtuell auch wieder loszulassen: KEYEVENTF_KEYUP

8

29.09.2021, 17:12

Übrigens hast du vergessen die Taste virtuell auch wieder loszulassen: KEYEVENTF_KEYUP

Ah, ich dachte das wäre ein einmaliges füllen des eingangs Puffers.
Mir ist aufgefallen das die Funktion "GetAsyncKeyState()" wahrscheinlich nicht die beste Wahl ist um Tasten einzulesen?!.
:thinking:

9

29.09.2021, 17:25

Übrigens hast du vergessen die Taste virtuell auch wieder loszulassen: KEYEVENTF_KEYUP

Die scheinen das abzufangen die Tastatureingaben und nochmal besonders auszuwerten.

10

29.09.2021, 21:01

Hat sonst noch jemand eine Idee?

Werbeanzeige