; смотрите примеры в _GUICtrlListView_Create, _GUICtrlButton_Create и в других ..._Create
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GuiButton.au3>

$Debug_LV = False
$help = 'Пример показывает возможность назначить управление/действия пунктам используя клавиши модификаторы и способ клика мыши' & @CRLF & @CRLF & _
		'Для каждого ListView можно назначить своё поведение, которое определяется в выборе "Case $hWndListView". Пример взят из справки UDFs _GUICtrlListView_ClickItem'
Global $k = 0
Global $hListView

$Gui = GUICreate("Кликайте по элементам в ListView, нажмите F2", 550, 320)
$ListView = GUICtrlCreateListView("кол1  |кол2|кол3  ", 2, 2, 199, 88, $LVS_EDITLABELS)
$item1 = GUICtrlCreateListViewItem("пункт 1|1111|1 в кол 3", $ListView)
$item2 = GUICtrlCreateListViewItem("пункт 2|2222|2 в кол 3", $ListView)
$item3 = GUICtrlCreateListViewItem("пункт 3|3333|3 в кол 3", $ListView)
$hListView = GUICtrlGetHandle($ListView)

$hEdit = GUICtrlCreateEdit($help, 2, 95, 545, 222, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
GUICtrlSetBkColor(-1, 0xfffbd7)

$btn1 = GUICtrlCreateButton("Первая", 225, 66, 70, 25)
$btn2 = GUICtrlCreateButton("Вторая", 315, 66, 70, 25)

GUISetState()

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	#forceref $hWnd, $iMsg, $wParam
	$k += 1
	WinSetTitle($Gui, '', 'Вызов ' & $k &', ID = '& $wParam)
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $hWndFrom
		Case $hListView
			Switch $iCode
				Case $LVN_COLUMNCLICK
					$tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
					GUICtrlSetData($hEdit, _
						"$LVN_COLUMNCLICK" & @TAB & "клик на заголовке колонки" & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom & @CRLF & _
						"идентификатор:" & @TAB & $iIDFrom & @TAB & "(порядковый номер элемента в окне)" & @CRLF & _
						"№ колонки:" & @TAB & DllStructGetData($tInfo, "SubItem") & @TAB & "(отсчёт от 0)")

				Case $NM_DBLCLK ; левый двойной клик мышкой по пункту
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					GUICtrlSetData($hEdit, _
						"$NM_DBLCLK" & @TAB & "ДВОЙНОЙ клик левой кнопкой мыши" & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom & @CRLF & _
						"идентификатор:" & @TAB & $iIDFrom & @TAB & "(порядковый номер элемента в GUI)" & @CRLF & _
						"код клика:" & @TAB & $iCode & @TAB & "(определяет правой или левой, двойной или одинарный клик мыши)" & @CRLF & _
						"№ пункта:" & @TAB & DllStructGetData($tInfo, "Index") & @TAB & "(номер строки, отсчёт от 0, -1 пустое пространство)" & @CRLF & _
						"№ колонки:" & @TAB & DllStructGetData($tInfo, "SubItem") & @TAB & "(отсчёт от 0)" & @CRLF & _
						"удерж. клавиша:" & @TAB & DllStructGetData($tInfo, "KeyFlags") & @TAB & "(0=ничего; 1=Alt, 2=Ctrl, 4=Shift, 3,5,6,7 - комбинации)")

				Case $NM_CLICK ; левый клик мышкой по пункту
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					GUICtrlSetData($hEdit, _
						"$NM_CLICK" & @TAB & "одинарный клик левой кнопкой мыши" & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom & @CRLF & _
						"идентификатор:" & @TAB & $iIDFrom & @TAB & "(порядковый номер элемента в GUI)" & @CRLF & _
						"код клика:" & @TAB & $iCode & @TAB & "(определяет правой или левой, двойной или одинарный клик мыши)" & @CRLF & _
						"№ пункта:" & @TAB & DllStructGetData($tInfo, "Index") & @TAB & "(номер строки, отсчёт от 0, -1 пустое пространство)" & @CRLF & _
						"№ колонки:" & @TAB & DllStructGetData($tInfo, "SubItem") & @TAB & "(отсчёт от 0)" & @CRLF & _
						"удерж. клавиша:" & @TAB & DllStructGetData($tInfo, "KeyFlags") & @TAB & "(0=ничего; 1=Alt, 2=Ctrl, 4=Shift, 3,5,6,7 - комбинации)")

				Case $LVN_KEYDOWN ; нажатие любой клавиши
					$tInfo = DllStructCreate($tagNMLVKEYDOWN, $lParam)
					Local $Key = DllStructGetData($tInfo, "VKey")
					If Number(StringRight(GUICtrlRead($hEdit), 2)) <> $Key Then GUICtrlSetData($hEdit, @CRLF & 'Нажата клавиша №: ' & $Key, 1)
					Switch $Key
						Case 113; F2
							$Tmp = _GUICtrlListView_GetSelectedIndices($hListView, True)
							If $Tmp[0] > 0 Then
								_GUICtrlListView_EditLabel($hListView, $Tmp[1])
								GUICtrlSetData($hEdit, 'Нажата клавиша F2' & @CRLF & 'Редактирование пункта ' & $Tmp[1])
								Return False
							Else
								GUICtrlSetData($hEdit, 'Нужно выделить пункт')
							EndIf
					EndSwitch

				Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW ; конец редактирования пункта
					$tInfo = DllStructCreate($tagNMLVDISPINFO, $lParam)
					Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
					If StringLen(DllStructGetData($tBuffer, "Text")) Then Return True

				Case $NM_RCLICK ; правый клик мышкой по пункту
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					GUICtrlSetData($hEdit, _
						"$NM_RCLICK" & @TAB & "одинарный клик ПРАВОЙ кнопкой мыши" & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom & @CRLF & _
						"идентификатор:" & @TAB & $iIDFrom & @TAB & "(порядковый номер элемента в GUI)" & @CRLF & _
						"код клика:" & @TAB & $iCode & @TAB & "(определяет правой или левой, двойной или одинарный клик мыши)" & @CRLF & _
						"№ пункта:" & @TAB & DllStructGetData($tInfo, "Index") & @TAB & "(номер строки, отсчёт от 0, -1 пустое пространство)" & @CRLF & _
						"№ колонки:" & @TAB & DllStructGetData($tInfo, "SubItem") & @TAB & "(отсчёт от 0)" & @CRLF & _
						"удерж. клавиша:" & @TAB & DllStructGetData($tInfo, "KeyFlags") & @TAB & "(0=ничего; 1=Alt, 2=Ctrl, 4=Shift, 3,5,6,7 - комбинации)")

				Case $NM_RDBLCLK ; правый двойной клик мышкой по пункту
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					GUICtrlSetData($hEdit, _
						"$NM_RDBLCLK" & @TAB & "ДВОЙНОЙ клик ПРАВОЙ кнопкой мыши" & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom & @CRLF & _
						"идентификатор:" & @TAB & $iIDFrom & @TAB & "(порядковый номер элемента в GUI)" & @CRLF & _
						"код клика:" & @TAB & $iCode & @TAB & "(определяет правой или левой, двойной или одинарный клик мыши)" & @CRLF & _
						"№ пункта:" & @TAB & DllStructGetData($tInfo, "Index") & @TAB & "(номер строки, отсчёт от 0, -1 пустое пространство)" & @CRLF & _
						"№ колонки:" & @TAB & DllStructGetData($tInfo, "SubItem") & @TAB & "(отсчёт от 0)" & @CRLF & _
						"удерж. клавиша:" & @TAB & DllStructGetData($tInfo, "KeyFlags") & @TAB & "(0=ничего; 1=Alt, 2=Ctrl, 4=Shift, 3,5,6,7 - комбинации)")
			EndSwitch
		Case Else
			; Обработка события кнопок
			Local Const $BCN_HOTITEMCHANGE = -1249
			Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
			Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code"), _
				$nID = DllStructGetData($tNMBHOTITEM, "IDFrom"), _
				$hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom"), _
				$dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags"), _
				$sText = ""

			Switch $nNotifyCode
				Case $BCN_HOTITEMCHANGE ; Win XP и выше
					If BitAND($dwFlags, 0x10) = 0x10 Then
						$sText = "наведена"
					ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
						$sText = "оставлена"
					EndIf
					GUICtrlSetData($hEdit, _
						'Кнопка "' & _GUICtrlButton_GetText($hCtrl) & '" ' & $sText & @CRLF & _
						'идентификатор' & @TAB & $nID & @CRLF & _
						"дескриптор:" & @TAB & $hWndFrom)
			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc