#include <GuiListBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

$Debug_LB = False ; Проверяет ClassName передаваемый в ListBox функции. Установите True и используйте дескриптор от другого элемента, чтобы увидеть как это работает

Global $hListBox

_Main()

Func _Main()
	Local $hGUI

	; Создаёт GUI
	$hGUI = GUICreate("Создаёт ListBox с помощью UDF", 400, 296)
	$hListBox = _GUICtrlListBox_Create($hGUI, "Строка при создании", 2, 2, 396, 296)
	GUISetState()

	MsgBox(4160, "Информация", "Добавление пунктов")

	GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

	; Добавляет файлы
	_GUICtrlListBox_BeginUpdate($hListBox)
	_GUICtrlListBox_ResetContent($hListBox)
	_GUICtrlListBox_InitStorage($hListBox, 100, 4096)
	_GUICtrlListBox_Dir($hListBox, @WindowsDir & "\win*.exe")
	_GUICtrlListBox_AddFile($hListBox, @WindowsDir & "\Notepad.exe")
	_GUICtrlListBox_Dir($hListBox, "", $DDL_DRIVES)
	_GUICtrlListBox_Dir($hListBox, "", $DDL_DRIVES, False)
	_GUICtrlListBox_EndUpdate($hListBox)

	; Цикл выполняется, пока окно не будет закрыто
	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg
	Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
	If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
	$hWndFrom = $ilParam
	$iIDFrom = BitAND($iwParam, 0xFFFF) ; младшее слово
	$iCode = BitShift($iwParam, 16) ; старшее слово

	Switch $hWndFrom
		Case $hListBox, $hWndListBox
			Switch $iCode
				Case $LBN_DBLCLK ; Высылается, когда пользователь сделал двойной клик на строке ListBox
					_DebugPrint("$LBN_DBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
				Case $LBN_ERRSPACE ; Высылается, когда ListBox не может выделить достаточно памяти для выполнения определённого запроса
					_DebugPrint("$LBN_ERRSPACE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
				Case $LBN_KILLFOCUS ; Высылается, когда ListBox теряет фокус
					_DebugPrint("$LBN_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
				Case $LBN_SELCANCEL ; Высылается, когда пользователь отменяет выбор в ListBox
					_DebugPrint("$LBN_SELCANCEL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
				Case $LBN_SELCHANGE ; Высылается, когда выбор в ListBox изменяется
					_DebugPrint("$LBN_SELCHANGE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
				Case $LBN_SETFOCUS ; Высылается, когда ListBox получает фокус
					_DebugPrint("$LBN_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
							"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
							"-->Code:" & @TAB & $iCode)
					; Нет возвращаемых значений
			EndSwitch
	EndSwitch
	; Продолжение обработчика внутренних команд AutoIt3.
	; Вы также можете завершить, используя строку с выходом из функции.
	; !!! Но только 'Return' (без значения) без продолжения
	; обработчика внутренних команд AutoIt3 в дальнейшем !!!
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _DebugPrint($s_text)
	$s_text = StringReplace($s_text, @LF, @LF & "-->")
	ConsoleWrite("!===========================================================" & @LF & _
			"+===========================================================" & @LF & _
			"-->" & $s_text & @LF & _
			"+===========================================================" & @LF)
EndFunc   ;==>_DebugPrint