RDP ActiveX SendKeys Win + L для блокировки экрана - PullRequest
0 голосов
/ 07 января 2020

Работа над приложением, использующим элементы управления RDP ActiveX. Попытка использовать IMsRdpClientNonScriptable :: SendKeys для имитации комбо Win + L для блокировки экрана в сеансе RDP, но это не работает. Кажется, только клавиша L до go через?

    long nKeyCount = 4;
    VARIANT_BOOL keyUp[4];
    long keyData[4];        

    keyData[0] = 92;
    keyData[1] = SC_L;
    keyData[2] = SC_L;
    keyData[3] = 92;


    keyUp[0] = VARIANT_FALSE;
    keyUp[1] = VARIANT_FALSE;
    keyUp[2] = VARIANT_TRUE;
    keyUp[3] = VARIANT_TRUE;

    rdpclient.SendKeys(nKeyCount, &keyUp[0], &keyData[0]);

Редактировать: Попытка присвоения значений в формате LPARAM. Это тоже не сработало.

    keyData[0] = WmKeyDown_lParam(92, 0, 1);
    keyData[1] = WmKeyDown_lParam(SC_L, 0, 1);
    keyData[2] = WmKeyDown_lParam(SC_L, 1, 1);
    keyData[3] = WmKeyDown_lParam(92, 1, 1);

    long Rdp::WmKeyDown_lParam(uint scanCode, uint prevState, uint extended)
    {
        //scan does works
        uint repeatCount = 0;        
        uint context = 0;
        uint previousState = prevState;
        uint transition = 0;

        // combine the parameters above according to the bit
        // fields described in the MSDN page for WM_KEYDOWN

        long lParam = repeatCount
            | (scanCode << 16)
            | (extended << 24)
            | (context << 29)
            | (previousState << 30)
            | (transition << 31);

        //lParam = scanCode << 16;
        return lParam;
     }
...