VNC如何断开已连接的RDP会话

时间:2009-06-30 06:36:08

标签: vnc mstsc

当使用VNC与RDP结合使用时,我注意到VNC的行为,即当您使用RDP(mstsc)连接到计算机,然后您想要使用VNC连接到该计算机时,它将断开连接RDP会话,你会看到目标机器上的屏幕闪烁(黑屏一秒),然后你通过VNC连接,我想知道的是VNC如何断开活动的RDP会话,任何代码片段都将是真有帮助.. 感谢

1 个答案:

答案 0 :(得分:2)

当您使用VNC连接时,它会尝试使用WinStationConnectW(未记录)连接到控制台会话,这将断开RDP会话。

来自Here is a snippet

TightVNC

  void setConsoleSession(DWORD sessionId) {
#ifdef RFB_HAVE_WINSTATION_CONNECT
    if (!_WinStationConnect.isValid())
      throw rdr::Exception("WinSta APIs missing");
    if (sessionId == -1)
      sessionId = mySessionId.id;

    // Try to reconnect our session to the console
    ConsoleSessionId console;
    vlog.info("Console session is %d", console.id);
    if (!(*_WinStationConnect)(0, sessionId, console.id, L"", 0))
      throw rdr::SystemException("Unable to connect session to Console", GetLastError());

    // Lock the newly connected session, for security
    if (_LockWorkStation.isValid())
      (*_LockWorkStation)();
#else
    throw rdr::Exception("setConsoleSession not implemented");
#endif
  }