Вы можете использовать SendInput () для отправки кодов аппаратного сканирования (в отличие от виртуальных кодов сканирования, которые DirectInput может игнорировать). Он плохо документирован, но SendInput () действительно может обходить DirectInput. Причина, по которой решение Эрика не срабатывало, - это установить код сканирования аппаратного обеспечения, но в итоге он использовал код виртуального сканирования (установив dwFlags в 0 и wVk на ненулевой).
По существу, чтобы сделать нажмите клавишу, которую вы хотите установить:
ip.ki.dwFlags = KEYEVENTF_SCANCODE;
И чтобы сделать выпуск ключа, установите:
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
Ниже приведен полный рабочий образец, и он печатает букву 'a' , Вы можете найти другие коды сканирования здесь .
#define WINVER 0x0500
#include <windows.h>
using namespace std;
int main()
{
//Structure for the keyboard event
INPUT ip;
Sleep(5000);
//Set up the INPUT structure
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.wVk = 0; //We're doing scan codes instead
ip.ki.dwExtraInfo = 0;
//This let's you do a hardware scan instead of a virtual keypress
ip.ki.dwFlags = KEYEVENTF_SCANCODE;
ip.ki.wScan = 0x1E; //Set a unicode character to use (A)
//Send the press
SendInput(1, &ip, sizeof(INPUT));
//Prepare a keyup event
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
return 0;
}
Примечание. Вы можете комбинировать нажатия клавиш (например, shift + a для A), передавая SendInput () массив структур INPUT ,
Вам часто нужно установить код проверки:
// Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = MapVirtualKey(code, MAPVK_VK_TO_VSC); // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Press the "..." key
ip.ki.wVk = code; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
И создание массива по предложению IInspectable также является определенным способом.
Если вы хотите создать игрового бота, посмотрели ли вы на программу AutoHotKey? http://www.autohotkey.com/
Он предлагает язык сценариев, который позволяет выполнять множество задач, связанных с созданием «бота», и это довольно просто чем пытаться сделать все это на C ++
(Это, безусловно, играло в Farmville для меня, когда вся моя семья давила на создание учетной записи)