基本信息
源码名称:c# 获取当前系统所有窗口句柄(含任务栏/托盘图标等) 完整源码下载
源码大小:0.09M
文件格式:.zip
开发语言:C#
更新时间:2013-09-14
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Reflection; using System.Globalization; using System.Diagnostics; using Common; namespace TaskbarSorter { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.ToolBar toolBar1; private System.Windows.Forms.TreeListView treeListView1; private System.Windows.Forms.ColumnHeader columnHeader1; private System.ComponentModel.IContainer components; private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.ColumnHeader columnHeader3; private System.Windows.Forms.ColumnHeader columnHeader4; private System.Windows.Forms.ToolBarButton toolBarButtonMoveFirst; private System.Windows.Forms.ToolBarButton toolBarButtonMoveUp; private System.Windows.Forms.ImageList imageListToolbar; private System.Windows.Forms.ToolBarButton toolBarButtonMoveDown; private System.Windows.Forms.ToolBarButton toolBarButtonMoveLast; private System.Windows.Forms.Button _Apply; private System.Windows.Forms.Button _ViewTree; private System.Windows.Forms.Button _ExpandAll; private System.Windows.Forms.Button _CollapseAll; private System.Windows.Forms.ImageList imageListTreeView; private System.Windows.Forms.Button _Repair; private System.Windows.Forms.ToolTip _ToolTips; private Icon _Icon = null; private bool _FirstActivation = true; private ITree _Tree = NodeTree.NewTree( typeof( DataBase ) ); private IntPtr _ToolbarWindowHandle = IntPtr.Zero; private bool _Glomming = true; public Form1() { string[] a = Assembly.GetEntryAssembly().GetManifestResourceNames(); Trace.WriteLine( "\nResourceNames:" ); foreach ( string s in a ) Trace.WriteLine( "\t" s ); Trace.WriteLine( "" ); InitializeComponent(); } protected override void OnHandleCreated( EventArgs e ) { base.OnHandleCreated( e ); UInt32 hIcon = User32.GetClassLong( Handle, GCL.HICONSM ); if ( hIcon == 0 ) { if ( _Icon == null ) _Icon = new Icon( typeof( Form1 ), "Icons.App.ico" ); User32.SetClassLong( Handle, GCL.HICONSM, ( UInt32 ) _Icon.Handle ); } } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.button1 = new System.Windows.Forms.Button(); this.toolBar1 = new System.Windows.Forms.ToolBar(); this.toolBarButtonMoveFirst = new System.Windows.Forms.ToolBarButton(); this.toolBarButtonMoveUp = new System.Windows.Forms.ToolBarButton(); this.toolBarButtonMoveDown = new System.Windows.Forms.ToolBarButton(); this.toolBarButtonMoveLast = new System.Windows.Forms.ToolBarButton(); this.imageListToolbar = new System.Windows.Forms.ImageList(this.components); this.treeListView1 = new System.Windows.Forms.TreeListView(); this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); this.imageListTreeView = new System.Windows.Forms.ImageList(this.components); this._Apply = new System.Windows.Forms.Button(); this._ViewTree = new System.Windows.Forms.Button(); this._ExpandAll = new System.Windows.Forms.Button(); this._CollapseAll = new System.Windows.Forms.Button(); this._Repair = new System.Windows.Forms.Button(); this._ToolTips = new System.Windows.Forms.ToolTip(this.components); this.SuspendLayout(); // // button1 // this.button1.FlatStyle = System.Windows.Forms.FlatStyle.System; this.button1.Location = new System.Drawing.Point(8, 32); this.button1.Name = "button1"; this.button1.TabIndex = 1; this.button1.Text = "Refresh"; this.button1.Click = new System.EventHandler(this.button1_Click); // // toolBar1 // this.toolBar1.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.toolBarButtonMoveFirst, this.toolBarButtonMoveUp, this.toolBarButtonMoveDown, this.toolBarButtonMoveLast}); this.toolBar1.DropDownArrows = true; this.toolBar1.ImageList = this.imageListToolbar; this.toolBar1.Location = new System.Drawing.Point(0, 0); this.toolBar1.Name = "toolBar1"; this.toolBar1.ShowToolTips = true; this.toolBar1.Size = new System.Drawing.Size(592, 28); this.toolBar1.TabIndex = 0; this.toolBar1.ButtonClick = new System.Windows.Forms.ToolBarButtonClickEventHandler(this.toolBar1_ButtonClick); // // toolBarButtonMoveFirst // this.toolBarButtonMoveFirst.ImageIndex = 0; this.toolBarButtonMoveFirst.ToolTipText = "Move First"; // // toolBarButtonMoveUp // this.toolBarButtonMoveUp.ImageIndex = 1; this.toolBarButtonMoveUp.ToolTipText = "Move Up"; // // toolBarButtonMoveDown // this.toolBarButtonMoveDown.ImageIndex = 2; this.toolBarButtonMoveDown.ToolTipText = "Move Down"; // // toolBarButtonMoveLast // this.toolBarButtonMoveLast.ImageIndex = 3; this.toolBarButtonMoveLast.ToolTipText = "Move Last"; // // imageListToolbar // this.imageListToolbar.ImageSize = new System.Drawing.Size(16, 16); this.imageListToolbar.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListToolbar.ImageStream"))); this.imageListToolbar.TransparentColor = System.Drawing.Color.Transparent; // // treeListView1 // this.treeListView1.AllowColumnReorder = true; this.treeListView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.treeListView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.columnHeader1, this.columnHeader2, this.columnHeader3, this.columnHeader4}); this.treeListView1.HideSelection = false; this.treeListView1.Location = new System.Drawing.Point(8, 64); this.treeListView1.MultiSelect = false; this.treeListView1.Name = "treeListView1"; this.treeListView1.Size = new System.Drawing.Size(572, 392); this.treeListView1.SmallImageList = this.imageListTreeView; this.treeListView1.Sorting = System.Windows.Forms.SortOrder.None; this.treeListView1.TabIndex = 6; this.treeListView1.DoubleClick = new System.EventHandler(this.treeListView1_DoubleClick); // // columnHeader1 // this.columnHeader1.Text = "Process / Window"; this.columnHeader1.Width = 300; // // columnHeader2 // this.columnHeader2.Text = "Windows"; // // columnHeader3 // this.columnHeader3.Text = "Window Handle"; this.columnHeader3.Width = 100; // // columnHeader4 // this.columnHeader4.Text = "Process Id"; this.columnHeader4.Width = 90; // // imageListTreeView // this.imageListTreeView.ImageSize = new System.Drawing.Size(16, 16); this.imageListTreeView.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListTreeView.ImageStream"))); this.imageListTreeView.TransparentColor = System.Drawing.Color.Transparent; // // _Apply // this._Apply.FlatStyle = System.Windows.Forms.FlatStyle.System; this._Apply.Location = new System.Drawing.Point(96, 32); this._Apply.Name = "_Apply"; this._Apply.TabIndex = 2; this._Apply.Text = "Apply"; this._Apply.Click = new System.EventHandler(this._Apply_Click); // // _ViewTree // this._ViewTree.FlatStyle = System.Windows.Forms.FlatStyle.System; this._ViewTree.Location = new System.Drawing.Point(504, 32); this._ViewTree.Name = "_ViewTree"; this._ViewTree.TabIndex = 5; this._ViewTree.Text = "View Tree"; this._ViewTree.Click = new System.EventHandler(this._ViewTree_Click); // // _ExpandAll // this._ExpandAll.FlatStyle = System.Windows.Forms.FlatStyle.System; this._ExpandAll.Location = new System.Drawing.Point(200, 32); this._ExpandAll.Name = "_ExpandAll"; this._ExpandAll.TabIndex = 3; this._ExpandAll.Text = "Expand All"; this._ExpandAll.Click = new System.EventHandler(this._ExpandAll_Click); // // _CollapseAll // this._CollapseAll.FlatStyle = System.Windows.Forms.FlatStyle.System; this._CollapseAll.Location = new System.Drawing.Point(288, 32); this._CollapseAll.Name = "_CollapseAll"; this._CollapseAll.TabIndex = 4; this._CollapseAll.Text = "Collapse All"; this._CollapseAll.Click = new System.EventHandler(this._CollapseAll_Click); // // _Repair // this._Repair.FlatStyle = System.Windows.Forms.FlatStyle.System; this._Repair.Location = new System.Drawing.Point(416, 32); this._Repair.Name = "_Repair"; this._Repair.TabIndex = 5; this._Repair.Text = "OS Version"; this._ToolTips.SetToolTip(this._Repair, "Repair ToolTips"); this._Repair.Click = new System.EventHandler(this._Repair_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(592, 466); this.Controls.Add(this._ViewTree); this.Controls.Add(this._Apply); this.Controls.Add(this.treeListView1); this.Controls.Add(this.button1); this.Controls.Add(this.toolBar1); this.Controls.Add(this._ExpandAll); this.Controls.Add(this._CollapseAll); this.Controls.Add(this._Repair); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Taskbar Sorter"; this.Load = new System.EventHandler(this.Form1_Load); this.Activated = new System.EventHandler(this.Form1_Activated); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] // [ PrincipalPermission( SecurityAction.Demand, Authenticated = true ) ] static void Main() { // only supports WinXP or later try { OperatingSystemVersion os = new OperatingSystemVersion(); string s = os.ToString(); if ( os.OSPlatformId <= OSPlatformId.Win32Windows || os.OSPlatformId == OSPlatformId.WinCE ) { MessageBox.Show( "You must be joking :)", "Unsupported OS", MessageBoxButtons.OK, MessageBoxIcon.Stop ); return; } if ( ( os < OSVersionInfo.WinXP ) ) { MessageBox.Show( "This program only works on WinXP and later :)" Environment.NewLine Environment.NewLine "You are running:" Environment.NewLine s, "Unsupported OS", MessageBoxButtons.OK, MessageBoxIcon.Stop ); return; } } catch ( InvalidOperationException x ) { MessageBox.Show( "Could not determine Operating System." Environment.NewLine Environment.NewLine "Error:" Environment.NewLine x.Message, "Unknown OS", MessageBoxButtons.OK, MessageBoxIcon.Stop ); //return; } Application.EnableVisualStyles(); Application.DoEvents(); Application.Run(new Form1()); } private void Form1_Load( object sender, System.EventArgs e ) { // SYSTEM_INFO systemInfo; // Kernel32.GetSystemInfo( out systemInfo ); // Displays a MessageBox if not found _ToolbarWindowHandle = GetToolbarWindowHandle(); if ( _ToolbarWindowHandle == IntPtr.Zero ) Close(); // true if grouping is on _Glomming = ( Glob.Glomming.Int != 0 ); } private void Form1_Activated( object sender, System.EventArgs e ) { if ( _FirstActivation ) { _FirstActivation = false; button1_Click( this, EventArgs.Empty ); } } private IntPtr GetToolbarWindowHandle() { IntPtr hDesktop = User32.GetDesktopWindow(); IntPtr hTray = User32.FindWindowEx( hDesktop, IntPtr.Zero, "Shell_TrayWnd", null ); IntPtr hReBar = User32.FindWindowEx( hTray, IntPtr.Zero, "ReBarWindow32", null ); IntPtr hTask = User32.FindWindowEx( hReBar, IntPtr.Zero, "MSTaskSwWClass", null ); IntPtr hToolbar = User32.FindWindowEx( hTask, IntPtr.Zero, "ToolbarWindow32", null ); // hToolbar = User32.FindWindowEx( hReBar, IntPtr.Zero, "ToolbarWindow32", "Quick Launch" ); // hToolbar = toolBar1.Handle; if ( hToolbar == IntPtr.Zero ) MessageBox.Show( "Couldn't find Taskbar", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error ); return hToolbar; } private void button1_Click( object sender, System.EventArgs e ) { treeListView1.Items.Clear(); _Tree.Clear(); _ToolbarWindowHandle = GetToolbarWindowHandle(); if ( _ToolbarWindowHandle == IntPtr.Zero ) return; _Glomming = ( Glob.Glomming.Int != 0 ); UInt32 count = User32.SendMessage( _ToolbarWindowHandle, TB.BUTTONCOUNT, 0, 0 ); for ( int i = 0 ; i < count ; i ) { TBBUTTON tbButton = new TBBUTTON(); string text = String.Empty; IntPtr ipWindowHandle = IntPtr.Zero; bool b = GetTBButton( _ToolbarWindowHandle, i, ref tbButton, ref text, ref ipWindowHandle ); if ( b ) AddData( tbButton, text, ipWindowHandle ); } CreateImageList(); FillTreeList(); // User32.SendMessage( hToolbar, TB.CUSTOMIZE, IntPtr.Zero, IntPtr.Zero ); } private void AddData( TBBUTTON tbButton, string text, IntPtr ipWindowHandle ) { string state = ( ( tbButton.fsState & TBSTATE.HIDDEN ) == 0 ) ? "Shown" : "Hidden"; string handle = "0x" ( ( UInt32 ) ipWindowHandle ).ToString( "X8", CultureInfo.CurrentCulture ); if ( _Glomming ) { if ( ipWindowHandle == IntPtr.Zero ) // Process { DataProcess o = new DataProcess( tbButton, text, ipWindowHandle ); o.Node = _Tree.AddChild( o ); } else // Window { DataWindow o = new DataWindow( tbButton, text, ipWindowHandle ); o.Node = _Tree.Root.Child.Last.AddChild( o ); } } else // not glomming { if ( ipWindowHandle != IntPtr.Zero ) { DataWindow o = new DataWindow( tbButton, text, ipWindowHandle ); o.Node = _Tree.AddChild( o ); } } } private void CreateImageList() { ImageList list = treeListView1.SmallImageList; ImageList.ImageCollection images = list.Images; while ( images.Count > 2 ) images.RemoveAt( 2 ); foreach ( INode node in _Tree.AllChildren ) { DataBase db = ( DataBase ) node.Data; if ( db.DataType == DataType.Window ) { DataWindow window = ( DataWindow ) db; UInt32 hIcon = 0; if ( hIcon == 0 ) hIcon = User32.SendMessage ( window.WindowHandle, WM.GETICON, ICON.SMALL2, 0 ); if ( hIcon == 0 ) hIcon = User32.GetClassLong ( window.WindowHandle, GCL.HICONSM ); if ( hIcon == 0 ) hIcon = User32.GetClassLong ( window.WindowHandle, GCL.HICON ); if ( hIcon == 0 ) continue; Bitmap bitmap = null; try { Int32 hIcon2 = unchecked ( ( Int32 ) hIcon ); bitmap = Bitmap.FromHicon( new IntPtr( hIcon2 ) ); } catch ( ArgumentException ) { continue; } if ( bitmap == null ) continue; images.Add( bitmap ); int imageIndex = images.Count - 1; window.ImageIndex = imageIndex; if ( ! node.IsTop ) { DataProcess process = ( DataProcess ) node.Parent.Data; process.ImageIndex = imageIndex; } } } } private void FillTreeList() { if ( _Glomming ) { foreach ( INode nodeProcess in _Tree.Nodes ) { DataProcess process = ( DataProcess ) nodeProcess.Data; string text = process.ButtonText; bool bNoName = ( text.Length == 0 ); if ( bNoName ) text = "< no name >"; TreeListViewItem itemProcess = new TreeListViewItem( text, process.ImageIndex ); itemProcess.Tag = process; if ( bNoName ) itemProcess.Expand(); itemProcess.SubItems.Add( nodeProcess.Nodes.Count.ToString( CultureInfo.CurrentCulture ) ); // itemProcess.SubItems.Add( "0x" ( ( UInt32 ) process.WindowHandle ).ToString( "X8", CultureInfo.CurrentCulture ) ); treeListView1.Items.Add( itemProcess ); foreach ( INode nodeWindow in nodeProcess.Nodes ) { DataWindow window = ( DataWindow ) nodeWindow.Data; TreeListViewItem itemWindow = new TreeListViewItem( window.ButtonText, window.ImageIndex ); itemWindow.Tag = window; itemWindow.SubItems.Add( String.Empty ); itemWindow.SubItems.Add( "0x" ( ( UInt32 ) window.WindowHandle ).ToString( "X8", CultureInfo.CurrentCulture ) ); itemWindow.SubItems.Add( "0x" ( ( UInt32 ) window.ProcessId ).ToString( "X8", CultureInfo.CurrentCulture ) ); itemProcess.Items.Add( itemWindow ); } } } else // not glomming { foreach ( INode nodeWindow in _Tree.Nodes ) { DataWindow window = ( DataWindow ) nodeWindow.Data; TreeListViewItem itemWindow = new TreeListViewItem( window.ButtonText, window.ImageIndex ); itemWindow.Tag = window; itemWindow.SubItems.Add( String.Empty ); itemWindow.SubItems.Add( "0x" ( ( UInt32 ) window.WindowHandle ).ToString( "X8", CultureInfo.CurrentCulture ) ); itemWindow.SubItems.Add( "0x" ( ( UInt32 ) window.ProcessId ).ToString( "X8", CultureInfo.CurrentCulture ) ); treeListView1.Items.Add( itemWindow ); } } } private void PopulateTreeFromList() { _Tree.Clear(); foreach ( TreeListViewItem itemParent in treeListView1.Items ) { DataBase dataParent = ( DataBase ) itemParent.Tag; INode nodeParent = dataParent.Node = _Tree.AddChild( dataParent ); foreach ( TreeListViewItem itemChild in itemParent.Items ) { DataBase dataChild = ( DataBase ) itemChild.Tag; INode nodeChild = dataChild.Node = nodeParent.AddChild( dataChild ); } } } private unsafe bool GetTBButton( IntPtr hToolbar, int i, ref TBBUTTON tbButton, ref string text, ref IntPtr ipWindowHandle ) { // One page const int BUFFER_SIZE = 0x1000; byte[] localBuffer = new byte[ BUFFER_SIZE ]; UInt32 processId = 0; UInt32 threadId = User32.GetWindowThreadProcessId( hToolbar, out processId ); IntPtr hProcess = Kernel32.OpenProcess( ProcessRights.ALL_ACCESS, false, processId ); if ( hProcess == IntPtr.Zero ) { Debug.Assert( false ); return false; } IntPtr ipRemoteBuffer = Kernel32.VirtualAllocEx( hProcess, IntPtr.Zero, new UIntPtr( BUFFER_SIZE ), MemAllocationType.COMMIT, MemoryProtection.PAGE_READWRITE ); if ( ipRemoteBuffer == IntPtr.Zero ) { Debug.Assert( false ); return false; } // TBButton fixed ( TBBUTTON* pTBButton = & tbButton ) { IntPtr ipTBButton = new IntPtr( pTBButton ); int b = ( int ) User32.SendMessage( hToolbar, TB.GETBUTTON, ( IntPtr ) i, ipRemoteBuffer ); if ( b == 0 ) { Debug.Assert( false ); return false; } // this is fixed Int32 dwBytesRead = 0; IntPtr ipBytesRead = new IntPtr( & dwBytesRead ); bool b2 = Kernel32.ReadProcessMemory( hProcess, ipRemoteBuffer, ipTBButton, new UIntPtr( ( uint ) sizeof( TBBUTTON ) ), ipBytesRead ); if ( ! b2 ) { Debug.Assert( false ); return false; } } // button text fixed ( byte* pLocalBuffer = localBuffer ) { IntPtr ipLocalBuffer = new IntPtr( pLocalBuffer ); int chars = ( int ) User32.SendMessage( hToolbar, TB.GETBUTTONTEXTW, ( IntPtr ) tbButton.idCommand, ipRemoteBuffer ); if ( chars == -1 ) { Debug.Assert( false ); return false; } // this is fixed Int32 dwBytesRead = 0; IntPtr ipBytesRead = new IntPtr( & dwBytesRead ); bool b4 = Kernel32.ReadProcessMemory( hProcess, ipRemoteBuffer, ipLocalBuffer, new UIntPtr( BUFFER_SIZE ), ipBytesRead ); if ( ! b4 ) { Debug.Assert( false ); return false; } text = Marshal.PtrToStringUni( ipLocalBuffer, chars ); if ( text == " " ) text = String.Empty; } // window handle fixed ( byte* pLocalBuffer = localBuffer ) { IntPtr ipLocalBuffer = new IntPtr( pLocalBuffer ); // this is in the remote virtual memory space IntPtr ipRemoteData = new IntPtr( tbButton.dwData ); // this is fixed Int32 dwBytesRead = 0; IntPtr ipBytesRead = new IntPtr( & dwBytesRead ); bool b4 = Kernel32.ReadProcessMemory( hProcess, ipRemoteData, ipLocalBuffer, new UIntPtr( 4 ), ipBytesRead ); if ( ! b4 ) { Debug.Assert( false ); return false; } if ( dwBytesRead != 4 ) { Debug.Assert( false ); return false; } Int32 iWindowHandle = BitConverter.ToInt32( localBuffer, 0 ); if ( iWindowHandle == -1 ) { Debug.Assert( false ); }//return false; } ipWindowHandle = new IntPtr( iWindowHandle ); } Kernel32.VirtualFreeEx( hProcess, ipRemoteBuffer, UIntPtr.Zero, MemAllocationType.RELEASE ); Kernel32.CloseHandle( hProcess ); return true; } private void _Apply_Click( object sender, System.EventArgs e ) { using ( new CWaitCursor() ) foreach ( int sw in new int[] { SW.HIDE, SW.SHOW } ) { foreach ( DataBase db in _Tree.AllChildren.Values ) { if ( db.DataType == DataType.Window ) { DataWindow window = ( DataWindow ) db; IntPtr hWindow = window.WindowHandle; User32.ShowWindow( hWindow, sw ); // if ( sw == SW.SHOW ) System.Threading.Thread.Sleep( 500 ); } } System.Threading.Thread.Sleep( 500 ); } User32.SetForegroundWindow( Handle ); } private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { if ( e.Button == toolBarButtonMoveFirst ) OnMoveFirst (); if ( e.Button == toolBarButtonMoveUp ) OnMoveUp (); if ( e.Button == toolBarButtonMoveDown ) OnMoveDown (); if ( e.Button == toolBarButtonMoveLast ) OnMoveLast (); } private TreeListViewItemCollection GetItemCollection( TreeListViewItem item ) { if ( item.Parent == null ) { if ( item.TreeListView == null ) throw new ArgumentException( "TreeListView not set for this item" ); return item.TreeListView.Items; } return item.Parent.Items; } private void OnMoveFirst() { // fubar // ListView.SelectedIndexCollection indices = treeListView1.SelectedIndices; // if ( indices.Count != 1 ) return; // int index = indices[ 0 ]; SelectedTreeListViewItemCollection items = treeListView1.SelectedItems; if ( items.Count != 1 ) return; TreeListViewItem item = items[ 0 ]; MoveFirst( item ); item.Selected = true; PopulateTreeFromList(); } private void MoveFirst( TreeListViewItem item ) { DataBase db = ( DataBase ) item.Tag; int index = db.Node.IndexBranch; if ( index == 0 ) return; TreeListViewItemCollection items = GetItemCollection( item ); TreeListViewItemCollection items2 = new TreeListViewItemCollection(); items2.SortOrder = SortOrder.None; foreach( TreeListViewItem item2 in items ) if ( item2 != item ) items2.Add( item2 ); items.Clear(); for ( int i = 0 ; i < items2.Count ; i ) { if ( i == 0 ) items.Add( item ); items.Add( items2[ i ] ); } } private void OnMoveUp() { // fubar // ListView.SelectedIndexCollection indices = treeListView1.SelectedIndices; // if ( indices.Count != 1 ) return; // int index = indices[ 0 ]; SelectedTreeListViewItemCollection items = treeListView1.SelectedItems; if ( items.Count != 1 ) return; TreeListViewItem item = items[ 0 ]; MoveUp( item ); item.Selected = true; PopulateTreeFromList(); } private void MoveUp( TreeListViewItem item ) { DataBase db = ( DataBase ) item.Tag; int index = db.Node.IndexBranch; if ( index == 0 ) return; TreeListViewItemCollection items = GetItemCollection( item ); TreeListViewItemCollection items2 = new TreeListViewItemCollection(); items2.SortOrder = SortOrder.None; foreach( TreeListViewItem item2 in items ) if ( item2 != item ) items2.Add( item2 ); items.Clear(); for ( int i = 0 ; i < items2.Count ; i ) { if ( i == index - 1 ) items.Add( item ); items.Add( items2[ i ] ); } } private void OnMoveDown() { // fubar // ListView.SelectedIndexCollection indices = treeListView1.SelectedIndices; // if ( indices.Count != 1 ) return; // int index = indices[ 0 ]; SelectedTreeListViewItemCollection items = treeListView1.SelectedItems; if ( items.Count != 1 ) return; TreeListViewItem item = items[ 0 ]; MoveDown( item ); item.Selected = true; PopulateTreeFromList(); } private void MoveDown( TreeListViewItem item ) { DataBase db = ( DataBase ) item.Tag; int index = db.Node.IndexBranch; if ( db.Node.IsLast ) return; TreeListViewItemCollection items = GetItemCollection( item ); TreeListViewItemCollection items2 = new TreeListViewItemCollection(); items2.SortOrder = SortOrder.None; foreach( TreeListViewItem item2 in items ) if ( item2 != item ) items2.Add( item2 ); items.Clear(); for ( int i = 0 ; i < items2.Count ; i ) { items.Add( items2[ i ] ); if ( i == index ) items.Add( item ); } } private void OnMoveLast() { // fubar // ListView.SelectedIndexCollection indices = treeListView1.SelectedIndices; // if ( indices.Count != 1 ) return; // int index = indices[ 0 ]; SelectedTreeListViewItemCollection items = treeListView1.SelectedItems; if ( items.Count != 1 ) return; TreeListViewItem item = items[ 0 ]; MoveLast( item ); item.Selected = true; PopulateTreeFromList(); } private void MoveLast( TreeListViewItem item ) { DataBase db = ( DataBase ) item.Tag; int index = db.Node.IndexBranch; if ( db.Node.IsLast ) return; TreeListViewItemCollection items = GetItemCollection( item ); TreeListViewItemCollection items2 = new TreeListViewItemCollection(); items2.SortOrder = SortOrder.None; foreach( TreeListViewItem item2 in items ) if ( item2 != item ) items2.Add( item2 ); items.Clear(); for ( int i = 0 ; i < items2.Count ; i ) { items.Add( items2[ i ] ); } items.Add( item ); } private void _ExpandAll_Click(object sender, System.EventArgs e) { treeListView1.ExpandAll(); } private void _CollapseAll_Click(object sender, System.EventArgs e) { treeListView1.CollapseAll(); } private void _ViewTree_Click(object sender, System.EventArgs e) { MessageBox.Show( _Tree.ToStringRecursive(), "_Tree" ); } private void treeListView1_DoubleClick( object sender, System.EventArgs e ) { SelectedTreeListViewItemCollection items = treeListView1.SelectedItems; if ( items.Count != 1 ) return; TreeListViewItem item = items[ 0 ]; DataBase db = ( DataBase ) item.Tag; if ( db.DataType != DataType.Window ) return; DataWindow window = ( DataWindow ) db; User32.SetForegroundWindow( window.WindowHandle ); } private void _Repair_Click( object sender, System.EventArgs e ) { OperatingSystemVersion os = new OperatingSystemVersion(); string sOS = os.ToString(); string sMem = String.Empty; MEMORYSTATUSEX m = new MEMORYSTATUSEX(); if ( Kernel32.GlobalMemoryStatusEx( m ) ) { const int MB = 1024 * 1024; UInt64 total = m.TotalPhysical; UInt64 free = m.AvailablePhysical; UInt64 used = total - free; UInt64 freePercent = ( 100 * free ) / total; UInt64 usedPercent = ( 100 * used ) / total; sMem = "Memory\n" // ( Load : " m.MemoryLoad " % )\n" "---------------------\n" "Physical\t : " ( total / MB ) " MB\n" "Used \t : " ( used / MB ) " MB ( " usedPercent " % )\n" "Free \t : " ( free / MB ) " MB ( " freePercent " % )\n"; } MessageBox.Show( "You are running :" Environment.NewLine Environment.NewLine sOS Environment.NewLine Environment.NewLine sMem, "Supported OS", MessageBoxButtons.OK, MessageBoxIcon.Information ); } } }