webbrower1.handle怎么获取不了句柄呢?var
Gameh:HWND;
lparam:DWORD;
p1:TPoint;
begin
p1.X:=StrToInt(edit1.Text);
p1.Y:=StrToInt(edit2.Text);
//获取窗口句柄
gameH:=form1.WebBrowser2.Handle;
lparam:=p1.X+ p1.Y shl 16;
SendMessage(gameH,WM_LBUTTONDOWN,0,lparam); //鼠标按下
sendMessage(gameh,WM_LBUTTONUP,0,lparam); // 鼠标抬起
end;经过检查。gameH:=form1.WebBrowser2.Handle;获取不了句柄form1.Handle;也不能实现点击大神们 求助呀
Gameh:HWND;
lparam:DWORD;
p1:TPoint;
begin
p1.X:=StrToInt(edit1.Text);
p1.Y:=StrToInt(edit2.Text);
//获取窗口句柄
gameH:=form1.WebBrowser2.Handle;
lparam:=p1.X+ p1.Y shl 16;
SendMessage(gameH,WM_LBUTTONDOWN,0,lparam); //鼠标按下
sendMessage(gameh,WM_LBUTTONUP,0,lparam); // 鼠标抬起
end;经过检查。gameH:=form1.WebBrowser2.Handle;获取不了句柄form1.Handle;也不能实现点击大神们 求助呀
继续求助 怎么才可以取到WebBrowser的句柄
应该如何来实现呢? 这里来简单说明一下点击坐标的过程
点击过程很明显我们移动鼠标来点击或者发送消息来点击
移动鼠标点击的比较常见 这里详细说明一下发送消息来点击的办法
发送消息来点击的思路是sendmessage()发送消息来实现的
导入句柄 点击的就可以了。但是这里的句柄(webbrowser的句柄)其实是不好找的。如果找到了合适的正确的句柄点击起来还是非常容易的
这里有一个过程可以清楚的说明sendmessage的点击过程procedure sendclick(var x,y:integer) ;
begin
SendMessage(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONDOWN,
////MK_LBUTTON, MAKELONG(strtoint(edit2.Text),strtoint(edit3.Text)));
MK_LBUTTON, MAKELONG(x,y));
sleep(500);
SendMessage(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONUP,
////MK_LBUTTON, MAKELONG(strtoint(edit2.Text),strtoint(edit3.Text)));
MK_LBUTTON, MAKELONG(x,y)) ;
PostMessage(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONDOWN,
////MK_LBUTTON, MAKELONG(strtoint(edit2.Text),strtoint(edit3.Text)));
MK_LBUTTON, MAKELONG(x,y));
sleep(500);
PostMessage(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONUP,
////MK_LBUTTON, MAKELONG(strtoint(edit2.Text),strtoint(edit3.Text)));
MK_LBUTTON, MAKELONG(x,y)) ;
end;这里定义了一个过程
GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD) 这是webbrowser的句柄
整个过程发送了 sendmessage和postmessage2个包 这里是防止一次没点中 所以再补点一次
关于点击的坐标是过程中导入的参数 x,y。
这里的X Y坐标是相对于窗体的坐标 就是相对于webbrowser的坐标 所以必须要用spy++来查找点击的坐标 找到答案了 谢谢了