Delphi相談室その8

このエントリーをはてなブックマークに追加
400勝手にMailSlot講座
メールスロットは Win95〜NT迄使え、LAN内のほかのパソコンともやりとり出来ます。

まずは、標準のメールスロットに送信をしてみましょう
フォームにMemoとボタンを貼り付けてボタンイベントに

procedure TForm1.Button1Click(Sender: TObject);
var hfile:THandle;
var msg:string;
var wSize:DWORD;
begin
hfile:=CreateFile('\\.\mailslot\messngr', GENERIC_WRITE,
   FILE_SHARE_READ,
   nil,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,0);

msg:='俺'#0'お前'#0+Memo1.Text;
WriteFile(hfile,PChar(msg)^,length(msg),wSize,nil);
try finally CloseHandle(hfile);end;
end;

どのパソコンにメッセージを送るかは CreateFileの第一引数で指定します。
詳細は 
 http://www.google.co.jp/search?q=mailslot&lr=lang_ja
messngrは w2000なら普通は常にサービスとして動いています。 W9xではWinpopupです

メッセージは 誰から誰へ の欄がありその区切りは #0 です
401勝手にMailSlot講座:02/12/14 09:30
受信も簡単です 別のアプリを作成し、メモとタイマを貼り付けます。

1、ローカルにハンドル型変数を定義する
 var hMailSlot:THANDLE;

2、フォームのOnCreateForm イベントか 初期化節で
 hMailSlot:= CreateMailslot(
   '\\.\mailslot\2CH\test'
    ,100 // 最大メッセージサイズ
    ,0 // 読み取りタイムアウトの間隔
    ,nil);

3、タイマーイベントで
procedure TForm1.Timer1Timer(Sender: TObject);
var rSize:DWORD;
var buf:string;
begin
 setlength(buf,1000);
 if ReadFile(hMailSlot,PChar(buf)^,Length(buf),rSize,nil) then begin
   SetLength(Buf,rSize);
   if buf<>'' then Memo1.Lines.Add(buf);
 end;
end;

送信側アプリで '\\*\mailslot\2CH\test' とすればOK