CHJBBG 发表于 2010-1-6 08:45:41

用自己的DLL怎样才能得到BCG的ToolBar按钮个数,看我的代码? 已解决

extern "C" __declspec(dllexport) int GetButtnsCount(HWND BCGhwnd)
{
        int buttons = 0;
        CBCGPToolBar pCWnd;
        pCWnd.Attach(BCGhwnd);
         buttons = pCWnd.GetCount();
        pCWnd.Detach();
         Return buttons;
}

我查了很多,这方面资料很少,或者其他可行的方法也好


补充1: 这个接口已经可以正常调用了,只是返回值总是0. 做这个的目的是想更精确地定位BCG工具条按钮,不管工具条在哪里,和工具条大小,顺序。 如果有好的其他实现的方法,欢迎指教。

2010-01-23: 直接使用上面的方法应该是不可以了,由于不在同一进程,调用的也不是WINDOWS标准方法,即使有BCG的源码也不可以。在网上找了很久,以及根据大家的回复,把问题重心方在HOOK上,上周我用BCG提供的WORDPAD作为测试对象,自己写了一个 MESSAGE HOOK, 可以改变工具条名称(WINDOWTITLE),但还是没有能够调用BCGTOOLBAR的方法(如GetCount()),如果通过工具条对象指针调用,WORDPAD就挂掉了。 看来这个问题还有得折腾。希望有知道的朋友能多指点一下。

2010-01-29: 方法很简单, 发一个TB_BUTTONCOUNT消息过去就OK了, 折腾了我这么长时间, 还是对windows和VC基础不牢的缘故啊

[ 本帖最后由 CHJBBG 于 2010-1-29 18:29 编辑 ]

lantianwei 发表于 2010-1-6 09:26:06

代码是在QTP中调不起来呢 还是本身就错误的 ?如果是前者 比较方便 后者 那么比较麻烦 你这种属于跨进程访问 最简单的是发消息 前提是要支持消息 其他的话 像VB是要涉及到虚拟内存 而。NET涉及到代码注入 BCG没接触过 不懂

shanxi 发表于 2010-1-6 09:51:49

你确定

CBCGPToolBar.Attach方法存在?

官方有相应的api文档吗?

CHJBBG 发表于 2010-1-6 12:28:17

可以正常调用, 就是个数总是0,

CHJBBG 发表于 2010-1-6 12:29:17

有attach

lantianwei 发表于 2010-1-6 12:53:23

回复 4# 的帖子

我怀疑你DLL 函数本身就没有实现得到ToolBar按钮个数的功能 0只是初始值

423799223 发表于 2010-1-6 19:50:22

你最好将日志信息打印出来以方便调试

CHJBBG 发表于 2010-1-6 20:19:08

CBCGPToolBar有GetCount的方法得到工具条的按钮个数。

lantianwei 发表于 2010-1-6 21:53:25

虽然可能你朋友有辆轿车 但如果你想开 你还是需要先跟他借下的 而不是你直接去开就行了
你这可是跨进程访问

423799223 发表于 2010-1-10 15:33:05

这个是跨进程获取其他程序的信息了不是程序自身获取信息了复杂得多网上有相关的文章基本上C++获Delphi的

CHJBBG 发表于 2010-1-12 17:58:50

大概理解了,可是有没有什么其他办法嘛, 我有测试对象的源码

shanxi 发表于 2010-1-12 19:09:48

学习MSAA 写hook
或者学习UIA,写name pipe。

CHJBBG 发表于 2010-1-12 19:35:07

我今天试着使用跨进程调用
但是遇到内存申请失败,因为是第一次所以不确定这条路是否可行,有没有朋友在这么做过,给个确切的说法,我再去研究研究
页: [1]
查看完整版本: 用自己的DLL怎样才能得到BCG的ToolBar按钮个数,看我的代码? 已解决