zoukankan      html  css  js  c++  java
  • C# 打开文件夹(如果已打开则置前,而不是再打开一个新的) 并选中指定文件 shell32.dll SHOpenFolderAndSelectItems

    static public class Win32Helper
    {
    /// <summary>
            /// 释放命令行管理程序分配的ITEMIDLIST结构
            /// Frees an ITEMIDLIST structure allocated by the Shell.
            /// </summary>
            /// <param name="pidlList"></param>
            [DllImport("shell32.dll", ExactSpelling = true)]
            public static extern void ILFree(IntPtr pidlList);
            /// <summary>
            /// 返回与指定文件路径关联的ITEMIDLIST结构。
            /// Returns the ITEMIDLIST structure associated with a specified file path.
            /// </summary>
            /// <param name="pszPath"></param>
            /// <returns></returns>
            [DllImport("shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
            public static extern IntPtr ILCreateFromPathW(string pszPath);
            /// <summary>
            /// 打开一个Windows资源管理器窗口,其中选择了特定文件夹中的指定项目。
            /// Opens a Windows Explorer window with specified items in a particular folder selected.
            /// </summary>
            /// <param name="pidlList"></param>
            /// <param name="cild"></param>
            /// <param name="children"></param>
            /// <param name="dwFlags"></param>
            /// <returns></returns>
            [DllImport("shell32.dll", ExactSpelling = true)]
            public static extern int SHOpenFolderAndSelectItems(IntPtr pidlList, uint cild, IntPtr children, uint dwFlags);

    }
    调用示例
    完整文件路径:E:svnABCDE2020-06-29
    需求:资源管理器定位至 E:svnABCDE 同时选中 2020-06-29

    /// <summary> /// 打开目录并选中相应文件 /// </summary> /// <param name="fileFullName"></param> static public void OpenFolderAndSelectFile(string fileFullName) { if (fileFullName.IsNullOrEmpty()) throw new ArgumentNullException(nameof(fileFullName)); fileFullName = Path.GetFullPath(fileFullName); var pidlList = Win32Helper.ILCreateFromPathW(fileFullName); if (pidlList == IntPtr.Zero) return; try { Marshal.ThrowExceptionForHR(Win32Helper.SHOpenFolderAndSelectItems(pidlList, 0, IntPtr.Zero, 0)); } finally { Win32Helper.ILFree(pidlList); } }

      

      

  • 相关阅读:
    [ASPNET2.0]Membership类+SQLServer2005,AspNet_regsql.exe的使用
    Tooltip的几个技巧(转自网络)
    使用aspnet_regsql.ext命令行工具后,就不能用sql语句创建新的表了,总是显示已存在XXX对象。
    我已经无可救药
    陈彩君(帮别人名字作诗)
    震后首游都江堰感怀(二)
    克服创业前的恐惧:31条建议帮你有勇气做自己的老板
    想你已经成为了一种习惯
    诸葛亮给儿子上的十堂课
    一生中,这8种朋友是你的无价之宝
  • 原文地址:https://www.cnblogs.com/dyfisgod/p/13207980.html
Copyright © 2011-2022 走看看