Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как определить что к радмину кто-то прицепился. Т.


Автор: Bes 8.9.2005, 11:15
САБЖ!

Автор: Snowy 8.9.2005, 11:54
Программно и лови изменение значка.

Автор: Romikgy 8.9.2005, 12:02
Или активность порта для связи smile

Автор: Bes 8.9.2005, 15:07
Спасибо, а чуть подробнее...
Вот про значек в частности...

Автор: Vit 8.9.2005, 22:04
Значёк - никак кроме как прорисовку экрана читать. Правильным решением является ИМХО - слушать порт

Автор: Snowy 8.9.2005, 22:12
Цитата(Vit @ 8.9.2005, 22:04)
Значёк - никак кроме как прорисовку экрана читать.

Отнюдь. В NT системах, трей - всего лишь тулбар.
Внедрившись в него, можно сделать что угодно.
Не внедряясь, можно получить список кнопок.
Вот только сделать у меня это не удалось, но видел реальный пример, но без исходняков...
Цитата(Vit @ 8.9.2005, 22:04)
Правильным решением является ИМХО - слушать порт

Это сложновато. Нужно или файрвол мудрить или редирект делать.
Лично мне не нравится ни то ни другое.
Тут Coruilis мне подсказал более простое решение проблемы - просто определять заголовок окна программы. При подключении, по идее, он должен меняться.

Автор: Bes 9.9.2005, 10:26
А там помоему никакого окна и нет.
Когда кто-то к тебе подключается.....

Автор: Snowy 9.9.2005, 10:31
Цитата(Bes @ 9.9.2005, 10:26)
А там помоему никакого окна и нет.
Когда кто-то к тебе подключается.....

Окно всегда есть. Оно может быть на экране или не быть, но оно есть.
Следовательно, зная хэндл этого окна мы легко можем получить его заголовок, независимо от того видно оно сейчас или нет.

Автор: Girder 9.9.2005, 10:41
Значек в трее тоже можно скрыть

Автор: Snowy 9.9.2005, 10:47
Цитата(Girder @ 9.9.2005, 10:41)
Значек в трее тоже можно скрыть

Если его скрыть, а не удалить, то его все равно можно найти (в NT+ системах)
Вот у меня, например, в трее 6 значков. Смотрю сканером - есть еще 3 скрытых.
То есть скрыть можно, но обратьться к ним программно все равно реально.

Автор: Girder 9.9.2005, 11:05
Snowy их вообще можно удалить smile и сканер не поможет smile

Автор: Snowy 9.9.2005, 12:40
Цитата(Girder @ 9.9.2005, 11:05)
Snowy их вообще можно удалить  и сканер не поможет

Цитата(Snowy @ 9.9.2005, 10:47)
Если его скрыть, а не удалить, то его все равно можно найти

Я ж и пишу, что если они скрыты, а не удалены.

Вариант с получением заголовка мне кажется самым простым и эффективным smile

Автор: RA 9.9.2005, 13:23
Если порыться в R_servere то там должно быть окно что-то типа "активные соединения", в этом окне на компоненте типа memo прописываются ip всех присоединившихся.

Автор: Romikgy 9.9.2005, 13:59
У меня есть такое окно (класс его такой : BASECLASS#FBFB04#18BE ) на нем есть класс Static, а на нем написанны активные соединения

Автор: Gorets 12.9.2005, 11:31
а у меня имя класса формы #32770
видно это зависит от версии радмина.

Автор: Bes 12.9.2005, 12:05
Че то дискуссия вроде не туда уходит. Значки зачем-то хотят убирать...
Условия: Радмин запущен как служба.
Задача: как только КО МНЕ кто-то прицепляется (шеф посмотреть чем я занимаюсь) запущенная до этого моя программа должна как-то среагироваь... например свернуть все окна.

Автор: Romikgy 12.9.2005, 13:10
Всетаки легче перехватывать активность порта, для таких целей

Автор: RA 12.9.2005, 16:18
Вобщем мониторь порт радмина, а это тебе поможет.

Автор: Gorets 15.9.2005, 15:53
вот написал прогу, которая следит за окном радмина...
перед запуском проги обязательно разверните окно радмин-сервера
Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    procedure Timer1Timer(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  h1,h2:HWND;
  textold:String;


implementation

{$R *.dfm}

//вызывается когда найдено главное окно
function EnumWindowsWnd(h:HWND; Form: TForm1): Bool; export;{$ifdef Win32} stdcall; {$endif}
Var
    Nm:Array[0..255] of Char;  // буфер для имени
    Cs: Array[0..255] of Char; // буфер для класса
Begin
    GetWindowText(h,Nm,255); // считываем  текст заголовка окна
    GetClassName(h,Cs,255); // считываем название класса окна
    if (nm='Current connections') AND (cs='#32770') then
    begin
      h1:=h;
    end;
    result:=True;  // продолжать искать окна…
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  EnumWindows(@EnumWindowsWnd,Longint(Self));
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var Tekst:Array[0..255] of Char;  // буфер для имени
begin
  if h1 <> 0 then
  begin
    statusbar1.Panels[0].Text:=' OK';
    h2:=FindWindowEx(h1, 0,'Static', nil);
    if h2<>0 then statusbar1.Panels[0].Text:=' OK-OK';
    GetWindowText(h2,Tekst,255);
    statusbar1.Panels[1].Text:=Tekst;
    if tekst<>textold then memo1.Lines.add(datetimetostr(Now)+'  '+Tekst);
    textold:=tekst;
  end else
  begin
    statusbar1.Panels[0].Text:=' NO';
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if timer1.Enabled then
  begin
    timer1.enabled:=false;
    BitBtn1.caption:='Следить за радмином';
    statusbar1.Panels[0].Text:='';
  end else
  begin
    timer1.enabled:=true;
    BitBtn1.caption:='Остановить слежение';
  end;
end;


end.


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