我正在多次运行Delphi应用程序,我需要将每个应用程序放在顶部,并在其表单的某处模拟鼠标单击。
在我的应用程序中,我有一个TWebBrowser组件,我想点击该浏览器中的某个位置。问题是我需要点击浏览器中的flash对象。我试图让ClassName和Handle单击flash,但不能与所有网站一起使用。所以唯一有效的方法是模拟鼠标点击。
例如,我将此链接加载到浏览器http://bit.ly/XWaelU中,我试图模拟点击内部Flash播放器中的大“播放”按钮。
有人可以通过示例代码帮我解决这个问题吗? 我认为应用程序必须以固定位置启动,因此点击的坐标保持不变,对吧?
感谢。
答案 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;