Attribute VB_Name = "HK"
Option Explicit

Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
           (ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
            
'========================================================================================

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
           (ByVal hWnd1 As Long, _
            ByVal hWnd2 As Long, _
            ByVal lpsz1 As String, _
            ByVal lpsz2 As String) As Long
            
'========================================================================================
                  
Public Declare Function hiword Lib "TLBINF32" (ByVal DWord As Long) As Integer

'========================================================================================

Public Declare Function loword Lib "TLBINF32" (ByVal DWord As Long) As Integer


'========================================================================================

Public Declare Function CreatePopupMenu Lib "user32" () As Long

'========================================================================================

Public Declare Function InsertMenuItem Lib "user32.dll" _
        Alias "InsertMenuItemA" _
            (ByVal hMenu As Long, _
            ByVal uItem As Long, _
            ByVal fByPosition As Long, _
            lpmii As MENUITEMINFO) As Long

'========================================================================================
'Public Declare Sub SetWindowPos Lib "user32" _
 '       (ByVal hwnd As Long, _
  '      ByVal hWndInsertAfter As Long, _
   '     ByVal x As Long, _
    '    ByVal y As Long, _
     '   ByVal cx As Long, _
      '  ByVal cy As Long, _
       ' ByVal wFlags As Long)
        
'==============================================================================
'========================================================================================
'========================================================================================

Public Type MENUITEMINFO
  cbSize As Long
  fMask As Long
  fType As Long
  fState As Long
  wID As Long
  HSubMenu As Long
  hbmpChecked As Long
  hbmpUnchecked As Long
  dwItemData As Long
  dwTypeData As String
  cch As Long
End Type

Public Type MENUINFO
    cbSize As Long
    fMask As Long
     dwStyle As Long
    cyMax As Long
    hbrBack As Long
    dwContextHelpID As Long
    dwMenuData As Long
End Type

'========================================================================================
'========================================================================================
'========================================================================================
'Messages To track
Public Const WM_INITMENUPOPUP As Long = &H117
Public Const WM_UNINITMENUPOPUP As Long = &H125
Public Const WM_MENUSELECT As Long = &H11F
Public Const WM_EXITMENULOOP As Long = &H212
Public Const WM_LBUTTONUP As Long = &H202


'========================================================================================

Public Const MF_DEFAULT As Long = &H1000&
Public Const MFT_SEPARATOR = &H800
Public Const MFT_STRING = &H0
Public Const MFS_ENABLED = &H0
Public Const MIIM_STATE = &H1
Public Const MIIM_ID = &H2
Public Const MIIM_TYPE = &H10
Public Const MIIM_SUBMENU As Long = &H4
Public Const MF_CHECKED As Long = &H8&
Public Const MFS_CHECKED As Long = MF_CHECKED
Public Const MF_UNCHECKED As Long = &H0&
Public Const MFS_UNCHECKED As Long = MF_UNCHECKED
Public Const MIIM_CHECKMARKS As Long = &H8

'========================================================================================
' Our custom menu IDs
Public Const mnuBoldID = 1001
Public Const mnuItalicID = 1002
Public Const mnuUnderlineID = 1003
Public Const mnuUnhookID = 1004

'========================================================================================
'Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST As Long = -2
'Public Const HWND_TOP As Long = 0

'Public Const SWP_NOSIZE = &H1
'Public Const SWP_NOMOVE = &H2
'Public Const SWP_NOACTIVATE = &H10
'Public Const SWP_SHOWWINDOW = &H40
'========================================================================================

Public TotalMenuInit As Integer 'Detects how many popup menu currently visible
Public lngMainMenuHnd As Long ' hWnd of the main Popup menu
Public HighlightedMenuItemID As Integer 'Tracks which menu item is highlighted
Public ClickedMenu As Integer 'Detects which menu is clicked

'========================================================================================
'========================================================================================
'========================================================================================
'========================================================================================




Sub HKCInit()

Dim lngHwndTargetForm As Long 'hWnd of the external window
Dim lngHwndTargetRTB As Long 'hWnd of the RTB window

  lngHwndTargetForm = FindWindow("Progman", "Program Manager")
    lngHwndTargetRTB = FindWindowEx(lngHwndTargetForm, 0&, "SHELLDLL_Defview", vbNullString)
    '--------------------------------------

    If lngHwndTargetRTB = 0 Then
        MsgBox "Could not find target window." & vbCrLf & _
           "Make sure TestExe.exe is running"
        Exit Sub
    Else

        With F0.HKC1
            'Set hook paramters
            .AddMessage WM_INITMENUPOPUP, "WM_INITMENUPOPUP"
            .AddMessage WM_UNINITMENUPOPUP, "WM_UNINITMENUPOPUP"
            .AddMessage WM_MENUSELECT, "WM_MENUSELECT"
            .AddMessage WM_EXITMENULOOP, "WM_EXITMENULOOP"
            .AddMessage WM_LBUTTONUP, "WM_LBUTTONUP"
            .TargethWnd = lngHwndTargetRTB
            .SetHook
        End With

    End If
End Sub


