原來做的程式,用戶改在64位WIN7下運行,我寫的對注冊表的讀寫操作都失效了!請問如何修改我原來對注冊表讀寫操作的代碼?謝謝
uj5u.com熱心網友回復:
有人知道嗎?uj5u.com熱心網友回復:
64位Win7讀寫注冊表沒問題啊,還是貼代碼上來看看吧uj5u.com熱心網友回復:
代碼如下:
ll=RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, SQLCA.DBMS )
ll回傳值-1,還有就是Registryset,回傳值1,成功了,可是我用注冊表編輯器去看,根本沒變化呀
uj5u.com熱心網友回復:
Win7 64位系統如果RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, SQLCA.DBMS )那么生成的注冊表鍵值在:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction路徑下,讀的時候要用RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction", "DBMS", RegString!, SQLCA.DBMS )
所以建議寫注冊表不要寫在HKEY_LOCAL_MACHINE而寫在HKEY_CURRENT_USER下面,否則需要判斷系統型別或者先RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction"...)判斷回傳值如果失敗再讀取一次RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction"...)
uj5u.com熱心網友回復:
我上面好像說錯了,寫了一段代碼如下:long l[3]
string s
l[1] = RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, SQLCA.DBMS )
l[2] = RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, s )
if(l[2]=-1)then
l[3] = RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction", "DBMS", RegString!, s )
end if
messagebox('測驗結果','回傳值1: '+string(l[1])+'~n回傳值2: '+string(l[2])+'~n回傳值3: '+string(l[3])+'~n結果:'+s)
回傳結果:

說明有鍵值應該是可以直接讀到的,只不過存放位置不是你放的那個地方
uj5u.com熱心網友回復:
我上面好像說錯了,寫了一段代碼如下:
long l[3]
string s
l[1] = RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, SQLCA.DBMS )
l[2] = RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\DZ\Transaction", "DBMS", RegString!, s )
if(l[2]=-1)then
l[3] = RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction", "DBMS", RegString!, s )
end if
messagebox('測驗結果','回傳值1: '+string(l[1])+'~n回傳值2: '+string(l[2])+'~n回傳值3: '+string(l[3])+'~n結果:'+s)
回傳結果:
說明有鍵值應該是可以直接讀到的,只不過存放位置不是你放的那個地方
你的這個方法我試過,確實可以取到值,也可以set,但是我需要知道它放到了哪里
uj5u.com熱心網友回復:
現在問題是我確實能夠實作對注冊表的讀寫操作,但是我通過注冊表編輯器為什么看不到我執行了寫操作之后的結果呢?使用set修改之后,GET出來的值是正確的,但是我在注冊表編輯器看到的還是原來的值呀?uj5u.com熱心網友回復:
64位作業系統,在對32位程式的注冊表資訊,都歸到wow6432node這個節點.所以,樓主你得先判斷客戶機是多少位的作業系統,然后變更一個條目比如,在32位時,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ODBC],在64位的windows上,就要操作[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC]
uj5u.com熱心網友回復:
64位作業系統,在對32位程式的注冊表資訊,都歸到wow6432node這個節點.所以,樓主你得先判斷客戶機是多少位的作業系統,然后變更一個條目
比如,在32位時,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ODBC],在64位的windows上,就要操作[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC]
我在PB中已經能夠對64位WIN7的注冊表進行讀寫操作了,我的問題是為什么我看不到我修改的結果,我在程式中就是對WOW6432NODE下面的鍵值進行的修改,沒問題,但是我在注冊表編輯器里為什么看不到我修改的結果呢?
比如說吧:執行 RegistrySet( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DZ\Transaction", "DBMS", RegString!, 'testmis' )
然后用GET取這個鍵值的內容,沒問題,是testmis
但是我用注冊表編輯器打開regedit,看這個鍵值確實沒修改之前的內容?這是為什么?
uj5u.com熱心網友回復:
有人知道嗎?uj5u.com熱心網友回復:
你這是沒重繪一下吧,按一下F5看看轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48248.html
標籤:腳本語言
上一篇:PB 將word檔案中表格匯入
