VB implementa la visualización de extensiones de archivos, es decir, mostrar extensiones de archivos conocidas.
Solo hay un botón en el formulario, haga clic en él y mostrará la extensión del archivo.
Sub Command1_Click()
Dim reg como nuevo cRegistry
reg.ClassKey = HKEY_CURRENT_USER
reg .SectionKey = "Software\Microsoft Window"
ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
Función de declaración privada RegSetValueExLong Lib "advapi32" Alias " RegSetValueExA" _
(ByVal hKey mientras, ByVal lpValueName como cadena, ByVal reservado mientras, _
ByVal dwType mientras, szData mientras, ByVal cbData mientras) As Long
Función de declaración privada RegSetValueExByte Lib "advapi32" Alias "RegSetValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reservado As Long, _ p>
ByVal dwType Mientras, szData Como Byte, ByVal cbData Mientras) Mientras
Función de declaración privada RegCloseKey Lib "advapi32" (ByVal hKey Mientras) Mientras
Función de declaración privada RegQueryValueExStr Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
Función de declaración privada RegQueryValueExLong Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName Como cadena, ByVal lpReserved Mientras, _
ByRef lpType Mientras, szData Mientras, ByRef lpcbData Mientras) Mientras
Función de declaración privada RegQ
ueryValueExByte Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, szData As Byte, ByRef lpcbData As Long) As Long
Función de declaración privada RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reservado mientras, _
ByVal lpClass Como cadena, ByVal dwOptions Mientras, ByVal samDesired Mientras, _
lpSecurityAttributes Como SECURITY_ATTRIBUTES, phkResult Mientras, _
lpdwDisposition As Long ) As Long
Función de declaración privada RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" _
(ByVal hKey As Long, ByVal lpClass As String, _
lpcbClass Como Largo, ByVal lpReserved Como Largo, lpcSubKeys Como Largo, _
lpcbMaxSubKeyLen Como Largo, lpcbMaxClassLen Como Largo, lpcValues Como Largo, _
lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, _
lpftLastWriteTime As Any) As Long
' Otras declaraciones:
Private Declare Sub CopyMemory Lib " kernel32" Alias "RtlMoveMemory" ( _
lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Función de declaración privada ExpandEnvironmentStrings Lib "kernel32" Alias " ExpandEnvironmentStringsA " (ByVal lpSrc como cadena, ByVal lpDst como cadena, ByVal nSize como largo) Mientras
Enumación pública ERegistryClassConstants
HKEY_CLASSES_ROOT = H80000000
HKEY_CURRENT_USER = H80000001
HKEY_LOCAL_MACHINE = H80000002
HKEY_USERS = H80000003
Fin de enumeración
Public Enum ERegistryValueTypes
'Tipos de valores predefinidos
REG_NONE = (0) 'Sin tipo de valor
REG_SZ = (1) 'Espacio nulo Unicode -cadena terminada
REG_EXPAND_SZ = (2) 'Cadena terminada en espacio Unicode con variables de entorno
REG_BINARY = (3) ' Binario de formato libre
REG_DWORD = (4) 'número de 32 bits
REG_DWORD_LITTLE_ENDIAN = (4) 'número de 32 bits (igual que REG_DWORD)
REG_DWORD_ BIG_ENDIAN = (5) 'número de 32 bits p>
REG_LINK = (6) 'Enlace simbólico (Unicode)
REG_MULTI_SZ = (7) 'Múltiples cadenas Unicode
REG_ RESOURCE_LIST = (8) 'Lista de recursos en recurso map Lista de recursos en el mapa de recursos
REG_FULL_RESOURCE_DESCRIPTOR = (9) 'Lista de recursos en la descripción del hardware
REG_RESOURCE_REQUIREMENTS_LIST = ( 10)
End Enum
Privatem_hClassKey siempre
M_sectionKey privada como cadena
M_sValueKey privada como cadena
M_vValue privada como variante
M_sSetValue privada como cadena
Privatem_vDefault como variante
Private m _eValueType como ERegistryValueTypes
Propiedad pública Obtener valor( ) como variante
Atenuar vValue como variante
Dim cData As Long, sData As String, ordType As Long, e As Long
Atenuar hKey As Long p>
e = RegOpenKeyEx(m_hClassKey, m_sSectionKey, 0, KEY_QUERY_VALUE, hKey)
' ApiRaiseIf爀
e = RegQueryValueExLong(hKey, m_sValueKey, 0amp;, ordType, 0amp ;, cData)
Si e Y e lt;gt;ERROR_MORE_DATA Entonces
Valor = m_vDefault
Salir de la propiedad
Fin
m_eValueType = ordType p>
Seleccionar caso ordType
Caso REG_DWORD, REG_ DWORD_LITTLE_ENDIAN
Atenuar iData siempre
e = RegQueryValueExLong(hKey, m_sValueKey, 0amp;, _
ordType, iData, cData)
vValue = CLng(iData)
Caso REG_DWORD_BIG_ENDIAN ' Es poco probable, pero nunca se sabe
Dim dwData As Long
e = RegQueryValueExLong(hKey, m_sValueKey, 0amp;, _
ordType, dwData, cData)
vValue = SwapEndian( dwData) p>
Caso REG_SZ, REG_MULTI_SZ ' Igual que Visual Basic
te ahorra mucho tiempo.Basic
sData = String$(cData - 1, 0 )
e = RegQueryValueExStr(hKey, m_sValueKey, 0amp;, _
ordType, sData, cData)
vValue = sData
Caso REG_EXPAND_SZ p>
sData = String$(cData - 1, 0)
e = RegQueryValueExStr(hKey, m_sValueKey, 0amp;, _
ordType, sData, cData) p>
vValue = ExpandEnvStr(sData)
' Captura REG_BINARY y cualquier otra cosa
Caso más
Dim abData() As Byte
ReDim abData(cData)
e = RegQueryValueExByte(hKey, m_sValueKey, 0amp;, _
ordType, abData(0), cData) p>
vValue = abData
Selección final
Valor = vValue
Propiedad final
Propiedad pública Let Value( _
ByVal vValue como variante _
)
Dim ordType As
Dim c As Long
Atenuar hKey As Long
Atenuado
Siempre
Dim lCreate As Long
Dim tSA As SECURITY_ATTRIBUTES
'Abrir o crear clave
e = RegCreateKeyEx(m_hClassKey, m_sectionKey , 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, tSA, hKey, lCreate)
Si e Entonces
Err.Raise 26001, "cRegistry", "Error al establecer el valor del registro Clave: '" amp; m_hClassKey amp "', Sección: '" amp; m_sSectionKey amp "', Clave: '" amp; & "'"
Else
Seleccione Caso m_eValueType
Caso REG_BINARY
Si (VarType(vValue) = vbArray vbByte) Entonces
Dim ab() Como Byte
ab = vValue
ordType = REG_BINARY
c = UBound(ab) - LBound( ab) - 1LBound(ab) - 1
e = RegSetValueExByte(hKey, m_sValueKey, 0amp;, ordType, ab(0), c)
Else
Err .End If
Caso REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_DWORD_LITTLE_ENDIAN
Si (VarType(vValue) = vbInteger) O (VarType(vValue) = vbLong) Entonces
Dim i As Long
i = vValue
ordType = REG_DWORD
e = RegSetValueExLong(hKey, m_sValueKey, 0amp;, ordType, i, 4)
Finalizar si
Caso REG_SZ, REG_EXPAND_SZ
Atenuar s como cadena, iPos mientras
s = vValue
ordType = REG_SZ
' Supongamos que cualquier contenido tiene dos porcentajes no adyacentes.
Todo lo que contenga dos porcentajes no adyacentes es una cadena extendida
iPos = InStr(s, "")
If iPos Then
If InStr (iPos 2, s, "") Entonces ordType = REG_EXPAND_SZ
Fin si
c = Len(s) 1
e = RegSetValueExStr(hKey, m_sValueKey , 0amp;, ordType, s, c)
'Los usuarios deben convertirlo a un tipo compatible antes de llamar
Case Else
e = ERROR_INVALID_DATA
p>Finalizar selección
Si no, entonces
m_vValue = vValue
Si no
Err.Raise vbObjectError 1048 26001, "cRegistry", "Error al establecer el valor del registro Clave: '" & m_hClassKey & "', Sección: '" & m_hClassKey & "'.Section: '" & m_sectionKey & "', Clave: '" amp; m_sValueKey amp "' '" amp; m_vValue amp; "'"
End If
'Close key
RegCloseKey hKey
End If
Propiedad final
Propiedad pública Obtener ValueType() como ERegistryValueTypes
ValueType = m_eValueType
Propiedades finales
Propiedades públicas Let ValueType(ByVal eValueType As ERegistryValueTypes)
m_eValueType = eValueType
Propiedades finales
Propiedades públicas Obtener ClassKey() como ERegistryClassConstants
ClassKey = m_hClassKey
Propiedades finales
Propiedad pública Obtener ClassKey() como ERegistryClassConstants
ClassKey = m_hClassKey
Propiedades finales p>
Propiedades públicas Let ClassKey( _
ByVal eKey As ERegistryClassConstants _
)
m_hClassKey = eKey
Propiedad final
Propiedad pública Get SecciónKey() AsString
SectionKey = m_sSectionKey
Propiedad final
Propiedad pública Let SecciónKey( _
Por V
al sSectionKey As String _
)
m_sSectionKey = sSectionKey
Propiedad final
Propiedad pública Let SectionKey( _
ByVal sSectionKey As String _
)
m_sSectionKey = sSectionKey
Propiedad final
Propiedad pública Obtener ValueKey() como cadena
ValueKey = m_sValueKey
Propiedad final
Propiedad pública Let ValueKey( _
ByVal sValueKey como cadena _