質問

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)しましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top