Here are the ideas for a solution based on custom drawn items:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
$hGUI = GUICreate("Hover Test", 323, 184, 208, 168)
$cInput = GUICtrlCreateInput("", 8, 24, 305, 21)
$cListView = GUICtrlCreateListView("ListView", 8, 45, 305, 129)
$hListView = GUICtrlGetHandle($cListView)
GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_ONECLICKACTIVATE, $LVS_EX_TRACKSELECT)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW)
For $i = 0 To 10
GUICtrlCreateListViewItem("TEST_" & $i, $cListView)
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local Static $iHot = -1, $iHotPrev = -1
Local $hWndFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $LVN_HOTTRACK ; Sent when the user moves the mouse over an item
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
$iHot = DllStructGetData($tInfo, "Item")
If $iHot <> $iHotPrev Then
;ConsoleWrite($iHot & @LF)
If $iHot <> -1 Then _GUICtrlListView_RedrawItems( $hListView, $iHot, $iHot )
If $iHotPrev <> -1 Then _GUICtrlListView_RedrawItems( $hListView, $iHotPrev, $iHotPrev )
If $iHot <> $iHotPrev And $iHot <> -1 Then $iHotPrev = $iHot
EndIf
Case $NM_CUSTOMDRAW
Local $tNMLVCUSTOMDRAW = DllStructCreate( $tagNMLVCUSTOMDRAW, $ilParam )
Local $dwDrawStage = DllStructGetData( $tNMLVCUSTOMDRAW, "dwDrawStage" )
Switch $dwDrawStage ; Holds a value that specifies the drawing stage
Case $CDDS_PREPAINT ; Before the paint cycle begins
Return $CDRF_NOTIFYITEMDRAW ; Notify the parent window of any ITEM-related drawing operations
Case $CDDS_ITEMPREPAINT ; Before painting an item
Return $CDRF_NOTIFYSUBITEMDRAW ; Notify the parent window of any SUBITEM-related drawing operations
Case BitOR( $CDDS_ITEMPREPAINT, $CDDS_SUBITEM ) ; Before painting a subitem
Local $dwItemSpec = DllStructGetData( $tNMLVCUSTOMDRAW, "dwItemSpec" ) ; Item index
;Local $iSubItem = DllStructGetData( $tNMLVCUSTOMDRAW, "iSubItem" ) ; Subitem index
;Local $uItemState = DllStructGetData( $tNMLVCUSTOMDRAW, "uItemState" ) ; Item state
If $dwItemSpec = $iHot Then ; Hot row
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrText", 0x000000 )
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrTextBk", 0x00FF00 )
Else ; Other rows
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrText", 0x000000 )
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF )
EndIf
Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
It's not a complete solution.