![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять NET SEND [D7, Win2k]
AlexeyITN © (2004-03-10 18:25:00)Изужажлась эта тема на всех форумах. Вся ясно и понятно!
Не понятно одно как реализовать перехват winpopup, кажется, окна...то бишь, если приходит NET SEND, то его самому показывать\не показывать....
Слышал, мол, какую-то почтовую службу у Винды отключать...
но КАК? Помогите, пожайлуста...с примерчиком желательно :)
Заранее благодарен!
Rouse_ (2004-04-02 21:49:00) [21]Видимо что-то не так сделал...
MetalFan (2004-04-02 17:56:00) [22]не работает((( сообщения не ловит(((
а надо!
Rouse_ (2004-03-11 11:29:00) [23]отключить службу сообщений
uses ..., WinSvc;
procedure TForm1.Button1Click(Sender: TObject);
var
hSCM, hSrv: THandle;
SS:SERVICE_STATUS;
begin
hSCM:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
hSrv:=OpenService(hSCM,'Messenger',SERVICE_ALL_ACCESS);
ControlService(hSrv,SERVICE_CONTROL_STOP,SS);
CloseServiceHandle(hSrv);
CloseServiceHandle(hSCM);
end;
Потом запустить данный код:
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.
когда уже данная возможность не нужна - запустить службу сообщений
procedure TForm1.Button2Click(Sender: TObject);
var
hSCM, hSrv: THandle;
SS:SERVICE_STATUS;
Par: PChar;
begin
Par := nil;
hSCM:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
hSrv:=OpenService(hSCM,'Messenger',SERVICE_ALL_ACCESS);
StartService(hSrv, 0, Par);
CloseServiceHandle(hSrv);
CloseServiceHandle(hSCM);
end;