Gestire per ShellExecute () - Finestra padre?
-
10-07-2019 - |
Domanda
Sto cercando di utilizzare ShellExecute per aprire un file in Excel. Stavo leggendo la funzione sui forum MSDN e ho trovato le seguenti informazioni sull'handle, che è il primo parametro:
" hwnd [in] Un handle per la finestra del proprietario utilizzata per visualizzare un'interfaccia utente (UI) o messaggi di errore. Questo valore può essere NULL se l'operazione non è associata a una finestra. & Quot;
Ho anche sentito questo indicato come handle per la finestra principale. Qual è la finestra del genitore / proprietario? Come vedi sotto sto usando NULL per l'handle, ma poiché l'operazione è effettivamente associata a una finestra, probabilmente ho bisogno di un handle, ma non so cosa usare per l'handle.
ShellExecute(NULL, "open" ,"Excel.exe",
"C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls",
NULL, SW_SHOWNORMAL);
Soluzione
hwnd: finestra principale che riceverà una possibile finestra di messaggio. Questo parametro è in genere 0.
Si riferisce alla finestra di livello superiore: la finestra che si sta aprendo non ha alcun genitore ed è la finestra principale dell'applicazione in esecuzione.
Quando si passa da un'applicazione all'altra (ALT-TAB), viene visualizzata la finestra di livello superiore successiva (l'app successiva con un handle principale è uguale a 0) nell'ordine z (ad esempio).
Naturalmente, il genitore della tua app non può essere la stessa finestra del desktop :
Se crei una finestra figlio il cui genitore è GetDesktopWindow (), la tua finestra è ora incollata alla finestra del desktop. Se la tua finestra chiama quindi qualcosa come MessageBox (), beh quella è una finestra di dialogo modale, quindi le regole sopra si attivano e il desktop viene disabilitato e la macchina è brindisi.
Per il percorso, consiglierei le doppie virgolette che circondano le virgolette semplici: " "..." "
"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"
Potrebbe funzionare anche (non testato) con doppie doppie virgolette: " & Quot; " ... " " & Quot;
"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""
, come illustrato da questa discussione .
In realtà, come menzionato in l'altra tua domanda di Andy e di Mesidin e in Manuale della funzione ShellExecute , puoi aprire il file e passarne il percorso nel parametro.
ShellExecute( NULL, "open",
"Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\",
NULL, SW_SHOWNORMAL);
Ciò significa che Excel è l'applicazione predefinita per l'apertura dei file di estensione .xls.
Altri suggerimenti
Quando lo vedi descritto come " handle per la finestra principale, " significa che è la finestra che sarà la finestra principale di qualsiasi interfaccia utente che la funzione sceglie di visualizzare. L'handle che passi potrebbe essere o meno il genitore di un'altra finestra nel momento in cui chiami ShellExecute
, ma non importa.
Perché stai specificatamente ShellExecuting Excel? Se hanno OpenOffice.org, sono rotti - dovresti davvero invocare il " Open " verbo sul file del foglio di calcolo, non è necessario codificare nel file " Excel " nome, ecco a cosa serve ShellExecute.
C'è qualche motivo specifico, stai usando ShellExecute?
Puoi aprire un file xls usando [System.Diagnostics.] Process.Start [nome del file]
Mi scuso, non ho guardato tag & amp; supponi di utilizzare .net