|
现象:
开着 td 时在 delphi ide 下无法使用 ctrl + shift + 1 - 9 设置、定位书签,这对开发人员在看 td 的同时开 delphi 却无法使用 bookmark 非常影响心情
分析:
中午看了一下 TDClientUI80.ocx,原来是 td 启动时会向系统注册全局的快捷键:ctrl + shift + 1 - 9,当在 delphi 的 ide 下按下相应的快捷键时 td 会首先拦截下来,造成 delphi 中 bookmark 快捷键的失灵!
用 w32Dasm 可以看到 TDClientUI80.ocx td 的具体实现细节其实非常简单:
首先以 TdFrameX_HotKey_n(n:0-9)为名使用 GlobalAddAtom 向操作系统神情全局原子标识,利用这个标识向系统注册快捷键 RegisterHotKey。
解决办法:
知道缘由了,解决的方式非常多,比如:
1、修改 ocx 中对 RegisterHotKey 的调用,nop 掉
2、由于知道他 RegisterHotKey 的方式,利用他实现的原来调用 UnregisterHotKey 取消热键
3、修改对 RegisterHotKey 的调用,让他即使调用 RegisterHotKey 也没有效果
比较:
对 1,实现最简单,不过需要修改 TDClientUI80.ocx 文件,发布非常不方便
对 2,编程比较简单,不过有点“出问题”后补救的感觉,难以自动化
对 3,原理非常复杂,不过利用网上已有的代码包实现起来还是非常方便的,其中核心代码竟然不超过 10 行!
附件是编译好的 dll
安装:解压到一个目录,运行 install.bat
使用:连接 td,他会自动生效的
卸载:运行 uninstall.bat
关于源码,欢迎来 mail 索取、讨论,或直接发表您的见解 ...
=^0^= |
|