【问题标题】:How can I bring a window to top and simulate a click on it?如何将窗口置于顶部并模拟点击它?
【发布时间】:2012-12-13 08:52:49
【问题描述】:

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

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

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

有人可以帮助我提供有关如何完成此操作的示例代码吗? 我认为应用程序必须以固定位置启动,以便点击的坐标保持不变,对吧?

谢谢。

【问题讨论】:

  • 你说的模拟鼠标点击是什么意思,例如,你想按下一个按钮或者你想要完成什么?您想从应用程序内部还是从外部应用程序执行此操作?
  • 在我的应用程序中,我有一个 TWebBrowser 组件,我想单击该浏览器中的某个位置。问题是我需要单击该浏览器内的 flash 对象。我试图让 ClassName 和 Handle 单击 flash,但不适用于所有网站。所以唯一可行的就是模拟鼠标点击。
  • 您最好编辑该重要信息并将其添加到您的问题中!

标签: delphi click simulate


【解决方案1】:

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

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;

【讨论】:

  • 感谢您的示例。我编辑了我的问题以更具体地说明我想要什么。
猜你喜欢
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多