Ir ao conteúdo
  • Cadastre-se

Registros em C


Plástico Bolha

Posts recomendados

Oi, Não estou conseguindo criar um registro no Windows 7. MESMO o código compilando e executando sem nenhum problema. Eu ja tentei ir em:

Projct - Nome_do_meu_projeto - Configuration Properties - Linker - Manifest file - E na opção UAC Execution level, coloquei level de administrador. E estou executando o executavel como administrador e mesmo assim ele não cria o registro em Run ...

Segue o código que cria o registro em "Run":

#include <windows.h>
#include <winreg.h>

int main(int argc,char *argv[]){
HKEY Chave;
RegOpenKey(HKEY_CURRENT_USER, (LPCWSTR) "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&Chave);
RegSetValueEx(Chave,(LPCWSTR) "arquivo.exe",0,1,(LPBYTE)"C:\\arquivo.exe",22);
RegCloseKey(Chave);
}

Resumindo, tenho problemas com a UAC do Windows 7 ...

Link para o comentário
Compartilhar em outros sites

BOLHA,

Oi, Não estou conseguindo criar um registro no Windows 7. MESMO o código compilando e executando sem nenhum problema. Eu ja tentei ir em:

Segue o código que cria o registro em "Run":

#include <windows.h>
#include <winreg.h>

int main(int argc,char *argv[]){
HKEY Chave;
RegOpenKey(HKEY_CURRENT_USER, (LPCWSTR) "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&Chave);
RegSetValueEx(Chave,(LPCWSTR) "arquivo.exe",0,1,(LPBYTE)"C:\\arquivo.exe",22);
RegCloseKey(Chave);
}

Resumindo, tenho problemas com a UAC do Windows 7 ...

Não, o problema não é com o UAC, mas com alguns parâmetros usados nas funções. Dê uma olhada:

#include <windows.h>
#include <winreg.h>

int main(int argc, char *argv[])
{
HKEY Chave;
char cmd[50] = "C:\\arquivo.exe";

RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &Chave);

RegSetValueEx(Chave, "arquivo.exe", 0, REG_SZ, (const BYTE*)cmd, strlen(cmd) + 1);

RegCloseKey(Chave);

return 0;
}

Algumas observações:

  • A função RegOpenKey que você usou deve ser evitada, já que ela existe apenas para compatibilidade com programas de 16 bits.
  • Sugiro que você cheque o retorno dessas funções para verificar se as operações com o registro foram bem sucedidas.
  • Verifique os demais parâmetros dessas funções no Site de Desenvolvimento da Microsoft (MSDN Lib). Lá, existe uma farta documentação e é importante consultar.
  • E, claro, sempre tome cuidado ao manipular o registro do Windows, ainda mais programaticamente. Dica rápida: use uma Máquina Virtual para fazer os testes.

:natal:

LNW

Link para o comentário
Compartilhar em outros sites

Valeu pelas dicas LNW. principalmente essa:

A função RegOpenKey que você usou deve ser evitada, já que ela existe apenas para compatibilidade com programas de 16 bits.

Segue abaixo como ficou o meu registro:

#include <windows.h>
#include <winreg.h>

int main(int argc,char *argv[]){
HKEY Chave;
BYTE path[] = "C:\\arquivo.exe";
RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &Chave);
RegSetValueExA(Chave, "arquivo.exe", 0, REG_SZ, path, sizeof(path));
RegCloseKey(Chave);
}

Eu testei esse trecho de código ele funciona, tanto para Windows 7 quanto para XP, rodei ele no VS 2010

Explicação sobre o "A" no final ...

Os tipos char e wchar_t não são relacinados, o primeiro nesse caso tem 1 byte enquanto o segundo tem 2 bytes.

wchar_t é usado para armazenar caracteres unicode, que podem ocupar mais de um byte.

As funções da API do Windows que trabalham com strings, tem duas versões A(Ansi) e W(Wide), A e W são o sufixo da função, a função sem o sufixo é somente um apelido para o padrão que no caso do Visual Studio é Wide

Valeu mesmo LNW ;D

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!