你好,
我正在使用 Delphi,我想制作一个可以执行以下操作的应用程序
当从终端服务(远程桌面)中启动时,如果另一个用户登录到另一个终端服务会话,他们应该能够看到在桌面托盘中运行的应用程序。但是,如果坐在服务器上的用户登录,那么他们不应该看到在桌面托盘中运行的应用程序。如果每个人都可以看到它在进程列表中运行,那很好,而不是桌面托盘。
我怎样才能做到这一点?
你好,
我正在使用 Delphi,我想制作一个可以执行以下操作的应用程序
当从终端服务(远程桌面)中启动时,如果另一个用户登录到另一个终端服务会话,他们应该能够看到在桌面托盘中运行的应用程序。但是,如果坐在服务器上的用户登录,那么他们不应该看到在桌面托盘中运行的应用程序。如果每个人都可以看到它在进程列表中运行,那很好,而不是桌面托盘。
我怎样才能做到这一点?
让您的应用程序在每个用户启动时启动,然后使用此函数确定是否退出:
#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中提取
假设:您正在登录 Windows 服务器 - 两个人不能在桌面操作系统上同时进行 RDP。我的经验是,您不应该看到应用程序在视觉上运行——即在桌面或任务栏或托盘图标区域上。
如果您进入任务管理器并查看正在运行的进程 - 您可能会看到进程正在运行。此外,如果您是管理员,那么您可以“杀死”该进程,否则您无能为力。
这有帮助吗?
请澄清你在问什么。