Problemillas al llamar a la calculadora...
Hola Fejoal.
Te agradecería enormemente que me echaras un cable, porque tengo una duda y me he vuelto loco para intentar resolverla, pero sin resultados satisfactorios.
Tengo una aplicación que llama a la calculadora de windows. Para lo cual uso el siguiente código:
'Esta función me la facilitó nuestro amigo Mauricio, y sirve para buscar una aplicación en ejecución
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Esta macro también es de Mauricio, pero yo le he hecho alguna ligera moficicación, puesto que no he asignado variables, como el normalmente hace, ya que así "veo" mejor lo que hace el código
Sub Llamar_Calculadora()
On Error GoTo Fin
'Busca si ya esta en ejecución la calculadora y si no la encuentra
If FindWindow(vbNullString, "Calculadora") = 0 Then
'Ejecuta la Calculadora, y al poner 1, recibe el enfoque,
'para lo cual busca si está en alguno de estos directorios
Shell "C:\WINDOWS\CALC.EXE", 1
Else
'En caso de que ya esté en ejecución la calculadora, solo la activa
AppActivate "Calculadora", False
End If
Exit Sub
Fin:
Err.Clear
End Sub
El problema con el que me encuentro es ¿qué pasa con los usuarios que tienen otro sistema operativo, como por ejemplo Windows NT?. ¿Y el resto, Win98, Win2000, etc..?.
Obviamente no se ejecuta la calculadora, puesto que no la encuentra, ya que normalmente el directorio del sistema operativo no suele coincidir con el de WINDOWS (puede ser WINNT, WIN98, e incluso para los usuarios de windows95, el directorio puede ser WIN95).
He probado a poner el siguiente código en sustitución de la línea Shell:
Shell "C:\WINDOWS\CALC.EXE", 1
Shell "C:\WINDOWS\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN\CALC.EXE", 1
Shell "C:\WIN\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN95\CALC.EXE", 1
Shell "C:\WIN95\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS95\CALC.EXE", 1
Shell "C:\WINDOWS95\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN98\CALC.EXE", 1
Shell "C:\WIN98\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS98\CALC.EXE", 1
Shell "C:\WINDOWS98\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN2000\CALC.EXE", 1
Shell "C:\WIN2000\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS2000\CALC.EXE", 1
Shell "C:\WINDOWS2000\SYSTEM32\CALC.EXE", 1
Shell "C:\WINXP\CALC.EXE", 1
Shell "C:\WINXP\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSXP\CALC.EXE", 1
Shell "C:\WINDOWSXP\SYSTEM32\CALC.EXE", 1
Shell "C:\WINNT\CALC.EXE", 1
Shell "C:\WINNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSNT\CALC.EXE", 1
Shell "C:\WINDOWSNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSNT\SYSTEM32\CALC.EXE", 1
El la oficina tengo WindowsNT (la calculadora está en la partición C:\WINNT\SYSTEM32), y la aplicación no la llama. Supongo que es porque solo ejecuta la primera línea de código, y ahí se para. Si borro todas las líneas Shell, excepto la antepenúltima, entonces sí que funciona, ya que es en esa partición donde se encuentra la Calculadora.
Bueno, mi pregunta es ¿cómo puedo llamar a la calculadora si no sé el directorio del sistema operativo, o incluso el subdirectorio donde se encuentra específicamente la calculadora?.
Se me hace complicadillo, porque me gustaría que la calculadora buscara entre varios directorios, pero aun usando cogido para que busque si existe un directorio, podría darse el caso de que un usuario tuviera el directorio WIN95 y WIN98, por ejemplo, porque ha actualizado la versión de windows. No se si me he explicado correctamente...
En definitiva, ¿es posible que la macro busque no solo el directorio, sino el programa "Calc.exe" (o "Calculadora.exe" si es que en verisones posteriores a Win95 o WinNT 4.0, la calculadora tiene ese nombre, cosa que desconozco), y si lo encuentra, que lance esa aplicación (la calculadora), y en caso contrario, que vaya reastreando el siguiente directorio, de los que te he puesto en el ejemplo del Shell?
Miles de gracias por tu colaboración y por el tiempo que te hago perder.
Mr.Dudas
Te agradecería enormemente que me echaras un cable, porque tengo una duda y me he vuelto loco para intentar resolverla, pero sin resultados satisfactorios.
Tengo una aplicación que llama a la calculadora de windows. Para lo cual uso el siguiente código:
'Esta función me la facilitó nuestro amigo Mauricio, y sirve para buscar una aplicación en ejecución
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Esta macro también es de Mauricio, pero yo le he hecho alguna ligera moficicación, puesto que no he asignado variables, como el normalmente hace, ya que así "veo" mejor lo que hace el código
Sub Llamar_Calculadora()
On Error GoTo Fin
'Busca si ya esta en ejecución la calculadora y si no la encuentra
If FindWindow(vbNullString, "Calculadora") = 0 Then
'Ejecuta la Calculadora, y al poner 1, recibe el enfoque,
'para lo cual busca si está en alguno de estos directorios
Shell "C:\WINDOWS\CALC.EXE", 1
Else
'En caso de que ya esté en ejecución la calculadora, solo la activa
AppActivate "Calculadora", False
End If
Exit Sub
Fin:
Err.Clear
End Sub
El problema con el que me encuentro es ¿qué pasa con los usuarios que tienen otro sistema operativo, como por ejemplo Windows NT?. ¿Y el resto, Win98, Win2000, etc..?.
Obviamente no se ejecuta la calculadora, puesto que no la encuentra, ya que normalmente el directorio del sistema operativo no suele coincidir con el de WINDOWS (puede ser WINNT, WIN98, e incluso para los usuarios de windows95, el directorio puede ser WIN95).
He probado a poner el siguiente código en sustitución de la línea Shell:
Shell "C:\WINDOWS\CALC.EXE", 1
Shell "C:\WINDOWS\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN\CALC.EXE", 1
Shell "C:\WIN\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN95\CALC.EXE", 1
Shell "C:\WIN95\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS95\CALC.EXE", 1
Shell "C:\WINDOWS95\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN98\CALC.EXE", 1
Shell "C:\WIN98\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS98\CALC.EXE", 1
Shell "C:\WINDOWS98\SYSTEM32\CALC.EXE", 1
Shell "C:\WIN2000\CALC.EXE", 1
Shell "C:\WIN2000\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWS2000\CALC.EXE", 1
Shell "C:\WINDOWS2000\SYSTEM32\CALC.EXE", 1
Shell "C:\WINXP\CALC.EXE", 1
Shell "C:\WINXP\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSXP\CALC.EXE", 1
Shell "C:\WINDOWSXP\SYSTEM32\CALC.EXE", 1
Shell "C:\WINNT\CALC.EXE", 1
Shell "C:\WINNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSNT\CALC.EXE", 1
Shell "C:\WINDOWSNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINNT\SYSTEM32\CALC.EXE", 1
Shell "C:\WINDOWSNT\SYSTEM32\CALC.EXE", 1
El la oficina tengo WindowsNT (la calculadora está en la partición C:\WINNT\SYSTEM32), y la aplicación no la llama. Supongo que es porque solo ejecuta la primera línea de código, y ahí se para. Si borro todas las líneas Shell, excepto la antepenúltima, entonces sí que funciona, ya que es en esa partición donde se encuentra la Calculadora.
Bueno, mi pregunta es ¿cómo puedo llamar a la calculadora si no sé el directorio del sistema operativo, o incluso el subdirectorio donde se encuentra específicamente la calculadora?.
Se me hace complicadillo, porque me gustaría que la calculadora buscara entre varios directorios, pero aun usando cogido para que busque si existe un directorio, podría darse el caso de que un usuario tuviera el directorio WIN95 y WIN98, por ejemplo, porque ha actualizado la versión de windows. No se si me he explicado correctamente...
En definitiva, ¿es posible que la macro busque no solo el directorio, sino el programa "Calc.exe" (o "Calculadora.exe" si es que en verisones posteriores a Win95 o WinNT 4.0, la calculadora tiene ese nombre, cosa que desconozco), y si lo encuentra, que lance esa aplicación (la calculadora), y en caso contrario, que vaya reastreando el siguiente directorio, de los que te he puesto en el ejemplo del Shell?
Miles de gracias por tu colaboración y por el tiempo que te hago perder.
Mr.Dudas
1 respuesta
Respuesta de fejoal
1