Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
3-1081847949
Rych
2004-04-13 13:19
2004.04.11
Как проверить присутствует-ли занчение в TDataSet ?


14-1082109682
Voland2000
2004-04-16 14:01
2004.04.11
Nokia 8110-forever


4-1079337197
Алхимик1982
2004-03-15 10:53
2004.04.11
Получить список функций


3-1079116473
Skif
2004-03-12 21:34
2004.04.11
Show tables;


1-1080294793
voland
2004-03-26 12:53
2004.04.11
Присвоение событию процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский