如果用 sendmessage 实现下面的功能目的:控制另一个程序的按钮程序P1 控制 程序 P2 P1 中使用线程S1 完成P2的一些操作P2 主窗口 F1 ,有按钮 A1,A2,A3。 Tcheckbox控件  T1 单击T1如果是选中,则弹出F2
      窗口 F2  有按钮 B1,B2  ,单击 B2 (确定) F2关闭
   窗口  F3现要在 P1 程序的 S1 依次 关闭F3 选中 T1,让P2弹出 F2,然后 单击 B1,B2 回到 F1, 单击 A1,A2,A3。 这里所有按钮都要完成一些工作,当然完成这个循环后,程序P2 会弹出一个窗口F3, F3弹出后用Hook 钩到了,再一次执行线程,如此循环三次我现在得到了所以按钮的句柄,矩阵坐标,但是当循环到第二次的时候,B1,B2,A1,A2 A3 的单击不成功,只是按钮那个地方动了一下,并没有执行相应的工作。我是用 sendmessage(h1,wm_Lbuttondown,1,0);   
       sleep(10);
       sendmessage(h1,wm_Lbuttonup,1,0);网上有说要取 按钮的ID ?搞不懂ID是个什么东东,不知是不是句柄,除了sendmessage(h1,wm_Lbuttonup,1,0);
有没有其他方法,最好有实例,谢谢。

解决方案 »

  1.   

    网上找的  h为窗口句柄,h1 是控件句柄,不知行不行
    SENDmessage(h,WM_COMMAND,MAKELONG(GETDLGCTRLID(H1),BN_CLICKED),0);晕,我是上夜班的,要晚上才有得测试,累啊
      

  2.   

    看来你没有接触过纯API编写Windows程序,ID就是一个控件的标识符,由于VCL封装了Win32控件,自然也就用不到ID了。
    还有,句柄在不同的程序实例中都是不同的,因此SendMessage应该发给ID而不是句柄。
    要不,你就用FindWindow或FindWindowEx得到控件句柄,然后发给他
      

  3.   

    老兄,第一次搞这种东西,以前一直做网管呢,我是用Findwindow 行到句柄,然后FindwndowEx得到控件句柄,再用sendmessage 发给句柄,ID不知道怎样得到,
    在发送失败的时候,那些控件的句柄都没变。搞不懂,
    对了,谢谢你前天的回答,那个stringGrid 坐标应该是相对坐标,不是屏幕坐标
      

  4.   

    ID不得到也行,SendMessage()直接发给控件句柄不就行了
      

  5.   

    我自己现搞了两个自己的程序测试过,Sendmessage 可以实现,但是到机器上就有问题,那个目标程序是控制一台机器的,机器也会返回很多东西给那个程序,晚上再去搞