对象查找-恶意代码分析实战英文原版pdf
第九章图形句柄程序员可以用附加属性把任意类型的数据添加到GUI对象中。任意数量的数据可以被存储,并应用于各种目的。自定义数据可以用近似标准属性的形式存储。每一个数据条目都有一个名字和值。数据变量可以用函数setappdate
存储在一个对象,并用函数getappdata
接收。 setappdate
函数的基本形式如下:
setappdata(Hndl, 'DataName', DataValue);
其中Hndl是数据存入的对象的句柄,"DateName"是这个数据的名字,而DateValue是赋予这个名字的值。注意数据值可以是数字,也可以是字符串。假设我们要定义两个特殊的数据值,其中一个用于存储在指定图像中的错误数,另一个是用于描述最后发现的错误的字符串。这两个数据值的名字是"ErrorCount"和"LastError"。我们假设H1为这个图像的句柄,创建这些数据条目和初始化的命令为:
setappdata(H1, 'ErrorCount', 0);
setappdata(H1, 'LastError', 'No error');
我们可以用getappdata
函数随时调用这些数据。getappdata
的两种形式如下:
value = getappdata(Hndl, 'DataName');
struct = getappdata(Hndl);
Hndl是包含有这个数据的对象句柄,"DateName"是要调用的数据的名字,如果一个"DateName"被指定,那么与"DateName"相关的值就会被返回。如果没有被指定,那么所有与这个对象相关的自定义值就会以结构的形式被返回。数据条目名就是结构元素名。对上面的例子来说,getappdata
将会产生下面的结果:
>> value = getappdata(H1, 'ErrorCount');
value = 0
>> struct = getappdata(H1);
struct =
ErrorCount: 0
LastError: 'No error'
与自定义数据相关的函数被总结在表9.1中。
表9.1与自定义数据相关的函数
| 函数描述 | 说明 |
| --- | --- |
| setappdata(Hndl, 'DataName', DataValue) | 把DataValue存储在对象中的'DataName',这个对象以Hndl为句柄。 |
| value = getappdata(Hndl, 'DataName') struct = getappdata(Hndl) | 从以Hndl句柄的对象重新调用程序,第一种形式只读取'DataName'中的数据,第二种形式重新所有的自定义数据。 |
| isappdata(Hndl, 'DataName') | 如果'DataName'在以Hndl为句柄的对象中有定义,那就会返回1,否则返回0。 |
| isappdata(Hndl, 'DataName') | 删除'DataName','DataName'是在以Hndl为句柄的对象中的自定义数据。 |
每一个新的图像从创建开始时就有它们自己的句柄,句柄可以由创建函数返回。好的编程习惯是如果你打算修改你创建的对象的属性,那么请保存对象的句柄,为以后调用函数get和set做准备。