レジストリ値の設定 – プログラミング – Home

通知
すべてクリア

[解決済] レジストリ値の設定


たか
 たか
(@たか)
ゲスト
結合: 25年前
投稿: 73
Topic starter  

はじめまして

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
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

BYTE b[]={0xf4, 0xff, 0xff, 0xff, 0x00, .....};
....
RegSetValueEx(hkey,IconFont,0,REG_BINARY,(LPBYTE)b,sizeof(b)/sizeof(b[0]));
....

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


返信引用
am
 am
(@am)
ゲスト
結合: 24年前
投稿: 13
 

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


返信引用
たか
 たか
(@たか)
ゲスト
結合: 25年前
投稿: 73
Topic starter  

CdSさん解決しました。
ありがとうございました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました