0

处理使用 RDP ActiveX 控件的应用程序。尝试使用IMsRdpClientNonScriptable::SendKeys模拟 Win + L 组合以在 RDP 会话中锁定屏幕,但它不起作用。只有L键似乎可以通过?

    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;
     }
4

0 回答 0