zoukankan      html  css  js  c++  java
  • [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

    原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/

     

     

    C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

    折腾:

    C#中如何在右下角添加提示窗口,用于显示打开文件和文件夹

    的过程中,需要实现,点击对应LinkLabel后,调用资源管理器,打开对应的文件夹。

    【解决过程】

    1.找了下,参考:

    C#打开文件夹

    C#用资源管理器打开指定文件夹

    去添加代码:

    1
    2
    3
    4
    5
    6
    private void lklOpenFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        //open folder
        System.Diagnostics.Process.Start("Explorer.exe","C:\");
        //System.Diagnostics.Process.Start("Explorer.exe", txbSaveTo.Text);
    }

    运行一下,试试效果,发现是可以调用资源管理器打开文件夹的:

    can open window_thumb

    【总结】

    C#中,调用资源管理器打开特定文件夹,其实和之前使用IE打开对应的网站链接,效果是类似的,都是使用的是System.Diagnostics.Process.Start

    去打开一个东西的。

    对应的,就想起来了,再去试试,不指定使用Explorer的话,是不是也还是和之前一样,可以自动检测,使用默认程序打开的:

    1
    2
    3
    4
    5
    6
    7
    private void lklOpenFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        //open folder
        //System.Diagnostics.Process.Start("Explorer.exe","C:\");
        System.Diagnostics.Process.Start("C:\");
        //System.Diagnostics.Process.Start("Explorer.exe", txbSaveTo.Text);
    }

    果然,运行结果是一样的,会去找到默认的程序,即Explorer.exe,去打开路径的。

     

    【再总结】

    C#中,使用System.Diagnostics.Process.Start可以打开一个东西,

    此东西,会根据你传入的参数和指定的程序,实不同的效果:

    • 如果指定了所调用的程序,则会使用该程序,打开该内容
    • 如果没有指定程序,则会寻找系统默认的程序,打开该内容

    而对于该内容,目前已经见到过:

    • 如果是路径,比如C:,则会调用(默认的)资源管理器打开对应的文件夹
    • 如果是网址,比如http://www.crifan.com,那么会调用(默认的)IE浏览器去打开

    所以,以后再想要去打开其他东西,则也是按照同样的逻辑去使用System.Diagnostics.Process.Start,即可。


    【后记 2012-09-24】

    后来又遇到需求是,通过Explorer打开对应文件夹,并选中该文件。

    后来找了下,参考:

    C#如何打开选中的文件夹并指向选中的文件

    然后写代码之前,就去查了下资料:

    先去看

    System.Diagnostics.Process.Start

    的语法:

    Process.Start 方法

    名称说明
    Process.Start () 启动(或重用)此 Process 组件的 StartInfo 属性指定的进程资源,并将其与该组件关联。

     

    由 .NET Compact Framework 支持。

    Process.Start (ProcessStartInfo) 启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 Process 组件关联。

     

    由 .NET Compact Framework 支持。

    Process.Start (String) 通过指定文档或应用程序文件的名称来启动进程资源,并将资源与新的 Process 组件关联。
    Process.Start (String, String) 通过指定应用程序的名称和一组命令行参数来启动一个进程资源,并将该资源与新的Process 组件相关联。

     

    由 .NET Compact Framework 支持。

    Process.Start (String, String, SecureString, String) 通过指定应用程序的名称、用户名、密码和域来启动一个进程资源,并将该资源与新的Process 组件关联起来。
    Process.Start (String, String, String, SecureString, String) 通过指定应用程序的名称、一组命令行参数、用户名、密码和域来启动一个进程资源,并将该资源与新的 Process 组件关联起来。

    注意到,此处没有三个参数的,要么是2个参数,要么是4个或5个参数。

    所以,也很明显,此函数所要执行的动作,取决于所调用的程序,此处即为Explorer。

    所以再去查:

    explorer 命令参数及其应用

    所以,很清楚,就是通过Explorer的/select加上逗号,加上文件的绝对路径,来实现打开并选中文件的。

    所以就去写出代码:

    1
    System.Diagnostics.Process.Start("Explorer.exe", "/select," + curFullFilename); // Note: only 2 para !!!

    然后就可以实现对应的效果了:

    这个是要选择的文件:

    file to select

    可以实现通过资源管理器打开并选中该文件:

    open explorer and select file

     

    同理,对于想要调用,操作系统的当前的,默认为WMP,播放歌曲类软件,去打开播放歌曲等文件的话,也直接可以通过System.Diagnostics.Process.Start去实现了:

    1
    2
    //open file
    System.Diagnostics.Process.Start(curFullFilename);

    当打开的是一个mp3文件时,会自动调用当前的,系统中已和mp3文件关联的播放软件,此处是WMP,去播放歌曲了:

    can paly music file

     

    【总结】

    至此,越加清楚了System.Diagnostics.Process.Start的含义和用法了。

    C#中:

      • 打开单个文件(当文件是歌曲时,则会自动调用mp3播放软件去打开):
    1
    System.Diagnostics.Process.Start(curFullFilename);
    • 调用资源管理(Explorer.exe)打开文件夹:
      • 使用默认程序(一般来说,也都是资源管理器)打开文件夹:
        1
        System.Diagnostics.Process.Start("C:\");
      • 指定使用资源管理器打开文件夹:
        1
        System.Diagnostics.Process.Start("Explorer.exe","C:\");
    • 调用资源管理器打开文件夹并选中文件:
      1
      System.Diagnostics.Process.Start("Explorer.exe", "/select,"+ curFullFilename);

     

    注意:

    打开文件夹并选中文件的实际过程,并非先通过传递文件夹参数去打开文件夹,然后再选择文件,

    而是,直接通过传入文件的绝对路径,打开文件同时并选中文件的。

    所以参数只需要

    /select,fullFilePath

    即可,而不需要两个参数。

  • 相关阅读:
    python生成6位纯数字
    win10下配置nginx
    Unexpected end of JSON input while parsing near '…"
    el-select中显示图标/图片设置
    github上拉去代码执行 npm install报错code:128
    win10下配置多个mysql数据库
    centos7标准版命令界面和图形界面相互切换
    华为RH2288V3服务器部署指南
    datatables屏蔽警告弹窗
    迁移数据时 timestamp类型字段报错: 1067
  • 原文地址:https://www.cnblogs.com/anduinlothar/p/3736003.html
Copyright © 2011-2022 走看看