0

你好,

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

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

我怎样才能做到这一点?

4

2 回答 2

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中提取

于 2010-08-24T23:36:02.880 回答
0

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

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

这有帮助吗?

请澄清你在问什么。

于 2010-08-24T17:00:47.717 回答