2012-01-30 152 views
1

我们有一台运行windows xp professional的共享机器,人们使用远程桌面使用一个用户名和密码登录到该机器。 Windows远程桌面的问题在于,当其他用户登录时,当前用户将被踢出他/她的会话。我已经非常厌倦了这一点,并希望找到一种方法来查看谁登录到该机器,以便每个人都可以互相提供一个平板电脑。找出哪台电脑远程连接到另一台电脑

经过一番搜索,我发现在计算器上的解决方案,使用C# user-logged-into-remote-machine

然而,由于我们使用相同的用户名和密码登录到共享的机器,这种方法只会告诉我们,一个人(共同用户名)登录到远程计算机,但不是谁。是否有可能找出连接到共享机器的计算机的名称?非常感谢你。

回答

0

您可以使用本地Win32 API获取此信息(请参阅WTSQuerySessionInformation)。如果你使用的是.NET语言,你可以使用Cassia library,它包装了原生API,使它更容易使用。

使用决明子,你可以写这样的事情:

var manager = new TerminalServicesManager(); 
using (var server = manager.GetRemoteServer("server-name-here")) 
{ 
    server.Open(); 
    foreach (var session in server.GetSessions()) 
    { 
     if (session.ConnectionState == ConnectionState.Active) 
     { 
      Console.WriteLine(session.ClientName); 
     } 
    } 
} 

需要注意的是,如果你想用这个API远程访问Windows XP的机器,你将需要设置,然后才能将AllowRemoteRPC registry key并重新启动这样做。

+0

我试过这个解决方案,但在server.GetSessions()处得到一个Access Denied异常。我认为这可能与我们的服务器设置方式有关。我曾经做过WTSQuerySessionInformation,确实很麻烦。我喜欢Cassia。谢谢您的帮助。 – steveya 2012-07-23 20:09:07

+0

没问题。对于拒绝访问错误:请检查您的防火墙设置(服务器必须允许TCP端口445上的传入RPC连接)和[远程桌面权限](http://technet.microsoft.com/zh-cn/library/cc753032)。 – 2012-07-25 15:40:29

相关问题