Winpopup and function calls

Posted on 1998-07-23
Last Modified: 2013-11-13
I would like to know how to send a message from VB to Winpopup. What library is required? Does anyone have any code examples to use. Getting Time Critical please help. Thanks
Question by:MalcolmH

Author Comment

ID: 1466492
Adjusted points to 200

Author Comment

ID: 1466493
Edited text of question

Expert Comment

ID: 1466494
To send a message to a window, you can use the sendMessage API.

Declare Function SendMessage Lib "User32" Alias _
  "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, lParam As Any) As Long

 As you can see,  you need the handle of the window. If you have the caption of the window, you can get it using the findwindow API.

Let me know if you have any questions.
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Author Comment

ID: 1466495
This solution passes messages between windows. What I require is to pass a message across the network to another machine running Win pop Up. The API was available in Lan Manager under the NETAPI.DLL and a user could access it using the NET SEND Command. It remains available on Windows NT. I have checked this with C++ and VB. It does not appear to be generally accessible on Windows 95, however, Windows 95 uses winpopup which is capable of sending network messages to targeted users. A function call must be available.

Expert Comment

ID: 1466496
Have considered to use Winsock Control to communicate in the network?

Author Comment

ID: 1466497
In this instance, I think we can use the Winsock control with the UDP protocol.
This does not work in all scenarios i.e. requires TCP/IP but for this project we can write our own pop-up messages around the winsock functionality.

LVL 14

Accepted Solution

waty earned 200 total points
ID: 1466498
You could use the following class :

' Class Module clsNetSend
' Requires VB5 and NT 4.0
' Sends message from NT 4.0 to NT 4.0 or Win95 running winpopup
' Properties:
'   SendTo - Read/Write
'   SendFromServer - Read/Write
'   Message - Read/Write
'   Err - Read Only
'   ErrorText - Read Only
' Methods:
'   NetSendMessage - Boolean Returns True/False (Success/Failure)
'       optional parameters:
'           sUser ' String - Message Recipient
'           sMsg  ' String - Message Text
'   ClearError - Sets object.Err = 0, object.ErrorText = ""
' Events:
'   Error - raised on error
'       parameters:
'           lError ' Error Code
'           ErrorText ' Just That
'   Sent - raised when object.NetSendMessage executed without errors
'       parameters: None

'**** Example  ******
' Add to Form Declarations Section
' Private WithEvents mNetSend As clsNetSend
' Add to a procedure/function
' Set mNetSend = New clsNetSend
' With mNetSend
'    .Message = "Your Message Here"
'    .SendTo = "UserNameOrWorkStation"
'    .SendFromServer = "ServerOrWorkStation" 'This is optional
'    .NetSendMessage ' Send the message
' End With

' Private Sub mNetSend_Error(ByVal lError As Long, ByVal ErrorText As String)
'    Debug.Print lError & " - " & ErrorText
' End Sub

' Private Sub mNetSend_Sent()
'    debug.print "Message Sent"
' End Sub

'**** Example  ******
' Private mNetSend As New clsNetSend
' Dim bSuccess As Boolean
' If mNetSend.NetSendMessage("UserOrWorkstationName", "This Is A Test") Then
'   MsgBox "Message Sent"
' else
'   MsgBox "Error " & mNetSend.Err & " - " & mNetSend.ErrorText
' End If
' Broadcast a message to all members of Domain called DomainName
' bSuccess = mNetSend.NetSendMessage("DomainName*", "This Is A Test")

Private Const ERROR_ACCESS_DENIED = 5&
Private Const ERROR_BAD_NETPATH = 53&
Private Const ERROR_NOT_SUPPORTED = 50&
Private Const ERROR_INVALID_NAME = 123&
Private Const NERR_Success = 0&       ' Success
Private Const NERR_NameNotFound = 2273& ' The message alias could not be found on the network.
Private Const NERR_NetworkError = 2136& ' A general network error occurred.

Private Declare Function NetSend Lib "netapi32" Alias "NetMessageBufferSend" (ByVal cServerName As String, ByVal cMsgName As String, ByVal cFromName As String, ByVal cBuf As String, ByRef iBufLen As Integer) As Integer
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Const VER_PLATFORM_WIN32_NT = 2

   dwOSVersionInfoSize As Long
   dwMajorVersion As Long
   dwMinorVersion As Long
   dwBuildNumber As Long
   dwPlatformId As Long
   szCSDVersion As String * 128      '  Maintenance string for PSS usage
End Type

' Events
Public Event Error(ByVal lError As Long, ByVal ErrorText As String)
Public Event Sent()

' Local copies of properties
Private m_sMsgTo As String
Private m_sMsg As String
Private m_sMsgFrom As String
Private m_lNetApiStatus As Long
Private m_sErrorText As String
Private m_bIsWinNT As Boolean

' Returns true if this program is running under Windows NT
Function IsWindowsNT() As Boolean

   Dim lRC As Long

   typOSInfo.dwOSVersionInfoSize = Len(typOSInfo)
   lRC = GetVersionEx(typOSInfo)
   IsWindowsNT = (typOSInfo.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
Public Sub ClearError()
   ' Set Error Properties
   m_lNetApiStatus = 0
   m_sErrorText = ""
End Sub

Public Property Get ErrorText() As String
   'Set ErrorText
   ErrorText = m_sErrorText
End Property

Public Property Get Err() As Long
   ' Set Error Number
   Err = m_lNetApiStatus
End Property

Private Function SetErrorText(Error As Long) As String
   Select Case Error
      Case ERROR_ACCESS_DENIED: SetErrorText = "Access Denied!"
      Case ERROR_BAD_NETPATH: SetErrorText = "Server '" & UCase$(m_sMsgFrom) & "' not Found."
      Case ERROR_INVALID_PARAMETER: SetErrorText = "Invalid parameter specified."
      Case ERROR_NOT_SUPPORTED: SetErrorText = "Network request not supported."
      Case ERROR_INVALID_NAME: SetErrorText = "Illegal character or malformed name."
      Case NERR_Success: SetErrorText = "Message sent."
      Case NERR_NameNotFound: SetErrorText = "User/Workstation '" & m_sMsgTo & "' not found."
      Case NERR_NetworkError: SetErrorText = "General network error occurred."
      Case Else: SetErrorText = "Unknown error executing command."
   End Select
End Function

Private Sub SetLastErr(ByVal lError As Long)
   m_lNetApiStatus = lError
   m_sErrorText = SetErrorText(lError)
   If m_lNetApiStatus Then RaiseEvent Error(m_lNetApiStatus, m_sErrorText)
End Sub
Public Function NetSendMessage(Optional ByVal sUser As String = "", Optional ByVal sMsg As String = "") As Boolean

   Dim sBuf
   Dim sMsgFrom As String
   Dim sMsgName As String
   Dim Net_Api_Status As Long

   If Not m_bIsWinNT Then Exit Function

   If Len(sUser) Then m_sMsgTo = sUser ' Else use the SendTo Property

   If m_sMsgTo = "" Then
      NetSendMessage = False
      RaiseEvent Error(ERROR_INVALID_PARAMETER, m_sErrorText)
      Screen.MousePointer = vbHourglass

      If Len(sMsg) Then m_sMsg = sMsg

      sBuf = StrConv(m_sMsg, vbUnicode)
      sMsgName = StrConv(m_sMsgTo, vbUnicode)

      If Len(m_sMsgFrom) And sUser = "" Then
         sMsgFrom = StrConv(m_sMsgFrom, vbUnicode)
         sMsgFrom = vbNullString
      End If
      Net_Api_Status = NetSend(sMsgFrom, sMsgName, vbNullString, sBuf, ByVal Len(sBuf))
      SetLastErr Net_Api_Status
      NetSendMessage = Not CBool(Net_Api_Status)
      If NetSendMessage Then RaiseEvent Sent
      Screen.MousePointer = vbNormal
   End If

End Function

Public Property Let Message(ByVal vData As String)
   'used when assigning a value to the property, on the left side of an assignment.
   'Syntax: X.sMessage = 5
   m_sMsg = vData
End Property

Public Property Get Message() As String
   'used when retrieving value of a property, on the right side of an assignment.
   'Syntax: Debug.Print X.sMessage
   Message = m_sMsg
End Property

Public Property Let SendTo(ByVal vData As String)
   m_sMsgTo = vData
End Property
Public Property Get SendTo() As String
   SendTo = m_sMsgTo
End Property

Public Property Let SendFromServer(ByVal vData As String)
   'used when assigning a value to the property, on the left side of an assignment.
   m_sMsgFrom = vData
End Property

Public Property Get SendFromServer() As String
   'used when retrieving value of a property, on the right side of an assignment.
   SendFromServer = m_sMsgFrom
End Property

Private Sub Class_Initialize()
   m_bIsWinNT = IsWindowsNT()
   If m_bIsWinNT Then
      m_lNetApiStatus = 0
      MsgBox "The NetSend class requires Windows NT.", vbCritical + vbOKOnly, "Net Send"
   End If
End Sub

LVL 13

Expert Comment

ID: 1466499
Bought This Question.

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question