Bueno para un proyecto que estoy haciendo me surgio la duda de como ejecutar esta aplicacion, y bueno, la forma mas sencilla para la mayoria puede ser ejecutar rundll32.exe con un par de parametros, pero; ¿para que usar ese programa si lo unico que hace es hacer una llamada a la DLL que le especifico yo?. Lo mas simple es declararla, pero asi no funciono para mi. Aca cobein me tiro una ayuda, y el codigo quedo muy sencillo. Le agregue la verificacion de sistema, ya que el XP usa shimgvw.dll y el Vista, 7 usan photoviewer.dll que esta en otra direccion y todo. Ambas librerias tienen la misma funcion, estamos hablando de ImageView_FullscreenW (dios sabra que carajo habran querido hacer).
el codigo (no dejo link porque es muy corto):
'---------------------------------------------------------------------------------------
' Modulo : mdlOpenImageViewer
' Autor : Cocus (coco_electro@hotmail, santiagohssl@gmail.com)
' Fecha : 07/06/2010 22:40
' Uso : Ojito con lo que haces con esto! Yo te dejo que lo uses donde quieras,
' pero tenes que mencionar a el/los autores de este modulo en alguna parte
' del software. NO PODES USAR EL EJEMPLO TAL CUAL ESTA PARA VENDER!!! :@
' Para eso, date un tiempito y editalo un poco.
' Referencias : -
' Gracias a cobein por el "core" de este codigo.
' Proposito : Abrir el Visor de Imagenes en XP, Vista*, 7 (aun no testeado en vista)
' Revisiones : #0 07/06/2010 - Cocus: Primera revision
'---------------------------------------------------------------------------------------
Option Explicit
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Function FixPath(ByVal strPath As String) As String
FixPath = strPath & IIf(Left$(strPath, 1) = "\", "", "\")
End Function
Public Function ShowImageViewer(ByVal strPath As String) As Boolean
Dim lngLib As Long
Dim lngFunc As Long
If (((GetVersion And &HFFFF&) Mod 256) = 6) Then
lngLib = LoadLibrary(FixPath(Environ("ProgramFiles")) & "Windows Photo Viewer\PhotoViewer.dll")
Else
lngLib = LoadLibrary("shimgvw.dll")
End If
lngFunc = GetProcAddress(lngLib, "imageview_fullscreenW")
CallWindowProc lngFunc, 0&, 0&, StrPtr(strPath), 0&
End Function
y como lo usan? bueno no es complicado, en especial porque es la unica funcion publica xD, le pasan el path de la imagen que quieren ver, y se abre por arte de magia.
saludos!