いつも勉強させてもらい感謝しております。
ありがとうございます。
1つ行き詰まっており、方法がわかりません。
下記のことを行うには、どうすれば良いでしょうか?
・「NET SEND」を用いて、
指定したパソコンにメッセージを送信したい。
・送信実行の際、
DOSプロンプト画面、送信成功失敗メッセージなど、
画面には何も表示さたくない。
開発環境はDelphi7proです。
よろしくお願いします。
何かなーとおもって調べたらDosコマンドですよね?
FAQかも。
https://www.petitmonte.com/bbs/answers?question_id=3248
http://www.autch.net/page/tips/delphi_anonymous_pipe.html
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以降だと思います
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.
関数の戻り値を調べてみたら?
アドバイス、ありがとうございました。
戻り値は2273で、'送り先が見つからない'との事です。
コマンドプロンプトで送信した際と同じような宛先指定方法ではいけない様ですね。
しばし調べてみます。
1.着信先のファイヤーウォールが有効になっていませんか?
無効にするか、穴を開ける必要があります。
2.着信先のMessengerサービスを再起動してみてください。
ツイート | ![]() |