Well, I donโt have time to finish this code completely (and it is in C #, which I have no idea what you want, but you did not specify). The main premise of this is to place the ExplorerBrowser control inside a .NET form (using the WindowsAPICodePack , which you will need to get and add a link to), wait until the TreeView is created and the window is subclassed so that we can intercept the element inserts.
Unfortunately, nothing is ever simple, the text does not give you a direct idea that the element (because it does not define it), what you need to do is get the PIDL from insertStruct.lParam and analyze it into something meaningful, possibly using the IShellFolder interface. Then you can selectively delete elements (returning 0 as m.Result ), and you can intercept everything you need. You might think that there would be a simple solution, but I think you're out of luck;) I hope this helps a bit.
An alternative could be a similar one (host explorer directly), but use something like detours to enable registry functions and selectively change the browser control view to allow some registry settings.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.WindowsAPICodePack.Shell; using System.Runtime.InteropServices; namespace MyExplorer { public partial class Form1 : Form { const int WH_CALLWNDPROC = 4; const int WM_CREATE = 1; public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern bool UnhookWindowsHookEx(IntPtr hHook); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int CallNextHookEx(IntPtr hHook, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); IntPtr m_hHook; HookProc HookDelegate; struct WindowHookStruct { public IntPtr lParam; public IntPtr wParam; public uint message; public IntPtr hwnd; } public class SubclassTreeView : NativeWindow { const int TV_FIRST = 0x1100;
tyranid
source share