Pregunta

Estoy tratando de usar ShellExecute para abrir un archivo en Excel. Estaba leyendo sobre la función en los foros de MSDN, y encontré la siguiente información sobre el identificador, que es el primer parámetro:

" hwnd [in] Un identificador de la ventana del propietario utilizado para mostrar una interfaz de usuario (UI) o mensajes de error. Este valor puede ser NULL si la operación no está asociada a una ventana. & Quot;

También he escuchado que esto se conoce como el identificador de la ventana principal. ¿Qué es la ventana padre / propietario? Como puede ver a continuación, estoy usando NULL para el identificador, pero como la operación está asociada con una ventana, probablemente necesito un identificador, pero no sé qué usar para el identificador.

ShellExecute(NULL, "open" ,"Excel.exe", 
    "C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls", 
    NULL, SW_SHOWNORMAL);
¿Fue útil?

Solución

Es generalmente 0

  

hwnd: ventana principal que recibirá un posible cuadro de mensaje. Este parámetro suele ser 0.

Se refiere a la ventana de nivel superior: la ventana que está abriendo no tiene ningún padre, y es la ventana principal para la aplicación que se está ejecutando.

Cuando cambia entre aplicaciones (ALT-TAB), muestra la siguiente ventana de nivel superior (la siguiente aplicación con un identificador principal es igual a 0) en el orden z (por ejemplo).

Por supuesto, el padre de su aplicación no puede ser la propia ventana del escritorio :

  

Si crea una ventana secundaria cuyo padre es GetDesktopWindow (), su ventana ahora está pegada a la ventana del escritorio. Si su ventana luego llama algo como MessageBox (), bueno, eso es un diálogo modal, y luego las reglas anteriores entran en acción y el escritorio se desactiva y la máquina está tostada.

Para la ruta, recomendaría comillas dobles alrededor de comillas simples: " '...' "

"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"

Podría funcionar también (no probado) con comillas dobles dobles: " " " ... " " "

"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""

, como lo ilustra este hilo .


En realidad, como se menciona en su otra pregunta por Andy y Mesidin , y en Manual de funciones ShellExecute , puede abrir el archivo y pasar su ruta en el parámetro.

ShellExecute( NULL, "open", 
              "Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\", 
              NULL, SW_SHOWNORMAL);

Eso significa que Excel es la aplicación predeterminada para abrir archivos de extensión .xls.

Otros consejos

Cuando vea que se describe como el manejador de la ventana principal, " significa que es la ventana que será la ventana principal de cualquier interfaz de usuario que la función elija mostrar. El identificador que pasa puede o no ser el padre de otra ventana al momento de llamar a ShellExecute , pero eso no importa.

¿Por qué específicamente estás ejecutando Excel? Si tienen OpenOffice.org, están rotos; realmente debería invocar el " Abrir " verbo en el archivo de hoja de cálculo, no necesita codificar en el " Excel " nombre, para eso está ShellExecute.

¿Hay alguna razón específica por la que está utilizando ShellExecute?

Puede abrir un archivo xls usando [System.Diagnostics.] Process.Start [nombre del archivo]
Pido disculpas, no miré las etiquetas & amp; suponga que está usando .net

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top