レジストリ値を編集する
-
05-07-2019 - |
質問
pocketPCのレジストリ値を変更したい。次のコードを実行しました:
if(enabled)
{
dwData = 120;
}
if(RegSetValueEx(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Power\\Timeouts\\BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
return FALSE;
}
ただし、レジストリエントリは変更されません。誰もがC ++でレジストリキー値を設定する方法を知っていますか?
ありがとう!
解決
やることには2つの問題があります:
1:RegSetValueExは、値名のみのパスを取りません。そのため、最初にキーパスを開く必要があります。
e.g。
HKEY key;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Power\\Timeouts", 0, 0, &key))
{
if(RegSetValueEx(key, _T("BattSuspendTimeout"), 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)))
{
RegCloseKey(key);
return FALSE;
}
RegCloseKey(key);
}
2:レジストリのその領域では、すべてのWindows Mobileデバイスで機能するために特権コード署名が必要です。ユーザーが「はい」と言うと、ほとんどの最新のタッチスクリーンウィンドウモバイルデバイスでそれを回避できます。アプリケーションが最初に実行またはインストールされるときの不明な発行者の質問へ。 「アクセス拒否」が発生した場合セットでエラーが発生した場合、セットを機能させるには特権コードで署名する必要があります。
他のヒント
RegSetValueExは、説明的なエラーコードを返します。 FormatMessageを使用して、場合によってはエラー検索ツール、またはVSの@ERR機能を使用して、このエラーコードから人間が読み取れるメッセージを取得できます。あなたが持っているコードは正しいように見えるので、エラーメッセージがあなたに伝えるものを見てください。
どのように変更を確認していますか?この変更を行っても、デバイスの動作には自動的に反映されず、コントロールパネルにも表示されないことに注意してください(CPLが既に読み込まれているかどうかによって異なります)。シェルは、変更を行ったことを認識せず、値をポーリングしません。外に出て再読み取りするように指示する必要があります。その方法は MSDNに記載されています(基本的には、システムイベント)。
[VORegistry] [1]をチェックすると、レジストリの操作が非常に簡単になります。
[1]: http://www.voscorp.com /products/developer/winmobile/voregistry/index.htm VORegistry
RegEditで探していると仮定して、レジストリビューを更新(F5)しましたか?