RegDeleteKeyについて教えてください

○削除するレジストリHKEY_LOCAL_MACHINE\SOFTWARE\XTSEGRSCESK\AAA

○ソース
Public Const HKEY_LOCAL_MACHINE = &H80000002
Dim lRootKey As Long
Dim sSubKey As String
Dim lRet As Long
lRootKey = HKEY_LOCAL_MACHINE
sSubKey = "SOFTWARE\XTSEGRSCESK\AAA"
lRet = RegDeleteKey(lRootKey, sSubKey)

○結果
RegDeleteKeyの戻り値が2

どこが悪いか教えてください
お願いします

このQ&Aに関連する最新のQ&A

A 回答 (1件)

RedDeleteKeyの引数のSubKeyに"\"を含めることができないということだと思われます。


1つ上のキー(SOFTWARE\XTSEGRSCESK)をRegOpenKeyExで開いて、
それで得られたキーハンドルと"AAA"を引数にRegDeleteKeyを呼べばいいはず。

この回答への補足

ありがとうございます
以下のように修正しました

sSubKey = "SOFTWARE\XTSEGRSCESK"
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sSubKey, 0, KEY_ALL_ACCESS, lRootKey)
lRet = RegDeleteKey(lRootKey, "AAA")

RegOpenKeyExは正常終了
RegDeleteKeyの戻り値6です

勘違いしていますでしょうか?

補足日時:2005/04/06 15:55
    • good
    • 0
この回答へのお礼

KEY_ALL_ACCESSの宣言を忘れていたので、宣言しましたらRegDeleteKeyの復帰値は2でした

お礼日時:2005/04/06 16:03

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qなぜ標準でレジストリ修復がついていないのでしょうか

Windows7 home 64bitを使っています。色々検索した結果、不具合の原因がどうやらレジストリにある可能性が高いということがわかりレジストリの修復をしたいと考えています。

しかしフリーのソフトでは不具合の箇所をチェックすることはできても修復が有料です。
無料でやるにはWindows7のOS再インストールしかないということらしいです。

ここで疑問なのがインストールCDがあるのになぜレジストリだけを修復することができないのかということです。

インストールCDには元の正しいレジストリのデーターがあるはずです。
要はそれと照らし合わせて変更されている部分だけを元に戻せばいいだけだと思うのですが
なぜ有料ソフトでできることを出来ないのでしょうか?

すべてを消去するかバックアップをとってOSを再インストールし、また同じ環境を構築するのは面倒ではないですか?

Aベストアンサー

なぜ標準でついていないかはマイクロソフトに聞かないと分かりませんが、考えられる理由としては、システムに致命的な障害をもたらすレジストリ損傷を防ぐにおいてWindows側が十全の備えをしており、一部のベンダがアドウェアで騒ぎ立てるレジストリエラーはシステム的には問題ではなく、また、レジストリにユーザが書き込んだ異常な設定についてはMSが勝手に書き換えることが正しいと限らない、と言うあたりでしょうか。

無料のレジストリエラー解消ツールを使いたいなら、AVGを入れればよいでしょう。現行版(2014)ではレジストリエラー修復機能が無料で使えます(最初にメルアド登録が必要だったかな?)。AVGの画面を起動して、パフォーマンス修復を選択すると、レジストリエラー修復を含むツール画面が出てきます。

ただ、それでレジストリエラーを解消したところで、問題は解決しないと思いますよ。レジストリに保管されているのはシステムやアプリケーションの設定値で、それを正しく設定しなおしてくれるわけではないので。これら設定値が原因で問題が出る場合は、荒療治で副作用の可能性もありますが、当該レジストリ部分をバッサリ削除してしまうのが手です。削除されますと、その部分に関係するアプリケーションが実行された際に、既定値で自動構成してくれる場合が多いです。

アドウェアは利用者に金を振りこませるのが目的ですから、金を払ってレジストリーエラーを解消すれば万事うまくいくようにイメージさせますが、そんなものではないです。

なぜ標準でついていないかはマイクロソフトに聞かないと分かりませんが、考えられる理由としては、システムに致命的な障害をもたらすレジストリ損傷を防ぐにおいてWindows側が十全の備えをしており、一部のベンダがアドウェアで騒ぎ立てるレジストリエラーはシステム的には問題ではなく、また、レジストリにユーザが書き込んだ異常な設定についてはMSが勝手に書き換えることが正しいと限らない、と言うあたりでしょうか。

無料のレジストリエラー解消ツールを使いたいなら、AVGを入れればよいでしょう。現行版(20...続きを読む

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

Qレジストリの修復方法

CDが読み込めなくなったため、修理に出したところ、レジストリを修復すればよいと言われましたが、その修復方法がわかりません。
修復手順を教えて下さい。

Aベストアンサー

http://okweb.jp/kotaeru.php3?q=910839

こちら参考にしてください。
Win2000の質問ですが、WinXPも同じです。

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

Qレジストリを修復したら...

こんにちは。中3女子です。

昨日、無料のPCレジストリ修復ツールを使い
エラーを修復しました。

ですが、X-アプリという
ウォークマン専用アプリを起動させたところ、
「システムの変更により楽曲ファイルを開けなくなりました」
と表示され、起動できなくなってしまったのです。

どうやらレジストリを修復したことにより、
一部のアプリが起動できなくなったみたいです。

私が個別に使用しているPCはオフラインのため、
ネットを介して何かすることはできません。

システムの復元もやってみたのですが無理でした。

どうしたら復旧できますか?

Aベストアンサー

No3です。

> RegClean Proというソフトを使いました。

うわ、最悪…やられてますよ、それ。そのソフトの評価リンクを貼っておきます。

http://www.geocities.co.jp/Playtown-Yoyo/6130/notes/regclean-pro.htm

そのソフトを入れる前の状態に復元できれば立ち直れるんですが、そうじゃなければお手上げです。x-アプリ以外にも悪影響が及んでいる恐れも強いので、他のソフトを使ってみて問題ないか確かめた方がいいでしょう。場合によっては、リカバリーした方が早いかも知れませんね。

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Qレジストリ修復のフリーソフト

レジストリの修復を完全に無料で出来るソフトはありませんか?  スキャンは無料でも、修復は有料と言うモノしか見当たりません。 何か良いソフトや方法があれば、是非ご教授下さい。Windows7です。

Aベストアンサー

いちばん安全かつ確実な方法は、OSを再セットアップしてしまうことです。
設定も何もかもが初期化されるかわりに、OS上に抱えていた潜在的な不具合やゴミも一掃されてクリーンになります。

Windows7に関しては、ワケのわからないレジストリクリーナを実行したせいで必要なエントリーまで削除されて修復不能に陥った人の相談が、ここのサイトではけっこう見受けられます。
実行するもなにもユーザーの自由ですから『使うべきではない』とまでは申しませんが、レジストリの修復が必要な状況、それもツールの助けを必要とするほどの重篤なレベルはもはや“終わっています”。
ダメモトで使ってみるのも方法のひとつですが、使った後で起動不能になってもいいように、OSが起動できているいまのうちにCドライブ上の必要なデータをすべて救出しておくべきだと思います。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

Qレジストリの修復ってどのくらい意味があるんですか?

 最近、Registry Winner かな?

アルソフトをダウンロードしたら、時々何百個のレジストリを

修復する必要がありますと警告してきます。

値段つきでどうやら有料ソフトでした、、、(^^;

 気持ちは分かりますが、いままでPCを10年以上いじってきて

レジストリが壊れてトラぶったことはないように思うのですが??

何百個も修復しないといけないなんてそんなバカな!

 そもそもHDが物理的に壊れて入れ替えたのが3週間前。

そんなに修復の必要があるのかいな?

と思ってしまいます。

 アンインストールして無視するか!数千円払って買うか!フリーソフトで

探すか迷ってますが、そもそもそんなに重要なことなのでしょうか?

Aベストアンサー

レジストリ修復と言えば修復なのですが・・・正確にはレジストリのゴミ掃除ですね。
ソフトによってはアンインストールしてもレジストリを綺麗に削除しない物も多いですからね。

基本的にパソコンの調子が悪くならなければ、レジストリのゴミ掃除はする必要ありません。
ましてや・・・お金を払う価値はありません。

レジストリのゴミ掃除でしたら、フリーソフトのCCleanerが定番ですので・・・このソフトを使われたら良いと思います。

参考URL:http://freesoft-100.com/pasokon/ccleaner.html

Q調べてもわからないのでこの文の意味を教えてください。 Dim a as system.Reflect

調べてもわからないのでこの文の意味を教えてください。

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)


VB.NETを使用しています。

Aベストアンサー

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()
自分自身 (実行プログラム) を参照

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)
実行プログラムがあるフォルダーのパスを取得


人気Q&Aランキング

おすすめ情報