Risultati da 1 a 11 di 11

Discussione: Come si realizza una voce di Menu contestuale?

  1. #1
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512

    Come si realizza una voce di Menu contestuale?

    Salve...
    Qualcuno mi sa dire come posso realizzare una voce di menu contestuale che per esempio mi chiami un programma e gli passi dei valori?
    Grazie in ogni caso

  2. #2
    Software Zone Fanatic L'avatar di MANDRAKE
    Data Registrazione
    28-12-2002
    Messaggi
    3.100

  3. #3
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512
    Ti ringrazio...
    Nel frattempo ho cercato di risolvere il problema da solo e sembra che ci sia riuscito, anche se la soluzione è decisamente complessa e quindi non sono ancora sicurto che i test effettuati siano sufficienti a garantire un perfetto funzionamento; in ogni caso è decisamente più complesso di quanto spiegato nel link.

  4. #4
    Software Zone Fanatic L'avatar di MANDRAKE
    Data Registrazione
    28-12-2002
    Messaggi
    3.100
    ma di quale menù contestuale stiamo parlando ?

    ciao

  5. #5
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512
    Quello che si visualizza facendo click destro su un File o Directory

  6. #6
    Software Zone Fanatic L'avatar di MANDRAKE
    Data Registrazione
    28-12-2002
    Messaggi
    3.100
    E tu come hai risolto ?

    io avrei scritto nel file di registro come indicato o in alternativa basta creare un file reg e lanciarlo

    ciao

  7. #7
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512
    se ti interessa davvero lo posso spiegare ma è una cosa decisamente incasinata e non certo corta

  8. #8
    Software Zone Fanatic L'avatar di MANDRAKE
    Data Registrazione
    28-12-2002
    Messaggi
    3.100
    ma perchè è incasinata se ti và spiegami cosa hai fatto

    Perchè o usi le api di windows del registro (sistema più flessibile) link sotto

    Registry Functions (Windows) e mediante codice aggiungi leggi elimini modifichi chiave

    o in alternativa sistema statico ti prepari un file reg con tutte le chiavi che ti occorrono e lo lanci

    ciao

  9. #9
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512
    :-)
    In ogni caso io utilizzo un linguaggio di programmazione molto poco conosciuto ma anche molto versatile e potente (WinBatch) il cui limite (deve pure avere qualche limite) è la velocità non elevatissima anche quando è compilato; questo linguaggio contiene istruzioni semplici anche per scrivere nel Registro quindi non ho la necessità di utilizzare API, chiamate DLL o altro.
    Il casino sta nella struttura del registro, nella gestione del Menu contestuale e, non ultimo, nella scarsissima documentazione al riguardo (ho il manuale del Registro di Windows, ho fatto ricerche in Internet anche in MSDN e devo dire che ho trovato poco e poco chiaro).
    Dunque...
    Primo: esistono 2 tipi di menu contestuali, che più o meno vanno sotto il nome di Statico e dinamico; il Menu dinamico è più versatile e potente ma è anche molto più incasinato dell'altro e molto poco documentato, quindi qui ci occupiamo solo del menu statico.
    Ipotizziamo di volere realizzare una voce nel menu contestuale che viene visualizzata solo facendo click destro su un File con estensione .txt
    Nella chiave di registro HKEY_CURRENT_ROOT ci sono tantissime sottochiavi, una buona parte delle quali hanno come nome l'Estensione dei File; quindi ci sarà una sottochiave ".TXT", una ".doc", una ".avi", ecc...
    All'interno di questa sottochiave il valore di default deve contenere il nome di un'altra sottochiave che si riferisce al Programma attualmente associato a quell'Estensione; per esempio da me il valore di default della sottochiave ".txt" contiene "txtfile".
    Ora andiamo nella chiave HKEY_CURRENT_ROOT\txtfile; all'interno trovo 2 sottochiavi:
    DefaultIcon
    Shell
    Lasciamo perdere la chiave DefaultIcon che non so a cosa serve; fondamentale per il nostro scopo è la sottochiave "Shell"; all'interno della Chiave "Shell" troviamo le sottochiavi:
    Open
    Print
    Printto
    All'interno di ognuna di queste troviamo la sottochiave
    Command
    Ora i Nomi "Open", "Print" e "Printto" sono chiamati Verbi e sono riconosciuti dal sistema; il sistema però riconosce anche qualsiasi altro nome si scriva, anche in italiano (questo è uno dei tanti punti che creano confusione)
    I Nomi "Open", "Print", "Play", "Edit" oltre ad essere standard e riconosciuti dal sistema, da quello che ho capito dalla scarsa documentazione esistente, fanno tutti più o meno la stessa cosa, la differenza fra l'uno e l'altro è più formale che altro; l'unica differenza è che possono venire visualizzati nel Menu contestuale con nomi diversi, anche tradotti automaticamente dall'inglese all'italiano.
    Il Verbo "Printto" è anch'esso riconosciuto dal sistema e DOVREBBE riferirsi ad 1 voce di Menu che permette di stampare il File scegliendo quale stampante utilizzare, anche non connessa; comunque questo non l'ho testato e queste informazioni sono approssimative; esistono anche altri Verbi standard riconosciuti dal Sistema ma non li conosco.
    Lavoriamo all'interno della Sottochiave "Shell".
    Se, per ipotesi, al posto di una chiave con Nome "open" si inserisce una chiave con nome "Prova", facendo click destro su un File .txt verrà visualizzata la voce "Prova"; facendo click su essa, per ora, non succede nulla.
    Se, all'interno della Chiave "Shell", alla variabile di default assegno il valore "Prova", questo Valore verrà visualizzato sempre al primo posto nel Menu contestuale.
    Dicevamo prima che all'interno di ogni Chiave "Open", "Edit", "Prova" esiste un'altra sottochiave di nome "Command": questa sottochiave, nel valore di default, deve contenere (finalmente!) il nome del programma da chiamare.
    Quindi ora all'interno della sottochiave "Prova" costruisco una sottochiave "Command"; all'interno della chiave "Command" assegno il valore di default "%SystemRoot%\system32\NOTEPAD.EXE %1" (senza apici); il tipo di dato deve essere esclusivamente REG_EXPAND_SZ altrimenti non funziona (anche questo ho dovuto trovarlo da solo); %1 viene poi automaticamente sostituito dal nome completo del File su cui hai fatto click destro.
    A questo punto se fai click destro su un file .txt trovi nel menu contestuale "Prova"; se selezioni "Prova" ti si apre il file...
    In aggiunta... Se all'interno di 1 Chiave setti il Valore di default con un Nome diverso qualsiasi, nel menu contestuale verrà visualizzato quel nome anziché quello della chiave: per esempio se all'interno della Chiave "Prova" setti il valore di default "Ciccia" (tipo di dato REG_SZ) vedrai nel menu la voce "Ciccia" anziché "Prova", ma continuerà a funzionare.
    Sembrerebbe che %2 s riferisca alla stampante di sistema ma non ho fatto nessun test al riguardo

    Ora capisci perché ti dicevo che la procedura è estreemamente incasinata?

    Se sei un programmatore capisci che automatizzare questa procedura non è affatto complicato, ma è estremamte complesso capirla, soprattutto con la scarsissima documentazione esistente.
    Se interessa posso fornire un breve listato in linguaggio WinBatch che rappresenta una funzione che effettua l'assegnazione di una voce di Menu contestuale, come descritto sopra.
    Ultima modifica di archimede; 10-08-2010 alle 13.05.18

  10. #10
    Software Zone Maniac
    Data Registrazione
    29-01-2003
    Località
    Verona
    Messaggi
    1.512
    Che succede? non rispondi più? sei rimasto allibito per il casino?
    :-)

  11. #11
    Software Zone Fanatic L'avatar di MANDRAKE
    Data Registrazione
    28-12-2002
    Messaggi
    3.100
    Citazione Originariamente Scritto da archimede Visualizza Messaggio
    Che succede? non rispondi più? sei rimasto allibito per il casino?
    :-)
    succede che ero per lavoro in trasferta !!

    Queste sono le chiavi del registro da utilizzare per il menu contestuale delle directory
    -------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\Folder\shell\Mia voce\Command]
    @="notepad"
    -------------------------------

    al posto di notepad devi mettere quello che serve a te

    Queste sono le chiavi del registro da utilizzare per il menu contestuale in tutti file
    -------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\*\shell\Mia voce\Command]
    @="notepad"
    -------------------------------
    se fai click con il pulsante destro su qualsiasi file vedi Mia voce che se selezionata apre notepad

    per il resto guarda quì

    Extending Shortcut Menus

    ciao

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •