はじめまして
RegSetValueExを用いてレジストリの値を変えたいのですが、値の種類がREG_SZの時は、下のようなプログラムで
実行できたのですが、REG_BINARYの時はうまくいきません。レジストリエディタで、その部分を見てみると値の
データの3つに分かれているうちの右側の部分にdtの値が設定されてしまっています(本当は真ん中の値を変更した
いのですが)。
どうしたら正確に実行できるのでしょうか。教えてください。
よろしくお願いします。
dt=f4 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 90 01 00 00 00\
00 00 80 00 00 00 00 4d 00 53 00 20 00 55 00 49 00 20 00 47 00 6f 00 74 00\
68 00 69 00 63 00 00 00 73 00 20 00 53 00 65 00 72 00 69 00 66 00 00 00 14\
00 0b 00 00 00 00 ff 12 00 50 00 00 00 c0 fe 12 00 0c 10 00 01;
RegOpenKeyEx(HKEY_CURRENT_USER,Control Panel\\Desktop\\WindowMetrics,0,KEY_ALL_ACCESS,&hkey);
RegSetValueEx(hkey,IconFont,0,REG_BINARY,(LPBYTE)(LPCTSTR)dt,lstrlen(dt)+1);
RegCloseKey(hkey);
BYTE b[]={0xf4, 0xff, 0xff, 0xff, 0x00, .....};
....
RegSetValueEx(hkey,IconFont,0,REG_BINARY,(LPBYTE)b,sizeof(b)/sizeof(b[0]));
....
ですね。
こういった間違いをする場合、APIの使い方以前にC/C++の基礎が身に付いていないと思われますので、
しっかり学習しましょう。
つまり、lstrlen は文字列の長さ( ='\0' が現れるまでの長さ )しか計ってくれません。
データ中に '\0' があると、lstrlen では計れないのでご注意を。
CdSさん解決しました。
ありがとうございました。
やはり、自分でもっと勉強する必要がありますね。