2

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 ++でレジストリキーの値を設定する方法を知っている人はいますか?

ありがとう!

4

5 に答える 5

7

あなたがしていることに2つの問題があります:

1:RegSetValueExはパスをとらず、valuenameのみを取ります。したがって、最初にキーパスを開く必要があります。

例えば

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モバイルデバイスで機能するために特権コード署名を必要とします。アプリケーションが最初に実行またはインストールされたときにユーザーが不明な発行元の質問に「はい」と答えた場合、最新のタッチスクリーンWindowsモバイルデバイスでそれを回避できます。セットで「アクセス拒否」エラーが発生した場合、セットが機能するには、特権コードに署名する必要があります。

于 2008-10-29T22:05:39.213 に答える
1

変更をどのように確認していますか?この変更を行っても、デバイスの動作に自動的に反映され、おそらくコントロール パネルにも表示されないことに注意してください (CPL が既に読み込まれているかどうかによって異なります)。シェルは、変更が行われたことを認識せず、値をポーリングしません。外に出て再読み取りするように指示する必要があります。その方法はMSDN に記載されています (基本的には、名前付きのシステム イベントを設定します)。

于 2008-10-29T17:13:01.487 に答える
1

RegSetValueEx は、説明的なエラー コードを返します。FormatMessage を使用して、場合によってはエラー ルックアップ ツールまたは VS の @ERR 機能を使用して、このエラー コードから人間が判読できるメッセージを取得できます。あなたが持っているコードは正しいように見えるので、エラーメッセージがあなたに何を伝えているか見てください.

于 2008-10-29T15:48:40.067 に答える
1

[VORegistry][1] を確認してください。レジストリの操作が非常に簡単になります。

[1]: http://www.voscorp.com/products/developer/winmobile/voregistry/index.htm VORegistry

于 2008-10-30T10:05:56.683 に答える
0

RegEditを使用していると仮定して、レジストリビューを更新(F5)しましたか?

于 2008-10-29T16:58:14.153 に答える