All pastes #95042 Raw Edit

pilgrim

public text v1 · immutable
#95042 ·published 2006-07-21 18:42 UTC
rendered paste body
'-- ZazouMiniWebServer Manager
'--
'-- Un utilitaire pour piloter ZazouMiniWebServer depuis une icône dans la systray
'--
'-- Auteur : David Duret
'-- Version : 0.2-2006-07-20
'-- Licence : GPL

Option Explicit

Const AppName       = "ZazouMiniWebServerManager"
Const AppFullName   = "ZazouMiniWebServer Manager"
Const AppVersion    = "0.1"

Dim WshShell, WshSysEnv
Set WshShell = WScript.CreateObject("WScript.Shell")

Dim filename
filename = WshShell.ExpandEnvironmentStrings("%Tmp%") & "\" & AppName & ".xml"

Dim args, cmd
Set args = WScript.Arguments
cmd = ""
if ( args.length > 0 ) then cmd = args(0)

Dim menu, item, subitem

Set menu = new TrayMenuXML

if ( cmd = "" ) then

    '-- Détermination du statut d'excécution du serveur
    Dim objWMIService, colProcess, objProcess, bProcess
    
    bProcess = "false"
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = ""ZazouMiniWebServer.exe""" )
    For Each objProcess in colProcess
        bProcess = "true"
    Next

    '-- Création du fichier XML
    menu.CreateXML filename, AppFullName & " " & AppVersion, AppName & ".exe,1"
    
    Set item = menu.AppendItem("Démarrer", "ZazouMiniWebServerManager.vbs")
    item.SetAttribute "id", "IDSTART"
    item.SetAttribute "params", "start"
    item.SetAttribute "host", "WScript.exe"
    if ( bProcess = "true" ) then
        item.SetAttribute "checked", "true"
        item.SetAttribute "enabled", "false"
    end if
    
    Set item = menu.AppendItem("Arrêter", "ZazouMiniWebServerManager.vbs")
    item.SetAttribute "id", "IDSTOP"
    item.SetAttribute "params", "stop"
    item.SetAttribute "host", "WScript.exe"
    item.SetAttribute "enabled", bProcess
    
    menu.AppendSeparator
    menu.AppendItem "Quitter", "cmdQuit"
    
    if ( bProcess = "true" ) then
        menu.SetTitle "ZazouMiniWebServer - démarré..."
        menu.SetIcon AppName & ".exe"
    else
        menu.SetTitle "ZazouMiniWebServer - arrêté"
        menu.SetIcon AppName & ".exe,1"
    end if

else

    '--  Chargement du fichier XML
    menu.LoadXML filename
    
    '--  Exécution de la commande demandée
    Select Case cmd
    
        '-- Démarrage du serveur
        Case "start"
        
            WshShell.Run "ZazouMiniWebServer.exe -stop", 2

            With menu.GetElementById("IDSTART")
                .SetAttribute "checked", "true"
                .SetAttribute "enabled", "false"
            End With
            menu.GetElementById("IDSTOP").SetAttribute "enabled", "true"
            menu.SetTitle "ZazouMiniWebServer - démarré..."
            menu.SetIcon AppName & ".exe"

        '-- Arrêt du serveur
        Case "stop"

            WshShell.Run "ZazouMiniWebServer.exe -shutdown", 2

            With menu.GetElementById("IDSTART")
                .SetAttribute "checked", "false"
                .SetAttribute "enabled", "true"
            End With
            menu.GetElementById("IDSTOP").SetAttribute "enabled", "false"
            menu.SetTitle "ZazouMiniWebServer - arrêté"
            menu.SetIcon AppName & ".exe,1"
    
    End Select

end if

'--  Sauvegarde du fichier XML
menu.SaveXML

if ( cmd = "" ) then WshShell.Run "ZazouMiniWebServerManager.exe -f """ & filename & """"



'===============================================================================
' Classe de manipulation du ficher XML
'===============================================================================

Class TrayMenuXML

    Private filename
    Private xmlDoc
    Private menu
    
    Function CreateXML ( strfilename, title, icon )
    
        filename = strfilename
    
        Set xmlDoc = CreateObject("Microsoft.XMLDOM")

        Dim p
        Set p = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""iso-8859-1""")
        'xmlDoc.insertBefore p, xmlDoc.childNodes(0)
        xmlDoc.AppendChild p
        
        Set menu = xmlDoc.CreateElement("menu")
        menu.SetAttribute "title", title
        menu.SetAttribute "icon", icon
        menu.SetAttribute "autoreload", "true"
        xmlDoc.appendChild menu
    
    End Function

    Function LoadXML( strfilename )
    
        filename = strfilename
    
        Set xmlDoc = CreateObject("Microsoft.XMLDOM")
        xmlDoc.async = "false"
        xmlDoc.load(filename)
        
        Dim result
        Set result = xmlDoc.selectNodes("//menu")
        Set menu = result.item(0)
    
    End Function
    
    Function SaveXML()

        xmlDoc.save(filename)
    
    End Function
    
    Function SetTitle( title )
    
        menu.SetAttribute "title", title
    
    End Function
    
    Function SetIcon( icon )
    
        menu.SetAttribute "icon", icon
    
    End Function
    
    Function AppendItem( caption, cmd )

        Dim item
        Set item = xmlDoc.CreateElement("item")
        item.SetAttribute "caption", caption
        item.SetAttribute "cmd", cmd
        menu.appendChild item
        
        Set AppendItem = item

    End Function
    
    Function AppendSeparator()

        Dim item
        Set item = xmlDoc.CreateElement("item")
        item.SetAttribute "caption", "-"
        menu.appendChild item

    End Function
    
    Function GetElementById( id )
    
        Dim result, item
        Set result = xmlDoc.selectNodes("//item[@id=""" & id & """]")
        Set item = result.item(0)
        
        Set GetElementById = item
    
    End Function

End Class