PDA

View Full Version : [c] Cambiare la scritta del cestino


frizzo28
23-12-2005, 12:32
Ho trovato su un sito il modo di scrivere sul registro di sistema con c allora ho un po' modificato il codice ed ho fatto sto programmino che cambia la scritta del cestino...
Come compilatore uso dev c++ della blodsheed.
#include <windows.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>
char windir[MAX_PATH];
char g;
unsigned char reg[10];
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
cout<<"######## Davide Granata ########\n\n";
cout<<"\nPremi invio per iniziare";
getchar();

system("cls");
cout <<"Scrive il nome del Cestino: ";
cin>>reg;

{HKEY hKey;





RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\ShellNoRoam\\MUICache",&hKey);
RegSetValueEx(hKey,"@H:\\WINDOWS\\system32\\SHELL32.dll,-8964",0,REG_SZ,reg,sizeof(reg));
RegCloseKey(hKey); }


cout<<"Operazione eseguita! \n clikkare sul desktop e premere f5\nPremere invio per terminare";


getchar();
getchar();
}

Vorrei sapere cosa dovrei modificare per farlo funzionare su turbo c++ 3.0 della borland.
Tks a tt! :D

wisher
23-12-2005, 12:42
che riga ti da errore?
visto così sostituirei system(cls) con clscr(); che si trova nella conio.h del turbo c (ti ricordo che il turbo c è tutt'altro che standard)

frizzo28
23-12-2005, 12:53
k... Più veloce di una chat... :D
Ho sostitutito il system ("cls") col clrscr() xro mi da questi errori:
1) Unable to open include file windows.h
2) Undefined symbol 'MAX_PATH'
3) Declaration syntax error
4) Type mismatch in redeclaration of 'cout'
5) Un altro declaration syntax error
Suggerimenti??? :muro:

wisher
23-12-2005, 12:59
mi viene un dubbio, dato ke turco c è molto vecchio e ha la dos.h potrebbe darsi ke nn supporti win semplicemete xkè quando è stato scritto win nn c'era.
questa xò è solo una mia supposizione.

frizzo28
23-12-2005, 13:08
ah... k... :cry:

17Qwerty71
23-12-2005, 16:26
Ma perchè molti hancora sono legati a questo turbo c che, secondo me, è l'antistandard per eccelenza? :confused:
Cmq nel tuo caso non si trovano gli header delle api di win nella cartella degli include del compilatore :)

wisher
23-12-2005, 16:28
Ma perchè molti hancora sono legati a questo turbo c che, secondo me, è l'antistandard per eccelenza? :confused:
Cmq nel tuo caso non si trovano gli header delle api di win nella cartella degli include del compilatore :)
quoto in pieno....
perchè nn si scaricano visual studio express e provano un vero compilatore...

cionci
23-12-2005, 17:40
Turbo C non può compialre quel codice perchè non produce eseguibili per Windows...

frizzo28
24-12-2005, 14:22
ah... tks... cmq come ho gia detto in un altro post a scuola c'è solo il TC e c insegnano quello. Cmq mo provo altri compilatori.

IspiCiosa
24-12-2005, 14:24
Ciao ho provato a far girare il programmino di frizzo ke cambia nome al cestino...
compilato con dev c++ ma nn mi funzia... fa tutto quanto esegue corretamente ma nn cambia nome...

frizzo28
24-12-2005, 18:49
A me sul dev c++ 4.9.9.2 mi funzia senza problemi...

frizzo28
25-12-2005, 12:13
Hai ragione IspiCiosa !!!! Funzia solo sul mio PC nn so perchè l'ho provato (gia compilato) sul portatile che ha la stessa wers. di windows (XP prof. sp 2) e nn funziona :cry: :cry: . Chi ha idea del perchè????

17Qwerty71
25-12-2005, 20:31
così ad occhio mi sembra errato quel blocco che hai messo dove stanno le chiamate alle api :)
In questo modo la variabile reg, che stà al di fuori, penso non sia visibile dentro il blocco

IspiCiosa
31-12-2005, 15:42
mi date una mano a corregere per farlo andare sul mio pc??

dovè sbagliato?

frizzo28
02-01-2006, 12:46
così ad occhio mi sembra errato quel blocco che hai messo dove stanno le chiamate alle api
In questo modo la variabile reg, che stà al di fuori, penso non sia visibile dentro il blocco
Non sono molto esperto mi daresti una mano a farlo funzionare sul dev c++? :D

17Qwerty71
02-01-2006, 14:17
Non sono molto esperto mi daresti una mano a farlo funzionare sul dev c++? :D
Prova a togliere le due parentesi graffe, quella prima di HKEY hKey; e quella dopo di RegCloseKey(hKey); .
Magari riporta anche gli errori che ti da il compilatore. :)

frizzo28
06-01-2006, 21:51
Ho trovato l'errore è in questa stringa:
RegSetValueEx(hKey,"@H:\\WINDOWS\\system32\\SHELL32.dll,-8964",0,REG_SZ,reg,sizeof(reg));. Io ho windows installato in H quindi "H:\\WINDOWS\\system32" va bene ma sull'altro pc dove lo ho provato è C quindi ho dovuto modificare il codice così: "C:\\WINDOWS\\system32". Ora la domanda al forum è questa... Come faccio al posto di H a metterci una variabile che aquisisco all'inizio chiedendo all'utente dove è installato il sistema? Io ho provato così ma non funzia:
#include <windows.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>
char windir[MAX_PATH],unit;
unsigned char reg[10];
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
cout<<"######## Davide Granata ########\n\n";
cout<<"\nPremi invio per iniziare";
getchar();

system("cls");
cout <<"Scrive il nome del Cestino: ";
cin>>reg;
cout <<"In quale partizione hai installato windows?: ";
cin>>unit;


{HKEY hKey;



RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\ShellNoRoam\\MUICache",&hKey);
RegSetValueEx(hKey,"@%c:\\WINDOWS\\system32\\SHELL32.dll,-8964",unit,0,REG_SZ,reg,sizeof(reg));
RegCloseKey(hKey); }


cout<<"Operazione eseguita! \n clikkare sul desktop e premere f5\nPremere invio per terminare";


getchar();
getchar();
}

Grz a tt :)

kk3z
07-01-2006, 12:31
GetWindowsDirectory() + "\\system32"
oppure
SHGetSpecialFolderPath con CSIDL_SYSTEM (per questa funzione devi avere ie 5)

EDIT:
RegSetValueEx(hKey,"@%c:\\WINDOWS\\system32\\SHELL32.dll,-8964",unit,0,REG_SZ,reg,sizeof(reg));
urgh, questo non si può fare, non tutte (delle winapi direi nessuna) le funzioni che accettano stringhe hanno la formattazione incorporata!

rdefalco
07-01-2006, 18:56
Si può anche pescare la environment variable WINDIR

frizzo28
10-01-2006, 15:21
Si può anche pescare la environment variable WINDIR
SHGetSpecialFolderPath con CSIDL_SYSTEM (per questa funzione devi avere ie 5)

Scusate ma sono niubbo del c nn ho capito cm devo fare per correggere... :muro:.

frizzo28
02-03-2006, 19:33
up come faccio a fargli rilevare la cartella di installazione di windows??? e sostituire in questo codice:

RegSetValueEx(hKey,"@H:\\WINDOWS\\system32\\SHELL32.dll,-8964",0,REG_SZ,reg,sizeof(reg));

H con la cartella dove è installato windows(quindi c o d o via dcicendo???)
:)