Red de conocimiento informático - Problemas con los teléfonos móviles - 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.

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.

'Código de formulario, botón de comando Command1

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, _

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

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

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

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)

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

sData = String$(cData - 1, 0)

e = RegQueryValueExStr(hKey, m_sValueKey, 0amp;, _

ordType, sData, cData)

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)

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

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 _