vba: copiar texto al portapapeles
25/01/2023vba: Introducción al VBIDE
27/01/2023
Option Compare Database
Option Explicit
Public Sub ImgageView(ImgPath As String)
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Fuente : https://access-global.net/vba-utilizar-una referencia-en-tiempo-de-ejecucion
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Título : ImgageView
' Autor original : zxs23 (https://www.forosdelweb.com/f69/como-ejecutar-imagen-con-visor-imagenes-windows-935362/)
' Adaptado : Luis Viadel
' Creado : enero 2023
' Propósito : mostrar una imagen en el visor de imágenes de Windows
' Argumento/s : La sintaxis de la rutina consta del siguiente argumento:
' Nombre Modo Descripción
'-----------------------------------------------------------------------------------------------------------------------------------------------
' ImgPath Obligatorio Dirección completa del fichero de imagen que queremos visualizar
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Referencias : https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryw
' : https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getprocaddress
' : https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-callwindowproca
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Test: : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copia el bloque siguiente al
' portapapeles y pega en el editor de VBA. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
'
'Sub ImgageView_test()
'Dim ImgPath As String
'
' ImgPath = "Dirección de la imagen"
'
' Call ImgageView(ImgPath)
'
'End Sub
'
'-----------------------------------------------------------------------------------------------------------------------------------------------
Dim Lib As Long
Dim LibAdd As Long
Lib = LoadLibrary("shimgvw")
LibAdd = GetProcAddress(Lib, "imageview_fullscreenW")
CallWindowProc LibAdd, 0&, 0&, StrPtr(ImgPath), 0&
'Liberar la librería
FreeLibrary Lib
End Sub
2 Comments
Una cuestión…
¿ ‘Liberar la librería “FreeLibrary LibAdd” no debería ser “FreeLibrary lib” ?
Lo comento porque la librería se carga en la variable “lib” (lib = LoadLibrary(“shimgvw”)), y “LibAdd” obtiene la dirección de la llamada al punto de ejecución ( LibAdd = GetProcAddress(lib, “imageview_fullscreenW”) )
La ejecución se realiza con “CallWindowProc LibAdd, 0&, 0&, StrPtr(ImgPath), 0& “, es decir, se llama al procedimiento ubicado en la dirección obtenida por GetProcAddress, mientras que la librería se ha cargado en en la variable lib.
Un cordial saludo a todos.
Alba.
Gracias Alba, siempre tan atenta. He utilizado erróneamente la variable de la dirección.
Lo corregimos en la entrada.