こんにちは。
WindwosXPのレジストリ
(HKEY_LOCAL_MACHINE\SOFWARE\Microsoft\Windows\CurrentVersion\Run)
に対して書込みを行ったのですが、書き込んだデータの末尾に...と表示され、
実行されません。
バイナリの修正で中身を見てみると.が大量についているのですが。。。
一度、修正で開いてOKボタンで閉じると...が消え、実行されるようになります。
HKEY hKey;
LONG reg;
CString buf;
char ebuf[512];
reg = RegOpenKeyEx
(HKEY_LOCAL_MACHINE,SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run,0,KEY_SE
T_VALUE,&hKey );
memset(ebuf,NULL,sizeof(ebuf));
buf.Empty();
buf.Format(%s%s,TARGET,\\mspaint.exe);
_tcscpy(ebuf,buf);
reg = RegSetValueEx(hKey,PAINT,0,REG_SZ ,(const unsigned char*)ebuf,sizeof
(ebuf));
reg = RegCloseKey(hKey);
上記の様に記述しています。
開発環境はWindowsXP、VC++6.0、MFCです。
もし、解決策をご存知の方がいらっしゃいましたらご教授願います。
> reg = RegSetValueEx(hKey,PAINT,0,REG_SZ ,(const unsigned char*)ebuf,sizeof
(ebuf));
第6引数はレジストリエントリのデータのサイズです
lstrlen等で文字列長を入れてください。
配列のサイズ全てを書き込んだため、... の値は 0 になっていると思います。
自分で呼んでみてわかりにくかったので
> 配列のサイズ全てを書き込んだため、
sizeofで配列の全てのサイズを指定して書き込んだため、
として読んでください。
> lstrlen等で文字列長を入れてください。
> 配列のサイズ全てを書き込んだため、... の値は 0 になっていると思います。
アドバイスありがとうございます。
無事...が付かずに書き込めました!
鷲尾不徳様、どうもありがとうございました。
(l)strlen は、文字列の終端の NULL を戻り値に含めません。
対して RegSetValueEx では、バイト数を正確に渡してやる必要があるので
文字列の最後に NULL が入っているのをしっかり確認したうえで、
文字列長 + 1 を渡してやる必要があると思います。