急急,控制鼠标在程序中执行特定按键的要求! ( 积分: 200 )

  • 主题发起人 主题发起人 snow2008
  • 开始时间 开始时间
S

snow2008

Unregistered / Unconfirmed
GUEST, unregistred user!
例如在form1程序中,有控件,button1,webbrowser1控件

需求:在webbrowser1已打开某一WEB页面,现需要能模拟鼠标在webbrowser1中指定位置或坐标,进行点击。

注意:
这不同于在屏幕上抓鼠标位置,取坐标,再定时进行,所取坐标的点击。(这个应该好实现)

因为,form1有可能最小化,在后台自动执行上述需求。同时鼠标还可作其他的工作。
 
上面这个问题有人知道吗?能说两句吗?
 
帮你顶。。
 
既然你是webBrowser,应该和网页相关吧,如果是这样,建议你换个思路实现

虽然不知道你具体做的什么,感觉应该是个投票或群发的软件

你可以用IDhttp读网页代码,用post函数提交数据
 
有些网站可自动操作,界面按键,主要用途这个.能有些代码吗?

sztd_hi@126.com 感谢!
 
idhttp与post提交有简单代码,吗?各位大侠,感谢!
 
通过测试如下可实现用户名,密码,但是还有点小问题。同大家分享一起研究。

在uses增加:mshtml



问题,用户名,密码可自动录入上去,但是不能登录,或者可理解是如何向页面上的“登录”键通过程序点中,并进行网站?如何加入代码?[:(]

非常感谢,急求!!
 
又有一个想法,这个“登录”键,不能实现程序键接的话。

可用这个法方,由于网页上一般默“回车”为“登键”默认。

但是我用“WebBrowser1”在页面中为什么“回车键”没有用,WebBrowser1如何做键盘控制?
 
关于页面回车,在网上找到解决方法。如下摘录。

但是,问题又有了,用户,密码,可以写到页面上,页面也支持回车了现在。回车使用是自已要手动将鼠标放到WebBrowser控件中的页上,再按回车找可实现。现在需求是不用手动移鼠标就能将一个“回车”按键发到WebBrowser中,自动回车进入,如何实现?
PostMessage(WebBrowser1.Handle, WM_KEYDOWN, 13, 0);不行。

-----------------------------------------------
A、用SendKeys函数向WebBrowser发送回车键
在Delphi 5光盘上的Info/Extras/SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键,我现在用的就是这个方法,使用很简单,在WebBrowser获得焦点的情况下(不要求WebBrowser所包含的文档获得焦点),用一条语句即可:

Sendkeys('~',true);// press RETURN key

SendKeys函数的详细参数说明等,均包含在SndKey32.pas文件中。

B、在OnMessage事件中将接受到的键盘消息传递给WebBrowser。

procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);
{fixes the malfunction of some keys within webbrowser control}
const
StdKeys = [VK_TAB, VK_RETURN]; { standard keys }
ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }
fExtended = $01000000; { extended key flag }
begin
Handled := False;
with Msg do
if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and
((wParam in StdKeys) or
{$IFDEF VER120}(GetKeyState(VK_CONTROL) < 0) or {$ENDIF}
(wParam in ExtKeys) and
((lParam and fExtended) = fExtended)) then
try
if IsChild(Handle, hWnd) then { handles all browser related messages }
begin
with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as
IOleInPlaceActiveObject do
Handled := TranslateAccelerator(Msg) = S_OK;
if not Handled then
begin
Handled := True;
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
except
end;
end; // MessageHandler
 
我使用的是第二种方法,谁有第一种方法的文件SndKey32.pas

发我,感谢!sztd_hi@126.com
 
怎么没有回复[:(]

我用想程序自动登录这个网站。
http://s3.travian.cn

有谁可说两句??非常感谢
 
不需要用发送按键的方式解决,换个思路:
1. 通过WebBrowser提供的DOM对象进行交互
var
pDoc: IHTMLDocument2;
pElement: IHTMLElement;
pInput: IHTMLInputElement;
begin
if (WebBrowser.Document <> nil) and (WebBrowser.Document.QueryInterface(IHTMLDocument2, pDoc) = S_OK) then
begin
pElement := pDoc.all.item('输入框id', 0);
if (pElement <> nil) and (pElement.QueryInterface(IHTMLInputElement, pInput) = S_OK) then
begin
pInput.value := '要赋的值';
// 给其他输入框赋值...
pInput.form.submit;
...

2. 执行脚本
var
pDoc: IHTMLDocument2;
pWindow: IHTMLWindow;
sScript: string;
begin
if (WebBrowser.Document <> nil) and (WebBrowser.Document.QueryInterface(IHTMLDocument2, pDoc) = S_OK) then
begin
pWindow := pDoc.ParentWindow;
sScript := '...';
pWindow.execScript(sScript, 'javascript');
...

3. 调用 WebBrowser.Navigate 直接 Post 数据

具体的再搜索相关内容吧。。。
 
另外,关于SndKey32.pas,搜索一下,我记得论坛里面应该有源代码全文的。。。
 
后退
顶部