ページ 11

regsetvalueexで値の作成ができません

Posted: 2010年12月06日(月) 22:26
by hajimete
void func() {
HKEY key=NULL;
int sz=GetModuleFileName(NULL,buf,sizeof(buf))+1;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,&key)) {
RegSetValue(key,TEXT("DTCLNR"),REG_SZ,buf,sz*sizeof(TCHAR));
RegCloseKey(key);
}

}
で指定のレジストリキー(Software\\Microsoft\\Windows\\CurrentVersion\\Run)付近をレジストリエディタでみると、
DTCLNRという名の値ではなく DTCLNRというキーが作成されていました。
なぜでしょうか?

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月06日(月) 22:35
by hajimete
開発環境は
VC++ 2008
WindowsXP
です。
すみません。いい忘れてました。

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月06日(月) 22:42
by 結城
よろしければ状況を把握しにくいのでもう少し付近のコードをください

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月06日(月) 22:50
by hajimete
全ソースです。

コード:

#include <windows.h>
TCHAR buf[MAX_PATH+1];
void setkey() {
	HKEY key=NULL;
	int sz=GetModuleFileName(NULL,buf,sizeof(buf))+1;
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,&key)) {
		RegSetValue(key,TEXT("DTCLNR"),REG_SZ,buf,sz*sizeof(TCHAR));
		RegCloseKey(key);
	}

}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	setkey();
}

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月06日(月) 23:16
by 結城
RegSetValueの第二引数はSubKeyですから、そこに設定するとそのキーが作成されるのではないかと思います
試していないので正しいかどうか分かりませんが
第三引数はDataですのでそちらにTEXT("DTCLNR")を渡してやって
代わりにキーにしたいものを第二引数に入れてやればいいはずです

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月07日(火) 07:31
by mila
RegSetValueEx関数を使ってみてください。

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月07日(火) 07:41
by hajimete
"RegSetValue"!?
RegSetValueExを使っていたつもりだったのですが...
皆様ありがとうございます。おかげで希望通りの挙動をしました。

Re: regsetvalueexで値の作成ができません

Posted: 2010年12月07日(火) 07:46
by hajimete
解決ボタンを忘れていました。
今回の件といい、よく確認したいと思います (_ _)