Technomancer Posted May 24, 2013 Share Posted May 24, 2013 Hi, I downloaded a script for editing INI files. It works quite well but when the 'Exit' button is pressed the window closes but leaves the scrip running in the background. Running the script from Scite leaves 'AutoIT3.exe' running and i have to 'Kill' it manually. I've tried to trace the script. The EXIT button runs the '_exit' function but i can't find out where it's going wrong. Here's a part of it anyway, the function. func _exit() if $save = False Then Switch MsgBox(3+32+512+262144, "Exit", "Save changes before you exit?") case 6 ;yes _save_file(False) Exit case 7 ;no Exit EndSwitch Else Exit EndIf EndFunc I've even tried: func _exit Exit EndFunc but that doesn't work, the process is still running when you think the script has ended. Any Ideas? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 24, 2013 Moderators Share Posted May 24, 2013 Technomancer, To begin with, check that you are actually calling that function by adding a MsgBox as you enter it: Func _exit MsgBox(0, "Exit", "Function entered") Exit EndFunc M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Technomancer Posted May 24, 2013 Author Share Posted May 24, 2013 Hi. I put in the 'MsgBox' and that works OK. If I run the script from the 'Scite' editor I can use the 'CTRL+BREAK' buttons to stop the program but if i create an EXE file then i have to use something like the task manager. I don't know if there's a Loop that's running that doesn't stop when the 'Exit' keyword is used. I can send the full script if you want. It's a script i downloaded from somewhere a while ago and remembered it a few days ago. It could be a useful tool for anyone. Apart from the Exit problem it works quite well. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 24, 2013 Moderators Share Posted May 24, 2013 Technomancer, Just post it here. And please use Code tags - see here how to do it. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Technomancer Posted May 24, 2013 Author Share Posted May 24, 2013 OK Here it is. As an INI Editor it's quite good. expandcollapse popup#include <GUIConstantsEx.au3> #Include <Array.au3> #include <WindowsConstants.au3> #Include <GuiToolBar.au3> #include <Constants.au3> #include <GuiImageList.au3> #include <EditConstants.au3> #include <TreeViewConstants.au3> #include <GuiTreeView.au3> #include <ButtonConstants.au3> #Include <GuiButton.au3> #include <GuiEdit.au3> #Include <GuiMenu.au3> #include <file.au3> ; #NoTrayIcon $TVN_SELCHANGED = "" $TVN_ENDLABELEDIT = "" $TVN_BEGINLABELEDIT = "" $TVN_ITEMEXPANDING = "" $TVN_BEGINDRAG = "" Opt("GUICloseOnESC", 0) Global $save = True Global $iEditFlag = 0 Global $ITEM_ADDED1 = False Global $ITEM_ADDED2 = False Global $ITEM_ADDED3 = False Global $section_added = 0 Global $key_added = 0 Global $edit_mode = 0 Global $count_k = 1 Global $Last_search = "" Global $previous_searched_item Global $LastAddedChild Global $LastAddedKey Global $LastAddedSection Global $expanded = False Global $power_mode = False Global $just_edited = False Global $item_just_added = 0 Global $fDragging = False, $hDragItem, $fWhere, $moving_txt, $item_above_drag, $item_below_drag, $moving_item_is_key = false, $his_parent, $wProcOldLocal, $form3 Global $Startx, $Starty, $Endx, $Endy, $aM_Mask, $aMask Global $set_hotkeys = 0 Global $aUtil_MinMax[4] Dim $ini_section[1] Global $sToolTipData, $tooltip_x, $tooltip_y, $tooltip_timer, $display_tooltip = False, $tooltip_displayed = False, $display_infos = 1, $input5, $exit_loop = False Dim $tool_txt_array[1][1] Dim $aRecords dim $tooltips[1] Global $string_splitter = "/" Global $Last_hovered Global Const $VK_RETURN = 0x0D ;Enter key Global Const $VK_DELETE = 0x2E ;Del key Global Const $VK_ESC = 0x1B ;Esc key Global Const $VK_F2 = 0x71 ;F2 key Global Const $VK_APP = 0x5D ;Application key Global Enum $Save_only=2001, $Save_as1=2002 Global Enum $add_item_menu = 3001, $edit_item_menu = 3002, $delete_item_menu = 3003, $expand_item_menu = 3004, $colapse_item_menu = 3005 Global Enum $expand_all_menu = 3006, $colapse_all_menu = 3007, $gen_write_menu = 3008, $gen_read_menu = 3009, $tool_tips_menu = 3010, $tool_tip_add_menu = 3011 Global $dll = DllOpen("user32.dll") Global $prog_name = "Ini Editor v1.2" Global $Form1 = GUICreate($prog_name, 240+2, 500+28, -1, -1, $WS_SIZEBOX+$WS_MINIMIZEBOX+$WS_MAXIMIZEBOX) GUISetIcon("Shell32.dll", -70) GUISetBkColor(0xE0F0FE) Global $hToolbar = _GUICtrlToolbar_Create ($Form1, $WS_TABSTOP+0x00000800) _GUICtrlToolbar_SetExtendedStyle($hToolbar, $TBSTYLE_EX_DRAWDDARROWS) _GUICtrlToolbar_SetColorScheme($hToolbar, 16774367, 16774367) Global $idNew=1000, $idOpen=1001, $idSave=1002, $idHelp=1003, $idPower=1004 Global $hImage = _GUIImageList_Create(16, 16, 5, 3, 3) _GUIImageList_AddIcon($hImage, "Shell32.dll", 140) ;new 0 _GUIImageList_AddIcon($hImage, "Shell32.dll", 193);-7) ;save 1 _GUIImageList_AddIcon($hImage, "Shell32.dll", -9) ;open 2 _GUIImageList_AddIcon($hImage, "Shell32.dll", 131) ;exit 3 _GUIImageList_AddIcon($hImage, "Shell32.dll", 109) ;instant 4 _GUIImageList_AddIcon($hImage, "Shell32.dll", 137) ;normal 5 _GUICtrlToolbar_SetImageList($hToolbar, $hImage) $new_button_txt = _GUICtrlToolbar_AddString($hToolbar, "&New") $save_button_txt = _GUICtrlToolbar_AddString($hToolbar, "&Save") $open_button_txt = _GUICtrlToolbar_AddString($hToolbar, "&Open") $power_button_txt = _GUICtrlToolbar_AddString($hToolbar, "&Turbo") $Exit_button_txt = _GUICtrlToolbar_AddString($hToolbar, "E&xit") _GUICtrlToolbar_AddButton ($hToolbar, $idNew, 0, $new_button_txt) _GUICtrlToolbar_AddButton ($hToolbar, $idSave, 1, $save_button_txt, $BTNS_DROPDOWN) _GUICtrlToolbar_AddButton ($hToolbar, $idOpen, 2, $open_button_txt) _GUICtrlToolbar_AddButtonSep ($hToolbar) _GUICtrlToolbar_AddButton ($hToolbar, $idPower, 4, $power_button_txt) _GUICtrlToolbar_AddButtonSep ($hToolbar) _GUICtrlToolbar_AddButton ($hToolbar, $idHelp, 3, $Exit_button_txt) _GUICtrlToolbar_SetButtonStyle($hToolbar, $idPower, $BTNS_CHECK) _GUICtrlToolbar_SetButtonWidth($hToolbar, 37, 37) Global $dir_input = GUICtrlCreateInput("No file loaded", 0, 40+10, 240, 20, $ES_READONLY+$ES_AUTOHSCROLL) GUICtrlSetBkColor(-1, 0x003D79) GUICtrlSetColor(-1, 0xEDF3FE) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKHEIGHT) Global $add_item_button = GUICtrlCreateButton("&Add", 0, 60+10, 61, 22, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) _GUICtrlButton_SetImageList(-1, _set_button_image(146), 5) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKSIZE) Global $edit_item_button = GUICtrlCreateButton("&Edit", 60, 60+10, 61, 22, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) _GUICtrlButton_SetImageList(-1, _set_button_image(-22), 5) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKSIZE) Global $delete_item_button = GUICtrlCreateButton("Delete", 120, 60+10, 61, 22, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) _GUICtrlButton_SetImageList(-1, _set_button_image(31), 5) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKSIZE) Global $find_item_button = GUICtrlCreateButton("&Find", 180, 60+10, 60, 22, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) _GUICtrlButton_SetImageList(-1, _set_button_image(22), 5) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKSIZE) Global $button_gen_code = GUICtrlCreateButton("&Generate AU3 Code", 0, 458, 240, 22, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) _GUICtrlButton_SetImageList(-1, _set_button_image(165), 5) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT+$GUI_DOCKRIGHT) Global $val_input = GUICtrlCreateInput("", 50, 480, 190, 20, $ES_READONLY+$ES_AUTOHSCROLL) GUICtrlSetBkColor(-1, 0x003D79) GUICtrlSetColor(-1, 0xEDF3FE) GUICtrlSetFont(-1, -1, 800) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKHEIGHT+$GUI_DOCKRIGHT) $val_label = GUICtrlCreateLabel("Value:", 5, 483, 40, 17) GUICtrlSetBkColor(-1, 0xD0D0D0) GUICtrlSetColor(-1, 0x003D79) GUICtrlSetFont(-1, -1, 800) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE) GUICtrlCreateGraphic(0, 480, 50, 20) GUICtrlSetBkColor(-1, 0x003D79) GUICtrlSetState(-1, $GUI_DISABLE) $back2 = GUICtrlCreateGraphic(0, 91, @DesktopWidth, @DesktopHeight) GUICtrlSetBkColor(-1, 0xD0D0D0) GUICtrlSetState(-1, $GUI_DISABLE) Global $find_input = GUICtrlCreateInput("", 0, 439, 100, 19, $ES_AUTOHSCROLL) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE) Global $button_find_next = GUICtrlCreateButton("Find Next", 100, 439, 55, 20, $BS_FLAT+$BS_NOTIFY) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE) Global $match_check = GUICtrlCreateCheckbox("&Match", 160, 440, 50, 17) GUICtrlSetBkColor(-1, 0xD0D0D0) GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE) Global $button_close_find = GUICtrlCreateButton("", 223, 440, 16, 16, $BS_ICON, $WS_EX_CLIENTEDGE) GUICtrlSetImage(-1, "Shell32.dll", -132, 0) GUICtrlSetResizing(-1, $GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE) GUICtrlSetState($find_input, $GUI_HIDE) GUICtrlSetState($match_check, $GUI_HIDE) GUICtrlSetState($button_find_next, $GUI_HIDE) GUICtrlSetState($button_close_find, $GUI_HIDE) Global $treeview = _GUICtrlTreeView_Create($Form1, 0, 92, 240, 366, BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVIS_DROPHILITED, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS, $WS_TABSTOP));, $WS_EX_CLIENTEDGE) _GUICtrlTreeView_SetTextColor($treeview, 0x003D79) _GUICtrlTreeView_SetBkColor($treeview, 0xEDF3FE) $size_client = WinGetClientSize($form1) $size_treeview = ControlGetPos($form1, "", $treeview) $previous_x_dif = $size_client[0]-$size_treeview[0]-$size_treeview[2] $previous_y_dif = $size_client[1]-$size_treeview[1]-$size_treeview[3] Global $hImage3 = _GUIImageList_Create(16, 16, 5, 3) _GUIImageList_AddIcon($hImage3, "shell32.dll", 166) _GUIImageList_AddIcon($hImage3, "shell32.dll", 199) _GUIImageList_AddIcon($hImage3, "shell32.dll", 165) _GUIImageList_AddIcon($hImage3, "shell32.dll", 137) _GUICtrlTreeView_SetNormalImageList($treeview, $hImage3) _GUICtrlTreeView_SetInsertMarkColor($treeview, 13005581) ControlFocus($form1, "", $treeview) GUISetState(@SW_SHOW, $Form1) initMinMax(248,220,@DesktopWidth,@DesktopHeight) Global $position = WinGetPos($Form1) Global $client = WinGetClientSize($Form1) Global $light_border = ($position[2]-$client[0])/2 Global $thick_border = $position[3]-$client[1]-$light_border Global $x_coord = $position[0]+$light_border Global $y_coord = $position[1]+$thick_border Global $gw = 16 Global $gh = 16 $drag_gui = GUICreate("Drag", $gw, $gh, $x_coord, $y_coord, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST), $Form1) GUISetBkColor(0xEDF3FE, $drag_gui) $cursor_icon = GUICtrlCreateIcon("Shell32.dll", -147, 0, 0, 16, 16) GUISetState(@SW_SHOWNOACTIVATE, $drag_gui) setTrans() GUISetState(@SW_HIDE, $drag_gui) GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE") GUIRegisterMsg($WM_SIZE, "WM_SIZE") Global $wProcHandle = DllCallbackRegister("_WindowProc", "int", "hwnd;uint;wparam;lparam") Global $wProcHandle2 = DllCallbackRegister("_EditWindowProc", "ptr", "hwnd;uint;wparam;lparam") Global $wProcOld = _WinAPI_SetWindowLong($treeview, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle)) Global $wProcOldLocal2 = _WinAPI_SetWindowLong(GUICtrlGetHandle($find_input), $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle2)) _check_for_hotkeys() While 1 if $fDragging = True then chase() if $just_edited = True Then $just_edited = False Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $get = _get_level() Switch $get case 1 ;Key GUICtrlSetData($val_input, _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetFirstChild($treeview, $curent))) case 2 ;Section GUICtrlSetData($val_input, "") case 3 ;Value GUICtrlSetData($val_input, _GUICtrlTreeView_GetText($treeview, $curent)) EndSwitch EndIf if $save = False AND _GUICtrlToolbar_GetButtonText($hToolbar, $idSave) = "&Save" then _GUICtrlToolbar_SetButtonText($hToolbar, $idSave, "&Save*") ElseIf $save = True AND _GUICtrlToolbar_GetButtonText($hToolbar, $idSave) = "&Save*" Then _GUICtrlToolbar_SetButtonText($hToolbar, $idSave, "&Save") EndIf $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _exit() case $add_item_button _add_item() case $edit_item_button _TextEdit() case $delete_item_button _delete_item() case $button_gen_code _generate_full_code() case $find_item_button _find_item_input() case $button_close_find _close_find() case $button_find_next _find_item() case $GUI_EVENT_PRIMARYDOWN Local $hItem = _GUICtrlTreeView_GetSelection($treeview) If $hItem Then _GUICtrlTreeView_SelectItem($treeview, $hItem) case $GUI_EVENT_MOUSEMOVE If $fDragging = False Then if $display_infos then Local $bHwnd = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1)) Local $hItem5 = TreeItemFromPoint($treeview) If $hItem5 Then Local $aItem_Rect = _GUICtrlTreeView_DisplayRect($treeview, $hItem5) Local $aLV_Pos = WinGetPos($treeview) $sToolTipData = _get_tooltxt($hItem5) Local $x_movement Local $get = _get_level2($hItem5) Switch $get case 1 $x_movement = 105 case 2 $x_movement = 90 case 3 $x_movement = 120 EndSwitch $tooltip_x = $aLV_Pos[0]+$aItem_Rect[0]+$x_movement $tooltip_y = $aLV_Pos[1]+$aItem_Rect[1]+18 ToolTip($sToolTipData, $tooltip_x, $tooltip_y) Else ToolTip("") EndIf endif Else Local $aHwnd = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1)) Local $hItemHover = TreeItemFromPoint($treeview) If $hItemHover <> 0 Then $aRect = _GUICtrlTreeView_DisplayRect($treeview, $hItemHover) $iTreeY = _WinAPI_GetMousePosY(True, $treeview) Switch $iTreeY Case $aRect[1] To $aRect[1]+Int(($aRect[3]-$aRect[1])/4) if $fWhere <> -1 Then _GUICtrlTreeView_SetInsertMark($treeview, $hItemHover, False) $fWhere = -1 EndIf Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])/3) To $aRect[1]+Int(($aRect[3]-$aRect[1])*2/3) if $fWhere <> 0 Then _SendMessage($treeview, $TVM_SETINSERTMARK, 0, 0) $fWhere = 0 EndIf Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])*2/3) To $aRect[3] if $fWhere <> 1 Then _GUICtrlTreeView_SetInsertMark($treeview, $hItemHover) $fWhere = 1 EndIf EndSwitch EndIf EndIf Case $GUI_EVENT_PRIMARYUP If $fDragging Then GUISetState(@SW_HIDE, $drag_gui) ToolTip("") _WinAPI_ShowCursor(True) _WinAPI_InvalidateRect($treeview) $fDragging = False _SendMessage($treeview, $TVM_SETINSERTMARK, 0, 0) If (TreeItemFromPoint($treeview) = $hDragItem) Then ContinueCase if $moving_item_is_key = False and _get_level2(TreeItemFromPoint($treeview)) <> 2 then ContinueCase if $moving_item_is_key = true and _get_level2(TreeItemFromPoint($treeview)) <> 1 then ContinueCase if $moving_item_is_key = true and _GUICtrlTreeView_GetChildCount($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $hDragItem)) = 1 Then ContinueCase if $fWhere <> 0 then $hItem = TreeItemCopy($treeview, $hDragItem, TreeItemFromPoint($treeview), $fWhere) If $hItem <> 0 Then _GUICtrlTreeView_SelectItem($treeview, $hItem) _delete_tooltxt($hDragItem) _GUICtrlTreeView_Delete($treeview, $hDragItem) EndIf $save = False EndIf EndIf EndSwitch WEnd func OnAutoItExit() _WinAPI_SetWindowLong($treeview, $GWL_WNDPROC, $wProcOld) _WinAPI_SetWindowLong(GUICtrlGetHandle($find_input), $GWL_WNDPROC, $wProcOldLocal2) DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) DllClose($dll) EndFunc Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam) #forceref $hWndGUI, $MsgID, $wParam Local $tNMHDR, $event, $hwndFrom, $code, $i_idNew, $dwFlags, $lResult, $idFrom, $i_idOld, $tInfo Local $tNMTOOLBAR, $tNMTBHOTITEM $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hwndFrom = DllStructGetData($tNMHDR, "hWndFrom") $idFrom = DllStructGetData($tNMHDR, "IDFrom") $code = DllStructGetData($tNMHDR, "Code") If $code = $TBN_DROPDOWN Then $hMenu = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_AddMenuItem($hMenu, "Save" & @TAB & "Ctrl+S", $Save_only) _GUICtrlMenu_AddMenuItem($hMenu, "Save As..." & @TAB & "Ctrl+Shift+S", $Save_as1) $hBrush = _WinAPI_GetSysColorBrush($COLOR_INFOBK) _GUICtrlMenu_SetMenuBackground($hMenu, $hBrush) _GUICtrlMenu_SetMenuDefaultItem($hMenu, 0) _GUICtrlMenu_TrackPopupMenu($hMenu, $Form1) _GUICtrlMenu_DestroyMenu($hMenu) EndIf Switch $hwndFrom case $treeview Switch $code case $NM_RCLICK ; Right Mouse Click if $display_infos then ToolTip("") if $fDragging = True Then _cancel_dragging() Else Local $tInfo = DllStructCreate($tagNMTREEVIEW, $lParam) Local $hNewItem = DllStructGetData($tInfo, "NewParam") _GUICtrlTreeView_SelectItem($treeview, $hNewItem) _right_menu($hNewItem) EndIf Return 0 Case $TVN_SELCHANGED, $TVN_SELCHANGEDW if NOT $item_just_added then Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $get = _get_level() Switch $get case 1 ;Key GUICtrlSetData($val_input, _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetFirstChild($treeview, $curent))) _no_flash_disable($add_item_button, False) if _GUICtrlTreeView_GetChildCount($treeview, _GUICtrlTreeView_GetParentHandle($treeview, _GUICtrlTreeView_GetSelection($treeview))) = 1 Then _no_flash_disable($delete_item_button) Else _no_flash_disable($delete_item_button, False) EndIf case 2 ;Section GUICtrlSetData($val_input, "") _no_flash_disable($add_item_button, False) _no_flash_disable($delete_item_button, False) case 3 ;Value GUICtrlSetData($val_input, _GUICtrlTreeView_GetText($treeview, $curent)) _no_flash_disable($add_item_button) _no_flash_disable($delete_item_button) EndSwitch Else $item_just_added = 0 EndIf _GUICtrlTreeView_SetRemoveMark($treeview) Case $TVN_ENDLABELEDIT, $TVN_ENDLABELEDITW if $display_infos then ToolTip("") HotKeySet("{Enter}") HotKeySet("{Esc}") Local $curent = _GUICtrlTreeView_GetSelection($treeview) if $ITEM_ADDED1 = True Then HotKeySet("{Enter}", "_TextSet") HotKeySet("{Esc}", "_EditClose") $ITEM_ADDED1 = False $ITEM_ADDED2 = True _GUICtrlTreeView_EditText($treeview, _GUICtrlTreeView_GetNext($treeview, $LastAddedSection)) ElseIf $ITEM_ADDED2 = True Then HotKeySet("{Enter}", "_TextSet") HotKeySet("{Esc}", "_EditClose") $ITEM_ADDED2 = False _GUICtrlTreeView_EditText($treeview, _GUICtrlTreeView_GetNext($treeview, _GUICtrlTreeView_GetNext($treeview, $LastAddedSection))) _GUICtrlTreeView_SelectItem($treeview, $LastAddedSection, 0) ElseIf $ITEM_ADDED3 = True then _no_flash_disable($delete_item_button, False) HotKeySet("{Enter}", "_TextSet") HotKeySet("{Esc}", "_EditClose") $ITEM_ADDED3 = False _GUICtrlTreeView_EditText($treeview, $LastAddedChild) _GUICtrlTreeView_SelectItem($treeview, $LastAddedKey, 0) EndIf if $power_mode = True Then if NOT $edit_mode Then if $section_added Then if $count_k = 3 Then _GUICtrlTreeView_Expand($treeview, $curent, False) $section_added = 0 $count_k = 1 Else $count_k += 1 EndIf ElseIf $key_added Then if $count_k = 2 Then _GUICtrlTreeView_Expand($treeview, $curent, False) $key_added = 0 $count_k = 1 Else $count_k += 1 EndIf EndIf else if $expanded = false Then _GUICtrlTreeView_Expand($treeview, $curent, False) EndIf $edit_mode = 0 EndIf EndIf If $iEditFlag Then $iEditFlag = 0 Local $tInfo = DllStructCreate($tagNMTVDISPINFO, $lParam) Local $sBuffer = DllStructCreate("wchar Text[" & DllStructGetData($tInfo, "TextMax") & "]") If Not _GUICtrlTreeView_GetUnicodeFormat($HwndFrom) Then $sBuffer = StringTrimLeft($sBuffer, 1) DllStructSetData($sBuffer, "Text", DllStructGetData($tInfo, "Text")) If StringLen(DllStructGetData($sBuffer, "Text")) Then $save = False $just_edited = True Return 1 EndIf EndIf case $NM_KILLFOCUS if $display_infos then ToolTip("") Case $TVN_ITEMEXPANDING, $TVN_ITEMEXPANDINGW if $display_infos then ToolTip("") Case $TVN_BEGINLABELEDIT, $TVN_BEGINLABELEDITW if $display_infos then ToolTip("") HotKeySet("{Enter}", "_TextSet") HotKeySet("{Esc}", "_EditClose") Case $TVN_BEGINDRAG, $TVN_BEGINDRAGW if $display_infos then ToolTip("") Local $tInfo = DllStructCreate($tagNMTREEVIEW, $lParam) Local $hNewItem = DllStructGetData($tInfo, "NewhItem") _GUICtrlTreeView_SelectItem($treeview, $hNewItem) Local $get = _get_level2($hNewItem) if $get = 3 then ContinueCase if $get = 2 Then $moving_item_is_key = False elseif $get = 1 Then $moving_item_is_key = True $his_parent = _GUICtrlTreeView_GetParentHandle($treeview, $hNewItem) EndIf $hDragItem = $hNewItem $item_above_drag = GetNeighbourItem($treeview, $hDragItem) $item_below_drag = GetNeighbourItem($treeview, $hDragItem, false) $fDragging = True $moving_txt = "Moving: " & _GUICtrlTreeView_GetText($treeview, $hNewItem) _WinAPI_ShowCursor(False) GUISetState(@SW_SHOWNOACTIVATE, $drag_gui) HotKeySet("{Esc}", "_cancel_dragging2") tooltip($moving_txt, MouseGetPos(0)+18, MouseGetPos(1)) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) Switch $iwParam Case $Save_only _save_file(False) Case $Save_as1 _save_file() case $idSave _save_file(False) case $idHelp _exit() case $idNew _new_file() case $idOpen _open_file() case $idPower _turn_power_mode() case $add_item_menu _add_item() Case $delete_item_menu _delete_item() Case $edit_item_menu() _TextEdit() Case $expand_item_menu _expand_selected() Case $colapse_item_menu _colapse_selected() case $expand_all_menu _expand_all() case $colapse_all_menu _colapse_all() Case $gen_write_menu _Generate_in_code() Case $gen_read_menu _generate_out_code() case $tool_tips_menu if $display_infos = 1 Then $display_infos = 0 Else $display_infos = 1 EndIf case $tool_tip_add_menu _create_tool_tip_window() if $display_infos then ToolTip("") EndSwitch #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit If Not IsHWnd($find_input) Then $hWndEdit = GUICtrlGetHandle($find_input) $hWndFrom = $ilParam $iIDFrom = _WinAPI_LoWord($iwParam) $iCode = _WinAPI_HiWord($iwParam) Switch $hWndFrom Case $find_input, $hWndEdit Switch $iCode Case 1024 _find_item(True) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam) Local $wActive = BitAND($wParam, 0x0000FFFF) _set_hotkeys($wActive) Return $GUI_RUNDEFMSG EndFunc Func WM_SIZE($hWnd, $Msg, $wParam, $lParam) $size_client = WinGetClientSize($form1) $size_treeview = ControlGetPos($form1, "", $treeview) Local $new_width_treeview = $size_client[0]-$previous_x_dif-$size_treeview[0] Local $new_height_treeview = $size_client[1]-$previous_y_dif-$size_treeview[1] _WinAPI_MoveWindow($treeview, $size_treeview[0], $size_treeview[1], $new_width_treeview, $new_height_treeview, True) Return $GUI_RUNDEFMSG EndFunc Func _WindowProc($hWnd, $Msg, $wParam, $lParam) Switch $hWnd Case $treeview Switch $Msg Case $WM_GETDLGCODE Switch $wParam Case $VK_RETURN _TextEdit() Return 0 Case $VK_DELETE Local $curent = _GUICtrlTreeView_GetSelection($treeview) if _GUICtrlTreeView_GetChildren($treeview, $curent) = true then Local $get = _get_level() Switch $get case 1 if _GUICtrlTreeView_GetChildCount($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent)) > 1 Then _delete_tooltxt($curent) _GUICtrlTreeView_Delete($treeview, $curent) _no_flash_disable($delete_item_button, False) Else _no_flash_disable($delete_item_button) EndIf case 2 _delete_tooltxt($curent) _GUICtrlTreeView_Delete($treeview, $curent) EndSwitch EndIf $save = False Case $VK_F2 _TextEdit() case $VK_ESC Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $parent4 = _GUICtrlTreeView_GetParentHandle($treeview, $curent) if $parent4 Then _GUICtrlTreeView_SelectItem($treeview, $parent4) _GUICtrlTreeView_Expand($treeview, $parent4, False) EndIf ToolTip("") case $VK_APP Local $curent = _GUICtrlTreeView_GetSelection($treeview) _right_menu($curent) EndSwitch EndSwitch EndSwitch if $hWnd = $treeview then Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam) EndFunc Func _EditWindowProc($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam Switch $hWnd case GUICtrlGetHandle($input5) Switch $iMsg Case $WM_GETDLGCODE Switch $wParam Case $VK_RETURN _tooltip_ok() $exit_loop = True case $VK_ESC _tooltip_cancel() $exit_loop = True EndSwitch EndSwitch case GUICtrlGetHandle($find_input) Switch $iMsg Case $WM_GETDLGCODE Switch $wParam Case $VK_RETURN _find_item() case $VK_ESC _close_find() EndSwitch EndSwitch EndSwitch if $hWnd = GUICtrlGetHandle($input5) then Return _WinAPI_CallWindowProc($wProcOldLocal, $hWnd, $iMsg, $wParam, $lParam) if $hWnd = GUICtrlGetHandle($find_input) then Return _WinAPI_CallWindowProc($wProcOldLocal2, $hWnd, $iMsg, $wParam, $lParam) EndFunc Func initMinMax($x0,$y0,$x1,$y1) Local Const $WM_GETMINMAXINFO = 0x24 $aUtil_MinMax[0]=$x0 $aUtil_MinMax[1]=$y0 $aUtil_MinMax[2]=$x1 $aUtil_MinMax[3]=$y1 GUIRegisterMsg($WM_GETMINMAXINFO,'MY_WM_GETMINMAXINFO') EndFunc Func MY_WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam) Local $minmaxinfo = DllStructCreate('int;int;int;int;int;int;int;int;int;int',$lParam) DllStructSetData($minmaxinfo,7,$aUtil_MinMax[0]); min X DllStructSetData($minmaxinfo,8,$aUtil_MinMax[1]); min Y DllStructSetData($minmaxinfo,9,$aUtil_MinMax[2]); max X DllStructSetData($minmaxinfo,10,$aUtil_MinMax[3]); max Y Return $GUI_RUNDEFMSG EndFunc func _check_for_hotkeys() Local $wActive = WinActive($form1) _set_hotkeys($wActive) EndFunc func _set_hotkeys($win_active) If $win_active Then HotKeySet("^s", "_save_dummy") HotKeySet("^+s", "_save_dummy2") HotKeySet("^o", "_open_file") HotKeySet("^n", "_new_file") HotKeySet("^f", "_find_item_input") HotKeySet("^{ENTER}", "_expand_selected") HotKeySet("^+{ENTER}", "_expand_all") HotKeySet("^{BS}", "_colapse_selected") HotKeySet("^+{BS}", "_colapse_all") Else HotKeySet("^s") HotKeySet("^+s") HotKeySet("^o") HotKeySet("^n") HotKeySet("^f") HotKeySet("^{ENTER}") HotKeySet("^+{ENTER}") HotKeySet("^{BS}") HotKeySet("^+{BS}") EndIf EndFunc func _right_menu($hWnd) Local $get = _get_level2($hWnd) $hMenu2 = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_AddMenuItem($hMenu2, "Add Item" & @TAB & "(Alt+A)", $add_item_menu) if $get =3 then _GUICtrlMenu_SetItemDisabled($hMenu2, 0) _GUICtrlMenu_AddMenuItem($hMenu2, "Edit Item" & @TAB & "(F2)", $edit_item_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "Delete Item" & @TAB & "(Del)", $delete_item_menu) if $get = 1 and _GUICtrlTreeView_GetChildCount($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $hWnd)) = 1 Then _GUICtrlMenu_SetItemDisabled($hMenu2, 2) if $get = 3 then _GUICtrlMenu_SetItemDisabled($hMenu2, 2) _GUICtrlMenu_AddMenuItem($hMenu2, "") _GUICtrlMenu_AddMenuItem($hMenu2, "Display Description(s)", $tool_tips_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "Add/Edit Description", $tool_tip_add_menu) if $display_infos then _GUICtrlMenu_SetItemChecked($hMenu2, 4) Else _GUICtrlMenu_SetItemDisabled($hMenu2, 5) _GUICtrlMenu_SetItemChecked($hMenu2, 4, False) EndIf _GUICtrlMenu_AddMenuItem($hMenu2, "") _GUICtrlMenu_AddMenuItem($hMenu2, "Expand Selected", $expand_item_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "Colapse Selected", $colapse_item_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "") _GUICtrlMenu_AddMenuItem($hMenu2, "Expand All", $expand_all_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "Colapse All", $colapse_all_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "") _GUICtrlMenu_AddMenuItem($hMenu2, "Generate WriteIni Code", $gen_write_menu) _GUICtrlMenu_AddMenuItem($hMenu2, "Generate ReadIni Code", $gen_read_menu) if $get = 2 Then _GUICtrlMenu_SetItemDisabled($hMenu2, 13) _GUICtrlMenu_SetItemDisabled($hMenu2, 14) EndIf Local $hItem = _GUICtrlTreeView_GetSelection($treeview) If NOT $hItem Then for $i = 0 to 14 if $i <> 4 then _GUICtrlMenu_SetItemDisabled($hMenu2, $i) Next EndIf $hBrush = _WinAPI_GetSysColorBrush($COLOR_INFOBK) _GUICtrlMenu_SetMenuBackground($hMenu2, $hBrush) _GUICtrlMenu_SetItemDisabled($hMenu2, $delete_item_menu) _GUICtrlMenu_TrackPopupMenu($hMenu2, $Form1) _GUICtrlMenu_DestroyMenu($hMenu2) EndFunc func _create_gen_code_window($icode_gen = "", $window_subname = "") GUISetState(@SW_DISABLE, $Form1) Local $form2 = GUICreate("Generated AU3 Code" & " (" & $window_subname & ")", 300+2, 460+28, -1, -1, $WS_SIZEBOX+$WS_MINIMIZEBOX+$WS_MAXIMIZEBOX, -1, $Form1) GUISetIcon("Shell32.dll", -70, $form2) GUISetBkColor(0xE0F0FE, $form2) Local $edit_gen_code = GUICtrlCreateEdit($icode_gen, 0, 0, 300, 420) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKLEFT) GUICtrlSetColor(-1, 0x003D79) GUICtrlSetBkColor(-1, 0xE0F0FE) Local $button_copy_code = GUICtrlCreateButton("&Copy to clipboard", 76, 425, 140, 30) _GUICtrlButton_SetImageList(-1, _set_button_image(176), 5) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT+$GUI_DOCKRIGHT) Local $button_close_code = GUICtrlCreateButton("Close", 220, 425, 75, 30) _GUICtrlButton_SetImageList(-1, _set_button_image(131), 5) GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT+$GUI_DOCKRIGHT) GUISetState(@SW_SHOW, $form2) While 1 Local $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $button_close_code GUISetState(@SW_ENABLE, $Form1) GUIDelete($form2) ExitLoop case $button_copy_code _copy_generated_code($edit_gen_code) EndSwitch WEnd EndFunc Func _create_tool_tip_window() $exit_loop = False Local $curent = _GUICtrlTreeView_GetSelection($treeview) GUISetState(@SW_DISABLE, $form1) $form3 = GUICreate("enter new description", 160, 100, $tooltip_x, $tooltip_y, $WS_POPUP, -1, $form1) GUISetBkColor(0xFFFFE1, $form3) $input5 = GUICtrlCreateEdit(StringReplace(StringReplace(_get_tooltxt($curent), @CRLF, " "), " ", " "), 0, 0, 160, 80, $WS_VSCROLL+$ES_AUTOVSCROLL+$WS_TABSTOP+$ES_MULTILINE, $WS_EX_CLIENTEDGE) GUICtrlSetBkColor(-1, 0xFFFFE1) Local $button_ok = GUICtrlCreateButton("OK", 0, 80, 80, 20) GUICtrlSetBkColor(-1, 0xFFFFE1) Local $button_cancel = GUICtrlCreateButton("Cancel", 80, 80, 80, 20) GUICtrlSetBkColor(-1, 0xFFFFE1) $wProcOldLocal = _WinAPI_SetWindowLong(GUICtrlGetHandle($input5), $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle2)) GUISetState(@SW_SHOW, $form3) While 1 if $exit_loop = true then ExitLoop Local $nMsg = GUIGetMsg() Switch $nMsg case $button_ok _tooltip_ok() ExitLoop case $button_cancel _tooltip_cancel() ExitLoop EndSwitch WEnd EndFunc func _tooltip_ok() Local $curent = _GUICtrlTreeView_GetSelection($treeview) _add_tooltxt($curent, GUICtrlRead($input5)) GUISetState(@SW_ENABLE, $form1) _WinAPI_SetWindowLong(GUICtrlGetHandle($input5), $GWL_WNDPROC, $wProcOldLocal) GUIDelete($form3) $save = False EndFunc func _tooltip_cancel() GUISetState(@SW_ENABLE, $form1) _WinAPI_SetWindowLong(GUICtrlGetHandle($input5), $GWL_WNDPROC, $wProcOldLocal) GUIDelete($form3) EndFunc func _exit() if $save = False Then Switch MsgBox(3+32+512+262144, "Exit", "Save changes before you exit?") case 6 ;yes _save_file(False) Exit case 7 ;no Exit EndSwitch Else Exit EndIf EndFunc func _set_button_image($icon_index) Local $hImage_Temp = _GUIImageList_Create(16, 16, 5, 3) _GUIImageList_AddIcon($hImage_Temp, "Shell32.dll", $icon_index) return $hImage_Temp EndFunc func _new_file() if _GUICtrlTreeView_GetCount($treeview) <> 0 Then if $save = False Then Switch MsgBox(3+32+512+262144, "New File", "Save changes before you start new file?") case 6 ;yes _save_file(False) _GUICtrlTreeView_BeginUpdate($treeview) _GUICtrlTreeView_DeleteAll($treeview) _GUICtrlTreeView_EndUpdate($treeview) GUICtrlSetData($dir_input, "New file, Not saved yet") $save = True _clear_tooltip_txt() case 7 ;no _GUICtrlTreeView_BeginUpdate($treeview) _GUICtrlTreeView_DeleteAll($treeview) _GUICtrlTreeView_EndUpdate($treeview) GUICtrlSetData($dir_input, "New file, Not saved yet") $save = True _clear_tooltip_txt() EndSwitch Else _GUICtrlTreeView_BeginUpdate($treeview) _GUICtrlTreeView_DeleteAll($treeview) _GUICtrlTreeView_EndUpdate($treeview) GUICtrlSetData($dir_input, "New file, Not saved yet") $save = True _clear_tooltip_txt() EndIf Else GUICtrlSetData($dir_input, "New file, Not saved yet") $save = True _clear_tooltip_txt() EndIf EndFunc Func _FileSaveDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0) Local $iFileLen = 65536 ; Max chars in returned string ; API flags prepare Local $iFlag = BitOR (BitShift (BitAND ($iOpt, 2),-10), BitShift (BitAND ($iOpt,16), 3 )) ; Filter string to array convertion Local $asFLines = StringSplit ( $sFilter, '|'), $asFilter [$asFLines [0] *2+1] Local $i, $iStart, $iFinal, $suFilter = '' $asFilter [0] = $asFLines [0] *2 For $i=1 To $asFLines [0] $iStart = StringInStr ($asFLines [$i], '(', 0, 1) $iFinal = StringInStr ($asFLines [$i], ')', 0,-1) $asFilter [$i*2-1] = StringStripWS (StringLeft ($asFLines [$i], $iStart-1), 3) $asFilter [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($asFLines [$i], $iStart), StringLen ($asFLines [$i]) -$iFinal+1), 3) $suFilter = $suFilter & 'char[' & StringLen ($asFilter [$i*2-1])+1 & '];char[' & StringLen ($asFilter [$i*2])+1 & '];' Next ; Create API structures Local $uOFN = DllStructCreate ('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _ ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword' ) Local $usTitle = DllStructCreate ('char[' & StringLen ($sTitle) +1 & ']') Local $usInitDir= DllStructCreate ('char[' & StringLen ($sInitDir) +1 & ']') Local $usFilter = DllStructCreate ($suFilter & 'char') Local $usFile = DllStructCreate ('char[' & $iFileLen & ']') Local $usExtn = DllStructCreate ('char[' & StringLen ($sDefaultExt) +1 & ']') For $i=1 To $asFilter [0] DllStructSetData ($usFilter, $i, $asFilter [$i]) Next ; Set Data of API structures DllStructSetData ($usTitle, 1, $sTitle) DllStructSetData ($usInitDir, 1, $sInitDir) DllStructSetData ($usFile, 1, $sDefaultFile) DllStructSetData ($usExtn, 1, $sDefaultExt) DllStructSetData ($uOFN, 1, DllStructGetSize($uOFN)) DllStructSetData ($uOFN, 2, $mainGUI) DllStructSetData ($uOFN, 4, DllStructGetPtr ($usFilter)) DllStructSetData ($uOFN, 7, 1) DllStructSetData ($uOFN, 8, DllStructGetPtr ($usFile)) DllStructSetData ($uOFN, 9, $iFileLen) DllStructSetData ($uOFN, 12, DllStructGetPtr ($usInitDir)) DllStructSetData ($uOFN, 13, DllStructGetPtr ($usTitle)) DllStructSetData ($uOFN, 14, $iFlag) DllStructSetData ($uOFN, 17, DllStructGetPtr ($usExtn)) DllStructSetData ($uOFN, 23, BitShift (BitAND ($iOpt, 32), 5)) ; Call API function $ret = DllCall ('comdlg32.dll', 'int', 'GetSaveFileName', _ 'ptr', DllStructGetPtr ($uOFN) ) If $ret [0] Then Return DllStructGetData ($usFile, 1) Else SetError (1) Return "" EndIf EndFunc Func _save_to_file($save_file_dir) if FileExists($save_file_dir) then FileDelete($save_file_dir) FileWrite($save_file_dir, "") Local $Sections = _get_Section_count() if $Sections <> -1 then Local $Keys for $i = 1 to $Sections[0] $Keys = _get_key($Sections[$i]) if $Keys <> -1 Then for $j = 1 to $Keys[0][0] IniWrite($save_file_dir, _GUICtrlTreeView_GetText($treeview, $Sections[$i]), _GUICtrlTreeView_GetText($treeview, $Keys[$j][0]), _GUICtrlTreeView_GetText($treeview, $Keys[$j][1])) if _get_tooltxt($Keys[$j][0]) <> "" then _FileWriteToLine($save_file_dir, _FileCountLines($save_file_dir), ";//*//" & _GUICtrlTreeView_GetText($treeview, $Sections[$i]) _ & "/" & _GUICtrlTreeView_GetText($treeview, $Keys[$j][0]) & "//*//" & StringReplace(StringReplace(_get_tooltxt($Keys[$j][0]), @CRLF, " "), " ", " ")) if _get_tooltxt($Keys[$j][1]) <> "" then _FileWriteToLine($save_file_dir, _FileCountLines($save_file_dir), ";//*//" & _GUICtrlTreeView_GetText($treeview, $Sections[$i]) _ & "/" & _GUICtrlTreeView_GetText($treeview, $Keys[$j][0]) & "/" & _GUICtrlTreeView_GetText($treeview, $Keys[$j][1]) & "//*//" & StringReplace(StringReplace(_get_tooltxt($Keys[$j][1]), @CRLF, " "), " ", " ")) Next EndIf if _get_tooltxt($Sections[$i]) <> "" then _FileWriteToLine($save_file_dir, _FileCountLines($save_file_dir), ";//*//" & _GUICtrlTreeView_GetText($treeview, $Sections[$i]) _ & "//*//" & StringReplace(StringReplace(_get_tooltxt($Sections[$i]), @CRLF, " "), " ", " ")) Next EndIf GUICtrlSetData($dir_input, $save_file_dir) EndFunc func _get_save_file($newname = "New File") Local $save_file_dir = "" $rectype = False $save_file_dir = _FileSaveDialog("Save INI file", "", "Ini File [*.ini](*.ini)|Txt File [*.txt](*.txt)|Data File [*.dat](*.dat)|Config File [*.cfg](*.cfg)|Other [*.*](*.*)", 2+16, $newname, "", $Form1) Return $save_file_dir EndFunc func _save_file($saveAS = True) Local $save_file_dir = "" Local $read = GUICtrlRead($dir_input) Local $new_file_name = "" if $saveAS = true then if $read = "New file, Not saved yet" OR $read = "No file loaded" OR $read = "Could not load selected file" then $new_file_name = "New File" Else $new_file_name = StringTrimRight(StringTrimLeft($read, StringInStr($read, "\", 0, -1)), (StringLen($read)-StringInStr($read, ".", 0, -1)+1)) EndIf $save_file_dir = _get_save_file($new_file_name) if $save_file_dir <> "" then _save_to_file($save_file_dir) $save = True EndIf Else if $read = "New file, Not saved yet" OR $read = "No file loaded" OR $read = "Could not load selected file" then $save_file_dir = _get_save_file() if $save_file_dir <> "" then _save_to_file($save_file_dir) $save = True EndIf Else _save_to_file($read) $save = True EndIf EndIf EndFunc func _get_Section_count() Local $count = _GUICtrlTreeView_GetSiblingCount($treeview, 0) if $count <> -1 then Local $display2 Local $display[$count+1] $display[0] = $count Local $is_parent = False for $i = 1 to $count if $i = 1 Then $display2 = _GUICtrlTreeView_GetFirstItem($treeview) Else $display2 = _GUICtrlTreeView_GetNext($treeview, $display2) For $j = 1 to _GUICtrlTreeView_GetSiblingCount($treeview, $display2)*2 $display2 = _GUICtrlTreeView_GetNext($treeview, $display2) Next EndIf $display[$i] = _GUICtrlTreeView_GetItemHandle($treeview, $display2) Next Return $display Else Return -1 EndIf EndFunc func _clear_tooltip_txt() Local $count2 = UBound($tool_txt_array)-1 Local $index Local $found = false for $j = 1 to $count2 _ArrayDelete($tool_txt_array, $j) Next EndFunc func _open_file() $not_open = 0 if $save = False Then Switch MsgBox(3+32+512+262144, "Open File", "Save changes before you open file?") case 6 ;yes _save_file(False) case 2 ;cancel $not_open = 1 EndSwitch EndIf if $not_open = 0 then Local $file = FileOpenDialog("Open INI file", "", "Ini Files (*.ini)|All Files (*.*)", 1 + 2) if NOT @error Then _GUICtrlTreeView_BeginUpdate($treeview) _GUICtrlTreeView_DeleteAll($treeview) _clear_tooltip_txt() GUICtrlSetData($dir_input, $file) Local $ini_section_count = IniReadSectionNames($file) if NOT @error then ReDim $ini_section[$ini_section_count[0]+1] for $i = 1 to $ini_section_count[0] $ini_section[$i] = _GUICtrlTreeView_Add($treeview, 0,$ini_section_count[$i], 0, 3) _GUICtrlTreeView_SetBold($treeview, $ini_section[$i]) Local $ini_key_count = IniReadSection($file, $ini_section_count[$i]) if @error then GUICtrlSetData($dir_input, "Could not load selected file") ExitLoop EndIf Local $curent_key[$ini_key_count[0][0]+1] Local $curent_value[$ini_key_count[0][0]+1] for $j = 1 to $ini_key_count[0][0] $curent_key[$j] = _GUICtrlTreeView_AddChild($treeview, $ini_section[$i], $ini_key_count[$j][0], 1, 3) $curent_value[$j] = _GUICtrlTreeView_AddChild($treeview, $curent_key[$j], $ini_key_count[$j][1], 2, 3) Next Next $save = True Else GUICtrlSetData($dir_input, "Could not load selected file") EndIf _GUICtrlTreeView_EndUpdate($treeview) If Not _FileReadToArray($file, $aRecords) Then Else Local $is_section = 0 Local $searching_item For $x = 1 to $aRecords[0] Local $current_string = $aRecords[$x] if StringLeft($current_string, 6) = ";//*//" Then ReDim $tooltips[$x+1] Local $first_split = StringTrimLeft(StringTrimRight($current_string, StringLen($current_string)-StringInStr($current_string, "//*//", 0, -1)+1), 6) Local $second_split = StringSplit($first_split, "/") Switch $second_split[0] Case 1 Do $searching_item = _GUICtrlTreeView_FindItem($treeview, $second_split[1]) Until _get_level2($searching_item) = 2 _add_tooltxt($searching_item, StringRight($current_string, StringLen($current_string)-StringInStr($current_string, "//*//", 0, -1)-4)) case 2 Do $searching_item = _GUICtrlTreeView_FindItem($treeview, $second_split[2]) Until _get_level2($searching_item) = 1 _add_tooltxt($searching_item, StringRight($current_string, StringLen($current_string)-StringInStr($current_string, "//*//", 0, -1)-4)) Case 3 Do $searching_item = _GUICtrlTreeView_FindItem($treeview, $second_split[3]) Until _get_level2($searching_item) = 3 _add_tooltxt($searching_item, StringRight($current_string, StringLen($current_string)-StringInStr($current_string, "//*//", 0, -1)-4)) EndSwitch EndIf Next EndIf endif EndIf EndFunc func _add_tooltxt($hwnd, $txt) Local $count2 = UBound($tool_txt_array)-1 Local $index Local $found = false for $j = 1 to $count2 if $tool_txt_array[$j][0] = $hwnd Then $index = $j $found = true ExitLoop EndIf Next if $found = False then Local $count = UBound($tool_txt_array, 1) ReDim $tool_txt_array[$count+1][2] $tool_txt_array[$count][0] = $hwnd $tool_txt_array[$count][1] = _limit_txt($txt, 32) Else $tool_txt_array[$index][1] = _limit_txt($txt, 32) EndIf EndFunc func _limit_txt($text, $longest) $text = StringReplace($text, " " & @CRLF, " ") $text = StringReplace($text, " ", " ") Local $split1 = StringSplit($text, " ") Local $longest2 = $longest Local $previous_txt = "" Local $split2 for $i = 1 to $split1[0] if StringLen($split1[$i]) > $longest then $longest = StringLen($split1[$i]) Next for $i = 1 to $split1[0] if StringLen($split1[$i] & $previous_txt) < $longest Then $previous_txt &= $split1[$i] & " " Else $previous_txt &= @CRLF $longest = $longest2+StringLen($previous_txt) $previous_txt &= $split1[$i] & " " EndIf Next Return StringTrimRight($previous_txt, 1) EndFunc func _delete_tooltxt($hWnd) Local $count2 = UBound($tool_txt_array)-1 Local $index Local $found = false for $j = 1 to $count2 if $tool_txt_array[$j][0] = $hwnd Then $index = $j $found = true ExitLoop EndIf Next if $found = true then _ArrayDelete($tool_txt_array, $index) Local $get_child_count = _GUICtrlTreeView_GetChildCount($treeview, $hwnd) if $get_child_count <> -1 then Local $previous_item = _GUICtrlTreeView_GetFirstChild($treeview, $hWnd) for $j = 1 to $get_child_count if $j = 1 then _delete_tooltxt($previous_item) Else $previous_item = _GUICtrlTreeView_GetNextChild($treeview, $previous_item) _delete_tooltxt($previous_item) EndIf Next EndIf EndIf ToolTip("") EndFunc func _get_tooltxt($hwnd) Local $count2 = UBound($tool_txt_array)-1 Local $index Local $found = false for $j = 1 to $count2 if $tool_txt_array[$j][0] = $hwnd Then $index = $j $found = true ExitLoop EndIf Next if $found = true then Return $tool_txt_array[$index][1] Else Return "" EndIf EndFunc func _add_new_main_item() ReDim $ini_section[UBound($ini_section)+1] Local $additem2 Local $additem3 Local $curent_selection = _GUICtrlTreeView_GetSelection($treeview) $ini_section[UBound($ini_section)-1] = _GUICtrlTreeView_Add($treeview, 0, "", 0, 3) $item_just_added = 1 $section_added = 1 _GUICtrlTreeView_SelectItem($treeview, $ini_section[UBound($ini_section)-1]) ;select _GUICtrlTreeView_SetBold($treeview, $ini_section[UBound($ini_section)-1]) $additem2 = _GUICtrlTreeView_AddChild($treeview, $ini_section[UBound($ini_section)-1], "", 1, 3) $additem3 = _GUICtrlTreeView_AddChild($treeview, $additem2, "", 2, 3) _GUICtrlTreeView_Expand($treeview, $ini_section[UBound($ini_section)-1]) _GUICtrlTreeView_EditText($treeview, $ini_section[UBound($ini_section)-1]) $LastAddedSection = _GUICtrlTreeView_GetItemHandle($treeview, $ini_section[UBound($ini_section)-1]) $ITEM_ADDED1 = True EndFunc func _add_item() Local $additem1 Local $additem2 Local $curent_selection = _GUICtrlTreeView_GetCount($treeview) if $curent_selection = 0 Then if GUICtrlRead($dir_input) = "No file loaded" then GUICtrlSetData($dir_input, "New file, Not saved yet") _add_new_main_item() $save = False $first_item_added = true Else Local $curent_selection = _GUICtrlTreeView_GetSelection($treeview) Local $get = _get_level() Switch $get case 1 $additem1 = _GUICtrlTreeView_AddChild($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent_selection), "", 1, 3) $item_just_added = 1 $key_added = 1 _GUICtrlTreeView_SelectItem($treeview, $additem1) ;select $additem2 = _GUICtrlTreeView_AddChild($treeview, $additem1, "", 2, 3) _GUICtrlTreeView_Expand($treeview, $additem1) _GUICtrlTreeView_EditText($treeview, $additem1) $LastAddedChild = _GUICtrlTreeView_GetItemHandle($treeview, _GUICtrlTreeView_GetNext($treeview, $additem1)) $LastAddedKey = _GUICtrlTreeView_GetItemHandle($treeview, $additem1) $ITEM_ADDED3 = True $save = False case 2 _add_new_main_item() $save = False EndSwitch EndIf EndFunc func _delete_item() Local $curent = _GUICtrlTreeView_GetSelection($treeview) if $curent then Local $get = _get_level() Switch $get case 1 ;Key _no_flash_disable($add_item_button, False) if _GUICtrlTreeView_GetChildCount($treeview, _GUICtrlTreeView_GetParentHandle($treeview, _GUICtrlTreeView_GetSelection($treeview))) = 1 Then _no_flash_disable($delete_item_button) Else _no_flash_disable($delete_item_button, False) _delete_tooltxt($curent) _GUICtrlTreeView_Delete($treeview, $curent) $save = False EndIf case 2 ;Section _delete_tooltxt($curent) _GUICtrlTreeView_Delete($treeview, $curent) $save = False _no_flash_disable($add_item_button, False) _no_flash_disable($delete_item_button, False) case 3 ;Value GUICtrlSetData($val_input, _GUICtrlTreeView_GetText($treeview, $curent)) _no_flash_disable($add_item_button) _no_flash_disable($delete_item_button) EndSwitch EndIf EndFunc func _copy_generated_code($Control) ClipPut(GUICtrlRead($Control)) EndFunc func _get_key($Section) Local $return[1][1] Local $first_child = _GUICtrlTreeView_GetNext($treeview, $Section) Local $count = _GUICtrlTreeView_GetSiblingCount($treeview, $first_child) if $count <> -1 Then ReDim $return[$count+1][2] for $i = 1 to $count if $i = 1 Then $return[$i][0] = $first_child $return[$i][1] = _GUICtrlTreeView_GetNext($treeview, $first_child) Else $return[$i][0] = _GUICtrlTreeView_GetNext($treeview, $return[$i-1][1]) $return[$i][1] = _GUICtrlTreeView_GetNext($treeview, $return[$i][0]) EndIf Next $return[0][0] = $count Return $return Else Return -1 EndIf EndFunc func _generate_full_code() Local $Sections Local $Keys Local $values Local $file_name = GUICtrlRead($dir_input) Local $final_ini = "" Local $new_file_name = "" Local $read = GUICtrlRead($dir_input) if $read = "New file, Not saved yet" OR $read = "No file loaded" OR $read = "Could not load selected file" then $new_file_name = "New File.ini" Else $new_file_name = StringTrimLeft($read, StringInStr($read, "\", 0, -1)) EndIf Local $pre_ini_txt = "_iGenerated_Ini_File_Save(@ScriptDir & ""\" & $new_file_name & """) ;Rename " & $new_file_name & " to whatever you want your file to be named" _ & @CRLF & @CRLF _ & "Func _iGenerated_Ini_File_Save($Save_File)" & @CRLF _ & @TAB & "If NOT FileExists($Save_File) then FileWrite($Save_File, """")" & @CRLF Local $after_ini_txt = "EndFunc" Local $gen_code = "" $Sections = _get_Section_count() if $Sections <> -1 then for $i = 1 to $Sections[0] $Keys = _get_key($Sections[$i]) if $Keys <> -1 then for $j = 1 to $Keys[0][0] if $final_ini = "" Then $final_ini = @TAB & "IniWrite($Save_File, """ & _GUICtrlTreeView_GetText($treeview, $Sections[$i]) & """, """ & _GUICtrlTreeView_GetText($treeview, $Keys[$j][0]) & """, """ & _GUICtrlTreeView_GetText($treeview, $Keys[$j][1]) & """)" & @CRLF Else $final_ini &= @TAB & "IniWrite($Save_File, """ & _GUICtrlTreeView_GetText($treeview, $Sections[$i]) & """, """ & _GUICtrlTreeView_GetText($treeview, $Keys[$j][0]) & """, """ & _GUICtrlTreeView_GetText($treeview, $Keys[$j][1]) & """)" & @CRLF EndIf Next EndIf Next $gen_code = $pre_ini_txt & $final_ini & $after_ini_txt _create_gen_code_window($gen_code, "Full Write") EndIf EndFunc func _find_item_input() if GUICtrlGetState($button_find_next) = 96 Then GUICtrlSetState($button_find_next, $GUI_SHOW) GUICtrlSetState($match_check, $GUI_SHOW) GUICtrlSetState($button_close_find, $GUI_SHOW) Local $control_pos = ControlGetPos($Form1, "", $treeview) ControlMove($Form1, "", $treeview, $control_pos[0], $control_pos[1], $control_pos[2], $control_pos[3]-19) GUICtrlSetState($find_input, $GUI_SHOW) $size_client = WinGetClientSize($form1) $size_treeview = ControlGetPos($form1, "", $treeview) $previous_x_dif = $size_client[0]-$size_treeview[0]-$size_treeview[2] $previous_y_dif = $size_client[1]-$size_treeview[1]-$size_treeview[3] EndIf ControlFocus($form1, "", $find_input) EndFunc func _generate_out_code() Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $Key Local $value Local $parent Local $send_txt = "" Local $get if _GUICtrlTreeView_GetCount($treeview) <> 0 then $get = _get_level() Switch $get case 1 ;Key $Key = _GUICtrlTreeView_GetText($treeview, $curent) $value = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetFirstChild($treeview, $curent)) case 3 ;Value $value = _GUICtrlTreeView_GetText($treeview, $curent) $Key = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent)) EndSwitch if $get <> 2 Then $parent = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetParentHandle($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent))) Local $new_file_name = "" Local $read = GUICtrlRead($dir_input) if $read = "New file, Not saved yet" OR $read = "No file loaded" OR $read = "Could not load selected file" then $new_file_name = "New File.ini" Else $new_file_name = StringTrimLeft($read, StringInStr($read, "\", 0, -1)) EndIf $send_txt = "IniRead(@ScriptDir & ""\" & $new_file_name & """, """ & $parent & """, """ & $Key & """, """ & $value & """) ;Change " & $new_file_name & " into your ini-read file" _create_gen_code_window($send_txt, "Read") EndIf EndIf EndFunc func _Generate_in_code() Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $Key Local $value Local $parent Local $send_txt = "" Local $get if _GUICtrlTreeView_GetCount($treeview) <> 0 then $get = _get_level() Switch $get case 1 ;Key $Key = _GUICtrlTreeView_GetText($treeview, $curent) $value = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetFirstChild($treeview, $curent)) case 3 ;Value $value = _GUICtrlTreeView_GetText($treeview, $curent) $Key = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent)) EndSwitch if $get <> 2 Then $parent = _GUICtrlTreeView_GetText($treeview, _GUICtrlTreeView_GetParentHandle($treeview, _GUICtrlTreeView_GetParentHandle($treeview, $curent))) Local $new_file_name = "" Local $read = GUICtrlRead($dir_input) if $read = "New file, Not saved yet" OR $read = "No file loaded" OR $read = "Could not load selected file" then $new_file_name = "New File.ini" Else $new_file_name = StringTrimLeft($read, StringInStr($read, "\", 0, -1)) EndIf $send_txt = "IniWrite(@ScriptDir & ""\" & $new_file_name & """, """ & $parent & """, """ & $Key & """, """ & $value & """) ;Rename " & $new_file_name & " to your ini file" _create_gen_code_window($send_txt, "Write") EndIf EndIf EndFunc func _save_dummy() _save_file(false) EndFunc func _save_dummy2() _save_file(True) EndFunc func _expand_selected() _GUICtrlTreeView_Expand($treeview, _GUICtrlTreeView_GetSelection($treeview)) EndFunc func _expand_all() Local $Sections = _get_Section_count() if $Sections <> -1 then for $i = 1 to $Sections[0] _GUICtrlTreeView_Expand($treeview, $Sections[$i]) Next EndIf EndFunc func _colapse_selected() _GUICtrlTreeView_Expand($treeview, _GUICtrlTreeView_GetSelection($treeview), False) EndFunc func _colapse_all() Local $Sections = _get_Section_count() if $Sections <> -1 then for $i = 1 to $Sections[0] _GUICtrlTreeView_Expand($treeview, $Sections[$i], False) Next EndIf _GUICtrlTreeView_SelectItem($treeview, 0) EndFunc func _close_find() if GUICtrlGetState($find_input) <> 96 then GUICtrlSetState($find_input, $GUI_HIDE) GUICtrlSetState($match_check, $GUI_HIDE) GUICtrlSetState($button_find_next, $GUI_HIDE) GUICtrlSetState($button_close_find, $GUI_HIDE) _GUICtrlTreeView_SetRemoveMark($treeview) Local $control_pos = ControlGetPos($Form1, "", $treeview) ControlMove($Form1, "", $treeview, $control_pos[0], $control_pos[1], $control_pos[2], $control_pos[3]+19) ControlFocus($form1, "", $treeview) $size_client = WinGetClientSize($form1) $size_treeview = ControlGetPos($form1, "", $treeview) $previous_x_dif = $size_client[0]-$size_treeview[0]-$size_treeview[2] $previous_y_dif = $size_client[1]-$size_treeview[1]-$size_treeview[3] EndIf EndFunc func GetNeighbourItem($hWnd, $hItemTarget, $above = True) if $above = True Then Local $hPrev = _GUICtrlTreeView_GetPrevSibling($hWnd, $hItemTarget) Return $hPrev Else Local $hNext = _GUICtrlTreeView_GetNextSibling($hWnd, $hItemTarget) Return $hNext EndIf EndFunc Func TreeItemCopy($hWnd, $hItemSource, $hItemTarget, $fDirection) $hTest = $hItemTarget Do $hTest = _GUICtrlTreeView_GetParentHandle($hWnd, $hTest) If $hTest = $hItemSource Then Return 0 Until $hTest = 0 $sText = _GUICtrlTreeView_GetText($hWnd, $hItemSource) $hParent = _GUICtrlTreeView_GetParentHandle($hWnd, $hItemTarget) Switch $fDirection Case -1 $hPrev = _GUICtrlTreeView_GetPrevSibling($hWnd, $hItemTarget) If $hPrev = 0 Then $hNew = _GUICtrlTreeView_AddFirst($hWnd, $hItemTarget, $sText) _add_tooltxt($hNew, _get_tooltxt($hItemSource)) Else $hNew = _GUICtrlTreeView_InsertItem($hWnd, $sText, $hParent, $hPrev) _add_tooltxt($hNew, _get_tooltxt($hItemSource)) EndIf Case 0 $hNew = _GUICtrlTreeView_InsertItem($hWnd, $sText, $hItemTarget) _add_tooltxt($hNew, _get_tooltxt($hItemSource)) Case 1 $hNew = _GUICtrlTreeView_InsertItem($hWnd, $sText, $hParent, $hItemTarget) _add_tooltxt($hNew, _get_tooltxt($hItemSource)) Case Else Return 0 EndSwitch _GUICtrlTreeView_SetState($hWnd, $hNew, _GUICtrlTreeView_GetState($hWnd, $hItemSource)) If _GUICtrlTreeView_GetStateImageList($hWnd) <> 0 Then _GUICtrlTreeView_SetStateImageIndex($hWnd, $hNew, _GUICtrlTreeView_GetStateImageIndex($hWnd, $hItemSource)) EndIf If _GUICtrlTreeView_GetNormalImageList($hWnd) <> 0 Then _GUICtrlTreeView_SetImageIndex($hWnd, $hNew, _GUICtrlTreeView_GetImageIndex($hWnd, $hItemSource)) _GUICtrlTreeView_SetSelectedImageIndex($hWnd, $hNew, _GUICtrlTreeView_GetSelectedImageIndex($hWnd, $hItemSource)) EndIf $iChildCount = _GUICtrlTreeView_GetChildCount($hWnd, $hItemSource) If $iChildCount > 0 Then For $i = 0 To $iChildCount-1 $hRecSource = _GUICtrlTreeView_GetItemByIndex($hWnd, $hItemSource, $i) TreeItemCopy($hWnd, $hRecSource, $hNew, 0) Next EndIf Return $hNew EndFunc Func TreeItemFromPoint($hWnd) Local $tMPos = _WinAPI_GetMousePos(True, $hWnd) Return _GUICtrlTreeView_HitTestItem($hWnd, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2)) EndFunc func _find_item($typo = false) Local $match Local $select_one if GUICtrlRead($match_check) = $GUI_CHECKED Then $match = False Else $match = True EndIf Local $find_data = GUICtrlRead($find_input) Local $curent_selection = _GUICtrlTreeView_GetSelection($treeview) if _GUICtrlTreeView_FindItem($treeview, $find_data, $match) <> 0 Then GUICtrlSetBkColor($find_input, 0xD5FFDF) Else if $find_data <> "" Then GUICtrlSetBkColor($find_input, 0xFFE1E1) Else GUICtrlSetBkColor($find_input, 0xFFFFFF) EndIf _GUICtrlTreeView_SetRemoveMark($treeview);, 0) Return 0 EndIf if $typo = True Then if NOT StringInStr(_GUICtrlTreeView_GetText($treeview, $curent_selection), $find_data) Then $select_one = _GUICtrlTreeView_FindItem($treeview, $find_data, $match, _GUICtrlTreeView_GetNext($treeview, $curent_selection)) if _GUICtrlTreeView_GetText($treeview) = _GUICtrlTreeView_GetText($treeview, $select_one) AND $find_data <> _GUICtrlTreeView_GetText($treeview) Then _GUICtrlTreeView_SelectItem($treeview, _GUICtrlTreeView_FindItem($treeview, $find_data, $match)) _GUICtrlTreeView_SetInsertMark($treeview, _GUICtrlTreeView_FindItem($treeview, $find_data, $match)) Else _GUICtrlTreeView_SelectItem($treeview, $select_one) _GUICtrlTreeView_SetInsertMark($treeview, $select_one) EndIf Else _GUICtrlTreeView_SetInsertMark($treeview, $curent_selection) EndIf Else $select_one = _GUICtrlTreeView_FindItem($treeview, $find_data, $match, _GUICtrlTreeView_GetNext($treeview, $curent_selection)) if _GUICtrlTreeView_GetText($treeview) = _GUICtrlTreeView_GetText($treeview, $select_one) AND $find_data <> _GUICtrlTreeView_GetText($treeview) Then _GUICtrlTreeView_SelectItem($treeview, _GUICtrlTreeView_FindItem($treeview, $find_data, $match));$select_one) _GUICtrlTreeView_SetInsertMark($treeview, _GUICtrlTreeView_FindItem($treeview, $find_data, $match)) Else _GUICtrlTreeView_SelectItem($treeview, $select_one) _GUICtrlTreeView_SetInsertMark($treeview, $select_one) EndIf EndIf EndFunc Func _GUICtrlTreeView_SetRemoveMark($hWnd) _SendMessage($hWnd, $TVM_SETINSERTMARK, 0, 0) EndFunc func _turn_power_mode() if $power_mode = False Then $power_mode = True _GUICtrlToolbar_SetButtonBitMap($hToolbar, $idPower, 5) Else $power_mode = False _GUICtrlToolbar_SetButtonBitMap($hToolbar, $idPower, 4) EndIf EndFunc func _cancel_dragging() HotKeySet("{Esc}") $fDragging = False GUISetState(@SW_HIDE, $drag_gui) _WinAPI_ShowCursor(True) ToolTip("") _WinAPI_InvalidateRect($treeview) _SendMessage($treeview, $TVM_SETINSERTMARK, 0, 0) EndFunc func _get_level() Local $curent = _GUICtrlTreeView_GetSelection($treeview) Local $n = 1 Local $varX = $curent for $j = 1 to 3 $varX = _GUICtrlTreeView_GetFirstChild($treeview, $varX) if _GUICtrlTreeView_GetChildren($treeview, $varX) = False then ExitLoop $n += 1 Next Return $n EndFunc func _get_level2($curent) Local $n = 1 Local $varX = $curent for $j = 1 to 3 $varX = _GUICtrlTreeView_GetFirstChild($treeview, $varX) if _GUICtrlTreeView_GetChildren($treeview, $varX) = False then ExitLoop $n += 1 Next Return $n EndFunc func _no_flash_disable($button_handle, $disable=True) if $disable Then if GUICtrlGetState($button_handle) <> 144 Then GUICtrlSetState($button_handle, $GUI_DISABLE) Else if GUICtrlGetState($button_handle) <> 80 Then GUICtrlSetState($button_handle, $GUI_ENABLE) EndIf EndFunc Func _TextEdit() HotKeySet("{Enter}", "_TextSet") HotKeySet("{Esc}", "_EditClose") Local $hItem = _GUICtrlTreeView_GetSelection($treeview) If $hItem Then if $power_mode = false Then _GUICtrlTreeView_EditText($treeview, $hItem) Else $edit_mode = 1 if _GUICtrlTreeView_GetExpanded($treeview, $hItem) = True then $expanded = True Else if _get_level2($hItem) <> 2 then _GUICtrlTreeView_Expand($treeview, $hItem) $expanded = False EndIf Local $get = _get_level() Switch $get case 1 ;key _GUICtrlTreeView_EditText($treeview, _GUICtrlTreeView_GetNext($treeview, $hItem)) case 2 ;section _GUICtrlTreeView_EditText($treeview, $hItem) case 3 ;value _GUICtrlTreeView_EditText($treeview, $hItem) EndSwitch EndIf Else HotKeySet("{Enter}") HotKeySet("{Esc}") EndIf EndFunc Func _TextSet() $iEditFlag = 1 _GUICtrlTreeView_EndEdit($treeview) $save = False EndFunc Func _EditClose() $iEditFlag = 0 $ITEM_ADDED1 = False $ITEM_ADDED2 = False $ITEM_ADDED3 = False _GUICtrlTreeView_EndEdit($treeview) if $power_mode = True then $section_added = 0 $key_added = 0 $count_k = 1 _GUICtrlTreeView_Expand($treeview, _GUICtrlTreeView_GetSelection($treeview), False) EndIf EndFunc Func setTrans() Local $hGDI = DllOpen("gdi32.dll"), $color Local $hDC = _WinAPI_GetDC($drag_gui) $aM_Mask = DllCall($hGDI, "long", "CreateRectRgn", "long", 0, "long", 0, "long", $gw + 1, "long", $gh + 1) $TestCol = DllCall($hGDI, "int", "GetPixel", "hwnd", $hDC, "int", 0, "int", 0) $Startx = -1 $Starty = -1 $Endx = 0 $Endy = 0 For $i = 0 To $gw For $j = 0 To $gh $color = DllCall($hGDI, "int", "GetPixel", "hwnd", $hDC, "int", $i, "int", $j) If $color[0] = $TestCol[0] And $j < $gh Then If $Startx = -1 Then $Startx = $i $Starty = $j $Endx = $i $Endy = $j Else $Endx = $i $Endy = $j EndIf Else If $Startx <> -1 Then addRegion() $Startx = -1 $Starty = -1 EndIf Next Next DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $drag_gui, "long", $aM_Mask[0], "int", 1) _WinAPI_ReleaseDC($drag_gui, $hDC) DllClose($hGDI) EndFunc Func addRegion() $aMask = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $Startx, "long", $Starty, "long", $Endx + 1, "long", $Endy + 1) DllCall("gdi32.dll", "long", "CombineRgn", "long", $aM_Mask[0], "long", $aMask[0], "long", $aM_Mask[0], "int", 3) EndFunc Func chase() $mp = MouseGetPos() WinMove($drag_gui, "", $mp[0] + 1, $mp[1] + 0) tooltip($moving_txt, $mp[0]+18, $mp[1]) EndFunc Func _cancel_dragging2() if $fDragging = True then _cancel_dragging() EndFunc Thanks Link to comment Share on other sites More sharing options...
MouseSpotter Posted May 24, 2013 Share Posted May 24, 2013 Nice looking program. Your program does call the Exit command - however, I suspect that the following callbacks are keeping the program alive Global $wProcHandle = DllCallbackRegister("_WindowProc", "int", "hwnd;uint;wparam;lparam") Global $wProcHandle2 = DllCallbackRegister("_EditWindowProc", "ptr", "hwnd;uint;wparam;lparam") Global $wProcOld = _WinAPI_SetWindowLong($treeview, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle)) Global $wProcOldLocal2 = _WinAPI_SetWindowLong(GUICtrlGetHandle($find_input), $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle2)) The Exit button exits the program when I remove these. Link to comment Share on other sites More sharing options...
Technomancer Posted May 25, 2013 Author Share Posted May 25, 2013 OK I'll have a play and see if i can do something about these 'callbacks'. I downloaded this script some while ago but only recently started playing with it. I don't know who the original author is but i'm assuming that it's ok to use it for personal use. I'm only an amateur at AutoIT programming and i'm learning from scripts like this. Thanks for your help so far, i'll let you know what i can work out. Link to comment Share on other sites More sharing options...
Technomancer Posted May 25, 2013 Author Share Posted May 25, 2013 Hi. I've amazed myself. It took about 10 minutes but by adding in 2 lines in the '_exit' function at: 810 DllCallbackFree($wProcHandle) and 811 DllCallbackFree($wProcHandle2) so that the first 5 lines now look like this: func _exit() DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) if $save = False Then Switch MsgBox(3+32+512+262144, "Exit", "Save changes before you exit?") This seems to do the trick. It might need a bit of testing under various conditions but i think that fixes things. It would be nice to find the original author to let him/her know and put their name to the script. Try it out and let me know, i'll do some testing here. Link to comment Share on other sites More sharing options...
Technomancer Posted May 25, 2013 Author Share Posted May 25, 2013 Looks like i was a bit previous. The script failed when the INI was NOT saved and the exit button clicked. It asked to save the file but then stopped, (the compiled version anyway). I modified it again to:- func _exit() if $save = False Then Switch MsgBox(3+32+512+262144, "Exit", "Save changes before you exit?") case 6 ;yes _save_file(False) DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) Exit case 7 ;no DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) Exit EndSwitch Else DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) Exit EndIf EndFunc DllCallbackFree($wProcHandle) DllCallbackFree($wProcHandle2) Exit It might seem like a bit of overkill but at least it seems to work. I've done some tests but there's always the chance. If you want me to put up the full script as modified let me know. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 26, 2013 Moderators Share Posted May 26, 2013 Technomancer, I have only just got around to looking at the script. It uses the OnAutoItExit function to close the callbacks - this function was removed in v3.3.4.0 (released 15th January, 2010) and replaced by OnAutoitExitRegister. The script obviously dates from before then. All you need to do is add the line at the top of the script: OnAutoitExitRegister("OnAutoItExit") and all should work as expected. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now