PDA

View Full Version : [VB]salvare opzioni


djcuca
12-02-2004, 00:11
Scusate..
allora

pratikamente sto facendo un prog;in questo prog cè la possibilità di configurarlo tramite delle opzioni...però quando chiudi il prog le opzioni tornano default!
come posso far in modo che rimangano?
ho pensato di creare un file di testo con dentro dei parametri che il prog rikiama..o non so!

cionci
12-02-2004, 00:29
Puoi usare il registro...o i file INI...
Per i file INI:

'Example by Robin ([email protected])
'Visit his site at http://members.fortunecity.com/rbnwares1
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Form_Load()
' We will create a new section in the INI-file
' It's output will be:
'
' [SectionName]
' Key=Value
'
' Note that used this ONLY if you are creating a new
' section on the INI file, unless you wanted to erase
' its existing keys.
Call WritePrivateProfileSection("SectionName", "Key=Value", App.Path & "\sample.ini")
Dim szBuf As String * 255
Call GetPrivateProfileSection("SectionName", szBuf, 255, App.Path & "\sample.ini")
MsgBox szBuf
End Sub

Per il registro di sistema:

'This program needs 3 buttons
Const REG_SZ = 1 ' Unicode nul terminated string
Const REG_BINARY = 3 ' Free form binary
Const HKEY_CURRENT_USER = &H80000001
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private 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
Private 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
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
'retrieve nformation about the key
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
'Create a buffer
strBuf = String(lDataBufSize, Chr$(0))
'retrieve the key's content
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then
'Remove the unnecessary chr$(0)'s
RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
End If
ElseIf lValueType = REG_BINARY Then
Dim strData As Integer
'retrieve the key's value
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then
RegQueryStringValue = strData
End If
End If
End If
End Function
Function GetString(hKey As Long, strPath As String, strValue As String)
Dim Ret
'Open the key
RegOpenKey hKey, strPath, Ret
'Get the key's content
GetString = RegQueryStringValue(Ret, strValue)
'Close the key
RegCloseKey Ret
End Function
Sub SaveString(hKey As Long, strPath As String, strValue As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Save a string to the key
RegSetValueEx Ret, strValue, 0, REG_SZ, ByVal strData, Len(strData)
'close the key
RegCloseKey Ret
End Sub
Sub SaveStringLong(hKey As Long, strPath As String, strValue As String, strData As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Set the key's value
RegSetValueEx Ret, strValue, 0, REG_BINARY, CByte(strData), 4
'close the key
RegCloseKey Ret
End Sub
Sub DelSetting(hKey As Long, strPath As String, strValue As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Delete the key's value
RegDeleteValue Ret, strValue
'close the key
RegCloseKey Ret
End Sub
Private Sub Command1_Click()
Dim strString As String
'Ask for a value
strString = InputBox("Please enter a value between 0 and 255 to be saved as a binary value in the registry.", App.Title)
If strString = "" Or Val(strString) > 255 Or Val(strString) < 0 Then
MsgBox "Invalid value entered ...", vbExclamation + vbOKOnly, App.Title
Exit Sub
End If
'Save the value to the registry
SaveStringLong HKEY_CURRENT_USER, "KPD-Team", "BinaryValue", CByte(strString)
End Sub
Private Sub Command2_Click()
'Get a string from the registry
Ret = GetString(HKEY_CURRENT_USER, "KPD-Team", "BinaryValue")
If Ret = "" Then MsgBox "No value found !", vbExclamation + vbOKOnly, App.Title: Exit Sub
MsgBox "The value is " + Ret, vbOKOnly + vbInformation, App.Title
End Sub
Private Sub Command3_Click()
'Delete the setting from the registry
DelSetting HKEY_CURRENT_USER, "KPD-Team", "BinaryValue"
MsgBox "The value was deleted ...", vbInformation + vbOKOnly, App.Title
End Sub
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Command1.Caption = "Set Value"
Command2.Caption = "Get Value"
Command3.Caption = "Delete Value"
End Sub

Berno
13-02-2004, 12:00
E per VB.Net come funziona?

Scusa se approfitto di te ma sto imparando...

cionci
13-02-2004, 12:01
Non conosco VB.Net...

cionci
13-02-2004, 12:02
Forse ho qualcosa:

Imports System
Imports Microsoft.Win32
Public Module modmain
Sub Main()
'The KPD-Team 2001
'URL: http://www.allapi.net/dotnet/
'E-Mail: [email protected]
'Declare a RegistryKey object and initialize it
Dim RegKey as RegistryKey = Registry.LocalMachine.OpenSubKey( _
"HARDWARE\DESCRIPTION\System\CentralProcessor\0")
'Retrieve the value of 'VendorIdentifier'
Dim VendorValue as Object = RegKey.GetValue("VendorIdentifier")
'Show the result
If Not(VendorValue Is Nothing) Then
Console.WriteLine("The vendor identifier of the central" + _
" processor of this machine is: " + VendorValue.ToString())
Else
Console.WriteLine("Key not found...")
End If
'Close the registry key
RegKey.Close()
End Sub
End Module

Comunque scaricate APIGuide da www.allapi.net

Berno
13-02-2004, 16:24
Grazie, adesso provo il codice e controllo il sito...

Berno
13-02-2004, 16:45
Ottimo, funziona tutto a meraviglia...

Perchè nella sezione corsi, tutorial e faq non mettete una bella lista di siti utili?

Penso che vi evitereste parte del lavoro...

Geen
13-02-2004, 17:06
In Vb.Net puoi,in alternativa,creare una classe che contenga i dati da salvare ed esporre i due metodi "Salva" e "Carica" che non sono altro che la serializzazione e la deserializzazione della tua classe su file.
Se non vuoi andare a toccare il registro questa e' decisamente il metodo più comodo..

Berno
13-02-2004, 18:54
Originariamente inviato da Geen
In Vb.Net puoi,in alternativa,creare una classe che contenga i dati da salvare ed esporre i due metodi "Salva" e "Carica"
Fin qui ci sono...
Originariamente inviato da Geen
che non sono altro che la serializzazione e la deserializzazione della tua classe su file.
Qui ho bisogno di una "traduzione" :D ...
Originariamente inviato da Geen
Se non vuoi andare a toccare il registro questa e' decisamente il metodo più comodo..
Su APIguide che ha consigliato Cionci spiega bene anche come utilizzare un file .ini ...