您的位置:首页 > 其它

桌面快捷图标 搜索工具

2013-05-13 00:11 447 查看
一直以来,由于使用到的工具越来越多,各种快捷方式的管理也非常的让人厌倦。网上也有很多的很炫的管理工具,但是对于一个不想老是动鼠标的人来说,键盘热键结合快捷的搜索和调用,才是最好的选择,

思路简单如下:

1.小工具开机启动

2. 快捷键可以方便调出小工具,直接进入搜索栏,小工具中默认加载桌面以及桌面文件夹中2层深度的常用文件(doc,pdf,等等,不包括源代码文件)和工具的快捷图标。

3.小工具中的搜索直接用上下键控制选择结果,Enter键直接调用。

这个小工具我选择WPF来开发,主要涉及到的问题有:

1.注册系统热键,以及热键的清除和重新注册。

2.搜索中ListView上的节点选择,直接用上下键控制(这块稍费了些功夫,因为上下键不在OnKeyDown事件中触发。最后查阅了一些帖子才知道,它俩只在OnPreviewKeyDown中触发。

2.任务栏小图标的显示,这个采用的依然是From的NotifyIcon,虽然很多WPF的开源项目也有类似的东西,但是我觉得没必要搞的那么复杂。所以选用了最简单的。

剩下的就是重头戏:

4.对于WPF下MVVM模式的使用,这点没有做到很好,只是大体上使用了这个结构,但是中途因为Binding的一些异常和追踪问题,最终有部分是直接用winfrom的方式绑定的。这部分由于时间问题,先完成功能,对于MVVM的使用后续继续完善,总体感觉,MVVM在WPF下确实很强大,如果将数据binding,依赖,附件属性这些东西都使用好的话,对于View和业务的分层,将会非常的清晰。是个不错的设计思路。

5. 对于MahApps.Metro开源项目中的皮肤的使用。

6.对于WPF基础知识的重新学习,很多技术点长时间不使用的话,有点生疏,刚好再来一次,加深印象。

上个截图,看下这个小工具的长相。



黑底只是另一个工具的因为怕白色无法看清边界,顺手抓过来了。

因为整个工具并未用到太过高深的东西,以下只罗列一部分我觉得比较重要的代码。

/// <summary>
/// 注册热键
/// </summary>
public void HotKeySet()
{
Handle = new WindowInteropHelper(window).Handle;

Controlkey = (uint)CurrentKeyFlag.keyFlag;
Key = (uint)CurrentKey;
KeyId = (int)Controlkey + (int)Key * 10;

if (KeyPair.ContainsKey(KeyId))
{
throw new Exception("热键冲突");
}

if (false == RegisterHotKey(Handle, KeyId, Controlkey, Key))
{
throw new Exception("注册失败!");
}

if (KeyPair.Count == 0)
{
if (false == InstallHotKeyHook(this))
{
throw new Exception("HookFailed!");
}
}

KeyPair.Add(KeyId, this);

//保存热键配置
HotKeys keys = new HotKeys();
string keyName = keys.GetKeyName(CurrentKey);
SettingHelper.SetHotKey(CurrentKeyFlag, keyName);
}


/// <summary>
/// 图片资源转化器
/// </summary>
[ValueConversion(typeof(string), typeof(ImageSource))]
public class IconConver : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return null;

string ext = System.IO.Path.GetExtension(value.ToString()).Replace(".", "").Trim();

if (value.ToString() == "devenv.exe")
{
ext = "visualstudio";
}
if (ext =="")
{
ext = "Explorer";
}

Uri uri;
try
{
uri = new Uri("/E_Start;component/Resources/FileType/" + ext + ".png", UriKind.Relative);
}
catch
{
uri = new Uri("/E_Start;component/Resources/FileType/exe.png", UriKind.Relative);
}

BitmapImage bi = new BitmapImage(uri);
return (new ImageBrush(bi)).ImageSource;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}


/// <summary>
/// 皮肤切换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void themeContextMenuItem_Click(object sender, RoutedEventArgs e)
{
if (sender is MenuItem)
{
Theme theme = new Theme();
string color = string.Empty;
string content = (sender as MenuItem).Header.ToString();
theme = content.ToLower().IndexOf("light") > -1 ? Theme.Light : Theme.Dark;
color = content.Replace("Light", "").Replace("Dark", "").Trim();

ThemeManager.ChangeTheme(this, ThemeManager.DefaultAccents.First(
a => a.Name == color), theme);
}
}

补充一个有用的代码段:用于对lnk快捷方式文件的实际路径指向的获取

using Microsoft.Win32;
using IWshRuntimeLibrary;//所属COM:Windows Script Host Object Model
/// <summary>
/// 获取快捷图标的实际指向
/// </summary>
/// <param name="lnk"></param>
/// <returns></returns>
private string GetTargetPath(string lnk)
{
WshShell shell1 = new WshShell();
IWshShortcut shortcut = (IWshShortcut)shell1.CreateShortcut(lnk);
return shortcut.TargetPath;
}


因为这个工具只是为了符合个人的使用习惯,可能后面还会再加一些觉得比较有用的功能上来,慢慢完善吧。

因为很多代码都是在网上找的别人的范例,所以我不再公开代码了,功能也非常简单,主要是为了偷懒,更快捷的使用资源,不把时间浪费在鼠标的各种移动上。

如果有对代码有兴趣的朋友,可以留下邮箱。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: