Windows API, виртуальный ключ приостановки мультимедиа не работает

#c #windows #windows-11

Вопрос:

У меня есть следующий код, и хотя он работает, когда arg = 2 или arg = 3 , кажется, не влияет, когда arg = 1 . Я действительно не вижу ничего плохого в том, что я сделал. Это начало не работать после того, как я перешел на Windows 11. Любая помощь приветствуется.

 #include <Windows.h>

int main(int argc, char** argv)

{
    //int arg = argv[1][0] - 48;
    int arg = 1;

    KEYBDINPUT kbi;
    kbi.wScan = 0;
    kbi.dwFlags = 0; 
    kbi.time = 0;
    kbi.dwExtraInfo = (ULONG_PTR)GetMessageExtraInfo();

    switch (arg)
    {
    case 1:
        kbi.wVk = VK_MEDIA_PLAY_PAUSE; // PAUSE
        break;
    case 2:
        kbi.wVk = VK_VOLUME_UP; // VOLUP
        break;
    case 3:
        kbi.wVk = VK_VOLUME_DOWN; // VOLDOWN
        break;
    case 4:
        kbi.wVk = VK_MEDIA_NEXT_TRACK; // FORWARD
        break;
    case 5:
        kbi.wVk = VK_MEDIA_PREV_TRACK; // BACKWARD
        break;
    default:
        return 2;
    }

    INPUT input;
    input.type = INPUT_KEYBOARD;
    input.ki = kbi;

    input.ki.dwFlags = 0; // 0 for key press
    auto x = SendInput(1, amp;input, sizeof(INPUT));

    input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
    x = SendInput(1, amp;input, sizeof(INPUT));

    return 0;
}
 

Комментарии:

1. Попробуйте INPUT input = { 0 }; инициализировать.

2. @BarmakShemirani нет, тоже не сработало. Мне интересно, изменился ли Windows API в W11 или нет?

3. VK_VOLUME_UP/DOWN Работает ли это? У меня нет Windows 11, может быть, она просто не настроена для работы с каким-то приложением.

4. @BarmakShemirani да, это единственные работающие. NEXT_TRACK или PREVIOUS_TRACK тоже не работают. Ну, я запускаю spotify, и когда я нажимаю Fn F4, что является настоящей клавишей паузы в мультимедиа, музыка на самом деле приостанавливается. Поэтому я не знаю, соответствует ли это приложению или нет, но мне так не кажется.