bool IMessageFilter.PreFilterMessage(ref Message m) { HResult hr = HResult.False; Message M = m; if (explorerBrowserControl != null) { // translate keyboard input if (m.Msg == (int)WindowsAPI.WndMsg.WM_ACTIVATEAPP) { MessageBox.Show("Active"); } if (m.Msg == (int)WindowsAPI.WndMsg.WM_SETFOCUS) { MessageBox.Show("Active"); } // Catch Left Mouse Click key if ((m.Msg == (int)WindowsAPI.WndMsg.WM_LBUTTONDOWN)) { if (KeyUP != null) { ExplorerKeyUPEventArgs args = new ExplorerKeyUPEventArgs(); args.Key = 778; KeyUP(this, args); } //WindowsAPI.SetFocus(SysListViewHandle); WindowsAPI.RECTW r = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(SysListViewHandle, ref r); Rectangle reclv = r.ToRectangle(); if (Cursor.Position.Y >= reclv.Top && Cursor.Position.Y <= reclv.Top + 29) { IsMouseClickOnHeader = true; } else { IsMouseClickOnHeader = false; } if (reclv.Contains(Cursor.Position)) { IsPressedLKButton = true; } else { IsPressedLKButton = false; } //MessageBox.Show(Cursor.Position.Y.ToString() + @"\" + reclv.Top.ToString()); if (Cursor.Position.Y <= reclv.Top || Cursor.Position.Y >= reclv.Bottom) { IsMouseClickOutsideLV = true; } else { IsMouseClickOutsideLV = false; } } if ((m.Msg == (int)WindowsAPI.WndMsg.WM_LBUTTONUP)) { IsPressedLKButton = false; IsMouseClickOnHeader = false; //WindowsAPI.ReleaseCapture(); //WindowsAPI.SetFocus(SysListViewHandle); if (KeyUP != null) { ExplorerKeyUPEventArgs args = new ExplorerKeyUPEventArgs(); args.Key = 777; KeyUP(this, args); } } if (m.Msg == (int)WindowsAPI.WndMsg.WM_XBUTTONUP) { switch (HiWord((int)m.WParam)) { case 1: NavigateLogLocation(NavigationLogDirection.Backward); break; case 2: NavigateLogLocation(NavigationLogDirection.Forward); break; } } bool h = false; if ((m.Msg == (int)WindowsAPI.WndMsg.WM_SYSCOMMAND)) { } if (m.Msg == (int)WindowsAPI.WndMsg.WM_MOUSEWHEEL) { int Wheel_delta = HiWord((int)m.WParam); if (LoWord((int)m.WParam) == 0x0008) //Ctrl is down { if (Wheel_delta < 0) { if (ContentOptions.ThumbnailSize > 34) { if (ContentOptions.ViewMode != ExplorerBrowserViewMode.Thumbnail) { ContentOptions.ViewMode = ExplorerBrowserViewMode.Thumbnail; } ContentOptions.ThumbnailSize = ContentOptions.ThumbnailSize - 10; } } else { if (ContentOptions.ThumbnailSize < 255) { if (ContentOptions.ViewMode != ExplorerBrowserViewMode.Thumbnail) { ContentOptions.ViewMode = ExplorerBrowserViewMode.Thumbnail; } ContentOptions.ThumbnailSize = ContentOptions.ThumbnailSize + 10; } } } } if ((m.Msg == (int)WindowsAPI.WndMsg.WM_MOUSE_ENTER)) { //WindowsAPI.SetFocus(SysListViewHandle); } if ((m.Msg == (int)WindowsAPI.WndMsg.WM_MOUSE_LEAVE)) { ExplorerBrowserMouseLeave.Invoke(this, null); } if (m.Msg == (int)WindowsAPI.WndMsg.WM_KEYDOWN) { // Catch ESC key if (((int)m.WParam == 27)) OnEscKey(); if (KeyUP != null) { ExplorerKeyUPEventArgs args = new ExplorerKeyUPEventArgs(); args.Key = (int)m.WParam; KeyUP(this, args); } if ((int)m.WParam == (int)Keys.ControlKey) { Ctrl = true; } if (!IsExFileOpEnabled) { if ((int)m.WParam == (int)Keys.X && Ctrl) { IsMoveClipboardOperation = true; } if ((int)m.WParam == (int)Keys.C && Ctrl) { IsMoveClipboardOperation = false; } if ((int)m.WParam == (int)Keys.V && Ctrl) { if (!Clipboard.ContainsText()) { if (Clipboard.ContainsFileDropList()) { ShellObject sho; try { sho = ShellObject.FromParsingName(System.Windows.Forms.Clipboard.GetFileDropList()[0]); } catch (Exception) { sho = null; } if (sho != null) { sho.Dispose(); DropData PasteData = new DropData(); PasteData.DropList = System.Windows.Forms.Clipboard.GetFileDropList(); if (SelectedItems.Count > 0 & SelectedItems.Count < 2) { PasteData.PathForDrop = SelectedItems[0].ParsingName; } else { PasteData.PathForDrop = NavigationLog.CurrentLocation.ParsingName; } Thread t = null; if (IsMoveClipboardOperation) { t = new Thread(new ParameterizedThreadStart(DoMove)); } else { t = new Thread(new ParameterizedThreadStart(DoCopy)); } t.SetApartmentState(ApartmentState.STA); t.Start(PasteData); return true; } } } } } } if (m.Msg == (int)WindowsAPI.WndMsg.WM_KEYUP) { if (KeyUP != null) { ExplorerKeyUPEventArgs args = new ExplorerKeyUPEventArgs(); args.Key = (int)m.WParam; KeyUP(this, args); } if ((int)m.WParam == (int)Keys.ControlKey) { Ctrl = false; } if (!IsExFileOpEnabled) { if ((int)m.WParam == (int)Keys.V && Ctrl) { return true; } } } if ((m.Msg == (int)WindowsAPI.WndMsg.WM_MOUSEMOVE)) { WindowsAPI.RECTW rscroll = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(VScrollHandle, ref rscroll); WindowsAPI.RECTW rr = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(SysListViewHandle, ref rr); Rectangle reclv = rr.ToRectangle(); Rectangle rec2 = new Rectangle(reclv.X + 1, rscroll.Top + 30, reclv.Width - 3, rscroll.Bottom - rscroll.Top - 5 - 30); //ExplorerBrowser.Checktmr.Start(); //A workarownd to ugly AutoScroll bug in IExplorerBrowsers if (m.WParam.ToInt32() == 0x0001 && !IsMouseClickOnHeader && !IsMouseClickOutsideLV) { ShellObject s; if (rscroll.Height > 0) if (!rec2.Contains(Cursor.Position)) { if (Cursor.Position.Y <= rec2.Y) { Cursor.Position = new Point(Cursor.Position.X, rec2.Top); return true; } if (Cursor.Position.Y >= rec2.Bottom) { Cursor.Position = new Point(Cursor.Position.X, rec2.Bottom - 1); return true; } } } else { BeginInvoke(new MethodInvoker( delegate { Guid iid = new Guid(ExplorerBrowserIIDGuid.IShellView); IntPtr view = IntPtr.Zero; HResult hrr = this.explorerBrowserControl.GetCurrentView(ref iid, out view); if (view != IntPtr.Zero) { IShellView isv = (IShellView)Marshal.GetObjectForIUnknown(view); AvailableVisibleColumns = AvailableColumns(isv, false); Marshal.ReleaseComObject(isv); } })); } if (!reclv.Contains(Cursor.Position)) { if (ExplorerBrowserMouseLeave != null) ExplorerBrowserMouseLeave.Invoke(this, null); } BeginInvoke(new MethodInvoker( delegate { WindowsAPI.RECTW r = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(SysListViewHandle, ref r); Rectangle recb = r.ToRectangle(); Rectangle PopFR = new Rectangle(PopFX, PopFY, 22, 22); if (recb.Contains(Cursor.Position)) { if (CurX != ((int)M.LParam & 0x0000FFFF) | CurY != HiWord((int)M.LParam)) { try { if (!IsBool && !PopFR.Contains(Cursor.Position)) { // automan.DoQuery(factory => // { // QTTabBarLib.Automation.AutomationElement el; // try // { // el = factory.FromPoint(Cursor.Position); // } // catch // { // // el = null; // } // // if (el != null) // { // string name = el.GetClassName(); // string name2 = el.GetParent().GetClassName(); // if (name == "UIProperty" || name == "UIImage") // { // el = el.GetParent(); // } // // if (el.GetClassName() == "UIItem") // { // //MessageBox.Show(el.GetBoundingRect().Top.ToString() + "/" + el.GetBoundingRect().Left.ToString() + " - " + el.GetClassName()); // Rectangle ImageRecT = new Rectangle(); // Rectangle TextRecT = new Rectangle(); // // foreach (QTTabBarLib.Automation.AutomationElement elm in el.GetChildren()) // { // //MessageBox.Show(elm.GetClassName()); // if (elm.GetClassName() == "UIImage") // { // ImageRecT = elm.GetBoundingRect(); // } // if (elm.GetClassName() == "UIProperty") // { // // TextRecT = new Rectangle(ImageRecT.Left, // ImageRecT.Top, // AvailableVisibleColumns[0].Width, elm.GetBoundingRect().Height); // } // } // // vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(), false, ImageRecT, TextRecT); // } // else // { // //MessageBox.Show(name); // if (el.GetClassName() == "UIItemsView" | el.GetClassName() == "UIGroupItem") // { // vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(), true, new Rectangle(0, 0, 0, 0), new Rectangle(0, 0, 0, 0)); // } // else // { // vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(), true, new Rectangle(0, 0, 0, 0), new Rectangle(0, 0, 0, 0)); // } // // } // el.Dispose(); // } // // return 1; // }); } else { } } catch (Exception ex) { if (automan != null) { automan.Dispose(); } //return 1; } CurX = LoWord((int)M.LParam); CurY = HiWord((int)M.LParam); } } })); } if (m.Msg == (int)WindowsAPI.WndMsg.WM_PAINT) { if (IsOldSysListView) { WindowsAPI.SendMessage(SysListViewHandle, 296, MAKELONG(1, 1), 0); } } Invoke(new MethodInvoker( delegate { hr = ((IInputObject)explorerBrowserControl).TranslateAcceleratorIO(ref M); })); } return (hr == HResult.Ok); }
internal void FireContentEnumerationComplete() { if (ViewEnumerationComplete != null) { //BeginInvoke(new MethodInvoker( // delegate // { IntPtr n = WindowsAPI.FindWindowEx(this.Handle, IntPtr.Zero, "ExplorerBrowserControl", null); IntPtr z = WindowsAPI.FindWindowEx(n, IntPtr.Zero, "DUIViewWndClassName", null); IntPtr o = WindowsAPI.FindWindowEx(z, IntPtr.Zero, "DirectUIHWND", null); IntPtr s1 = WindowsAPI.FindWindowEx(o, IntPtr.Zero, "CtrlNotifySink", null); IntPtr s2 = WindowsAPI.FindWindowEx(o, s1, "CtrlNotifySink", null); IntPtr s3 = WindowsAPI.FindWindowEx(o, s2, "CtrlNotifySink", null); IntPtr k = WindowsAPI.FindWindowEx(s3, IntPtr.Zero, "SHELLDLL_DefView", null); SysListViewHandle = WindowsAPI.FindWindowEx(k, IntPtr.Zero, "SysListView32", null); if (SysListViewHandle == IntPtr.Zero) { SysListViewHandle = WindowsAPI.FindWindowEx(k, IntPtr.Zero, "DirectUIHWND", null); } IntPtr s4 = WindowsAPI.FindWindowEx(SysListViewHandle, IntPtr.Zero, "CtrlNotifySink", null); IntPtr s5 = WindowsAPI.FindWindowEx(SysListViewHandle, s4, "CtrlNotifySink", null); VScrollHandle = WindowsAPI.FindWindowEx(s5, IntPtr.Zero, "ScrollBar", null); WindowsAPI.RECTW rscroll = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(VScrollHandle, ref rscroll); Guid iid = new Guid(ExplorerBrowserIIDGuid.IShellView); IntPtr view = IntPtr.Zero; HResult hr = this.explorerBrowserControl.GetCurrentView(ref iid, out view); IShellView isv = (IShellView)Marshal.GetObjectForIUnknown(view); AvailableVisibleColumns = AvailableColumns(isv, false); SysListviewDT = (WindowsAPI.IDropTarget)isv; Marshal.ReleaseComObject(isv); WindowsAPI.RevokeDragDrop(SysListViewHandle); ShellViewDragDrop DropTarget = new ShellViewDragDrop(); WindowsAPI.RegisterDragDrop(SysListViewHandle, DropTarget); GC.WaitForPendingFinalizers(); GC.Collect(); //})); ViewEnumerationComplete.Invoke(this, EventArgs.Empty); } }
void Checktmr_Tick(object sender, EventArgs e) { //if (true) // { //IntPtr n = WindowsAPI.FindWindowEx(this.Handle, IntPtr.Zero, "ExplorerBrowserControl", null); //IntPtr z = WindowsAPI.FindWindowEx(n, IntPtr.Zero, "DUIViewWndClassName", null); //IntPtr o = WindowsAPI.FindWindowEx(z, IntPtr.Zero, "DirectUIHWND", null); //IntPtr s1 = WindowsAPI.FindWindowEx(o, IntPtr.Zero, "CtrlNotifySink", null); //IntPtr s2 = WindowsAPI.FindWindowEx(o, s1, "CtrlNotifySink", null); //IntPtr s3 = WindowsAPI.FindWindowEx(o, s2, "CtrlNotifySink", null); //IntPtr k = WindowsAPI.FindWindowEx(s3, IntPtr.Zero, "SHELLDLL_DefView", null); //SysListViewHandle = WindowsAPI.FindWindowEx(k, IntPtr.Zero, "SysListView32", null); //if (SysListViewHandle == IntPtr.Zero) //{ // SysListViewHandle = WindowsAPI.FindWindowEx(k, IntPtr.Zero, "DirectUIHWND", null); //} //IntPtr s4 = WindowsAPI.FindWindowEx(SysListViewHandle, IntPtr.Zero, "CtrlNotifySink", null); //IntPtr s5 = WindowsAPI.FindWindowEx(SysListViewHandle, s4, "CtrlNotifySink", null); //VScrollHandle = WindowsAPI.FindWindowEx(s5, IntPtr.Zero, "ScrollBar", null); WindowsAPI.RECTW r = new WindowsAPI.RECTW(); WindowsAPI.GetWindowRect(SysListViewHandle, ref r); Rectangle recb = r.ToRectangle(); //} if (recb.Contains(Cursor.Position)) { QTTabBarLib.Automation.AutomationManager automan = null; try { automan = new QTTabBarLib.Automation.AutomationManager(); automan.DoQuery(factory => { QTTabBarLib.Automation.AutomationElement el = factory.FromPoint(Cursor.Position); if (el != null) { string name = el.GetClassName(); MessageBox.Show(name); if (el.GetClassName() == "UIItem") { // MessageBox.Show(el.GetBoundingRect().Top.ToString() + "/" + el.GetBoundingRect().Left.ToString() + " - " + el.GetClassName()); // vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(), false); } else { if (el.GetClassName() == "UIItemsView" || el.GetClassName() == "UIGroupItem") { vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(), true, new Rectangle(0,0,0,0), new Rectangle(0,0,0,0)); } else { vItemHot(el.GetClassName(), el.GetItemName(), el.GetBoundingRect(), el.GetItemIndex(),true, new Rectangle(0, 0, 0, 0), new Rectangle(0, 0, 0, 0)); } } el.Dispose(); } return 0; }); automan.Dispose(); } catch (Exception ex) { if (automan != null) { automan.Dispose(); } //return 1; } } }