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

Вниз

MailSlot   Найти похожие ветки 

 
Profik ©   (2005-10-04 11:54) [0]

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


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


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


не ври.


 
Profik ©   (2005-10-04 14:39) [2]

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


 
Digitman ©   (2005-10-04 14:48) [3]


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


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

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


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

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


 
Profik ©   (2005-10-04 15:09) [5]

Для 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;


 
Digitman ©   (2005-10-04 15:16) [6]


> где типа


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


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


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

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


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

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


 
Profik ©   (2005-10-04 15:38) [8]

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


 
Digitman ©   (2005-10-04 15:42) [9]


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


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


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

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

http://delphimaster.net/view/2-1128090671/
http://delphimaster.net/view/2-1128090671/
http://delphimaster.net/view/2-1128090671/



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

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

Наверх





Память: 0.51 MB
Время: 0.013 c
14-1135246819
Максим Семёнов
2005-12-22 13:20
2006.01.15
Нужны программисты


3-1132002044
S@shka
2005-11-15 00:00
2006.01.15
Удаление всех хранимых процедур в БД


8-1123012064
murtix
2005-08-02 23:47
2006.01.15
Crop в GDI+


1-1134150399
OLEGNik
2005-12-09 20:46
2006.01.15
Как экспортировать procedure(): overload из .dll


2-1135275962
denisww
2005-12-22 21:26
2006.01.15
HTTPRIO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский