Visual Basic - ayuda con combo box

Life is soft - evento anual de software empresarial
 
Vista:

ayuda con combo box

Publicado por anllury (1 intervención) el 25/11/2005 13:09:42
Como desplegar en un combo box el regedit de la clave h key local machine / software / microsoft /active setup. Porfavor ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Prueba con este código

Publicado por Zoto (6 intervenciones) el 25/11/2005 18:36:29
Hola Anllury,

según he entendido, lo que querías hacer era listar en un ComboBox los valores de una clave del registro de Windows determinada.
Este código que he escrito te debería ayudar.
Sigue estos pasos para lograr que funcione:

-Inicia un nuevo proyecto Exe Estándar y añade un módulo.

En él deberás pegar el siguiente código que te proporciono a continuación:

'--------------------------------------------------------
'CÓDIGO DEL MÓDULO
'--------------------------------------------------------

'------------------------------------------------
'------------------------------------------------
'Código escrito por: Zoto
'Código escrito para: Anllury - Foro Visual Basic - para lawebdelprogramador.com
'Descripción del código:
'Código fuente en Visual Basic para listar los valores de una determinada clave
'del registro de Windows en un ComboBox.
'------------------------------------------------
'------------------------------------------------

'---------------------------------------
'Constantes para el registro de Windows
'---------------------------------------

'Claves

Public Const HKEY_ALL = &H0&
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_DYN_DATA = &H80000006
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_USERS = &H80000003

'Error 259: no hay más elementos
Const ERROR_NO_MORE_ITEMS = 259&

'APIs para el registro de Windows

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) 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 RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

'--------------------------------------------
'Esta es el procedimiento principal que solicitabas.

'Como pedías, lista los valores de una determinada
'clave de registro en un combo box determinado.

'Como argumentos, toma:

'-comboObject-> Variable ComboBox que contiene el objeto ComboBox donde se listarán los datos
'-hKey-> Long que contiene el valor numérico de la constante de la hKey deseada
'-regPath-> String que contiene el directorio (clave) de registro de la qual se listarán los valores
'-listValueData-> Boolean opcional que determina si se deben mostrar los datos de cada valor. Si es True, se mostrarán.
'--------------------------------------------

Public Sub LoadComboRegValues(comboObject As ComboBox, mehKey As Long, regPath As String, Optional listValueData As Boolean)
Dim hKey As Long
Dim Cnt As Long 'Contiene el número de índice del siguiente elemento (número total de elementos)
Dim sName As String 'Contiene el nombre del valor
Dim sData As String 'Contiene los datos del valor
Dim Ret As Long 'Contiene el número máximo de carácteres del nombre del valor a mostrar
Dim RetData As Long 'Contiene el número máximo de carácteres de los datos del valor
Dim strValue As String 'Contiene el valor final a añadir al combobox

Const BUFFER_SIZE As Long = 255 'Tamaño del buffer personalizado (255 carácteres)

If RegOpenKey(mehKey, regPath, hKey) = 0 Then 'Se abre la clave
sName = Space(BUFFER_SIZE) 'Se inicializa la variable contenedora del nombre del valor con el buffer personalizado
sData = Space(BUFFER_SIZE) 'Se inicializa la variable contenedora de los datos del valor con el buffer personalizado
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE

comboObject.Clear 'Se limpia el combobox

While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS 'Se recorre el bucle mientras existan elementos

'Se preparan los datos en la variable
'strValue para que sean añadidos a al
'combobox

If RetData > 0 Then
strValue = Left$(sName, Ret)
If listValueData = True Then strValue = strValue & " = " & Left$(sData, RetData - 1)
End If

comboObject.AddItem strValue 'Se añade el elemento en el combobox
DoEvents

Cnt = Cnt + 1 'Se aumenta el contador de elementos en uno para pasar al siguiente elemento

'Se vuelven a inicializar las variables
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
Wend

RegCloseKey hKey 'Se cierra la clave anteriormente abierta
Else
comboObject.AddItem "#Error al llamar a la API RegOpenKey#" 'Se informa de error si no se ha podido llamar correctamente a la API RegOpenKey
End If
End Sub

'--------------------------------------------------------
'CÓDIGO DEL MÓDULO
'--------------------------------------------------------

Aquí finaliza el código que deberías haber pegado en el módulo.

A continuación, en el formulario, añade un ComboBox con nombre Combo1.

En el evento Form_Load de dicho formulario, escribe lo siguiente, que servirá para ejecutar la función del módulo:

'--------------------------------------------------------
'CÓDIGO DEL FORMULARIO - EVENTO FORM_LOAD
'--------------------------------------------------------

LoadComboRegValues Combo1, HKEY_LOCAL_MACHINE, "Software\Microsoft\Active Setup", True

'--------------------------------------------------------
'CÓDIGO DEL FORMULARIO - EVENTO FORM_LOAD
'--------------------------------------------------------

Bien, espero que todo esto no te resulte muy pesado (espero no haberme enrollado demasiado...) y que te ayude a resolver tu problema.

Si tienes alguna duda con el código o hay algun problema con él, comunícamelo y te ayudaré.

Hasta la próxima.

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar