WinApi нажатие Ctrl + -

244
10 апреля 2018, 03:06

Доброго времени суток. Пишу небольшого автокликера для мобильной игры. Игра запускается в эмуляторе Bluestacks. Мне требуется передать нажатие на клавиатуре Ctrl + - (VK_OEM_MINUS = 0xBD). Посмотрел что происходит в Spy++ когда нажимаю эти клавиши, вот результат.

Далее набросал кусок кода который повторяет эти же действия. Вот что происходит когда программно пытаюсь послать эти кнопки в окно эмулятора.

Сверял, все идентично. Но от куда-то берется WM_CHAR и так нечего не происходит. 1 кнопка работает, проверял на VK_DOWN = 0x28, а сочетание клавиш не как не получается запустить. Вот кусок колхозного кода.

public static void SendKey(VirtualKeys key, bool ctrl = false)
    {
        if (BlueStacksHelper.IsRunning)
        {
            int wKey = (((short)key) & 0xFF);
            int lKey = 0x000000001 | ((int)Win32.MapVirtualKey((uint)wKey, 0) << 16);
            int wCtrl = (((short)VirtualKeys.VK_CONTROL) & 0xFF);
            int lCtrl = 0x000000001 | ((int)Win32.MapVirtualKey((uint)wCtrl, 0) << 16);
            if (ctrl)
                Win32.PostMessage(BlueStacksHelper._handleWindow, Win32.WM_KEYDOWN, ((IntPtr) VirtualKeys.VK_CONTROL), (IntPtr)lCtrl);

            Thread.Sleep(65);
            Win32.PostMessage(BlueStacksHelper._handleWindow, Win32.WM_KEYDOWN, ((IntPtr)wKey), (IntPtr) lKey);
            lKey = (int)(0xC0000001 | (int)Win32.MapVirtualKey((uint)wKey, 0) << 16);
            Win32.PostMessage(BlueStacksHelper._handleWindow, Win32.WM_KEYUP, ((IntPtr)wKey), (IntPtr) lKey);
            lCtrl = (int)(0xC0000001 | (int)Win32.MapVirtualKey((uint)wCtrl, 0) << 16);
            if (ctrl)
                Win32.PostMessage(BlueStacksHelper._handleWindow, Win32.WM_KEYUP, ((IntPtr)VirtualKeys.VK_CONTROL), (IntPtr)lCtrl);
            Thread.Sleep(65);
        }
    }

Что я делаю не так? Ведь вроде все идентично, только у меня WM_CHAR непонятно от куда передается.

UPD WM_CHAR это char символ - который я нажимаю на клавиатуре. Но почему и он передается?

READ ALSO
Как запустить инсталятор внутри формы?

Как запустить инсталятор внутри формы?

Язык C# Как запустить exe инсталятор программы внутри формы своей программы? Это на тот случай если инсталятор не поддерживает тихий режим...

237
PeriodicTask.Builder() для Service в Xamarin.Forms

PeriodicTask.Builder() для Service в Xamarin.Forms

Добрый день, ищу помощи при создании службы которая работает с переодичностью (обновляет данные из интернета) в XamarinForms, служба не запускается...

198
MongoDB принимает за _id свойство Id

MongoDB принимает за _id свойство Id

Как указать MongoDB, что Id это не _id в данном классе

185
Обязательно ли нужен Data Tools для создания SQL CLR функции?

Обязательно ли нужен Data Tools для создания SQL CLR функции?

Обязательно ли нужен SQL Data Tools, что бы была возможность создавать SQL CLR функции?

202