在工作中,写代码或者文档的时候,经常需要用到把某段字符变成大写或小写,虽然很多编辑器都提供转换大小写的功能,但是快捷键五花八门,不尽相同,我也记不住,十分不方便。所以乘无聊的时候自己做了个大小写转换的工具,用上自己记得的的系统热键。
功能很简单,就是按Alt+U就把剪贴板里的文本转换成大写,按Alt+L则小写。
主要用的的技术点:
1. 注册/注销系统热键(调用WIN32 API)
申明API函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [DllImport("user32.dll")] //申明API函数 public static extern bool RegisterHotKey( IntPtr hWnd, //要定义热键的窗口的句柄 int id, //定义热键ID(不能与其它ID重复) uint fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 Keys vk //定义热键的虚键码 ); [DllImport("user32.dll")] //申明API函数 public static extern bool UnregisterHotKey( IntPtr hWnd, //要取消热键的窗口的句柄 int id //要取消热键的ID ); public enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 } |
在程序加载时注册快捷键
1 2 | RegisterHotKey(Handle, 100, 1, Keys.U); RegisterHotKey(Handle, 200, 1, Keys.L); |
重写WndProc函数,监视Windows消息,做出相应操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | protected override void WndProc(ref Message m)//监视Windows消息 { const int WM_HOTKEY = 0x0312; //如果m.Msg的值为0x0312那么表示用户按下了热键 switch (m.Msg) { case WM_HOTKEY: ProcessHotkey(m); //按下热键时调用ProcessHotkey()函数 break; } base.WndProc(ref m); //将系统消息传递自父类的WndProc } //按下设定的键时调用该函数 private void ProcessHotkey(Message m) { IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型 string sid = id.ToString(); switch (sid) { case "100": ToUpper(); break; case "200": ToLower(); break; } } |
在退出程序时,注销快捷键
1 2 3 4 5 | private void FormConveter_FormClosing(object sender, FormClosingEventArgs e) { UnregisterHotKey(Handle, 100); UnregisterHotKey(Handle, 200); } |
2. 操作系统剪贴板(使用System.Windows.Forms.Clipboard类)
使用Clipboard类的GetDataObject()方法得到剪贴板中的数据,该方法返回一个IDataObject,使用IDataObject对象的GetDataPresent(System.Type format)判断IDataObject对象中存储的数据是否可以转换为指定的格式,该方法接收一个参数该参数必须是系统预定义的一种格式类型,该方法返回bool值。最后使用IDataObject对象的GetData(System.Type format)方法得到数据内容,该方法返回Object使用前要进行类型转换。
SetDataObject(Object obj,bool copy)方法将数据放置在剪贴板上,参数obj指要放置的数据对象,参数copy指当程序退出时数据是否仍然保存在剪贴板上。
1 2 3 4 5 6 7 8 9 10 | private void ToUpper() { IDataObject iData = Clipboard.GetDataObject(); if (iData.GetDataPresent(DataFormats.Text)) { string content = (string)iData.GetData(DataFormats.Text); //make upper and put into clipboard Clipboard.SetDataObject(content.ToUpper(), true); } } |
源代码下载:iUpperLowerConverterSouceCode.zip
原创文章,转载请注明: 转载自闲云博客
本文链接地址: 给自己用的系统热键实现大小写转换工具
I like your blog. Really helpful and very motivational. Thanks a lot. This will help me a lot.
[回复该评论]
留下评论







1 Comment(s)