none
Windows API, PostMessageW, How to press Left Shift? RRS feed

  • Вопрос

  • Приветствую тебя, дорогой читатель.
    Я — Разработчик и мне очень нужна твоя помощь.

    На протяжении 4х месяцев, я пытаюсь написать программу которая бы выполняла нажатия определенных клавиш в нужном мне окне и в принципе, все ок, но, есть одна проблема. Серьезная проблема. Моей программе просто смертельно необходима возможность нажать/отжать шифт. Вроде бы, что тут такого?

    Дело в том что PostMessageW у меня спокойно нажимает абсолютно все клавиши, кроме Left Shift.
    A — Z, Space и так далее. Shift — ни в какую. Я знаю что есть функции keybd_event и sendinput, однако, мне нужно делать это в определенном окне.

    Вот код который я использую:
    DFFI::PostMessageW($hwnd, 0x0100, 0xA0, 0); — По логике, это нажмет Left Shift. Но нет.

    Возможно, я не правильно назначил типы?
    $user32 = new DFFI('user32');

    $user32->bind('PostMessageW', DFFIType::INT, [DFFIType::INT, DFFIType::INT, DFFIType::INT, DFFIType::INT]);
    Тип возвращаемого значения, [тип hwnd, тип message, тип wparam, тип lparam]


    Я использую не очень известный язык, однако, я прошу вас подумать, возможно я сделал что-то не так..

    Вот информация о моем Windows:
    Версия Windows: Windows 10 Корпоративная LTSC x64
    Версия WinAPI: 10.0.17763.1
    • Изменено eXpl01TeR 30 января 2019 г. 12:07
    29 января 2019 г. 18:30

Ответы

Все ответы

  • Тут все зависит от приложения, которому вы пытаетесь скормить эти события. Если оно получает информацию о состоянии Shift через функцию GetAsyncKeyState, то информация берется напрямую с клавиатуры, а не из сообщений. Как не посылайте, толку не будет. Автоматизация работы с UI приложений в фоновом режиме, в общем случае - неподдерживаемый сценарий в Windows. Если приложение использует только стандартные элементы управления или предоставляет свой провайдер, можно попробовать с помощью UI Automation

    30 января 2019 г. 4:09
  • Я еще раз говорю, все кнопки кроме шифта работают.
    У моего знакомого работает даже шифт, но у него Windows 7, у меня же Windows 10.

    На Windows 10 1603 у меня так же нажимался шифт, на этом - нет.
    30 января 2019 г. 8:21
  • Возможно статья PostMessageW function подскажет направление решения вашей задачи.

    Ждём от вас результат.


    Да, я Жук, три пары лапок и фасеточные глаза :))

    3 июля 2019 г. 13:12
    Модератор