private void tvwMain_AfterExpand(object sender, TreeViewEventArgs e) { TreeNode cur = e.Node; if (cur.Tag.ToString().IndexOf(":", 1) > 0) //if its got a : it means its a C:\ like-type path etc { ExploreTreeNode(cur); } else if ((cur.Text == "My Computer") || (cur.Text == "Entire Network") || ((cur.Parent != null) && (cur.Parent.Text == "Entire Network"))) { if (cur.Text == "My Computer") { PopulateMyComputer(); //add each drive and files and dirs (if it hasnt already). return; } Cursor.Current = Cursors.WaitCursor; if (cur.Text == "Entire Network") { if (cur.FirstNode.Text == "Network Placeholder Node") { cur.FirstNode.Remove(); var servers = new ServerEnum(ResourceScope.RESOURCE_GLOBALNET, ResourceType.RESOURCETYPE_DISK, ResourceUsage.RESOURCEUSAGE_ALL, ResourceDisplayType.RESOURCEDISPLAYTYPE_NETWORK, ""); foreach (string s1 in servers) { string s2 = s1.Substring(0, s1.IndexOf("|", 1)); if ((s2 == "Microsoft Terminal Services") || (s2 == "Microsoft Windows Network")) { //ignore these names continue; } //Domain or Workgroup var nodeDorW = new TreeNode { Tag = cur.Text + Seperator + s2, Text = s2, ImageIndex = 16, SelectedImageIndex = 16 }; cur.Nodes.Add(nodeDorW); //Placeholder supposed to hold computers. var nodeNcmp = new TreeNode { Tag = "NCMP", Text = "NCMP", ImageIndex = 12, SelectedImageIndex = 12 }; nodeDorW.Nodes.Add(nodeNcmp); } } } if ((cur.Parent != null) && (cur.Parent.Text == "Entire Network")) { if (cur.FirstNode.Text == "NCMP") { cur.FirstNode.Remove(); //remove the NCMP placeholder string pS = cur.Text; var allservers = new ServerEnum(ResourceScope.RESOURCE_GLOBALNET, ResourceType.RESOURCETYPE_DISK, ResourceUsage.RESOURCEUSAGE_ALL, ResourceDisplayType.RESOURCEDISPLAYTYPE_SERVER, pS); IEnumerator e1 = allservers.GetEnumerator(); //e1 is enumerator. //new array of computer nodes, with their subnode shares. (yes there will be blank indexes) var computerlist = new TreeNode[allservers.Count]; int i = 0; //accumulator int lasti = 0; //last location of a computer in the computerlist while (e1.MoveNext()) { if (e1.Current != null) { var enumtext = e1.Current.ToString(); // if NOT a _share, then its a Network Computer, and we add it if (!enumtext.EndsWith("_share")) { var aComp = new TreeNode { Tag = enumtext, Text = enumtext.Substring(2), ImageIndex = 12, SelectedImageIndex = 12 }; computerlist[i] = aComp; lasti = i; } else //Network Computer Shares subnodes. { var pos = enumtext.LastIndexOf("\\") + 1; var aSubShare = new TreeNode { Tag = enumtext.Substring(0, enumtext.Length - 6), Text = enumtext.Substring(pos, enumtext.Length - pos - 6), ImageIndex = 28, SelectedImageIndex = 28 }; computerlist[lasti].Nodes.Add(aSubShare); } } i++; } foreach (TreeNode eachcomp in computerlist) { if (eachcomp != null) { cur.Nodes.Add(eachcomp); } } } } } Cursor.Current = Cursors.Default; }
private void tvwMain_AfterExpand(object sender, System.Windows.Forms.TreeViewEventArgs e) { string [] drives = Environment.GetLogicalDrives(); string dir2 =""; Cursor.Current = Cursors.WaitCursor; TreeNode n; TreeNode nodeNN; TreeNode nodemN; TreeNode nodemyC; TreeNode nodeNNode; TreeNode nodeDrive; nodemyC = e.Node; n = e.Node; if (n.Text.IndexOf(":",1)>0) { ExploreTreeNode(n); } else {//(String.Compare(n.Text ,"My Documents")==0) || (String.Compare(n.Text,"Desktop")==0) || if ((String.Compare(n.Text,"Desktop" )==0)||(String.Compare(n.Text,"Microsoft Windows Network" )==0)||(String.Compare(n.Text ,"My Computer")==0) || (String.Compare(n.Text ,"My Network Places")==0)|| (String.Compare(n.Text ,"Entire Network")==0)||((n.Parent!=null)&&(String.Compare(n.Parent.Text,"Microsoft Windows Network")==0)) ) { if((String.Compare(n.Text ,"My Computer")==0)&&(nodemyC.GetNodeCount(true) <2)) /////////// //add each drive and files and dirs { nodemyC.FirstNode.Remove(); foreach(string drive in drives) { nodeDrive = new TreeNode(); nodeDrive.Tag = drive; nodeDrive.Text = drive ; //Determine icon to display by drive switch(Win32.GetDriveType(drive)) { case 2: nodeDrive.ImageIndex = 17; nodeDrive.SelectedImageIndex = 17; break; case 3: nodeDrive.ImageIndex = 0; nodeDrive.SelectedImageIndex = 0; break; case 4: nodeDrive.ImageIndex = 8; nodeDrive.SelectedImageIndex = 8; break; case 5: nodeDrive.ImageIndex = 7; nodeDrive.SelectedImageIndex = 7; break; default: nodeDrive.ImageIndex = 0; nodeDrive.SelectedImageIndex = 0; break; } nodemyC.Nodes.Add(nodeDrive); nodeDrive.EnsureVisible(); tvwMain.Refresh(); try { //add dirs under drive if (Directory.Exists (drive)) { foreach(string dir in Directory.GetDirectories(drive)) { dir2 = dir; node = new TreeNode(); node.Tag = dir; node.Text = dir.Substring(dir.LastIndexOf(@"\") + 1); node.ImageIndex = 1; nodeDrive.Nodes.Add(node); } } //fill those dirs // foreach(TreeNode curNode in // tvwMain.Nodes[tvwMain.Nodes.Count - 1].Nodes) // { // FillFilesandDirs(curNode); // } } catch(Exception) //error just add blank dir { // MessageBox.Show ("Error while Filling the Explorer:" + ex.Message ); // node = new TreeNode(); // node.Tag = dir2; // node.Text = dir2.Substring(dir2.LastIndexOf(@"\") + 1); // node.ImageIndex = 1; // tvwMain.Nodes.Add(node); } nodemyC.Expand(); } } if((String.Compare(n.Text ,"Entire Network")==0)) { if (n.FirstNode.Text == "Network Node") { n.FirstNode.Remove(); //NETRESOURCE netRoot = new NETRESOURCE(); ServerEnum servers = new ServerEnum(ResourceScope.RESOURCE_GLOBALNET, ResourceType.RESOURCETYPE_DISK, ResourceUsage.RESOURCEUSAGE_ALL, ResourceDisplayType.RESOURCEDISPLAYTYPE_NETWORK,"" ); foreach (string s1 in servers) { string s2=""; s2 = s1.Substring(0,s1.IndexOf("|",1)); if(s1.IndexOf("NETWORK",1) > 0 ) { nodeNN = new TreeNode(); nodeNN.Tag = s2; nodeNN.Text = s2;//dir.Substring(dir.LastIndexOf(@"\") + 1); nodeNN.ImageIndex = 15; nodeNN.SelectedImageIndex = 15; n.Nodes.Add(nodeNN); } else { TreeNode nodemNc; nodemN = new TreeNode(); nodemN.Tag = s2;//"my Node"; nodemN.Text = s2;//"my Node";//dir.Substring(dir.LastIndexOf(@"\") + 1); nodemN.ImageIndex = 16; nodemN.SelectedImageIndex = 16; n.LastNode.Nodes.Add(nodemN); nodemNc = new TreeNode(); nodemNc.Tag = "my netNode"; nodemNc.Text = "my netNode";//dir.Substring(dir.LastIndexOf(@"\") + 1); nodemNc.ImageIndex = 12; nodemNc.SelectedImageIndex = 12; nodemN.Nodes.Add(nodemNc); } } } } if ((n.Parent!=null)&&(String.Compare(n.Parent.Text,"Microsoft Windows Network")==0)) { if (n.FirstNode.Text == "my netNode") { n.FirstNode.Remove(); string pS=n.Text ; //NETRESOURCE netRoot = new NETRESOURCE(); ServerEnum servers = new ServerEnum(ResourceScope.RESOURCE_GLOBALNET, ResourceType.RESOURCETYPE_DISK, ResourceUsage.RESOURCEUSAGE_ALL, ResourceDisplayType.RESOURCEDISPLAYTYPE_SERVER,pS); foreach (string s1 in servers) { string s2=""; if((s1.Length <6)||(String.Compare(s1.Substring(s1.Length-6,6),"-share")!=0)) { s2 = s1;//.Substring(s1.IndexOf("\\",2)); nodeNN = new TreeNode(); nodeNN.Tag = s2; nodeNN.Text = s2.Substring(2) ; nodeNN.ImageIndex = 12; nodeNN.SelectedImageIndex = 12; n.Nodes.Add(nodeNN); foreach (string s1node in servers) { if (s1node.Length >6) { if(String.Compare(s1node.Substring(s1node.Length-6,6),"-share")==0) { if (s2.Length <=s1node.Length ) { try { if (String.Compare(s1node.Substring(0,s2.Length+1),s2 + @"\")==0) { nodeNNode = new TreeNode(); nodeNNode.Tag = s1node.Substring(0,s1node.Length -6); nodeNNode.Text = s1node.Substring(s2.Length+1,s1node.Length -s2.Length-7) ; nodeNNode.ImageIndex = 28; nodeNNode.SelectedImageIndex = 28; nodeNN.Nodes.Add(nodeNNode); } } catch(Exception) {} } } } } } } } } } else { ExploreTreeNode(n); } } Cursor.Current = Cursors.Default; }