Newsgroup: it.comp.programmare.win32
Titolo: Registro di Windows

Scusatemi  ragazzi,  lo so che lo hanno già chiesto in molti, e ho
anche guardato i thred precedenti
ma cacchio, 
non riesco a scrivere quella stramaledettissima chiave di regsitro sul
mio registro di WIN XP Pro.
Avete un pezzo di codice che funzioni ? Sto scrivendo un programma in
visual c++ 6.0, utiizzando le classi, il wizard etcc etcc...
Mi basta scrivere sta maledetta chiave in un punto che non sia per un
solo utente ma per tutti, pensavo a LOCAL_MACHINE.
Ho provato con un codice trovato qui in giro : 
////////////////////////////////
	HKEY hKey;
	unsigned char szFilePath[100];
	LONG lnRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"\\Software\\MIO\\ILMIONOME",0,KEY_WRITE,&hKey);
 
	TCHAR  m_strFileName []="1";
	TCHAR sKeyName []={"ILMIONOME"};
	lstrcpy( (char *) szFilePath , LPCTSTR(m_strFileName) );
	lnRes = RegSetValueEx(hKey,	LPCTSTR( sKeyName ),0L,
	REG_SZ,szFilePath,REG_SZ ); 
///////////////////////////////
ma non scrive una fottuta cippa!
Grazie
F

mio registro di WIN XP Pro.
Supposto che il codice sia corretto ,tieni presente che per scrivere
in alcuni posti potresti dover bisogno di alcuni privilegi di
administrator .


E per altri, addirittura di sistema (file .inf per l'installazione di 
programmi, librerie e/o driver)
LP

 LP
Ottimo!
Considerando che il PC è mio, è a casa mia, ho installato Wiin io ed è pure 
originale (non taroccato)......devo aver sbagliato qualcosa!
Attualmente utilizzo due utenti, creati da me. Uno sono io e uno è la mia 
ragazza, che è naturalemente limitata.
Io però entro come utente administrator.
Sarà insufficente?

Avete un pezzo di codice che funzioni ? 
Prova questo :
           value =
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&key);
           if ( RegQueryValueEx(key,NomeValue,NULL,NULL,NULL,NULL) ==
ERROR_SUCCESS ) ;
           else
RegSetValueEx(key,NomeValue,0,REG_SZ,Nomefile,sizeof(Nomefile)+1) ;
           RegCloseKey(key);

 
Ti posso dire che in ambiente lavorativo, nell'installare su un PC un 
masterizzatore, mi hanno cambiato una DLL di sistema (ora non mi ricordo 
quale) con una versione precedente, molto più vecchia.
Dovendo poi utilizzare PHP e Oracle client sul quel PC, mi sono trovato 
un errore che mi diceva che la versione di quella DLL non era corretta.
1° problema: non potevo sostituire la DLL con il SO attivo perché il SO 
(WinNT 4.0) era in esecuzione
2° problema: non potevo sostituire la DLL a sistema fermo perché il 
disco era formattato NTFS e non avevo tool che fossero in grado di 
scrivere su quel file system.
Soluzione: Ho scritto al volo un installer attraverso i file .inf (per 
sapere come sono fatti mi sono rivolto al solito 
http://www.wotsit.org
 ) 
che, lanciato da utente amministratore, mi ha sostituito il file.
Riavviando il PC, mi sono trovato la nuova versione e quindi tutto 
funzionante.
Questo per dire che con il blocco degli accessi di Win a file e chiavi 
di registro, a volte, neanche un ammistratore può fare nulla, ma occorre 
un'entità ancora superiore.
Prova a riscrivere lo script attraverso i file .inf (hanno delle 
istruzioni per scrivere e rimuovere le chiavi del file di registro) e 
poi prova a lanciarlo.
Se hai bisogno, ti posso mandare un file di esempio che fa appunto la 
modifica di chiavi di registro.
Luca

Luca
Si grazie!
filip...@SENZASPAMhotmail.com

 
Ho riletto il tuo primo post, e ho visto che siamo andati un po' fuori tema.
Se non ho capito male, tu vorresti creare il valore ILMIONOME = "1" nel 
ramo HKLM\Software\MIO, giusto?
Se cosě fosse, hai comemsso un errore nel codice:
	HKEY hKey;
	unsigned char szFilePath[100];
	//ILMIONOME č un valore, non un ramo del registro
//	LONG lnRes = 
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\Software\\MIO\\ILMIONOME",0,KEY_WRITE,&hKey);
	LONG lnRes = 
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\Software\\MIO",0,KEY_WRITE,&hKey);
 
	TCHAR  m_strFileName []="1";
	TCHAR sKeyName []={"ILMIONOME"};
	lstrcpy( (char *) szFilePath , LPCTSTR(m_strFileName) );
	lnRes = RegSetValueEx(hKey,	LPCTSTR( sKeyName ),0L,
	REG_SZ,szFilePath,REG_SZ );
Prova in questo modo e poi sappimi dire.
Ciao e Buon Anno
Luca

Se non ho capito male, tu vorresti creare il valore ILMIONOME = "1" nel 
<CUT>
Ti ringrazio per avermi spedito il necessario per le INF,
inannzitutto.
Ho provato appena adesso a usare i codice che mi hai mandato ma non ha
sortito effetto.
A questo punto penso di avere fatto qualcosa di sbagliato io....da
qualche parte nel codice o nei diritti.
Proverò con più calma nei prossimi giorni e ti farò sapere.
Oggi purtroppo devo aiutare in cucina per fare i tortelli di
zucca....(!) cosa ben più ardua e misteriosa.
F

 F
Innanzitutto buon appetito!
Per il resto, guarderò del codice vecchio che ho già scritto e che funziona.
Ti rispondo di nuovo tra pochi giorni.
Luca

 ///////////////////////////////
Ciao. Io di solito uso il VB, però riesco tranquillamente a scrivere 
le chiavi di registro. Ti posto un suggerimento (che dovrai bene o 
male convertire per il C)
Apri al chiave:
const KEY_SET_VALUE = 2
dim ret as long
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Mio", 0, 
KEY_SET_VALUE, hKey)
Poi controlli ret che deve essere 0 se non ci sono errori. 
Per scrivere la chiave:
const NOT_USED = 0
const REG_SZ = 1
Dim Chiave as string  (contiene il nome della chiave da scrivere)
Dim Valore as string  (contiene il valore della chiave da scrivere)
ret = RegSetStringEx(hKey, Chiave, NOT_USED, REG_SZ, ByVal Valore, 
Len(Valore))
Anche in questo caso ret deve ritornare 0
Poi, dopo aver fatto la scrittura devi chiudere la chiave
RegCloseKey(hKey)
-- 
Just got a new car for my hubby. Great trade.... 
News 2000 [v 2.06] - 
http://www.akapulce.net/socket2000