elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 74 75 76 77 78 79 80
721  Programación / Programación Visual Basic / Re: Ayuda con saltos de línea en: 13 Marzo 2015, 18:58 pm
Hola
Lo que hay que hacer es primero cargar el texto en  una variable, tal cual  y luego mediante Split, se lee linea por linea. En lugar de leer linea por lína a medida que se leen los datos. Se meten tal cual en la variabla y luego ya se puede leer con Split sin problemas.


Código
  1. Sub AbrirLista(List As ListBox, FileName As String)
  2. Dim LineaTexto As String
  3. Dim File As Integer
  4. Dim Cont As Integer
  5. Dim cDato As String
  6. File = FreeFile
  7.  
  8.  'Abre el archivo
  9.    Open FileName For Binary Access Read Write Lock Write As #File
  10.    cDato = String(1, " ")
  11.        While Not EOF(File)
  12.            Get #File, , cDato
  13.           LineaTexto = LineaTexto & cDato 'Carga el texto en una variable
  14.        Wend
  15.        Close #1
  16.  'Lee linea por linea y las mete en el ListBox
  17. Dim Lineas() As String
  18. Dim i As Integer
  19. Lineas = Split(LineaTexto, vbNewLine)
  20. For i = LBound(Lineas) To UBound(Lineas)
  21. If Lineas(i) > "" Then
  22.    List1.AddItem Lineas(i)
  23. End If
  24. Next
  25. End Sub
722  Programación / Programación Visual Basic / Re: Ayuda código anti flood para visual basic 2010-2013 en: 13 Marzo 2015, 17:20 pm
hola

Con VB6 usando SetWindowsHookEx no hay problema, funciona a la perfección. Pero en VB.Net no funciona. Cuando se llama a SetWindowsHookEx se obtiene un ID, que es un número largo. Ese numero cambia cada vez que se llama a SetWindowsHookEx de modo que una vez bloqueado para desbloquear el teclado, es necesario usar el mismo ID con que se bloqueó con UnhookWindowsHookEx.

https://www.daniweb.com/software-development/vbnet/threads/427872/disable-windows-key-on-keyboard-when-application-is-running


El caso es que encontré la forma de obtener el Id con SetWindowsHookEx en VB.Net, sin embargo NO BLOQUEA EL TECLADO, pero con VB6 sí. No se porqué.

Para VB.Net se necesita el triple de código, y como se puede ver en VB6 el código es muy reducido.

Código
  1. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  2. Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  3. Private Const WH_KEYBOARD = 2
  4. Private X() As Long
  5. Dim Dm As Long
  6.  
  7. Private Sub Command1_Click()
  8. 'Bloquear teclado
  9. ReDim X(Dm)
  10. X(Dm) = SetWindowsHookEx(WH_KEYBOARD, AddressOf WinProcKeyBoard, App.hInstance, App.ThreadID)
  11. Dm = Dm + 1
  12. 'Nota: La tecla windows y Ctrl+Alt+Supr seguirán activos
  13. End Sub
  14. Private Sub Command2_Click()
  15. 'Desbloquear teclado
  16. UnhookWindowsHookEx X(0)
  17. End Sub
  18.  
  19. Private Sub Form_Load()
  20. Command1.Caption = "Bloquear teclado"
  21. Command2.Caption = "Desbloquear teclado"
  22. End Sub
  23.  
  24. '===========================================
  25. '///////////////////////////////////////////
  26. 'A TENER EN CUENTA ANTES DE USAR
  27. 'Al pulsar Command1 SetWindowsHookEx se
  28. 'obtiene un ID que es introducido en X.
  29. 'Este hilo es un número tal como 1442617; 2229059;...; etc
  30. 'El primer valor X, supongamos por ejemplo 1442617,
  31. 'es el ÚNICO VALOR QUE PUEDE DESBLOQUEAR EL TECLADO
  32. 'mediante UnhookWindowsHookEx (al pulsar en Command2)
  33. 'de modo que si se sigue pulsando command1, X irá adquiriendo
  34. 'nuevos valores que YA NO SERVIRÁN PARA DESBLOQUEAR,
  35. 'X perderá su valor original (1442617 en este caso ejemplo)
  36. 'y habrá que cerrar sesión o reiniciar windows para
  37. 'volver a disponer del teclado.
  38.  
  39. 'Para evitar eso, he creado un array en X
  40. 'De modo que el primer valor queda fijado en X(0)
  41. 'Los siguientes valores (si se sigue pulsando Command1)
  42. 'se irán introduciendo en X(1),X(2),..,X(n)
  43. '///////////////////////////////////////////
  44. '===========================================


723  Sistemas Operativos / Windows / Re: El icono de conexión del taskbar de windows aparece como "sin conexión" en: 12 Marzo 2015, 16:02 pm
Gracias por tu ayuda @Eleкtro. ;-)  


Ya está solucionado. Fui al registro de windows  como digiste y vi que había valor llamado FilterCasses en el que hacía referencia al firewall. Entonces fuí al Panel de control para ver la configuración del firewall ya que en ocasiones he recibido notificaciones de  bloqueo del Firewall. Pensé que quizás bloquee algo. Firefox no estaba en las excepecciones y Detección de redes tampoco. Lo checkee como excepción y ahora ya sale el "globo terráqueo".  

No se si será por esto que hice con el FireWall o que pero ahora funciona. Se supone que el Firewall está desactivado, porque es el antivirus el que trabaja como firewall, pero bueno.

De todos modos lo que has puesto me lo guardo para otra...

A mi me gusta que se vea el globo terráqueo, para no tener que iniciar un navegador para saber si estoy conectado o no, ya que no tengo una conexión estable. Y  al pasar el puntero tampoco indicaba nada mediante un mensaje de globo.

Saludos

724  Sistemas Operativos / Windows / El icono de conexión del taskbar de windows aparece como "sin conexión" en: 12 Marzo 2015, 12:19 pm
Hola
En Windows vista no aparece el icono que indica que estoy conectado a internet, es decir, el globo terráqueo no aparece, en su lugar aparece una X de color rojo (no conectado):



Tuve problemas hace unos días con eso pero era aún peor, me indicaba un mensaje que decía que el servicio de detección del estado de conexión estaba desactivado. Restauré el sistema a un punto anterior, y el problema quedó solucionado. Pero un par de días despues otra vez igual, pero ahora no me indica ningún mensaje, ni nada. Sin embargo si que hay conexión.

Agradecería cualquier ayuda, y si es posible especificar. Por ejemplo no decir "activas el servicio de detectción de redes... y listo", pero, ¿Como se llama ese servicio? ¿Cual es su nombre?. Lo digo porque he buscado en Google y suelen contestar así y yo he mirado en la lista en Ejecutar/service.msc y no se cual és, o no está el que comentat. Posiblemente por ser de otro SO.

Saludos y gracias
 

725  Seguridad Informática / Seguridad / Re: Estafas y geolocalización de un mail en: 11 Marzo 2015, 17:40 pm
http://es.kioskea.net/forum/affich-21039-como-saber-la-ip-de-un-correo-recibido
726  Programación / Programación Visual Basic / Re: Necesito parar un proceso de MSDOS en cuanto pulso una tecla en: 11 Marzo 2015, 17:25 pm
Hola
A mi me pasó lo mismo hace tiempo...


Este código es una plantilla, un ejemplo. Analízalo (es muy sencillo) y lo aplicas a tu código.

Necisitas un PictureBox, un CommandButton y  un control Timer.

Lo que hace es emular un proceso sin fin o muy largo For/next o Do Loop. Si se pulsa escape en el evento Timer detecta la tecla ESC y le da valor Verdadero a una variable que he llamado PauseProc. Al ser verdadera en el proceso ejecuta una procedimiento llamado Esperar que emula un reloj en segundos (sin timer), y el proceso se pausa. Si se vuelve a pulsar el CommandButton continúa el proceso, que no estaba parado, si no pausado por el proceso Espera. Entonces el Timer continua (para detectar la tecla ESC) y para el proceso Espera y entonces Tu proceso continua.

Puedes crear si quieres  una variable StopProc como boleano y si es Verdadero paras el proceso definitvamente.

Espero que te sirva:

Código
  1. Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
  2. Dim PauseProc As Boolean
  3. Dim Contador As Long
  4. Private Sub Command1_Click()
  5. 'comienza el proceso
  6. Timer1.Enabled = True 'Permite detectar la tecla
  7. PauseProc = False 'Permite reaundar si se había pausado (false= no parar)
  8. SimularProceso 'SIMULA EL PROCESO
  9. End Sub
  10. Private Sub Form_Load()
  11. Contador = 1
  12.    Picture1.AutoRedraw = True
  13. End Sub
  14. Private Sub Form_Unload(Cancel As Integer)
  15.    End 'Evita que no se pueda cerrar
  16. End Sub
  17.  
  18. Private Sub Timer1_Timer()
  19. Dim msgQuest As Variant
  20. If GetKeyState(vbKeyEscape) < 0 Then PauseProc = True 'para el proceso
  21.  
  22. If PauseProc = True Then 'Si se ha pulsado ESCAPE
  23.        'Muestra la pregunta
  24.        msgQuest = MsgBox("Desea pausar el proceso", vbYesNo, "Question")
  25.        'Si es no continua el proceso
  26.        If msgQuest = vbNo Then
  27.            PauseProc = False 'Continuar proceso
  28.            Else ' si es sí para el timer (para invalidar ESC)
  29.            Timer1.Enabled = False
  30.        End If
  31. Else 'Si no se ha pulsado nada
  32.    PauseProc = False 'No se pare el proceso
  33.    Timer1.Enabled = True 'Atento si se pulsa ESC
  34. End If
  35. End Sub
  36. '////////////////////////////////////////
  37. 'SIMULA UN PROCESO FOR/NEXT O DO/LOOP
  38. '////////////////////////////////////////
  39. Public Function SimularProceso()
  40. For i = Contador To 3 ^ 14
  41. Contador = i 'Memoriza el último estado
  42.    Picture1.Cls
  43.    Picture1.Print i
  44.    DoEvents
  45. 'Si se ha pausado pausa durante 3600 segundos (un hora)
  46. If PauseProc = True Then Espera (3600)
  47. Next i
  48. End Function
  49.  
  50. '////////////////////////////////////////
  51. 'Espera un determinado tiempo en segundos
  52. '////////////////////////////////////////
  53. Private Sub Espera(Segundos As Single)
  54.  Dim ComienzoSeg As Single
  55.  Dim FinSeg As Single
  56.  ComienzoSeg = Timer
  57.  FinSeg = ComienzoSeg + Segundos
  58.        If PauseProc = False Then Exit Sub ' Si pulsas continuar deja de esperar
  59.  Do While FinSeg > Timer
  60.      DoEvents
  61.      If ComienzoSeg > Timer Then
  62.          FinSeg = FinSeg - 24 * 60 * 60
  63.      End If
  64.  Loop
  65. End Sub


Esto es una forma muy rebuscada. Pero si quieres en lugar de usar For/next  o Do /Loop metes el proceso en el un Timer y cuando te interese lo estableces a False y cuando quieras reaundar a True. Es más sencillo.
727  Programación / Programación Visual Basic / Re: Error que no encuentro en Visual Basic 6 con el puerto serie en: 11 Marzo 2015, 14:00 pm
Hola compi :laugh:

Código
  1. '////////////////////////////////////////
  2. '/Agregar los siguientes controles al proyecto:
  3. '////////////////////////////////////////
  4. '/CommandButton1 --name= cmdConectar
  5. '/CommandButton2 --name= cmdEnviar
  6. '/ComboBox1 --name = cmbSel
  7. '/MSComm -- name = Puerto  <---Agregar componente (ctrl+t): Microsoft Comm Control 6.0
  8. '/TextBox --name = txtEnviar
  9. '/Timer1 -- name: Timer1
  10. '/Label -- name: lblMostrar
  11. '////////////////////////////////////////'//////////////////////////////////////////
  12.  
  13. Dim TextOut, TextIn As String
  14.  
  15. Private Sub Form_Load()
  16. cmdConectar.Caption = "Conectar"
  17. cmdenviar.Caption = "Enviar"
  18. Timer1.Enabled = False
  19. Timer1.Interval = 1
  20. 'Lista los puertos y comprueba su disponibilidad
  21. cmbSel.Clear
  22. Call GetInstalledCOMPorts(cmbSel)
  23. cmbSel.ListIndex = 0
  24. End Sub
  25.  
  26. Private Sub cmdConectar_Click()
  27. On Error GoTo EvitarError
  28.    If cmdConectar.Caption = "Conectar" Then
  29.        puerto.CommPort = Val(cmbSel.ListIndex + 1)
  30.        puerto.PortOpen = True
  31.        cmdenviar.Visible = True
  32.        Timer1.Enabled = True
  33.        cmdConectar.Caption = "Desconectar"
  34.    End If
  35.   ' procedimiento para desconectar puerto
  36.    If cmdConectar.Caption = "Desconectar" Then
  37.        Timer1.Enabled = False
  38.        cmdenviar.Visible = False
  39.        puerto.PortOpen = False
  40.        cmdConectar.Caption = "Conectar"
  41.    End If
  42. EvitarError:
  43.    If Err Then
  44.    MsgBox "Puerto no disponible", vbExclamation, "Atención"
  45.    End If
  46. End Sub
  47. Private Sub cmdEnviar_Click()
  48. On Error GoTo EvitarError
  49.    TextOut = txtEnviar.Text
  50.    puerto.Output = TextOut
  51. EvitarError:
  52.    If Err Then
  53.    MsgBox "Puerto " & Left(cmbSel.List(cmbSel.ListIndex), 4) & _
  54.    " no conectado", vbExclamation, "Atención"
  55.    End If
  56.  
  57. End Sub
  58. Private Function GetInstalledCOMPorts(ByVal lstCmb As ComboBox) As Long
  59.   Dim Port As Long
  60.   For Port = 1 To 16
  61.      If COMCheckPort(Port) Then
  62.         lstCmb.AddItem "COM" & Port & "  disponible"
  63.      Else
  64.         lstCmb.AddItem "COM" & Port & "  (no disponible o no hay ningún puerto)"
  65.      End If
  66.   Next
  67.  
  68. End Function
  69. Private Function COMCheckPort(ByVal NumPort As Long) As Boolean
  70. On Error GoTo EvitarError
  71.   puerto.CommPort = NumPort
  72.   If puerto.PortOpen = True Then
  73.      COMCheckPort = False
  74.      Exit Function
  75.   Else
  76.     'Test the port by opening and closing it
  77.      puerto.PortOpen = True
  78.      puerto.PortOpen = False
  79.      COMCheckPort = True
  80.      Exit Function
  81.   End If
  82. EvitarError:
  83.   COMCheckPort = False
  84. End Function
  85.  
  86. Private Sub Timer1_Timer()
  87.    TextIn = puerto.Input
  88.    If TextIn <> vbNullString Then
  89.        lblMostrar.Caption = TextIn
  90.    End If
  91. End Sub


A ver si te vale... :silbar:
728  Programación / Programación Visual Basic / Ejemplo para enviar comandos a otras aplicaciones con SendMessage en: 11 Marzo 2015, 11:59 am
Hola

Esto es un ejemplo de uso de SendMessage para enviar comandos a otras aplicaciones. Se necesita el Handle de la otra aplicación y un código que hace referencia a una acción o evento determinado. Los códigos se pueden encontrar usando la herramienta Spy++ incluida en VB y VB.Net

Este programita permite cambiar las vistas de los iconos del escritorio como si fuera un ListView y también cambia las vistas del Explorador de windows.  Es como hacer "clic" en 'Vistas' del Explorador de Windows pero se hace remotamente desde el programa.

Intrucciones:

- Crea un array con dos controles OptionButton, 5 de cada uno: Option1 y Option2

En un formulario meter esto:

Código
  1. Option Explicit
  2. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  3. (ByVal hwnd As Long, _
  4. ByVal wMsg As Long, _
  5. ByVal wParam As Long, _
  6. lParam As Any) As Long
  7.  
  8. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  9. (ByVal lpClassName As String, _
  10. ByVal lpWindowName As String) As Long
  11.  
  12. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  13. (ByVal hWnd1 As Long, _
  14. ByVal hWnd2 As Long, _
  15. ByVal lpsz1 As String, _
  16. ByVal lpsz2 As String) As Long
  17.  
  18. Private Const WM_COMMAND = &H111
  19.  
  20. Private Sub Form_Load()
  21. Option1.Item(0).Caption = "Vista Miniatura"
  22. Option1.Item(1).Caption = "Mosaico"
  23. Option1.Item(2).Caption = "Iconos"
  24. Option1.Item(3).Caption = "Lista"
  25. Option1.Item(4).Caption = "Detalle"
  26.  
  27. Option2.Item(0).Caption = "Vista Miniatura"
  28. Option2.Item(1).Caption = "Mosaico"
  29. Option2.Item(2).Caption = "Iconos"
  30. Option2.Item(3).Caption = "Lista"
  31. Option2.Item(4).Caption = "Detalle"
  32. End Sub
  33.  
  34. Public Function VistasEscritorio(ByVal Code As Long)
  35. Dim hwProgMan As Long
  36. Dim hwDesktop As Long
  37. hwProgMan = FindWindow("Progman", "Program Manager")
  38. hwDesktop = FindWindowEx(hwProgMan, &H0, "SHELLDLL_DefView", vbNullString)
  39. SendMessage hwDesktop, WM_COMMAND, Code, &H0
  40. End Function
  41.  
  42. Public Function VistasExplorador(ByVal Code As Long)
  43. Dim hwExplorer As Long
  44. Dim ListView As Long
  45.  
  46. 'Para XP
  47. hwExplorer = FindWindow("ExploreWClass", vbNullString)
  48. ListView = FindWindowEx(hwExplorer, &H0, "SHELLDLL_DefView", vbNullString)
  49. SendMessage ListView, WM_COMMAND, Code, &H0
  50.  
  51. 'Para Vista/...
  52. hwExplorer = FindWindow("CabinetWClass", vbNullString)
  53. ListView = FindWindowEx(hwExplorer, &H0, "ShellTabWindowClass", vbNullString)
  54. SendMessage ListView, WM_COMMAND, Code, &H0
  55. End Function
  56.  
  57. Private Sub Option1_Click(Index As Integer)
  58. Dim Code As Long
  59. Select Case Index
  60. Case 0: Code = 28717 'Vista Miniatura
  61. Case 1: Code = 28718 'Mosaico
  62. Case 2: Code = 28713 'Iconos
  63. Case 3: Code = 28715 'Lista
  64. Case 4: Code = 28716 'Detalles
  65. End Select
  66. Call VistasEscritorio(Code)
  67. End Sub
  68. Private Sub Option2_Click(Index As Integer)
  69. Dim Code As Long
  70. Select Case Index
  71. Case 0: Code = 28717 'Vista Miniatura
  72. Case 1: Code = 28718 'Mosaico
  73. Case 2: Code = 28713 'Iconos
  74. Case 3: Code = 28715 'Lista
  75. Case 4: Code = 28716 'Detalles
  76. End Select
  77. Call VistasExplorador(Code)
  78. End Sub
729  Seguridad Informática / Seguridad / ¿Es posible un ataque e intrusión a través de Bluetooth? en: 11 Marzo 2015, 11:46 am
Hola amig@s,

Hace unos días restauré el SO del portátil. El caso es que se me olvidó desconectar el servicio de Bluetooth y configurar el antivirus y el firewall para restringir la conexión de otros usuarios de la red para compartir archivos. Me conecté a una red  Wi-Fi pública de una biblioteca y se me desactivó el servicio de detección de redes, y no hubo forma de volverlo a activar, sin embargo tenía conexión a Internet. Recibí  el siguiente mensaje:

"Recientemente se agregó o eliminó una apliación PIM (Personal Information Management) en el sistema" (relacionado con el Bluetooth".

Además se desactivó la protección sonar del antivirus, que tampoco hubo forma de activarlo. Y en  "red" había un PC con nombre desconocido, es decir, no era el mío.

Finalmente, tuve que reastaurar el sistema a un punto anterior. Para poder solucionar el problema. Desinstalar y volver a instalar el antivirus, actualizarlo y por supuesto esta vez si, desconectar el Bluetooth y desactivar "Permitir que los dispositivos Bluetooth encuentren este equipo" y también "Permite que los elementos Bluetooth puedan enviarle PIM, como tarjetas de presentación, elementos de calendario, mensajes de correo electrónico y notas".

Alguna vez he recibido tarjetas de presentación invitandome a compartir multimedia (teniendo habilitado el Bluetooth). ¿Quién lo hace y porqué?

No se si es que son intentos de intrusió o  que, quizás a traves de un dispositivo mobil. >:(



730  Programación / Programación Visual Basic / Tutorial: Insertar un manifest y ejecutar como administrador en vb6 en: 10 Marzo 2015, 19:17 pm
INSERTAR UN MANIFEST A NUESTRA APLICACIÓN Y EJECUTAR COMO ADMINISTRADOR EN VB6

Hola,
Seguro que hay más de un usuari@ de VB6 que le gustaría que su aplicación creada con VB6 tenga un aspecto actualizado con respecto a los nuevos SO de Microsoft. Además, poder cambiar el nivel de Control de cuentas de usuario de Windows, es decir que requiera iniciarse como “Administrador”, de modo que permita acceder al registro y crear claves o modificar valores que requieren privilegios de Administrador.

Hace varios años busqué información en la Web y me costó encontrar un tutorial claro de como hacer simplemente que mi aplicación se ejecutara con nivel de Administrador. Encontré que podías añadir un archivo manifest, pero externo a la aplicación, con lo cual tu aplicación siempre tendría que ir acompañada de dicho archivo. El manifiesto, también permite habilitar los temas para los controles y cuadros de diálogo comunes del XP y posteriores.

Sin embargo, es posible introducir dicho manifiesto dentro de nuestra aplicación y que al iniciarse nuestra aplicación se aplique las instrucciones de dicho manifiesto. Visual Basic .Net ya lo hace de forma automática, y por supuesto es posible modificarlo dentro del entorno de programación.

Existen varios programas como ResourceHacker o PE Explorer que permiten introducir dentro de nuestra aplicación ya compilada, un manifiesto. Sin embargo, no es necesario ningún programa externo a VB6 para introducir un manifiesto en nuestra aplicación. A continuación explico como hacerlo con VB6 y Microsoft Visual C++ 6.0.

He hecho una explicación detallada. Realmente el proceso es muy sencillo, pero por escrito parece más complicado de lo que es realmente. Una vez se conoce el proceso se hace en un momento.

1. Crear un archivo de recursos con Microsoft Visual C++
Antes de nada hay que crear un archivo de recurso con el manifiesto y  compatible con VB6. Para ello iniciamos Microsoft Visual C++ 6.0 que, si lo tienes instalado, encontrarás el acceso directo en el menú inicio en la carpeta de “Microsoft Visual Studio 6.0”. Si no lo tienes instalado, inicias el paquete de instalación de Visual Studio 6 y agregas Visual C++.

Bien, una vez iniciado Visual C++, en el menú “Insert” seleccionas “Resource…” o bien pulsa “Ctrl + R”.



Del cuadro [Insert Resource] pulsa el botón [Custom]. Aparecerá otro cuadro con el nombre [New custom Resource] que te pide que introduzcas el [Resource Type]. Escribe “24” (sin comillas) y pulsa “OK”.




Se creará un cuadro de texto de datos binarios de nombre “Script1-IDR_DEFAULT1 (24)”, en el que más adelante, habrá que introducir el manifiesto.





Si esta ventana aparece maximizada, en el menú “Window” selecciona “Tile Horizontally” para poder visualizar el árbol de proyecto.





1.1 Cambiar el nombre del objeto de datos binarios
Haz clic en el árbol con el botón derecho del ratón sobre  “IDR_DEFAULT1” y selecciona propiedades.




Cambia el ID  por “1” (sin comillas) ya que por defecto es “IDR_DEFAULT1”. Esto último es muy importante para que el manifiesto funcione. El nombre debe ser 1

Puedes también cambiar la opción “Language”, yo pondría “Neutral” que es la primera opción de la lista.



De modo que el árbol queda así:



1.2 Cambiar le nivel de usuario
Llega el momento de introducir nuestro manifiesto, pero antes de hacerlo quizás quieras elegir el nivel de cuenta usuario para tu aplicación. Para ello, habrá que hacer una pequeña modificación en el manifiesto que se muestra más abajo.

Hay tres niveles de cuenta de usuario, a elección personal, para nuestra aplicación.

Fíjate en esta línea del manifiesto anterior:



Los tres niveles de cuenta son:

asInvoker

requireAdministrator

highestAvailable

Si quieres que tu aplicación se ejecute como Administrador cambia "asInvoker" por "requireAdministrator



La línea quedaría así:

<requestedExecutionLevel level="requireAdministrator " uiAccess="false" />




Manifiesto:

Código
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <asmv1:assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" manifestVersion="1.0">
  3.  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  4.  
  5. <!-- Opciones del manifiesto de Control de cuentas de usuario-->
  6.  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  7.    <security>
  8.      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  9.        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
  10.      </requestedPrivileges>
  11.    </security>
  12.  </trustInfo>
  13.  
  14. <!-- Habilitar los temas para los controles-->
  15.  <dependency>
  16.    <dependentAssembly>
  17.      <assemblyIdentity
  18.          type="win32"
  19.          name="Microsoft.Windows.Common-Controls"
  20.          version="6.0.0.0"
  21.          processorArchitecture="*"
  22.          publicKeyToken="6595b64144ccf1df"
  23.          language="*"
  24.        />
  25.    </dependentAssembly>
  26.  </dependency>
  27.  
  28. <!-- Windows seleccionara automaticamente el entorno de mayor compatibilidad-->
  29.      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  30.        </compatibility>
  31. </asmv1:assembly>

1.3 Escribir el manifiesto
En el cuadro de texto de datos binarios “1”, hay que copiar y pegar el manifiesto mostrado arriba.



(Si habías cerrado el cuadro de textos binarios “1”, haz doble clic sobre 1 en el árbol de proyecto para abrirlo de nuevo)

Al pegar el manifiesto el “documento” queda así:




MUY IMPORTANTE  :o
Es esencial para que funcione nuestro manifiesto, que la última línea quede en blanco. En la siguiente imagen puede verse que la última línea 0004f0 no está vacía. Si ocurre esto, nuestro manifiesto no funcionará:



La última línea debe estar vacía, para conseguirlo colocamos el cursor en el último punto (en la parte derecha, donde hay letras) y pulsa ‘espacio’ cuyo valor hexadecimal es 20, hasta que quede una última línea vacía:




Como puede verse en la imagen de arriba, ahora la última línea es 000500 y está vacía. Repito que esto es esencial  para que funcione el manifiesto en nuestra aplicación, de lo contrario la aplicación no se ejecutará.

1.4 Guardar y crear archivo RES
Después guardas como archivo RES.El cuadro “Guardar como” tiene tres opciones:

Resource Script (.rc)
Resource Template (.rt)
32-bit Resource File (.res)



Guardamos como “32-bit Resource File (.res)“. Lo necesitarás para introducirlo en tu aplicación. Puedes elegir el nombre que te de la gana.

Mi consejo es que crees los tres tipos de manifiesto, y los guardes para otras aplicaciones. Pero ten en cuenta que cuando abras el proyecto VB6, éste buscará el archivo RES (archivo de recursos) que hayas vinculado al proyecto y que si en tu proyecto modificas el archivo RES añadiendo imágenes, cursores, iconos, archivos o tablas cadenas, luego, al guardar los cambios el archivo RES quedará modificado. Además, si ha sido movido o borrado cuando inicies el proyecto VB, el archivo RES, lógicamente no se cargará. Lo mejor, una vez creado el archivo RES, es hacer una copia del archivo en la carpeta de nuestro proyecto. Así, cada proyecto que hagamos tendrá su propio archivo RES.

2. Incrustar el manifiesto en la aplicación
Pues llega el momento de coger ese archivo RES que has creado y meterlo en tu aplicación. Para ello necesitamos una herramienta incluida en VB6 llamada “Editor de Recursos de VB6”.

Abre tu proyecto de VB6 y ya dentro del entorno de programación ejecutas el Editor de Recursos de VB6. Es posible que no lo tengas habilitado. Para habilitarlo vas al menú “Complementos” y abres el “Administrador de complementos”, aparecerá un cuadro con una lista de complementos. Selecciona “Visual Basic 6 Resource Editor” en la lista y marca como “visto”; cargado/Descargado y  Cargar al iniciar.

Bien,  una vez cargado “Visual Basic 6 Resource Editor” debería abrirse una ventana acoplable  y mostrarse un cubo verde en la barra de menú. Si no aparece la ventana del editor o la cierras sin querer, haz clic sobre el cubo verde. También se puede abrir desde el menú “Herramientas”.




No encuentro el Editor de Recursos en VB6 :o
¿Cómo? ¿Que no encuentras “Visual Basic 6 Resource Editor”? Esto puede deberse a dos razones, que no has instalado los complementos de VB6 o que probablemente estés ejecutando Windows como invitado o usuario sin privilegios. Al instalarse VB6 se crean unas claves en el registro y ocurre que las claves relacionadas con los complementos y demás las crea en el registro del Administrador pero no en el registro de las cuentas sin privilegios. Por esta razón no aparecen los complementos. Al instalar VB6, Windows no crea estas claves a usuarios sin privilegios de Administrador.

Para solucionar el problema ejecuta VB6 como Administrador y si lo tienes instalado los complementos deberían aparecer en la lista. Hay un truco para poder usar los complementos en una cuenta sin privilegios de Administrador y es, que una vez instalado VB6 desde una cuenta de Administrador, acceder al registro de Windows y extraer todas las claves de VB6, para luego agregarlas, forzadamente, desde la cuenta sin privilegios. Concretamente la clave principal es (incluir las subclaves):

[HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0]

Y  la relacionada con el Editor de Recursos y sus valores es:

[HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0\Addins\ResEdit6.Connect]
"FriendlyName"="#2000"
"Description"="#2001"
"SatelliteDllName"="RsEdt"
"LoadBehavior"=dword:00000000
"CommandLineSafe"=dword:00000000

2.1  Abrir el manifiesto
La ventana del editor de recursos tiene una barra de menú, pulsa “Abrir” (la carpetita amarilla con flecha) o haces clic en la ventana con el botón secundario del ratón y seleccionas “Abrir”. Y busca el archivo de recursos que creaste con Visual C++  de formato *.RES para cargarlo.




Al cargar el archivo de recursos con el manifiesto creado con Visual C++, el editor se muestra así:

 



2.2 Código necesario para el proyecto VB6
Tu proyecto ya tiene cargado un manifiesto. Pero hay un problema, puede que no te funcione en XP o cuando lo ejecutes en  Windows en “Safe Mode” (modo seguro).  Aún queda introducir el siguiente código en tu proyecto:

Código
  1. Private Declare Sub InitCommonControls Lib "comctl32" ()
  2.  
  3. Private Sub Form_Initialize()
  4. InitCommonControls
  5. End Sub

Así se muestra un formulario VB6 sin el manifiesto.

Sin manifiesto:




Si todo se ha hecho correctamente tu aplicación debería mostrarse así una vez compilada:

Con manifiesto:

En Windows XP


Al ejecutar el programa en Windows XP, algunos controles se verán con un fondo de color negro. Para evitarlo, mete el control dentro de un PictureBox y entonces se verá correctamente.


En Windows Vista



En Windows 7



Y si as aplicado  “requireAdministrator”, entonces al abrirla debería mostrar un cuadro de confirmación.


3. Introducir manifiesto en una aplicación ya creada con Microsoft Visual C++
Se pueden introducir manifiestos en aplicaciones ya creadas.

Ejecutas Visual C++ y abres cualquier aplicación como “Resource




Puedes introducir el manifiesto como se ha explicado anteriormente o bien abres un archivo de recursos ya creado con el manifiesto y lo copias haciendo clic primero con el botón izquierdo sobre “1” o “24” para seleccionar y luego con el botón derecho del ratón y sin soltar arrastrar hacia el proyecto de la aplicación y copiar:








 



Ahora guardas y ya está hecho.
Páginas: 1 ... 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 74 75 76 77 78 79 80
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines