Saltar al contenido

¿Cómo abrir Explorer con un archivo específico seleccionado?

Solución:

La forma más sencilla sin utilizar las funciones de shell de Win32 es simplemente iniciar explorer.exe con el /select parámetro. Por ejemplo, iniciar el proceso

explorer.exe /select,"C:Foldersubfolderfile.txt"

abrirá una nueva ventana del explorador en C: Carpeta subcarpeta con file.txt seleccionado.

Si desea hacerlo mediante programación sin iniciar un nuevo proceso, deberá usar la función de shell SHOpenFolderAndSelectItems, que es lo que /select comando para explorer.exe se utilizará internamente. Tenga en cuenta que esto requiere el uso de PIDL y puede ser un PITA real si no está familiarizado con el funcionamiento de las API de shell.

A continuación, se muestra una implementación programática completa del /select enfoque, con limpieza de ruta gracias a las sugerencias de @Bhushan y @tehDorf:

public bool ExploreFile(string filePath) {
    if (!System.IO.File.Exists(filePath)) {
        return false;
    }
    //Clean up file path so it can be navigated OK
    filePath = System.IO.Path.GetFullPath(filePath);
    System.Diagnostics.Process.Start("explorer.exe", string.Format("/select,"{0}"", filePath));
    return true;
}

Referencia: modificadores de la línea de comandos Explorer.exe

Al ejecutar el comando, si su ruta contiene varias barras, no abrirá la carpeta y no seleccionará el archivo correctamente.Asegúrese de que la ruta del archivo sea así.

C: a b x.txt

en lugar de

C: \ a \ b \ x.txt

los soportado ya que Windows XP (es decir, no es compatible con Windows 2000 o anterior) es SHOpenFolderAndSelectItems:

void OpenFolderAndSelectItem(String filename)
{
   // Parse the full filename into a pidl
   PIDLIST_ABSOLUTE pidl;
   SFGAO flags;
   SHParseDisplayName(filename, null, out pidl, 0, out flags);
   try 
   {
      // Open Explorer and select the thing
      SHOpenFolderAndSelectItems(pidl, 0, null, 0);
   }
   finally 
   {
      // Use the task allocator to free to returned pidl
      CoTaskMemFree(pidl);
   }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *