SendInput模拟Win(VK_LWIN)键的问题

使用SendInput模拟按键,代码如下:

#include "stdafx.h"
#include <windows.h>
#include <conio.h>

#define KEY_TO_FIRE  VK_RWIN

int _tmain(int argc, _TCHAR* argv[])
{

    _tprintf(_T("fire key...
"));
    INPUT keyEvent = {0};

    keyEvent.type = INPUT_KEYBOARD;
    keyEvent.ki.wVk = KEY_TO_FIRE;
    keyEvent.ki.wScan = MapVirtualKey(KEY_TO_FIRE, 0);
    keyEvent.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;

    if( 0 == SendInput(1, &keyEvent, sizeof(keyEvent)) )
    {
        _tprintf(_T("SendInput error: %u
"), GetLastError());
    }

    keyEvent.ki.dwFlags |= KEYEVENTF_KEYUP;

    if( 0 == SendInput(1, &keyEvent, sizeof(keyEvent)) )
    {
        _tprintf(_T("SendInput (UP) error: %u
"), GetLastError());
    }

    _tprintf(_T("wait 3s to fire again...
"));
    Sleep(3000);

    keyEvent.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
    if( 0 == SendInput(1, &keyEvent, sizeof(keyEvent)) )
    {
        _tprintf(_T("SendInput error: %u
"), GetLastError());
    }

    keyEvent.ki.dwFlags |= KEYEVENTF_KEYUP;

    if( 0 == SendInput(1, &keyEvent, sizeof(keyEvent)) )
    {
        _tprintf(_T("SendInput (UP) error: %u
"), GetLastError());
    }

    _getch();

    return 0;
}

发现Windows按键(VK_LWIN和VK_RWIN)死活出不来,查半天发现是360安全卫士的问题。它的驱动防护拦截了这个按键发送调用。

关闭驱动防护即可,如图中标注所示:

或者加入信任列表:

360管真心管得宽……

原文地址:https://www.cnblogs.com/hehehaha/p/6147394.html