Jump to content

Regedit


xerxes

Recommended Posts

Pessoal, gostava de saber como posso fazer para aceder ao regedit, de forma a conseguir criar, modificar e apagar regKeys. Tenho um programa que deve criar uma entrada de registo para poder ser executado.

Já agora outra duvida: como consigo aceder ao root do sistema tipo -> fopen("%systemroot%\system32\programa.exe", "a"); ou coisa parecida.

Desde já um grande obrigado por lerem e tentarem ajudar. 😄

Link to comment
Share on other sites

Muita gente é capaz, mas aqui ninguém é empregado de ninguém. Tenho a certeza que se te deres ao trabalho de ler o conteúdo dos links que te dei consegues chegar às respostas que procuras, até porque no site da MSDN existem exemplos de como ler, inserir, alterar e apagar chaves e valores do registo do Windows.

EDIT: queres aceder ao registo ou ao Regedit? É que podes criar um ficheiro de texto e mandar o Regedit executá-lo para alterar o registo.

Desaparecido.

Link to comment
Share on other sites

TheDark , quero aceder ao regedit do windows xp, tb n estou a dizer k são empregados, so tou a pedir por uma ajuda, se soubex as respostas n estava aki, antes de postar seja o k for tempo peskisar, vejo o forum como um auxilio, so peço para m explicarem as coisas SFF! tar a apontar para links é lixado para o k tem duvidas e facil para o explicador.! So gostava de uma resposta realmente util. Se n t importares, explica-me como fazes isso do ficheiro de texto para aceder ao regedit. SFF.

Desd já tks a todos.

Link to comment
Share on other sites

Tudo bem, ainda faltam uns minutos para a meia noite... 😄 vou tentar explicar como aceder ao registo directamente a partir da API win32. O que disse sobre o ficheiro de texto foi só porque falaste em regedit no título.

Digamos que queres aceder à chave HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run, ver se está lá um determinado valor, e se estiver, alterá-lo para outro, e se não estiver, criá-lo.

Não sei nada disto de cor, vou seguir as indicações dadas no MSDN.

#include <tchar.h>
#include <windows.h>
#include <stdio.h>

#define MAX_VALUE_NAME 16383

void main() {
HKEY	hKey;
DWORD	cValues=0;	// numero de valores da chave aberta
TCHAR	achValue[MAX_VALUE_NAME];		// buffer para o nome do valor
TCHAR	subkeyName[] = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
DWORD	cchValue = MAX_VALUE_NAME;	// tamanho do buffer

printf("A abrir a chave...");

RegOpenKeyEx(HKEY_CURRENT_USER,	//chave base
	subkeyName,				//subchave
	0,						// sempre zero
	KEY_READ | KEY_WRITE,	// pedido de leitura e escrita
	&hKey);					// chave

printf(" aberta!\nA pesquisar a chave...");

RegQueryInfoKey(
	hKey,					// key handle 
	NULL, NULL, NULL, NULL, NULL, NULL,
	&cValues,				// Numero de valores na chave
	NULL, NULL, NULL, NULL);

printf(" terminado!\nA percorrer %l valores:\n", cValues);

bool foundVal = false;
if (cValues) { //percorrer todos os valores da chave
	for (DWORD i=0; i<cValues && !foundVal; ++i) {

		cchValue = MAX_VALUE_NAME; 
		achValue[0] = '\0'; 
		RegEnumValue(hKey, // chave aberta
			i,				// índice do valor
			achValue,		// buffer para conter o valor
			&cchValue,		// tamanho do buffer
			NULL, 
			NULL,
			NULL,
			NULL);

		_tprintf(TEXT("\tValor encontrado: %s"), achValue);

		if (_tcsicmp(achValue, TEXT("notepad")) == 0) {
			printf(" -> notepad encontrado!\n");
			foundVal = true;
		}

		printf("\n");
	}
}

if(!foundVal) {
	printf("notepad nao encontrado.\nA criar valor...");
	//criar o valor
	//esta função serve também para alterar o valor a chaves existentes
	RegSetValueEx(hKey,	// subkey handle 
		TEXT("notepad"),	// value name 
		0,					// must be zero 
		REG_SZ,				// value type 
		(BYTE *) TEXT("notepad.exe"),		// pointer to value data 
		sizeof(TEXT("notepad.exe")));		// data size
	printf(" criado!\n");
}

//apagar o valor
printf("A apagar o valor...");
RegDeleteValue(hKey, TEXT("notepad"));
printf(" apagado!\n");
}

Pronto, exemplos para todas as operações. Se tiveres mais dúvidas avisa. 1h12 minutos... demorou mais do que esperava...

Desaparecido.

Link to comment
Share on other sites

Mas isto foi à conclusão que com a informação do MSDN (e alguma paciência para procurar) conseguem-se as respostas.

Eu já tinha trabalhado com o registo, é verdade, mas de todas as vezes que preciso tenho que ir procurar porque é algo complicado e difícil de decorar, pelo menos não trabalhando com o registo frequentemente.

Não podes é esperar que alguém tenha sempre paciência de andar a fazer as pesquisas por ti...

Desaparecido.

Link to comment
Share on other sites

Tens razão the dark, mas em casos de desespero e em ultimo recuros uso o forum. E este era um desses casos.

A tua resposta foi 100% esclarecedora.

Bem, qt ao meu segundo problema, estive a peskisar e encontrei a seguinte maneira para poder saber onde o windows está instalado:

#include <stdio.h>
#include <windows>
#include <conio.h>

int main(int argc, char *argv[])
{

    char FolderName[MAX_PATH];
    GetWindowsDirectory(FolderName,MAX_PATH);      // Aki tenho o caminho do windows, na foldername
    printf("o caminho do windows -> %s", FolderName);
    getch();

return 0;
}

O problem é que agora n consigo abrir os ficheiros de texto a usar esse caminho, tentei desta forma sei k está mal, mas é so para vcs terem uma nocção do k quero:

fopen(""FolderName"\\system32\texto.txt", "a");

Mas n tou a conseguir... 😉

Desde já tks pela ajuda []

Link to comment
Share on other sites

Já agora the dark, so mais uma ultima coisa se n t importares.

Pretendo k o programa abra mais k 1 ficheiro de texto, em k o caminho seja o :

GetWindowsDirectory(FolderName,MAX_PATH);

sprintf(caminho, "%s\\system32\\", FolderName);

Mas o fixeiro a ser aberto tenha diferentes nomes:

#include <stdio.h>

#include <windows>

#include <conio.h>

int main(int argc, char *argv[])

{

char FolderName[MAX_PATH], caminho[MAX_PATH];

GetWindowsDirectory(FolderName,MAX_PATH);

sprintf(caminho, "%s\\system32\\", FolderName);

//printf("%s", caminho);

FILE *ficheiro;

ficheiro=fopen(caminho"texto.txt", "a"); // Isto n funciona, pq os ficheiros são texto, texto2, texto3 etc....

if(ficheiro!=NULL){

printf("abriu com sucesso");

fputs("OLA", ficheiro);

getch();

}else{

printf("ERRO de abertura");

  getch();

}

  return 0;

}

O comentário é so para exemplificar.

A duvida é se existe alguma nameira de concatenar o caminho com o nome do ficheiro a ser aberto dentro da função fopen (caminho"texto.txt", "a");

Axo k há maneira, mas n estou a conseguir.

Um obrigado a todos, em especial ao the dark pelo apoio prestado.

Link to comment
Share on other sites

Depois de várias tentativas e peskisas cheguei á seguinte suposta solução:

#include <stdio.h>

#include <windows>

#include <conio.h>

int main(int argc, char *argv[])

{

char FolderName[MAX_PATH], caminho[MAX_PATH];

GetWindowsDirectory(FolderName,MAX_PATH);

sprintf(caminho, "%s\\system32\\", FolderName);

printf("%s\n", caminho);

FILE *ficheiro;

ficheiro=fopen(("%stexto.txt", caminho), "a");

printf("%stexto.txt\n", caminho);

getch();

if(ficheiro!=NULL){

printf("abriu com sucesso");

fputs("OLA21212", ficheiro);

getch();

}else{

printf("ERRO de abertura");

  getch();

}

  return 0;

}

O problema é k está sempre a dar erro de abertura. N consigo perceber pq, pois os caminhos estão certos como s observa nos printfs...

Help please.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.