HI,
我正在使用Delphi,我想创建一个可以执行以下操作的应用程序
从终端服务(远程桌面)中启动时,如果另一个用户登录到另一个终端服务会话,他们应该能够看到桌面托盘中运行的应用程序。但是,如果坐在服务器上的用户登录,则他们不应该看到桌面托盘中运行的应用程序。如果每个人都可以看到它在进程列表中运行,而不是桌面托盘就可以了。
我该怎么做?
答案 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。我的经验是,您不应该看到应用程序在视觉上运行 - 即在桌面上或任务栏或托盘图标区域。
如果您进入任务管理器并查看正在运行的进程 - 您可能会看到进程正在运行。此外,如果您是管理员,那么您可以“杀死”该过程,否则您无法使用它。
这有帮助吗?
请澄清你的要求。