如何将窗口置于顶部并模拟其上的点击?

时间:2012-12-13 08:52:50

标签: delphi click simulate

我正在多次运行Delphi应用程序,我需要将每个应用程序放在顶部,并在其表单的某处模拟鼠标单击。

在我的应用程序中,我有一个TWebBrowser组件,我想点击该浏览器中的某个位置。问题是我需要点击浏览器中的flash对象。我试图让ClassName和Handle单击flash,但不能与所有网站一起使用。所以唯一有效的方法是模拟鼠标点击。

例如,我将此链接加载到浏览器http://bit.ly/XWaelU中,我试图模拟点击内部Flash播放器中的大“播放”按钮。

有人可以通过示例代码帮我解决这个问题吗? 我认为应用程序必须以固定位置启动,因此点击的坐标保持不变,对吧?

感谢。

1 个答案:

答案 0 :(得分:0)

假设你想要点击窗口上的一个控件,该控件具有相对于窗口的已知位置,你可以从中获得(可以获得)句柄,你可以使用它。仅在当前表单上进行演示。 也许适合你的条件。

Procedure SetWindowTopAndClickOnRelPos(wnd:HWND;Pos:TPoint);
var
  ChildControlHandle:HWND;
begin
  SetForegroundWindow(wnd);
  ChildControlHandle:=  ChildWindowFromPoint(WND,pos);
  SendMessage(ChildControlHandle,WM_LButtonDown,0,5*$FFFF + 5);
  SendMessage(ChildControlHandle,WM_LButtonUp,0,5*$FFFF + 5);
  Form4.Memo1.Lines.Add(Format('ChildControlHandle: %d',[ChildControlHandle]));
end;

procedure TForm4.Button1Click(Sender: TObject);
begin
     Memo1.Lines.Add(Format('Window: %d',[Handle]));
     Memo1.Lines.Add(Format('Button: %d',[button2.Handle]));
     SetWindowTopAndClickOnRelPos(handle,Point(Button2.Left + 2,Button2.Top + 2));
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
  Showmessage('Hallo');
end;