Форум: "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("Ïîëó÷åíî ñîîáùåíèå îò: " + From +
" äëÿ " + 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.039 c