Отправить нажатия клавиш так же, как клавиатура? - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь написать небольшое приложение для игры, в которую я играю, которая позволяет мне отправлять нажатия клавиш. К сожалению, их программное обеспечение блокирует входящие события нажатия клавиш как SendMessage / PostMessage, так и SendKeys. Обычно я бы просто сказал, что это намеренно, и оставил бы все как есть ...

Моя клавиатура G15 позволяет создавать макросы с привязкой к клавишам для игр, и с этим отлично работает. Поскольку макросы запускаются из программного обеспечения клавиатуры, они используют другую форму отправки нажатий клавиш, чем я уже пробовал.

Является ли это низкоуровневым способом нажатия клавиш или, в основном, отправкой их так же, как если бы они были нажаты? Вот мои попытки кода пока ...

private void button1_Click(object sender, EventArgs e)
{
    // TRY #1

    IntPtr hWnd = FindWindow("NIVAL_MMO_ENGINE", "Allods Online");
    PostMessage(hWnd, WM_KEYDOWN, ((IntPtr)Keys.W), IntPtr.Zero);

    // TRY #2

    IntPtr Handle = FindWindow("NIVAL_MMO_ENGINE", "Allods Online");

    // Verify that Process is a running process.
    if (Handle == IntPtr.Zero)
    {
        MessageBox.Show("Calculator is not running.");
        return;
    }

    SetForegroundWindow(Handle);
    SendKeys.SendWait("w");
}

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Чтобы отправить ключ с помощью функции PostMessage, необходимо определить параметры следующим образом:

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, Int64 lParam);

public const uint WM_KEYDOWN = 0x100;
public const uint WM_KEYUP = 0x101;

// sends the W key
PostMessage(handle, WM_KEYDOWN, 0x00000057, 0x00110001);
PostMessage(handle, WM_KEYUP, 0x00000057, 0xC0110001);

вы можете найти параметры в Spy ++, Наслаждайтесь !!

1 голос
/ 10 января 2012

Самый низкий уровень способа помещения ключей во входную очередь - SendInput .Если это не сработает, то игра делает несколько интересных вещей со стеком ввода.

Вполне возможно, что клавиатура G15 поддерживает «аппаратные» макросы - то есть сама клавиатура генерирует серию ключевых событий вверх / вниз.

...