Precedente :: Successivo |
Autore |
Messaggio |
mozart2 Mortale adepto
Registrato: 14/12/11 22:45 Messaggi: 30
|
Inviato: 14 Dic 2011 23:05 Oggetto: pascal, leggere programmi installati |
|
|
La mia necessità è quella, dato un computer con su windows XP, di poter capire quali programmi sono installati sul sistema e salvare su un file di testo il nome dei programmi e relativa versione.
Il linguaggio che sto adoperando è il pascal (utilizzando l'IDE lazarus), ma penso che la domanda possa essere interessante anche se volessi utilizzare altri linguaggi.
Il modo che avrei trovato per fare questo elenco sarebbe quello di sfruttare il resgistro di windows con un pseudo-codice analogo al seguente:
Reg := TRegistry.Create(KEY_READ);
Reg.RootKey := HKEY_LOCAL_MACHINE;
AssignFile(prova,'prova.txt');
reset(repository); //accede al file
while in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
do
nome:=Reg.Readstring(DisplayName);
versione:=Reg.Readstring(DisplayVersion);
writeln(prova, nome);
writeln(prova,versione)
end do
la domanda è: come faccio a controllare tutte le voci in Uninstall? (suppongo siano quelle che controllare windows per la schermata aggiungi/rimuovi) ad esempio VLC crea la voce VLC, GIMP la voce WinGimp-2.0_is1, lazarus crea Lazarus_is1 e via dicendo, come faccio a scorrerle tutte?
Se volessi darli a mano dovrei (mi sembra) dare:
Reg.OpenKeyReadOnly(SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\VLC)
nome:=Reg.Readstring(DisplayName);
versione:=Reg.Readstring(DisplayVersion);
writeln(prova, nome);
writeln(prova,versione)
Reg.OpenKeyReadOnly(SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1)
nome:=Reg.Readstring(DisplayName);
versione:=Reg.Readstring(DisplayVersion);
writeln(prova, nome);
writeln(prova,versione)
e via dicendo, il fatto che io non sappia a priori i nomi di tutte le cartelle dentro a version fa si che io non sappia come comportarmi.
Spero che ci sia qualcuno in grado di darmi una mano!
Ovviamente se qualcuno conosce un altro modo (usando il pascal!) per ottenere un elenco dei programmi installati su windows è il benvenuto per darmi consigli! |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 15 Dic 2011 10:00 Oggetto: |
|
|
cercando con Google vedo che dovrai creare una lista di stringhe e riempirla con i valori delle sottochiavi usando la funzione GetKeyNames() ...
Se cerchi GetKeyNames su Google trovi abbastanza info direi |
|
Top |
|
|
mozart2 Mortale adepto
Registrato: 14/12/11 22:45 Messaggi: 30
|
Inviato: 15 Dic 2011 22:46 Oggetto: |
|
|
Ciao, grazie per l'aiuto
era esattamente ciò che mi seriva!
edit:
posso, gia che ci sono, appendere una seconda domanda inerente?
Molti programmi nella stringa DisplayName riportano anche il numero di versione, ad esempio:
PeaZip 4.2
LibreOffice 3.4
Mozilla Firefox 8.0.1 (x86 it)
MegaGlest v3.5.2
vorrei in qualche modo rimuovere il numero di versione dal nome, avere quindi in output:
PeaZip
LibreOffice
Mozilla Firefox
MegaGlest
da molti programmi basta togliere le cifre alla fine separate da uno spazio (es: peazip, LibreOffice), per altri anche le lettere attacate alla cifra alla fine (es: megaglest) e separati dal resto da uno spazio, mentre firefox è un casino visto che contiene anche le parentesti...
quindi in generale devo fare qualcosa tipo (togliendo firefox):
Codice: | se ultimo carattere è cifra
allora rimuovi tutto (cifra, punti, lettere)
finchè non trovi spazio
|
la rimozione va ovviamente effetuata all'indietro, come faccio però a controllare se l'ultimo carattere è una cifra?
Una variante includendo firefox potrebbe essere
Codice: |
se ultimo carattere è parentesi chiusa (tonda, quadra, a graffe...)
allora rimuovi tutto (cifra, punti, lettere)
finchè non trovi parentesi aperta
se ultimo carattere uguale a spazio rimuovi spazio
se ultimo carattere è cifra
allora rimuovi tutto (cifra, punti, lettere)
finchè non trovi spazio
|
in questo modo tolgo prima la parentesi fino allo spazio, poi le cifre
potrebbe funzionare secondo voi?
forse dovrei aggiungere qualcosa come un controllo anche sugli spazi? e magari uno che controlli che la stringa rimanente non sia vuota... |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 16 Dic 2011 10:21 Oggetto: |
|
|
potresti provare localizzando la posizione della prima cifra nella stringa, e poi facendo una ricerca per l'ultimo spazio precedente (minore) la posizione della prima cifra. Poi tagli tutto da questo ultimo spazio in poi... |
|
Top |
|
|
mozart2 Mortale adepto
Registrato: 14/12/11 22:45 Messaggi: 30
|
Inviato: 16 Dic 2011 17:40 Oggetto: |
|
|
ok, grazie mille per i consigli |
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|