2010-08-24 4 views
0

HI,служб терминалов

Im использованием Delphi, и я хочу, чтобы сделать приложение, которое может сделать следующее

При запуске внутри терминалов служб (удаленный рабочий стол), если другой пользователь входит в другой терминальной сессии услуги они должны иметь возможность видеть приложение, запущенное на рабочем столе. Однако, если пользователь, сидящий на сервере, входит в систему, то они не должны видеть приложение, запущенное на рабочем столе. Это прекрасно, если все видят, что он работает в списке процессов, а не в рабочем столе.

Как я могу это сделать?

+0

Можете ли вы привести пример существующего приложения с этим поведение? –

+1

Нет такой вещи, как «рабочий стол» (http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx). Либо вы имеете в виду * панель задач * (место, где обычно отображаются открытые окна), либо вы имеете в виду * область уведомлений */панели задач /, рядом с часами. Просьба уточнить. –

+2

Мое предположение: Приложение должно помещать значок уведомлений в каждый доступный сеанс, но ни одного в сеансе консоли. – ChristianWimmer

ответ

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

+0

Да, похоже, что мне нужно, спасибо за это. –

0

Успение: вы регистрируетесь на Windows Server - два человека не могут RDP одновременно работать на настольных ОС. Мой опыт заключается в том, что вы не должны видеть приложения, выполняемые визуально - то есть на рабочем столе или на панели задач или в области значков в трее.

Если вы заходите в диспетчер задач и смотрите на запущенные процессы - вы можете видеть, что процесс работает. Кроме того, если вы являетесь администратором, вы можете «убить» этот процесс, иначе вы ничего не сможете с ним поделать.

Помогает ли это?

Просьба уточнить, что вы просите.

+0

Привет, извините, я имел в виду область лотка панели задач. В основном, что я хочу сделать: пользователь входит в сеанс через удаленный рабочий стол (службы терминалов) и запускает приложение, которое находится в лотке панели задач, а затем выходит из системы. Если другой пользователь регистрируется через удаленный рабочий стол, он должен увидеть приложение, запущенное на панели задач. Однако пользователь, который зарегистрирован локально на сервере, не должен видеть, что он работает. –

Смежные вопросы