Newsgroup: it.comp.lang.delphi
Titolo: Netscape e explorer path dir

Ho risolto il mio problema di path(Conoscere le dir di installazione di NE e
IE)
La chiave nel registry č:
'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\'
Qui ho iexplorer.exe, netscape.exe e netscape6.exe, con all'interno
l'agoniato (Default), che pero' quando tento di leggerlo mi restitisce
vuoto. Se leggo invece la chiave PATH mi restituisce il valore della
chiave,PERCHE????
Questa č la funzione:
function retPathOfIexplorer: string;
var
    sPathIexplore : string;
    Reg: Tregistry;
begin
    sPathIexplore := '';
    try
        Reg := Tregistry.create;
        Reg.RootKey := HKEY_LOCAL_MACHINE;
// KEY_REGISTRY_APP_APPLICATIONS =
'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths';
//IEXPLORE_EXE = 'iexplore.exe'
        if Reg.OpenKey(KEY_REGISTRY_APP_APPLICATIONS+'\'+IEXPLORE_EXE,
false) then
        begin
            sPathIexplore := Reg.ReadString('(Default)');
        end;
    finally
        reg.free;
    end;
    result := sPathIexplore;
end;
Grazie

 wrote in message
news:9v4n0p$d2brt$1...@ID-106340.news.dfncis.de...

Grazie a un mio collega la soluzione č questa:
  sPathIexplore := Reg.ReadString(string(pchar(NIL)));
Ma č possibile????


Che non si possa fare il typecast da NIL a stringa, che si possa fare il
doppio typecast NIL->pchar->string o che per leggere la default key si debba
operare in modo assolutamente non documentato dall'help di delphi? :)
Il fatto e' che, se alla funzione di cui la ReadString e' wrapper passi come
stringa del nome di valore NULL (parlo di C, naturalmente), il valore letto
e' il default value della chiave; se invece le passi un puntatore non NULL
il quale punti ad una stringa vuota, la funzione cerca di leggere una chiave
che abbia per nome una stringa vuota (nome che crea, su win9x,
l'interessante effetto collaterale di avere una chiave invisibile, che cioe'
non viene enumerata ma e' leggibile e scrivibile: winamp di non so quale
versione lanciava il proprio agent con questa chiave, nascosta nel run: da
regedit non si vedeva ma aprendo a mano il file .dat era visibile una chiave
senza nome contenente il nome dell'exe)...
Avendo pero' definito di tipo String il parametro della ReadString, non e'
possibile passare un NIL (che e' un tipo puntatore).
Ne' e' possibile (per motivi ignoti) fare il cast di NIL in stringa...
Il che e' obiettivamente strano dato che la stringa in fondo e' un
puntatore.
E' pero' possibile fare il cast di un puntatore *a caratteri* in una String
(compatibilita'? forse, di certo e' cosa buona e giusta), percui con un
doppio cast si risolve la questione :)
Ciaotutti,
*

 wrote in message
news:9v5bg6$d3gc4$1...@ID-68324.news.dfncis.de...

Grazie Ale.

 > >   sPathIexplore := Reg.ReadString(string(pchar(NIL)));
Scusa se mi intrometto e faccio il sapientino, ma
sPathIexplore := Reg.ReadString('');
pareva brutto?
Jax


Tu mi insegni che un puntatore nullo e' affatto diverso da una stringa
vuota, la quale e' un puntatore non nullo ad un valore nullo...
Ciaotutti,
*

 ha scritto nel messaggio
news:9v76ec$dfss4$1...@ID-68324.news.dfncis.de...

Sicuramente, ma quello che volevo dire è: perché farsi queste seghe mentali con i typecast
quando bastava una stringa vuota?
Nient'altro :)
Jax


Perche' (a quanto mi diceva Davide, e dato che la funzione e' un wrapper
dell'API direi che e' logico) la stringa vuota *non* bastava, dato che
andava appunto a cercare una chiave il cui nome fosse *una stringa vuota*
anziche' la default key (che invece viene letta se si passa all'API  un NULL
pointer).
Ciaotutti,
*

 quando bastava una stringa vuota?
Nessuna sega mentale.
Una stringa vuota non equivale a un puntatore nullo e
quello che serviva alla funzione era un puntatore nullo.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 quello che serviva alla funzione era un puntatore nullo.
Forse non ho seguito bene... mi sembrava che si volesse recuperare il valore di (Default)
di una chiave... usando una stringa vuota (l'istruzione sopra), funziona benissimo.
Perdonatemi se ho travisato il problema!
Jax


Non ho fatto prove, ma a quanto mi diceva Davide e' stato tipo il primo
tentativo che ha fatto e non ha dato alcun frutto.
Per la cronaca, noi sviluppiamo su NT, non vorrei che NT e 9x avessero un
comportamento diverso...
Ciaotutti,
*

 funziona benissimo.
E' probabile che usare una stringa vuota o usare un valore
nullo, nel caso specifico, produca lo stesso risultato.  
E' pero' diverso pensare che una stringa nulla sia uguale 
a un valore nullo.  E' questo che si intuiva dai tuoi
messaggi ed e' questo stiamo confutando.


 comportamento diverso...
Su NT effettivamente non so come si comporti, posso dirti con certezza che su win98 e
win2000 (con accesso administrator) funziona, avendo provato.
Jax

 messaggi ed e' questo stiamo confutando.
Sure! Non intendevo certo dire questo, è pacifico che un puntatore nil sia diverso da una
stringa vuota :) Lo sapevo che c'era il misunderstanding...
Jax