Работа над приложением, использующим элементы управления 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;
}