发贴一问并庆祝戴上一个星罩:webbrowser里activex输入框赋值

erhan 2006-09-07 04:03:35
终于脱了五条裤衩戴上了一个星罩,庆祝一下,并发一贴。

虽已解决但欲求更好的解决办法,因本人为新人,分分不多,有好解决办法可再加100分。

谢绝接分。

问题系锅样滴:
http://mch.tenpay.com/Login.shtml(腾讯财付通商户登录平台)
里面有个输入密码的ActiveX输入框。
我利用TWebBrowser来自动登录现在是这样实现的:
1.商户号和用户名的输入非常简单了,直接可以赋值;
2.把焦点定位到用户名输入框;
3.然后利用keybd_event发送tab键,使焦点移动到密码输入框上;
4.继续利用keybd_event发送相应的密码,最后发送一个enter键完成登录。

这样做有不少问题,所以希望有更好的解决办法。
...全文
512 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
erhan 2006-10-25
  • 打赏
  • 举报
回复
因为我憨,所以我行
天涯倦客 2006-10-23
  • 打赏
  • 举报
回复
为什么二憨你能连续回那么多次?
hthunter 2006-10-23
  • 打赏
  • 举报
回复
为什么二憨你能连续回那么多次?
大熊猫侯佩 2006-10-22
  • 打赏
  • 举报
回复
为什么二憨你能连续回那么多次?
erhan 2006-10-22
  • 打赏
  • 举报
回复
还有高手吗?木有的话,再挂三天就结贴了!!唉~
erhan 2006-10-11
  • 打赏
  • 举报
回复
还有解答的吗?
erhan 2006-09-20
  • 打赏
  • 举报
回复
高高手关注啊。
erhan 2006-09-14
  • 打赏
  • 举报
回复
还有好办法吗?
erhan 2006-09-11
  • 打赏
  • 举报
回复
几天没来,继续
erhan 2006-09-09
  • 打赏
  • 举报
回复
to zswang(伴水清清)(专家门诊清洁工)

是的,我当时参考了js里的语句,把参与运算的几个参数从网页中取出并都赋给了安装后的edit,但生成的密码与同一网面抓包得到的密码就是一不致,估计这条路是走不太通了。

再次感谢你的深入参与。
Elysium 2006-09-09
  • 打赏
  • 举报
回复
祝贺新人冲星
王集鹄 2006-09-09
  • 打赏
  • 举报
回复
发完贴后,我想也没这样简单,就把Edit的掩码取消查看,模拟输入文字不像正常输入的一样被加密,确实做了防模拟的功能
之后我将这个Edit安装到Delphi中调试
C:\WINDOWS\system32\qqedit\qqedit.dll
发现即使系统时间一样,生成的密码也会不同,估计是随机的
目前研究到此
hthunter 2006-09-09
  • 打赏
  • 举报
回复
没详细看问题,但现在网页上输密码的activeX一般是做了防模拟和防钩子之类的措施的,估计要模拟输入颇有难度
erhan 2006-09-09
  • 打赏
  • 举报
回复
to zswang(伴水清清)(专家门诊清洁工)

非常感谢!虽然代码不多,但已然看到了高手的风范!

写是写进去了,但这招依然不中啊。
这个ActiveX似乎很怪,这种方式送进去的,即使是正确的密码,并把其他参数输全后,点了那个登录按钮后,也报“参数不完整”(跟没有输入密码报的错误是一样的,如果是密码不对它会报密码输入不对的),会不会是这种方式传进去的它并没有真正接收。
并且,如果这种方式送进字符后,我无论在密码部分再乱敲多少,都是会报“参数不完整”,必须要全部清空密码部分后,再乱敲才能报出密码不对来。

虽未解决,但结贴时的100分会奉上的。

继续抓狂中,还需要继续!

另外让我更抓狂的是:csdn每天凌晨1:30到4:00之间一直处于只读状态,在未遭到攻击的情况下实施DoS,真不知在搞什么哩根儿愣。
王集鹄 2006-09-08
  • 打赏
  • 举报
回复
//找到输入框句柄,然后模拟消息发送
function EnumChildProc(
hwnd: HWND;
lParam: LPARAM
): BOOL; stdcall;
var
vBuffer: array[0..255] of Char;
begin
PInteger(lParam)^ := 0;
GetClassName(hwnd, vBuffer, SizeOf(vBuffer));
if SameText('ATL:Edit', vBuffer) then
begin
PInteger(lParam)^ := hwnd;
Result := False;
end else Result := True;
end; { EnumChildProc }

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
S: string;
vHandle: THandle;
begin
vHandle := FindWindow('IEFrame', '财付通商户管理系统 - Microsoft Internet Explorer');
if vHandle = 0 then Exit;
EnumChildWindows(vHandle, @EnumChildProc, Integer(@vHandle));
if vHandle = 0 then Exit;
S := '12345';
for I := 1 to Length(S) do
SendMessage(vHandle, WM_CHAR, Ord(S[I]), 0);
end;
zhangl_cn 2006-09-08
  • 打赏
  • 举报
回复
恭喜,接分
才子鸣 2006-09-08
  • 打赏
  • 举报
回复
女人的星罩 打一社會現像
erhan 2006-09-08
  • 打赏
  • 举报
回复
等待第一天,未果,继续!
ron_xin 2006-09-07
  • 打赏
  • 举报
回复
恭喜
erhan 2006-09-07
  • 打赏
  • 举报
回复
解析了,并且通过那个ActiveX生成了传递到下一网页的参数,但总是不一样,即使一样也不行啊,不允许让使用人员输入密码的。
加载更多回复(7)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧