Actualizar una declaración de API de 32 a 64 bits

Solo consultas sobre macros y código VBA Excel.
Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Responder
Paco_py
Miembro Frecuente
Miembro Frecuente
Mensajes: 30
Registrado: 31 May 2019 09:57

Actualizar una declaración de API de 32 a 64 bits

Mensaje por Paco_py » 15 Ago 2019 12:11

Buen día mis amigos expertos, gusto en saludarlos.

Hace cierto tiempo conseguí automatizar ciertos procesos, gracias a un código que me encontré internet y adapté al mío.
Ahora necesito usar el mismo código en otra pc que es de 64 bits y no tengo idea como actualizar la declaración de Appi (no sé si llamarlo así es correcto).

Les dejo el código:

Código: Seleccionar todo

Private Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As Long)
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Agradezco la ayuda, de antemano.



Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
Mensajes: 5556
Registrado: 26 Mar 2005 18:31

Re: Actualizar una declaración de API de 32 a 64 bits

Mensaje por Héctor Miguel » 15 Ago 2019 17:42

por lo tocante a la API de las teclas, cambia de esto:
Paco_py escribió:
15 Ago 2019 12:11

Código: Seleccionar todo

Private Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As Long)
a esto:

Código: Seleccionar todo

Private Declare PtrSafe Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
  ByVal tecla As Byte, ByVal monitor As Byte, _
  ByVal estado As Long, ByVal extra As LongPtr)
por lo tocante a "sleep", comprueba que sigue funcionando (?)
(hasta donde se)... "sleep.exe" fue retirado desde windows 8

por lo tocante a otras adaptaciones a 64 bits:
- Declaring API Functions In 64 Bit Office



Avatar de Usuario
eavjperu
Miembro Frecuente
Miembro Frecuente
Mensajes: 330
Registrado: 07 Nov 2017 11:59
Ubicación: Perú
Contactar:

Re: Actualizar una declaración de API de 32 a 64 bits

Mensaje por eavjperu » 15 Ago 2019 19:21

Hola

El dilema, más que cambiar de un sistema operativo de 32 a 64 bits, está en cambiar el tipo de Office de 32 bits a 64 bits. Dichos llamados a las funciones de la API de Windows marcarán errores en un Excel de 64 bits. Ya Hector Miguel te dio la respuesta, pero yo agregaría que para que funciones tanto en Excel de 32 bits como en Excel de 64 bits, pues podrías colocarlos así en cualquier módulo estándar (en la parte superior del modulo):

Código: Seleccionar todo

#If VBA7 Then
    Public Declare PtrSafe Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
        ByVal tecla As Byte, ByVal monitor As Byte, _
        ByVal estado As Long, ByVal extra As Long)
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Public Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
#Else
    public Declare Sub enviaTecla Lib "user32" Alias "keybd_event" ( _
        ByVal tecla As Byte, ByVal monitor As Byte, _
            ByVal estado As Long, ByVal extra As Long)
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
#End If
Ah, en Excel de 64 bits verás una parte en rojo (como error), pero no hay problema. Por cierto, Sleep sí funciona en Windows 10.

Saludos

Abraham Valencia



Paco_py
Miembro Frecuente
Miembro Frecuente
Mensajes: 30
Registrado: 31 May 2019 09:57

Re: Actualizar una declaración de API de 32 a 64 bits

Mensaje por Paco_py » 16 Ago 2019 19:19

Muchas gracias Héctor y Abraham Valencia



Responder