Visual C++打造Windows信使服务程序

2016-02-19 13:00 37 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的Visual C++打造Windows信使服务程序,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

  信使服务是Windows 2000/XP下面的一种通信服务,通过它我们可以在网上象QQ一样进行实时的交流,但和QQ不同的是信使服务不需要拥有一个号码,它只要知道对方的IP地址--如果在局域网中,只要知道对方的计算机名就可以了。我们可以利用"net send"在命令行下面发送消息,也可以通过"控制面板-管理工具-计算机管理"中的"操作"菜单里面的"所有任务-发送控制台消息…"来发送。接收方的计算机要求必须是Win2000/XP,因为 Win9x本身是不提供信服服务的,除非你手动启动了WinPopup.。程序编译运行后,在Windows2000下启动控制台,输入:netsend 192.168.0.10 127.0.0.1 "我的信使程序!"运行以上命令后,在Windows桌面上将弹出一个对话框,其上标有"我的信使程序!"字符和相关IP信息。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  一、实现方法

  信使服务为大家在网络上提供了简便、快捷的聊天方式,所以网上也有一些改进了的信使服务发送程序,使信息的发送可以按照自己的意愿来进行而不受微软提供的"net send"所限制。如果你经常上网,也许会收到通过信使服务发来的广告或者其他莫名其妙的信息,而在"信使服务"窗口中所显示出来的发送方的计算机名或者IP地址和你自己的竟然一样。如果你遇到过这种情况,那么你想不想知道这种改进了的信使服务发送程序是怎么实现的呢?

  本实例将要带你去剖析一下Windows的信使服务,我们将从一个程序员的角度来看看这个信使服务发送程序是如何实现的。其实实现信使服务的整个过程很简单,我们只需要调用一个API函数:
NET_API_STATUS NetMessageBufferSend(
LPWSTR servername,
LPWSTR msgname,
LPWSTR fromname,
LPBYTE buf,
DWORD buflen
);

  其中该函数的参数说明如下:
  servername:计算机名,该函数将在指定的这个计算机上面执行。如果为NULL,则表示为本地计算机,通常我们都将其设置为NULL。
  msgname:目标计算机的名字或者IP地址。
  fromname:源计算机的名字或者IP地址。
  buf:指向一个信息缓冲区的指针,在这里你可以填上你想发送的信息。要注意的是,这个参数用的是Unicode编码。
  buflen:上述信息缓冲区中的字节数。
  现在函数已经介绍完了,通过这个函数我们可以发现如果想实现匿名的信使服务实在是太简单--只需要在fromname中填上一个假冒的计算机名或者IP地址就行了。下面给出一个实际例子,在这个程序中,我们从命令行参数接受目标计算机和源计算机名字(IP地址),同时我们还可以设定信息发送的次数。
  二、编程步骤
  1、启动Visual C++6.0,新建项目netsend,选择控制台模式;
  2、在项目中添加新文件netsend.c;
  3、添加代码,编译运行程序。
  三、程序代码
////////////////////////////////////////////////////
#define _UNICODE
#define UNICODE
#include stdio.h
#include stdlib.h
#include string.h
#include wchar.h
#include windows.h
#include locale.h
#include lm.h
#pragma comment(lib,"netapi32.lib")
int wmain(int argc, wchar_t *argv[])
{
  int count;
  wchar_t *wdest, *wfrom, *buffer,*wtarget;
  DWORD dwReturn;
  if((argc 4) || (argc 5))
  {
   printf("Usge: %S DestIP SourIP Message [Count]",argv[0]);
   printf("Count: Count means number of times to send message,default is 1.");
   return 0;
  }
  wdest = argv[1]; //目标计算机
  wfrom = argv[2]; //源计算机
  buffer = argv[3]; //发送的信息
  count = _wtoi(argv[4]); //发送次数,缺省为1次
  if(count ==0)
   count = 1;
   printf("count = %d",count);
  dwReturn = NetMessageBufferSend(NULL, wdest, wfrom,
     (LPBYTE)buffer, 2*lstrlen(buffer)); //因为buffer是Unicode编码,所以需要乘以2
  if(dwReturn == NERR_Success)
  {
   printf("Send OK!");
   while(count--1)
   {
    NetMessageBufferSend(NULL, wtarget, wfrom, (LPBYTE)buffe,2*lstrlen(buffer));
   }
   return 0;
  }
  if(dwReturn == NERR_NameNotFound)
  {
   printf("The user name could not be found.");
   return 0;
  }
  if(dwReturn == NERR_NetworkError)
  {
   printf("A general failure occurred in the network hardware.");
   return 0;
  }
  if(dwReturn == ERROR_NOT_SUPPORTED)
  {
   printf("This network request is not supported.");
   return 0;
  }
  if(dwReturn == ERROR_INVALID_PARAMETER)
  {
   printf("The specified parameter is invalid.");
   return 0;
  }
  if(dwReturn == ERROR_ACCESS_DENIED)
  {
   printf("The user does not have access to the requested information.");
   return 0;
  }
  else
   printf("Unknown error!");
   return 0;
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  四、小结

  本实例开发一个Windows信使服务程序,以帮助读者深入了解Windows信使服务实现的内幕。

来源:http://www.tulaoshi.com/n/20160219/1602742.html

延伸阅读
1. 如何获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle();  2. 如何通过代码获得应用程序主窗口的指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。 AfxG...
标签: 办公软件
    使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并...
学习C++与.net不同的是,一定要搞清楚Windows程序内部运行原理,因为他所涉及大多数是操作系统的调用,而.net毕竟是在.netFrameWork上唱戏。        那Windows应用程序,操作系统,计算机硬件之间的相互关系究竟什么了,下面的图就给予很好的解释。       向下箭头①是 应用程序运行判断处理的结果,...
“N次失败,1次成功,还学的不怎么样……你也太笨了吧!”假如您有这样的评价,那么祝贺您,您已经了解了我这人的99.9%。N这个数字具体是多少连我自己也记不清楚,保守地讲(N≥6==TRUE)这个表达式是能够成立的。 !-- frame contents -- !-- /frame contents -- 回想我的VisualC++入门过程,一路过来,绝对不是像黄飞鸿的功夫那...
Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。 !-- frame contents -- !-- /frame contents -- 最后,你可以用所学知识编写...

经验教程

794

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部