sendmessage问题(100)

  • 主题发起人 主题发起人 leadroy
  • 开始时间 开始时间
L

leadroy

Unregistered / Unconfirmed
GUEST, unregistred user!
a:=GetDlgItem(ExeHandle,1003); {保存位置} setForegroundWindow(ExeHandle); SendMessage(a, WM_SETTEXT , 0,Integer(PChar(savepath))); a:=GetDlgItem(ExeHandle,1005); {文件名} setForegroundWindow(ExeHandle); SendMessage(a, WM_SETTEXT, 0, Integer(PChar(savename))); a:=getdlgitem(exehandle,1017); {不自动重命名} setForegroundWindow(ExeHandle); SendMessage(a,BM_SETCHECK,0,0); a:=GetDlgItem(ExeHandle,1); setForegroundWindow(ExeHandle); SendMessage(a,BM_CLICK,0, 0);这些代码是向flashget下载器的下载对话框发出保存位置及文件名的信息,如使用DELPHI的单步调试进行,一点问题都没有,我上面的信息可以正确的发送到flashget的对话框中,但是如我是直接运行,会有信息发送不到的问题,很惨,如我加一条sleep(2000),就是让程序等一下慢慢的发送信息,那会成功,但是我不希望这样,这样会使程序运行速度变慢.请高手指点应该如何让信息一定要发送成功才向下运行.如我使用repeat 发送信息成功吗?until 这样来做的话,就是不能正确的发送,程序会卡死在发送信息处.
 
你用PostMessage试一下,不行的话可能还是要加入延时的,不知道别人有什么好办法。
 
检查SendMessage返回值,对于成功和不成功这2种情况,该函数返回值不同。
 
我试过返回值返回1时是成功的,但是如不是返回1的话,那永远返回不了1了.如 repeate i:=sendmessage(发送的值); until i=1;如i不返回1的话,那就是死循环了.但是如我用单步调试的话,那值就是返回1,所以很无语.
 
如使用延时的话,那一般的都可以,不过还是会出错.如我下载一个电影有100集,中间会有几集会发送错误,所以使用延时也不是很好的解决方法.第一:会使程序变慢.第二:还是不定期的会错,当计算机在处理其它事务时,就是比较慢时发送出错常会发声.所以我没有办法知道在不同速度的计算机上应该用延时多长时间才合理.多了速度慢,少了计算机来不及处理后会出现发送不成功.
 
var i,Count:Integer;begin Count:=0; i:=-1; repeate if i=0 then sleep(100); i:=sendmessage(); Inc(Count); until (i=1) and (Count<20);end;
 
你是不是这些代码的执行时候不对啊~~.
 
不是代码不对,而是我连续的执行SEND时计算机来不及反映所以会出现这问题.
 
另开一个线程,执行延时,执行sendmessage函数,不就行了嘛
 
有两个办法:一个是参数、另一个是延时参数方法:包括返回值或文件参数等延时也是一种办法
 
后退
顶部