16 Commits
2.1 ... 2.3

Author SHA1 Message Date
liufei
b7431c0408 gitee 链接 2021-09-11 17:10:39 +08:00
liufei
d60435cd61 修复一个小bug 2021-09-11 16:28:55 +08:00
liufei
274541303a '添加自定义图标大小','待办任务可使用CRON表达式自定义提醒频率' 2021-09-11 15:32:30 +08:00
liufei
c231587543 优化代码 2021-08-20 16:50:24 +08:00
liufei
787c23ef77 添加 定时内存回收 2021-08-20 16:49:20 +08:00
liufei
7e3babe0c3 修复打开显示设置后 贴边隐藏卡顿的问题 2021-08-20 15:53:58 +08:00
liufei
fd406fea4d 修复无法删除历史待办bug 2021-08-20 15:44:07 +08:00
liufei
d46eae4c6e 修改程序集信息 2021-08-20 15:43:47 +08:00
liufei
4a94aab3c7 修改程序集信息 2021-08-20 15:43:25 +08:00
liufei
8d44429bda 更优雅的实现注册热键 2021-08-20 15:43:02 +08:00
Demo-Liu
6ecb55061f Merge pull request #16 from Demo-Liu/2.2
修复 开启窗口动画,启动项目后无法显示主界面bug
2021-08-19 14:52:53 +08:00
liufei
f11056c469 修复 开启窗口动画,启动项目后无法显示主界面bug 2021-08-19 14:49:01 +08:00
Demo-Liu
c9f19c5084 Merge pull request #15 from Demo-Liu/2.2
'边缘吸附功能','窗口淡入淡出动画','待办任务快捷键(默认Ctrl+Shift+Q)','右键任务栏图标打开程序目录菜单'
2021-08-19 14:01:23 +08:00
liufei
571d7c3d0d '边缘吸附功能','窗口淡入淡出动画','待办任务快捷键(默认Ctrl+Shift+Q)','右键任务栏图标打开程序目录菜单' 2021-08-19 13:59:47 +08:00
Demo-Liu
99eae59dc3 Merge pull request #14 from Demo-Liu/2.1
2.1
2021-08-04 10:31:27 +08:00
Demo-Liu
33560ad85a Update README.md 2021-08-03 14:24:02 +08:00
39 changed files with 1218 additions and 396 deletions

View File

@@ -21,10 +21,14 @@
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>
<appSettings> <appSettings>
<add key="Version" value="2.1" /> <add key="Version" value="2.3.10" />
<add key="GitHubUrl" value="https://github.com/Demo-Liu/GeekDesk" /> <add key="GitHubUrl" value="https://github.com/Demo-Liu/GeekDesk" />
<add key="GiteeUrl" value="https://gitee.com/demo_liu/GeekDesk/tree/master" /> <add key="GiteeUrl" value="https://gitee.com/demo_liu/GeekDesk/tree/master" />
<add key="GitHubUpdateUrl" value="https://demo-liu.github.io/GeekDesk/Update.json" /> <add key="GitHubUpdateUrl" value="https://demo-liu.github.io/GeekDesk/Update.json" />

View File

@@ -24,11 +24,15 @@ namespace GeekDesk
private void App_Startup(object sender, StartupEventArgs e) private void App_Startup(object sender, StartupEventArgs e)
{ {
bool ret; mutex = new System.Threading.Mutex(true, Constants.MY_NAME, out bool ret);
mutex = new System.Threading.Mutex(true, Constants.MY_NAME, out ret);
if (!ret) if (!ret)
{ {
Environment.Exit(0); System.Threading.Thread.Sleep(2000);
mutex = new System.Threading.Mutex(true, Constants.MY_NAME, out ret);
if (!ret)
{
Environment.Exit(0);
}
} }
} }
} }

View File

@@ -14,5 +14,6 @@ namespace GeekDesk.Constant
IMAGE_HEIGHT_AM = 52, //动画变换高度 IMAGE_HEIGHT_AM = 52, //动画变换高度
IMAGE_PANEL_WIDTH = 110, //图标容器宽度 IMAGE_PANEL_WIDTH = 110, //图标容器宽度
IMAGE_PANEL_HEIGHT = 90, //图标容器高度 IMAGE_PANEL_HEIGHT = 90, //图标容器高度
WINDOW_ANIMATION_TIME = 200, //主窗口动画时间,
} }
} }

View File

@@ -15,7 +15,7 @@ namespace GeekDesk.Constant
/// <summary> /// <summary>
/// app数据文件路径 /// app数据文件路径
/// </summary> /// </summary>
public static string DATA_FILE_PATH = APP_DIR + "//Data"; //app数据文件路径 public static string DATA_FILE_PATH = APP_DIR + "Data"; //app数据文件路径
//默认文件夹图标 //默认文件夹图标
public static string DEFAULT_DIR_IMAGE_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASISURBVHhe7dvPi9R1HMfx/Qu6RYfqEp1CZ8Yko0MQRNEPgnQ36FJEFyPoF/0DHbx06dSlnVkF6SgEgocOYUEG0cFWpQ476yhbQfTDslJxk+k79S1IP/NSF3f2O+7jBY/TKgvz/j5nXMUZMzMzMzMzMzMzMzMzMzMzu959023dsbSw9YGlbuchyk7v3XbP0t5tt9Yvmd3MW3r//luWu623TvbahytDrtvBQa/9xvJ85776JbWbZf359s7quCcKR2cNqjeaQ/35zgv1y2vTvOqgOy4/MDdG9abzwWC+06lfapu2jf4cXTosN9SZ5W7n9folt2nZ6Ifw6niDy47JelloH6hfepuGLffa7xQPyfpZaL9Xv/zW5K307r27eEDWXfXG9GJ9BmvqqneyV0rHYzL63a3b61NYEzfodT4rHY4J8UetZq/6mF8pHo6J8SnS4JUOxqS19tTnsKatfDAm7Hh9DmvaCsdiAwx6rcfqk1iTVjoWkzfotd+uT2JNWulYTN5yr/VFfRJr0krHYoN0t7Tqs1hTVjwUG6L6OeS1+izWlJUOxYb5xb+JNGyFI7Gxfqp+YN83+h+drK/+wtbH+3u33FmnUF7hQLCpLPfaSycX2u/WSfx/pd8Am1H1yf3d6FOlTuOflX4hbGrd1vN1HgKBou6W2wQC4+0XCASnuu1dAoGxWnsEAmMMeq1DAoExRn/tKxAIBALBmgMZ7Nsx/Pbgc9B4J3udK57fa7WmQEbf1GyatnLg6eKzfDVrCuTcypH625pNx37rHyo+y1ezpkAufL9Yf1uz6dgfpz8uPstXIxDbFBOIWZhAzMIEYhYmELMwgZiFCcQsTCBmYQIxCxOIWZhAzMIEYhYmELMwgZiFrTmQ0/u3D89+8tjw/OdPXbPVr18eXlp6E6bG6le7i8/yOL8efnR4at+24czvR54Y/nl8DrjM6INjpvQFYG548ehOgcA4AoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCC4e3XVJIDBG9QmyKhAY4+Li7HmBwBirx2bPCgTGOTH3g0BgHIFAIBAI6kDOXPEFoDLbn7l0bG53+YuwyS3OPTsz2oVjs3etLs49OM65T5/c9fNHj7z044cPvwrTbvQsj57p0rP+r3NfPnP733GYmZmZmZmZmZmZmZmZmZnZf5uZ+QsdP8v10G4AYgAAAABJRU5ErkJggg=="; public static string DEFAULT_DIR_IMAGE_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASISURBVHhe7dvPi9R1HMfx/Qu6RYfqEp1CZ8Yko0MQRNEPgnQ36FJEFyPoF/0DHbx06dSlnVkF6SgEgocOYUEG0cFWpQ476yhbQfTDslJxk+k79S1IP/NSF3f2O+7jBY/TKgvz/j5nXMUZMzMzMzMzMzMzMzMzMzMzu959023dsbSw9YGlbuchyk7v3XbP0t5tt9Yvmd3MW3r//luWu623TvbahytDrtvBQa/9xvJ85776JbWbZf359s7quCcKR2cNqjeaQ/35zgv1y2vTvOqgOy4/MDdG9abzwWC+06lfapu2jf4cXTosN9SZ5W7n9folt2nZ6Ifw6niDy47JelloH6hfepuGLffa7xQPyfpZaL9Xv/zW5K307r27eEDWXfXG9GJ9BmvqqneyV0rHYzL63a3b61NYEzfodT4rHY4J8UetZq/6mF8pHo6J8SnS4JUOxqS19tTnsKatfDAm7Hh9DmvaCsdiAwx6rcfqk1iTVjoWkzfotd+uT2JNWulYTN5yr/VFfRJr0krHYoN0t7Tqs1hTVjwUG6L6OeS1+izWlJUOxYb5xb+JNGyFI7Gxfqp+YN83+h+drK/+wtbH+3u33FmnUF7hQLCpLPfaSycX2u/WSfx/pd8Am1H1yf3d6FOlTuOflX4hbGrd1vN1HgKBou6W2wQC4+0XCASnuu1dAoGxWnsEAmMMeq1DAoExRn/tKxAIBALBmgMZ7Nsx/Pbgc9B4J3udK57fa7WmQEbf1GyatnLg6eKzfDVrCuTcypH625pNx37rHyo+y1ezpkAufL9Yf1uz6dgfpz8uPstXIxDbFBOIWZhAzMIEYhYmELMwgZiFCcQsTCBmYQIxCxOIWZhAzMIEYhYmELMwgZiFrTmQ0/u3D89+8tjw/OdPXbPVr18eXlp6E6bG6le7i8/yOL8efnR4at+24czvR54Y/nl8DrjM6INjpvQFYG548ehOgcA4AoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCC4e3XVJIDBG9QmyKhAY4+Li7HmBwBirx2bPCgTGOTH3g0BgHIFAIBAI6kDOXPEFoDLbn7l0bG53+YuwyS3OPTsz2oVjs3etLs49OM65T5/c9fNHj7z044cPvwrTbvQsj57p0rP+r3NfPnP733GYmZmZmZmZmZmZmZmZmZnZf5uZ+QsdP8v10G4AYgAAAABJRU5ErkJggg==";

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GeekDesk.Constant
{
public enum TodoTaskExecType
{
SET_TIME = 1, //指定时间
CRON = 2 //cron表达式
}
}

View File

@@ -1,6 +1,9 @@
using GeekDesk.Task; using GeekDesk.Constant;
using GeekDesk.Task;
using GeekDesk.Util; using GeekDesk.Util;
using GeekDesk.ViewModel; using GeekDesk.ViewModel;
using HandyControl.Controls;
using Quartz;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -34,8 +37,36 @@ namespace GeekDesk.Control.Other
{ {
ToDoInfo info = this.DataContext as ToDoInfo; ToDoInfo info = this.DataContext as ToDoInfo;
info.DoneTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.DoneTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
appData.ToDoList.Remove(info); //执行任务删除 if (info.ExecType == TodoTaskExecType.CRON)
appData.HiToDoList.Add(info); //添加历史任务 {
CronExpression exp = new CronExpression(info.Cron);
DateTime dtNow = DateTime.Now;
DateTimeOffset ddo = DateTime.SpecifyKind(dtNow, DateTimeKind.Local);
string nextExecTime = ddo.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss");
info.ExeTime = nextExecTime;
DateTime nextTime = ddo.LocalDateTime;
TimeSpan ts = nextTime.Subtract(dtNow);
int minutes = (int)Math.Ceiling(ts.TotalMinutes);
if (minutes < 0)
{
minutes = 0;
}
if (minutes > 60)
{
int m = minutes % 60;
int h = minutes / 60;
Growl.SuccessGlobal("下次任务将在 " + h + " 小时零 " + m + " 分钟后提醒您!");
}
else
{
Growl.SuccessGlobal("下次任务将在 " + minutes + " 分钟后提醒您!");
}
} else
{
appData.ToDoList.Remove(info); //执行任务删除
appData.HiToDoList.Add(info); //添加历史任务
}
ToDoTask.activityBacklog[info].Close(); //关闭桌面通知 ToDoTask.activityBacklog[info].Close(); //关闭桌面通知
ToDoTask.activityBacklog.Remove(info);//激活任务删除 ToDoTask.activityBacklog.Remove(info);//激活任务删除
CommonCode.SaveAppData(appData); CommonCode.SaveAppData(appData);
@@ -93,9 +124,11 @@ namespace GeekDesk.Control.Other
{ {
case "分": case "分":
info.ExeTime = DateTime.Now.AddMinutes(time).ToString("yyyy-MM-dd HH:mm:ss"); info.ExeTime = DateTime.Now.AddMinutes(time).ToString("yyyy-MM-dd HH:mm:ss");
Growl.SuccessGlobal("将在 " + time + " 分钟后再次提醒您!");
break; break;
case "时": case "时":
info.ExeTime = DateTime.Now.AddHours(time).ToString("yyyy-MM-dd HH:mm:ss"); info.ExeTime = DateTime.Now.AddHours(time).ToString("yyyy-MM-dd HH:mm:ss");
Growl.SuccessGlobal("将在 " + time + " 小时后再次提醒您!");
break; break;
} }
ToDoTask.activityBacklog[info].Close(); //关闭桌面通知 ToDoTask.activityBacklog[info].Close(); //关闭桌面通知

View File

@@ -17,7 +17,7 @@
<hc:SimplePanel Margin="20,50,20,20" > <hc:SimplePanel Margin="20,50,20,20" >
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top"> <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top">
<Image Source="/Resource/Image/About.png" Width="400" Height="100"/> <Image Source="/Resource/Image/About.png" Width="400" Height="100"/>
<TextBlock x:Name="AppInfo" TextAlignment="Center" Text="Copyright © 2021 GeekDesk "/> <TextBlock x:Name="AppInfo" TextAlignment="Center" Text="Copyright © 2021 GeekDesk V"/>
<hc:UniformSpacingPanel Spacing="5" HorizontalAlignment="Center" Margin="10,10,0,0" VerticalAlignment="Center"> <hc:UniformSpacingPanel Spacing="5" HorizontalAlignment="Center" Margin="10,10,0,0" VerticalAlignment="Center">
<hc:Shield Subject=".net" Status=">=4.72" Margin="0,0,10,0" Color="#1182c3"/> <hc:Shield Subject=".net" Status=">=4.72" Margin="0,0,10,0" Color="#1182c3"/>
<hc:Shield Subject="IDE" Status="VS2019" Margin="0,0,10,0" Color="#1182c3"/> <hc:Shield Subject="IDE" Status="VS2019" Margin="0,0,10,0" Color="#1182c3"/>
@@ -28,7 +28,7 @@
Margin="0,0,10,0" Color="#24292F"/> Margin="0,0,10,0" Color="#24292F"/>
<hc:Shield Subject="Gitee" Visibility="Visible" Status="Demo-liu" <hc:Shield Subject="Gitee" Visibility="Visible" Status="Demo-liu"
Command="hc:ControlCommands.OpenLink" Command="hc:ControlCommands.OpenLink"
CommandParameter="" CommandParameter="https://gitee.com/demo_liu/GeekDesk"
Margin="0,5,10,0" Color="#C71D23"/> Margin="0,5,10,0" Color="#C71D23"/>

View File

@@ -32,6 +32,7 @@ namespace GeekDesk.Control.UserControls.Config
ZFBCode.Source = ImageUtil.Base64ToBitmapImage(Constants.ZFB_CODE_IMG_BASE64); ZFBCode.Source = ImageUtil.Base64ToBitmapImage(Constants.ZFB_CODE_IMG_BASE64);
} }
/// <summary> /// <summary>
/// 移动窗口 /// 移动窗口
/// </summary> /// </summary>

View File

@@ -13,11 +13,11 @@
<cvt:HideTypeConvert x:Key="HideTypeConvert"/> <cvt:HideTypeConvert x:Key="HideTypeConvert"/>
</UserControl.Resources> </UserControl.Resources>
<Grid Background="AliceBlue" MouseDown="DragMove"> <Grid Background="AliceBlue" MouseDown="DragMove">
<hc:SimplePanel Margin="20" > <StackPanel Margin="10">
<hc:UniformSpacingPanel Spacing="10" Margin="0,0,0,10" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<TextBlock Text="面板动作设置" VerticalAlignment="Center"/> <TextBlock Text="面板动作设置" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="30,26.394,0,-16.394" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<CheckBox x:Name="IconIsAdmin" Content="启动时显示主面板" IsChecked="{Binding StartedShowPanel}"> <CheckBox x:Name="IconIsAdmin" Content="启动时显示主面板" IsChecked="{Binding StartedShowPanel}">
<CheckBox.Background> <CheckBox.Background>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0"> <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
@@ -27,7 +27,7 @@
</CheckBox> </CheckBox>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="30,50,0,-102.337" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<CheckBox Content="显示时追随鼠标位置" IsChecked="{Binding FollowMouse}"> <CheckBox Content="显示时追随鼠标位置" IsChecked="{Binding FollowMouse}">
<CheckBox.Background> <CheckBox.Background>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0"> <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
@@ -36,10 +36,31 @@
</CheckBox.Background> </CheckBox.Background>
</CheckBox> </CheckBox>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="30,89.49,-30,-79.49" Grid.ColumnSpan="4">
<TextBlock Text="面板关闭方式" VerticalAlignment="Center" Margin="-26,0,26,0"/> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<CheckBox Content="贴边隐藏" IsChecked="{Binding MarginHide}" Checked="MarginHide_Changed" Unchecked="MarginHide_Changed">
<CheckBox.Background>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
<GradientStop Color="#FF9EA3A6"/>
</LinearGradientBrush>
</CheckBox.Background>
</CheckBox>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="10,115,20,-102.337" Grid.ColumnSpan="4">
<hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<CheckBox Content="主窗口动画效果" IsChecked="{Binding AppAnimation}" Checked="Animation_Checked">
<CheckBox.Background>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
<GradientStop Color="#FF9EA3A6"/>
</LinearGradientBrush>
</CheckBox.Background>
</CheckBox>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="面板关闭方式" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<RadioButton Margin="10,0,0,0" Background="{DynamicResource SecondaryRegionBrush}" <RadioButton Margin="10,0,0,0" Background="{DynamicResource SecondaryRegionBrush}"
Style="{StaticResource RadioButtonIcon}" Content="失去焦点后" Style="{StaticResource RadioButtonIcon}" Content="失去焦点后"
IsChecked="{Binding AppHideType, Mode=TwoWay, Converter={StaticResource HideTypeConvert}, ConverterParameter=1}"/> IsChecked="{Binding AppHideType, Mode=TwoWay, Converter={StaticResource HideTypeConvert}, ConverterParameter=1}"/>
@@ -51,11 +72,11 @@
IsChecked="{Binding AppHideType, Mode=TwoWay, Converter={StaticResource HideTypeConvert}, ConverterParameter=3}"/> IsChecked="{Binding AppHideType, Mode=TwoWay, Converter={StaticResource HideTypeConvert}, ConverterParameter=3}"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="30,164.49,-30,-154.49" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="热键设置" VerticalAlignment="Center" Margin="-26,0,26,0"/> <TextBlock Text="热键设置" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="30,193,0,-180.337" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<TextBlock Text="主面板:" Width="55"/> <TextBlock Text="主面板:" VerticalAlignment="Center" Width="55"/>
<hc:TextBox HorizontalAlignment="Left" <hc:TextBox HorizontalAlignment="Left"
Tag="Main" Tag="Main"
VerticalAlignment="Top" VerticalAlignment="Top"
@@ -65,9 +86,9 @@
Text="{Binding HotkeyStr}" Text="{Binding HotkeyStr}"
KeyDown="HotKeyDown" KeyDown="HotKeyDown"
KeyUp="HotKeyUp" KeyUp="HotKeyUp"
Margin="12.967,-7.38,-12.967,0"/> />
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<!--<hc:UniformSpacingPanel Spacing="10" Margin="30,229,0,-216.337" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<TextBlock Text="新建待办:" Width="55"/> <TextBlock Text="新建待办:" Width="55"/>
<hc:TextBox HorizontalAlignment="Left" <hc:TextBox HorizontalAlignment="Left"
Tag="ToDo" Tag="ToDo"
@@ -78,10 +99,10 @@
Text="{Binding ToDoHotkeyStr}" Text="{Binding ToDoHotkeyStr}"
KeyDown="HotKeyDown" KeyDown="HotKeyDown"
KeyUp="HotKeyUp" KeyUp="HotKeyUp"
Margin="12.967,-7.38,-12.967,0"/> />
</hc:UniformSpacingPanel>--> </hc:UniformSpacingPanel>
<StackPanel hc:Growl.GrowlParent="True" hc:Growl.Token="HotKeyGrowl" VerticalAlignment="Top"/> <StackPanel hc:Growl.GrowlParent="True" hc:Growl.Token="HotKeyGrowl" VerticalAlignment="Top"/>
</hc:SimplePanel> </StackPanel>
</Grid> </Grid>

View File

@@ -1,4 +1,5 @@
using GeekDesk.Control.Windows; using GeekDesk.Constant;
using GeekDesk.Control.Windows;
using GeekDesk.Util; using GeekDesk.Util;
using GeekDesk.ViewModel; using GeekDesk.ViewModel;
using HandyControl.Data; using HandyControl.Data;
@@ -19,6 +20,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Navigation; using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using static GeekDesk.Util.GlobalHotKey;
namespace GeekDesk.Control.UserControls.Config namespace GeekDesk.Control.UserControls.Config
{ {
@@ -28,9 +30,9 @@ namespace GeekDesk.Control.UserControls.Config
public partial class MotionControl : UserControl public partial class MotionControl : UserControl
{ {
public static bool hotkeyFinished = true; //热键设置结束 public static bool hotkeyFinished = true; //热键设置结束
private static KeyEventArgs prevKeyTemp; //上一个按键 private KeyEventArgs prevKeyTemp; //上一个按键
private static List<KeyEventArgs> keysTemp = new List<KeyEventArgs>();//存储一次快捷键集合 private readonly List<KeyEventArgs> keysTemp = new List<KeyEventArgs>();//存储一次快捷键集合
private static AppConfig appConfig = MainWindow.appData.AppConfig; private readonly AppConfig appConfig = MainWindow.appData.AppConfig;
public MotionControl() public MotionControl()
{ {
@@ -212,14 +214,16 @@ namespace GeekDesk.Control.UserControls.Config
{ {
if (MainWindow.hotKeyId != -1) if (MainWindow.hotKeyId != -1)
{ {
Hotkey.UnRegist(new WindowInteropHelper(MainWindow.mainWindow).Handle, Hotkey.keymap[MainWindow.hotKeyId]); //Hotkey.UnRegist(new WindowInteropHelper(MainWindow.mainWindow).Handle, Hotkey.keymap[MainWindow.hotKeyId]);
GlobalHotKey.Dispose(MainWindow.hotKeyId);
} }
MainWindow.RegisterHotKey(false); MainWindow.RegisterHotKey(false);
} else } else
{ {
if (MainWindow.toDoHotKeyId != -1) if (MainWindow.toDoHotKeyId != -1)
{ {
Hotkey.UnRegist(new WindowInteropHelper(MainWindow.toDoInfoWindow).Handle, Hotkey.keymap[MainWindow.toDoHotKeyId]); //Hotkey.UnRegist(new WindowInteropHelper(MainWindow.toDoInfoWindow).Handle, Hotkey.keymap[MainWindow.toDoHotKeyId]);
GlobalHotKey.Dispose(MainWindow.toDoHotKeyId);
} }
MainWindow.RegisterCreateToDoHotKey(false); MainWindow.RegisterCreateToDoHotKey(false);
} }
@@ -242,66 +246,30 @@ namespace GeekDesk.Control.UserControls.Config
} }
} }
//private void ShowApp(MainWindow mainWindow) private void MarginHide_Changed(object sender, RoutedEventArgs e)
//{ {
// if (appConfig.FollowMouse) if (appConfig.MarginHide)
// { {
// ShowAppAndFollowMouse(mainWindow); MainWindow.hide.TimerSet();
// } } else
// else {
// { if (MainWindow.hide.timer != null)
// this.Visibility = Visibility.Visible; {
// } MainWindow.hide.TimerStop();
// Keyboard.Focus(this); }
//} }
}
///// <summary> private void Animation_Checked(object sender, RoutedEventArgs e)
///// 随鼠标位置显示面板 (鼠标始终在中间) {
///// </summary> if (MainWindow.mainWindow.Visibility == Visibility.Collapsed)
//private void ShowAppAndFollowMouse(MainWindow mainWindow) {
//{ MainWindow.mainWindow.Visibility = Visibility.Visible;
// //获取鼠标位置 // 执行一下动画 防止太过突兀
// System.Windows.Point p = MouseUtil.GetMousePosition(); MainWindow.FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
// double left = SystemParameters.VirtualScreenLeft; }
// double top = SystemParameters.VirtualScreenTop; }
// double width = SystemParameters.VirtualScreenWidth;
// double height = SystemParameters.VirtualScreenHeight;
// double right = width - Math.Abs(left);
// double bottom = height - Math.Abs(top);
// if (p.X - mainWindow.Width / 2 < left)
// {
// //判断是否在最左边缘
// mainWindow.Left = left;
// }
// else if (p.X + mainWindow.Width / 2 > right)
// {
// //判断是否在最右边缘
// mainWindow.Left = right - mainWindow.Width;
// }
// else
// {
// mainWindow.Left = p.X - mainWindow.Width / 2;
// }
// if (p.Y - mainWindow.Height / 2 < top)
// {
// //判断是否在最上边缘
// mainWindow.Top = top;
// }
// else if (p.Y + mainWindow.Height / 2 > bottom)
// {
// //判断是否在最下边缘
// mainWindow.Top = bottom - mainWindow.Height;
// }
// else
// {
// mainWindow.Top = p.Y - mainWindow.Height / 2;
// }
// mainWindow.Visibility = Visibility.Visible;
//}
} }
} }

View File

@@ -12,11 +12,11 @@
<Grid> <Grid>
<Grid MouseDown="DragMove" Background="AliceBlue"> <Grid MouseDown="DragMove" Background="AliceBlue">
<hc:SimplePanel Margin="20" > <StackPanel Margin="20" >
<hc:UniformSpacingPanel Spacing="10" Margin="0,0,-40,-12" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<TextBlock Text="背景图片" VerticalAlignment="Center"/> <TextBlock Text="背景图片" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="19,20,-59,-31.5" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="20,0,0,0" Grid.ColumnSpan="4">
<TextBlock Text="图片路径:" VerticalAlignment="Center"/> <TextBlock Text="图片路径:" VerticalAlignment="Center"/>
<TextBlock Text="{Binding BacImgName}" Width="200" <TextBlock Text="{Binding BacImgName}" Width="200"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -28,7 +28,7 @@
<Button Content="修改" Click="BGButton_Click"/> <Button Content="修改" Click="BGButton_Click"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="19,60,11,-36.433" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="20,0,0,0" Grid.ColumnSpan="4">
<CheckBox x:Name="IconIsAdmin" Content="毛玻璃效果" IsChecked="{Binding BlurEffect}"> <CheckBox x:Name="IconIsAdmin" Content="毛玻璃效果" IsChecked="{Binding BlurEffect}">
<CheckBox.Background> <CheckBox.Background>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0"> <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
@@ -38,16 +38,16 @@
</CheckBox> </CheckBox>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:Divider LineStrokeDashArray="3,3" Margin="0,91.5,0,34.5" LineStroke="Black" Grid.ColumnSpan="4"/> <hc:Divider LineStrokeDashArray="3,3" LineStroke="Black" Grid.ColumnSpan="4"/>
<StackPanel Margin="0,30,0,0"> <StackPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,80,-40,-89.5" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<TextBlock Text="托盘不透明度" VerticalAlignment="Center"/> <TextBlock Text="托盘不透明度" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,110,-40,-122" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<hc:PreviewSlider Value="{Binding CardOpacity}" <hc:PreviewSlider Value="{Binding CardOpacity}"
Maximum="100" Maximum="100"
Margin="0,-12,-313.5,19.5" Width="350"
> >
<hc:PreviewSlider.PreviewContent> <hc:PreviewSlider.PreviewContent>
<Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/> <Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
@@ -56,13 +56,13 @@
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,135,-40,-161.626" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="背景图片不透明度" VerticalAlignment="Center"/> <TextBlock Text="背景图片不透明度" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,155,-40,-183" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<hc:PreviewSlider Value="{Binding BgOpacity}" <hc:PreviewSlider Value="{Binding BgOpacity}"
Maximum="100" Maximum="100"
Margin="0,0,-313.5,7.5" Width="350"
> >
<hc:PreviewSlider.PreviewContent> <hc:PreviewSlider.PreviewContent>
<Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/> <Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
@@ -71,14 +71,14 @@
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,195,-40,-208.813" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="主面板不透明度" VerticalAlignment="Center"/> <TextBlock Text="主面板不透明度" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,215,-40,-241" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<hc:PreviewSlider Value="{Binding PannelOpacity}" <hc:PreviewSlider Value="{Binding PannelOpacity}"
Minimum="50" Minimum="50"
Maximum="100" Maximum="100"
Margin="0,0,-313.5,7.5" Width="350"
> >
<hc:PreviewSlider.PreviewContent> <hc:PreviewSlider.PreviewContent>
<Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/> <Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
@@ -86,27 +86,44 @@
</hc:PreviewSlider> </hc:PreviewSlider>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,245,-40,-279.313" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="主面板圆角大小" VerticalAlignment="Center"/> <TextBlock Text="主面板圆角大小" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,265,-40,-321" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4">
<hc:PreviewSlider Value="{Binding PannelCornerRadius}" <hc:PreviewSlider Value="{Binding PannelCornerRadius}"
Maximum="25" Maximum="25"
Margin="0,0,-313.5,7.5" Width="350"
> >
<hc:PreviewSlider.PreviewContent> <hc:PreviewSlider.PreviewContent>
<Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/> <Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
</hc:PreviewSlider.PreviewContent> </hc:PreviewSlider.PreviewContent>
</hc:PreviewSlider> </hc:PreviewSlider>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<TextBlock Text="图标大小" VerticalAlignment="Center"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="10,5,0,0" Grid.ColumnSpan="4"
Background="#00FFFFFF"
PreviewMouseLeftButtonDown="PreviewSlider_MouseLeftButtonUp"
>
<hc:PreviewSlider Value="{Binding ImageWidth, Mode=TwoWay}"
Minimum="40"
Maximum="60"
Width="350"
>
<hc:PreviewSlider.PreviewContent>
<Label Style="{StaticResource LabelPrimary}" Content="{Binding Path=(hc:PreviewSlider.PreviewPosition),RelativeSource={RelativeSource Self}}" ContentStringFormat="#0"/>
</hc:PreviewSlider.PreviewContent>
</hc:PreviewSlider>
</hc:UniformSpacingPanel>
</StackPanel> </StackPanel>
<hc:Divider LineStrokeDashArray="3,3" Margin="0,341.5,0,-215.5" LineStroke="Black" Grid.ColumnSpan="4"/> <hc:Divider LineStrokeDashArray="3,3" LineStroke="Black" Grid.ColumnSpan="4"/>
<hc:UniformSpacingPanel Spacing="10" Margin="0,354,-40,-388.313" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<TextBlock VerticalAlignment="Center" Text="图标字体颜色:" /> <TextBlock VerticalAlignment="Center" Text="图标字体颜色:" />
<TextBlock VerticalAlignment="Center" Text="{Binding TextColor}" Width="100"/> <TextBlock VerticalAlignment="Center" Text="{Binding TextColor}" Width="100"/>
<Button Content="选择" Click="ColorButton_Click"/> <Button Content="选择" Click="ColorButton_Click"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
</hc:SimplePanel> </StackPanel>
</Grid> </Grid>
<StackPanel x:Name="ColorPanel" Visibility="Collapsed" VerticalAlignment="Center"> <StackPanel x:Name="ColorPanel" Visibility="Collapsed" VerticalAlignment="Center">

View File

@@ -3,6 +3,7 @@ using GeekDesk.ViewModel;
using Microsoft.Win32; using Microsoft.Win32;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -87,5 +88,40 @@ namespace GeekDesk.Control.UserControls.Config
Window.GetWindow(this).DragMove(); Window.GetWindow(this).DragMove();
} }
} }
private void PreviewSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
CheckButtonUpClass cbu = new CheckButtonUpClass
{
e = e
};
System.Threading.ThreadStart ts = new System.Threading.ThreadStart(cbu.CheckButtonUp);
System.Threading.Thread t = new System.Threading.Thread(ts);
t.Start();
}
private class CheckButtonUpClass
{
public MouseButtonEventArgs e;
public void CheckButtonUp()
{
while (true)
{
if (e.LeftButton == MouseButtonState.Released)
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
AppData appData = MainWindow.appData;
ObservableCollection<IconInfo> selectIcons = appData.AppConfig.SelectedMenuIcons;
appData.AppConfig.SelectedMenuIcons = null;
appData.AppConfig.SelectedMenuIcons = selectIcons;
}));
return;
}
System.Threading.Thread.Sleep(50);
}
}
}
} }
} }

View File

@@ -12,12 +12,9 @@
<UserControl.Resources> <UserControl.Resources>
<!--右侧栏样式动画--> <!--右侧栏样式动画-->
<Style x:Key="ImageStyle" TargetType="Image"> <Style x:Key="ImageStyle" TargetType="Image">
<Setter Property="Width" Value="{Binding ImageWidth}"/> <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImageWidth, Mode=OneWay}"/>
<Setter Property="Height" Value="{Binding ImageHeight}"/> <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImageHeight, Mode=OneWay}"/>
<Setter Property="Source" Value="{Binding BitmapImage}"/> <Setter Property="Source" Value="{Binding BitmapImage}"/>
<Setter Property="RenderOptions.BitmapScalingMode" Value="LowQuality" />
<Setter Property="RenderOptions.CachingHint" Value="Cache" />
</Style> </Style>
<Style x:Key="MyListBoxItemStyle" TargetType="{x:Type ListBoxItem}"> <Style x:Key="MyListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template"> <Setter Property="Template">
@@ -60,9 +57,9 @@
</ListBox.Background> </ListBox.Background>
<ListBox.ItemsPanel> <ListBox.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<DraggAnimatedPanel:DraggAnimatedPanel ItemsHeight="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight}" <DraggAnimatedPanel:DraggAnimatedPanel Background="#00FFFFFF"
ItemsWidth="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth}" ItemsWidth="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"
Background="#00FFFFFF" ItemsHeight="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
SwapCommand="{Binding SwapCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/> SwapCommand="{Binding SwapCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
</ItemsPanelTemplate> </ItemsPanelTemplate>
@@ -82,14 +79,18 @@
<ListBox.ItemContainerStyle> <ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem" BasedOn="{StaticResource MyListBoxItemStyle}"> <Style TargetType="ListBoxItem" BasedOn="{StaticResource MyListBoxItemStyle}">
<Setter Property="ContextMenu" Value="{StaticResource IconDialog}"/> <Setter Property="ContextMenu" Value="{StaticResource IconDialog}"/>
<!--<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"/>
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"/>-->
</Style> </Style>
</ListBox.ItemContainerStyle> </ListBox.ItemContainerStyle>
<!--Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"-->
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Tag="{Binding}" <hc:SimpleStackPanel Tag="{Binding}"
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight}" Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth}" Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
hc:Poptip.HitMode="None" hc:Poptip.HitMode="None"
hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
@@ -100,7 +101,7 @@
MouseEnter="StackPanel_MouseEnter" MouseEnter="StackPanel_MouseEnter"
MouseLeave="StackPanel_MouseLeave" MouseLeave="StackPanel_MouseLeave"
> >
<Image CacheMode="{Binding BitmapCache}" Style="{StaticResource ImageStyle}"/> <Image Style="{StaticResource ImageStyle}"/>
<TextBlock MaxWidth="80" <TextBlock MaxWidth="80"
Margin="0,5,0,0" Margin="0,5,0,0"
MaxHeight="40" MaxHeight="40"
@@ -111,7 +112,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
Foreground="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.TextColor}" Foreground="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.TextColor}"
Text="{Binding Name}"/> Text="{Binding Name}"/>
</StackPanel> </hc:SimpleStackPanel>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>

View File

@@ -3,6 +3,7 @@ using GeekDesk.Constant;
using GeekDesk.Control.Other; using GeekDesk.Control.Other;
using GeekDesk.Util; using GeekDesk.Util;
using GeekDesk.ViewModel; using GeekDesk.ViewModel;
using HandyControl.Controls;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
@@ -11,6 +12,7 @@ using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@@ -130,15 +132,35 @@ namespace GeekDesk.Control.UserControls.PannelCard
p.StartInfo.ErrorDialog = false; p.StartInfo.ErrorDialog = false;
if (appData.AppConfig.AppHideType == AppHideType.START_EXE) if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
{ {
Window parentWin = Window.GetWindow(this); //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
parentWin.Visibility = Visibility.Collapsed; if (appData.AppConfig.MarginHide)
{
if (!MainWindow.hide.IsMargin())
{
MainWindow.HideApp();
}
}
else
{
MainWindow.HideApp();
}
} }
break;// c#好像不能case穿透 break;// c#好像不能case穿透
case IconStartType.DEFAULT_STARTUP: case IconStartType.DEFAULT_STARTUP:
if (appData.AppConfig.AppHideType == AppHideType.START_EXE) if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
{ {
Window parentWin = Window.GetWindow(this); //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
parentWin.Visibility = Visibility.Collapsed; if (appData.AppConfig.MarginHide)
{
if (!MainWindow.hide.IsMargin())
{
MainWindow.HideApp();
}
} else
{
MainWindow.HideApp();
}
} }
break; break;
case IconStartType.SHOW_IN_EXPLORE: case IconStartType.SHOW_IN_EXPLORE:
@@ -243,43 +265,142 @@ namespace GeekDesk.Control.UserControls.PannelCard
private void StackPanel_MouseEnter(object sender, MouseEventArgs e) private void StackPanel_MouseEnter(object sender, MouseEventArgs e)
{ {
ImgStroyBoard(sender, (int)CommonEnum.IMAGE_HEIGHT_AM, (int)CommonEnum.IMAGE_WIDTH_AM, 1);
double width = appData.AppConfig.ImageWidth;
double height = appData.AppConfig.ImageHeight;
width += width * 0.15;
height += height * 0.15;
ImgStoryBoard(sender, (int)width, (int)height, 1, true);
} }
private void StackPanel_MouseLeave(object sender, MouseEventArgs e) private void StackPanel_MouseLeave(object sender, MouseEventArgs e)
{ {
ImgStroyBoard(sender, (int)CommonEnum.IMAGE_HEIGHT, (int)CommonEnum.IMAGE_WIDTH, 500); ImgStoryBoard(sender, appData.AppConfig.ImageWidth, appData.AppConfig.ImageHeight, 220);
} }
private void ImgStroyBoard(object sender, int height, int width, int milliseconds) private void ImgStoryBoard(object sender, int height, int width, int milliseconds, bool checkRmStoryboard = false)
{ {
if (appData.AppConfig.PMModel) return; if (appData.AppConfig.PMModel) return;
StackPanel sp = sender as StackPanel; Panel sp = sender as Panel;
DependencyObject dos = sp.Parent;
Image img = sp.Children[0] as Image; Image img = sp.Children[0] as Image;
double afterHeight = img.Height;
double afterWidth = img.Width;
DoubleAnimation heightAnimation = new DoubleAnimation(); //动画定义
DoubleAnimation widthAnimation = new DoubleAnimation(); Storyboard myStoryboard = new Storyboard();
heightAnimation.From = img.Height;
widthAnimation.From = img.Width;
heightAnimation.To = height;
widthAnimation.To = width;
heightAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds)); DoubleAnimation heightAnimation = new DoubleAnimation
widthAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds)); {
From = afterHeight,
To = height,
Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds))
};
DoubleAnimation widthAnimation = new DoubleAnimation
{
From = afterWidth,
To = width,
Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds))
};
Timeline.SetDesiredFrameRate(heightAnimation, 60); Timeline.SetDesiredFrameRate(heightAnimation, 60);
Timeline.SetDesiredFrameRate(widthAnimation, 60); Timeline.SetDesiredFrameRate(widthAnimation, 60);
img.BeginAnimation(HeightProperty, heightAnimation); Storyboard.SetTarget(widthAnimation, img);
Storyboard.SetTargetProperty(widthAnimation, new PropertyPath("Width"));
Storyboard.SetTarget(heightAnimation, img);
Storyboard.SetTargetProperty(heightAnimation, new PropertyPath("Height"));
myStoryboard.Children.Add(heightAnimation);
myStoryboard.Children.Add(widthAnimation);
CheckRemoveStoryboard crs = new CheckRemoveStoryboard
{
sb = myStoryboard,
sp = sp,
heightAnimation = heightAnimation,
widthAnimation = widthAnimation,
img = img,
isMouseOver = !checkRmStoryboard
};
heightAnimation.Completed += (s, e) =>
{
if (checkRmStoryboard)
{
ThreadStart ts = new ThreadStart(crs.Remove);
System.Threading.Thread t = new System.Threading.Thread(ts);
t.Start();
} else
{
img.BeginAnimation(WidthProperty, null);
img.BeginAnimation(HeightProperty, null);
}
};
img.BeginAnimation(WidthProperty, widthAnimation); img.BeginAnimation(WidthProperty, widthAnimation);
img.BeginAnimation(HeightProperty, heightAnimation);
//myStoryboard.Completed += (s, e) =>
//{
// if (checkRmStoryboard || true)
// {
// ThreadStart ts = new ThreadStart(crs.Remove);
// System.Threading.Thread t = new System.Threading.Thread(ts);
// t.Start();
// }
// else
// {
// myStoryboard.Remove();
// }
//};
//myStoryboard.Begin();
}
private class CheckRemoveStoryboard
{
public Storyboard sb;
public Panel sp;
public Image img;
public DoubleAnimation heightAnimation;
public DoubleAnimation widthAnimation;
public bool isMouseOver;
public void Remove()
{
while (true)
{
if (sp.IsMouseOver == isMouseOver)
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
img.BeginAnimation(WidthProperty, null);
img.BeginAnimation(HeightProperty, null);
//heightAnimation.FillBehavior = FillBehavior.Stop;
//widthAnimation.FillBehavior = FillBehavior.Stop;
}));
return;
}
else
{
System.Threading.Thread.Sleep(500);
}
}
}
}
public void RemoveSB(Object sb)
{
Storyboard sb2 = sb as Storyboard;
System.Threading.Thread.Sleep(500);
sb2.Remove();
} }
private void AddUrlIcon(object sender, RoutedEventArgs e) private void AddUrlIcon(object sender, RoutedEventArgs e)

View File

@@ -19,12 +19,18 @@ using System.Windows.Shapes;
namespace GeekDesk.Control.UserControls.Backlog namespace GeekDesk.Control.UserControls.Backlog
{ {
public enum ToDoType
{
HISTORY = 1,
NEW = 2
}
/// <summary> /// <summary>
/// BacklogControl.xaml 的交互逻辑 /// BacklogControl.xaml 的交互逻辑
/// </summary> /// </summary>
public partial class TodoControl : UserControl public partial class TodoControl : UserControl
{ {
private AppData appData = MainWindow.appData; public ToDoType type;
public TodoControl() public TodoControl()
{ {
InitializeComponent(); InitializeComponent();
@@ -37,7 +43,14 @@ namespace GeekDesk.Control.UserControls.Backlog
{ {
if (isConfirmed) if (isConfirmed)
{ {
appData.ToDoList.Remove(info); if (type == ToDoType.NEW)
{
MainWindow.appData.ToDoList.Remove(info);
}
else
{
MainWindow.appData.HiToDoList.Remove(info);
}
CommonCode.SaveAppData(MainWindow.appData); CommonCode.SaveAppData(MainWindow.appData);
} }
return true; return true;

View File

@@ -121,7 +121,7 @@
</hc:SideMenu> </hc:SideMenu>
</hc:Card> </hc:Card>
<hc:ScrollViewer Grid.Row="0" Grid.Column="1"> <hc:ScrollViewer Grid.Row="0" Grid.Column="1">
<hc:Card x:Name="RightCard" Height="448"> <hc:Card x:Name="RightCard" Height="480">
</hc:Card> </hc:Card>
</hc:ScrollViewer> </hc:ScrollViewer>

View File

@@ -15,10 +15,10 @@ namespace GeekDesk.Control.Windows
/// </summary> /// </summary>
public partial class ConfigWindow public partial class ConfigWindow
{ {
private static AboutControl about = new AboutControl(); private static readonly AboutControl about = new AboutControl();
private static ThemeControl theme = new ThemeControl(); private static readonly ThemeControl theme = new ThemeControl();
private static MotionControl motion = new MotionControl(); private static readonly MotionControl motion = new MotionControl();
private static OtherControl other = new OtherControl(); private static readonly OtherControl other = new OtherControl();
public MainWindow mainWindow; public MainWindow mainWindow;
private ConfigWindow(AppConfig appConfig, MainWindow mainWindow) private ConfigWindow(AppConfig appConfig, MainWindow mainWindow)

View File

@@ -4,10 +4,11 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol" xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:cvt="clr-namespace:GeekDesk.Converts"
xmlns:local="clr-namespace:GeekDesk" xmlns:local="clr-namespace:GeekDesk"
mc:Ignorable="d" mc:Ignorable="d"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
Height="670" Height="700"
Width="450" Width="450"
Title="TaskInfo" Title="TaskInfo"
WindowStyle="None" WindowStyle="None"
@@ -15,7 +16,7 @@
Background="Transparent" ShowInTaskbar="False" Background="Transparent" ShowInTaskbar="False"
> >
<Window.Resources> <Window.Resources>
<cvt:TodoTaskExecConvert x:Key="TodoTaskExecConvert"/>
</Window.Resources> </Window.Resources>
<Border CornerRadius="3" BorderThickness="2" BorderBrush="Black" Margin="0,0,0,313.323" MouseDown="DragMove"> <Border CornerRadius="3" BorderThickness="2" BorderBrush="Black" Margin="0,0,0,313.323" MouseDown="DragMove">
<Border.Background> <Border.Background>
@@ -23,48 +24,72 @@
</Border.Background> </Border.Background>
<Border.Resources> <Border.Resources>
<Style x:Key="LeftTB" TargetType="TextBlock" BasedOn="{StaticResource TextBlockBaseStyle}"> <Style x:Key="LeftTB" TargetType="TextBlock" BasedOn="{StaticResource TextBlockBaseStyle}">
<Setter Property="Width" Value="65"/> <Setter Property="Width" Value="67"/>
<Setter Property="HorizontalAlignment" Value="Left"/> <Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="FontSize" Value="14"/> <Setter Property="FontSize" Value="14"/>
</Style> </Style>
</Border.Resources> </Border.Resources>
<Grid Margin="0,0,0,8"> <Grid Margin="0,0,0,8">
<hc:SimplePanel Margin="20" HorizontalAlignment="Center"> <StackPanel Margin="20" HorizontalAlignment="Center">
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4">
<WrapPanel> <WrapPanel VerticalAlignment="Center">
<TextBlock Text="待办任务:" Style="{StaticResource LeftTB}"/> <TextBlock Text="待办任务:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" /> <TextBlock Text="*" Foreground="Red" />
</WrapPanel> </WrapPanel>
<TextBox x:Name="Title" Width="290" FontSize="14" /> <TextBox x:Name="Title" Width="290" Text="{Binding Title, Mode=OneWay}" FontSize="14" />
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,48.997,0,-48.997"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="待办详情:" Style="{StaticResource LeftTB}"/> <TextBlock Text="待办详情:" Style="{StaticResource LeftTB}"/>
<TextBox x:Name="Msg" TextWrapping="Wrap" <TextBox x:Name="Msg" TextWrapping="Wrap"
Margin="5,0,0,0"
Text="{Binding Msg, Mode=OneWay}"
AcceptsReturn="True" AcceptsReturn="True"
VerticalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"
Height="100" MaxHeight="150" MinHeight="100" Width="290" MinWidth="290" Height="100" MaxHeight="150" MinHeight="100" Width="290" MinWidth="290"
VerticalAlignment="Center" HorizontalAlignment="Center"/> VerticalAlignment="Center" HorizontalAlignment="Center"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,167.622,0,-167.622"> <hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="待办时间*:" Style="{StaticResource LeftTB}"/> <TextBlock Text="运行方式:" Style="{StaticResource LeftTB}"/>
<hc:DateTimePicker x:Name="ExeTime" ErrorStr="test" Width="200"/> <RadioButton Margin="10,0,0,0" Checked="ExecType_Checked" Tag="1" Background="{DynamicResource SecondaryRegionBrush}"
Style="{StaticResource RadioButtonIcon}" Content="指定时间"
IsChecked="{Binding ExecType, Mode=OneWay, Converter={StaticResource TodoTaskExecConvert}, ConverterParameter=1}"/>
<RadioButton Margin="10,0,0,0" Checked="ExecType_Checked" Background="{DynamicResource SecondaryRegionBrush}" Tag="2"
Style="{StaticResource RadioButtonIcon}" Content="CRON表达式"
IsChecked="{Binding ExecType, Mode=OneWay, Converter={StaticResource TodoTaskExecConvert}, ConverterParameter=2}"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,228,0,-228"> <hc:UniformSpacingPanel x:Name="SetTimePanel" Visibility="Visible" Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="指定时间:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" Margin="-10,0,0,0"/>
<hc:DateTimePicker x:Name="ExeTime" Text="{Binding ExeTime, Mode=OneWay}" ErrorStr="Error!" Width="200" Margin="-5.2,0,0,0"/>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel x:Name="CronPanel" Visibility="Collapsed" Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<WrapPanel VerticalAlignment="Center">
<TextBlock Text="CRON:" Style="{StaticResource LeftTB}"/>
<TextBlock Text="*" Foreground="Red" />
</WrapPanel>
<TextBox x:Name="Cron" Width="290" Text="{Binding Cron, Mode=OneWay}" FontSize="14" />
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Grid.ColumnSpan="4" Margin="0,10,0,0">
<TextBlock Text="完成时间:" Style="{StaticResource LeftTB}"/> <TextBlock Text="完成时间:" Style="{StaticResource LeftTB}"/>
<TextBlock x:Name="DoneTime" Width="200"/> <TextBlock x:Name="DoneTime" Text="{Binding DoneTime, Mode=OneWay}" Width="200"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="10" Margin="0,273.333,0,-93.333" Grid.ColumnSpan="4"> <hc:UniformSpacingPanel Spacing="10" Margin="0,10,0,0" Grid.ColumnSpan="4">
<Button Content="保存" Background="#5BC0DE" <Button Content="保存" Background="#5BC0DE"
Foreground="White" Margin="320,6,-208,-10" Foreground="White" Margin="320,6,-208,-10"
Click="Save_Button_Click"/> Click="Save_Button_Click"/>
</hc:UniformSpacingPanel> </hc:UniformSpacingPanel>
</hc:SimplePanel> </StackPanel>
<Button Panel.ZIndex="2" Width="22" Height="22" Click="Close_Button_Click" Style="{StaticResource ButtonIcon}" Foreground="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" hc:IconElement.Geometry="{StaticResource ErrorGeometry}" Padding="0" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0"/> <Button Panel.ZIndex="2" Width="22" Height="22" Click="Close_Button_Click" Style="{StaticResource ButtonIcon}" Foreground="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" hc:IconElement.Geometry="{StaticResource ErrorGeometry}" Padding="0" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0"/>
<StackPanel hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,0"/> <StackPanel hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,0"/>
</Grid> </Grid>

View File

@@ -1,6 +1,8 @@
using GeekDesk.Util; using GeekDesk.Constant;
using GeekDesk.Util;
using GeekDesk.ViewModel; using GeekDesk.ViewModel;
using HandyControl.Controls; using HandyControl.Controls;
using Quartz;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -29,23 +31,31 @@ namespace GeekDesk.Control.Windows
private AppData appData = MainWindow.appData; private AppData appData = MainWindow.appData;
private ToDoInfo info; //private ToDoInfo info;
private ToDoInfoWindow() private ToDoInfoWindow()
{ {
InitializeComponent(); InitializeComponent();
ExeTime.SelectedDateTime = DateTime.Now.AddMinutes(10);
this.Topmost = true; this.Topmost = true;
DateTime time = DateTime.Now.AddMinutes(10);
ExeTime.SelectedDateTime = time;
SetTimePanel.Visibility = Visibility.Visible;
this.DataContext = new ToDoInfo {
ExeTime = time.ToString("yyyy-MM-dd HH:mm:ss")
};
} }
private ToDoInfoWindow(ToDoInfo info) private ToDoInfoWindow(ToDoInfo info)
{ {
InitializeComponent(); InitializeComponent();
this.Topmost = true; this.Topmost = true;
Title.Text = info.Title; this.DataContext = info;
Msg.Text = info.Msg; SetTimePanel.Visibility = Visibility.Visible;
ExeTime.Text = info.ExeTime; //Title.Text = info.Title;
DoneTime.Text = info.DoneTime; //Msg.Text = info.Msg;
this.info = info; //ExeTime.Text = info.ExeTime;
//DoneTime.Text = info.DoneTime;
//this.info = info;
} }
@@ -79,41 +89,70 @@ namespace GeekDesk.Control.Windows
/// <param name="e"></param> /// <param name="e"></param>
private void Save_Button_Click(object sender, RoutedEventArgs e) private void Save_Button_Click(object sender, RoutedEventArgs e)
{ {
DateTime dt; DateTime dt;
if (Title.Text.Trim() == "" || ExeTime.Text.Trim() == "") string execTime;
TodoTaskExecType execType;
if (Title.Text.Trim() == "")
{ {
Growl.Warning("任务标题 和 待办时间不能为空!"); Growl.Warning("任务标题不能为空!");
return; return;
} else } else
{ {
try if (SetTimePanel.Visibility == Visibility.Visible)
{ {
dt = Convert.ToDateTime(ExeTime.Text); execType = TodoTaskExecType.SET_TIME;
} catch (Exception) if (ExeTime.Text.Trim() == "")
{ {
Growl.Warning("请输入正确的时间!"); Growl.Warning("执行时间不能为空!");
return; return;
}
try
{
dt = Convert.ToDateTime(ExeTime.Text);
}
catch (Exception)
{
Growl.Warning("请输入正确的时间!");
return;
}
execTime = ExeTime.Text;
} else {
execType = TodoTaskExecType.CRON;
if (Cron.Text.Trim() == "")
{
Growl.Warning("Cron表达式不能为空!");
return;
}
try
{
bool isValid = CronExpression.IsValidExpression(Cron.Text);
if (!isValid) throw new Exception();
} catch (Exception)
{
Growl.Warning("请输入正确的Cron表达式!");
return;
}
CronExpression exp = new CronExpression(Cron.Text);
DateTime dd = DateTime.Now;
DateTimeOffset ddo = DateTime.SpecifyKind(dd, DateTimeKind.Local);
ddo = (DateTimeOffset)exp.GetNextValidTimeAfter(ddo);
execTime = ddo.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss");
} }
} }
if (windowType == NEW_TODO) dt = Convert.ToDateTime(execTime);
ToDoInfo info = new ToDoInfo
{ {
info = new ToDoInfo Title = Title.Text,
{ Msg = Msg.Text,
Title = Title.Text, ExeTime = execTime,
Msg = Msg.Text, ExecType = execType,
ExeTime = ExeTime.Text Cron = Cron.Text
}; };
appData.ToDoList.Add(info); if (windowType != NEW_TODO)
} else
{ {
appData.HiToDoList.Remove(info); appData.HiToDoList.Remove(this.DataContext as ToDoInfo);
info.Title = Title.Text;
info.Msg = Msg.Text;
info.ExeTime = ExeTime.Text;
info.DoneTime = null;
appData.ToDoList.Add(info);
} }
appData.ToDoList.Add(info);
DateTime dtNow = DateTime.Now; DateTime dtNow = DateTime.Now;
TimeSpan ts = dt.Subtract(dtNow); TimeSpan ts = dt.Subtract(dtNow);
@@ -149,6 +188,18 @@ namespace GeekDesk.Control.Windows
window.Visibility = Visibility.Visible; window.Visibility = Visibility.Visible;
} }
public static void ShowOrHide()
{
if (window == null || !window.Activate())
{
window = new ToDoInfoWindow();
window.Show();
} else
{
window.Close();
}
}
public static System.Windows.Window GetThis() public static System.Windows.Window GetThis()
{ {
@@ -172,5 +223,21 @@ namespace GeekDesk.Control.Windows
windowType = DETAIL_TODO; windowType = DETAIL_TODO;
window2.Show(); window2.Show();
} }
private void ExecType_Checked(object sender, RoutedEventArgs e)
{
TodoTaskExecType tag = (TodoTaskExecType)Convert.ToInt32((sender as RadioButton).Tag.ToString());
switch (tag)
{
case TodoTaskExecType.SET_TIME:
SetTimePanel.Visibility = Visibility.Visible;
CronPanel.Visibility = Visibility.Collapsed;
break;
default:
CronPanel.Visibility = Visibility.Visible;
SetTimePanel.Visibility = Visibility.Collapsed;
break;
}
}
} }
} }

View File

@@ -64,9 +64,11 @@ namespace GeekDesk.Control.Windows
{ {
case "History": case "History":
backlog.BacklogList.ItemsSource = appData.HiToDoList; backlog.BacklogList.ItemsSource = appData.HiToDoList;
backlog.type = ToDoType.HISTORY;
break; break;
default: default:
backlog.BacklogList.ItemsSource = appData.ToDoList; backlog.BacklogList.ItemsSource = appData.ToDoList;
backlog.type = ToDoType.NEW;
break; break;
} }
} }

View File

@@ -0,0 +1,29 @@
using GeekDesk.Constant;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace GeekDesk.Converts
{
public class TodoTaskExecConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (TodoTaskExecType)value == (TodoTaskExecType)int.Parse(parameter.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool isChecked = (bool)value;
if (!isChecked)
{
return null;
}
return (TodoTaskExecType)int.Parse(parameter.ToString());
}
}
}

View File

@@ -60,16 +60,40 @@
<Reference Include="HandyControl, Version=3.1.0.0, Culture=neutral, PublicKeyToken=45be8712787a1e5b, processorArchitecture=MSIL"> <Reference Include="HandyControl, Version=3.1.0.0, Culture=neutral, PublicKeyToken=45be8712787a1e5b, processorArchitecture=MSIL">
<HintPath>packages\HandyControl.3.1.0\lib\net472\HandyControl.dll</HintPath> <HintPath>packages\HandyControl.3.1.0\lib\net472\HandyControl.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="Quartz, Version=3.3.3.0, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL">
<HintPath>packages\Quartz.3.3.3\lib\net472\Quartz.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Drawing.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Drawing.Common.6.0.0-preview.6.21352.12\lib\net461\System.Drawing.Common.dll</HintPath> <HintPath>packages\System.Drawing.Common.6.0.0-preview.6.21352.12\lib\net461\System.Drawing.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" /> <Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@@ -98,6 +122,7 @@
<Compile Include="Constant\CommonEnum.cs" /> <Compile Include="Constant\CommonEnum.cs" />
<Compile Include="Constant\IconStartType.cs" /> <Compile Include="Constant\IconStartType.cs" />
<Compile Include="Constant\SortType.cs" /> <Compile Include="Constant\SortType.cs" />
<Compile Include="Constant\TodoTaskExecType.cs" />
<Compile Include="Constant\UpdateType.cs" /> <Compile Include="Constant\UpdateType.cs" />
<Compile Include="Control\Other\BacklogNotificatin.xaml.cs"> <Compile Include="Control\Other\BacklogNotificatin.xaml.cs">
<DependentUpon>BacklogNotificatin.xaml</DependentUpon> <DependentUpon>BacklogNotificatin.xaml</DependentUpon>
@@ -151,6 +176,7 @@
<DependentUpon>UpdateWindow.xaml</DependentUpon> <DependentUpon>UpdateWindow.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Converts\DoubleToGridLength.cs" /> <Compile Include="Converts\DoubleToGridLength.cs" />
<Compile Include="Converts\TodoTaskExecConvert.cs" />
<Compile Include="Converts\IntToCornerRadius.cs" /> <Compile Include="Converts\IntToCornerRadius.cs" />
<Compile Include="Converts\OpcityConvert.cs" /> <Compile Include="Converts\OpcityConvert.cs" />
<Compile Include="Converts\UpdateTypeConvert.cs" /> <Compile Include="Converts\UpdateTypeConvert.cs" />
@@ -160,12 +186,13 @@
<Compile Include="Task\ToDoTask.cs" /> <Compile Include="Task\ToDoTask.cs" />
<Compile Include="Thread\UpdateThread.cs" /> <Compile Include="Thread\UpdateThread.cs" />
<Compile Include="Util\AeroGlassHelper.cs" /> <Compile Include="Util\AeroGlassHelper.cs" />
<Compile Include="Util\GlobalHotKey.cs" />
<Compile Include="Util\CommonCode.cs" /> <Compile Include="Util\CommonCode.cs" />
<Compile Include="Util\ConsoleManager.cs" /> <Compile Include="Util\ConsoleManager.cs" />
<Compile Include="Util\DragAdorner.cs" /> <Compile Include="Util\DragAdorner.cs" />
<Compile Include="Util\FileIcon.cs" /> <Compile Include="Util\FileIcon.cs" />
<Compile Include="Util\FileUtil.cs" /> <Compile Include="Util\FileUtil.cs" />
<Compile Include="Util\HotKey.cs" /> <Compile Include="Util\MarginHide.cs" />
<Compile Include="Util\HttpUtil.cs" /> <Compile Include="Util\HttpUtil.cs" />
<Compile Include="Util\ImageUtil.cs" /> <Compile Include="Util\ImageUtil.cs" />
<Compile Include="Util\ListViewDragDropManager.cs" /> <Compile Include="Util\ListViewDragDropManager.cs" />

View File

@@ -14,10 +14,12 @@
d:DesignHeight="500" d:DesignWidth="700" d:DesignHeight="500" d:DesignWidth="700"
WindowStyle="None" WindowStyle="None"
AllowsTransparency="True" AllowsTransparency="True"
Background="Transparent" Background="#00FFFFFF"
OpacityMask ="White" OpacityMask ="White"
Deactivated="window_Deactivated" ShowInTaskbar="False"
SizeChanged="window_SizeChanged" Opacity="0"
Deactivated="Window_Deactivated"
SizeChanged="Window_SizeChanged"
> >
<WindowChrome.WindowChrome> <WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0" ResizeBorderThickness="10"/> <WindowChrome CaptionHeight="0" ResizeBorderThickness="10"/>
@@ -114,7 +116,9 @@
<ContextMenu Width="130"> <ContextMenu Width="130">
<MenuItem Header="打开面板" Click="ShowApp"/> <MenuItem Header="打开面板" Click="ShowApp"/>
<MenuItem Header="待办" Click="BacklogMenuClick"/> <MenuItem Header="待办" Click="BacklogMenuClick"/>
<MenuItem Header="程序目录" Click="OpenThisDir"/>
<MenuItem Header="设置" Click="ConfigApp"/> <MenuItem Header="设置" Click="ConfigApp"/>
<MenuItem Header="重启" Click="ReStartApp"/>
<MenuItem Header="退出" Click="ExitApp"/> <MenuItem Header="退出" Click="ExitApp"/>
</ContextMenu> </ContextMenu>
</hc:NotifyIcon.ContextMenu> </hc:NotifyIcon.ContextMenu>

View File

@@ -18,6 +18,7 @@ using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Interop; using System.Windows.Interop;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Animation;
using static GeekDesk.Util.ShowWindowFollowMouse; using static GeekDesk.Util.ShowWindowFollowMouse;
namespace GeekDesk namespace GeekDesk
@@ -35,6 +36,7 @@ namespace GeekDesk
public static int hotKeyId = -1; public static int hotKeyId = -1;
public static int toDoHotKeyId = -1; public static int toDoHotKeyId = -1;
public static MainWindow mainWindow; public static MainWindow mainWindow;
public static MarginHide hide;
public MainWindow() public MainWindow()
{ {
LoadData(); LoadData();
@@ -44,6 +46,13 @@ namespace GeekDesk
this.Loaded += Window_Loaded; this.Loaded += Window_Loaded;
this.SizeChanged += MainWindow_Resize; this.SizeChanged += MainWindow_Resize;
ToDoTask.BackLogCheck(); ToDoTask.BackLogCheck();
////实例化隐藏 Hide类进行时间timer设置
hide = new MarginHide(this);
if (appData.AppConfig.MarginHide)
{
hide.TimerSet();
}
} }
private void LoadData() private void LoadData()
@@ -63,13 +72,19 @@ namespace GeekDesk
{ {
if (!appData.AppConfig.StartedShowPanel) if (!appData.AppConfig.StartedShowPanel)
{ {
this.Visibility = Visibility.Collapsed; if (appData.AppConfig.AppAnimation)
{
this.Opacity = 0;
} else
{
this.Visibility = Visibility.Collapsed;
}
} else } else
{ {
ShowApp(); ShowApp();
} }
RegisterHotKey(true); RegisterHotKey(true);
//RegisterCreateToDoHotKey(true); RegisterCreateToDoHotKey(true);
if (!appData.AppConfig.SelfStartUped) if (!appData.AppConfig.SelfStartUped)
{ {
@@ -88,18 +103,18 @@ namespace GeekDesk
{ {
if (appData.AppConfig.HotkeyModifiers != 0) if (appData.AppConfig.HotkeyModifiers != 0)
{ {
//加载完毕注册热键
hotKeyId = Hotkey.Regist(new WindowInteropHelper(MainWindow.mainWindow).Handle, appData.AppConfig.HotkeyModifiers, appData.AppConfig.Hotkey, () => hotKeyId = GlobalHotKey.RegisterHotKey(appData.AppConfig.HotkeyModifiers, appData.AppConfig.Hotkey, () =>
{ {
if (MotionControl.hotkeyFinished) if (MotionControl.hotkeyFinished)
{ {
if (mainWindow.Visibility == Visibility.Collapsed) if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0)
{ {
ShowApp(); ShowApp();
} }
else else
{ {
mainWindow.Visibility = Visibility.Collapsed; HideApp();
} }
} }
}); });
@@ -123,6 +138,39 @@ namespace GeekDesk
} }
} }
public static void FadeStoryBoard(int opacity, int milliseconds, Visibility visibility)
{
if (appData.AppConfig.AppAnimation)
{
DoubleAnimation opacityAnimation = new DoubleAnimation
{
From = mainWindow.Opacity,
To = opacity,
Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds))
};
opacityAnimation.Completed += (s, e) =>
{
mainWindow.BeginAnimation(OpacityProperty, null);
if (visibility == Visibility.Visible)
{
mainWindow.Opacity = 1;
} else
{
mainWindow.Opacity = 0;
}
};
Timeline.SetDesiredFrameRate(opacityAnimation, 30);
mainWindow.BeginAnimation(OpacityProperty, opacityAnimation);
} else
{
//防止关闭动画后 窗体仍是0透明度
mainWindow.Opacity = 1;
mainWindow.Visibility = visibility;
}
}
/// <summary> /// <summary>
/// 注册新建待办的热键 /// 注册新建待办的热键
/// </summary> /// </summary>
@@ -130,14 +178,15 @@ namespace GeekDesk
{ {
try try
{ {
if (appData.AppConfig.ToDoHotkeyModifiers!=0) if (appData.AppConfig.ToDoHotkeyModifiers!=0)
{ {
//加载完毕注册热键 //加载完毕注册热键
toDoHotKeyId = Hotkey.Regist(new WindowInteropHelper(MainWindow.mainWindow).Handle, appData.AppConfig.ToDoHotkeyModifiers, appData.AppConfig.ToDoHotkey, () => toDoHotKeyId = GlobalHotKey.RegisterHotKey(appData.AppConfig.ToDoHotkeyModifiers, appData.AppConfig.ToDoHotkey, () =>
{ {
if (MotionControl.hotkeyFinished) if (MotionControl.hotkeyFinished)
{ {
ToDoInfoWindow.ShowNone(); ToDoInfoWindow.ShowOrHide();
} }
}); });
} }
@@ -159,22 +208,6 @@ namespace GeekDesk
} }
} }
//private void DisplayWindowHotKeyPress(object sender, KeyPressedEventArgs e)
//{
// if (e.HotKey.Key == Key.Y)
// {
// if (this.Visibility == Visibility.Collapsed)
// {
// ShowApp();
// }
// else
// {
// this.Visibility = Visibility.Collapsed;
// }
// }
//}
void MainWindow_Resize(object sender, System.EventArgs e) void MainWindow_Resize(object sender, System.EventArgs e)
{ {
@@ -231,7 +264,13 @@ namespace GeekDesk
/// <param name="e"></param> /// <param name="e"></param>
private void CloseButtonClick(object sender, RoutedEventArgs e) private void CloseButtonClick(object sender, RoutedEventArgs e)
{ {
this.Visibility = Visibility.Collapsed; if (appData.AppConfig.AppAnimation)
{
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
} else
{
this.Visibility = Visibility.Collapsed;
}
} }
@@ -261,14 +300,17 @@ namespace GeekDesk
{ {
if (appData.AppConfig.FollowMouse) if (appData.AppConfig.FollowMouse)
{ {
ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0); ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
} else
{
mainWindow.Visibility = Visibility.Visible;
} }
FadeStoryBoard(1, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Visible);
Keyboard.Focus(mainWindow); Keyboard.Focus(mainWindow);
} }
public static void HideApp()
{
FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
}
@@ -279,13 +321,13 @@ namespace GeekDesk
/// <param name="e"></param> /// <param name="e"></param>
private void NotifyIcon_Click(object sender, RoutedEventArgs e) private void NotifyIcon_Click(object sender, RoutedEventArgs e)
{ {
if (this.Visibility == Visibility.Collapsed) if (this.Visibility == Visibility.Collapsed || this.Opacity == 0)
{ {
ShowApp(); ShowApp();
} }
else else
{ {
this.Visibility = Visibility.Collapsed; HideApp();
} }
} }
@@ -299,6 +341,20 @@ namespace GeekDesk
ConfigWindow.Show(appData.AppConfig, this); ConfigWindow.Show(appData.AppConfig, this);
} }
/// <summary>
/// 右键任务栏图标打开程序目录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OpenThisDir(object sender, RoutedEventArgs e)
{
Process p = new Process();
p.StartInfo.FileName = "Explorer.exe";
p.StartInfo.Arguments = "/e,/select," + Constants.APP_DIR + Constants.MY_NAME + ".exe";
p.Start();
}
/// <summary> /// <summary>
/// 右键任务栏图标退出 /// 右键任务栏图标退出
/// </summary> /// </summary>
@@ -311,17 +367,6 @@ namespace GeekDesk
//public static void ShowContextMenu(IntPtr hAppWnd, Window taskBar, System.Windows.Point pt)
//{
// WindowInteropHelper helper = new WindowInteropHelper(taskBar);
// IntPtr callingTaskBarWindow = helper.Handle;
// IntPtr wMenu = GetSystemMenu(hAppWnd, false);
// // Display the menu
// uint command = TrackPopupMenuEx(wMenu, TPM.LEFTBUTTON | TPM.RETURNCMD, (int) pt.X, (int) pt.Y, callingTaskBarWindow, IntPtr.Zero);
// if (command == 0) return;
// PostMessage(hAppWnd, WM.SYSCOMMAND, new IntPtr(command), IntPtr.Zero);
//}
/// <summary> /// <summary>
/// 设置图标 /// 设置图标
/// </summary> /// </summary>
@@ -364,11 +409,15 @@ namespace GeekDesk
{ {
if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS) if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
{ {
this.Visibility = Visibility.Collapsed; //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
if (appData.AppConfig.MarginHide && !hide.IsMargin())
{
this.Visibility = Visibility.Collapsed;
}
} }
} }
private void window_Deactivated(object sender, EventArgs e) private void Window_Deactivated(object sender, EventArgs e)
{ {
if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS) if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
{ {
@@ -376,7 +425,7 @@ namespace GeekDesk
} }
} }
private void window_SizeChanged(object sender, SizeChangedEventArgs e) private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{ {
if (this.DataContext != null) if (this.DataContext != null)
{ {
@@ -385,6 +434,20 @@ namespace GeekDesk
appData.AppConfig.WindowHeight = this.Height; appData.AppConfig.WindowHeight = this.Height;
} }
} }
/// <summary>
/// 重启
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReStartApp(object sender, RoutedEventArgs e)
{
Process p = new Process();
p.StartInfo.FileName = Constants.APP_DIR + Constants.MY_NAME + ".exe";
p.StartInfo.WorkingDirectory = Constants.APP_DIR;
p.Start();
Application.Current.Shutdown();
}
} }

View File

@@ -49,5 +49,5 @@ using System.Windows;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示: //通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.1")] [assembly: AssemblyVersion("2.3.1.0")]
[assembly: AssemblyFileVersion("2.1")] [assembly: AssemblyFileVersion("2.3.1.0")]

View File

@@ -21,13 +21,12 @@
- 背景图片毛玻璃效果 - 背景图片毛玻璃效果
- 界面透明度 - 界面透明度
- 界面圆角 - 界面圆角
-
<img src="https://z3.ax1x.com/2021/07/19/WGOYSU.gif" alt="WGOYSU.gif" border="0" width="800px"/> <img src="https://z3.ax1x.com/2021/07/19/WGOYSU.gif" alt="WGOYSU.gif" border="0" width="800px"/>
## 自定义菜单图标 ## 自定义菜单图标
- 80多个系统图标可供选择 - 80多个系统图标可供选择
- 另支持在线导入阿里巴巴icon图标 - 另支持在线导入阿里巴巴icon图标
- - 篇幅原因,公众号内回复 **自定义图标** 可以查看教程
<img src="https://z3.ax1x.com/2021/07/19/WJ3fDU.png" alt="WJ3fDU.png" border="0" width="450px"/> <img src="https://z3.ax1x.com/2021/07/19/WJ3fDU.png" alt="WJ3fDU.png" border="0" width="450px"/>
## 定时提醒 永不忘记 ## 定时提醒 永不忘记
@@ -41,7 +40,6 @@
主业Java程序员一枚(目前北京在职), 有好的工作请联系我 :smirk: 主业Java程序员一枚(目前北京在职), 有好的工作请联系我 :smirk:
### 佛系公众号 ### 佛系公众号
不定期更新技术相关, 或者一些牢骚 不定期更新技术相关, 或者一些牢骚
<img src="https://z3.ax1x.com/2021/07/19/WJaI9e.jpg" alt="WJaI9e.jpg" border="0" /> <img src="https://z3.ax1x.com/2021/07/19/WJaI9e.jpg" alt="WJaI9e.jpg" border="0" />
### 佛系赞赏 ### 佛系赞赏

View File

@@ -7,6 +7,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -24,9 +25,11 @@ namespace GeekDesk.Task
public static void BackLogCheck() public static void BackLogCheck()
{ {
System.Timers.Timer timer = new System.Timers.Timer(); System.Timers.Timer timer = new System.Timers.Timer
timer.Enabled = true; {
timer.Interval = 5000; Enabled = true,
Interval = 5000
};
timer.Start(); timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(Check); timer.Elapsed += new System.Timers.ElapsedEventHandler(Check);
} }
@@ -48,9 +51,27 @@ namespace GeekDesk.Task
} }
} }
} }
ClearMemory();
})); }));
} }
/// <summary>
/// 释放内存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#region
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
#endregion
} }

View File

@@ -1,9 +1,9 @@
{ {
"title" : "<22><EFBFBD><E6B1BE><EFBFBD><EFBFBD>", "title" : "<22><EFBFBD><E6B1BE><EFBFBD><EFBFBD>",
"subTitle" : "V2.1 <20><>ʽ<EFBFBD><CABD>", "subTitle" : "V2.3.10 <20><>ʽ<EFBFBD><CABD>",
"msgTitle" : "<22><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "msgTitle" : "<22><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"msg" : "['<27><><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>', '<27><><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>','<27><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>','<27><><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>']", "msg" : "['<27>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD>','<27>޸<EFBFBD><EFBFBD>޷<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BUG','<27><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>ռ<EFBFBD>ø<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>','<27>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㴰<EFBFBD>ڵ<EFBFBD>BUG','<27><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С','<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>CRON<4F><4E><EFBFBD><EFBFBD>ʽ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>']",
"githubUrl" : "https://github.com/Demo-Liu/GeekDesk/releases/tag/2.1", "githubUrl" : "https://github.com/Demo-Liu/GeekDesk/releases/tag",
"giteeUrl" : "https://gitee.com/demo_liu/GeekDesk/releases/2.1", "giteeUrl" : "https://gitee.com/demo_liu/GeekDesk/releases",
"version": "2.1" "version": "2.3.10"
} }

9
Update.json.bak Normal file
View File

@@ -0,0 +1,9 @@
{
"title" : "版本更新",
"subTitle" : "V2.3 正式版",
"msgTitle" : "本次更新内容如下",
"msg" : "['边缘吸附功能','窗口淡入淡出动画','待办任务快捷键(默认Ctrl+Shift+Q)','右键任务栏图标打开程序目录菜单']",
"githubUrl" : "https://github.com/Demo-Liu/GeekDesk/releases/tag",
"giteeUrl" : "https://gitee.com/demo_liu/GeekDesk/releases",
"version": "2.3"
}

92
Util/GlobalHotKey.cs Normal file
View File

@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Interop;
namespace GeekDesk.Util
{
public class GlobalHotKey
{
public enum HotkeyModifiers
{
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
}
private static int currentID;
private static readonly Dictionary<int, InvisibleWindowForMessages> handleTemp = new Dictionary<int, InvisibleWindowForMessages>();
public delegate void HotKeyCallBackHanlder();
/// <summary>
/// Registers a global hotkey
/// </summary>
/// <param name="aKeyGestureString">e.g. Alt + Shift + Control + Win + S</param>
/// <param name="callback">Action to be called when hotkey is pressed</param>
/// <returns>true, if registration succeeded, otherwise false</returns>
public static int RegisterHotKey(string aKeyGestureString, HotKeyCallBackHanlder callback)
{
var c = new KeyGestureConverter();
KeyGesture aKeyGesture = (KeyGesture)c.ConvertFrom(aKeyGestureString);
return RegisterHotKey((HotkeyModifiers)aKeyGesture.Modifiers, aKeyGesture.Key, callback);
}
public static int RegisterHotKey(HotkeyModifiers aModifier, Key key, HotKeyCallBackHanlder callback)
{
InvisibleWindowForMessages window = new InvisibleWindowForMessages(callback);
currentID += 1;
if (!RegisterHotKey(window.Handle, currentID, aModifier, (uint)KeyInterop.VirtualKeyFromKey(key)))
{
window.Dispose();
throw new Exception("RegisterHotKey Failed");
}
handleTemp.Add(currentID, window);
return currentID;
}
public static void Dispose(int id)
{
bool test = UnregisterHotKey(handleTemp[id].Handle, id);
GlobalHotKey.handleTemp[id].Dispose();
GlobalHotKey.handleTemp.Remove(id);
Console.WriteLine(test);
}
// Registers a hot key with Windows.
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, uint vk);
// Unregisters the hot key with Windows.
[DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private class InvisibleWindowForMessages : NativeWindow, IDisposable
{
public event HotKeyCallBackHanlder callback;
public InvisibleWindowForMessages(HotKeyCallBackHanlder callback)
{
CreateHandle(new CreateParams());
this.callback += callback;
}
private static readonly int WM_HOTKEY = 0x0312;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_HOTKEY)
{
callback();
}
}
public void Dispose()
{
this.DestroyHandle();
}
}
}
}

View File

@@ -1,96 +0,0 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
/// <summary>
/// 热键注册
/// </summary>
namespace GeekDesk.Util
{
class Hotkey
{
#region api
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, uint vk);
[DllImport("user32.dll")]
static extern bool UnregisterHotKey(IntPtr hWnd, int id);
#endregion
/// <summary>
/// 注册快捷键
/// </summary>
/// <param name="window">持有快捷键窗口</param>
/// <param name="fsModifiers">组合键</param>
/// <param name="key">快捷键</param>
/// <param name="callBack">回调函数</param>
public static int Regist(IntPtr windowHandle, HotkeyModifiers fsModifiers, Key key, HotKeyCallBackHanlder callBack)
{
HwndSource hs = HwndSource.FromHwnd(windowHandle);
hs.AddHook(WndProc);
int id = keyid++;
int vk = KeyInterop.VirtualKeyFromKey(key);
keymap.Add(id, callBack);
if (!RegisterHotKey(windowHandle, id, fsModifiers, (uint)vk)) throw new Exception("RegisterHotKey Failed");
return id;
}
/// <summary>
/// 快捷键消息处理
/// </summary>
static IntPtr WndProc(IntPtr windowHandle, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_HOTKEY)
{
int id = wParam.ToInt32();
if (keymap.TryGetValue(id, out var callback))
{
callback();
}
}
return IntPtr.Zero;
}
/// <summary>
/// 注销快捷键
/// </summary>
/// <param name="hWnd">持有快捷键窗口的句柄</param>
/// <param name="callBack">回调函数</param>
public static void UnRegist(IntPtr windowHandle, HotKeyCallBackHanlder callBack)
{
List<int> list = new List<int>(keymap.Keys);
for (int i=0; i < list.Count; i++)
{
if (keymap[list[i]] == callBack)
{
HwndSource hs = HwndSource.FromHwnd(windowHandle);
hs.RemoveHook(WndProc);
UnregisterHotKey(windowHandle, list[i]);
keymap.Remove(list[i]);
}
}
}
const int WM_HOTKEY = 0x312;
static int keyid = 10;
public static Dictionary<int, HotKeyCallBackHanlder> keymap = new Dictionary<int, HotKeyCallBackHanlder>();
public delegate void HotKeyCallBackHanlder();
}
public enum HotkeyModifiers
{
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
}
}

View File

@@ -17,11 +17,12 @@ namespace GeekDesk.Util
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//创建Web访问对 象 //创建Web访问对 象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.ContentType = "text/plain; charset=gbk";
//通过Web访问对象获取响应内容 //通过Web访问对象获取响应内容
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
//通过响应内容流创建StreamReader对象因为StreamReader更高级更快 //通过响应内容流创建StreamReader对象因为StreamReader更高级更快
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("gbk"));
string returnStr = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 string returnStr = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
reader.Close(); reader.Close();
myResponse.Close(); myResponse.Close();

View File

@@ -6,6 +6,7 @@ using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Windows; using System.Windows;
using System.Windows.Interop; using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
namespace GeekDesk.Util namespace GeekDesk.Util
@@ -22,9 +23,10 @@ namespace GeekDesk.Util
{ {
using (var ms = new System.IO.MemoryStream(array)) using (var ms = new System.IO.MemoryStream(array))
{ {
var image = new BitmapImage(); BitmapImage image = new BitmapImage();
image.BeginInit(); image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad; // here image.CacheOption = BitmapCacheOption.OnLoad; // here
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.LowQuality);
image.StreamSource = ms; image.StreamSource = ms;
image.EndInit(); image.EndInit();
return image; return image;
@@ -184,7 +186,7 @@ namespace GeekDesk.Util
Bitmap bmpOut = new Bitmap(lnNewWidth, lnNewHeight); Bitmap bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
Graphics g = Graphics.FromImage(bmpOut); Graphics g = Graphics.FromImage(bmpOut);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight); g.FillRectangle(System.Drawing.Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight); g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);
loBMP.Dispose(); loBMP.Dispose();
string tempPath = Constants.APP_DIR + "\\temp"; string tempPath = Constants.APP_DIR + "\\temp";
@@ -211,6 +213,7 @@ namespace GeekDesk.Util
BitmapImage bmImg = new BitmapImage(); BitmapImage bmImg = new BitmapImage();
bmImg.BeginInit(); bmImg.BeginInit();
bmImg.CacheOption = BitmapCacheOption.OnLoad; bmImg.CacheOption = BitmapCacheOption.OnLoad;
RenderOptions.SetBitmapScalingMode(bmImg, BitmapScalingMode.LowQuality);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{ {
bmImg.StreamSource = fs; bmImg.StreamSource = fs;

204
Util/MarginHide.cs Normal file
View File

@@ -0,0 +1,204 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing; //添加引用
using System.Windows.Forms;//添加引用
using MouseEventArgs = System.Windows.Input.MouseEventArgs;
using System.Windows;
using System.Windows.Media.Animation;
using System.Windows.Media;
namespace GeekDesk.Util
{
enum HidePosition
{
TOP = 1,
LEFT = 2,
RIGHT = 3
}
public class MarginHide
{
readonly Window window;//定义使用该方法的窗体
private readonly int hideTime = 80;
private readonly int taskTime = 200;
private double showMarginWidth = 1;
private bool isHide;
public Timer timer;
//构造函数,传入将要匹配的窗体
public MarginHide(Window window)
{
this.window = window;
}
/// <summary>
/// 窗体是否贴边
/// </summary>
/// <returns></returns>
public bool IsMargin()
{
double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop;
double screenWidth = SystemParameters.VirtualScreenWidth;
double windowWidth = window.Width;
double windowTop = window.Top;
double windowLeft = window.Left;
//窗体是否贴边
return (windowLeft <= screenLeft
|| windowTop <= screenTop
|| windowLeft + windowWidth + Math.Abs(screenLeft) >= screenWidth);
}
#region
private void TimerDealy(object o, EventArgs e)
{
if (window.Visibility != Visibility.Visible) return;
double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop;
double screenWidth = SystemParameters.VirtualScreenWidth;
double windowHeight = window.Height;
double windowWidth = window.Width;
double windowTop = window.Top;
double windowLeft = window.Left;
//获取鼠标位置
System.Windows.Point p = MouseUtil.GetMousePosition();
double mouseX = p.X;
double mouseY = p.Y;
//鼠标不在窗口上
if (mouseX < windowLeft || mouseX > windowLeft + windowWidth
|| mouseY < windowTop || mouseY > windowTop + windowHeight)
{
//上方隐藏条件
if (windowTop <= screenTop)
{
HideAnimation(windowTop, screenTop - windowHeight + showMarginWidth, Window.TopProperty);
isHide = true;
return;
}
//左侧隐藏条件
if (windowLeft <= screenLeft)
{
HideAnimation(windowLeft, screenLeft - windowWidth + showMarginWidth, Window.LeftProperty);
return;
}
//右侧隐藏条件
if (windowLeft + windowWidth + Math.Abs(screenLeft) >= screenWidth)
{
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - showMarginWidth, Window.LeftProperty);
return;
}
} else if (mouseX >= windowLeft && mouseX <= windowLeft + windowWidth
&& mouseY >= windowTop && mouseY <= windowTop + windowHeight)
{
//上方显示
if (windowTop <= screenTop - showMarginWidth)
{
HideAnimation(windowTop, screenTop, Window.TopProperty);
return;
}
//左侧显示
if (windowLeft <= screenLeft - showMarginWidth)
{
HideAnimation(windowLeft, screenLeft, Window.LeftProperty);
return;
}
//右侧显示
if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth)
{
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty);
return;
}
}
}
#endregion
public void TimerSet()
{
if (timer != null) return;
timer = new Timer();//添加timer计时器隐藏功能
#region
timer.Interval = taskTime;
timer.Tick += TimerDealy;
timer.Start();
#endregion
}
public void TimerStop()
{
timer.Stop();
timer.Dispose();
timer = null;
//功能关闭 如果界面是隐藏状态 那么要显示界面 ↓
double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop;
double screenWidth = SystemParameters.VirtualScreenWidth;
double windowWidth = window.Width;
double windowTop = window.Top;
double windowLeft = window.Left;
//左侧显示
if (windowLeft <= screenLeft - showMarginWidth)
{
HideAnimation(windowLeft, screenLeft, Window.LeftProperty);
return;
}
//上方显示
if (windowTop <= screenTop - showMarginWidth)
{
HideAnimation(windowTop, screenTop, Window.TopProperty);
return;
}
//右侧显示
if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth)
{
HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty);
return;
}
}
private void HideAnimation(double from, double to, DependencyProperty property)
{
DoubleAnimation da = new DoubleAnimation
{
From = from,
To = to,
Duration = new Duration(TimeSpan.FromMilliseconds(hideTime))
};
da.Completed += (s, e) =>
{
window.BeginAnimation(property, null);
};
Timeline.SetDesiredFrameRate(da, 60);
window.BeginAnimation(property, da);
}
}
}

View File

@@ -18,9 +18,9 @@ namespace GeekDesk.Util
} }
/// <summary> /// <summary>
/// 随鼠标位置显示面板 (鼠标始终在中间) /// 随鼠标位置显示面板
/// </summary> /// </summary>
public static void Show(Window window, MousePosition position, double widthOffset, double heightOffset) public static void Show(Window window, MousePosition position, double widthOffset = 0, double heightOffset = 0, bool visibility = true)
{ {
//获取鼠标位置 //获取鼠标位置
System.Windows.Point p = MouseUtil.GetMousePosition(); System.Windows.Point p = MouseUtil.GetMousePosition();
@@ -100,7 +100,11 @@ namespace GeekDesk.Util
{ {
window.Top = p.Y - afterHeight; window.Top = p.Y - afterHeight;
} }
window.Visibility = Visibility.Visible; if (visibility)
{
window.Opacity = 0;
window.Visibility = Visibility.Visible;
}
} }
} }

View File

@@ -7,6 +7,7 @@ using System.ComponentModel;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using static GeekDesk.Util.GlobalHotKey;
/// <summary> /// <summary>
/// 程序设置 /// 程序设置
@@ -42,9 +43,9 @@ namespace GeekDesk.ViewModel
private HotkeyModifiers hotkeyModifiers = HotkeyModifiers.MOD_CONTROL; //默认启动面板快捷键 private HotkeyModifiers hotkeyModifiers = HotkeyModifiers.MOD_CONTROL; //默认启动面板快捷键
private Key hotkey = Key.Q; //默认启动面板快捷键 private Key hotkey = Key.Q; //默认启动面板快捷键
private string toDoHotkeyStr; //待办任务快捷键 private string toDoHotkeyStr = "Ctrl + Shift + Q"; //待办任务快捷键
private HotkeyModifiers toDoHotkeyModifiers; //待办任务快捷键 private HotkeyModifiers toDoHotkeyModifiers; //待办任务快捷键
private Key toDoHotkey; //待办任务快捷键 private Key toDoHotkey = Key.E; //待办任务快捷键
private string customIconUrl; //自定义图标url private string customIconUrl; //自定义图标url
private string customIconJsonUrl; //自定义图标json信息url private string customIconJsonUrl; //自定义图标json信息url
@@ -60,9 +61,115 @@ namespace GeekDesk.ViewModel
private string textColor = "#000000"; //字体颜色 private string textColor = "#000000"; //字体颜色
private double imgPanelWidth = (double)CommonEnum.IMAGE_PANEL_WIDTH; private double imgPanelWidth = (double)CommonEnum.IMAGE_PANEL_WIDTH;
private double imgPanelHeight = (double)CommonEnum.IMAGE_PANEL_HEIGHT; private double imgPanelHeight = (double)CommonEnum.IMAGE_PANEL_HEIGHT;
private bool marginHide = false; //贴边隐藏
private bool appAnimation = false; //主窗口动画效果
private int imageWidth = (int)CommonEnum.IMAGE_WIDTH; //图片宽度
private int imageHeight = (int)CommonEnum.IMAGE_HEIGHT; //图片高度
#region GetSet #region GetSet
public int ImageWidth
{
get
{
// 为了兼容旧版 暂时使用默认
if (imageWidth == 0)
{
return (int)CommonEnum.IMAGE_WIDTH;
} else
{
return imageWidth;
}
}
set
{
imageWidth = value;
//同时设置高度
ImageHeight = value;
//计算 容器宽度因子
double i = ((double)imageWidth - (double)CommonEnum.IMAGE_WIDTH) / 5d;
double s = 2.44;
i *= 2d;
while (i > 1)
{
i /= 10d;
}
if (i > 0d)
{
s -= i;
}
//设置容器宽度
ImgPanelWidth = (int)(ImageWidth * s);
OnPropertyChanged("ImageWidth");
}
}
public int ImageHeight
{
get
{
//都使用宽度来确定大小
// 为了兼容旧版 暂时使用默认
if (imageHeight == 0)
{
return (int)CommonEnum.IMAGE_HEIGHT;
}
else
{
return imageHeight;
}
}
set
{
imageHeight = value;
//计算容器高度因子
double i = ((double)imageHeight - (double)CommonEnum.IMAGE_HEIGHT) / 5d;
while (i > 1)
{
i /= 10d;
}
double s = 2.00;
if (i > 0d)
{
s -= i;
}
//设置容器高度
ImgPanelHeight = ImageHeight * s;
OnPropertyChanged("ImageHeight");
}
}
public bool AppAnimation
{
get
{
return appAnimation;
}
set
{
appAnimation = value;
OnPropertyChanged("AppAnimation");
}
}
public bool MarginHide
{
get
{
return marginHide;
}
set
{
marginHide = value;
OnPropertyChanged("MarginHide");
}
}
public double ImgPanelWidth public double ImgPanelWidth
{ {
@@ -150,6 +257,11 @@ namespace GeekDesk.ViewModel
{ {
get get
{ {
//兼容老版本
if (toDoHotkey == Key.None)
{
toDoHotkey = Key.Q;
}
return toDoHotkey; return toDoHotkey;
} }
set set
@@ -164,6 +276,10 @@ namespace GeekDesk.ViewModel
{ {
get get
{ {
if (toDoHotkeyModifiers == 0)
{
toDoHotkeyModifiers = HotkeyModifiers.MOD_CONTROL | HotkeyModifiers.MOD_SHIFT;
}
return toDoHotkeyModifiers; return toDoHotkeyModifiers;
} }
set set
@@ -177,6 +293,11 @@ namespace GeekDesk.ViewModel
{ {
get get
{ {
//兼容老版本
if (toDoHotkeyStr == null)
{
toDoHotkeyStr = "Ctrl + Shift + Q";
}
return toDoHotkeyStr; return toDoHotkeyStr;
} }
set set
@@ -283,6 +404,10 @@ namespace GeekDesk.ViewModel
{ {
get get
{ {
if (hotkeyModifiers == 0)
{
hotkeyModifiers = HotkeyModifiers.MOD_CONTROL;
}
return hotkeyModifiers; return hotkeyModifiers;
} }
set set

View File

@@ -20,8 +20,6 @@ namespace GeekDesk.ViewModel
private BitmapImage bitmapImage; //位图 private BitmapImage bitmapImage; //位图
private byte[] imageByteArr; //图片 byte数组 private byte[] imageByteArr; //图片 byte数组
private string content; //显示信息 private string content; //显示信息
private int imageWidth = (int)CommonEnum.IMAGE_WIDTH; //图片宽度
private int imageHeight = (int)CommonEnum.IMAGE_HEIGHT; //图片高度
private bool adminStartUp = false; //始终管理员方式启动 默认否 private bool adminStartUp = false; //始终管理员方式启动 默认否
private byte[] defaultImage; //默认图标 private byte[] defaultImage; //默认图标
@@ -152,33 +150,7 @@ namespace GeekDesk.ViewModel
} }
} }
public int ImageWidth
{
get
{
// 为了兼容旧版 暂时使用默认
return (int)CommonEnum.IMAGE_WIDTH;
}
set
{
imageWidth = value;
OnPropertyChanged("ImageWidth");
}
}
public int ImageHeight
{
get
{
// 为了兼容旧版 暂时使用默认
return (int)CommonEnum.IMAGE_HEIGHT;
}
set
{
imageHeight = value;
OnPropertyChanged("ImageHeight");
}
}

View File

@@ -1,4 +1,5 @@
using GeekDesk.Util; using GeekDesk.Constant;
using GeekDesk.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -17,8 +18,38 @@ namespace GeekDesk.ViewModel
private string msg; //事项详情 private string msg; //事项详情
private string exeTime; //待办时间 private string exeTime; //待办时间
private string doneTime; //完成时间 private string doneTime; //完成时间
private TodoTaskExecType execType = TodoTaskExecType.SET_TIME;
private string cron; //cron表达式
//private int status; //状态 0 未处理 1 已处理 //private int status; //状态 0 未处理 1 已处理
public string Cron
{
get
{
return cron;
}
set
{
cron = value;
OnPropertyChanged("Cron");
}
}
public TodoTaskExecType ExecType
{
get
{
//兼容老版本 需要给个默认值
if (execType == 0) return TodoTaskExecType.SET_TIME;
return execType;
}
set
{
execType = value;
OnPropertyChanged("ExecType");
}
}
public string DoneTime public string DoneTime
{ {

View File

@@ -2,6 +2,13 @@
<packages> <packages>
<package id="CommonServiceLocator" version="2.0.6" targetFramework="net452" requireReinstallation="true" /> <package id="CommonServiceLocator" version="2.0.6" targetFramework="net452" requireReinstallation="true" />
<package id="HandyControl" version="3.1.0" targetFramework="net472" /> <package id="HandyControl" version="3.1.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="2.1.1" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
<package id="Quartz" version="3.3.3" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="4.7.1" targetFramework="net472" />
<package id="System.Drawing.Common" version="6.0.0-preview.6.21352.12" targetFramework="net472" /> <package id="System.Drawing.Common" version="6.0.0-preview.6.21352.12" targetFramework="net472" />
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
</packages> </packages>