首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 區域網路訊息傳送:NetMessageBufferSend 實作「網路送信使」功能

     編輯:Delphi

功能簡介

在已安裝「信使服務」的 Windows 2000/XP/2003 網域/工作群組中,程式可透過 NetMessageBufferSend (netapi32.dll) 向指定電腦發送彈出式訊息視窗,無需郵件伺服器或即時通訊軟體。

API 宣告

type
  NET_API_STATUS = LongInt;

function NetMessageBufferSend(
  ServerName: LPCWSTR;   // 目標伺服器,nil 表本機
  MsgName: LPCWSTR;      // 接收者電腦名稱或使用者名稱
  FromName: LPCWSTR;     // 發送者名稱,nil 表匿名
  Buf: Pointer;          // 訊息內容 (Unicode)
  BufLen: DWORD          // 位元組長度
): NET_API_STATUS; stdcall; external 'netapi32.dll';

發送訊息函數

uses Windows, SysUtils;

function SendNetMessage(const TargetComputer, MsgText: string): Boolean;
var
  WideMsg, WideTarget: PWideChar;
  Status: NET_API_STATUS;
begin
  Result := False;
  WideTarget := PWideChar(WideString(TargetComputer));
  WideMsg    := PWideChar(WideString(MsgText));
  // BufLen 為位元組數,Unicode 每字元 2 Bytes
  Status := NetMessageBufferSend(nil, WideTarget, nil, WideMsg, Length(MsgText) * 2);
  Result := (Status = 0); // NERR_Success = 0
end;

表單按鈕事件

procedure TForm1.btnSendClick(Sender: TObject);
begin
  if SendNetMessage(edtComputer.Text, edtMessage.Text) then
    ShowMessage('訊息已送出')
  else
    ShowMessage('送出失敗,請確認目標電腦名稱正確且已啟用信使服務');
end;

必要條件與限制

  • 目標電腦必須執行 Messenger 服務 (services.msc → Messenger → 啟動)。
  • Windows Vista/7/8/10/11 預設已移除/停用 Messenger 服務,此功能僅適用於舊版 Windows 環境。
  • 網域環境下可使用使用者名稱而非電腦名稱。
  • 訊息長度限制約 4000 字元。
  • 防火牆需開放 UDP 137/138、TCP 139/445 (NetBIOS/SMB)。

現代替代方案

建議改用 Socket (UDP/TCP)、HTTP API、SignalR、WebSocket、Message Queue (RabbitMQ/Kafka) 等跨平台訊息傳遞機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved