コード例 #1
0
        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;
        }
コード例 #2
0
ファイル: ExplorerTree.cs プロジェクト: lujinlong/Apq
		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;
		}