[原创]从msgbox中取子窗口

上一篇 / 下一篇  2007-01-28 14:03:30 / 个人分类:编码

  事情缘由是我们的工具需要取一些msgbox对话框上显示的提示文字,但是似乎一直没有找到方法,于是偶苦苦钻研了一个下午(没办法偶比较烂少少),终于搞定了。收获不少。
第一,学习了EmunWindow和EmunChildWindow。
   原来一直没有搞定的原因是我们枚举窗口时,没有用对函数。EmunWindow只能找到最顶层的窗口(此处本人理解有限,极有可能表达不准确。有兴趣的可以看看msdn),按我的理解就是用spy++取到的窗口树下第一级的窗口。而msgbox上的提示文字虽然也是一个窗口,但是不属于顶级,用EmunWindow当然找不到了。呵呵,还好善用msdn的搜索(或索引)和目录同步功能(详细后面会讲一下)。很快找到了类似函数EmunChildWindow。
  此时又遇到问题了,用这个枚举必须自己写一个回调函数的实现。有一次意识到了自己的菜;回调什么东西啊,例子例子,msdn的例子没看懂(确切的说没找到那段是,呵呵)。还好还好我们有同事写的代码。小小改动(果然改东西比原创容易多了),搞定。开心啊,可是也花了2个多小时了。
   继续八卦一下,不就不用EmunChildWindow,FindWindowEx不是号称能够查到子窗口嘛,那我把msgbox的“spy++父窗口句柄”传进去,哎呀找不到的!传个0做父窗口句柄就可以。奇怪了。呵呵。这就说到收获的第二点了。(具体代码就不贴了,再别的工具基础上改的有点小复杂)
 
第二,弄清楚了真正意义父窗口和“伪”父窗口的区别(该名词为自创)
   这个东西是咨询了相关开发同事得知的,呵呵以下基本是复述。
   原来父窗口概念有两种,一种是真正意义上的,比如msgbox上的按钮。最明显的特征就是子窗口会受到父窗口区域的裁剪。这个用一些ide弄个窗口,放个按钮,把按钮到处拖动下就可以看出来了。这种关系在spy++的窗口树上也是一个子节点和父结点的关系,很好理解。
   另一种是我称为的“伪”父窗口关系。如文档存盘提示对话框,和把它弹出的程序窗口之间就是这样的关系,随便把存盘提示对话框拖来拖去都不会被裁剪,这种关系是在创建存盘提示对话框时用一个参数指定父窗口得来的。这种关系主要维系窗口间显示顺序。从spy++的窗口树上,两个窗口是平级的,但是存盘提示对话框的属性上会显示父窗口为把它弹出的程序窗口。呵呵,据专业人士称:spy++这个属性是假的。(信不信由你)。
 
第三,掌握了适合自己的函数查找方式。
    0。如果连函数名都不知道,那在google上找一个感觉像的。
    1。根据函数名在msdn的搜索或索引中查找。幸运的话这是找到想要的东西;但是多数时候是不幸运的,那就下一步(我突破的关键)
    2。使用msdn上与目录同步按钮(菜单有没有,在哪里没有研究过),在msdn中就可以跳到分类目录下,一些名字不是很一样,但是含义类似的函数列表就出现在你的面前了。呵呵这个东西正的比较有用。
    3。还有一步,看了msdn还是不知道怎么用,或不太了解,那又回到google去好了。有明确的目标的google,得到想要的东西就容易多了。
 
 
    看似一个很小的问题,对我这种底子“烂”的人还是帮助很大呢。弄完一个问题,学到了好多。真开心。继续努力!!!!
 
    (以上都是个人观点,很有可能是错的,欢迎网友指正)

TAG: 编码

相信自己! 引用 删除 shiker2003   /   2008-08-27 20:27:29
加油!
 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 3581
  • 日志数: 6
  • 建立时间: 2006-12-15
  • 更新时间: 2008-08-27

RSS订阅

Open Toolbar