Middle Mouse Menu 2.0

Finalmente dopo tanto tempo ho deciso di pubblicare l’ultima versione del middle mouse menu.

La 2.0 è diciamo una release intermedia, infatti nei piani ci sarebbe l’ipotesi di creare un menu dinamico diciamo in stile pipe ma di lavoro dietro ce ne è ancora tanto.

Questa versione si discosta completamente dal vecchio middle mouse menu, tanto che aggiunge diverse funzionalità e non gestisce più solamente i link alle applicazioni indicate in una cartella come faceva il precedente, ma analizziamo nel dettaglio.

Sparisce la finestra di configurazione per una più sobria configurazione a domande al primo avvio e un redirect al readme in inglese “maccaroni-co”:

Dopo il primo avvio non sarà più necessario rispondere alle domande a patto appunto che il menu sia configurato e voi abbiate finito tutta la fase di inserimento successiva alla fase a domande.

La sintassi del file di configurazione è quella classica dei file ini standard e andiamo ora ad analizzare i vari valori supportati.

Sezione opzioni (options):

  • title = Il titolo che apparirà in testa al menu
  • options = Il nome del parametro opzioni all’interno del menu
  • exit = Il nome della voce di menu esci.
  • timedelay = tempo di attesa in secondi prima di mostrare il menu, se il tasto centrale del mouse rimane premuto meno del tempo indicato il menu non appare.
  • hotkey = la combinazione di tasti da associare per visualizzare il menu, in questa versione è infatti possibile associare la combinazione di tasti al menu in modo da poterlo visualizzare sia col pulsante centrale del mouse e sia con una combinazione di tasti personalizzata.
  • tray = 1 o 0 indica se mostrare o meno un’icona nella tray. Premendo l’icona nella tray è possibile visualizzare lo stesso menu.
  • icon = Indica un file che contiene l’icona (file .ico o una libreria di icone, ad esempio una dll) e il numero dell’icona da utilizzare (se non specificato è 0) da assegnare alla tray.
  • items = qui è dove vengono definiti gli elementi ognuno separato da un punto e virgola (;).

 

Ogni record può essere o un menu oppure una foglia, è così possibile infatti creare menu che contengono sottomenu e foglie allo stesso livello o a livelli differenti.
Ogni record deve avere dichiarato un nome (name=) e opzionalmente un’icona (icon=) con la stessa sintassi mostrata per il valore icona della tray.

Analizziamo ora come creare un submenu.
Per definire un submenu basterà indicare all’interno di esso il valore items con tutti gli elementi, mettiamo ad esempio che io voglia creare il mio menu contenente un sottomenu (submenu1) e una foglia che apre il sito underatrain:

[menu1]
 name=Menu 1
 items=submenu1;record1
 icon=Shell32.dll,4

[submenu1]
 name=Submenu 1
 items=record11;record12

[record1]
 name=Record 1
 value=http://www.underatrain.it
 action=RUN
 wait=0
 icon=Shell32.dll,3

Nell’esempio il submenu1 ha anche 2 record (record11 e record12). E’ possibile anche richiamare record già definiti.

I record foglie sono di vario tipo e si occupano di mostrare messaggi, gestire la clipboard oppure lanciare file, vediamo ad esempio il record che si occupa di eseguire un programma.

Per indicare un record che avvia un programma dovremo specificare nel valore action la parola “RUN” (action=RUN).
Con questo parametro è possibile eseguire un programma o indicare al sistema di aprire un file col programma associato di default al tipo di file dal sistema.
E’ possibile indicare al menu di rimanere in attesa della chiusura del comando e di non rispondere fino al termine dell’esecuzione (parametro wait=1), inoltre si può specificare la cartella di esecuzione (working dir) che di default è impostata alla path dove si trova l’eseguibile (workdir=) e se la finestra deve essere minimizzata in fase di avvio (window=min), massimizzata (window=min) o nascosta (window=hide).
E’ possibile inoltre avviare un comando come amministratore (funzionalità disponibile da windows 7 in poi) col parametro admin=1 (attenzione verrà mostrato o meno un prompt a seconda delle impostazioni dell’uac e del pc), oppure eseguire un programma come altro utente indicando direttamente nome utente, password e dominio (runasuser,runasdomain,runaspassword).

[record-run-site-maximized]
 name=Open program main site
 value=http://www.underatrain.it
 action=RUN
 wait=0
 window=max

[record-run-cmd-in-c-minimized]
 name=Open C:\ in cmd
 value=cmd.exe
 action=RUN
 wait=0
 window=min
 workdir=C:\

[record-run-wait-config-file-editor]
 name=Change configuration
 value=MiddleMouseMenu.cfg
 action=RUN
 wait=1

[record-run-admin]
 name=Change configuration
 value=cmd
 action=RUN
 admin=1

[record-run-cmd-as-user2]
 name=Change configuration
 value=cmd
 action=RUN
 runasuser=username2
 runaspassword=password.user2
 runasdomain=localdomain

 

Record clipboard (action=CLIPBOARD), si occupa di gestire appunto la clipboard, o meglio di inserire in essa determinati valori, utile per esempio per le password se si vuole ritrovare la password nella clipboard e incollarla da qualche parte 😛

E’ possibile impostare un messaggio tooltip (message) che apparirà sotto al cursore del mouse e eventualmente un timeout per farlo scomparire (timeout).

[record-clipboard-no-message]
 name=Program site
 value=http://www.underatrain.it
 action=CLIPBOARD

[record-clipboard-message-disappear-after5sec]
 name=Clipboard with tooltip
 action=CLIPBOARD
 value=http://www.underatrain.it
 message=Value http://www.underatrain.it insert in clipboard. Paste to check.
 timeout=5

Record message (action=MESSAGE), per mostrare messaggi popup. E’ possibile specificare il titolo (titolo) della finestra, il testo (text) i secondi prima che scompaia (timeout).
E’ possibile anche specificare se si tratta di un popup informazioni (type=info) oppure di un popup di tipo “risposta si o no” (type=yesno). Il tipo informazioni mostra solamente un messaggio, mentre il tipo risposta si o no mostra il messaggio e imposta il valore del testo nella clipboard se si preme si, in questo caso è anche possibile specificare l’opzione di default nel caso si sia impostato un timeout (default=yes oppure default=no). Nel testo del messaggio è possibile utilizzare [$NEWLINE$] per andare a capo.
[record-info-timeout5sec]
 name=Message info
 text=The site of this program is http://www.underatrain.it
 title=Example of message simple
 type=info
 action=MESSAGE
 timeout=5

[record-timeout]
 name=Message yes or no with timeout
 text=If you press yes the value "UndeR A TraiN" is inserted in your clipboard.[$NEWLINE$]If timeout (after 3 sec) is like you press yes.
 default=yes
 value=UndeR A TraiN
 title=Yes or no to clipboard
 type=yesno
 action=MESSAGE
 timeout=3

Record digitazione (action=SEND) consente di emulare la pressione dei tasti e quindi di inviare del testo, utile ad esempio in moduli che non consentono di fare l’incolla del valore.
[send-string]
 name=Write the program url
 action=SEND
 value=http://www.underatrain.it

Record cartella (action=PATHDIR), vera novità comparsa dalla rc1 (in beta non era presente) consente di esplorare il contenuto di una cartella (path=percorso alla cartella).
E’ possibile specificare l’icona da utilizzare per le cartelle (directory=) e per ogni tipo di esensione (txt=,doc=) con la stessa sintassi utilizzata per l’icona nella tray. E’ possibile inoltre specificare un’icona di default da utilizzare qualora non ve ne siano specificate altre (default=), anche questa con la stessa sintassi <percorso icona o libreria>,<indice icona>.
Se non è specificato il menu non mostra nessuna icona di default, viene creato un file cache con i percorsi alle icone tale file è sempre sovrascritto nel caso vengano specificati parametri diversi per le estensioni. E’ possibile indicare al programma di utilizzare le icone di default del sistema nel caso non fosse specificata un’icona per l’estensione (usesystemicon=1), come detto non vengono utilizzate per impostazione predefinita.
E’ possibile indicare anche se visualizzare l’opzione per aprire la cartella con explorer.exe utilizzando l’opzione addoperdirectory=testo del messaggio.
Se si vuole farla apparire in cima alla lista aggiungere alla fine ,1 (virgola e 1) , nel testo del messaggio è possibile utilizzare le seguenti variabili:

  • [$NAME$] = nome della cartella
  • [$PATH$] = percorso completo alla cartella
  • [$RELATIVEPATH$] = percorso relativo alla cartella

Se non viene indicato nulla nel testo del messaggio il programma assume che non vogliate mostrare questa funzionalità, è inoltre possibile indicare al programma se volete o menu che vengano mostrare le cartelle vuote (showemptydirectory=1 o 0). Attenzione che se si utilizza il parametro addopendirectory questo valore viene ignorato, nel caso invece non sia specificato il programma assume che sia impostato a 1 e quindi non vengono mostrate le cartelle vuote.

[path-record-emptydir]
 name=Middle Mouse Menu
 icon=Shell32.dll,13
 ; the icon and name specified here are the icon and the name applied to the root menu record
 action=PATHDIR
 path=C:\Develop\MiddleMouseMenu
 txt=Shell32.dll,2
 default=Shell32.dll,1
 directory=Shell32.dll,4
 addopendirectory=Explore [$RELATIVEPATH$] ...,1

[path-record-noemptydir]
 name=Middle Mouse Menu No Empty
 icon=Shell32.dll,13
 ; the icon and name specified here are the icon and the name applied to the root menu record
 action=PATHDIR
 path=C:\Develop\MiddleMouseMenu
 txt=Shell32.dll,2
 default=Shell32.dll,1
 directory=Shell32.dll,4
 showemptydirectory=0

 

All’interno del file README.txt è riportato anche un esempio, bene vi lascio al download.