ページ 1 / 1
レジストリがオープンできない
Posted: 2005年11月28日(月) 13:46
by ケースケ
AB4.11.03で、レジストリに正常にアクセスできない気がします。
コード: 全て選択
Dim hReg As Long
'■スタートアップに登録されていないか調べる
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_ALL_ACCESS,hReg)
If RegQueryValueEx(hReg,"SSS",0,REG_NONE,0,0)=ERROR_SUCCESS Then
MessageBox(0,"登録されています","",MB_OK)
Else
MessageBox(0,"登録されていません","",MB_OK)
End If
RegCloseKey(hReg)
このコードをAB3.13で実行するときちんと動作しますが、AB4.11.03に移植し(hRegの型をHKEYにする)、実行するとうまく動きません。
この場合、キーSSSが存在していても「登録されていません」と表示されます。
Posted: 2005年11月30日(水) 01:14
by マティ
Googleで
RegOpenKeyEx ERROR_SUCCESSで検索すると、ABの過去ログが先頭に来ました。
キャッシュしか残っていませんでしたが・・・、すごいと思いませんか?
修正方法は、そのときのコードを参考にしました。
コード: 全て選択
Dim hReg As HKEY 'Long を HKEY に変更しないとコンパイルが通らない
'■スタートアップに登録されていないか調べる
'KEY_ALL_ACCESS を KEY_QUERY_VALUE へ変更
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_QUERY_VALUE,hReg)
If RegQueryValueEx(hReg,"SSS",0,REG_NONE,0,0)=ERROR_SUCCESS Then
MessageBox(0,"登録されています","",MB_OK)
Else
MessageBox(0,"登録されていません","",MB_OK)
End If
RegCloseKey(hReg)
Posted: 2005年12月01日(木) 16:32
by ケースケ
いえ、その辺はもう調べているのですが、
このコードをAB3.13でDLLとしてコンパイルしてAB4.11で呼び出すと正常にオープンできるのに、AB4.11のコンパイラを使用するとオープンできません。
だから、コンパイラが作ったEXEの中でAPIの使用がうまくいっていないのではないかな?と思って書き込みました。
Posted: 2005年12月01日(木) 17:27
by マティ
ケースケさん失礼しました。AB4.11.03のバグのようです。
どうもリテラル値でNot演算子が無視されているようです。
コード: 全て選択
Dim A As DWord
A=( SYNCHRONIZE): MessageBox(0," SYNCHRONIZE = " & Hex$(A),"",MB_OK)
A=(Not SYNCHRONIZE): MessageBox(0,"Not SYNCHRONIZE = " & Hex$(A),"",MB_OK)
急にSYNCHRONIZEが出ましたが、KEY_ALL_ACCESSで使用します。
コード: 全て選択
Const KEY_ALL_ACCESS = (STANDARD_RIGHTS_ALL Or _
KEY_QUERY_VALUE Or _
KEY_SET_VALUE Or _
KEY_CREATE_SUB_KEY Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY Or KEY_CREATE_LINK) _
And (Not SYNCHRONIZE)
Posted: 2005年12月01日(木) 21:12
by 山本
ご報告ありがとうございます。
マティさんのご指摘の通り、リテラルNot演算に支障があったようです。
早速、Ver4.12.01にて修正を行いました。再度、こちらをダウンロードしてお試しください。