处理使用 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;
}