求助:怎样实现控制鼠标点击IE网页中的某个按钮

时间:2022-09-08 14:08:29
想做一个定时器,定时的使用鼠标点击打开的一个网页中某个按钮,如何做到?
定时的好做,就是控制鼠标点击网页中的按钮不知如何下手?请高手指点啊 求代码
http://topic.csdn.net/t/20021125/17/1204088.html 这个帖子里面有写 但是还是不懂

只给你一个算法,具体代码自己写 
1.用findwindow找到ie窗口. 
2.用getwindow找到ie窗口的子窗口,即按钮等 
3.用getwindowtext得到窗口的text,根据按钮名称判断是否是你要的按钮。若不是,循环 
  while   句柄   >   0   then 
      句柄   :=   getwindow(句柄,GW_HWNDNEXT); 
      if   getwindowtext   =   你要的按钮   then 
          sendmessage(ie.handle,wm_command,0,按钮.handle)   或用 
          senemessage(按钮.handle,wm_lbuttondown,0,0) 
          senemessage(按钮.handle,wm_lbuttonup,0,0) 
      else 
          句柄   :=   getwindow(句柄,GW_HWNDNEXT); 

循环结束 


怎样使用findwindow getwindow 句柄  本人愚钝 不知如何用 高人帮我指点一下 万份感激

11 个解决方案

#2


万老师的博客里面的例子是自己做一个网页窗口 知道了网页的源码 不知道源码的情况下 从IE打开一个别人网站的网页 再点击其中的一个按钮 如何做呢 

#3


handle=findwindow("ie窗口的标题")
HWND GetWindow(handle,这个参数参看下面列表;
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。 
  nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一: 
  GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。 
  GW_ENABLEDPOPUP:(WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。 
  GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。 
  GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。 
  GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。 
  GW HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。 
  GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。GW_OWNER与GW_CHILD不是相对的参数,没有父窗口的含义,如果想得到父窗口请使用GetParent()。例如:例如有时对话框的控件的GW_OWNER,是不存在的。

#4


var
    hTopWnd, hEditWnd: THandle;
begin
    hTopWnd := FindWindow('顶层窗口类名', '顶层窗口标题');
    if IsWindow(hTopWnd) then
    begin
        hEditWnd := FindWindowEx(hTopWnd, NULL, '子窗口类名', '子窗口标题');
        if IsWindow(hEditWnd) then
        begin
            // 找到子窗口了...
        end;
    end;
end;

#5


一般都不是直接操作IE的 建议你使用WB控件或者EM

#6


procedure TForm1.Button1Click(Sender: TObject);
var
  handle1,handle2:THandle;
  sText:string;
begin
  shellexecute(handle,'open',pchar('http://www.xgzrc.com/Company/'),'','',SW_SHOWNORMAL);
  sleep(3000);
  handle1:=findwindow(nil,'企业服务 - 新工作人才网www.xgzrc.com - Tencent Traveler');
  handle2 := getwindow(handle1,GW_HWNDNEXT);
  while handle2 > 0 do
  begin
    GetWindowText(handle2,pChar(sText),255);
    if sText = '注册' then
      begin
        sendmessage(handle2,wm_lbuttondown,0,0);
        sendmessage(handle2,wm_lbuttonup,0,0);
      end
    else
      handle2 := getwindow(handle1,GW_HWNDNEXT);
  end;
end;
运行这段代码报错:
...project1.exe raised too many consecutive exceptions :' access violation at 0x77e306b7 :write of address 0x004046bd' Process stopped. Use Step or Run to continue. 

#7


思路是先找到按钮,再向按钮发送消息。现在不知那里出了问题,觉得应逐个检查:
1.用findwindow找到ie窗口.  
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。

#8


我有坐标点击的
另外,网页内的控件不适合用FindWindow来查找

#9


用FindWindow来查找

#10


我逐行运行 ie窗口可以找到 但是里面的按钮找不到 

#11


enumchildwindow可以列举子窗口。

#1


#2


万老师的博客里面的例子是自己做一个网页窗口 知道了网页的源码 不知道源码的情况下 从IE打开一个别人网站的网页 再点击其中的一个按钮 如何做呢 

#3


handle=findwindow("ie窗口的标题")
HWND GetWindow(handle,这个参数参看下面列表;
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。 
  nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一: 
  GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。 
  GW_ENABLEDPOPUP:(WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。 
  GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。 
  GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。 
  GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。 
  GW HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。 
  GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。GW_OWNER与GW_CHILD不是相对的参数,没有父窗口的含义,如果想得到父窗口请使用GetParent()。例如:例如有时对话框的控件的GW_OWNER,是不存在的。

#4


var
    hTopWnd, hEditWnd: THandle;
begin
    hTopWnd := FindWindow('顶层窗口类名', '顶层窗口标题');
    if IsWindow(hTopWnd) then
    begin
        hEditWnd := FindWindowEx(hTopWnd, NULL, '子窗口类名', '子窗口标题');
        if IsWindow(hEditWnd) then
        begin
            // 找到子窗口了...
        end;
    end;
end;

#5


一般都不是直接操作IE的 建议你使用WB控件或者EM

#6


procedure TForm1.Button1Click(Sender: TObject);
var
  handle1,handle2:THandle;
  sText:string;
begin
  shellexecute(handle,'open',pchar('http://www.xgzrc.com/Company/'),'','',SW_SHOWNORMAL);
  sleep(3000);
  handle1:=findwindow(nil,'企业服务 - 新工作人才网www.xgzrc.com - Tencent Traveler');
  handle2 := getwindow(handle1,GW_HWNDNEXT);
  while handle2 > 0 do
  begin
    GetWindowText(handle2,pChar(sText),255);
    if sText = '注册' then
      begin
        sendmessage(handle2,wm_lbuttondown,0,0);
        sendmessage(handle2,wm_lbuttonup,0,0);
      end
    else
      handle2 := getwindow(handle1,GW_HWNDNEXT);
  end;
end;
运行这段代码报错:
...project1.exe raised too many consecutive exceptions :' access violation at 0x77e306b7 :write of address 0x004046bd' Process stopped. Use Step or Run to continue. 

#7


思路是先找到按钮,再向按钮发送消息。现在不知那里出了问题,觉得应逐个检查:
1.用findwindow找到ie窗口.  
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。

#8


我有坐标点击的
另外,网页内的控件不适合用FindWindow来查找

#9


用FindWindow来查找

#10


我逐行运行 ie窗口可以找到 但是里面的按钮找不到 

#11


enumchildwindow可以列举子窗口。