Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1951
  • Last Modified:

Converting NOTIFYICONDATA from VB6 to VB.NET

I have some VB6 code that I am converting to .NET.  It is going fairly well but I have a structure that is defined and passed from the Shell_NotifyIcon shell32 method.  Below is how i converted it from the VB6 code.  The problem I am having is that the hIcon is an Integer and I need to set it as a Form.Icon object.  This apparently was allowed in VB6 but not in .NET.  How can I do what I am looking to do.

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.ANSI)> Public Structure NOTIFYICONDATA
        Dim cbSize As Integer
        Dim hwnd As Integer
        Dim uId As Integer
        Dim uFlags As Integer
        Dim uCallBackMessage As Integer
        Dim hIcon As Integer
        <VBFixedString(64), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=64)> Public szTip As String

    End Structure
  • 3
1 Solution
Bob LearnedCommented:
Are you trying to show a balloon on the task bar:

   Public Shared Sub ShowNotifyIconBalloon(ByVal ptrHandle As IntPtr, _
      ByVal ptrIcon As IntPtr, ByVal strTitle As String, ByVal strText As String)



         With uNIF
            .cbSize = Marshal.SizeOf(uNIF)
            .hwnd = ptrHandle
            .uID = 1
            .dwInfoFlags = NIF_ICON Or NIF_MESSAGE Or NIIF_WARNING
            .uCallbackMessage = New IntPtr(&H500)
            .uVersion = NOTIFYICON_VERSION
            .hIcon = ptrIcon
         End With

         Dim boolResult As Boolean = Shell_NotifyIcon(NIM_ADD, uNIF)

         '// Send a balloon message
         With uNIF
            .uFlags = NIF_INFO
            .uVersion = 2000
            .szInfoTitle = strTitle
            .szInfo = strText
            .dwInfoFlags = NIIF_INFO
         End With

         boolResult = Shell_NotifyIcon(NIM_MODIFY, uNIF)

      Catch ex As Exception


      End Try

   End Sub 'ShowNotifyIconBalloon'

Bob LearnedCommented:
Forgot the definitions:

   <StructLayout(LayoutKind.Sequential)> Private Structure NOTIFYICONDATA
      Dim cbSize As Int32
      Dim hwnd As IntPtr
      Dim uID As Int32
      Dim uFlags As Int32
      Dim uCallbackMessage As IntPtr
      Dim hIcon As IntPtr
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Dim szTip As String
      Dim dwState As Int32
      Dim dwStateMask As Int32
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Dim szInfo As String
      Dim uVersion As Int32
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Dim szInfoTitle As String
      Dim dwInfoFlags As Int32
   End Structure

   Private Const NIF_MESSAGE As Int32 = &H1
   Private Const NIF_ICON As Int32 = &H2
   Private Const NIF_STATE As Int32 = &H8
   Private Const NIF_INFO As Int32 = &H10
   Private Const NIF_TIP As Int32 = &H4
   Private Const NIM_ADD As Int32 = &H0
   Private Const NIM_MODIFY As Int32 = &H1
   Private Const NIM_DELETE As Int32 = &H2
   Private Const NIM_SETVERSION As Int32 = &H4
   Private Const NOTIFYICON_VERSION As Int32 = &H5
   Private Const NIS_HIDDEN As Int32 = &H1
   Private Const NIS_SHAREDICON As Int32 = &H2
   Private Const NIIF_ERROR As Int32 = &H3
   Private Const NIIF_INFO As Int32 = &H1
   Private Const NIIF_NONE As Int32 = &H0
   Private Const NIIF_WARNING As Int32 = &H2
   Private Const NIM_SETFOCUS As Int32 = &H4
   Private Const NIIF_GUID As Int32 = &H5

   Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" _
      (ByVal dwMessage As Int32, ByRef lpData As NOTIFYICONDATA) As Boolean

d532335Author Commented:
How do you convert an icon into an IntPtr?

With nid
  .cbSize = Len(nid)
  .hwnd = New IntPtr(Me.Handle.ToInt32)
  .uId = VariantType.Null
  .uCallBackMessage = WM_MOUSEMOVE
  .hIcon = Me.Icon
End With
Bob LearnedCommented:
Usage is something like this (from a form with an icon):

ShowNotifyIconBalloon(Me.Handle, Me.Icon.Handle, "Application", "This is a test of the radio broadcast system.")
Be sure to add

Imports System.Runtime.InteropServices

to the project

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now