Newsgroup: it.comp.lang.delphi
Titolo: W2000 e registro per associare programmi alle estensioni dei file: esperienze/idee ?

Vorrei aggiungere ad un mio programma la possibiltà di
associarlo/disassociarlo a determinate estensioni di file.
Per far questo ho usato un componente (MILAssociate) che, dopo una
"cura" per renderlo compilabile con D6 P.E., sembrava fare il suo
dovere.
In realtà mi sono accorto che le mie conoscenze non erano esatte (ed
anche MILA pare aver problemi).
Allora, faccio un piccolo riassunto di quello che credo di aver capito
leggendo qua e là (correggetemi se sbaglio...):
Nella radice HKEY...ROOT del registro vi sono 2 chiavi:
La prima ha come nome l'estensione del file che mi interessa (e.g. .CRD)
cui è associata una stringa di default (e.g. 'Chords file') che ne
indica il genere (ad esempio potrei avere diverse estensioni [e.g.
.CRD, .TAB, .PRO] che rientrano in un unico genere di file [e.g. Chords
file] gestito da un medesimo programma).
La seconda si chiama come il nome del genere ('Chords file' nell'esempio
) e contiene una serie di chiavi e valori che specificano da quale icona
è contraddistinto, con cosa va aperto o fatto il quick view,....
Bene, a parte che il citato componente sembra talvolta sbagliare nel
definire il genere di file come valore dell'estensione, dopo una serie
di prove mi pare che W2000 (e suppongo anche NT, XP), oltre a queste
locazioni "comuni" di registro per le estensioni dei file, sembra averne
anche altre specifiche per ciascun utente.
Ho notato infatti che i programmi di associazione file per W95 talvolta
falliscono come il sottoscritto, per cui alcune associazioni fatte da
altri programmi sembrano resistenti a questi tentativi.
Andando a vedere con Opzioni -> Tipi file (di Esplora cartella), si vede
che il mio programma (associato alle chiavi sopra citate) viene definito
come programma predefinito, ma che sono possibili anche impostazioni
definite "personalizzate" che hanno la precedenza su quelle predefinite
"comuni".
Ad esempio, una chiave specifica (e personalizzata) per il tipo .CRD
l'ho al seguente indirizzo:
HKEY_USERS\S-1-5-21-343818398-1343024091-1588513203-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.crd
Dunque i programmi vecchi "ragionano" solo con le chiavi comuni (si
associano/riportano l'associazione con quelle), mentre W2000 (ed i
programmi più recenti) tengono conto anche di queste chiavi specifiche
degli utenti.
Domande: 
Qualcuno mi sa dare qualche indicazione se tutto ciò è vero e dove posso
trovare riferimenti/istruzioni precise in merito (ho provato diverse
volte con Google ma non ho finora trovato nulla di utile, anche perchè
le parole da cercare sono molto comuni; anche sul sito Microsoft non
sono stato capace di trovare l'articolo giusto :-(  ) ?
In che modo posso risalire all'indirizzo della chiave di cui sopra: la
prima parte (dopo USERS) temo sia diversa da utente a utente, ma
suppongo ci sia una qualche variabile/API per ottenerla, ma quale ?
Possibile che non esista una API che fa la registrazione da sola
(anzichè dover scrivere a "mano" tutti i valori nel registro rischiando
casini) ?
Grazie in anticipo
Simone
P.S. Anche la FAQ sembra riferirsi solo alle chiavi comuni
_______________________________________________________
 All resistance is futile ! Prepare to be assimilated !

  All resistance is futile ! Prepare to be assimilated !
-- 
All resistance is futile! Prepare to be disassembled !

Qui trovi tutto quello di cui (MS dice che) hai bisogno  =D
Grazie mille!
C'è tanta roba sul sito Microsoft ma trovarla è un'impresa: con le
ricerche ogni volta ottengo risultati diversi....
Tra l'altro ho proseguito le ricerche dal tuo indirizzo (mezza Domenica
:-( ) ed ho trovato altre precisazioni.
Da 
http://support.microsoft.com/default.aspx?scid=kb;IT;q257592
In Microsoft Windows NT 4.0 le associazioni dei tipi di file sono poste
in:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes 
 (HKEY_CLASSES_ROOT è un alias di questo indirizzo)
In Windows 2000 c'è un nuovo indirizzo in cui vengono tenute le
associazioni di file, specifiche dell'utente: 
  HKEY_CURRENT_USER\SOFTWARE\Classes
In W2000 le informazioni contenute in
HKEY_LOCAL_MACHINE\SOFTWARE\Classes  (HKEY_CLASSES_ROOT è un alias)
contengono le associazioni "globali", comuni a tutti gli utenti, ma
quelle eventualmente contenute in HKEY_CURRENT_USER\SOFTWARE\Classes
hanno la precedenza su eventuali "omonimi" globali.
Io per la verità le estensioni locali me le ritrovo presso:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
( equivalente a:
HKEY_USERS\S-1-5-21-343818398-1343024091-1588513203-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
 Infatti se scrivo nell'uno, cambia anche l'altro   )
Ho visto che cambiando l'associazione by "Opzioni cartella",
all'indirizzo di cui sopra + "\.estensione"  viene scritto un valore
stringa denominato "Application" ed il cui valore è il nome del file
(SENZA path) che serve per l'esecuzione/apertura.
Mancando il path, anche per programmi al di fuori del path di default di
window, deve esserci da qualche parte una tabella con il path completo.
Inoltre nella sotto-chiave OpenWithList viene aggiunto il nome del
programma nella lista (con l'indice MRUlist la cui lettera iniziale del
valore punta proprio al programma di default)
Se il valore è vuoto (o errato), viene usato quello globale.
Bon...per oggi sono stanco: se qualcuno ha qualcosa da aggiungere mi fa
un piacere (intanto ho chiesto aiuto anche in un NG americano)
Simone
_______________________________________________________
