Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > c ile kayıt defteri(regedit) e kayıt ekleme
Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
24.05.2011-18:06 #74624
c ile kayıt defteri(regedit) e nasıl kayıt ekleyebilirim???





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
24.05.2011-18:18 #74625
system() fonksiyonu ile reg.exe komutunu çalıştırabilirsin.

örn:

system("REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead");

Komut parametreleri ile ilgili bilgiler:
http://commandwindows.com/reg.htm








Let`s make this world a better place to live !

Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
24.05.2011-22:13 #74626
msdosta denedim
reg add HKLMSoftwareAAA /v deneme /t REG_BINARY /d 00000002
şeklinde çalıştı..

C'de system("reg add HKLMSoftwareAAA /v deneme /t REG_BINARY /d 00000002");
şeklinde denedim fakat çalışmıyor.. ekrana ^CCC^^CCCC gibi şeyler yazıyor. sonra program kilitleniyor..





Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
25.05.2011-00:45 #74628
msdosta denedim
reg add HKLMSoftwareAAA /v deneme /t REG_BINARY /d 00000002
şeklinde çalıştı..

C'de system("reg add HKLM\Software\AAA /v deneme /t REG_BINARY /d 00000002");
şeklinde denedim fakat çalışmıyor.. ekrana ^CCC^^CCCC gibi şeyler yazıyor. sonra program kilitleniyor..





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
25.05.2011-12:04 #74634
\ karakterinin çift yazılması lazım. Normalde komut satırından komut çalıştırmak ile system() fonksiyonu ile komut çalıştırmak arasında bir fark olmaması gerekiyor. system() fonksiyonunun döndürdüğü değeri alabiliyor musun?





Let`s make this world a better place to live !

Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
25.05.2011-17:09 #74635
tabiki \ işaretini çift kullandım(foruma yazınca tek gösterdi). sorun galiba uyumlulukla ilgili. derlediğim exe'ye uyumluluk sorunlarını düzelt diyorum. çalışıyor. fakat exe'nin özelliklerinden uykumluluğu xp sp2 yapıp çalıştırdığımda aynı hatayı alıyorum...







Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
25.05.2011-21:29 #74637
Kayıt defteri üzerinde değişiklik yapmak için programı yönetici hesabıyla (run as administrator) gerekebilir.

Bir de window registry API var.

http://msdn.microsoft.com/en-us/library/ms724880%28v=VS.85%29.aspx





Let`s make this world a better place to live !

Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
26.05.2011-04:11 #74644
yönetici olarak çalıştırmayı denemiştim, olmamıştı. registry api 'yi kullanmayı denym..





Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
26.05.2011-05:08 #74645
#include <stdio.h>
#include <windows.h>
 int main()
{
     HKEY hMyKey;
     DWORD dwMyDw;
     const BYTE *data = "deneme";

     if (RegCreateKeyEx(HKEY_CURRENT_USER,"deneme\\deneme",
         0,NULL,0,KEY_ALL_ACCESS,NULL,&hMyKey,&dwMyDw) != ERROR_SUCCESS) {
             printf("hata\n");
             exit(EXIT_FAILURE);
     }

     RegSetValueEx(hMyKey,"anahtardeneme",0,REG_EXPAND_SZ,data,6);
     RegCloseKey(hMyKey);
     return 0;
} 

const BYTE *data = "deneme"; burada hata alıyorum: invalid conversion from `const char*' to `const BYTE*' şeklinde. nerede hata yapıyorum?? thinking





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
26.05.2011-11:19 #74646
const BYTE *data = "deneme";

BYTE her ne kadar unsigned char ile aynı olsa da bu gösterim yalnızca char * için geçerli. Normalde pointer olarak tanımlanan değişkenler için bellekten alan tahsis etmek gerekir.

Derleyiciler char *data = "deneme" gibi bir ifade gördüklerinde o ifadeyi
char * data = (char *) malloc(7*sizeof(char)); gibi yorumlarlar.

Kodundaki ifadeyi;

BYTE data[64] = "deneme";

veya

BYTE * data = (BYTE *) malloc(64*sizeof(BYTE));
memcpy(data, "deneme", strlen("deneme"));

Şeklinde gösterebilirsin, veya daha kullanışlı olması açısından;

BYTE data[64];
char dataString[64];

şeklinde tanımlayıp, dataString'e istediğin bir stringi (strcpy, scanf, fscanf vs. kullanarak) kopyaladıktan sonra:

memcpy(data, dataString, strlen(dataString));

gibi bir yapı kullanabilirsin.

Bu arada, fonsiyonun const BYTE * tipinde parametre belirtmesi o parametrenin const BYTE * olarak tanımlanmış bir nesne olması gerektiği anlamına gelmiyor. Bu sadece fonksiyonun o paramtrenin gösterdiği bellek alanında değişiklik yapamayacağını gösterir.





Let`s make this world a better place to live !

Yazar
mstfhrgl


avatar

Kayıt: 17.10.2010
26.05.2011-19:03 #74649
teşekkür ederim sorun çözüldü.. dancing





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
26.05.2011-19:41 #74654
Rica ederim, kolay gelsin.





Let`s make this world a better place to live !

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb