定时的好做,就是控制鼠标点击网页中的按钮不知如何下手?请高手指点啊 求代码
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,是不存在的。
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;
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.
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窗口.
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。
1.用findwindow找到ie窗口.
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。
#8
我有坐标点击的
另外,网页内的控件不适合用FindWindow来查找
另外,网页内的控件不适合用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,是不存在的。
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;
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.
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窗口.
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。
1.用findwindow找到ie窗口.
可以先让程序检查是否找到了窗口句柄,逐个往下找问题。
#8
我有坐标点击的
另外,网页内的控件不适合用FindWindow来查找
另外,网页内的控件不适合用FindWindow来查找
#9
用FindWindow来查找
#10
我逐行运行 ie窗口可以找到 但是里面的按钮找不到
#11
enumchildwindow可以列举子窗口。