Хорошо, не уверен, что такое совок, когда отвечаешь на твой собственный вопрос, но я разобрался со всем правильным решением и хотел бы поделиться им как Отмеченный ответ.
Сначала включите это, используя утверждение
using System.Runtime.InteropServices;
Тогда вставь это в свой класс, это в свой класс
[DllImport("user32.dll", EntryPoint = "keybd_event", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern void Keybd_event(byte vk, byte scan, int flags, int extrainfo);
Это импортирует метод C для использования в C #.
Теперь некоторые игры / приложения используют виртуальные ключи VKey, а некоторые (Direct X aka DIKey) используют сканкоды. Моя проблема заключалась в том, что я неправильно использовал коды сканирования, поэтому он не работал в некоторых играх. Я предлагаю, если вы не знаете, какое приложение хочет их использовать, вы называете это дважды, один с виртуальным ключом и один для ключа прямого ввода
Ниже приведен пример двух вызовов буквы «А» с использованием виртуальных ключей, а затем ключей прямого ввода.
KEYDOWN = 0
KEYUP = 2
//Virtual Key
Keybd_event(65, 0, KEYDOWN, 0);
//Direct Input Key
Keybd_event(0, 30, KEYDOWN, 0);
Как вы можете сказать, значения для A отличаются от VK до DIK
Обе ссылки относятся к значениям HEX, в то время как мои примеры выше показывают Base 10 (целые числа)
Ссылка на ключ http://delphi.about.com/od/objectpascalide/l/blvkc.htm
DIKeys ссылка http://community.bistudio.com/wiki/DIK_KeyCodes
Это также должно работать и для SendInput, но я не полностью это подтвердил.