Использование RDPENCOMAPI_CONSTANTS.CONST_ATTENDEE_ID_EVERYONE
не работает для меня.
Единственный способ решить эту проблему - использовать SendData
итерацию по участникам сессии.
foreach (IRDPSRAPIAttendee a in _ctx.activeSession.Attendees)
virtualChannel.SendData(msg, a.Id, Convert.ToUInt32(CHANNEL_FLAGS.CHANNEL_FLAGS_LEGACY));
Хотя это решает связь между хостом и программой просмотра, я все еще не могу получить сообщение от подключенного средства просмотра, зарегистрированного в том же виртуальном канале и использующего RDPENCOMAPI_CONSTANTS.CONST_ATTENDEE_ID_HOST
константу.
На стороне сервера я создал новую RDPSession и виртуальный канал
activeSession = new RDPSession();
virtualChannel = activeSession.VirtualChannelManager.CreateVirtualChannel("myproto", CHANNEL_PRIORITY.CHANNEL_PRIORITY_HI, (uint)CHANNEL_FLAGS.CHANNEL_FLAGS_LEGACY);
создайте новый обработчик для события OnChannelDataReceived
и запустите сеанс RDP.
activeSession.OnChannelDataReceived += new _IRDPSessionEvents_OnChannelDataReceivedEventHandler(OnChannelDataReceived);
activeSession.Open();
Обработчик событий выглядит так:
private void OnChannelDataReceived(object pChannel, int lAttendeeId, string bstrData) {
switch(bstrData)
{
/* Handle commands here */
case "mycmd":
/* Process command and reply using SendData */
break;
}
}
Средство просмотра работает в Windows 10, в то время как сервер работает в Windows 7, и оба они используют RDPCOMAPI, сгенерированный из Windows 7 rdpcomen.dll
с использованием инструмента tlbimp.exe
.