Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Мониторинг сессий сервера


Автор: alcogol 11.3.2008, 14:01
Добрый день люди добрые. Я новичок, хочу задать вам вопрос. Только сразу не ругайтесь, я давно не занимался Делфи, многое забыл, да и когда помнил тоже не ахти какие знания, всё сам, пог книжке без частички помощи. Короче ближе к телу: требуется найти либо компоненту, либо ещё как отмониторить сессии на большом терминальном сервере, где висит штук 50 пользователей. найти надо по имени пользователя.  к примеру evtulenev имя пользователя. надо найти есть ли такая сессия на сервере и если есть, то хотелось иметь возможность её оттуда сбросить. Собственно найти и при желании сбросить сессию с удалённого сервера. Либо на нём расположить серверную часть. 

Автор: MetalFan 11.3.2008, 14:10
Цитата(alcogol @  11.3.2008,  14:01 Найти цитируемый пост)
требуется найти либо компоненту

о, я знаю такую компоненту - называется Hands&Head Components Suite

p.s.простите - не удержался.


Автор: alcogol 11.3.2008, 14:42
Цитата(MetalFan @ 11.3.2008,  14:10)
Цитата(alcogol @  11.3.2008,  14:01 Найти цитируемый пост)
требуется найти либо компоненту

о, я знаю такую компоненту - называется Hands&Head Components Suite

p.s.простите - не удержался.

Понимаешь,я  ещё раз говорю что я новичок. Неужели так тяжело без приколов объяснить? Если бы я знал то не обращался к вам,а  так уж извините, нужда. Я не первый день ищу информацию, но всё не то.  smile 

Автор: dumb 12.3.2008, 01:49
http://msdn2.microsoft.com/en-us/library/aa383464(vs.85).aspx: WTSOpenServer, WTSEnumerateSessions, WTSQuerySessionInformation(..., WTSUserName,...), WTSLogoffSession... примеры кода искать по этим словам.

Автор: alcogol 12.3.2008, 02:00
пасип, начал поиски инфы

Автор: alcogol 13.3.2008, 12:13
procedure EnuSessions(const List: TStrings);
var
  pInfo, p: PWtsSessionInfo;
  Len, BufSize: Cardinal;
  pBuf: PChar;
  n: integer;
begin
  if List = nil then
  begin
    SetLastError(ERROR_INVALID_PARAMETER);
    Exit;
  end;

  if not
    WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE , 0, 1, pInfo, Len)
  then
    Exit;

  try
    p:=pInfo;
    for n:=0 to Pred(Len) do
    begin
      if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, p.SessionId,
          WTSUserName, Pointer(pBuf), BufSize) then
      try
        List.Values[IntToStr(p.SessionId)]:=pBuf;
      finally
        WTSFreeMemory(pBuf);
      end;
      Inc(p);
    end;
  finally
    WTSFreeMemory(pInfo);
  end;
end;


Я ещё раз  с вопросом.  Код приведённый выше узнаёт пользователей на том компе, где собственно запущена программа. Но когда я вместо WTS_CURRENT_SERVER_HANDLE пытаюсь поставить WTSopenServer('terminal server1').... Показывает только первую сессию. ЧТо не так? Люди,е сли можно покажите примером,я  просто до этого API вообще не касался, для меня это сложновато сейчас, а код этот нужен

Автор: alcogol 13.3.2008, 15:31
всё вопрос снят, это проблема в серваке была. всё получилось

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)