2

私たちのプログラムの 1 つは、プログラム情報 (ウィンドウ タイトル、メモリなど) を Java プリファレンスに書き込みます。Windows では、これはレジストリの下で利用できます。c (または c++) を使用して Java プログラムによって書き込まれた値を読み取るにはどうすればよいですか。

使用する API は RegGetValue のようです。これは Windows XP 32 ビットで動作することが保証されていますか?

Java によって書き込まれる文字列は、UTF-8 でエンコードされます。Windows (win32 または vc++) でそのような文字列を読み取るにはどうすればよいですか

乾杯、ジャヤン

4

3 に答える 3

2

これについて少し掘り下げました。RegGetValue() は、レジストリを照会する従来の方法 (RegQueryValueEx) の根底にある厄介な問題を解決する新しいレジストリ コールです。ここに違いに関する良い情報があります: http://blogs.msdn.com/larryosterman/archive/2006/01/12/512115.aspx

下位互換性が必要な場合、RegGetValue() は機能しないため、RegQueryValueEx を使用してレジストリからデータを読み取る必要があります。

そして今、私が本当の質問だと思うものに移りましょう:

  1. RegQueryValueEx() を使用すると何が返されますか?
  2. レジストリに格納されている値が utf-8 エンコーディングであることをどのように確認できますか? レジストリにバイト配列として格納されていますか、それとも REG_SZ として格納されていますか?
  3. regedit を使用して値を確認しましたか? 何が見えますか?

したがって、質問が UTF-8 でエンコードされた文字列を ASCII ヌル終了文字列に変換する方法である場合は、おそらく質問のタイトルを変更する必要があります。参考までに、役に立つかもしれないこのライブラリを見つけました。

http://utfcpp.sourceforge.net

数分前にリンクを試みたところ、サーバーがタイムアウトしました。おそらく SF のメンテナンス中です。

ただし、レジストリの値が REG_SZ エントリとしてまだ保存されていないことを確認することをお勧めします。

于 2010-04-17T05:17:18.663 に答える
1

RegGetValueは新しい API です。プログラムを XP 32 ビット (実際には Windows 2000 より前) で動作させたい場合は、RegQueryValueExを使用します。

UTF-8 文字列は、1 バイトの ASCII 文字列と同様に NUL で終了します。ただし、UTF-16 に変換することに興味があるかもしれません。そのためには、MultiByteToWideCharを使用し、 CodePage を に設定しますCP_UTF8UTF-16 から、 WideCharToMultiByteを使用して他のコード ページに変換できます。

于 2010-04-17T05:21:25.710 に答える
0

C++ でレジストリにアクセスするには、CRegKey ATL クラスに興味があるかもしれません。

于 2010-04-16T18:55:38.840 に答える