using ShellBoost.Core; using ShellBoost.Core.WindowsShell; using System; using System.Collections.Generic; using DigitalData.Modules.Logging; using DigitalData.Modules.Database; using System.Data; namespace VirtualDrive { static class Program { /// /// Der Haupteinstiegspunkt für die Anwendung. /// [STAThread] static void Main() { LogConfig LogConfig = new LogConfig(LogConfig.PathType.Temp); Logger Logger = LogConfig.GetLogger(); MSSQLServer Db = new MSSQLServer(LogConfig, "Server=172.24.12.41\\tests;Database=DD_ECM_TEST;User Id=sa;Password=dd;"); ShellFolderServer.RegisterNativeDll(RegistrationMode.User); using (var server = new MyShellFolderServer(Db)) { var config = new ShellFolderConfiguration(); // this class is located in ShellBoost.Core server.Start(config); // start the server while (Console.ReadKey(true).Key != ConsoleKey.Escape) { } } ShellFolderServer.UnregisterNativeDll(RegistrationMode.User); } public class MyShellFolderServer : ShellFolderServer { private MyRootFolder _root; private MSSQLServer _Db; public MyShellFolderServer(MSSQLServer Db) { _Db = Db; } // only the Shell knows our root folder PIDL protected override ShellFolder GetFolderAsRoot(ShellItemIdList idl) { if (_root == null) { _root = new MyRootFolder(idl, _Db); } return _root; } } public class MyRootFolder : ShellFolder // this base class is located in ShellBoost.Core { MSSQLServer _Db; // reference to the ShellFolderServer is now available as the FolderServer instance property public MyRootFolder(ShellItemIdList idList, MSSQLServer db) : base(idList) { _Db = db; } public override IEnumerable EnumItems(SHCONTF options) { DataTable oTable = _Db.GetDatatable("SELECT * FROM TBDD_USER"); foreach (DataRow oRow in oTable.Rows) { ShellItem oItem = new VirtualItem(this, oRow["USERNAME"].ToString().ToLower() + ".txt"); yield return oItem; } yield return new PhysicalItem(this, "My First Item"); // note by default, ShellBoost uses the key/ID value as the display name if it’s not explicitly defined //yield return new ShellFolder(this, new StringKeyShellItemId("My First Folder")); //yield return new ShellItem(this, new StringKeyShellItemId("My First Item")); } protected override InformationBar GetInformationBar() { var bar = new InformationBar(); bar.Guid = new Guid(); bar.Message = "This is a very important folder!"; return bar; } } public class VirtualItem : ShellItem { public VirtualItem(ShellFolder parent, string text): base(parent, new StringKeyShellItemId(text)) { this.ItemType = ".txt"; this.Size = 999; this.DateAccessed = DateTime.Now; this.DateCreated = DateTime.Now; this.DateModified = DateTime.Now; this.IsHidden = true; } public override ShellContent GetContent() { return new MemoryShellContent("Hallo!", System.Text.Encoding.UTF8); } } public class PhysicalItem : ShellItem { public PhysicalItem(ShellFolder parent, string text) : base(parent, new StringKeyShellItemId(text)) { this.ItemType = ".txt"; this.Size = 999; this.DateAccessed = DateTime.Now; this.DateCreated = DateTime.Now; this.DateModified = DateTime.Now; this.IsHidden = true; } public override ShellContent GetContent() { return new FileShellContent(@"E:\test.txt"); } } } }