终端服务

时间:2010-08-24 05:13:06

标签: windows delphi remote-desktop terminal-services

HI,

我正在使用Delphi,我想创建一个可以执行以下操作的应用程序

从终端服务(远程桌面)中启动时,如果另一个用户登录到另一个终端服务会话,他们应该能够看到桌面托盘中运行的应用程序。但是,如果坐在服务器上的用户登录,则他们不应该看到桌面托盘中运行的应用程序。如果每个人都可以看到它在进程列表中运行,而不是桌面托盘就可以了。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在每个用户启动时启动应用程序,然后使用此功能确定是否退出:

#include <windows.h>
#include <winternl.h>

BOOL IsRunningOnTerminalServerClient( void )
{
    PWINSTATIONQUERYINFORMATIONW WinStationQueryInformationW;
    WINSTATIONINFORMATIONW wsInfo;
    HINSTANCE hInstWinSta;
    ULONG ReturnLen;

    hInstWinSta = LoadLibraryA( "winsta.dll" );
    if( hInstWinSta )
    {
        WinStationQueryInformationW = (PWINSTATIONQUERYINFORMATIONW)
            GetProcAddress( hInstWinSta, "WinStationQueryInformationW" );
        if( WinStationQueryInformationW &&
                WinStationQueryInformationW( SERVERNAME_CURRENT, 
                    LOGONID_CURRENT, 
                    WinStationInformation,
                    &wsInfo, 
                    sizeof(wsInfo), 
                    &ReturnLen ) &&
                ( wsInfo.LogonId != 0 ) )
        {
            FreeLibrary( hInstWinSta );
            return( TRUE );
        }
        FreeLibrary( hInstWinSta );
    }
    return FALSE;
}

http://msdn.microsoft.com/en-us/library/aa383827(v=VS.85).aspx

拉出来

答案 1 :(得分:0)

假设:您正在登录Windows服务器 - 两个人无法在桌面操作系统上同时使用RDP。我的经验是,您不应该看到应用程序在视觉上运行 - 即在桌面上或任务栏或托盘图标区域。

如果您进入任务管理器并查看正在运行的进程 - 您可能会看到进程正在运行。此外,如果您是管理员,那么您可以“杀死”该过程,否则您无法使用它。

这有帮助吗?

请澄清你的要求。