From c9ca331d30f21bbaf77a74c5b17951a2f6890941 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Sun, 12 Jan 2014 16:28:11 +0800 Subject: [PATCH] Add winalfred workflow installer --- Doc/app.psd | Bin 0 -> 85993 bytes Plugins/WinAlfred.Plugin.DouBan/.idea/.name | 1 + .../.idea/WinAlfred.Plugin.DouBan.iml | 16 + .../.idea/dictionaries/Scott.xml | 3 + .../.idea/encodings.xml | 5 + .../WinAlfred.Plugin.DouBan/.idea/misc.xml | 37 ++ .../WinAlfred.Plugin.DouBan/.idea/modules.xml | 9 + .../.idea/scopes/scope_settings.xml | 5 + Plugins/WinAlfred.Plugin.DouBan/.idea/vcs.xml | 7 + .../.idea/workspace.xml | 345 ++++++++++++++++++ WinAlfred.WorkflowInstaller/App.xaml | 8 + WinAlfred.WorkflowInstaller/App.xaml.cs | 16 + WinAlfred.WorkflowInstaller/IniParser.cs | 217 +++++++++++ WinAlfred.WorkflowInstaller/MainWindow.xaml | 8 + .../MainWindow.xaml.cs | 278 ++++++++++++++ .../Properties/AssemblyInfo.cs | 55 +++ .../Properties/Resources.Designer.cs | 71 ++++ .../Properties/Resources.resx | 117 ++++++ .../Properties/Settings.Designer.cs | 30 ++ .../Properties/Settings.settings | 7 + .../WinAlfred.WorkflowInstaller.csproj | 129 +++++++ WinAlfred.WorkflowInstaller/app.ico | Bin 0 -> 370070 bytes WinAlfred.WorkflowInstaller/app.manifest | 55 +++ WinAlfred.WorkflowInstaller/packages.config | 4 + WinAlfred.sln | 16 + WinAlfred/Helper/DwmDropShadow.cs | 73 ++++ WinAlfred/MainWindow.xaml | 2 +- WinAlfred/MainWindow.xaml.cs | 43 +-- WinAlfred/Properties/Resources.resx | 2 +- WinAlfred/WinAlfred.csproj | 19 +- WinAlfred/app.ico | Bin 4286 -> 370070 bytes WinAlfred/app.png | Bin 0 -> 8880 bytes 32 files changed, 1539 insertions(+), 39 deletions(-) create mode 100644 Doc/app.psd create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/.name create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/WinAlfred.Plugin.DouBan.iml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/dictionaries/Scott.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/encodings.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/misc.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/modules.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/scopes/scope_settings.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/vcs.xml create mode 100644 Plugins/WinAlfred.Plugin.DouBan/.idea/workspace.xml create mode 100644 WinAlfred.WorkflowInstaller/App.xaml create mode 100644 WinAlfred.WorkflowInstaller/App.xaml.cs create mode 100644 WinAlfred.WorkflowInstaller/IniParser.cs create mode 100644 WinAlfred.WorkflowInstaller/MainWindow.xaml create mode 100644 WinAlfred.WorkflowInstaller/MainWindow.xaml.cs create mode 100644 WinAlfred.WorkflowInstaller/Properties/AssemblyInfo.cs create mode 100644 WinAlfred.WorkflowInstaller/Properties/Resources.Designer.cs create mode 100644 WinAlfred.WorkflowInstaller/Properties/Resources.resx create mode 100644 WinAlfred.WorkflowInstaller/Properties/Settings.Designer.cs create mode 100644 WinAlfred.WorkflowInstaller/Properties/Settings.settings create mode 100644 WinAlfred.WorkflowInstaller/WinAlfred.WorkflowInstaller.csproj create mode 100644 WinAlfred.WorkflowInstaller/app.ico create mode 100644 WinAlfred.WorkflowInstaller/app.manifest create mode 100644 WinAlfred.WorkflowInstaller/packages.config create mode 100644 WinAlfred/Helper/DwmDropShadow.cs create mode 100644 WinAlfred/app.png diff --git a/Doc/app.psd b/Doc/app.psd new file mode 100644 index 0000000000000000000000000000000000000000..2ce1b96aaf047416f6ecd50d48b1a9e4b379e5e2 GIT binary patch literal 85993 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

$kibsY;~WWpP_|Nw<5Y? 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 S>G+Fpe)Y!o&*Tz|L;c^ + + + + + + + + + + + + diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/dictionaries/Scott.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/dictionaries/Scott.xml new file mode 100644 index 000000000..72c46d1bc --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/dictionaries/Scott.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/encodings.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/encodings.xml new file mode 100644 index 000000000..e206d70d8 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/misc.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/misc.xml new file mode 100644 index 000000000..89928bcf5 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/misc.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/modules.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/modules.xml new file mode 100644 index 000000000..b22aac435 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/scopes/scope_settings.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..922003b84 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/vcs.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/vcs.xml new file mode 100644 index 000000000..def6a6a18 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Plugins/WinAlfred.Plugin.DouBan/.idea/workspace.xml b/Plugins/WinAlfred.Plugin.DouBan/.idea/workspace.xml new file mode 100644 index 000000000..63658b8a1 --- /dev/null +++ b/Plugins/WinAlfred.Plugin.DouBan/.idea/workspace.xml @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1389365252031 + 1389365252031 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WinAlfred.WorkflowInstaller/App.xaml b/WinAlfred.WorkflowInstaller/App.xaml new file mode 100644 index 000000000..69bfff8c4 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/WinAlfred.WorkflowInstaller/App.xaml.cs b/WinAlfred.WorkflowInstaller/App.xaml.cs new file mode 100644 index 000000000..4fe191df0 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace WinAlfred.WorkflowInstaller +{ + ///

+ /// App.xaml 的交互逻辑 + /// + public partial class App : Application + { + } +} diff --git a/WinAlfred.WorkflowInstaller/IniParser.cs b/WinAlfred.WorkflowInstaller/IniParser.cs new file mode 100644 index 000000000..d72a38e19 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/IniParser.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections; +using System.IO; + +namespace WinAlfred.Helper +{ + public class IniParser + { + private Hashtable keyPairs = new Hashtable(); + private String iniFilePath; + + private struct SectionPair + { + public String Section; + public String Key; + } + + /// + /// Opens the INI file at the given path and enumerates the values in the IniParser. + /// + /// Full path to INI file. + public IniParser(String iniPath) + { + TextReader iniFile = null; + String strLine = null; + String currentRoot = null; + String[] keyPair = null; + + iniFilePath = iniPath; + + if (File.Exists(iniPath)) + { + try + { + iniFile = new StreamReader(iniPath); + + strLine = iniFile.ReadLine(); + + while (strLine != null) + { + strLine = strLine.Trim(); + + if (strLine != "") + { + if (strLine.StartsWith("[") && strLine.EndsWith("]")) + { + currentRoot = strLine.Substring(1, strLine.Length - 2).ToUpper(); + } + else + { + keyPair = strLine.Split(new char[] { '=' }, 2); + + SectionPair sectionPair; + String value = null; + + if (currentRoot == null) + currentRoot = "ROOT"; + + sectionPair.Section = currentRoot; + sectionPair.Key = keyPair[0].ToUpper().Trim(); + + if (keyPair.Length > 1) + value = keyPair[1]; + + keyPairs.Add(sectionPair, value.Trim()); + } + } + + strLine = iniFile.ReadLine(); + } + + } + catch (Exception ex) + { + throw ex; + } + finally + { + if (iniFile != null) + iniFile.Close(); + } + } + else + throw new FileNotFoundException("Unable to locate " + iniPath); + } + + /// + /// Returns the value for the given section, key pair. + /// + /// Section name. + /// Key name. + public String GetSetting(String sectionName, String settingName) + { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper().Trim(); + sectionPair.Key = settingName.ToUpper().Trim(); + + return (String)keyPairs[sectionPair]; + } + + /// + /// Enumerates all lines for given section. + /// + /// Section to enum. + public String[] EnumSection(String sectionName) + { + ArrayList tmpArray = new ArrayList(); + + foreach (SectionPair pair in keyPairs.Keys) + { + if (pair.Section == sectionName.ToUpper()) + tmpArray.Add(pair.Key); + } + + return (String[])tmpArray.ToArray(typeof(String)); + } + + /// + /// Adds or replaces a setting to the table to be saved. + /// + /// Section to add under. + /// Key name to add. + /// Value of key. + public void AddSetting(String sectionName, String settingName, String settingValue) + { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + + keyPairs.Add(sectionPair, settingValue); + } + + /// + /// Adds or replaces a setting to the table to be saved with a null value. + /// + /// Section to add under. + /// Key name to add. + public void AddSetting(String sectionName, String settingName) + { + AddSetting(sectionName, settingName, null); + } + + /// + /// Remove a setting. + /// + /// Section to add under. + /// Key name to add. + public void DeleteSetting(String sectionName, String settingName) + { + SectionPair sectionPair; + sectionPair.Section = sectionName.ToUpper(); + sectionPair.Key = settingName.ToUpper(); + + if (keyPairs.ContainsKey(sectionPair)) + keyPairs.Remove(sectionPair); + } + + /// + /// Save settings to new file. + /// + /// New file path. + public void SaveSettings(String newFilePath) + { + ArrayList sections = new ArrayList(); + String tmpValue = ""; + String strToSave = ""; + + foreach (SectionPair sectionPair in keyPairs.Keys) + { + if (!sections.Contains(sectionPair.Section)) + sections.Add(sectionPair.Section); + } + + foreach (String section in sections) + { + strToSave += ("[" + section + "]\r\n"); + + foreach (SectionPair sectionPair in keyPairs.Keys) + { + if (sectionPair.Section == section) + { + tmpValue = (String)keyPairs[sectionPair]; + + if (tmpValue != null) + tmpValue = "=" + tmpValue; + + strToSave += (sectionPair.Key + tmpValue + "\r\n"); + } + } + + strToSave += "\r\n"; + } + + try + { + TextWriter tw = new StreamWriter(newFilePath); + tw.Write(strToSave); + tw.Close(); + } + catch (Exception ex) + { + throw ex; + } + } + + /// + /// Save settings back to ini file. + /// + public void SaveSettings() + { + SaveSettings(iniFilePath); + } + } +} \ No newline at end of file diff --git a/WinAlfred.WorkflowInstaller/MainWindow.xaml b/WinAlfred.WorkflowInstaller/MainWindow.xaml new file mode 100644 index 000000000..7e8a79355 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/MainWindow.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/WinAlfred.WorkflowInstaller/MainWindow.xaml.cs b/WinAlfred.WorkflowInstaller/MainWindow.xaml.cs new file mode 100644 index 000000000..1fae4018e --- /dev/null +++ b/WinAlfred.WorkflowInstaller/MainWindow.xaml.cs @@ -0,0 +1,278 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using ICSharpCode.SharpZipLib.Zip; +using Microsoft.Win32; +using WinAlfred.Helper; +using WinAlfred.Plugin; +using Path = System.IO.Path; + +namespace WinAlfred.WorkflowInstaller +{ + + public partial class MainWindow + { + public MainWindow() + { + InitializeComponent(); + Loaded += MainWindow_Loaded; + string[] param = Environment.GetCommandLineArgs(); + if (param.Length == 2) + { + string workflowPath = param[1]; + //string workflowPath = @"c:\Users\Scott\Desktop\Desktop.winalfred"; + if (workflowPath.EndsWith(".winalfred")) + { + InstallWorkflow(workflowPath); + } + } + } + + private void InstallWorkflow(string path) + { + if (File.Exists(path)) + { + string tempFoler = System.IO.Path.GetTempPath() + "\\winalfred\\workflows"; + if (Directory.Exists(tempFoler)) + { + Directory.Delete(tempFoler, true); + } + UnZip(path, tempFoler, true); + + string iniPath = tempFoler + "\\plugin.ini"; + if (!File.Exists(iniPath)) + { + MessageBox.Show("Install failed: config is missing"); + Close(); + return; + } + + PluginMetadata plugin = GetMetadataFromIni(tempFoler); + if (plugin == null || plugin.Name == null) + { + MessageBox.Show("Install failed: config of this workflow is invalid"); + Close(); + return; + } + + string pluginFolerPath = AppDomain.CurrentDomain.BaseDirectory + "Plugins"; + if (!Directory.Exists(pluginFolerPath)) + { + MessageBox.Show("Install failed: cound't find workflow directory"); + Close(); + return; + } + + string newPluginPath = pluginFolerPath + "\\" + plugin.Name; + string content = string.Format( + "Do you want to install following workflow?\r\nName: {0}\r\nVersion: {1}\r\nAuthor: {2}", + plugin.Name, plugin.Version, plugin.Author); + if (Directory.Exists(newPluginPath)) + { + PluginMetadata existingPlugin = GetMetadataFromIni(newPluginPath); + if (existingPlugin == null || existingPlugin.Name == null) + { + //maybe broken plugin, just delete it + Directory.Delete(newPluginPath, true); + } + else + { + content = string.Format( + "Do you want to update following workflow?\r\nName: {0}\r\nOld Version: {1}\r\nNew Version: {2}\r\nAuthor: {3}", + plugin.Name, existingPlugin.Version, plugin.Version, plugin.Author); + } + } + + MessageBoxResult result = MessageBox.Show(content, "Install workflow", + MessageBoxButton.YesNo, MessageBoxImage.Question); + if (result == MessageBoxResult.Yes) + { + if (Directory.Exists(newPluginPath)) + { + Directory.Delete(newPluginPath, true); + } + UnZip(path, newPluginPath, true); + Directory.Delete(tempFoler, true); + + + string winalfred = AppDomain.CurrentDomain.BaseDirectory + "WinAlfred.exe"; + if (File.Exists(winalfred)) + { + Process.Start(winalfred, "refreshWorkflows"); + MessageBox.Show("You have installed workflow " + plugin.Name + " successfully."); + } + else + { + MessageBox.Show("You have installed workflow " + plugin.Name + " successfully. Please restart your winalfred to use new workflow."); + } + Close(); + } + else + { + Close(); + } + } + } + + private static PluginMetadata GetMetadataFromIni(string directory) + { + string iniPath = directory + "\\plugin.ini"; + + if (!File.Exists(iniPath)) + { + return null; + } + + try + { + PluginMetadata metadata = new PluginMetadata(); + IniParser ini = new IniParser(iniPath); + metadata.Name = ini.GetSetting("plugin", "Name"); + metadata.Author = ini.GetSetting("plugin", "Author"); + metadata.Description = ini.GetSetting("plugin", "Description"); + metadata.Language = ini.GetSetting("plugin", "Language"); + metadata.Version = ini.GetSetting("plugin", "Version"); + metadata.PluginType = PluginType.ThirdParty; + metadata.ActionKeyword = ini.GetSetting("plugin", "ActionKeyword"); + metadata.ExecuteFilePath = directory + "\\" + ini.GetSetting("plugin", "ExecuteFile"); + metadata.PluginDirecotry = directory + "\\"; + metadata.ExecuteFileName = ini.GetSetting("plugin", "ExecuteFile"); + + if (!AllowedLanguage.IsAllowed(metadata.Language)) + { + string error = string.Format("Parse ini {0} failed: invalid language {1}", iniPath, + metadata.Language); + return null; + } + if (!File.Exists(metadata.ExecuteFilePath)) + { + string error = string.Format("Parse ini {0} failed: ExecuteFilePath didn't exist {1}", iniPath, + metadata.ExecuteFilePath); + return null; + } + + return metadata; + } + catch (Exception e) + { + return null; + } + } + + /// + /// unzip + /// + /// The ziped file. + /// The STR directory. + /// overwirte + public void UnZip(string zipedFile, string strDirectory, bool overWrite) + { + if (strDirectory == "") + strDirectory = Directory.GetCurrentDirectory(); + if (!strDirectory.EndsWith("\\")) + strDirectory = strDirectory + "\\"; + + using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile))) + { + ZipEntry theEntry; + + while ((theEntry = s.GetNextEntry()) != null) + { + string directoryName = ""; + string pathToZip = ""; + pathToZip = theEntry.Name; + + if (pathToZip != "") + directoryName = Path.GetDirectoryName(pathToZip) + "\\"; + + string fileName = Path.GetFileName(pathToZip); + + Directory.CreateDirectory(strDirectory + directoryName); + + if (fileName != "") + { + if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName))) + { + using (FileStream streamWriter = File.Create(strDirectory + directoryName + fileName)) + { + byte[] data = new byte[2048]; + while (true) + { + int size = s.Read(data, 0, data.Length); + + if (size > 0) + streamWriter.Write(data, 0, size); + else + break; + } + streamWriter.Close(); + } + } + } + } + + s.Close(); + } + } + + void MainWindow_Loaded(object sender, RoutedEventArgs e) + { + string filePath = Directory.GetCurrentDirectory() + "\\WinAlfred.WorkflowInstaller.exe"; + string iconPath = Directory.GetCurrentDirectory() + "\\app.ico"; + + SaveReg(filePath, ".winalfred", iconPath, false); + } + + [DllImport("shell32.dll")] + private static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2); + + private static void SaveReg(string filePath, string fileType, string iconPath, bool overrides) + { + RegistryKey classRootKey = Registry.ClassesRoot.OpenSubKey("", true); + RegistryKey winAlfredKey = classRootKey.OpenSubKey(fileType, true); + if (winAlfredKey != null) + { + if (!overrides) + { + return; + } + classRootKey.DeleteSubKeyTree(fileType); + } + classRootKey.CreateSubKey(fileType); + winAlfredKey = classRootKey.OpenSubKey(fileType, true); + winAlfredKey.SetValue("", "winalfred.winalfred"); + winAlfredKey.SetValue("Content Type", "application/winalfred"); + + RegistryKey iconKey = winAlfredKey.CreateSubKey("DefaultIcon"); + iconKey.SetValue("", iconPath); + + winAlfredKey.CreateSubKey("shell"); + RegistryKey shellKey = winAlfredKey.OpenSubKey("shell", true); + shellKey.SetValue("", "Open"); + RegistryKey openKey = shellKey.CreateSubKey("open"); + openKey.SetValue("", "Open with winalfred"); + + openKey = shellKey.OpenSubKey("open", true); + openKey.CreateSubKey("command"); + RegistryKey commandKey = openKey.OpenSubKey("command", true); + string pathString = "\"" + filePath + "\" \"%1\""; + commandKey.SetValue("", pathString); + + //refresh cache + SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero); + } + } +} diff --git a/WinAlfred.WorkflowInstaller/Properties/AssemblyInfo.cs b/WinAlfred.WorkflowInstaller/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..a43935313 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("WinAlfred.WorkflowInstaller")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("qianlifeng")] +[assembly: AssemblyProduct("WinAlfred.WorkflowInstaller")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请在 +// 中的 .csproj 文件中 +//设置 CultureYouAreCodingWith。例如,如果您在源文件中 +//使用的是美国英语,请将 设置为 en-US。然后取消 +//对以下 NeutralResourceLanguage 特性的注释。更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(在页面或应用程序资源词典中 + // 未找到某个资源的情况下使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(在页面、应用程序或任何主题特定资源词典中 + // 未找到某个资源的情况下使用) +)] + + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WinAlfred.WorkflowInstaller/Properties/Resources.Designer.cs b/WinAlfred.WorkflowInstaller/Properties/Resources.Designer.cs new file mode 100644 index 000000000..ba78eff8c --- /dev/null +++ b/WinAlfred.WorkflowInstaller/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.18052 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace WinAlfred.WorkflowInstaller.Properties +{ + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的、缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinAlfred.WorkflowInstaller.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 为所有资源查找重写当前线程的 CurrentUICulture 属性, + /// 方法是使用此强类型资源类。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/WinAlfred.WorkflowInstaller/Properties/Resources.resx b/WinAlfred.WorkflowInstaller/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/WinAlfred.WorkflowInstaller/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinAlfred.WorkflowInstaller/Properties/Settings.Designer.cs b/WinAlfred.WorkflowInstaller/Properties/Settings.Designer.cs new file mode 100644 index 000000000..e462a1d2a --- /dev/null +++ b/WinAlfred.WorkflowInstaller/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18052 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinAlfred.WorkflowInstaller.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/WinAlfred.WorkflowInstaller/Properties/Settings.settings b/WinAlfred.WorkflowInstaller/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/WinAlfred.WorkflowInstaller/WinAlfred.WorkflowInstaller.csproj b/WinAlfred.WorkflowInstaller/WinAlfred.WorkflowInstaller.csproj new file mode 100644 index 000000000..ba739c626 --- /dev/null +++ b/WinAlfred.WorkflowInstaller/WinAlfred.WorkflowInstaller.csproj @@ -0,0 +1,129 @@ + + + + + Debug + AnyCPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928} + WinExe + Properties + WinAlfred.WorkflowInstaller + WinAlfred.WorkflowInstaller + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + ..\ + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + app.manifest + + + app.ico + + + + ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + Designer + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + Always + + + + + {8451ECDD-2EA4-4966-BB0A-7BBC40138E80} + WinAlfred.Plugin + + + + + xcopy /Y $(TargetPath) $(SolutionDir)WinAlfred\bin\Debug\ +xcopy /Y $(TargetDir)ICSharpCode.SharpZipLib.dll $(SolutionDir)WinAlfred\bin\Debug\ + + + + \ No newline at end of file diff --git a/WinAlfred.WorkflowInstaller/app.ico b/WinAlfred.WorkflowInstaller/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..c5f72ba8bb07e0e31e882d482a8576843a2f6192 GIT binary patch literal 370070 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 literal 0 HcmV?d00001 diff --git a/WinAlfred.WorkflowInstaller/app.manifest b/WinAlfred.WorkflowInstaller/app.manifest new file mode 100644 index 000000000..234bf987f --- /dev/null +++ b/WinAlfred.WorkflowInstaller/app.manifest @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WinAlfred.WorkflowInstaller/packages.config b/WinAlfred.WorkflowInstaller/packages.config new file mode 100644 index 000000000..e2a24c16d --- /dev/null +++ b/WinAlfred.WorkflowInstaller/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/WinAlfred.sln b/WinAlfred.sln index eca79e1fa..30ec5343e 100644 --- a/WinAlfred.sln +++ b/WinAlfred.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinAlfred.Plugin.System", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinAlfred.Plugin.Fanyi", "Plugins\WinAlfred.Plugin.Fanyi\WinAlfred.Plugin.Fanyi.csproj", "{353769D3-D11C-4D86-BD06-AC8C1D68642B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinAlfred.WorkflowInstaller", "WinAlfred.WorkflowInstaller\WinAlfred.WorkflowInstaller.csproj", "{FAFCAD04-C37E-477B-88C9-0C945E4FB928}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -100,6 +102,20 @@ Global {353769D3-D11C-4D86-BD06-AC8C1D68642B}.Release|Win32.ActiveCfg = Release|Any CPU {353769D3-D11C-4D86-BD06-AC8C1D68642B}.Release|x64.ActiveCfg = Release|Any CPU {353769D3-D11C-4D86-BD06-AC8C1D68642B}.Release|x86.ActiveCfg = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|x64.ActiveCfg = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Debug|x86.ActiveCfg = Debug|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|Any CPU.Build.0 = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|Win32.ActiveCfg = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|x64.ActiveCfg = Release|Any CPU + {FAFCAD04-C37E-477B-88C9-0C945E4FB928}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WinAlfred/Helper/DwmDropShadow.cs b/WinAlfred/Helper/DwmDropShadow.cs new file mode 100644 index 000000000..030accebd --- /dev/null +++ b/WinAlfred/Helper/DwmDropShadow.cs @@ -0,0 +1,73 @@ +using System; +using System.Drawing.Printing; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Interop; + +namespace WinAlfred.Helper +{ + public static class DwmDropShadow + { + + [DllImport("dwmapi.dll", PreserveSig = true)] + private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); + + [DllImport("dwmapi.dll")] + private static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref Margins pMarInset); + + /// + /// Drops a standard shadow to a WPF Window, even if the window isborderless. Only works with DWM (Vista and Seven). + /// This method is much more efficient than setting AllowsTransparency to true and using the DropShadow effect, + /// as AllowsTransparency involves a huge permormance issue (hardware acceleration is turned off for all the window). + /// + /// Window to which the shadow will be applied + public static void DropShadowToWindow(Window window) + { + if (!DropShadow(window)) + { + window.SourceInitialized += new EventHandler(window_SourceInitialized); + } + } + + private static void window_SourceInitialized(object sender, EventArgs e) //fixed typo + { + Window window = (Window)sender; + + DropShadow(window); + + window.SourceInitialized -= new EventHandler(window_SourceInitialized); + } + + /// + /// The actual method that makes API calls to drop the shadow to the window + /// + /// Window to which the shadow will be applied + /// True if the method succeeded, false if not + private static bool DropShadow(Window window) + { + try + { + WindowInteropHelper helper = new WindowInteropHelper(window); + int val = 2; + int ret1 = DwmSetWindowAttribute(helper.Handle, 2, ref val, 2); + + if (ret1 == 0) + { + Margins m = new Margins { Bottom = 0, Left = 0, Right = 0, Top = 0 }; + int ret2 = DwmExtendFrameIntoClientArea(helper.Handle, ref m); + return ret2 == 0; + } + else + { + return false; + } + } + catch (Exception ex) + { + // Probably dwmapi.dll not found (incompatible OS) + return false; + } + } + + } +} \ No newline at end of file diff --git a/WinAlfred/MainWindow.xaml b/WinAlfred/MainWindow.xaml index 02da826d8..bb69c1e6b 100644 --- a/WinAlfred/MainWindow.xaml +++ b/WinAlfred/MainWindow.xaml @@ -18,7 +18,7 @@ - + diff --git a/WinAlfred/MainWindow.xaml.cs b/WinAlfred/MainWindow.xaml.cs index b612f9365..27602d97d 100644 --- a/WinAlfred/MainWindow.xaml.cs +++ b/WinAlfred/MainWindow.xaml.cs @@ -9,12 +9,14 @@ using System.Windows.Input; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Threading; -using IWshRuntimeLibrary; using Microsoft.Win32; using WinAlfred.Commands; using WinAlfred.Helper; using WinAlfred.Plugin; using WinAlfred.PluginLoader; +using DataFormats = System.Windows.DataFormats; +using DragDropEffects = System.Windows.DragDropEffects; +using DragEventArgs = System.Windows.DragEventArgs; using KeyEventArgs = System.Windows.Input.KeyEventArgs; using MessageBox = System.Windows.MessageBox; using Timer = System.Threading.Timer; @@ -84,14 +86,6 @@ namespace WinAlfred } } - protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) - { - base.OnMouseLeftButtonDown(e); - - // Begin dragging the window - this.DragMove(); - } - private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e) { resultCtrl.Dirty = true; @@ -148,21 +142,21 @@ namespace WinAlfred private void SetAutoStart(bool IsAtuoRun) { - string LnkPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "//WinAlfred.lnk"; - if (IsAtuoRun) - { - WshShell shell = new WshShell(); - IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(LnkPath); - shortcut.TargetPath = System.Reflection.Assembly.GetExecutingAssembly().Location; - shortcut.WorkingDirectory = Environment.CurrentDirectory; - shortcut.WindowStyle = 1; //normal window - shortcut.Description = "WinAlfred"; - shortcut.Save(); - } - else - { - System.IO.File.Delete(LnkPath); - } + //string LnkPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "//WinAlfred.lnk"; + //if (IsAtuoRun) + //{ + // WshShell shell = new WshShell(); + // IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(LnkPath); + // shortcut.TargetPath = System.Reflection.Assembly.GetExecutingAssembly().Location; + // shortcut.WorkingDirectory = Environment.CurrentDirectory; + // shortcut.WindowStyle = 1; //normal window + // shortcut.Description = "WinAlfred"; + // shortcut.Save(); + //} + //else + //{ + // System.IO.File.Delete(LnkPath); + //} } private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) @@ -262,5 +256,6 @@ namespace WinAlfred } #endregion + } } \ No newline at end of file diff --git a/WinAlfred/Properties/Resources.resx b/WinAlfred/Properties/Resources.resx index 3ae43d89b..5dcdc10fd 100644 --- a/WinAlfred/Properties/Resources.resx +++ b/WinAlfred/Properties/Resources.resx @@ -119,6 +119,6 @@ - ..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\app.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/WinAlfred/WinAlfred.csproj b/WinAlfred/WinAlfred.csproj index 66418b728..72c2e6ebc 100644 --- a/WinAlfred/WinAlfred.csproj +++ b/WinAlfred/WinAlfred.csproj @@ -94,6 +94,7 @@ + @@ -189,23 +190,15 @@ - - - - - {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} - 1 - 0 - 0 - tlbimp - False - True - + + Always + - xcopy /Y $(ProjectDir)Images\*.* $(SolutionDir)WinAlfred\bin\Debug\Images\ + xcopy /Y $(ProjectDir)Images\*.* $(SolutionDir)WinAlfred\bin\Debug\Images\ +xcopy /Y $(ProjectDir)app.ico $(SolutionDir)WinAlfred\bin\Debug\