基于键盘钩子(hook)进程解决文章书写换页时丢失书写内容方法一例

原创文章,转载请指明出处并保留原文url地址

近日用wordpress配合bbpress做了个论坛,感觉很好,正在疯狂的使用中, 某日在回复文章时写了非常多文字(如下图,是个示意图)

wps_clip_image-11666[3][1]

当不小心按了键盘的一个特别的键,整个页面就跳转到前一个页面去了。

wps_clip_image-5202[3][1]

在点击浏览器的回退功能后, 出现如下图

wps_clip_image-20265[3][1]

发现是回到但是填写的页面了, 但是丢失了全部文字, 那可是辛苦了好时间写好的呀。

心情很少沮丧!!

后来经过仔细排查, 发现笔者的x200笔记本键盘的光标键旁边有两个特别的键, 如下图

wps_clip_image-27342[3][1]

这个两个键是浏览器的翻页键

若是在页面中写了很多东西, 在点击光标键时不小心点击到了这个键, 则前面的工作就危险了!

如何解决问题?

最好的办法屏蔽这个两个键, 当按下这两个键时,不让他发生任何事情。于是到百度搜索了半天没有发现相关软件。

于是想自己写一个程序来解决这个问题。基本原理如下

对于windows系统中有很多钩子进程(hook),其中有键盘的钩子进程可以在发生键盘事件时优先捕获到相关事件, 然后进行处理,最后传递给应用程序。

于是在百度上查找各种键盘钩子进程的写法。没有特别好的, 最后到www.codeproject.com上搜索, 找到了相关项目

www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library

把源代码下载了,放到vs2010中进行改造,最后修改为如下代码

void keyboardHook_KeyUp(object sender, KeyEventArgs e)

        {

            if (e.KeyCode.ToString().ToLower().Equals("BrowserBack".ToLower()))

            {

                e.SuppressKeyPress = true;

            }

            else if (e.KeyCode.ToString().ToLower().Equals("BrowserForward".ToLower()))

            {

                e.SuppressKeyPress = true;

            }

        }

        void keyboardHook_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.KeyCode.ToString().ToLower().Equals("BrowserBack".ToLower()))

            {

                e.SuppressKeyPress = true;

            }

            else if (e.KeyCode.ToString().ToLower().Equals("BrowserForward".ToLower()))

            {

                e.SuppressKeyPress = true;

            }

        }

编译后运行, 问题解决。最后在对项目本身对本功能没有作用的代码等删除, 形成新的可执行文件, 问题解决。

发表评论