悬奖 1139 分!想请前辈帮忙想想。如果这个问题解决了,以后扩展某些无源码的程序就方便多了。 (对这问题感兴趣的请UP一下) (100分)

  • 主题发起人 主题发起人 Pc 狂迷
  • 开始时间 开始时间
P

Pc 狂迷

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写个独立的程式去记录 DemoB(是一个模拟别人的无源码程序) 中的收费窗口弹出次数,
并能同时得到“应收现金金额”中的数值。(不能通过修改DemoB来实现)
./FILE/ 中有个盛利做的例,可我水平有限,改到头大过车轮了,还改不成功。
希望大侠们能帮个忙,帮我想想如何感知这个“收费窗口”的打开与关闭。DELPHI 6 环境。
DemoB 我放在
http://www.mmkeji.com/temp/demo.zip
先行谢过。
备注:PC 狂迷说到做到!每多一天追加 5 分,直到有解!
盛利的 300 分已送出。现在累积奖分:1139 分(2002/7/12 18:39)。
 
用winsocket通讯向程序B发指令
 
可以实现:
1.用WINDOWS消息处理机制.或用
2.DELPHI中的/DEMOS/IPCDMEOS程序的方式.
 
找到B的edit的句柄,发消息
 
比较复杂
1、找到B的那个Form的句柄,用FindWindow
2、用Windows API 枚举该句柄下的所有子窗口,递归,直到它没有子窗口为止。如果是Edit的Windows类,记下它的Handle.
3、向所有刚才记下的使用GetWindowText函数就行了。
在《Delphi之未经证实的葵花宝典》有描述,但它的示例是同一个程序中的,不过原理一样
不过确实有点儿麻烦
 
用DDE也可达到
 
szf, 别说废话,你去挂通新版本的oicq看看,累死也不行,至少findwindow不行,它的catption
随机,至于类你看看吧!(我用spy++看过了)
 
其实有更简单的办法的,不过我不会做,如下:
程序B的窗口如果可以用鼠标点击的话,就可以抓住它的Handle了(这个我就不会了),
比如spy++一类的程序可以跟踪窗口的焦点并显示它的句柄,而且我有个同事写过一个程序,
直接就可以通过鼠标点击取到密码。

不过如果它的密码框是从EDIT类继承,并且拦截了WM_GETTEXT并自己处理了的话,就搞不定的。
 
靠,好深奥的东西,听课...
 
如果是在同一个系统里则只需写一个procedure,如下
var i:integer;
for i:=0 ot screen.formcount do
begin
if screen.forms.classtype = 你要控制的form类别,也可以用Tforms的其属性来实现。 then
   你想做什么
end;


 
使用finewidow得到目标窗体的信息,最好是类名(TITLE也可以)
时时查询该FORM,然后捕捉所有键盘消息
别指望目标窗体给你回信息,除非那是个SERVER
 
得到句柄就可以进行操作了。
szf说的就行。
没问题。
 
大侠:

能为我写个 DEMO 吗?
 
新版OICQ的CAPTION确实不知道怎么搞定。。。用修改器改也改不动。:(
不过楼主要的东西实现起来还是要通过找到相应的EDIT的HANDLE才可以解决的。
你用SPY++来观察B上的EDIT所在的层次然后一直FINDWINDOW,再SENDMESSAGE就可以了。
其实这个自动获取EDIT里的密码用HOOK来做比较好。。偶不会。。:)
上次写的OICQ旧版本的自动注册机就是通过FINDWINDOW和SENDMESSAGE实现的。
不过没有GETTEXT而是SENDTEXT,你要的话发给你,自己改改?
 
重写个B
^_^ 也许是个好办法。
 
procedure TForm1.Button1Click(Sender: TObject);
var
hParent, hEdit: HWND;
u: pchar;
begin
try
hParent := FindWindow(nil, 'fromB的标题');
if hParent = 0 then
showmessage('窗口没有找到!')
else
begin
hEdit := ChildWindowFromPointEx(hParent, Point(10, 10) //大约位置
, CWP_ALL);
if hEdit = 0 then
showmessage('Edit没有找到!')
else
begin
U := StrAlloc(250);
SendMessage(hEdit, WM_GETTEXT, 249, Integer(U));
edit1.Text := Strpas(u);
end;
end;
except
end;
end;
 
后退
顶部