Power Builder - Llamar a IExplore desde PB

   
Vista:

Llamar a IExplore desde PB

Publicado por dani (1 intervención) el 03/11/2009 15:48:24
Hola,

Desde una aplicacion en PB tengo que abrir diferentes tipos de archivos (bmp, jpg. doc, pdf,..), pero a la hora de abrirlos tengo que hacerlo utilizando el IExplore.
Alguien sabría como lo puedo hacer.

Tengo definido esto

lo_wsh = CREATE OleObject
li_rc = lo_wsh.ConnectToNewObject( "WScript.Shell" )
if li_rc<>0 then
messagebox ("Error","Error")
return -1
end if
lo_wsh.Run(path)

El path a veces está informado con una dirección web (si es así no tengo problemas para abrirlo), y a veces es una direccion fisica del disco (C:\...\nombre-archivo) y es cuando tengo problemas para abrirlo

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamar a IExplore desde PB

Publicado por miguell (153 intervenciones) el 03/11/2009 18:38:07
en vez de usar OLE:

puedes hacer uso de shellExecute pero tiene una desventaja:
declarar una función (api windows) como local o global externar:

FUNCTION long ShellExecuteA ( long ll_hWnd, REF String ls_operation, REF String ls_file, REF string ls_parameters, REF string ls_directory, INT nShowCmd) library 'shell32.dll' alias for "ShellExecuteA;Ansi"

luego en código tengo una función global que paso un url o nada :
---------------------
String ls_command, ls_dir, ls_args, ls_url

SetPointer (Hourglass!)
ls_command = "Open"
ls_dir = ""
ls_args = ""
ls_url = as_url
if isnull(ls_url) then // no lo he probado si va sin url
ls_null = ''
end if

RETURN ShellExecuteA ( 0, ls_command, ls_url, ls_args, ls_dir, 5)

La desventaja del anterior método es que si ya tienes abierto un navegador, te reemplaza la página que actualmente estabas viendo con el url que mandas al shellexecuteA

otra cosa que puedes hacer para evitar el 'reemplazo' de una posible navegación fuera del programa tuyo:
-------------------------------------------------------------------------------------------------

puedes sacar del registro donde está instalado el navegador por defecto del windows / internet explorer:
coges ese path y haces :
run ( "path_navegador parámetro de página inicial") creo que si hay espacios en blanco en los directorios tendrás que hacer algo con comillas

Te paso un trozo de código:
------------------------------------
ls_url_web = trim(lower(ls_url_web))
ls_key = '' //"(Predeterminada)"

// es diferente https o http !!
if pos( ls_url_web, 'https://', 1) > 0 then
// httpS
ls_path = "HKEY_CLASSES_ROOT\https\Shell\open\command"
else // buscar http (sin la 's')
ls_path = "HKEY_CLASSES_ROOT\http\Shell\open\command"
end if

// buscamos el navegador internet que tenga asignado el usuario en el registro:
ll_result = RegistryGet( ls_path, ls_key, ls_resultado)
if ll_result <> 1 then
// no se encontró, esperemos que la siguiente dirección del internet explorer exista:
ls_resultado = 'C:\Archivos de programa\Internet Explorer\iexplore.exe'
if not fileExists(ls_resultado) then
messagebox('Problema al ubicar un navegador de internet', 'Contacte con el CAU para hacer una incidencia por favor.', exclamation!)
return
end if
end if

ls_resultado = trim(ls_resultado)
// ls_resultado tendrá pe. : '"C:\Archivos de programa\Internet Explorer\iexplore.exe" -nohome'
if left(ls_resultado, 1) = '"' then // quitar la primera "
ls_resultado = mid(ls_resultado, 2)
end if
if pos(ls_resultado, '"', 1) > 0 then // quitar todo a partir de la segunda " (inclusive)
ls_resultado = mid(ls_resultado, 1, pos(ls_resultado, '"', 1) -1 )
end if

ls_resultado = ls_resultado + ' ' + ls_url_web
setpointer(hourglass!)
run( ls_resultado )

-------------------------------------------------------------------
A mi personalmente me gusta más la última solución ya que no molestas al usuario. Si tiene ya una sesión de internet abierta, tu programa no interfiere con ella.

Espero que te sirva,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar