プロが教える店舗&オフィスのセキュリティ対策術

Windows2000orXP+VBAです。
LAN上の他のPCにメッセージを表示させたいと思っています。
表示させるPCには特別なソフトをインストールしたりはせずに、できればWindowsAPI等を使用して
実現させたいと思っているのですが実現できる手法はあるのでしょうか。
ご存知の方がいらっしゃったら使えるAPIの関数名だけでも教えてもらえるとありがたいのですが。
よろしくお願いします。

A 回答 (2件)

Option Explicit



Private 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

Sub Test()
  Dim l_strPC   As String
  Dim l_strMsg  As String
  Dim i      As Integer
  Dim l_lngRet  As Long
  
  '引数を作成
  l_strPC = Environ("COMPUTERNAME")
  For i = Asc("A") To Asc("Z")
    l_strMsg = l_strMsg & Chr(i) & vbCrLf
  Next i
  
  
  'API形式で実行
  l_lngRet = API形式(l_strPC, l_strMsg)
  If (l_lngRet = 0) Then
    Debug.Print Now & vbTab & "成功"
  Else
    Debug.Print Now & vbTab & "失敗"
  End If

  'SHELLで実行
  l_lngRet = Shell形式(l_strPC, l_strMsg)
  If (l_lngRet = 0) Then
    Debug.Print Now & vbTab & "成功"
  Else
    Debug.Print Now & vbTab & "失敗"
  End If
End Sub


Private Function API形式( _
    ByVal p_strSendPC As String, _
    ByVal p_strMsg As String _
  ) As Long
  
  Dim l_lngRet    As Long
  Dim l_bytSendPC()  As Byte
  Dim l_bytMsg()   As Byte
  
  p_strMsg = "API形式" & vbCrLf & vbCrLf & p_strMsg
   
  l_bytSendPC = p_strSendPC & vbNullChar
  l_bytMsg = p_strMsg & vbNullChar
  l_lngRet = NetMessageBufferSend( _
          0, _
          VarPtr(l_bytSendPC(0)), _
          0, _
          VarPtr(l_bytMsg(0)), _
          LenB(p_strMsg) _
  )
  
  API形式 = l_lngRet
End Function

Private Function Shell形式( _
    ByVal p_strSendPC, _
    ByVal p_strMsg As String _
  ) As Long
  
  Dim l_lngRet    As Long
  Dim l_objSehll As Object
  Dim l_strCmd  As String
  
  p_strMsg = "SHELL形式" & vbCrLf & vbCrLf & p_strMsg
  l_strCmd = "net send " & p_strSendPC & " """ & p_strMsg & """"
  
  Set l_objSehll = CreateObject("WScript.Shell")
  l_lngRet = l_objSehll.Run( _
      l_strCmd, _
      VbAppWinStyle.vbHide, _
      True _
  )
  
  Shell形式 = l_lngRet
End Function
    • good
    • 0
この回答へのお礼

わかりやすい返答を
ありがとうございました!
とても参考になりました。

お礼日時:2006/06/06 15:56

サービス[Messenger]が起動している事が前提です


WindowsXPでSP2が当てられていたら、サービスが無効に設定されています。


※プロンプトでコマンド
net send
http://okwave.jp/kotaeru.php3?q=775773

※APIを利用
NetMessageBufferSend
http://okwave.jp/kotaeru.php3?q=414582
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています