Newsgroup: it.comp.lang.delphi
Titolo: Shell (per esperti)

Ho aggiunto al menù contestuale associato alle cartelle una voce. Facenddovi
click parte il mio programma, che per operare avrebbe bisogno del nome della
suddetta directory. Come posso recuperarlo? Ho visto che WinAmp lo fa, ma
non so come emularlo :-\ Grazie mille
Azathoth

> Ho aggiunto al menų contestuale associato alle cartelle una voce.

Ummm.... la butto cosė a caso... ParamStr (1) ?   Prova... :)
Ciao, DavideDG

 Azathoth
    La cosa più semplice che puoi fare è utilizzare il messaggio di Windows
wm_CopyData e la sua struttura associata.
    Poiché la DLL è nello spazio di indirizzamento dell'Explorer, essa non
può comunicare direttamente con il tuo programma ( in Windows gli spazi di
indirizzamento dei programmi sono separati ). L'idea invece è quella di
riempire la struttura dati di wm_CopyData e inviare alla form della tua
applicazione il messaggio e come parametri il puntatore all'area di memoria
della struttura. Con quel particolare messaggio Windows ti permette di
condividere informazioni tra i programmi.
    Se vuoi altre delucidazioni, posta altri messaggi.
    Saluti!
______________________________________
Gian Luca Dalla Torre
E - Mail: 
gianluca....@casteo.net
______________________________________

 non so come emularlo :-\ Grazie mille
Winamp lo fa ? Tutti credo che lo fanno.
Memorizzati da qualche parte ( nel registro di Windows ) la directory e il
nome del file EXE della tua applicazione.
Dalla DLL ti leggi tale chiave e poi avvi il tuo programma !! Ok ?
Per creare la chiave con memorizzata la directory del tuo programma,
dovresti farlo all'avvio ( il primo oppure ad ogni avvio ) del programma
stesso. In questo modo, quando installi il programma, l'installazione deve
avviare il tuo programma creando la chiave con il nome della directory. Le
volte successive, la DLL si legge la chiave conoscendo cosě il percorso del
tuo programma. Poi giostra tu la situazione come vuoi, l'importante č che
fai sapere alla DLL il percorso del tuo programma. ( puoi fare pure un file
su HD....ma il registro mi pare piů comodo in questa situazione )
Ti saluto......ciao !!
Antonio Tarolla

Forse non ho capito la risposta (molto probabile) o non mi sono spiegato
bene (anche questo molto probabile hihi). Allora, in questo momento, ogni
volta che faccio click col destro su una cartella, mi appare pure la voce
"Cripta". Io devo fare sě che appena ci clicco parte la procedura per
crittare QUELLA cartella. Il problema č che non so come dire al mio
programma il nome di tale cartella. Come si fa? Ancora grazie.
Azathoth

Ma il messaggio come lo invio all'applicazione? Dovrebbe essere la cartella
a spedirlo? Mi pare strano :-) Forse non mi ero spiegato bene... nella
risposta a Tarolla c'è scritto esattamente cosa vorrei fare.
Azathoth

Ma paramstr(1) non è l'equivalente argv[1] di C? Quindi se non specifico
nulla, è una stringa vuota...e non so che farci :-)
Azathoth

Allora, ti faccio un mix di alcune cose che ti sono state già dette,
premettendo che io per fare un menu contestuale sono andato
a modificarmi il registro da programma (non so se ci sono altri metodi,
e se funziona su NT), creando una cosa del tipo
HKEY_CLASSES_ROOT\Directory\shell\Mio menu contestuale
...hai fatto così anche tu? ...
dopo aggiungi una cartella (o meglio chiave) 'command'
e nella stringa predefinita '(predefinito)' inserisci
"C:\Pogrammi\DirTuoPrg\TuoPrg.exe %1"
(%1 è il nome della directory che viene passata come parametro)
e il tuo prg dovrà leggersi il ParamStr(1) che è appunto la directory.
L'ho fatto un bel po' di tempo fa e funziona, l'unico problema
è con i nomi delle dir contenenti spazi
'C:\Pippo Pipperi\Pluto.doc' lo vede come due parametri!!
1-->'C:\Pippo'
2-->'Pipperi\Pluto.doc'
che ho scavalcato facendo un ciclo e inserendo uno spazio
tra un parametro e l'altro (se però ci sono dir con 2 o + spazi.....)
Spero di aver capito e di esserti stato d'aiuto
Ciao!
Alan Solo
ps[OT x il thread]: come si fa a leggere il parametro passato all'exe
'completo' ovvero in una sola stringa??
--
Posted from [194.242.220.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 inserirli per non avere problemi con i nomi contenenti spazi.
Ciao :)
davide dg

 nulla, è una stringa vuota...e non so che farci :-)
Ciao... sarà che è tardi e che conosco pochissimo di C... ma non riesco a
capire quello che hai
scritto...
che significa "se non specifichi nulla" ??
paramstr (1) ti ritorna l'argomento passato su riga di comando al tuo
eseguibile...
cioè se tu scrivi (per es. al prompt dei comandi) : MioProgramma.exe
FileDaAnalizzare.ext
allora paramstr(1) ti ritornerà FileDaAnalizzare.ext
E così immagino sia comandato il tuo programma da windows quando viene
lanciato per gestire
le shell extensions.
Se ancora non ho capito... scusami... ma come avevo scritto la soluzione
l'avevo buttata lì a caso...
perchè non ho mai usato le shell extension nei menù di explorer...
Ciao! Davide DG





giuro che quando ho postato io 


il post di Andre Creola non c'era 
ancora!!


... ringrazio il refresh di 
mailgate.org
 
:-)


scusate


 


Ciao!


Alan Solo



E io che pensavo di dover fare chissà cosa...era troppo banale e nemmeno
l'avevo provata :-) Ce l'avevo lì sul piatto... Grazie a tutti! Per la
serie, smanetta o arrangiati...
Azathoth

    Non riesco ancora a capire il problema: non riesci a passare
all'applicazione il nome della cartella o non riesci proprio a recuperare il
nome della cartella dopo la selezione del tuo menů "cripta"?


 'completo' ovvero in una sola stringa??
Dall'help del Delphi:
CmdLine is a pointer to the command-line arguments specified when the 
application is invoked.
Unit
System
Category
command line utilities
var CmdLine: PChar;
Description
In a program, the CmdLine variable contains a pointer to a null-
terminated string that contains the command-line arguments specified 
when the application was started. Use ParamStr to access individual 
arguments.
In a library (DLL), CmdLine is nil.
-- 
Roberto Lupi

Roberto Lupi:
| > ps[OT x il thread]: come si fa a leggere il parametro passato all'exe
| > 'completo' ovvero in una sola stringa??
|
| Dall'help del Delphi:
|
| CmdLine is a pointer to the command-line arguments specified when the
| application is invoked.
|
| Unit
|
| System
|
| var CmdLine: PChar;
ottimo, grazie per la dritta!
ps: se i parametri vengono passati tra "" vanno
a finire tutti nel paramstr(1) (come già suggeritomi),
cmq la tua mi sembra una soluzione migliore...
Grazie ancora
Ciao!
Alan Solo