Ejemplo n.º 1
0
        private FVM GetCurrentViewMode()
        {
            IShellView shellView = null;

            try {
                if (0 == shellBrowser.QueryActiveShellView(out shellView))
                {
                    IFolderView folderView = shellView as IFolderView;

                    if (folderView != null)
                    {
                        FVM currentMode = 0;
                        folderView.GetCurrentViewMode(ref currentMode);

                        return(currentMode);
                    }
                }
            }
            catch {
            }
            finally {
                if (shellView != null)
                {
                    Marshal.ReleaseComObject(shellView);
                }
            }

            return(FVM.ICON);
        }
Ejemplo n.º 2
0
        private void fvmw_ViewModeChanged(object sender, EventArgs e)
        {
            IShellView shellView = null;

            try {
                if (0 == shellBrowser.QueryActiveShellView(out shellView))
                {
                    IFolderView folderView = shellView as IFolderView;

                    if (folderView != null)
                    {
                        FVM currentMode = 0;
                        folderView.GetCurrentViewMode(ref currentMode);

                        FVM mode = fvmw.ViewMode;

                        if (currentMode != mode)
                        {
                            folderView.SetCurrentViewMode(mode);
                            UpdateButtonImage(mode);
                        }
                    }
                }
            }
            catch {
            }
            finally {
                if (shellView != null)
                {
                    Marshal.ReleaseComObject(shellView);
                }
            }
        }
Ejemplo n.º 3
0
        private static IDLWrapper GetShellPath(IFolderView folderView)
        {
            if (folderView == null)
            {
                return(null);
            }
            IPersistFolder2 ppv = null;

            try {
                Guid riid = ExplorerGUIDs.IID_IPersistFolder2;
                if (folderView.GetFolder(ref riid, out ppv) == 0)
                {
                    IntPtr ptr;
                    ppv.GetCurFolder(out ptr);
                    return(new IDLWrapper(ptr));
                }
            }
            catch {
            }
            finally {
                if (ppv != null)
                {
                    Marshal.ReleaseComObject(ppv);
                }
            }
            return(new IDLWrapper(IntPtr.Zero));
        }
    static void Main(string[] args)
    {
        var shellWindows = new ShellWindows();

        foreach (IWebBrowser2 win in shellWindows)
        {
            IServiceProvider sp = win as IServiceProvider;
            object           sb;
            sp.QueryService(SID_STopLevelBrowser, typeof(IShellBrowser).GUID, out sb);
            IShellBrowser shellBrowser = (IShellBrowser)sb;
            object        sv;
            shellBrowser.QueryActiveShellView(out sv);
            Console.WriteLine(win.LocationURL + " " + win.LocationName);
            IFolderView fv = sv as IFolderView;
            if (fv != null)
            {
                // only folder implementation support this (IE windows do not for example)
                object pf;
                fv.GetFolder(typeof(IPersistFolder2).GUID, out pf);
                IPersistFolder2 persistFolder = (IPersistFolder2)pf;
                // get folder class, for example
                // CLSID_ShellFSFolder for standard explorer folders
                Guid clsid;
                persistFolder.GetClassID(out clsid);
                Console.WriteLine(" clsid:" + clsid);
                // get current folder pidl
                IntPtr pidl;
                persistFolder.GetCurFolder(out pidl);
                // TODO: do something with pidl

                Marshal.FreeCoTaskMem(pidl);     // free pidl's allocated memory
            }
        }
    }
Ejemplo n.º 5
0
        public static IntPtr ShellGetPath(IShellBrowser shellBrowser)
        {
            IShellView      ppshv = null;
            IPersistFolder2 ppv   = null;

            try {
                if (shellBrowser.QueryActiveShellView(out ppshv) == 0)
                {
                    Guid        riid  = ExplorerGUIDs.IID_IPersistFolder2;
                    IFolderView view2 = (IFolderView)ppshv;
                    if (view2.GetFolder(ref riid, out ppv) == 0)
                    {
                        IntPtr ptr;
                        ppv.GetCurFolder(out ptr);
                        return(ptr);
                    }
                }
            }
            catch {
            }
            finally {
                if (ppshv != null)
                {
                    Marshal.ReleaseComObject(ppshv);
                }
                if (ppv != null)
                {
                    Marshal.ReleaseComObject(ppv);
                }
            }
            return(IntPtr.Zero);
        }
Ejemplo n.º 6
0
 public void Dispose()
 {
     if (FolderView != null)
     {
         Marshal.ReleaseComObject(FolderView);
         FolderView = null;
     }
 }
Ejemplo n.º 7
0
 public FolderScanner(FolderQueue fq, IFolderView fv)
 {
     this.fq = fq;
     this.fv = fv;
     Thread t = new Thread(Runner);
     t.Priority = ThreadPriority.Lowest;
     t.Start();
 }
Ejemplo n.º 8
0
        public FolderScanner(FolderQueue fq, IFolderView fv)
        {
            this.fq = fq;
            this.fv = fv;
            Thread t = new Thread(Runner);

            t.Priority = ThreadPriority.Lowest;
            t.Start();
        }
Ejemplo n.º 9
0
 public void Dispose() {
     if(shellBrowser != null) {
         Marshal.FinalReleaseComObject(shellBrowser);
         shellBrowser = null;
     }
     if(folderView != null) {
         Marshal.ReleaseComObject(folderView);
         folderView = null;
     }
 }
Ejemplo n.º 10
0
 private static void AddCommandLineToTab(ITab tab)
 {
   IFolderView FolderView = tab as IFolderView;
   if (FolderView != null)
   {
     CommandLinePanel CmdLinePanel = new CommandLinePanel();
     CmdLinePanel.MaxCommandLength = _MaxCommandLength;
     CmdLinePanel.HistoryDepth = _HistoryDepth;
     tab.DockControl(DockStyle.Bottom, CmdLinePanel);
     FolderView.CurrentFolderChanged += (sender2, e2) => CmdLinePanel.CurrentFolder = FolderView.CurrentFolder;
   }
 }
Ejemplo n.º 11
0
        void Test()
        {
            ShellWindows shellWindows = new ShellWindows();

            try
            {
                foreach (IWebBrowser2 win in shellWindows)
                {
                    WinAPI.IServiceProvider sp = win as WinAPI.IServiceProvider;
                    object sb;
                    sp.QueryService(SID_STopLevelBrowser, typeof(IShellBrowser).GUID, out sb);


                    IShellBrowser shellBrowser = (IShellBrowser)sb;
                    IShellView    sv;
                    shellBrowser.QueryActiveShellView(out sv);
                    Console.WriteLine(win.LocationURL + " " + win.LocationName);
                    IFolderView fv = sv as IFolderView;

                    if (fv != null)
                    {
                        Timer t = new Timer();
                        t.Interval = 200;
                        t.Tick    += (o, se) => {
                            int fitem;
                            if (0 == fv.GetFocusedItem(out fitem))
                            {
                                IntPtr pid;
                                if (0 == fv.Item(fitem, out pid))
                                {
                                    //invokea(pid);
                                }

                                Marshal.FreeHGlobal(pid);
                            }
                        };
                        t.Start();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                if (shellWindows != null)
                {
                    Marshal.ReleaseComObject(shellWindows);
                }
            }
        }
Ejemplo n.º 12
0
 public void Dispose()
 {
     if (shellBrowser != null)
     {
         Marshal.FinalReleaseComObject(shellBrowser);
         shellBrowser = null;
     }
     if (folderView != null)
     {
         Marshal.ReleaseComObject(folderView);
         folderView = null;
     }
 }
Ejemplo n.º 13
0
        private FVWrapper GetFolderView()
        {
            IShellView ppshv;

            if (shellBrowser.QueryActiveShellView(out ppshv) == 0)
            {
                IFolderView view = ppshv as IFolderView;
                if (view != null)
                {
                    return(new FVWrapper(view));
                }
            }
            return(null);
        }
Ejemplo n.º 14
0
        public void ShellTest()
        {
            var shellWindows = new ShellWindows();

            foreach (IWebBrowser2 win in shellWindows)
            {
                IServiceProvider sp = win as IServiceProvider;
                object           sb;
                sp.QueryService(SID_STopLevelBrowser, typeof(IShellBrowser).GUID, out sb);
                IShellBrowser shellBrowser = (IShellBrowser)sb;
                object        sv;
                shellBrowser.QueryActiveShellView(out sv);
                Console.WriteLine(win.LocationURL + " " + win.LocationName);
                IFolderView fv = sv as IFolderView;
                if (fv != null)
                {
                    // only folder implementation support this (IE windows do not for example)
                    object pf;
                    fv.GetFolder(typeof(IPersistFolder2).GUID, out pf);
                    IPersistFolder2 persistFolder = (IPersistFolder2)pf;
                    // get folder class, for example
                    // CLSID_ShellFSFolder for standard explorer folders
                    Guid clsid;
                    persistFolder.GetClassID(out clsid);
                    Console.WriteLine(" clsid:" + clsid);
                    int   pitem;
                    Timer timer = new Timer(new TimerCallback(stat =>
                    {
                        //if (0 == fv.GetFocusedItem(out pitem))
                        //{
                        //    Console.WriteLine(pitem);
                        //}
                        if (0 == fv.ItemCount(0x00000001, out pitem))
                        {
                            Console.WriteLine(pitem);
                        }
                    }));
                    timer.Change(200, 0);

                    // get current folder pidl
                    IntPtr pidl;
                    persistFolder.GetCurFolder(out pidl);

                    // TODO: do something with pidl

                    Marshal.FreeCoTaskMem(pidl); // free pidl's allocated memory
                }
            }
        }
Ejemplo n.º 15
0
        // Call this on navigate to refresh the FolderView
        public void OnNavigateComplete()
        {
            if (shellBrowser == null)
            {
                return;
            }
            if (folderView != null)
            {
                Marshal.ReleaseComObject(folderView);
                folderView = null;
            }
            IShellView ppshv;

            if (shellBrowser.QueryActiveShellView(out ppshv) == 0)
            {
                folderView = ppshv as IFolderView;
            }
        }
Ejemplo n.º 16
0
        public static TInterface GetFolder <TInterface>(this IFolderView folderView)
        {
            folderView.GetFolder(typeof(TInterface).GUID, out var ppv);

            return((TInterface)ppv);
        }
Ejemplo n.º 17
0
 public FVWrapper(IFolderView folderView)
 {
     FolderView = folderView;
 }
Ejemplo n.º 18
0
        public static int GetFocusedItem(this IFolderView folderView)
        {
            folderView.GetFocusedItem(out var piItem);

            return(piItem);
        }
Ejemplo n.º 19
0
        public static IntPtr Item(this IFolderView folderView, int index)
        {
            folderView.Item(index, out var pidl);

            return(pidl);
        }
Ejemplo n.º 20
0
 private static IDLWrapper GetShellPath(IFolderView folderView) {
     if(folderView == null) return null;
     IPersistFolder2 ppv = null;
     try {
         Guid riid = ExplorerGUIDs.IID_IPersistFolder2;
         if(folderView.GetFolder(ref riid, out ppv) == 0) {
             IntPtr ptr;
             ppv.GetCurFolder(out ptr);
             return new IDLWrapper(ptr);
         }
     }
     catch {
     }
     finally {
         if(ppv != null) {
             Marshal.ReleaseComObject(ppv);
         }
     }
     return new IDLWrapper(IntPtr.Zero);
 }
Ejemplo n.º 21
0
 private bool GetFolderView() {
     IntPtr pUnk = PInvoke.SendMessage(GetProgmanHWnd(), 0x407, IntPtr.Zero, IntPtr.Zero);
     if(pUnk != IntPtr.Zero) {
         try {
             IShellView view;
             this.shellBrowser = (IShellBrowser)Marshal.GetObjectForIUnknown(pUnk);
             if(this.shellBrowser.QueryActiveShellView(out view) == 0) {
                 this.folderView = view as IFolderView;
                 if(this.folderView != null) {
                     return true;
                 }
             }
         }
         catch {
         }
         finally {
             Marshal.Release(pUnk);
         }
     }
     return false;
 }
Ejemplo n.º 22
0
 public override void CloseDW(uint dwReserved) {
     if(iContextMenu2 != null) {
         Marshal.ReleaseComObject(iContextMenu2);
         iContextMenu2 = null;
     }
     if(this.folderView != null) {
         Marshal.ReleaseComObject(this.folderView);
         this.folderView = null;
     }
     if(this.shellBrowser != null) {
         Marshal.ReleaseComObject(this.shellBrowser);
         this.shellBrowser = null;
     }
     DisposeInvoker method = new DisposeInvoker(this.InvokeDispose);
     if(this.thumbnailTooltip != null) {
         this.thumbnailTooltip.Invoke(method, new object[] { this.thumbnailTooltip });
         this.thumbnailTooltip = null;
     }
     if(this.subDirTip != null) {
         this.subDirTip.Invoke(method, new object[] { this.subDirTip });
         this.subDirTip = null;
     }
     if(this.hashForm != null) {
         this.hashForm.Invoke(method, new object[] { this.hashForm });
         this.hashForm = null;
     }
     if(this.hHook_MsgDesktop != IntPtr.Zero) {
         PInvoke.UnhookWindowsHookEx(this.hHook_MsgDesktop);
         this.hHook_MsgDesktop = IntPtr.Zero;
     }
     if(this.hHook_MsgShell_TrayWnd != IntPtr.Zero) {
         PInvoke.UnhookWindowsHookEx(this.hHook_MsgShell_TrayWnd);
         this.hHook_MsgShell_TrayWnd = IntPtr.Zero;
     }
     if(this.hHook_KeyDesktop != IntPtr.Zero) {
         PInvoke.UnhookWindowsHookEx(this.hHook_KeyDesktop);
         this.hHook_KeyDesktop = IntPtr.Zero;
     }
     if(this.shellViewController != null) {
         this.shellViewController.ReleaseHandle();
         this.shellViewController = null;
     }
     base.CloseDW(dwReserved);
 }
Ejemplo n.º 23
0
 // Call this on navigate to refresh the FolderView
 public void OnNavigateComplete()
 {
     if(shellBrowser == null) return;
     if(folderView != null) {
         Marshal.ReleaseComObject(folderView);
         folderView = null;
     }
     IShellView ppshv;
     if(shellBrowser.QueryActiveShellView(out ppshv) == 0) {
         folderView = ppshv as IFolderView;
     }
 }
Ejemplo n.º 24
0
        /// <summary>
        /// Open folder and select an item.
        /// </summary>
        /// <remarks>
        /// SHParseDisplayName will not always find the correct folder. If the user has a folder open that is rooted in their user folder (e.g. the desktop, Dropbox/Mega/Nextcloud folder),
        /// this won't match the folder reference returned by SHParseDisplayName if given the actual path of the same folder. This will result in opening a duplicate folder.
        /// So instead, we iterate through open folder windows for a path match first, then use the old method if one is not found.
        /// </remarks>
        /// <param name="filePath">Full path to a file to highlight in Windows Explorer</param>
        public static void OpenFolderAndSelectItem(string filePath)
        {
            var  folderPath = Path.GetDirectoryName(filePath);
            bool opened     = false;

            var shellWindowsType = Type.GetTypeFromCLSID(SID_ShellWindows);
            var shellWindows     = (dynamic)Activator.CreateInstance(shellWindowsType);

            try {
                foreach (IServiceProvider sp in shellWindows)
                {
                    var pidl       = IntPtr.Zero;
                    var nativeFile = IntPtr.Zero;

                    try {
                        sp.QueryService(SID_STopLevelBrowser, typeof(IShellBrowser).GUID, out object sb);
                        IShellBrowser shellBrowser = (IShellBrowser)sb;

                        shellBrowser.QueryActiveShellView(out object sv);
                        IFolderView fv = sv as IFolderView;

                        if (fv != null)
                        {
                            // only folder implementation support this (IE windows do not for example)
                            fv.GetFolder(typeof(IPersistFolder2).GUID, out object pf);
                            IPersistFolder2 persistFolder = (IPersistFolder2)pf;

                            // get current folder pidl
                            persistFolder.GetCurFolder(out pidl);

                            var path = new StringBuilder(1024);
                            if (SHGetPathFromIDList(pidl, path))
                            {
                                if (string.Equals(path.ToString(), folderPath, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    SHParseDisplayName(Path.Combine(folderPath, filePath), IntPtr.Zero, out nativeFile, 0, out _);

                                    IntPtr[] fileArray;
                                    if (nativeFile == IntPtr.Zero)
                                    {
                                        // Open the folder without the file selected if we can't find the file
                                        fileArray = new IntPtr[0];
                                    }
                                    else
                                    {
                                        fileArray = new IntPtr[] { nativeFile };
                                    }

                                    SHOpenFolderAndSelectItems(pidl, (uint)fileArray.Length, fileArray, 0);
                                    opened = true;

                                    break;
                                }
                            }
                        }
                    }
                    finally {
                        if (nativeFile != IntPtr.Zero)
                        {
                            Marshal.FreeCoTaskMem(nativeFile);
                        }

                        if (pidl != IntPtr.Zero)
                        {
                            Marshal.FreeCoTaskMem(pidl);
                        }

                        Marshal.ReleaseComObject(sp);
                    }
                }
            }
            finally {
                Marshal.FinalReleaseComObject(shellWindows);
            }

            if (!opened)
            {
                IntPtr nativeFolder;
                uint   psfgaoOut;
                SHParseDisplayName(folderPath, IntPtr.Zero, out nativeFolder, 0, out psfgaoOut);

                if (nativeFolder == IntPtr.Zero)
                {
                    // Log error, can't find folder
                    return;
                }

                IntPtr nativeFile;
                SHParseDisplayName(Path.Combine(folderPath, filePath), IntPtr.Zero, out nativeFile, 0, out psfgaoOut);

                IntPtr[] fileArray;
                if (nativeFile == IntPtr.Zero)
                {
                    // Open the folder without the file selected if we can't find the file
                    fileArray = new IntPtr[0];
                }
                else
                {
                    fileArray = new IntPtr[] { nativeFile };
                }

                SHOpenFolderAndSelectItems(nativeFolder, (uint)fileArray.Length, fileArray, 0);

                Marshal.FreeCoTaskMem(nativeFolder);
                if (nativeFile != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(nativeFile);
                }
            }
        }
Ejemplo n.º 25
0
 public void Dispose() {
     if(FolderView != null) {
         Marshal.ReleaseComObject(FolderView);
         FolderView = null;
     }
 }
Ejemplo n.º 26
0
 public FVWrapper(IFolderView folderView) {
     FolderView = folderView;
 }