xerxes Posted November 16, 2007 at 06:45 PM Report Share #147859 Posted November 16, 2007 at 06:45 PM 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 More sharing options...
Kyu Posted November 16, 2007 at 07:39 PM Report Share #147882 Posted November 16, 2007 at 07:39 PM tens aqui um pequeno tutorial com exemplos práticos: http://www.developer.com/net/cplus/article.php/3449721 "You leave nothing but death and horror in your wake!""Now, that's not fair, sometimes there's fire too" Link to comment Share on other sites More sharing options...
xerxes Posted November 18, 2007 at 10:45 AM Author Report Share #148303 Posted November 18, 2007 at 10:45 AM Obrigado pelo link, mas nao consegui fazer nada com ele. Procuro syntax em c++, akilo é visual basic. Se alguem puder ajudar, agradecia. Link to comment Share on other sites More sharing options...
Revolt Posted November 18, 2007 at 12:07 PM Report Share #148313 Posted November 18, 2007 at 12:07 PM visual basic? deves ter visto mal o.O Revolt Website Antigo Nick: Pauzinhos Link to comment Share on other sites More sharing options...
xerxes Posted November 18, 2007 at 12:34 PM Author Report Share #148327 Posted November 18, 2007 at 12:34 PM N é? então pront, desculpem a minha ignorancia. mas n consigo perceber o codigo, nem o consigo por a funcionar. Link to comment Share on other sites More sharing options...
TheDark Posted November 18, 2007 at 03:45 PM Report Share #148386 Posted November 18, 2007 at 03:45 PM Aquilo é C++ Managed, ou seja, C++ adaptado à plataforma .NET. Se estás a utilizar C++ nativo, é mais complicado aceder ao registo. Tens aqui a referência do MSDN. Desaparecido. Link to comment Share on other sites More sharing options...
xerxes Posted November 18, 2007 at 07:51 PM Author Report Share #148442 Posted November 18, 2007 at 07:51 PM Tb n ajudou mt, ninguem é capaz de m explicar as perguntas k fiz directamente em vez de m encaminhar para links? Link to comment Share on other sites More sharing options...
TheDark Posted November 18, 2007 at 07:55 PM Report Share #148444 Posted November 18, 2007 at 07:55 PM 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 More sharing options...
xerxes Posted November 18, 2007 at 09:45 PM Author Report Share #148462 Posted November 18, 2007 at 09:45 PM 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 More sharing options...
TheDark Posted November 19, 2007 at 01:07 AM Report Share #148537 Posted November 19, 2007 at 01:07 AM 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 More sharing options...
xerxes Posted November 19, 2007 at 08:59 AM Author Report Share #148551 Posted November 19, 2007 at 08:59 AM MT obrigado TheDark. Isto sim é uma resposta esclarecedora, sem duvida a melhor k já tive em foruns. Agradeço pelo esforço, é assim k todos devem fazer, responder como o TheDark. Parabens e continua o teu excelente trabalho. Mt obrigado. 😉 Link to comment Share on other sites More sharing options...
TheDark Posted November 19, 2007 at 01:10 PM Report Share #148583 Posted November 19, 2007 at 01:10 PM 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 More sharing options...
xerxes Posted November 19, 2007 at 03:59 PM Author Report Share #148633 Posted November 19, 2007 at 03:59 PM 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 More sharing options...
TheDark Posted November 19, 2007 at 04:34 PM Report Share #148640 Posted November 19, 2007 at 04:34 PM Experimenta o seguinte: char caminho[MAX_PATH]; sprintf(&caminho, "%s\\system32\\texto.txt", FolderName); fopen(caminho, "a"); Desaparecido. Link to comment Share on other sites More sharing options...
xerxes Posted November 20, 2007 at 09:59 AM Author Report Share #148834 Posted November 20, 2007 at 09:59 AM Mais um vez resposta 5*****, obrigado por tudo the dark. 🙂 Um abraço. 😛😄 Link to comment Share on other sites More sharing options...
xerxes Posted November 20, 2007 at 11:13 AM Author Report Share #148843 Posted November 20, 2007 at 11:13 AM 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 More sharing options...
xerxes Posted November 20, 2007 at 04:31 PM Author Report Share #148905 Posted November 20, 2007 at 04:31 PM 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 More sharing options...
mogers Posted November 20, 2007 at 07:51 PM Report Share #148976 Posted November 20, 2007 at 07:51 PM olha bem para o que escreveste no fopen... "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação. Link to comment Share on other sites More sharing options...
xerxes Posted November 21, 2007 at 09:00 AM Author Report Share #149072 Posted November 21, 2007 at 09:00 AM Eu sei bem o k escrevi no fopen. lá tb está a dizer k está errado! So queria saber s existe alguma sintax assim. Les t bem a duvida?? Link to comment Share on other sites More sharing options...
TheDark Posted November 21, 2007 at 12:52 PM Report Share #149105 Posted November 21, 2007 at 12:52 PM Tens que utilizar o sprintf para construir a string: char destino[150]; sprintf(destino, "%s %s", "Isto substitui o 1º %s;", "Isto substitui o 2º"); puts(destino); //escreve "Isto substitui o 1º %s; Isto substitui o 2º"[/tt] Tens aqui uma boa explicação de como o utilizar. Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now