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);
È stato utile?

Soluzione

È di solito 0

  

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top