Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MailSlot


Profik ©   (2005-10-04 11:54:00) 

Люди, погибаю вот уже вторую неделю, ПОМОГИТЕ!!! Как моему приложению отловить сообщение с WinMessengera? Ссылок не давайте - у меня все сайты заблокированы кромя этого. Пожалуйста - киньте кусок кода, кто знает. Спасибо большое!


Piter   (2005-10-05 18:19:00) [1]

Может хватит плодить темы?

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1128090671&n=18
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1128412479&n=4
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1128509833&n=4


Digitman   (2005-10-04 15:42:00) [2]


> Profik ©   (04.10.05 15:34) [7]


если тебе перекрыт "кислород" от msdn.microsoft.com, то
- либо вешайся,
- либо пусть вешается твой админ,
- либо вы оба,
- либо админ открывает тебе как программеру доступ к этому ресурсу, и ты в  6 екунд находишь там ответы на свой вопрос


Profik   (2005-10-04 15:38:00) [3]

http://torry.net/vcl/lan/comms/almailsl.zip
http://torry.net/vcl/lan/comms/cbmailslot.zip- это типа исходники по работе с майлслотом , я напряг админа их закачать (6кб и 17 кб) - но они не качаються


Profik   (2005-10-04 15:34:00) [4]

Для Digitmana -
Да причем тут сайты до моей проги - я говорю что не могу найти нужную мне инфу из-за блокировки полезных сайтов. А ссылку ща кину


Digitman   (2005-10-04 15:16:00) [5]


> где типа


вот и кидай сюда эту ссылку...
растрясем ее до костей ..


> кинуть кусок кода


тот "кусок кода", что ты "кинул", в теории вроде бы работоспособен, но  НИКАКОГО отношения к каим-то там "сайтам" не имеет - разве это не очевидно ?

ГДЕ в этом "куске" какие-то там "сайты", к которым тебя якобы кто-то там не пускает ?!


Profik   (2005-10-04 15:09:00) [6]

Для WAL -

// устанавливаем глобальные переменные:
var
  MailslotHandle:Word;
  MSlotName:String;
  ComputerName:String;

// функция отпpaвки сообщения:

function SendMessage(ToComputer, Msg:string): boolean;
var
  hToSlot:THandle;
  BytesWritten:DWord;
  FullSlot,
  Data:String;
  SendMsg:string;
begin
  Result:=false;
  SendMsg:=copy(Msg,1,length(Msg));
  CharToOEM(PChar(SendMsg), PChar(SendMsg)); // необходимо чтобы поняли по pyсски.
  Data:=ComputerName+#0+ToComputer+#0+SendMsg; // собирам сообщение для отправки

  FullSlot:='\\'+ToComputer+'\mailslot\'+MSlotName; // собираем имя mailslot'а
  hToSlot:=CreateFile(PChar(FullSlot), // создаём файл, для записи данных  
    GENERIC_WRITE,
    FILE_SHARE_READ,
    NIL,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    0);

  if hToSlot<>INVALID_HANDLE_VALUE then
  begin
    BytesWritten:=0;
    If (NOT
      WriteFile(hToSlot,
      Pointer(Data)^,
      Length(Data),
      BytesWritten,
      NIL)) OR
      (BytesWritten <> Length(Data)) then Result:=false Else Result:=true;
      // если не удалось записать данные или размер записанных данных
      // и данных подготовленых для отправки не совпадает то вернуть ложное значение.
  end; // hToSlot<>INVALID_HANDLE_VALUE
end;

// процедура чтения:

procedure ReadMessage(NextMsgSize:DWord);
var
  Newline,Sender,Recip,Msg:String;
  MsgSize:DWord;
begin
  SetLength(NewLine,NextMsgSize);
  ReadFile(MailslotHandle, PChar(NewLine)^, NextMsgSize, MsgSize, nil);
  Sender:=lowercase(Copy(newline,1,pos(chr(0),newline)-1));
  Sender[1]:=upcase(sender[1]);
  Delete(newline,1,Pos(chr(0),newline));
  // определение получателя
  Recip:=lowercase(Copy(newline,1,pos(chr(0),newline)-1));
  Recip[1]:=upcase(Recip[1]);
  Delete(newline,1,Pos(chr(0),newline));
  // всё что осталось - сообщение
  Msg:=TrimLeft(TrimRight(newline));
  OEMToChar(PChar(Msg),PChar(Msg)); // чтобы понять pyсские символы.
  Form1.Memo1.Lines.Add(Sender+' сообщил для '+Recip+' вот что:'+Msg);
end;

// в тaймеp с интеpвaлом в 200мс (можно меньше, но зaчем?) встaвляем:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  NextMsgSize,
  MsgSize,
  MsgCount:DWord;
  NewLine:String;
  DummyBuffer:Char;
begin
  NextMsgSize:=0;
  MsgSize:=0;
  GetMailSlotInfo(MailslotHandle, NIL, NextMsgSize, @MsgCount, NIL);
  If NextMsgSize<>MAILSLOT_NO_MESSAGE then
  begin
    if NextMsgSize>5 then ReadMessage(NextMsgSize)
    // по формату сообщение не может быть меньше 5 символов, даже от компьютера,
    // чьё имя состоит из одной буквы.
    Else ReadFile(MailslotHandle, DummyBuffer, NextMsgSize, MsgSize, nil);
    // считываем в ненужный буфер чтобы сообщение не лежало в слоте.
  end;
end;

// функция получения имени компьютера

function GetComputerName:String;
var
  N: Cardinal;
  Buf: array [0..MAX_COMPUTERNAME_LENGTH + 1] of AnsiChar;
begin
  N:=SizeOf(Buf)-1;
  Windows.GetComputerName(Buf, N);
  Result:=PChar(@Buf[0]);
end;

// нa создание главной формы:

procedure TForm1.FormCreate(Sender: TObject);
var
  MSlotCreate:String;
  Error:Dword;
begin
  ComputerName:=Uppercase(GetComputerName);
  MSlotName:='messngr'; // messngr - майлслот службы сообщений.
  MSlotCreate:='\\.\mailslot\'+MSlotName;
  MailslotHandle:=0;
  Error:=0;
  SetLastError(0);
  MailslotHandle:=CreateMailSlot(PChar(MSlotCreate), 0, MAILSLOT_WAIT_FOREVER, nil);
  Error:=GetLastError();
  if (Error<>0) or (MailslotHandle=0) or (MailslotHandle=INVALID_HANDLE_VALUE) then
  begin
    ShowMessage('Пожалуйста перед запуском закройте все программы - аналоги winpopup'+#13#10+
    'или остановите службу сообщений.');
    Application.Terminate;
  end;
end;


Profik   (2005-10-04 15:04:00) [7]

Я не понимаю твоих наездов. А про блокированые сайты я сказал, потому что вчера мне вместо совета дали ссылку на один сайт, где типа есть похожая инфа - но я то не могу её посмотреть-сайт недоступен!!! Вот потому я и прошу, по возможности кинуть кусок кода, если кто знает.


Digitman   (2005-10-04 14:48:00) [8]


> У нас на работе открыты сайты только те, где в адресе есть
> слово Delphi, остальные блокированы


да на здоровье !

Messenger не имеет никакого отношения ни к каким "сайтам".


Profik   (2005-10-04 14:39:00) [9]

Специально для Digitmana  -  У нас на работе открыты сайты только те, где в адресе есть слово Delphi, остальные блокированы. Плюс не в одном из них поисковики не работают. И вообще, лучше бы помог советом, а не наежжал!!!


Digitman   (2005-10-04 13:50:00) [10]


> все сайты заблокированы кромя этого


не ври.


Наверх

Титульная страница Поиск, карта сайта Написать письмо