NET SENDを用いたメッセージ送信


Saint  2009-02-03 23:49:27  No: 33277

いつも勉強させてもらい感謝しております。
ありがとうございます。

1つ行き詰まっており、方法がわかりません。
下記のことを行うには、どうすれば良いでしょうか?

・「NET SEND」を用いて、
  指定したパソコンにメッセージを送信したい。

・送信実行の際、
  DOSプロンプト画面、送信成功失敗メッセージなど、
  画面には何も表示さたくない。

開発環境はDelphi7proです。
よろしくお願いします。


monaa  2009-02-04 11:05:03  No: 33278

何かなーとおもって調べたらDosコマンドですよね?
FAQかも。
https://www.petitmonte.com/bbs/answers?question_id=3248
http://www.autch.net/page/tips/delphi_anonymous_pipe.html


にしの  2009-02-04 18:35:08  No: 33279

interfaceに、

  function NetMessageBufferSend(
    servername, msgname, fromname: LPCWSTR;
    buf: PBYTE;
    buflen: DWORD): LongInt; stdcall;

を定義して、implementationに、

function NetMessageBufferSend; external 'netapi32.dll' Name 'NetMessageBufferSend';

としておいてから、

procedure TForm1.Button1Click(Sender: TObject);
var
  MsgName: WideString;
  FromName: WideString;
  BufStr: WideString;
  Buf: PBYTE;
  Len: DWORD;
begin
  MsgName := [送信先];
  FromName:= [送信元(nilならローカル)];
  BufStr := Edit1.Text;
  Buf := PBYTE(PWideChar(BufStr));
  Len := Length(BufStr) * 2;

  NetMessageBufferSend(
    nil, //実行元(nilならローカル)
    PWideChar(MsgName),
    PWideChar(FromName),
    buf,
    len);
end;

で送信できます。
# このAPIが使えるのはWindows2000以降だと思います


Saint  2009-02-19 22:39:22  No: 33280

monaaさん、にしのさん。
ありがとうございました。
お礼がすっかり遅くなってしまいすみません。

にしのさんからアドバイス頂いた方法を行っているのですが、
どうしてもメッセージが着信できません。
コマンドプロンプトで直接入力した場合にはメッセージが着信しましたので、
私のプログラムがおかしいのだと思います。

再び、アドバイスをお願い致します。

//-------------------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

function NetMessageBufferSend(
  servername, msgname, fromname: LPCWSTR;
  buf: PBYTE;
  buflen: DWORD): LongInt; stdcall;

implementation

{$R *.dfm}

function NetMessageBufferSend; external 'netapi32.dll' Name 'NetMessageBufferSend';

procedure TForm1.FormCreate(Sender: TObject);
var
  MsgName: WideString;
  FromName: WideString;
  BufStr: WideString;
  Buf: PBYTE;
  Len: DWORD;
begin
  MsgName := 'PC01';
  FromName:= 'PC02';
  BufStr := 'テストメッセージ';
  Buf := PBYTE(PWideChar(BufStr));
  Len := Length(BufStr) * 2;

  NetMessageBufferSend(
    nil, //実行元(nilならローカル)
    PWideChar(MsgName),
    PWideChar(FromName),
    buf,
    len);

end;

end.


自分で  2009-02-19 23:18:49  No: 33281

関数の戻り値を調べてみたら?


Saint  2009-02-20 00:17:30  No: 33282

アドバイス、ありがとうございました。

戻り値は2273で、'送り先が見つからない'との事です。

コマンドプロンプトで送信した際と同じような宛先指定方法ではいけない様ですね。
しばし調べてみます。


hgc99  2010-02-03 02:07:54  No: 33283

1.着信先のファイヤーウォールが有効になっていませんか?
無効にするか、穴を開ける必要があります。
2.着信先のMessengerサービスを再起動してみてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加