学了几天的易语言,发现一个基本的辅助操作,就是按键呼出,然后自己就像这是怎么实现的。中途找了N多资料,这里我真的很想吐槽一下,当然仅仅代表个人看法,各种资料都是些封装的模块,也没有合适的反编译易语言模块来看高手写的代码让我这菜鸟来学习,但是吧,总觉得不开源出来很多东西会越来越封闭,掌握在少数人手里和大家一起开发维护,我这里不评价好坏,纯属个人很厌烦这种行为吧。so.....咋办,那就自己直接撸代码开干呗,这里又想吐槽,不是看不起易语言,只是觉得编译器很蠢,或许是自己不会用太蠢了吧,提示内容提示出来按回车不给我填上第一条内容反而要我在按一次方向键选中第一个内容,还有方法里继续调方法的时候,居然没有方法名提示了,还有选中方法的时候,居然不给我自动填充括号,还有更多等待发掘。
好了说正事吧。开发一个软件的时候,最先的应该是需求,我们的要求很简单,就是按某键呼出隐藏窗口,那么如何实现呢,楼主遍寻资料啊,直接用人家的模块,楼主有点小倔强,就像自己来,这里我们不扯调windowsAPI。但起码有个人的看法。
楼主思路很菜鸟,windows是事件消息处理机制,那我直接就注册热键监听热键消息呗,然后开始苦寻API,耗时较多的是在API用法上面,因为楼主学java的,很是不能理解windowsapi里的这种写法,比如 peekMessage(msg,hwnd,整数,整数) 居然是自己传一个空windows定义的空Msg对象进去,对比java中,一般是传一些需要的参数,然后返回我要的对象。这个API试了我大半天的时间,只能怪自己有点蠢吧,不过发现坑爹问题。getMessage API会阻塞当前线程,这样的话就又把方案整理成,主线程运行,子线程做阻塞监听按键消息,可是在这里把自己又难倒了,子线程获取不到主线程的按键消息,然后又一顿API查找找了个啥AttachThreadInput 连接主线程的API,据说可以共享消息一些东西,果断尝试,百思不得其解,发现主线程注册的热键,子线程硬是拿不到,然后子线程又尝试注册热键,发现没有办法注册,然后死在这里。。
不甘心啊,第二天觉得自己不应该这么牛角尖,果断继续想方案,然后找资料各种听说hook技术,哎,思路来了,我hook住热键消息,交给自己管理,那就不需要自己去监视了,系统给我回调函数,卧槽。果断发现这个API相当的nice,然后一顿操作,发现嘿嘿,成了。但是又觉得这样不能提供给别人用啊。太硬了。当然这中间又发现个问题,就是易语言不像java一样可以通过反射技术调用某个类的方法,不得不逼自己明明hook住了,还要在弄一个钩子链来执行其他用户注册进来的函数,so,low逼的我做的很Low逼,弄了两个钩子才完成这个隐藏并且别人可以使用,并且用来执行用户想执行的函数。贴源码。
下图的1637808其实是参数6的值,这个值需要替换你程序运行的值。
代码是新鲜出炉的所有一些参数没有很明确说明,但是嘛。仅供参考嘛,要是我自己当时能有源码,我觉得学习起来肯定是飞速的。。奈何。。。。