File "mougino apps custo manager.bas"

Path: /apps custo manager/mougino apps custo manager.bas
File size: 6.62 KB
MIME-type: text/plain
Charset: utf-8

#COMPILE EXE "mougino apps custo manager.exe"
#DIM ALL

#INCLUDE "WIN32API.INC"
#RESOURCE "res\customgr.pbr"

'--------------------------------------------------------------------------------
FUNCTION PBMAIN () AS LONG
    ShowCustoManager()
END FUNCTION
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
MACRO DELETE_CUSTO
    LISTBOX GET TEXT CB.HNDL, 1001, i TO e
    e = LocalAppData + e
    IF MessageBox(CB.HNDL, "Are you sure you want to delete the app custo for" _
        +$CR+e+" ?", EXE.NAME$, %MB_YESNO OR %MB_ICONQUESTION) = %IDYES THEN
        KILL e
        LISTBOX DELETE CB.HNDL, 1001, i
    END IF ' end of answered 'Yes' to delete msgbox
END MACRO
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
CALLBACK FUNCTION ProcCustoManager
    LOCAL e AS STRING
    LOCAL i AS LONG

    IF CB.MSG = %WM_COMMAND THEN
        SELECT CASE AS LONG CB.CTL

            CASE  999                                   ' CLICK ON "DELETE"
                LISTBOX GET SELECT CB.HNDL, 1001 TO i
                IF i > 0 THEN ' a widget is selected
                    DELETE_CUSTO
                END IF

            CASE 1001                                   ' DOUBLE-CLICK ON LISTBOX
                IF CB.CTLMSG = %LBN_DBLCLK THEN         ' > SIMULATE OK BUTTON
                    DIALOG POST CB.HNDL, %WM_COMMAND, MAKDWD(%IDOK,1), 0
                END IF

            CASE %IDOK                                  ' CLICK ON OK BUTTON > VIEW
                LISTBOX GET SELECT CB.HNDL, 1001 TO i
                IF i > 0 THEN ' a widget is selected
                    LISTBOX GET TEXT CB.HNDL, 1001, i TO e
                    ShellExecute 0, "open", LocalAppData + e, "", "", %SW_SHOW
                END IF

            CASE %IDCANCEL                              ' CLICK ON CANCEL BUTTON
                DIALOG END CB.HNDL
                EXIT FUNCTION
        END SELECT

    ELSEIF CB.MSG = %WM_VKEYTOITEM THEN
        LISTBOX GET SELECT CB.HNDL, 1001 TO i
        IF LOWRD(CB.WPARAM) = %VK_DELETE AND i > 0 THEN ' TRAP DEL KEY TO DELETE A CUSTO
            DELETE_CUSTO
            FUNCTION = -2 ' listbox should ignore, we took care of actions
        ELSE
            FUNCTION = -1 ' listbox should perform default action
        END IF ' end of treating DEL key
    END IF
END FUNCTION
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
SUB PopulateCustos(BYVAL hDlg AS DWORD, BYVAL lID AS LONG)
    LOCAL e, xt AS STRING
    LOCAL i AS LONG

    xt = "ini,pos,siz,lng"
    LISTBOX RESET hDlg, lID

    FOR i = 1 TO PARSECOUNT(xt)
        e = DIR$(LocalAppData + "*." + PARSE$(xt,i))
        WHILE e <> ""
            'IF INSTR(e, "_") <> 0 THEN _
            LISTBOX ADD hDlg, lID, e
            e = DIR$(NEXT)
        WEND
        DIR$ CLOSE
    NEXT

END SUB
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
SUB ShowCustoManager()
    LOCAL hD  AS DWORD

    DIALOG NEW 0, EXE.NAME$,,, 259, 129, _
      %DS_MODALFRAME OR %WS_CAPTION OR %WS_POPUP OR %WS_SYSMENU, TO hD
'    SetDialogIconFromDll hD, "Shell32.dll", 22
    DIALOG SET ICON hD, "ICO1"

    CONTROL ADD LABEL,   hD, 1000, "Select an app to view/delete its customization:", _
        5, 4, 160, 10

    CONTROL ADD LISTBOX, hD, 1001, , 5, 15, 250, 100, _
        %LBS_NOTIFY OR %WS_TABSTOP OR %WS_VSCROLL _
        OR %LBS_USETABSTOPS OR %LBS_WANTKEYBOARDINPUT, _
        %WS_EX_CLIENTEDGE

    CONTROL ADD BUTTON,  hD, %IDCANCEL, "Cancel", -10, -10, 0, 0
    CONTROL ADD BUTTON,  hD, %IDOK,     "View", 130, 110, 55, 15
    CONTROL ADD BUTTON,  hD, 999,       "Delete", 190, 110, 55, 15

    PopulateCustos       hD, 1001
    DIALOG SHOW MODAL    hD, CALL ProcCustoManager
END SUB
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
DECLARE FUNCTION SHGetFolderPath LIB "Shell32.dll" _
    ALIAS "SHGetFolderPathA" (BYVAL hwnd AS DWORD, BYVAL csidl AS LONG, _
    BYVAL hToken AS DWORD, BYVAL dwFlags AS DWORD, pszPath AS ASCIIZ) AS LONG
%CSIDL_STARTUP        = &H0007 ' <user name>\Start Menu\Programs\Startup
%CSIDL_LOCAL_APPDATA  = &H001c ' <user name>\Local Settings\Application Data (non roaming)
'--------------------------------------------------------------------------------
FUNCTION StartupFolder AS STRING
    LOCAL szBaseFolder AS ASCIIZ * %MAX_PATH
    ShGetFolderPath (BYVAL 0, %CSIDL_STARTUP, BYVAL 0, BYVAL 0, szBaseFolder)
    FUNCTION = TRIM$(szBaseFolder) + "\"
END FUNCTION
'--------------------------------------------------------------------------------
FUNCTION LocalAppData AS STRING
    LOCAL szBaseFolder AS ASCIIZ * %MAX_PATH
    ShGetFolderPath (BYVAL 0, %CSIDL_LOCAL_APPDATA, BYVAL 0, BYVAL 0, szBaseFolder)
    FUNCTION = TRIM$(szBaseFolder) + "\"
END FUNCTION
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
SUB SetDialogIconFromDll(hDlg AS DWORD, windll AS STRING, iconId AS LONG)
    LOCAL hIconBig   AS DWORD
    LOCAL hIconSmall AS DWORD

    ExtractIconEx((windll), iconId, BYVAL VARPTR(hIconBig), BYVAL VARPTR(hIconSmall), 1)
    SetClassLong hDlg, %GCL_HICONSM, hIconSmall
    SetClassLong hDlg, %GCL_HICON, hIconBig
    SendMessage  hDlg, %WM_SETICON, %ICON_SMALL, hIconSmall
    SendMessage  hDlg, %WM_SETICON, %ICON_BIG, hIconBig
END SUB
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'SUB SetLViconFromDll(hDlg AS DWORD, ctl AS LONG, windll AS STRING, iconId AS LONG)
'' Display an icon from a DLL inside an Icon ListView
'    LOCAL hImgLst AS DWORD
'    LOCAL hIcon AS LONG
'
'    hIcon = ExtractIcon(BYVAL 0, (windll), iconId)
'
'    IMAGELIST NEW ICON 32, 32, 24, 1 TO hImgLst ' width, height, depth, initial
'    LISTVIEW SET IMAGELIST  hDlg, ctl, hImgLst, %LVSIL_NORMAL
'    IMAGELIST ADD ICON      hImgLst, hIcon
'    LISTVIEW INSERT ITEM    hDlg, ctl, 1, 1, ""
'
'    DestroyIcon hIcon
'END SUB
'--------------------------------------------------------------------------------