Ciao !
Di solito in questi casi utilizzo una label con Forecolor = vbBlue.
Al mousemove modifico il forecolor per poi ripristinarlo quando il mouse si sposta nuovamente sul form o il contenitore che contiene la label. Poi ovviamente gestisco il clik.
Al click potresti richiamare questa semplice funzione per lanciare il file con il programma a cui è associato:
codice:
Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll"  _
        Alias "ShellExecuteA" (ByVal hWnd As Long _
        , ByVal lpOperation As String, ByVal lpFile As String _
        , ByVal lpParameters As String, ByVal lpDirectory As String _
        , ByVal nShowCmd As Long) As Long

' Possibili valori di ritorno di ShellExecute
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_ACCESSDENIED As Long = 5
Private Const SE_ERR_FNF As Long = 2

' Possibili valori di ritorno di ShellExecute
Enum ShellFileExecuteResultConstants
   AccessDenied = SE_ERR_ACCESSDENIED
   NoAssociation = SE_ERR_NOASSOC
   FileNotFound = SE_ERR_FNF
   NoErrors = 42
   UnhandledError = 0
End Enum

'
Function ExecuteFile(ByVal FileName As String _
   , Optional Command As String = "open", Optional Parameters As String _
   , Optional WindowStyle As VbAppWinStyle = vbNormalFocus _
   , Optional OwnerWnd As Long) As ShellFileExecuteResultConstants
' Esegue un comando su un file

    Dim lRetVal As Long
    
    ' Controlla comando e parametri
    Command = Trim$(Command)
    If Command = "" Then Command = "open"
    Parameters = Trim$(Parameters)
    
    ' esegue
    lRetVal = ShellExecute(OwnerWnd, Command, FileName, Parameters, "", WindowStyle)
    
    ' return
    Select Case lRetVal
        Case AccessDenied, NoAssociation, FileNotFound, NoErrors
            ExecuteFile = lRetVal
        Case Else
            ' altro errore non gestito
            ExecuteFile = UnhandledError
    End Select
End Function
Ciao ciao
Simo