2009-11-17 1 views
112

In un'applicazione WPF, quando un utente fa clic su un pulsante, desidero aprire Windows Explorer in una determinata directory, come faccio?Come posso aprire Windows Explorer in una determinata directory all'interno di un'app WPF?

mi si aspetterebbe qualcosa di simile:

Windows.OpenExplorer("c:\test"); 
+3

@DanM Questo non è chiaramente un duplicato del collegamento che hai elencato. In quello, l'utente conosce già process.start. In questo, l'utente non ha idea di cosa usare per aprire una cartella. Si prega di spiegare il processo di pensiero dietro a contrassegnarlo come duplicato. Aspetterò. –

risposta

235

Perché non Process.Start(@"c:\test");?

+8

Nota: è possibile utilizzarlo per eseguire anche altre applicazioni. 'Process.Start (" calc.exe ");' eseguirà Calculator. È possibile passare il percorso completo a un eseguibile e verrà eseguito. –

+1

LOL, sì, perché no. Divertente, aveva Application.Run nella mia testa, non riusciva ad arrivare al processo onnipresente.Avrei pensato che WPF stesse giocando con me. – Abel

+0

Questo mi ha aiutato mentre stavo cercando di caricare explorer e aggiungere la cartella come directory di lavoro usando process.start. Grazie per la risposta. –

6

È possibile utilizzare System.Diagnostics.Process.Start.

Oppure utilizzare direttamente WinApi con qualcosa di simile al seguente, che avvierà explorer.exe. È possibile utilizzare il quarto parametro su ShellExecute per assegnargli una directory iniziale.

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     ShellExecute(IntPtr.Zero, "open", "explorer.exe", "", "", ShowCommands.SW_NORMAL); 
     InitializeComponent(); 
    } 

    public enum ShowCommands : int 
    { 
     SW_HIDE = 0, 
     SW_SHOWNORMAL = 1, 
     SW_NORMAL = 1, 
     SW_SHOWMINIMIZED = 2, 
     SW_SHOWMAXIMIZED = 3, 
     SW_MAXIMIZE = 3, 
     SW_SHOWNOACTIVATE = 4, 
     SW_SHOW = 5, 
     SW_MINIMIZE = 6, 
     SW_SHOWMINNOACTIVE = 7, 
     SW_SHOWNA = 8, 
     SW_RESTORE = 9, 
     SW_SHOWDEFAULT = 10, 
     SW_FORCEMINIMIZE = 11, 
     SW_MAX = 11 
    } 

    [DllImport("shell32.dll")] 
    static extern IntPtr ShellExecute(
     IntPtr hwnd, 
     string lpOperation, 
     string lpFile, 
     string lpParameters, 
     string lpDirectory, 
     ShowCommands nShowCmd); 
} 

Le dichiarazioni provengono da pinvoke.net website.

+1

sì, stavo ricevendo errori inseguendo quello, non sapevo di strike btw cool –

+1

che, sfortunatamente, funziona solo in risposte/domande, ma non nei commenti ;-). Ho appena aggiornato. – Abel

+0

+1 Userò questo codice per avviare altre app, ma Process.Start() era esattamente ciò di cui avevo bisogno. –

10

Questo dovrebbe funzionare:

Process.Start(@"<directory goes here>") 

O se vuoi un metodo per eseguire programmi/file aperti e/o le cartelle:

 private void StartProcess(string path) 
    { 
     ProcessStartInfo StartInformation = new ProcessStartInfo(); 

     StartInformation.FileName = path; 

     Process process = Process.Start(StartInformation); 

     process.EnableRaisingEvents = true; 
    } 

E quindi chiamare il metodo e la parentesi inserisci la directory del file e/o della cartella o il nome dell'applicazione. Spero che questo ha aiutato!