• C# 打开目录,且同一目录不重复打开新窗口


    针对同一目录不重复打开新窗口

    两种方法:

    第一种,仅打开目录

     1 static public class Win32Help
     2 {
     3         public enum ShowCommands : int
     4         {
     5             SW_HIDE = 0,
     6             SW_SHOWNORMAL = 1,
     7             SW_NORMAL = 1,
     8             SW_SHOWMINIMIZED = 2,
     9             SW_SHOWMAXIMIZED = 3,
    10             SW_MAXIMIZE = 3,
    11             SW_SHOWNOACTIVATE = 4,
    12             SW_SHOW = 5,
    13             SW_MINIMIZE = 6,
    14             SW_SHOWMINNOACTIVE = 7,
    15             SW_SHOWNA = 8,
    16             SW_RESTORE = 9,
    17             SW_SHOWDEFAULT = 10,
    18             SW_FORCEMINIMIZE = 11,
    19             SW_MAX = 11
    20         }
    21 
    22         [DllImport("shell32.dll")]
    23         public static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);
    24 }
    25 
    26 //调用
    27 
    28         static public void OpenFolder(string fileFullName) => Win32Help.ShellExecute(IntPtr.Zero, "open", fileFullName, "", "", Win32Help.ShowCommands.SW_SHOWNORMAL);

    第二种,打开目录并选中指定文件

    [DllImport("shell32.dll", ExactSpelling = true)]
    public static extern void ILFree(IntPtr pidlList);
    
    [DllImport("shell32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    public static extern IntPtr ILCreateFromPathW(string pszPath);
    
    [DllImport("shell32.dll", ExactSpelling = true)]
    public static extern int SHOpenFolderAndSelectItems(IntPtr pidlList, uint cild, IntPtr children, uint dwFlags);
    
    
    
            /// <summary>
            /// 打开指定文件夹并选中相应文件
            /// </summary>
            /// <param name="fileFullName">目录或文件路径</param>
            /// <returns></returns>
            internal static bool SelectInFileExplorer(this string fileFullName)
            {
                if (fileFullName.IsNullOrEmpty())
                    throw new ArgumentNullException(nameof(fileFullName));
                fileFullName = System.IO.Path.GetFullPath(fileFullName);
                var pidlList = Win32Help.ILCreateFromPathW(fileFullName);
                if (pidlList == IntPtr.Zero) return false;
                try
                {
                    Marshal.ThrowExceptionForHR(Win32Help.SHOpenFolderAndSelectItems(pidlList, 0, IntPtr.Zero, 0));
                    return true;
                }
                catch (Exception e)
                {
                    return false;
                }
                finally
                {
                    Win32Help.ILFree(pidlList);
                }
            }
    
    //调用
    
            /// <summary>
            /// 打开目录并选中相应文件
            /// </summary>
            /// <param name="fileFullName"></param>
            static public void OpenFolderAndSelectFile(string fileFullName) => Win32Help.SelectInFileExplorer(fileFullName);
  • 相关阅读:
    Linux中增加组和用户
    Storm重启topology,失败
    ES读写数据的工作原理
    Hive优化
    Flink提交流程和架构
    Flink中的Time与Window
    linux 中文件夹的文件按照时间倒序或者升序排列
    ElasticSearch之配置文件详解
    redis中的设置bind绑定ip不是设置白名单
    YARN调度架构中的AppMaster
  • 原文地址:https://www.cnblogs.com/dyfisgod/p/14184334.html
Copyright © 2020-2023  润新知