Delphi实现在局域网内传递消息程序

本程序介绍如何在局域网内安装了信使服务的Windows 2000计算机之间传递消息。

向窗体上添加两个TLabel组件、两个TEdit组件和一个TButton组件,设计完成的主界面如图1所示。

图1 主界面

首先声明NetMessageBufferSend函数,该函数在netapi32.dll库中:

type
  NET_API_STATUS = LongInt;
  function NetMessageBufferSend(servername: LPCWSTR; msgname: LPCWSTR;
  fromname: LPCWSTR; buf: Pointer;
  buflen: DWORD): NET_API_STATUS;
  stdcall;external 'netapi32.dll';

在程序运行过程中,单击Send按钮,就会向Computer文本框指定的计算机发送Content文本框中输入的消息,响应代码如下:

procedure TForm1.Button1Click(Sender: TObject);
  var
   WideMsg:PWideChar;
   DestName:PWideChar;
  begin
   DestName:=PWideChar(WideString(Edit1.Text));
   WideMsg:=PWideChar(WideString(Edit2.Text));
   NetMessageBufferSend(nil,DestName,nil,WideMsg,Length(Edit2.Text)*2);
end;

程序代码如下:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;
type
  NET_API_STATUS = LongInt;
  function NetMessageBufferSend(servername: LPCWSTR; msgname: LPCWSTR;
  fromname: LPCWSTR; buf: Pointer;
  buflen: DWORD): NET_API_STATUS;
  stdcall;external 'netapi32.dll';
type
  TForm1 = class(TForm)
  Edit1: TEdit;
  Label1: TLabel;
  Label2: TLabel;
  Edit2: TEdit;
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
private
  { Private declarations }
public
{ Public declarations }
end;
var
  Form1: TForm1;
  implementation
  {$R *.dfm}
  procedure TForm1.Button1Click(Sender: TObject);
var
  WideMsg:PWideChar;
  DestName:PWideChar;
begin
  DestName:=PWideChar(WideString(Edit1.Text));
  WideMsg:=PWideChar(WideString(Edit2.Text));
  NetMessageBufferSend(nil,DestName,nil,WideMsg,Length(Edit2.Text)*2);
end;
end.

时间: 2024-09-21 12:31:13

Delphi实现在局域网内传递消息程序的相关文章

C#写的消息队列应用程序,怎样在局域网内访问或读取???急!!!

问题描述 我写了个消息队列的应用程序,在本地可以实现消息的发送和接收,但放到局域网内就不行了,这是怎么回事,是消息队列的配置问题还是?this._readMq=newMessageQueue("192.168.1.233\private$\test");这是创建消息队列对象,应该没错吧,192.168.1.233,是其它机子的IP,那台机子也安装了消息队列,并创建了test专用队列. 解决方案 解决方案二:自己UP!!!!!!解决方案三:消息队列要在局域网里使用,必须安装ad的好像.然

《Java程序员面试秘笈》—— 面试题8 在Java中,对象是如何传递消息的

面试题8 在Java中,对象是如何传递消息的 请选择一个正确答案. (a)对象通过彼此的变量来传递消息. (b)对象通过修改彼此类的静态变量来传递消息. (c)对象通过调用彼此的实例方法来传递消息. (d)对象通过调用彼此类的静态方法来传递消息. 考点:考察求职者对于对象传递消息的理解. 出现频率: 面试题解析Java对象之间的消息传递,是通过调用相互的实例方法来实现的,而不是静态方法. 参考答案:(c). 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的

数据报-关于局域网内计算机的通信

问题描述 关于局域网内计算机的通信 一台计算机是怎么将自己内存中的东西变成数据报然后传递给处于同一局域网内另一台计算机的,能不能详细的说明一下,谢谢啦. 解决方案 首先你应该明白网络通讯是分层的.所以你可以在任何层上进行通讯,当然对方要用对应的程序去解析. 比如说,在IP层上,你可以用raw socket,在传输层上,可以用socket,用udp协议和tcp协议.你还可以在应用层使用http之类的协议. 纠正下你的观点,内存中的东西就是数据,无须"变成数据".你只要选定你采用的协议,按

Delphi实现获取句柄并发送消息的方法_Delphi

本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil,PChar('窗口的标题'));//查到窗体句柄 查找子窗体: childHandle := FindWindowEx(handle,0,'子窗体类','子窗体标题'); 另外有个枚举子窗体的API, EnumChildWindows(主创体句柄,@回调函数,用户参数); 用这个函数需要自己写一个回调的函数,比如: function Enu

c#调用API显示内部局域网内的主机

显示   //写这个程序,为了是显示局域网内的主机,然后通过用户点击选中的机器,检查是否该主机上安装有SQLSERVER,是为一个配置程序所写的//这里提供CODE,给有需要的朋友 //设置DLL必须使用该命名空间using System.Runtime.InteropServices;   #region 动态链接库定义  [DllImport("mpr.dll",CharSet=CharSet.Auto)] private static extern int WNetEnumRes

提高局域网内网速的几个小技巧

1.去掉无关的选项 在Windows XP中,双击"控制面板"中的"文件夹选项",再单击"查看"标签,然后将鼠标指针滚动至窗口的最下方,可以看到有一个"自动搜索网络文件夹和打印机"项,默认是选中的,将它去掉.这样,当我们打印时,Windows XP不会自作主张去寻找局域网上的打印机并安装驱动程序,以防止不经意将机密文档打到别的部门打印机上而自己却还找不到.同时,将此项去掉后,当我们通过 "网上邻居"来访问局

局域网内命令大全

  局域网dos命令集 net use ipipc$ " " /user:" " 建立IPC空链接 net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: ipc$ 登陆后映射对方C:到本地为H: net use ipipc$ /del

局域网内如何提高网速

  1.去掉无关的选项 在Windows XP中,双击"控制面板"中的"文件夹选项",再单击"查看"标签,然后将鼠标指针滚动至窗口的最下方,可以看到有一个"自动搜索网络文件夹和打印机"项,默认是选中的,将它去掉.这样,当我们打印时,Windows XP不会自作主张去寻找局域网上的打印机并安装驱动程序,以防止不经意将机密文档打到别的部门打印机上而自己windows7系统下载却还找不到.同时,将此项去掉后,当我们通过"网

局域网内远程连接失败的原因

  为了提升网吧网络管理的效率,网管们喜欢通过远程的功能实现对网吧所有机器的控制欲维护,但是在系统工作站中,往往会遇到远程连接失败的现象,可能是设置上面出了问题,远程连接失败的原因也可能是以下几点. 1,如果工作站系统没有对网络参数进行合适的设置,比方说没有将"Microsoft网络的文件和打印机共享"选项选中,那么就无法通过远程连接方法,对该工作站系统进行远程管理,所以检查工作站系统是否启用了"MicROSoft网络的文件和打印机共享"功能. 2,由于工作站系统在