实现的过程如下:
    窗体创建,form1显示, 鼠标定位到 111,111 模拟点击鼠标左键,form1隐藏 。
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure CMMouseEnter(var Msg: TMessage); message WM_LBUTTONDOWN;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure Tform1.CMMouseEnter(var Msg: TMessage);  /////鼠标左键按下触发此过程
  anObject : TObject;
begin
  anObject := TObject(Msg.lParam);
  //进入控件
  if anObject <> nil then
  begin
    showmessage('cc');
  end;
end;procedure TForm1.Timer1Timer(Sender: TObject);  // 窗体位置设置在 包含坐标111,111  的位置
begin
    form1.show ;
    setforegroundwindow(form1.Handle );
    setCursorPos(111 ,111 )   ;
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo());
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo  ());
    timer1.Enabled :=false;
    //form1.Hide ;   去掉‘//’后 不能点击成功不显示‘cc’, 而不去掉‘//’则能成功 显示 ‘cc’。
end;end.
发狂了, 怎么让这个过程瞬间完成?我用timer1来控制form1.hide,模拟点鼠标后一秒钟 再隐藏窗体 倒是 能成功点击。 但是怎么能够让这个过程瞬间完成?

解决方案 »

  1.   


    //form1.Hide   ; 
    改为PostMessage(Form1.Handle,WM_HIDEME,0,0);const
       WM_HIDEME= $3456;
    form1里面增加消息响应函数
    procedure OnHideSelf(var Msg:TMessage);message WM_HIDEME;procedure OnHideSelf(var Msg:TMessage);
    begin
      Hide;
    end;
      

  2.   

    谢谢 仁兄们的帮助,我在mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo     ()); 
    后加了一个标志判断,然后开timer2,让timer2 隐藏form1,也得到了效果. 就是挺郁闷,学不到新东西......
    3楼的仁兄 谢谢你的方法,我回去试试!