技术致谢:
[1]: https://handyorg.github.io/handycontrol/
- 使用HandyControl建立一个基础工程
- vs2019 下方点击XAML标签:
- 定位光标到 <Grid> </Grid>之间:
- 插入代码:
<hc:TabControl x:Name="MainWindowsTabControl_Handle"
IsAnimationEnabled="True"
ShowCloseButton="False"
IsDraggable="False"
IsTabFillEnabled="True"
SelectionChanged="TabControl_SelectionChanged">
<hc:TabItem x:Name="Tab01Page" Header="Tab01" FontFamily="Consolas" FontStyle="Italic" FontWeight="Bold">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<ContentControl x:Name ="ShowTab1TitleToUser_ContentControl"
Grid.Column="2" Grid.Row="1" Grid.RowSpan="2" Grid.ColumnSpan="3"
Content="--"
FontFamily="Microsoft YaHei"
FontStyle="Italic"
FontWeight="Bold"
FontSize="48"
HorizontalAlignment="Center"
VerticalAlignment="Center"
/>
</Grid>
</hc:TabItem>
<hc:TabItem x:Name="Tab02Page" Header="Tab02" FontFamily="Consolas" FontStyle="Italic" FontWeight="Bold">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<TextBox x:Name="Tab2SearchFilesText" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="4"
Height="30"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Title="Find What:"
hc:InfoElement.TitlePlacement="Left"
VerticalAlignment="Center"
Cursor="IBeam"
Visibility="Visible" FontFamily="Consolas" FontStyle="Italic" FontWeight="Bold"/>
<Button x:Name="Tab2SearchFilesClickButton" hc:BorderElement.CornerRadius="5"
Grid.Column="5" Grid.Row="1" Grid.ColumnSpan="1"
Height="30"
Width="150"
Content="Search"
Click="UsedEverythingApisButtonSearch_Click"
Visibility="Visible" FontFamily="Consolas" FontStyle="Italic" FontWeight="Bold"/>
<ListView x:Name="Tab2EverythingApisSearchingResultListView"
ItemsSource="{Binding DataList}"
Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="5" Grid.RowSpan="12"
PreviewMouseLeftButtonDown="ListViewItem_PreviewMouseLeftButtonDown"
PreviewMouseDoubleClick="ListViewItem_PreviewMouseDoubleClick"
Visibility="Visible">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
<GridViewColumn DisplayMemberBinding="{Binding Path=FileName}" Header="FileName" Width="350"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=FullPath}" Header="FullPath" Width="500"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</hc:TabItem>
</hc:TabControl>
<hc:ScrollViewer
VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" IsHitTestVisible="False">
<StackPanel
hc:Growl.Token="SuccessMsg"
hc:Growl.GrowlParent="True" VerticalAlignment="Bottom" Margin="0,10,10,10" />
</hc:ScrollViewer>
<hc:ScrollViewer
VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" IsHitTestVisible="False">
<StackPanel
hc:Growl.Token="InfoMsg"
hc:Growl.GrowlParent="True" VerticalAlignment="Bottom" Margin="0,10,10,10" />
</hc:ScrollViewer>
<hc:ScrollViewer
VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" IsHitTestVisible="False">
<StackPanel
hc:Growl.Token="WarningMsg"
hc:Growl.GrowlParent="True" VerticalAlignment="Bottom" Margin="0,10,10,10" />
</hc:ScrollViewer>
<hc:ScrollViewer
VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" IsHitTestVisible="False">
<StackPanel
hc:Growl.Token="ErrorMsg"
hc:Growl.GrowlParent="True" VerticalAlignment="Bottom" Margin="0,10,10,10" />
</hc:ScrollViewer>
- 点击进入到*.xaml.cs文件:
using System;
using System.IO;
using System.Data;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Runtime.InteropServices;
using HandyControl.Controls;
using System.Collections.Generic;
using System.IO.Ports;
using System.Threading;
namespace SystemManager
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
e.Handled = true;
if (e.OriginalSource != MainWindowsTabControl_Handle)
{
return;
}
HandyControl.Controls.TabItem ti = MainWindowsTabControl_Handle.SelectedItem as HandyControl.Controls.TabItem;
string table_item_name = ti.Header.ToString();
if (e.Source is HandyControl.Controls.TabControl)
{
if (table_item_name.CompareTo("Tab01") == 0)
{
Growl.Info("Tab01", "InfoMsg");
}
else if (table_item_name.CompareTo("Tab02") == 0)
{
Growl.Info("Tab02", "InfoMsg");
}
}
}
#region 引用 EVERYTHING DLL
const int EVERYTHING_OK = 0;
const int EVERYTHING_ERROR_MEMORY = 1;
const int EVERYTHING_ERROR_IPC = 2;
const int EVERYTHING_ERROR_REGISTERCLASSEX = 3;
const int EVERYTHING_ERROR_CREATEWINDOW = 4;
const int EVERYTHING_ERROR_CREATETHREAD = 5;
const int EVERYTHING_ERROR_INVALIDINDEX = 6;
const int EVERYTHING_ERROR_INVALIDCALL = 7;
const int EVERYTHING_REQUEST_FILE_NAME = 0x00000001;
const int EVERYTHING_REQUEST_PATH = 0x00000002;
const int EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME = 0x00000004;
const int EVERYTHING_REQUEST_EXTENSION = 0x00000008;
const int EVERYTHING_REQUEST_SIZE = 0x00000010;
const int EVERYTHING_REQUEST_DATE_CREATED = 0x00000020;
const int EVERYTHING_REQUEST_DATE_MODIFIED = 0x00000040;
const int EVERYTHING_REQUEST_DATE_ACCESSED = 0x00000080;
const int EVERYTHING_REQUEST_ATTRIBUTES = 0x00000100;
const int EVERYTHING_REQUEST_FILE_LIST_FILE_NAME = 0x00000200;
const int EVERYTHING_REQUEST_RUN_COUNT = 0x00000400;
const int EVERYTHING_REQUEST_DATE_RUN = 0x00000800;
const int EVERYTHING_REQUEST_DATE_RECENTLY_CHANGED = 0x00001000;
const int EVERYTHING_REQUEST_HIGHLIGHTED_FILE_NAME = 0x00002000;
const int EVERYTHING_REQUEST_HIGHLIGHTED_PATH = 0x00004000;
const int EVERYTHING_REQUEST_HIGHLIGHTED_FULL_PATH_AND_FILE_NAME = 0x00008000;
const int EVERYTHING_SORT_NAME_ASCENDING = 1;
const int EVERYTHING_SORT_NAME_DESCENDING = 2;
const int EVERYTHING_SORT_PATH_ASCENDING = 3;
const int EVERYTHING_SORT_PATH_DESCENDING = 4;
const int EVERYTHING_SORT_SIZE_ASCENDING = 5;
const int EVERYTHING_SORT_SIZE_DESCENDING = 6;
const int EVERYTHING_SORT_EXTENSION_ASCENDING = 7;
const int EVERYTHING_SORT_EXTENSION_DESCENDING = 8;
const int EVERYTHING_SORT_TYPE_NAME_ASCENDING = 9;
const int EVERYTHING_SORT_TYPE_NAME_DESCENDING = 10;
const int EVERYTHING_SORT_DATE_CREATED_ASCENDING = 11;
const int EVERYTHING_SORT_DATE_CREATED_DESCENDING = 12;
const int EVERYTHING_SORT_DATE_MODIFIED_ASCENDING = 13;
const int EVERYTHING_SORT_DATE_MODIFIED_DESCENDING = 14;
const int EVERYTHING_SORT_ATTRIBUTES_ASCENDING = 15;
const int EVERYTHING_SORT_ATTRIBUTES_DESCENDING = 16;
const int EVERYTHING_SORT_FILE_LIST_FILENAME_ASCENDING = 17;
const int EVERYTHING_SORT_FILE_LIST_FILENAME_DESCENDING = 18;
const int EVERYTHING_SORT_RUN_COUNT_ASCENDING = 19;
const int EVERYTHING_SORT_RUN_COUNT_DESCENDING = 20;
const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_ASCENDING = 21;
const int EVERYTHING_SORT_DATE_RECENTLY_CHANGED_DESCENDING = 22;
const int EVERYTHING_SORT_DATE_ACCESSED_ASCENDING = 23;
const int EVERYTHING_SORT_DATE_ACCESSED_DESCENDING = 24;
const int EVERYTHING_SORT_DATE_RUN_ASCENDING = 25;
const int EVERYTHING_SORT_DATE_RUN_DESCENDING = 26;
const int EVERYTHING_TARGET_MACHINE_X86 = 1;
const int EVERYTHING_TARGET_MACHINE_X64 = 2;
const int EVERYTHING_TARGET_MACHINE_ARM = 3;
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern UInt32 Everything_SetSearchW(string lpSearchString);
[DllImport("Everything64.dll")]
public static extern void Everything_SetMatchPath(bool bEnable);
[DllImport("Everything64.dll")]
public static extern void Everything_SetMatchCase(bool bEnable);
[DllImport("Everything64.dll")]
public static extern void Everything_SetMatchWholeWord(bool bEnable);
[DllImport("Everything64.dll")]
public static extern void Everything_SetRegex(bool bEnable);
[DllImport("Everything64.dll")]
public static extern void Everything_SetMax(UInt32 dwMax);
[DllImport("Everything64.dll")]
public static extern void Everything_SetOffset(UInt32 dwOffset);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetMatchPath();
[DllImport("Everything64.dll")]
public static extern bool Everything_GetMatchCase();
[DllImport("Everything64.dll")]
public static extern bool Everything_GetMatchWholeWord();
[DllImport("Everything64.dll")]
public static extern bool Everything_GetRegex();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetMax();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetOffset();
[DllImport("Everything64.dll")]
public static extern IntPtr Everything_GetSearchW();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetLastError();
[DllImport("Everything64.dll")]
public static extern bool Everything_QueryW(bool bWait);
[DllImport("Everything64.dll")]
public static extern void Everything_SortResultsByPath();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetNumFileResults();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetNumFolderResults();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetNumResults();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetTotFileResults();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetTotFolderResults();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetTotResults();
[DllImport("Everything64.dll")]
public static extern bool Everything_IsVolumeResult(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern bool Everything_IsFolderResult(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern bool Everything_IsFileResult(UInt32 nIndex);
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern void Everything_GetResultFullPathName(UInt32 nIndex, StringBuilder lpString, UInt32 nMaxCount);
[DllImport("Everything64.dll")]
public static extern void Everything_Reset();
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultFileName(UInt32 nIndex);
// Everything 1.4
[DllImport("Everything64.dll")]
public static extern void Everything_SetSort(UInt32 dwSortType);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetSort();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetResultListSort();
[DllImport("Everything64.dll")]
public static extern void Everything_SetRequestFlags(UInt32 dwRequestFlags);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetRequestFlags();
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetResultListRequestFlags();
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultExtension(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultSize(UInt32 nIndex, out long lpFileSize);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultDateCreated(UInt32 nIndex, out long lpFileTime);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultDateModified(UInt32 nIndex, out long lpFileTime);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultDateAccessed(UInt32 nIndex, out long lpFileTime);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetResultAttributes(UInt32 nIndex);
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultFileListFileName(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetResultRunCount(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultDateRun(UInt32 nIndex, out long lpFileTime);
[DllImport("Everything64.dll")]
public static extern bool Everything_GetResultDateRecentlyChanged(UInt32 nIndex, out long lpFileTime);
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultHighlightedFileName(UInt32 nIndex);
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultHighlightedPath(UInt32 nIndex);
[DllImport("Everything64.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr Everything_GetResultHighlightedFullPathAndFileName(UInt32 nIndex);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_GetRunCountFromFileName(string lpFileName);
[DllImport("Everything64.dll")]
public static extern bool Everything_SetRunCountFromFileName(string lpFileName, UInt32 dwRunCount);
[DllImport("Everything64.dll")]
public static extern UInt32 Everything_IncRunCountFromFileName(string lpFileName);
private void UsedEverythingApisButtonSearch_Click(object sender, EventArgs e)
{
string str = Tab2SearchFilesText.Text.ToString();
if (string.IsNullOrWhiteSpace(str))
{
//Notice.Show("Noting To Find", "Warning", 5, MessageBoxIcon.Warning);
Growl.Warning("Noting To Find", "WarningMsg");
return;
}
Everything_SetSearchW(Tab2SearchFilesText.Text);
Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME | EVERYTHING_REQUEST_PATH | EVERYTHING_REQUEST_DATE_MODIFIED | EVERYTHING_REQUEST_SIZE);
Everything_SetSort(13);
Everything_QueryW(true);
Tab2EverythingApisSearchingResultListView.Items.Clear();
for (UInt32 i = 0; i < Everything_GetNumResults(); i++)
{
long date_modified;
long size;
var fullpath = new StringBuilder(1024); ;
Everything_GetResultDateModified(i, out date_modified);
Everything_GetResultSize(i, out size);
Everything_GetResultFullPathName(i, fullpath, 1024);
Tab2EverythingApisSearchingResultListView.Items.Add(
new { FileName = Marshal.PtrToStringUni(Everything_GetResultFileName(i)), FullPath = fullpath.ToString() });
if (i + 1 >= 1024)
{
Growl.Warning("文件数超过 1024, 将仅显示前1024个文件!! ", "WarningMsg");
break;
}
}
}
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, RoutedEventArgs e)
{
}
private void ListViewItem_PreviewMouseDoubleClick(object sender, RoutedEventArgs e)
{
var item = (sender as ListView).SelectedItem;
if (item != null)
{
var nameOfProperty = "FullPath";
var propertyInfo = item.GetType().GetProperty(nameOfProperty);
var FullPath = propertyInfo.GetValue(item, null).ToString();
System.Diagnostics.Process.Start("explorer.exe", FullPath);
}
}
#endregion
}
}
效果图: