闲云博客

关注互联网科技,记录编程点滴

给自己用的系统热键实现大小写转换工具

| 1 Comment

在工作中,写代码或者文档的时候,经常需要用到把某段字符变成大写或小写,虽然很多编辑器都提供转换大小写的功能,但是快捷键五花八门,不尽相同,我也记不住,十分不方便。所以乘无聊的时候自己做了个大小写转换的工具,用上自己记得的的系统热键。

功能很简单,就是按Alt+U就把剪贴板里的文本转换成大写,按Alt+L则小写。

主要用的的技术点:

1. 注册/注销系统热键(调用WIN32 API)

申明API函数

        [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
        }

在程序加载时注册快捷键

RegisterHotKey(Handle, 100, 1, Keys.U);
RegisterHotKey(Handle, 200, 1, Keys.L);

重写WndProc函数,监视Windows消息,做出相应操作

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;
            }
        }

在退出程序时,注销快捷键

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指当程序退出时数据是否仍然保存在剪贴板上。

        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);
            }
        }

工具下载:UpperLowerConverter.zip

源代码下载:iUpperLowerConverterSouceCode.zip

原创文章,转载请注明: 转载自闲云博客

本文链接地址: 给自己用的系统热键实现大小写转换工具

Author: Jian Yun

Hi,我是闲云,感谢您阅读我的博客。我是一个微软ASP.NET方面的开发者,写写博客分享下互联网科技方面感兴趣的事和记录自己程序开发中的点点滴滴。 ------“立志难也,不在胜人,在自胜”

One Comment

  1. I like your blog. Really helpful and very motivational. Thanks a lot. This will help me a lot.

    [回复该评论]

发表评论

Required fields are marked *.