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

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

步骤/方法

  • 01

    一、实现方法 信使服务为大家在网络上提供了简便、快捷的聊天方式,所以网上也有一些改进了的信使服务发送程序,使信息的发送可以按照自己的意愿来进行而不受微软提供的"net send"所限制。如果你经常上网,也许会收到通过信使服务发来的广告或者其他莫名其妙的信息,而在"信使服务"窗口中所显示出来的发送方的计算机名或者IP地址和你自己的竟然一样。如果你遇到过这种情况,那么你想不想知道这种改进了的信使服务发送程序是怎么实现的呢? 本实例将要带你去剖析一下Windows的信使服务,我们将从一个程序员的角度来看看这个信使服务发送程序是如何实现的。其实实现信使服务的整个过程很简单,我们只需要调用一个API函数: NET_API_STATUS NetMessageBufferSend( LPWSTR servername, LPWSTR msgname, LPWSTR fromname, LPBYTE buf, DWORD buflen );

  • 02

    其中该函数的参数说明如下: servername:计算机名,该函数将在指定的这个计算机上面执行。如果为NULL,则表示为本地计算机,通常我们都将其设置为NULL。 msgname:目标计算机的名字或者IP地址。 fromname:源计算机的名字或者IP地址。 buf:指向一个信息缓冲区的指针,在这里你可以填上你想发送的信息。要注意的是,这个参数用的是Unicode编码。 buflen:上述信息缓冲区中的字节数。 现在函数已经介绍完了,通过这个函数我们可以发现如果想实现匿名的信使服务实在是太简单--只需要在fromname中填上一个假冒的计算机名或者IP地址就行了。下面给出一个实际例子,在这个程序中,我们从命令行参数接受目标计算机和源计算机名字(IP地址),同时我们还可以设定信息发送的次数。

  • 03

    二、编程步骤 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]\n",argv[0]); printf("Count: Count means number of times to send message,default is 1.\n"); return 0; } wdest = argv[1]; //目标计算机 wfrom = argv[2]; //源计算机 buffer = argv[3]; //发送的信息 count = _wtoi(argv[4]); //发送次数,缺省为1次 if(count ==0)

  • 04

    count = 1; printf("count = %d\n",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.\n"); return 0; } if(dwReturn == NERR_NetworkError) { printf("A general failure occurred in the network hardware.\n"); return 0; } if(dwReturn == ERROR_NOT_SUPPORTED) { printf("This network request is not supported.\n"); return 0; } if(dwReturn == ERROR_INVALID_PARAMETER) { printf("The specified parameter is invalid.\n"); return 0; } if(dwReturn == ERROR_ACCESS_DENIED) { printf("The user does not have access to the requested information.\n"); return 0; } else printf("Unknown error!\n"); return 0; }

  • 05

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

(0)

相关推荐

  • 让Windows Server 2008设备驱动安装图文教程

    安装设备驱动程序原本是一件非常简单的事情,很多驱动程序在安装的时候我们只要不停单击“下一步”按钮,就能让驱动程序顺利地在对应计算机系统“落户”;不过,当身边的计算机系统升级为Windows Serve ...

  • Windows系统进程说明

    系统进程 system process alg.exe csrss.exe ddhelp.exe dllhost.exe inetinfo.exe internat.exe kernel32.dll ...

  • windows Server 2008各版本区别详解

    Windows Server 2008 是专为强化下一代网络、应用程序和 Web 服务的功能而设计,是有史以来最先进的 Windows Server 操作系统。拥有 Windows Server 20 ...

  • Windows XP常见的关键系统进程

    Windows XP常见的关键系统进程

  • Windows 系统一些我们平常通过任务管理器不能关的进程

    平常很多人在感觉电脑卡的时候,都会通过任务管理器进行关闭一些自己认为没用的进程,而我们经常会错误的关闭进程导致电脑重启等等惨案。最后就是自己在玩的游戏重启了或者工作的东西没保持被重庆了。而www.35 ...

  • Dev C++中如何创建Windows窗体项目

    我们一般用Visual Studio创建Windows窗体应用,那么如何用Dev C++创建窗体应用呢?下面小编给大家分享一下. 操作方法 01 首先打开Dev C++软件,点击顶部的文件菜单,选择新 ...

  • 低配置也跑Vista系统

    Vista操作系统的美丽与许多新鲜的功能,早已令许多电脑用户望眼欲穿,可惜自己的电脑配置较低,安装好Windows Vista后,发现这辆“坦克”跑起来很吃力,毕竟自己的电脑配置和官方要求相差太远了。 ...

  • Win10最新版9879即将发布至"Slow Ring"

    在版本号为9879的Windows 10技术预览版发布一周后,“Slow Ring”用户至今尚未获得更新,不过根据 Gabriel Aul 最新推文显示微软已经准备好向“Slow Ring”用户推送新 ...

  • dotnetfx.exe是什么进程

    dotnetfx.exe是微软Windows升级到.net技术的一个进程(又及修复.net框架用的命令),需要安装Microsoft® .net framework 组件获得。如果在安装 Visual ...