NetMessageBufferSendでメッセージを送った時に表示される自コンピュータ名を変更するには

解決


Akat  2004-07-07 18:00:54  No: 114606  IP: [192.*.*.*]

はじめまして。早速質問なのですが、
NetMessageBufferSendを使い自PCから他PCへメッセージ
を送る場合、単純にメッセージを送信するだけなら下記
コードで問題なくできるのですが、メッセージを送った時に
表示される自PC名を違う名前で表示させたいのですが、
いろいろ試しましたがうまくいきません。
fromnameの指定の仕方が悪いのだと思うのですが、
どのように指定すればいいのでしょうか?


Declare Function NetMessageBufferSend Lib "netapi32.dll" _
   (ByVal servername As Long, _
    ByVal msgname As Long, _
    ByVal fromname As Long, _
    ByVal buf As Long, _
    ByVal buflen As Long) As Long

Private Sub Command1_Click()
   Call MsgSend(Text1.Text, Text2.Text)
End Sub

Private Sub MsgSend(ByVal strSendPc As String, _
                      ByVal strMessage As String)
 Dim lngRet       As Long
 Dim bytSendPC()  As Byte
 Dim bytMessage() As Byte
    
    bytSendPC = strSendPc & Chr(0)
    bytMessage = strMessage & Chr(0)
    lngRet = NetMessageBufferSend(0, _
                                  VarPtr(bytSendPC(0)), _
                                  0, _
                                  VarPtr(bytMessage(0)), _
                                  LenB(strMessage))
   If lngRet = 0 Then
      MsgBox "送信終了"
   Else
      MsgBox "送信失敗"
   End If
End Sub

編集 削除
nanashi  2004-07-07 18:15:07  No: 114607  IP: [192.*.*.*]

環境によって変更出来ないんじゃないでしょうか?

私の会社で、以前はfromnameに適当な名前を付けて送れてたんですが、
ある時から送付出来なくなり、ネットワーク管理者に確認したところ
ドメインコントローラーの設定を変えた、と言われました。

なのでドメインコントローラーの設定(どんな設定かは知りませんが)によるのかと思っていたんですが。

編集 削除
Akat  2004-07-07 21:57:13  No: 114608  IP: [192.*.*.*]

nanashiさん、早々のご返答ありがとうございました。
ドメインコントローラーの設定ですか・・・・
私自身ネットワークの知識がほとんどないので何とも言えないのですが、
はじめ私も会社でうまくいかず、詳しい人に聞いたところnanashiさんと
似たよう事を言われました。それで自宅や友人宅でも試してみたのですが、
やはり結果は同じだったのでfromnameの指定の仕方が悪かったのでは
ないかと思った次第です。
nanashiさんがうまく送れていたときのコードをなんかを教えて頂く事は
できませんでしょうか?

編集 削除
nanashi  2004-07-08 10:52:51  No: 114609  IP: [192.*.*.*]

もう修正してしまったんですけど、確かこんな感じだったと思います。


Private Declare Function NetMessageBufferSend Lib _
    "netapi32.dll" _
    (ByVal servername As Long, ByRef msgname As Byte, ByRef fromname As Byte, _
     ByRef buf As Byte, ByVal buflen As Long) _
        As Long

Private Declare Function GetComputerName Lib _
    "kernel32.dll" Alias "GetComputerNameA" _
    (ByVal lpBuffer As String, nSize As Long) _
        As Long

Public Function MessageSend(ByVal SndMsg As String, ByVal SndTo As String, Optional ByVal SndFrom As String = vbNullString) As Long
    Dim bySndTo() As Byte, bySndFrom() As Byte, bySndMsg() As Byte
    Dim lLen As Long
    
    '送信元の確認
    If Len(Trim$(SndFrom)) = 0 Then
        SndFrom = String$(50, vbNullChar)
        Call GetComputerName(SndFrom, Len(SndFrom))
        SndFrom = Left$(SndFrom, InStr(SndFrom, vbNullChar) - 1)
    End If
    
    '送信データ型の変換
    bySndTo = SndTo & vbNullChar
    bySndFrom = SndFrom & vbNullChar
    bySndMsg = SndMsg & vbNullChar
    
    ' メッセージを送信
    MessageSend = NetMessageBufferSend(0, bySndTo(0), bySndFrom(0), bySndMsg(0), LenB(SndMsg))
End Function

編集 削除
Akat  2004-07-09 00:14:37  No: 114610  IP: [192.*.*.*]

nanasiさん、ご返答ありがとうございました。
nanashiさんのコードを使って試してみましたが、
うまくいきませんでした・・・(T_T)
VB以外の言語で作ったと思われるフリーソフトでは
うまくいくので、VBでは無理って事ですかね。
という事で本当に残念ですがあきらめる事にしました・・・
できないのがわかっただけでも収穫でした。
いろいろとお世話になり、ありがとうございました!!

編集 削除