¿Cómo hacer que los botones cambien con el tema en programación VB?
Utilice initcommoncontrols en el primer form_initialize o sub main
Private Declare Sub InitCommonControls Lib "COMCTL32" ()
Luego escriba un archivo de manifiesto para este programa p>
Guardar en la misma carpeta
Por ejemplo, el proyecto 1.exe
se guarda como proyecto 1.exe.manifest
archivo de manifiesto. El contenido es el siguiente
versión="1.0.0.0" procesadorArquitectura="X86" p> nombre="TUNOMBRE" tipo="win32" /> type="win32" name="Microsoft.Windows .Common -Controls" versión="6.0.0.0" procesadorArchitecture="X86" publicKeyToken="6595b64144ccf1df" idioma = "*" /> Simplemente guárdelo con el Bloc de notas Por supuesto, también puede inyectar recursos de manifiesto en el exe El código es el siguiente VERSIÓN 5.00 Comenzar VB.Form Form1 BorderStyle = 1'Fixed Single Caption = "MANIFEST INYECTOR" ClientHeight= 3690 ClientLeft= 45 ClientTop = 435 ClientWidth = 4680 LinkTopic = "Form1" MaxButton = 0 ' Falso ScaleHeight = 3690 ScaleWidth= 4680 StartUpPosition = 3' Ventana predeterminada Comenzar VB.TextBox Texto3 Altura= 270 Izquierda= 480 TabIndex= 3 Arriba = 2520 Ancho = 3615 Fin Comienzo VB.TextBox Texto2 Alto= 270 Izquierda= 480 TabIndex= 2 Texto= "Nombre de archivo" Superior = 2880 Ancho = 3855 Fin Comenzar VB.CommandButton Comando1 Caption = "Inject" Altura= 375 Izquierda= 960 TabIndex= 1 Superior = 3240 Ancho = 1815 Fin Comenzar VB.TextBox Texto1 Alto= 2295 Izquierda= 720 MultiLine = -1'True Barras de desplazamiento= 2'Vertical TabIndex= 0 Texto= "Form1.frx":0000 Superior = 120 Ancho = 3615 Fin p > Fin Atributo VB_Name = "Form1" Atributo VB_GlobalNameSpace = False Atributo VB_Creatable = False Atributo VB_PredeclaredId = Verdadero Atributo VB_Exposed = False Opción explícita Función de declaración privada BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources Mientras) Mientras Función de declaración privada EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate Mientras, ByVal fDiscard Mientras) Mientras Función de declaración privada UpdateResource Lib "kernel32 " Alias "UpdateResourceA" (ByVal hUpdate siempre, lpType mientras, lpName mientras, ByVal wLanguage mientras, lpData como cualquiera, ByVal cbData mientras) Función de declaración privada FindResource Lib "kernel32" Alias "FindResourceA" (Por Val hInstance mientras, ByVal lpName como cadena, ByVal lpType como cadena) mientras Función de declaración privada LoadResource Lib "kernel32" (ByVal hInstance mientras, ByVal hResInfo mientras) mientras Función de declaración privada LockResource Lib "kernel32" (ByVal hResData siempre y cuando) Función de declaración privada SizeofResource Lib "kernel32" (ByVal hInstance mientras, ByVal hResInfo mientras) siempre Const LANG_ENGLISH = &H9 Declaración privada Sub InitCommonControls Lib "COMCTL32" () Función privada uResM(FName$, stU$) Dim rHandle Siempre, maniStr As String rHandle = BeginUpdateResource(FName, False) maniStr = stU uResM = UpdateResource(rHandle, ByVal 24, ByVal 1, ByVal 0, ByVal maniStr, Len(maniStr)) EndUpdateResource rHandle, 0 Función final Subcomando privado1_Click() Dim rHandle As Long, manifestByteArray() Como Byte, maniStr Como Cadena Si MsgBox("¿Crear copia de seguridad?", vbYesNo, "Manifest Injector") = vbYes Luego llame a FileCopy(Text2.Text, Text2.Text & "_original.bak") Si uResM(Text2.Text, Text1.Text) Entonces MsgBox "Done", vbInformation, "Manifest Injector" End Sub Sub privado Form_Initialize() InitCommonControls End Sub Sub privado Form_Load() Si comando <> "" Luego En caso de error, reanudar siguiente Atenuar cmd$, st$, leftPars como cadena, ps$() Atenuar SMode como booleano Atenuar la copia de seguridad como booleana SMode = False Copia de seguridad = True cmd = Comando Atenuar iSt mientras Atenuar iEnd mientras iSt = InStr(1, cmd, Chr(34)) iEnd = InStr(iSt + 1, cmd, Chr(34)) Si iSt > 0 y iEnd > 0 entonces st = Mid(cmd, iSt + 1, iEnd - iSt - 1) Si iSt > 1 Entonces leftPars = Trim(Mid(cmd, iEnd + 1, Len(cmd) - iEnd)): leftPars = leftPars & " " & Trim(Mid(cmd, 1, iSt - 1)) De lo contrario leftPars = Trim(Mid(cmd, iEnd + 1, Len(cmd) - iEnd)) ElseIf iSt > 0 And iEnd = 0 Then MsgBox "Error de parámetro.", vbCritical, "Error" Salir de Sub ElseIf iSt = 0 And iEnd = 0 Entonces st = Mid(cmd, 1, InStr(1, cmd , " ") - 1) Si st = "" Entonces st = Mid(cmd, 1, InStr(1, cmd, "/") - 1) Si st = "" Entonces st = cmd leftPars = Trim(Mid(cmd, InStr(1, cmd, " "), Len(cmd) - InStr(1, cmd, " ") + 1)) Finalizar si ps = Split(leftPars, "/") Atenuar i& Para i = 0 a UBound(ps ) Seleccione Case Trim(UCase(ps(i))) Caso "S" SMode = True Caso " B" Copia de seguridad = Verdadero Caso "NB" Copia de seguridad = Falso Finalizar selección Siguiente i Si Backup = True entonces llame a FileCopy(st, st & "_original.bak") Si uResM(st, Text1.Text) y SMode = False entonces MsgBox "Actualizar recurso correctamente.", vbInformation, "Manifest Injector" ElseIf SMode = False Then MsgBox Chr(34) & st & Chr(34) & " UpdateResource falló.", vbInformation, "Manifest Injector" End If End Fin If End Sub Guárdalo como un formulario y podrás usarlo. .