|
@@ -1,6 +1,7 @@
|
|
|
using DraggAnimatedPanelExample;
|
|
|
using GeekDesk.Constant;
|
|
|
using GeekDesk.Control.Other;
|
|
|
+using GeekDesk.Control.Windows;
|
|
|
using GeekDesk.Util;
|
|
|
using GeekDesk.ViewModel;
|
|
|
using HandyControl.Controls;
|
|
@@ -66,15 +67,31 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
/// <param name="e"></param>
|
|
|
private void IconClick(object sender, MouseButtonEventArgs e)
|
|
|
{
|
|
|
- IconInfo icon = (IconInfo)((SimpleStackPanel)sender).Tag;
|
|
|
- if (icon.AdminStartUp)
|
|
|
+ if (appData.AppConfig.DoubleOpen && e.ClickCount >= 2)
|
|
|
{
|
|
|
- StartIconApp(icon, IconStartType.ADMIN_STARTUP);
|
|
|
+ IconInfo icon = (IconInfo)((SimpleStackPanel)sender).Tag;
|
|
|
+ if (icon.AdminStartUp)
|
|
|
+ {
|
|
|
+ StartIconApp(icon, IconStartType.ADMIN_STARTUP);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ StartIconApp(icon, IconStartType.DEFAULT_STARTUP);
|
|
|
+ }
|
|
|
}
|
|
|
- else
|
|
|
+ else if (!appData.AppConfig.DoubleOpen && e.ClickCount == 1)
|
|
|
{
|
|
|
- StartIconApp(icon, IconStartType.DEFAULT_STARTUP);
|
|
|
+ IconInfo icon = (IconInfo)((SimpleStackPanel)sender).Tag;
|
|
|
+ if (icon.AdminStartUp)
|
|
|
+ {
|
|
|
+ StartIconApp(icon, IconStartType.ADMIN_STARTUP);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ StartIconApp(icon, IconStartType.DEFAULT_STARTUP);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -103,75 +120,190 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- Process p = new Process();
|
|
|
- p.StartInfo.FileName = icon.Path;
|
|
|
- if (icon.IconType == IconType.OTHER)
|
|
|
+ using (Process p = new Process())
|
|
|
{
|
|
|
- if (!File.Exists(icon.Path) && !Directory.Exists(icon.Path))
|
|
|
+ p.StartInfo.UseShellExecute = true;
|
|
|
+
|
|
|
+ string startArg = icon.StartArg;
|
|
|
+
|
|
|
+ if (startArg != null && Constants.SYSTEM_ICONS != null
|
|
|
+ && Constants.SYSTEM_ICONS.ContainsKey(startArg))
|
|
|
{
|
|
|
- HandyControl.Controls.Growl.WarningGlobal("程序启动失败(文件路径不存在或已删除)!");
|
|
|
- return;
|
|
|
+ StartSystemApp(startArg, type);
|
|
|
}
|
|
|
- p.StartInfo.WorkingDirectory = icon.Path.Substring(0, icon.Path.LastIndexOf("\\"));
|
|
|
- switch (type)
|
|
|
+ else
|
|
|
{
|
|
|
- case IconStartType.ADMIN_STARTUP:
|
|
|
- p.StartInfo.Arguments = "1";//启动参数
|
|
|
- p.StartInfo.Verb = "runas";
|
|
|
- p.StartInfo.CreateNoWindow = false; //设置显示窗口
|
|
|
- p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动进程
|
|
|
- p.StartInfo.ErrorDialog = false;
|
|
|
- if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
|
|
|
+ p.StartInfo.FileName = icon.Path;
|
|
|
+ //p.StartInfo.CreateNoWindow = false; //设置显示窗口
|
|
|
+ //p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动进程
|
|
|
+ //p.StartInfo.ErrorDialog = false;
|
|
|
+ if (!StringUtil.IsEmpty(startArg))
|
|
|
+ {
|
|
|
+ p.StartInfo.Arguments = startArg;
|
|
|
+ }
|
|
|
+ if (icon.IconType == IconType.OTHER)
|
|
|
+ {
|
|
|
+ if (!File.Exists(icon.Path) && !Directory.Exists(icon.Path))
|
|
|
{
|
|
|
- //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
|
|
|
- if (appData.AppConfig.MarginHide)
|
|
|
- {
|
|
|
- if (!MainWindow.hide.IsMargin())
|
|
|
+ HandyControl.Controls.Growl.WarningGlobal("程序启动失败(文件路径不存在或已删除)!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ p.StartInfo.WorkingDirectory = icon.Path.Substring(0, icon.Path.LastIndexOf("\\"));
|
|
|
+ switch (type)
|
|
|
+ {
|
|
|
+ case IconStartType.ADMIN_STARTUP:
|
|
|
+ //p.StartInfo.Arguments = "1";//启动参数
|
|
|
+ p.StartInfo.Verb = "runas";
|
|
|
+ if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
|
|
|
{
|
|
|
- MainWindow.HideApp();
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- MainWindow.HideApp();
|
|
|
- }
|
|
|
+ //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
|
|
|
+ if (appData.AppConfig.MarginHide)
|
|
|
+ {
|
|
|
+ if (!MarginHide.IS_HIDE)
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ break;// c#好像不能case穿透
|
|
|
+ case IconStartType.DEFAULT_STARTUP:
|
|
|
+ if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
|
|
|
+ {
|
|
|
+ //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
|
|
|
+ if (appData.AppConfig.MarginHide)
|
|
|
+ {
|
|
|
+ if (!MarginHide.IS_HIDE)
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case IconStartType.SHOW_IN_EXPLORE:
|
|
|
+ p.StartInfo.FileName = "Explorer.exe";
|
|
|
+ p.StartInfo.Arguments = "/e,/select," + icon.Path;
|
|
|
+ break;
|
|
|
}
|
|
|
- break;// c#好像不能case穿透
|
|
|
- case IconStartType.DEFAULT_STARTUP:
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
if (appData.AppConfig.AppHideType == AppHideType.START_EXE)
|
|
|
{
|
|
|
//如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
|
|
|
if (appData.AppConfig.MarginHide)
|
|
|
{
|
|
|
- if (!MainWindow.hide.IsMargin())
|
|
|
+ if (!MarginHide.IS_HIDE)
|
|
|
{
|
|
|
MainWindow.HideApp();
|
|
|
}
|
|
|
- } else
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
MainWindow.HideApp();
|
|
|
}
|
|
|
}
|
|
|
- break;
|
|
|
- case IconStartType.SHOW_IN_EXPLORE:
|
|
|
- p.StartInfo.FileName = "Explorer.exe";
|
|
|
- p.StartInfo.Arguments = "/e,/select," + icon.Path;
|
|
|
- break;
|
|
|
+ }
|
|
|
+ icon.Count++;
|
|
|
+ p.Start();
|
|
|
}
|
|
|
}
|
|
|
- p.Start();
|
|
|
- icon.Count++;
|
|
|
}
|
|
|
- catch (Exception)
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
HandyControl.Controls.Growl.WarningGlobal("程序启动失败(不支持的启动方式)!");
|
|
|
+ LogUtil.WriteErrorLog(e, "程序启动失败:path=" + icon.Path + ",type=" + type);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+ private void StartSystemApp(string startArg, IconStartType type)
|
|
|
+ {
|
|
|
+ if (type == IconStartType.SHOW_IN_EXPLORE)
|
|
|
+ {
|
|
|
+ Growl.WarningGlobal("系统项目不支持打开文件位置操作!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (startArg)
|
|
|
+ {
|
|
|
+ case "Calculator":
|
|
|
+ Process.Start("calc.exe");
|
|
|
+ break;
|
|
|
+ case "Computer":
|
|
|
+ Process.Start("explorer.exe");
|
|
|
+ break;
|
|
|
+ case "GroupPolicy":
|
|
|
+ Process.Start("gpedit.msc");
|
|
|
+ break;
|
|
|
+ case "Notepad":
|
|
|
+ Process.Start("notepad");
|
|
|
+ break;
|
|
|
+ case "Network":
|
|
|
+ Process.Start("ncpa.cpl");
|
|
|
+ break;
|
|
|
+ case "RecycleBin":
|
|
|
+ Process.Start("shell:RecycleBinFolder");
|
|
|
+ break;
|
|
|
+ case "Registry":
|
|
|
+ Process.Start("regedit.exe");
|
|
|
+ break;
|
|
|
+ case "Mstsc":
|
|
|
+ if (type == IconStartType.ADMIN_STARTUP)
|
|
|
+ {
|
|
|
+ Process.Start("mstsc", "-admin");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Process.Start("mstsc");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "Control":
|
|
|
+ Process.Start("Control");
|
|
|
+ break;
|
|
|
+ case "CMD":
|
|
|
+ if (type == IconStartType.ADMIN_STARTUP)
|
|
|
+ {
|
|
|
+ using (Process process = new Process())
|
|
|
+ {
|
|
|
+ process.StartInfo.FileName = "cmd.exe";
|
|
|
+ process.StartInfo.Verb = "runas";
|
|
|
+ process.Start();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Process.Start("cmd");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
|
|
|
+ if (appData.AppConfig.MarginHide)
|
|
|
+ {
|
|
|
+ if (!MarginHide.IS_HIDE)
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MainWindow.HideApp();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 拖动添加项目
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
private void Wrap_Drop(object sender, DragEventArgs e)
|
|
|
{
|
|
|
Array dropObject = (System.Array)e.Data.GetData(DataFormats.FileDrop);
|
|
@@ -179,35 +311,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
foreach (object obj in dropObject)
|
|
|
{
|
|
|
string path = (string)obj;
|
|
|
-
|
|
|
- //string base64 = ImageUtil.FileImageToBase64(path, ImageFormat.Png);
|
|
|
- string ext = "";
|
|
|
- if (!ImageUtil.IsSystemItem(path))
|
|
|
- {
|
|
|
- ext = System.IO.Path.GetExtension(path).ToLower();
|
|
|
- }
|
|
|
-
|
|
|
- if (".lnk".Equals(ext))
|
|
|
- {
|
|
|
- string targetPath = FileUtil.GetTargetPathByLnk(path);
|
|
|
- if (targetPath!=null)
|
|
|
- {
|
|
|
- path = targetPath;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- BitmapImage bi = ImageUtil.GetBitmapIconByPath(path);
|
|
|
- IconInfo iconInfo = new IconInfo
|
|
|
- {
|
|
|
- Path = path,
|
|
|
- BitmapImage = bi
|
|
|
- };
|
|
|
- iconInfo.DefaultImage = iconInfo.ImageByteArr;
|
|
|
- iconInfo.Name = System.IO.Path.GetFileNameWithoutExtension(path);
|
|
|
- if (StringUtil.IsEmpty(iconInfo.Name))
|
|
|
- {
|
|
|
- iconInfo.Name = path;
|
|
|
- }
|
|
|
+ IconInfo iconInfo = CommonCode.GetIconInfoByPath(path);
|
|
|
MainWindow.appData.MenuList[appData.AppConfig.SelectedMenuIndex].IconList.Add(iconInfo);
|
|
|
CommonCode.SaveAppData(MainWindow.appData);
|
|
|
}
|
|
@@ -279,7 +383,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
|
|
|
Panel sp = sender as Panel;
|
|
|
|
|
|
- DependencyObject dos = sp.Parent;
|
|
|
+ DependencyObject dos = sp.Parent;
|
|
|
|
|
|
Image img = sp.Children[0] as Image;
|
|
|
|
|
@@ -288,16 +392,16 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
|
|
|
//动画定义
|
|
|
Storyboard myStoryboard = new Storyboard();
|
|
|
-
|
|
|
|
|
|
|
|
|
- DoubleAnimation heightAnimation = new DoubleAnimation
|
|
|
+
|
|
|
+ DoubleAnimation heightAnimation = new DoubleAnimation
|
|
|
{
|
|
|
From = afterHeight,
|
|
|
To = height,
|
|
|
Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds))
|
|
|
};
|
|
|
- DoubleAnimation widthAnimation = new DoubleAnimation
|
|
|
+ DoubleAnimation widthAnimation = new DoubleAnimation
|
|
|
{
|
|
|
From = afterWidth,
|
|
|
To = width,
|
|
@@ -333,7 +437,8 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
ThreadStart ts = new ThreadStart(crs.Remove);
|
|
|
System.Threading.Thread t = new System.Threading.Thread(ts);
|
|
|
t.Start();
|
|
|
- } else
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
img.BeginAnimation(WidthProperty, null);
|
|
|
img.BeginAnimation(HeightProperty, null);
|
|
@@ -396,10 +501,25 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|
|
sb2.Remove();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 添加URL项目
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
private void AddUrlIcon(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
IconInfoUrlDialog urlDialog = new IconInfoUrlDialog();
|
|
|
urlDialog.dialog = HandyControl.Controls.Dialog.Show(urlDialog, "IconInfoDialog");
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 添加系统项目
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ private void AddSystemIcon(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ SystemItemWindow.Show();
|
|
|
+ }
|
|
|
}
|
|
|
}
|