レジストリ値の設定

[戻る]
たか 2001/10/23(火) 18:19:18
はじめまして

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);

CdS 2001/10/24(水) 00:49:28
    BYTE b[]={0xf4, 0xff, 0xff, 0xff, 0x00, .....};
....
    RegSetValueEx(hkey,"IconFont",0,REG_BINARY,(LPBYTE)b,sizeof(b)/sizeof(b[0]));
....

ですね。
こういった間違いをする場合、APIの使い方以前にC/C++の基礎が身に付いていないと思われますので、
しっかり学習しましょう。

am 2001/10/24(水) 08:58:13
つまり、lstrlen は文字列の長さ( ='\0' が現れるまでの長さ )しか計ってくれません。
データ中に '\0' があると、lstrlen では計れないのでご注意を。

たか 2001/10/24(水) 09:02:12
[[解決]]
CdSさん解決しました。
ありがとうございました。

やはり、自分でもっと勉強する必要がありますね。

古いスレッドには追加発言できません。