wysylanie nacisniec klawiszy do gry

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.

0

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

WPARAM wParam = 64;

SendMessage(hWindow,WM_KEYDOWN,wParam,0);

Przykladowe nacisniecie a

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.

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.

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 :-)

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...

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..

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

0

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

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...

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