CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

如何屏蔽win2000信使服务的弹出信息,并且捕获信息

楼主lw549(那个孩子他爹)2003-09-02 09:55:56 在 Delphi / Windows SDK/API 提问

net   send   localhost   信息  
   
  我的目的是不允许信使服务弹出这个信息,用我们自己的程序来截获它,用自己的窗体显示它。 问题点数:100、回复次数:28Top

1 楼mrtxc(阿春)回复于 2003-09-02 10:01:30 得分 5

想想,UPTop

2 楼mrtxc(阿春)回复于 2003-09-02 10:02:33 得分 5

想想,UPTop

3 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-02 10:08:34 得分 5

这个,不知道下HOOK有没有用的呢?  
  没有试过,不过楼主可以试一试看,如果设置一下MESSAGEBOX的HOOK函数,试试  
  或是在创建窗口的时候查询一个标题为“信使服务”的窗口就转到你自己的处理过程   上去Top

4 楼lw549(那个孩子他爹)回复于 2003-09-02 10:18:45 得分 0

是也想过hook,觉得这个不是很正规的做法。  
   
  我的想法是:有没有一个dll接口能监听信使消息?应该是有的吧。Top

5 楼lxpbuaa(桂枝香在故国晚秋)回复于 2003-09-02 10:23:02 得分 5

它应该是在一个端口监听net   send   发来的消息。如果知道这个端口并知道net   send   数据包的格式,那么可以自己作一个程序实现替代监听。  
   
  ————————————————————————————————————  
  宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。  
  ————————————————————————————————————Top

6 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-09-02 10:24:56 得分 5

不让信使服务弹出信息那就关掉俄~~~~~~~~~~~~~~~~~  
  Control   Panel->Administrative   Tools->Services->Messager->Stop  
   
   
  拦截偶不会Top

7 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-02 10:27:39 得分 5

+,1801,Microsoft   Message   Que,,,    
   
  楼主可以试一试监听一下1801的端口,信息应该是从这里过的Top

8 楼zdcnow(磁效应)回复于 2003-09-02 10:45:09 得分 5

这方面的讨论已经非常多,但至今的停留在   邮槽   和   查找窗体将其关闭   两种方法。  
   
   
  以前nowcan做过深入的探讨:  
  http://vip.6to23.com/NowCan1/tech/msgs98.htm  
  http://asp.6to23.com/nowcan/tech/cb_hook_messenger.htm  
  通过建立邮槽的方法实现。  
   
  查找窗体,取其内容之后将其关闭的方法代码非常多,很容易就找到,不再细说。  
   
  wh_cbt是窗体创建的消息,大部分窗体都可以拦截,但是信史服务窗口用hook拦截wh_cbt是拦截不到的。所以hook都没办法,不信大家可以自己试试,代码找我要也行。  
   
  net   send数据包的格式非常简单,大家可以在上面的连接中看到。  
  拦截数据包的方法不现实。Top

9 楼liumengchuan()回复于 2003-09-02 10:45:48 得分 5

98的时候有个winpopup程序,如果可以的话可以使用该窗口Top

10 楼sy_315(apollo)回复于 2003-09-02 13:19:56 得分 4

net   stop   msg   //关闭消息服务  
  net   start   msg   //打开  
  关闭以后就发不近来了  
  :)  
  Top

11 楼qevan(guodong)回复于 2003-09-02 13:44:42 得分 4

发信人:   qevan   (开学就颓废了),   信区:   Programming  
  标     题:   拦截你的Net   Send   (二)zz  
  发信站:   日月光华   (2003年09月02日13:31:46   星期二),   站内信件  
   
  发信人:   zzzzzzzzzzzz   (肥龟·Synchronize),   信区:   Programming  
  标     题:   拦截你的Net   Send   (二)  
  发信站:   逸仙时空   Yat-sen   Channel   (Sun   May     4   12:58:02   2003),   站内信件  
   
  作者:ZSQ  
  Windows的消息服务沿用的是SMB/CIFS   Over   Netbios   Over   TCP/IP   的架构  
   
  我们自然就从这方面着手,主要实现两个功能,1是接收,二是发送  
   
  以下是实现的源代码,具体的原理也容易理解  
   
  //QMessngr.h  
   
  #define   WM_QMESSNGR_NOTIFY                             WM_USER+1  
   
  #define   MAX_BUFFER_LENGTH                               500  
  #define   REPLY_LENGTH                                         35  
  #define   SMB_HEADER_LENGTH                               35  
  #define   NAME_LENGTH                                                           16  
   
   
  class   CQMessngr  
  {  
  public:  
                  CQMessngr();  
                  virtual   ~CQMessngr();  
   
  public:  
   
                  //发送函数  
                  BOOL   Send(char*   sTo,char*   sMsg);  
   
                  //启动/停止消息接收线程  
                  //参数:HWND   接收消息的窗口句柄,  
                  //收到消息后会发送WM_MESSENGER_NOTIFY到该窗口  
                  int   Start(HWND   hwnd);  
                  int   Stop();  
   
                  //线程函数  
                  static   UINT   MsgMonitorProc(LPVOID   param);  
                  static   CQMessngr   *pseudoThis;   //  
                  static   HWND                       hWndNotify;  
   
  public:  
                  char   m_sLocalName[16];  
                  char   m_sRemoteName[16];  
                  char   m_sMsg[400];  
                  UCHAR   m_sBuffer[500];  
                  CWinThread*   m_pThread;  
   
  };  
   
  (待续)  
  --  
  ●       我的愿望很简单       ●  
  ┏━━━━━━━━━━┓  
  ┃ ①我的朋友快乐  ┃  
  ┃          ┃   
  ┃ ②自己快乐    ┃  
  ┗━━━━━━━━━━┛  
   
  ※   来源:.逸仙时空   Yat-sen   Channel   bbs.zsu.edu.cn.[FROM:   192.168.50.34]  
  ※   修改:.zzzzzzzzzzzz   于   May     4   13:00:01   修改本文.[FROM:   192.168.50.34]  
  --  
   
   
  ※   来源:·日月光华   bbs.fudan.edu.cn·  
  Top

12 楼qevan(guodong)回复于 2003-09-02 13:45:11 得分 4

发信人:   qevan   (开学就颓废了),   信区:   Programming  
  标     题:   拦截你的Net   Send   (三)   zz  
  发信站:   日月光华   (2003年09月02日13:32:09   星期二),   站内信件  
   
  发信人:   zzzzzzzzzzzz   (肥龟·Synchronize),   信区:   Programming  
  标     题:   拦截你的Net   Send   (三)  
  发信站:   逸仙时空   Yat-sen   Channel   (Sun   May     4   12:59:07   2003),   站内信件  
   
  作者:ZSQ  
   
  //QMessngr.cpp  
   
   
  #pragma   comment(lib,"netapi32.lib")  
  #pragma   comment(lib,"ws2_32.lib")  
   
  CQMessngr   *CQMessngr::pseudoThis=NULL;  
  HWND             CQMessngr::hWndNotify=NULL;  
   
  void   ToNcbName(char*   str1,char*   str2)  
  {  
                  char   pattern[20];  
                  sprintf(pattern,"%%%ds",NAME_LENGTH);  
                  sprintf(str2,pattern,"\3");  
                  memcpy(str2,str1,strlen(str1));  
  }  
   
  CQMessngr::CQMessngr()  
  {  
                  //成员变量初始化  
                  WSADATA   wsadata;  
                  char   name[NAME_LENGTH];  
                  WSAStartup(MAKEWORD(2,0),&wsadata);  
                  gethostname(name,NAME_LENGTH);  
                  _tcsupr(name);  
                  strcpy(m_sLocalName,name);  
                  strcpy(m_sRemoteName,"*");  
                  strcpy(m_sMsg,"");  
   
                  //NETBIOS初始化  
                  NCB   ncb;  
                  memset(   &ncb,   0,   sizeof(ncb)   );  
                  ncb.ncb_command   =   NCBRESET;  
                  int   b=Netbios(   &ncb   );  
   
                  char   ncbname[NAME_LENGTH];  
                  ToNcbName(m_sLocalName,ncbname);  
                  ncb.ncb_command   =   NCBADDNAME;  
                  memcpy((char*)ncb.ncb_name,ncbname,NAME_LENGTH);  
   
                  b=Netbios(&ncb);  
                  if   (b==NRC_DUPNAME)   {  
                                  MessageBox(NULL,"Messngr端口发现重名,初始化失败","警告",MB_O  
  K);  
                                  return;  
                  }else   if   (b!=0)   {  
                                  MessageBox(NULL,"Messngr未知错误,初始化失败","警告",MB_OK);  
                  }  
  }  
   
  CQMessngr::~CQMessngr()  
  {  
                  NCB   ncb;  
                  char   ncbname[NAME_LENGTH];  
                  memset(   &ncb,   0,   sizeof(ncb)   );  
                  ToNcbName(m_sLocalName,ncbname);  
                  ncb.ncb_command   =   NCBDELNAME;  
                  memcpy((char*)ncb.ncb_name,ncbname,NAME_LENGTH);  
                  int   b=Netbios(   &ncb   );  
  }  
   
   
   
  //发送函数  
  BOOL   CQMessngr::Send(char*   sTo,char*   sMsg)  
  {  
                  NCB   ncb;  
                  char   ncbname[NAME_LENGTH];  
                  int   bRet;  
   
                  memset(   &ncb,   0,   sizeof(ncb)   );  
                  ToNcbName(m_sLocalName,ncbname);  
                  memcpy((char*)ncb.ncb_name,ncbname,16);  
                  ToNcbName(sTo,ncbname);  
                  memcpy((char*)ncb.ncb_callname,ncbname,16);  
                  ncb.ncb_command   =   NCBCALL;  
                  bRet=Netbios(   &ncb);  
   
  //             memset(buffer,0,sizeof(buffer));  
                  memset(m_sBuffer,0,sizeof(m_sBuffer));  
                  sprintf((char*)m_sBuffer,"%c%s%c",0xff,"SMB",0xD0);  
                  unsigned   char   *pos=m_sBuffer+0x21;  
                  int   Length=7+strlen(m_sLocalName)+strlen(sTo)+strlen(sMsg);  
                  *((WORD*)pos)=Length;  
                  pos+=2;  
                  *(pos++)=4;   //TYPE  
                  strcpy((char*)pos,m_sLocalName);   //MACHINENAME  
                  pos+=strlen(m_sLocalName)+1;  
                  *(pos++)=4;   //TYPE  
                  strcpy((char*)pos,sTo);   //MACHINENAME  
                  pos+=strlen(sTo)+1;  
                  *(pos++)=1;  
                  *((WORD*)pos)=strlen(sMsg);  
                  pos+=2;  
                  memcpy(pos,sMsg,strlen(sMsg));  
                  ncb.ncb_buffer=m_sBuffer;  
                  ncb.ncb_length=Length+0x23;  
                  ncb.ncb_command   =   NCBSEND;  
                  bRet=Netbios(   &ncb);  
   
                  ncb.ncb_command   =   NCBRECV;  
                  ncb.ncb_buffer=m_sBuffer;  
                  ncb.ncb_length=MAX_BUFFER_LENGTH;  
                  bRet=Netbios(&ncb);  
   
                  ncb.ncb_command   =   NCBHANGUP;  
                  bRet=Netbios(&ncb);  
   
                  return   TRUE;  
  }  
   
  //初始化NETBIOS功能,启动消息接收线程  
  //参数:HWND   接收消息的窗口句柄,  
  //收到消息后会发送WM_MESSENGER_NOTIFY到该窗口  
  int   CQMessngr::Start(HWND   hwnd)  
  {  
                  pseudoThis=this;  
                  hWndNotify=hwnd;  
                  m_pThread=AfxBeginThread(MsgMonitorProc,NULL);  
                  return   TRUE;  
   
  }  
   
  int   CQMessngr::Stop()  
  {  
                  TerminateThread(m_pThread->m_hThread,0);  
                  return   0;  
  }  
   
   
                  //线程函数  
  UINT   CQMessngr::MsgMonitorProc(LPVOID   param)  
  {  
                  NCB   ncb;  
                  char   ncbname[NAME_LENGTH];  
                  int   bRet;  
   
                  while   (TRUE)  
                  {  
                                  ////////////LISTEN   ON   NAME   STUB//////////////  
                                  memset(   &ncb,   0,   sizeof(ncb)  
  );  
                                  ToNcbName(pseudoThis->m_sLocalName,ncbname);  
   
  memcpy((char*)ncb.ncb_name,ncbname,NAME_LENGTH);  
                                  strcpy((char*)ncb.ncb_callname,"*");  
                                  ncb.ncb_command   =   NCBLISTEN;  
                                  bRet=Netbios(   &ncb);  
   
                                  //RECEIVE   THE   NETBIOS   BLOCK   WHICH   CONTAINING   SMB   DATA//  
                                  ncb.ncb_command   =   NCBRECV;  
                                  ncb.ncb_buffer=pseudoThis->m_sBuffer;  
                                  ncb.ncb_length=MAX_BUFFER_LENGTH;  
                                  bRet=Netbios(&ncb);  
   
                                  ////////////SEND   NETBIOS   ACK/////////////////  
                                  pseudoThis->m_sBuffer[33]=0;  
                                  ncb.ncb_length=REPLY_LENGTH;  
                                  ncb.ncb_command   =   NCBSEND;  
                                  bRet=Netbios(&ncb);  
   
                                  ///////////PARSE   THE   SMB   PACKET//////////////  
                                  //SMB   Structure  
                                  //TYPE                             1   byte   04   Name  
                                  //REMOTEMACHINENAME   string   terminate   with   '\0'  
                                  //TYPE                             1   byte   04   Name  
                                  //LOCALMACHINENAME     string   terminate   with   '\0'  
                                  //TYPE                             1   byte   01   Message  
                                  //LENGTH                         2   byte  
                                  //DATA                             string   with   the   Length   indicate   in   LENGTH  
   
                                  unsigned   char*   pos=pseudoThis->m_sBuffer+SMB_HEADER_LENGTH+1;  
                                  strcpy(pseudoThis->m_sRemoteName,(char*)pos);  
                                  pos+=strlen((char*)pos)+2;  
                                  pos+=strlen((char*)pos)+2;  
                                  WORD   MsgLength=*((WORD*)pos);  
                                  pos+=2;  
                                  memset(pseudoThis->m_sMsg,0,sizeof(pseudoThis->m_sMsg));  
                                  memcpy(pseudoThis->m_sMsg,(char*)pos,MsgLength);  
                                  *(pseudoThis->m_sMsg+MsgLength)=0;  
   
                                  ////////////POST   A   MESSAGE   TO   TH   E   NOTIFY   WINDOW//////////  
                                  PostMessage(hWndNotify,WM_QMESSNGR_NOTIFY,NULL,NULL);  
   
                  }  
                  return   0;  
  }  
   
  (待续)  
  --  
  ●       我的愿望很简单       ●  
  ┏━━━━━━━━━━┓  
  ┃ ①我的朋友快乐  ┃  
  ┃          ┃   
  ┃ ②自己快乐    ┃  
  ┗━━━━━━━━━━┛  
   
  ※   来源:.逸仙时空   Yat-sen   Channel   bbs.zsu.edu.cn.[FROM:   192.168.50.34]  
  ※   修改:.zzzzzzzzzzzz   于   May     4   13:02:55   修改本文.[FROM:   192.168.50.34]  
   
  --  
   
   
  ※   来源:·日月光华   bbs.fudan.edu.cn·  
  Top

13 楼qevan(guodong)回复于 2003-09-02 13:46:15 得分 4

发信人:   qevan   (开学就颓废了),   信区:   Programming  
  标     题:   拦截你的Net   Send(一)   zz  
  发信站:   日月光华   (2003年09月02日13:30:11   星期二),   站内信件  
   
  发信人:   zzzzzzzzzzzz   (肥龟·Synchronize),   信区:   Programming  
  标     题:   拦截你的Net   Send(一)  
  发信站:   逸仙时空   Yat-sen   Channel   (Sun   May     4   12:51:26   2003),   站内信件  
   
  作者:ZSQ  
   
  大家应该会经常收到一些骚扰的Net   Send消息,有没有想过怎么实现消息过滤呢?  
   
  有没有想过为net   send   定制一个pp一点的界面呢,或者利用Net   Send   做一个聊天室  
  呢?  
   
  归结到最后,我们发现问题的关键在于,如何替换掉Windows   Net   Send   服务  
   
  如果大家注意一下nbtstat   的输出,就会发现  
   
                  NetBIOS   Remote   Machine   Name   Table  
   
          Name                               Type                   Status  
    --------------------------------------------  
    ZSQ                         <00>     UNIQUE             Registered  
    CHINA                     <00>     GROUP               Registered  
    ZSQ                         <20>     UNIQUE             Registered  
    ZSQ                         <03>     UNIQUE             Registered  
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个就是Net   Send   用的Stub  
    CHINA                     <1E>     GROUP               Registered  
    ZSQ                         <01>     UNIQUE             Registered  
   
  类似于Socket中端口,   所有的Net   Send   消息,都是通过这个位置传到你的计算机的  
   
  所以我们的第一个任务就是要先把这个端口关闭,然后用我们自己的服务来替换掉它  
   
  命令行方式的net   stop   msg   可以把整个消息服务关闭  
   
  只要我们写的程序沿用消息服务的协议,就可以完全地替换掉它的功能了  
   
  (待续)  
   
  --  
   
   
  ※   来源:·日月光华   bbs.fudan.edu.cn·  
  Top

14 楼lw549(那个孩子他爹)回复于 2003-09-02 13:50:41 得分 0

go   onTop

15 楼lw549(那个孩子他爹)回复于 2003-09-02 16:14:36 得分 0

正在等待另一个答案  
   
  http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20726219.html  
   
  那些代码都是c++的,我没有bcbTop

16 楼bphoenix(吸血凤凰)回复于 2003-09-02 17:34:49 得分 4

同意qevan(guodong)的做法,我就是利用这种方法自己写了套WEB   SERVER出来的Top

17 楼lw549(那个孩子他爹)回复于 2003-09-03 09:14:48 得分 0

朋友们有没有Delphi的代码,谢了。Top

18 楼CloneCenter(复制中心)回复于 2003-09-03 09:39:47 得分 4

不知道怎么做,想法和其他几位也一样,帮你顶吧!Top

19 楼romandion(罗蒙迪翁)回复于 2003-09-06 01:16:40 得分 4

想请教qevan   一个问题  
   
  在windows   2000   下,使用你的这个接收程序,可以接收到别人机器发来的net   send   消息吗  
   
  如果也要是用你的send   方法,似乎没有什么用!Top

20 楼IORILI(眼镜)回复于 2003-09-09 15:30:22 得分 4

俺也不会,帮你upTop

21 楼xiaofei7569(夏雁)回复于 2003-09-12 11:59:32 得分 4

好方法。Top

22 楼nyf1220(我是党员----不过听说最近风声紧,打算换名字)回复于 2003-09-12 12:07:30 得分 4

看不懂Top

23 楼hare007(hare)回复于 2003-09-13 14:45:06 得分 4

markTop

24 楼bluenightsky()回复于 2003-09-15 13:38:58 得分 4

markTop

25 楼dawnming(笨小孩)回复于 2003-09-15 14:25:04 得分 4

markTop

26 楼asbeforelong(martin)回复于 2003-09-16 00:40:35 得分 4

不让信使服务弹出信息那就关掉俄~~~~~~~~~~~~~~~~~  
  Control   Panel->Administrative   Tools->Services->Messager->Stop  
  如果实在没有需要信使服务,感觉这个办法比较好用.  
  Top

27 楼yanhuizen(星河谷)回复于 2003-09-18 01:54:14 得分 4

关注!Top

28 楼lw549(那个孩子他爹)回复于 2003-09-18 16:15:16 得分 0

等了n久,算了,散分。Top

29 楼lw549(那个孩子他爹)回复于 2003-09-20 17:38:46 得分 0

改了昵称,测试一下,呵呵。Top

相关问题

  • 怎样屏蔽掉信使服务?
  • 弹出窗口屏蔽问题
  • 如何屏蔽系统弹出菜单
  • 如何屏蔽弹出广告?
  • 求助!上网时总弹出个“信使服务”
  • 关于捕获光盘插入、弹出消息的问题
  • 如何屏蔽工具条的弹出窗体?
  • 如何才能屏蔽掉Word的右键弹出菜单?
  • 屏蔽阻挡弹出窗口的功能?
  • 关于弹出窗口被屏蔽的问题???

关键词

  • 信使
  • 端口
  • 消息
  • 信息
  • 代码
  • 窗体
  • 拦截
  • 弹出
  • cqmessngr
  • qevan

得分解答快速导航

  • 帖主:lw549
  • mrtxc
  • mrtxc
  • Drate
  • lxpbuaa
  • Eastunfail
  • Drate
  • zdcnow
  • liumengchuan
  • sy_315
  • qevan
  • qevan
  • qevan
  • bphoenix
  • CloneCenter
  • romandion
  • IORILI
  • xiaofei7569
  • nyf1220
  • hare007
  • bluenightsky
  • dawnming
  • asbeforelong
  • yanhuizen

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo