04 2010 档案
摘要:下来会分享如何获取子控件的IAccessible接口,在这个之前先讲点其它的东西: 获取控件如果使用Findwindow(FindwindowEx)我们需要知道的控件的ClassName和CaptionName,这两个信息可以通过Spy++等工具获取,但我们在测试工具中会常见到Role等很多属性,先看这些信息是从什么地方来的,在microsoft的站点上下载Inspect32.exe运行后如: ...
阅读全文
摘要:根据上篇介绍的IAccessible,开始写几个例子试下效果如何,先看第一个: [代码][代码]
阅读全文
摘要:MSAA的全称是Microsoft Active Accessibility。这是类似DCOM技术。技术模型是这样的,UI程序可以暴露出一个Interface,方便另一个程序对其进行控制。 MSAA技术的初衷是为了方便残疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通过一个USB读屏器连接到电脑上, 读屏器通过UI程序暴露出来的这个Interface,就可以获取程序信息,通过盲文或...
阅读全文
摘要:除了Spy++介绍一个新的东西AccExplorer,这个东西对查看窗体对象的时候,确实比Spy++要强大N倍,做界面自动化测试非常有用。下载地址:http://files.cnblogs.com/GnagWang/AccExplorer32.rar
阅读全文
摘要:状态模式主要解决当控制一个对象状态的转换的条件表达过于复杂的情况,使得状态的转换不依赖于整体的操作。本文将通过一个具体的例子说明状态模式的应用。假设下面一个场景: 一个新任务提交后,先是收集数据,数据收集完成后等等分配一台机器,分配到机器后就可以将此任务部署至此机器后就可以通知相关模块开始工作。 先对此场景做分析如下: ...
阅读全文
摘要:有一个叫做EventHandler 的家伙,他会告诉你(主程序),有一些事情发生了:这个事情是谁导致的呢?是某个object类型对象导致的,它用Source或Sender来表示。这个事情是什么事呢?e的内容就是事情的内容了。 至于Source和Sender,没有区别,你想用哪个就用哪个,其实都是一样的。 所以,我们在程序中的事件处理函数就是依赖于这个东西实现的:比方说你点了一个按钮,程序怎么知道应...
阅读全文
摘要:关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: 那么实际使用中会出现下面所示的替换过程: 这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。而##被称为连接符(concatenator),用来将两个Token连接为一个Token。...
阅读全文
摘要:看到这个工具后,就想到自己平时的代码可以用一下这个东西,就下载后试了一下,是用来代码规范的工具, 命令行运行有:
阅读全文
摘要:1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: 6: namespace ConsoleApplication1 7: { 8: class Program 9: { 10: 11: class CAdd 12: { 13...
阅读全文
摘要:无意年到这篇文章贴出来,自己以后也可以常看,原文:http://www.programmer.com.cn/1119/#more-1119 1 版本控制 版本控制是一种在开发的过程中对软件开发的历史系统地跟踪的方法。此项任务由版本控制系统完成,如CVS或Subversion。版本系统保持了一个受控编码的历史痕迹,提供很多操作:获得当前版本代码(通常称为“检出”);“提交”修改;“更新”工作拷贝...
阅读全文
摘要:重新组织你的函数 在对象之间搬移特性 重新组织数据 简化条件表达式 简化函数调用 处理概括关系 提炼函数1 转化后: 提炼函数2:清除注释 转化后: 将临时变量内联化: 转化后: 以查询取代临时变量: 转化后: 引入解释性变量: 转化后: 剖解临时变量: 转化后: 移除对参数的赋值: 转化后: 提前退出函数: 转化后: Split Loop: 转化后: Split Loop-2 在对象之间搬移特...
阅读全文
摘要:重复的代码(Duplicated Code) 过长的函数(Long Method) 过大类(Large Class) 过长的参数列(Long Parameter List) 发散式变化(Divergent Change) 霰弹式修改(Shotgun Surgery) 依恋情结(Feature Envy) 数据泥团(Data Clumps) 基本型别偏执(Primitive Obsession) S...
阅读全文
摘要:委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。 构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的...
阅读全文
摘要:委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联。您可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。您可以创建一个自定义方法,当发生特定事件时某个类(例如 Windows 控件)就可以调用您的方法。下面的示例演示了一个委托声明: 与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。方法可以是静态...
阅读全文
摘要:下面的准则有助于确保库正确处理异常。 不要在框架代码中捕捉非特定异常(如 System.Exception、System.SystemException 等)以至忽略错误。 如果捕捉异常是为了再次引发或传输给其他线程,则可以捕捉这些异常。下面的代码示例演示的异常处理是不正确的。 避免在应用程序代码中捕捉非特定异常(如 System.Exception、System.System...
阅读全文
摘要:当某一成员无法成功执行它应执行的操作时,将引发异常。这称为执行故障。例如,如果 Connect 方法无法连接到指定的远程终结点,则这就是一个执行故障,将有一个异常被引发。 下列准则可帮助确保在适当时引发异常。 不要返回错误代码。异常是报告框架中的错误的主要手段。 异常设计准则讨论了使用异常的许多好处。 通过引发异常来报告执行故障。如果某一成员无法按预期方式成功执行,则应将这种情况视为一个执行...
阅读全文
摘要:枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性。枚举分为简单枚举和标志枚举两种。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举应使用按位 OR 操作进行组合。标志枚举值的组合使用按位 AND 操作检查。 下列指南介绍了枚举设计的最佳做法。 一定要使用枚举强类型化参数、属性和表示值集的返回值。 一定要优选使用枚举而不是静态常量。 下面的代码示例演示了不正确的设计。 下...
阅读全文
摘要:结构是值类型。结构是在堆栈上或以内联方式分配的,当结构超出范围时将被释放。通常情况下,值类型的内存空间分配和释放的开销较小;但在需要大量装箱和取消装箱操作的方案中,值类型的执行性能较引用类型要差。有关更多信息,请参见装箱和取消装箱(C# 编程指南)。 有关值类型和引用类型的更多信息,请参见通用类型系统概述。 不要为结构提供默认的构造函数。 如果某一结构定义了默认构造函数,则在创建该结构的数组...
阅读全文
浙公网安备 33010602011771号