Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

отловить нетсенд   Найти похожие ветки 

 
barby   (2004-01-27 09:49) [0]

ДОбрый день.
Как послать нет сенд - все понятно.
А как поймать нет сенд, посланный на мою машину?
Кто может подсказать?


 
имя   (2004-01-27 10:17) [1]

Удалено модератором


 
YuRock ©   (2004-01-27 10:32) [2]

Можно как и любое окно. Тем более, что это обычный MessageBox (диалог - #32770)


 
YuRock ©   (2004-01-27 10:32) [3]

Можно как и любое окно. Тем более, что это обычный MessageBox (диалог - #32770)


 
имя   (2004-01-27 11:11) [4]

Удалено модератором


 
имя   (2004-01-27 11:16) [5]

Удалено модератором


 
YuRock ©   (2004-01-27 11:27) [6]

Никакое. Надо это окно постоянно искать. И если найдено - закрывать!

(это только один из вариантов)


 
имя   (2004-01-27 11:37) [7]

Удалено модератором


 
YuRock ©   (2004-01-27 11:43) [8]

1. Можно и по таймеру

2. Найти в найденном окне окно класса "Static"


 
Rouse_ ©   (2004-01-27 12:44) [9]

Отключаешь службу сообщений и запускаешь эту прогу:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   Memo1: TMemo;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   MailSlot: THandle;
   ErrStr: array [0..MAX_PATH] of Char;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 CurrentSize, Size, Count: DWORD;
 Msg: String;
 Err: LongBool;
 I: Integer;
 From, sTo: String;
begin
 Count := 0;
 Err := GetMailSlotInfo(MailSlot, nil, Size, @Count, nil);
 if not Err then
 begin
   FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,

                   nil,
                   GetLastError,
                   0,
                   @ErrStr[0],
                   MAX_PATH,
                   nil);
   Memo1.Lines.Add("Can not GetMailSlotInfo: " + String(ErrStr));
   Exit;
 end;
 if Count > 0 then
 begin
   SetLength(Msg, Size);
   ReadFile(MailSlot, Msg[1], Size, CurrentSize, nil);
   I := 1;
   while (Msg[I] <> #0) do Inc(I);
   From := Copy(Msg, 1, I - 1);
   Delete(Msg, 1, I);
   I := 1;
   while (Msg[I] <> #0) do Inc(I);
   sTo := Copy(Msg, 1, I - 1);
   Delete(Msg, 1, I);
   OemToChar(PChar(From), PChar(From));
   OemToChar(PChar(sTo), PChar(sTo));
   OemToChar(PChar(Msg), PChar(Msg));
   Memo1.Lines.Add("&Iuml;&icirc;&euml;&oacute;&divide;&aring;&iacute;&icirc; &ntilde;&icirc;&icirc;&aacute;&ugrave;&aring;&iacute;&egrave;&aring; &icirc;&ograve;: " + From +
   " &auml;&euml;&yuml; " + sTo + #13#10 + Msg);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MailSlot := CreateMailslot("\\.\mailslot\messngr", 0, MAILSLOT_WAIT_FOREVER, nil);
 if MailSlot = INVALID_HANDLE_VALUE then
 begin
   FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,
                   nil,
                   GetLastError,
                   0,
                   @ErrStr[0],
                   MAX_PATH,
                   nil);
   Memo1.Lines.Add("Can not create mailslot: " + String(ErrStr));
   Exit;
 end;
end;

end.


Только нужно учесть что при отключенной службе сообщений как net send так и NetMessageBufferSend перестанут работать, поэтому отправлять придется через CreateFile с флагом FILE_SHARE_READ на адрес "\\имя компьютера\mailslot\messngr\"


 
barby   (2004-01-27 14:04) [10]

Rouse_ ©  
Спасибо, но лучше нет сенд не отключать.
2 YuRock ©  
А поподробнее про функцию нахождения окна класса "Static" можно?


 
YuRock ©   (2004-01-27 14:41) [11]

> barby   (27.01.04 14:04) [10]


uses Windows, Dialogs;

var
 hMessage, hStatic: HWND;
 pBuf: Array[0..255] of Char;

begin
 hMessage := FindWindow("#32770", "Служба сообщений ");

 if hMessage <> 0 then begin
   hStatic := FindWindowEx(hMessage, 0, "Static", nil);
   if hStatic <> 0 then begin
     GetWindowText(hStatic, @pBuf, 256);
     ShowMessage(pBuf);
     Exit;
   end;
 end;

 ShowMessage("Ничего не найдено");
end.


Подробнее некуда


 
barby   (2004-01-27 16:15) [12]

спасибо


 
barby   (2004-01-28 08:56) [13]

Еще один нюанс: как определить момент появление окна (нет сенд), какое  сообшение ловить?
По таймеру не очень удобно.


 
YuRock ©   (2004-01-28 10:09) [14]

1. Можно на глаз;
2. Можно через поток;
3. Можно через хук;
4. Можно еще как-нибудь...


 
YuRock ©   (2004-01-28 10:09) [15]

1. Можно на глаз;
2. Можно через поток;
3. Можно через хук;
4. Можно еще как-нибудь...


 
maxx0   (2004-01-28 10:41) [16]

Пуск-Программы-Администрирование-Просмотр событий
Раздел "журнал системы"
Там регистрируются так же все пришедшие нет сендом сообщения.

Иструментарий для обращения к логам смотри от
OpenEventLog
ReadEventLog


 
barby   (2004-01-28 15:06) [17]

2 maxx0
Это тоже не быстрый способ.
Нужно отловить сообщение Windows, возникающее при создании нового окна и если его класс и имя соответствует окну нетсенда, то прочитать его и закрыть.
Вот как это сделать, какой функцией, об этом я спрашиваю.


 
barby   (2004-01-28 16:29) [18]

Какое событие происходит при появлении нового окна?


 
YuRock ©   (2004-01-28 16:32) [19]

> Какое событие происходит при появлении нового окна?

Ему приходит сообщение WM_CREATE (или WM_INITDIALOG для диалогов)


 
YuRock ©   (2004-01-28 16:32) [20]

... В смысле, в его оконную процедуру приходит. А что?


 
real_dimedrol   (2004-01-30 16:30) [21]

По-моему net send настолько неудобная штука, что лучше действительно написать своего клиента для отправки-получения сообщений да и не мучатся. Тем более что делается это достаточно просто.


 
GrayFace ©   (2004-01-31 14:04) [22]

real_dimedrol прав. Для этого есть компонеты. А можно хук поставить.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.09 c
1-1082361797
TransparentGhost
2004-04-19 12:03
2004.04.11
Определение позиции тхт курсора в Memo


11-1065951758
Revolter
2003-10-12 13:42
2004.04.11
прозрачность


14-1079607716
Cobalt
2004-03-18 14:01
2004.04.11
Лечение в негосударственных мед. учреждениях


1-1082836866
Sanek_metaller
2004-04-25 00:01
2004.04.11
Особая форма


14-1079082188
PaRL
2004-03-12 12:03
2004.04.11
Djvu