熟悉API的请进,解决问题送200分. (50分)

  • 主题发起人 主题发起人 nicklung
  • 开始时间 开始时间
N

nicklung

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在写一个工具,其中一个功能就是能够实时修改另一个正在运行的delphi程序
form中各控件的属性(是delphi控件的属性,包括不可见控件!)
目前试用过如下办法:
1、用EnumWindowsProc函数获取系统中所有窗口(成功)
2、从中筛选出delphi的窗口(基本成功)
3、用API函数对所有控件进行操控(成功)
4、将handle转型为DELPHI的Tapplication进行控制(失败)
5、将handle转型为DELPHI的Tscreen进行控制(失败)

自思:handle和delphi的Form都是指针,其中一定存在对应关系。
目前面临的问题:通过窗口handle找到Form的指针,然后就像操作自己进程中的form一样
操作外部应用程序的控件属性。
 
关注。。。世事无绝对,祝你好运,[:)]
 
思路完全不对!
你考虑一个简单的问题,如果你要取得一个变量值,你会怎样处理 ?
有两种方法解决这个问题:
1. 直接给这个变量赋值(这只能用于简单变量)
2. 通过执行一个函数来计算,然后将计算结果赋给变量(这种方法可用于任何变量)

Delphi设计属性也是按照这个简单原则来的,因此你想用API来改变空件的属性是不对的
关于这一点可看下面的语句:
Property Enabled: Boolean Read GetEnabled Write SetEnabled;
这种属性当写入的时候会调用SetEnabled函数,而当读出的时候会调用GetEnabled函数,
在这两个函数中,能做任何事,而且从Delphi的语法来说,这个属性是无法用消息机制
来访问的,因此你在程序外部是无法访问该属性的,如果你一定要访问,那只能在程序
内部写一段程序如:
Procedure AccessProp(Var Msg: TMessage); Message WM_ACCESSPROPERTY;
然后将wParam,lParam定义成你所需要的,通过这个函数去访问,才能得到你所想要的
效果


 
你想用它修改什么呢?修改后能达到什么样的效果呢?

有些属性只有在控件处于设计状态才能修改。。。
 
除非你的程序和目标进程在同一个进程地址空间,
否则是不能访问他的对象的
 
这也是我所疑惑的,究竟有没有办法访问其他进程中的对象,我的感觉是,在理论上是
可行的,具体的办法还有待探索
 
这种东西早有了,
自动化应用程序,
Word, Excel, 等等都可以以自动化方式运行,
受别的程序控制
 
除非该应用程序自身是开放性的。
 
接受答案了.
 
后退
顶部