送分啦!请问怎么拦截到信使服务内的文字?(300分)

  • 主题发起人 主题发起人 TEdit
  • 开始时间 开始时间
T

TEdit

Unregistered / Unconfirmed
GUEST, unregistred user!
大家在2000和xp里都用过net send这个命令吧,别人一发送,我就弹出一个信使服务的对话框,能不能拦截这个对话框,把文字取到我程序的memo里,而不弹出信使服务对话框呢?
谁用过LanTalk?就像这个软件一样。
 
可以的。
利用timer,使用GetMailSlotInfo进行判断,如果发现有数据,就使用ReadFile进行读取。
 
yzhshi老大,好象对邮件槽很有研究呀,[:D]
不知道用udp能不能收到邮件槽法过来的数据
 
Hudog的葵花宝典里面就有一篇介绍的文章,查询 GetMailSlotInfo 就可以发现。
 
没有仔细研究,就是自己那天弄了一下,发现可以发送和接收了,当然是使用API来实现的。
不过要使用udp接收理论上说能,但是如何实现,还没有想好。[:D]
 
[:D]我拦截过邮件槽的数据,好象是从137过来的UDP包
 
以的。
利用timer,使用GetMailSlotInfo进行判断,如果发现有数据,就使用ReadFile进行读取。

利用timer时太占用资源或者有遗漏吧,
我想不如用一个挂钩监控将要产生的窗体的名称,
如果是"信使服务"就不让它产生,然后用readfile?
 
如果是Windows 98呢?98如果不登录到NT/2000域里面是不会弹出窗体的,除非你运行类似winpopup之类的东西。
 
或者你做一个线程,用组塞方式ReadFile什么的,也行,不过用Timer也不错,应该不占
什么资源。
 
很多东西简单的并不一定是最好的,但是至少是有效的。
为了一个简单的接收MailSlot的东西,做线程等是没有必要的。

但是如果使用udp去发送、接收倒是一个不错的思路,因为用这个可以学到更多的东西。
 
yzhshi兄,我在深度历险上找到一个TMailSlot控件,它用CreateFile创建了一个messngr虚拟文件(先得关闭messenger服务)。我试验在本机可以收到,但用同样的方法发不到别的机器上,也收不到?Windows的messenger服务用的MainSlot名是什么呀?Server应该是messngr吧,client用的是什么呢?Server收到消息是不是要通过Client向对方机器写一个什么消息,用以反馈说收到了?
 
Client也是使用这个的messngr
Server不给任何反馈的。
发送代码如下可以实现。

procedure SendNetMessage(YourName, ComputerName,
MessageStr: String);
Var
Rc: LongBool;
MsHandle: Longint;
MsgText: String;
BytesWritten: Cardinal;
MailSlotName: String;
begin
MailSlotName := '//' + ComputerName + '/mailslot/messngr';
MsgText := YourName + Chr(0) + ComputerName + Chr(0) + MessageStr + Chr(0);
MsHandle := CreateFile(PChar(MailSlotName), GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, $FFFFFFFF);
if MsHandle = INVALID_HANDLE_VALUE then
RaiseLastWin32Error;

RC := WriteFile(MsHandle, Pointer(MsgText)^, Length(MsgText), BytesWritten, 0);

if not Rc then
RaiseLastWin32Error;

Rc := CloseHandle(MsHandle);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
SendNetMessage('yang', 'yang', 'Hello');
end;
 
这样还是不行啊,我还是收不到别人用net send发过来的消息
 
可以.拦截就行.
 
可以的,我写的这个里面附带了源码,你可以下载试验一下。
如果有问题,可以留言或者给我发email。我的email个人说明中有。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=2657
 
yzhshi兄,你写的文章我已拜读过了,真是受益匪浅那,我后来下载了例子运行,例子中发送都很正常,可以发送到本地和局域网内的机器,但接收时有一些问题,停掉messenger服务后,通过程序发送时可以在程序中收到,但用net send发送(无论从本机还是其他机器)时就会出现“发送消息的时候出错,网络上找不到此消息的别名”。不知为甚没啊?
 
后退
顶部