wysylanie nacisniec klawiszy do gry

Odpowiedz Nowy wątek
2009-09-17 12:40

Rejestracja: 10 lat temu

Ostatnio: 9 lat temu

0

Witam chciałbym napisać program który łączy się np.: z jakąś prosta grą lub innym programem i wysyła do niej sekwencje wciśnięć klawiszy np.: wciśnięcie klawisza Z. Nie bardzo wiem jak zrealizować takie połączenie.

Pozostało 580 znaków

Testowy
2009-09-17 13:33
Testowy
0

HWND hWindow = FindWindow(NULL,"tytul okna gry");

WPARAM wParam = 64;

SendMessage(hWindow,WM_KEYDOWN,wParam,0);

Przykladowe nacisniecie a

Pozostało 580 znaków

2009-09-17 16:49

Rejestracja: 10 lat temu

Ostatnio: 9 lat temu

0

Szczerze powiedziawszy nic nie rozumiem z tego. Znam podstawy C++ ( z Symfinii zaczołem obiekty). Czym muszę się zacząć interesować żeby to zrozumieć. Prosił bym o jakieś materiały (najlepiej w języku polskim) i jak ktoś by mógł mi napisać z grubsza co robią te instrukcje, byłbym bardzo wdzęczny. Z góry dziękuję za zainteresowanie.

Pozostało 580 znaków

2009-09-17 18:55

Rejestracja: 12 lat temu

Ostatnio: 2 lata temu

0

Musisz się zainteresować systemowymi bibliotekami do obsługi klawiatury. :)
Jeżeli używasz windowsa to możesz zrobić tak jak napisał Testowy.

Poczytaj o podstawach WinApi to zrozumiesz ten kod :D
http://darkcult.gamedev.pl/winapi.html

HWND - uchwyt okna
FindWindow - szuka okna o podanym tytule(na balce tytułowej) i zwraca jego uchwyt
SendMessage wysyła komunikat(okna wysylaja i odbieraja komunikaty, za dużo pisania lepiej przeczytać w jakimś tutorialu :D ) .
Parametry:

  1. uchwyt okna do którego ma wysłać
  2. rodzaj komunikatu ( WM_KEYDOWN - wciśnięcie klawisza)
  3. wParam - kod klawisza (kodów szukaj na msdn, hasło virtual scan codes )
  4. lParam - w tym przypadku puste

pozdr.

Pozostało 580 znaków

2009-09-17 23:39

Rejestracja: 10 lat temu

Ostatnio: 9 lat temu

0

Dzięki wielkie, właśnie zaczołem rozgryzać podany przez Ciebie tutorial. Dodam jeszcze jeden ciekawie napisany: http://guidecpp.cal.pl/
Może komuś się jeszcze przyda :-)

Pozostało 580 znaków

2009-09-19 03:23

Rejestracja: 10 lat temu

Ostatnio: 10 lat temu

0
Testowy napisał(a)

HWND hWindow = FindWindow(NULL,"tytul okna gry");

WPARAM wParam = 64;

SendMessage(hWindow,WM_KEYDOWN,wParam,0);

Przykladowe nacisniecie a

Kod nie działał, wprowadziłem poprawkę:) klawisz "A" w ASCII to 65 (hex 0x41),a nie 64

HWND hWindow = FindWindow(NULL,"tytul okna gry");
WPARAM wParam = 0x41;
SendMessage(hWindow,WM_KEYDOWN,wParam,0);

A tu moje 2 pytania:

#include <cstdlib>
#include <iostream>
#include <windows.h>
int i;
using namespace std;

int main(int argc, char *argv[])
{

HWND hWindow = FindWindow(NULL,"Gra");
WPARAM wParam = 38;
While(i<7)
{
SendMessage(hWindow,WM_KEYDOWN,wParam,0);
i++;
}
    system("PAUSE");
    return EXIT_SUCCESS;
}

1.Czemu postać w grze porusza się tylko raz po siedmiokrotnej symulacji klawisza UP?
2.Jak zrobić by aplikacja symulowała takie wsiśnięcie przez czas 30 sekund?

Ps. przestudiowałem kursy WinApi, ale niestety tam nie ma informacji na ten temat...

Pozostało 580 znaków

2009-09-19 07:48

Rejestracja: 10 lat temu

Ostatnio: 9 lat temu

0

To zależy od gry, w niektórych tyh głownie opartych o silnik Unreal gdy okno gry jest nieaktywne to gra odbiera jedynie komunikaty co 1s (1s sleep). Jeśli okno ma być aktywne spróbuj SendInput. SendMessage niezawsze działa wpełni dobrze jeśli chodzi o klawisze..


Pozostało 580 znaków

2009-09-19 14:06

Rejestracja: 10 lat temu

Ostatnio: 10 lat temu

0

To jak to zmodyfikować, tak żeby do Aplikacji o tytule Gra lub klasie gameclass wysyłany był przycisk UP za pomocą sendinput?

PS. Napisałem program, który po naciśnięciu klawisza "UP ARROW" dodaje do licznika 1, jednak za użyciem powyższego kodu nic się nie dzieje...

Link:http://www.speedyshare.com/349171667.html

Pozostało 580 znaków

2009-09-19 16:23

Rejestracja: 16 lat temu

Ostatnio: 6 lat temu

0

Temat był wiele razy poruszany. Użyj wyszukiwarki, np wyszukaj po słowie "sendinput" http://4programmers.net/Forum/search.php?q=sendinput

Pozostało 580 znaków

2009-09-20 00:45

Rejestracja: 10 lat temu

Ostatnio: 10 lat temu

0
adf88 napisał(a)

Temat był wiele razy poruszany. Użyj wyszukiwarki, np wyszukaj po słowie "sendinput" http://4programmers.net/Forum/search.php?q=sendinput

Jeśli sam przeszukasz to dowiesz się też, że żaden z nich nie rozwiązał problemu, a jeśli rozwiązał to w beznadziejny sposób bo aplikacja, do której wysyłany jest klawisz musi być aktywna(Pewnie dlatego poruszany był wiele razy). Ja chciałbym robić coś innego przy kompie(np gadać na gg) i jednocześnie żeby mi mój program wysyłał do zminimalizowanej aplikacji klawisze itp...

Pozostało 580 znaków

2009-09-21 15:10

Rejestracja: 10 lat temu

Ostatnio: 10 lat temu

0

No cóż, okazuje się, że wszystko da się zrobić za pomocą SendMesage/PostMessage, tylko nikt nie pomyślał, że program może wysyłać wiadomości tak szybko, że gra nie wyrabia z ich interpretacją;] Rozwiązanie -Trzeba spowolnić proces wysyłania wiadomości do gry tak aby wyrabiała się z interpretacją;]

U mnie już wszystko działa;]

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0