有个目标程序窗口上面有三个文本框,分别是T1,T2,T3,在输入T1后,当T1失去焦点或者按TAB键后,那个窗口会自动根据T1的值自动算出T2的值并在T2中显示,然后输入T3后,点确定按钮完成填单。我用Hook(Dll)监视目标窗口来实现自动填单,当目标窗口出现的时候,我用程序模拟输入T1,并对T1发送一个TAB按键(希望激活T1的焦点离开事件,并计算出T2的值),然后模拟输入T3,并模拟点击确定按钮,但那个窗口提示我T2不能为空值。看了一下,在错误提示出现的时候,T2确实没有值。分析了一下,应该是我用程序模拟操作太快了,虽然我给T1发送了TAB,但那个窗口还没来得及计算出来T2并且显示,我的钩子程序就已经输入T3并点击确定按钮了。我想在给T1发送TAB之后加一个小的延时(毫秒级就够了),但发现因为我的Hook Dll是加载到那个窗口程序的进程里的,所以我的Dll延时了,那个窗口程序也跟着延时了。等我钩子延时过了,那个窗口程序才恢复运行。这样的情况下,怎么在钩子里加延时呢?谢谢
从网上查了一下,没找到解决办法,所以还是跑来这里,看各路高手是否有好的解决办法。
不懂的,不能回答的,就别顶了,我会自己关注帖子,自己提前的,谢谢合作
从网上查了一下,没找到解决办法,所以还是跑来这里,看各路高手是否有好的解决办法。
不懂的,不能回答的,就别顶了,我会自己关注帖子,自己提前的,谢谢合作
解决方案 »
- 关于MessageBox的自动取消问题
- 哪位大哥有做好的rave报表的程序,兄弟出100分
- Delphi7 IDE的一个问题
- 关于以delphi开发OCM+这本书
- 还是关于WebBrowser,网页中的框架怎么获取,求高手帮忙
- 问个价钱!!
- 一个sql语句问题!!!
- 谁有delphi5.0啊,十万火急啊,Help me!!!!
- 调用.dll函数的问题:为何总是提示“Invalid pointer operation”,郁闷啊
- 如何实现对已经存在也就是编译好的exe文件进行配置?
- FastReport加载OLE对象BitMap文件,在有的机子上显示错误问题,急。
- 几个edit接收计算器按钮的输入
没看懂我的问题?问题是,你怎么在Hook里加这个延时。什么时候加不是问题。
也就是说,我现在就想知道怎么实现这个延时。
CaiBirdy :
你说的Timer的方法不行,因为无法给Timer事件传递我的一些特定参数。
跟send还是post也没关系,因为post肯定不行,因为那样可能那个窗口程序反应更不及时,用send还有点希望。
计算过程当然不在我的dll里,而是那个窗口程序的事情。
Timer事件只是提供给你一个执行代码的机会,跟你要不要传递什么参数没关系,还有,既然你用send,如果在你的消息处理过程中加入计算过程,那肯定会等你的计算过程结束后才返回的。。
只能说你肯定是在哪里出现错误的了。。
我是想在给T1发送TAB之后,让我的钩子处理函数等待500毫秒(目的是等T1失去焦掉事件执行完,这样T2才有值),然后才继续给T3发送文本但如果直接Sleep(500);的话,会导致那个T1失去焦点事件也在执行过程中暂停。
基于我这里的特殊情况,我不能使用CaiBirdy 说的timer那样的功能,也不能像jiju说的那样判断T2的状态
我只想要,而且也只能要Dll里面延时,而不影响外部程序的运行的效果。也就是说就是要异步的效果。就好像我用EXE控制另外一个第三方程序,我的EXE里面延时并不会影响那个第三方程序运行那样。
createthread 也挺简单的在线程函数里做循环等待500毫秒,再执行输入T3。
另外不知道你什么特殊情况,,能否给大家说下
看来得去学习一下Delphi的线程了