Newsgroup: it.comp.appl.access
Titolo: problemi di scrittura su registro di sistema

In un'applicazione Access avrei bisogno di memorizzare il percorso di
installazione al di fuori del Db, avevo pensato di scrivere sul registro di
sistema con l'istruzione:
        Percorso = DlgApri.FileName
        SaveSetting "MioProgramma", "MioProgramma", "Path", Percorso
dove Percorso è un campo di tipo memo nel quale vado ad inserire il
risultato che mi viene dalla finestra di dialogo per la scelta del percorso.
Purtroppo non mi riconosce questa istruzione e mi compare un errore del tipo
che l'istruzione non corrisponde nè ad una funzione nè ad una macro (il
testo preciso non lo ricordo) quindi è impossibile eseguirla.
Grazie,
Rosa

"Rosa.Rab" <info@st'udi-ogr'.it> ha scritto nel messaggio 
news:d4692t$akm$1...@carabinieri.cs.interbusiness.it...

Senza ricorrere alle API, che sono comunque la strada maestra e corretta, 
potresti crearti la chiave nel tuo registro e poi la salvi esportantola in 
un file .reg.
Questo file lo alleghi al pacchetto di distribuzione e lo mandi in 
esecuzione alla fine dell'installazione o quando vuoi.
Per esempio:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\FruityLoops 3\MRU]
"0"="C:\\Programmi\\FruityLoops3.5\\Loops\\NewStuff.flp"
Ciao, Carlo 

 Il problema non è solo scrivere nel registro ma poi successivamente
leggerci.Potrei anche scrivere il percosro manualmente nel registro ma poi
non me lo legge, ovvero non mi funzionano le istruzioni SaveSetting e
GetSetting.
Come posso fare?

"Rosa.Rab" <info@st'udi-ogr'.it> ha scritto nel messaggio 
news:d462sn$gg7$1...@balena.cs.interbusiness.it...

In un modulo pubblico queste le istruzioni tipiche:
Option Compare Database
Option Explicit
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const ERROR_SUCCESS = 0&
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" 
(ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" 
(ByVal Hkey As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" 
(ByVal Hkey As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal 
Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" 
(ByVal Hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, 
lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" 
(ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, 
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Const REG_SZ = 1
Public Const REG_DWORD = 4
Public Sub savekey(Hkey As Long, strPath As String)
Dim keyhand&
r = RegCreateKey(Hkey, strPath, keyhand&)
r = RegCloseKey(keyhand&)
End Sub
Public Sub savestring(Hkey As Long, strPath As String, strValue As String, 
strdata As String)
Dim keyhand As Long
Dim r As Long
r = RegCreateKey(Hkey, strPath, keyhand)
r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata))
r = RegCloseKey(keyhand)
End Sub
Public Function getstring(Hkey As Long, strPath As String, strValue As 
String)
Dim keyhand As Long
Dim datatype As Long
Dim lResult As Long
Dim strBuf As String
Dim lDataBufSize As Long
Dim intZeroPos As Integer
r = RegOpenKey(Hkey, strPath, keyhand)
lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, 
lDataBufSize)
If lValueType = REG_SZ Then
    strBuf = String(lDataBufSize, " ")
    lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, 
lDataBufSize)
    If lResult = ERROR_SUCCESS Then
        intZeroPos = InStr(strBuf, Chr$(0))
        If intZeroPos > 0 Then
            getstring = Left$(strBuf, intZeroPos - 1)
        Else
            getstring = strBuf
        End If
    End If
End If
End Function
Tipicamente per scrivere:
Private Sub TuoPulsante_Click()
Call savestring(HKEY_CURRENT_USER, "Software\TUACHIAVE\Registry", "String", 
"TuaStringaDaScrivere")
End Sub
Tipicamente per leggere:
Private Sub TuoPulsanteGetString_Click()
Dim strString As String
strString = getstring(HKEY_CURRENT_USER, "Software\TUACHIAVE\Registry", 
"String")
MsgBox strString
End Sub
'Ciao, Carlo

"Rosa.Rab" <info@st'udi-ogr'.it> ha scritto nel messaggio
news:d4692t$akm$1...@carabinieri.cs.interbusiness.it...

VAi sul Sito Comune (lik qui sotto) e nella Sezione General leggi laFAQ di
Andrea Sciamanna intitolata "6.53 Funzioni per accedere alle chiavi di
registro, in lettura, scrittura e modifica".
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------