Cześć mam problem, chcialem stworzyć program ktory wykrywa kolor kilku pikseli w grze i odpowiednie przyciski naciska. Udalo mi sie napisac juz kod ktory weryfikuje które przyciski mają być wcisniete ale nie potrafię sprawic żeby automatycznie zostały wcisniete. Gra to mta czyli directx i za pewne to jest problemem.
#include <iostream>
#include <Windows.h>
#include <Winuser.h>
#include <chrono>
#include <thread>
#include <dinput.h>
#include <map>
#include <dinput.h>
void pressKey(CHAR keyParam) {
SHORT key;
UINT mappedkey;
INPUT input = { 0 };
key = VkKeyScan(keyParam);
mappedkey = MapVirtualKey(LOBYTE(key), 0);
input.type = INPUT_KEYBOARD;
input.ki.dwFlags = KEYEVENTF_SCANCODE;
input.ki.wScan = mappedkey;
SendInput(1, &input, sizeof(input));
Sleep(10);
input.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(input));
}
int main()
{
char keyq = 0x51;
int click=0;
while (true) {
// window
LPCWSTR window_title = L"MTA: San Andreas";
HWND hWND = FindWindow(NULL, window_title);
while (hWND == NULL) {
hWND = FindWindow(NULL, window_title);
std::cout << "start game!" << std::endl;
Sleep(1000);
}
HDC hDC = GetDC(hWND);
COLORREF color1;
COLORREF color2;
COLORREF color3;
COLORREF letter1;
COLORREF letter2;
COLORREF letter3;
color1 = GetPixel(hDC, 59, 642);
if (color1 > 10000000 && color1 < 11000000 && click==0) {
letter1 = GetPixel(hDC, 45, 642);
if (letter1 > 10000000 && letter1 < 11000000) {
std::cout << "| Thats Q |\n";
//pressKey(keyq);
click++;
}
else {
std::cout << "| Thats E |\n";
click++;
}
}
color2 = GetPixel(hDC, 116, 642);
if (color2 > 10000000 && color2 < 11000000 && click == 1) {
letter2 = GetPixel(hDC, 104, 642);
if (letter2 > 10000000 && letter2 < 11000000) {
std::cout << "| Thats Q |\n";
click++;
}
else {
std::cout << "| Thats E |\n";
click++;
}
}
color3 = GetPixel(hDC, 175, 642);
if (color3 > 10000000 && color3 < 11000000 && click == 2) {
letter3 = GetPixel(hDC, 163, 642);
if (letter3 > 10000000 && letter3 < 11000000) {
std::cout << "| Thats Q |\n";
click=0;
}
else {
std::cout << "| Thats E |\n";
click=0;
}
}
Sleep(100);
if (GetAsyncKeyState(VK_NUMPAD0)) {
return 0;
}
}
return 0;
}