class WIN32OLE::Type
WIN32OLE::Type 对象代表 OLE 类型库信息。
公共类方法
源码
static VALUE
foletype_initialize(VALUE self, VALUE typelib, VALUE oleclass)
{
VALUE file;
OLECHAR * pbuf;
ITypeLib *pTypeLib;
HRESULT hr;
SafeStringValue(oleclass);
SafeStringValue(typelib);
file = typelib_file(typelib);
if (file == Qnil) {
file = typelib;
}
pbuf = ole_vstr2wc(file);
hr = LoadTypeLibEx(pbuf, REGKIND_NONE, &pTypeLib);
if (FAILED(hr))
ole_raise(hr, eWIN32OLERuntimeError, "failed to LoadTypeLibEx");
SysFreeString(pbuf);
if (oleclass_from_typelib(self, pTypeLib, oleclass) == Qfalse) {
OLE_RELEASE(pTypeLib);
rb_raise(eWIN32OLERuntimeError, "not found `%s` in `%s`",
StringValuePtr(oleclass), StringValuePtr(typelib));
}
OLE_RELEASE(pTypeLib);
return self;
}
返回一个新的 WIN32OLE::Type 对象。第一个参数 typelib 指定 OLE 类型库名称。第二个参数指定 OLE 类名称。
WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') # => WIN32OLE::Type object of Application class of Excel.
源码
static VALUE
foletype_s_ole_classes(VALUE self, VALUE typelib)
{
VALUE obj;
/*
rb_warn("%s is obsolete; use %s instead.",
"WIN32OLE::Type.ole_classes",
"WIN32OLE::TypeLib.new(typelib).ole_types");
*/
obj = rb_funcall(cWIN32OLE_TYPELIB, rb_intern("new"), 1, typelib);
return rb_funcall(obj, rb_intern("ole_types"), 0);
}
返回由 typelib 类型库定义的 WIN32OLE::Type 对象数组。
此方法将过时。请改用 WIN32OLE::TypeLib.new(typelib).ole_classes。
源码
static VALUE
foletype_s_progids(VALUE self)
{
HKEY hclsids, hclsid;
DWORD i;
LONG err;
VALUE clsid;
VALUE v = rb_str_new2("");
VALUE progids = rb_ary_new();
err = reg_open_key(HKEY_CLASSES_ROOT, "CLSID", &hclsids);
if(err != ERROR_SUCCESS) {
return progids;
}
for(i = 0; ; i++) {
clsid = reg_enum_key(hclsids, i);
if (clsid == Qnil)
break;
err = reg_open_vkey(hclsids, clsid, &hclsid);
if (err != ERROR_SUCCESS)
continue;
if ((v = reg_get_val2(hclsid, "ProgID")) != Qnil)
rb_ary_push(progids, v);
if ((v = reg_get_val2(hclsid, "VersionIndependentProgID")) != Qnil)
rb_ary_push(progids, v);
RegCloseKey(hclsid);
}
RegCloseKey(hclsids);
return progids;
}
progids(typelib) → Array
源码
static VALUE
foletype_s_typelibs(VALUE self)
{
/*
rb_warn("%s is obsolete. use %s instead.",
"WIN32OLE::Type.typelibs",
"WIN32OLE::TypeLib.typelibs.collect{t|t.name}");
*/
return rb_eval_string("WIN32OLE::TypeLib.typelibs.collect{|t|t.name}");
}
返回 ProgID 的数组。
typelibs → Array
返回类型库的数组。
源码
static VALUE
foletype_default_event_sources(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT);
}
此方法将过时。请改用 WIN32OLE::TypeLib.typelibs.collect{|t| t.name}。
tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer") p tobj.default_event_sources # => [#<WIN32OLE::Type:DWebBrowserEvents2>]
源码
static VALUE
foletype_default_ole_types(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FDEFAULT);
}
公共实例方法
tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer") p tobj.default_ole_types # => [#<WIN32OLE::Type:IWebBrowser2>, #<WIN32OLE::Type:DWebBrowserEvents2>]
源码
static VALUE
foletype_guid(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_guid(pTypeInfo);
}
返回由 WIN32OLE::Type 对象实现并具有 IMPLTYPEFLAG_FSOURCE 和 IMPLTYPEFLAG_FDEFAULT 的 WIN32OLE::Type 对象数组。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.guid # => {00024500-0000-0000-C000-000000000046}
源码
static VALUE
foletype_helpcontext(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_helpcontext(pTypeInfo);
}
default_ole_types #→ Array
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.helpfile # => 131185
源码
static VALUE
foletype_helpfile(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_helpfile(pTypeInfo);
}
返回由 WIN32OLE::Type 对象实现并具有 IMPLTYPEFLAG_FDEFAULT 的 WIN32OLE::Type 对象数组。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.helpfile # => C:\...\VBAXL9.CHM
源码
static VALUE
foletype_helpstring(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_helpstring(pTypeInfo);
}
返回 GUID。
tobj = WIN32OLE::Type.new('Microsoft Internet Controls', 'IWebBrowser') puts tobj.helpstring # => Web Browser interface
源码
static VALUE
foletype_impl_ole_types(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_impl_ole_types(pTypeInfo, 0);
}
helpcontext #→ 帮助上下文
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet') p tobj.implemented_ole_types # => [_Worksheet, DocEvents]
源码
static VALUE
foletype_inspect(VALUE self)
{
return default_inspect(self, "WIN32OLE::Type");
}
helpfile #→ 帮助文件路径
ie = WIN32OLE.new('InternetExplorer.Application')
ie.ole_type.inspect => #<WIN32OLE::Type:IWebBrowser2>
源码
static VALUE
foletype_major_version(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_major_version(pTypeInfo);
}
返回帮助文件路径。如果找不到帮助文件,则返回 nil。
tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.major_version # => 8
源码
static VALUE
foletype_minor_version(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_minor_version(pTypeInfo);
}
返回帮助字符串。
tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.minor_version # => 2
源码
static VALUE
foletype_name(VALUE self)
{
return rb_ivar_get(self, rb_intern("name"));
}
返回由 WIN32OLE::Type 对象实现的 WIN32OLE::Type 对象数组。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.name # => Application
源码
static VALUE
foletype_methods(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_methods_from_typeinfo(pTypeInfo, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);
}
major_version #→ OLE 主版本
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet') methods = tobj.ole_methods.collect{|m| m.name } # => ['Activate', 'Copy', 'Delete',....]
源码
static VALUE
foletype_ole_type(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_ole_type(pTypeInfo);
}
minor_version #→ OLE 次版本
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.ole_type # => Class
源码
static VALUE
foletype_ole_typelib(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_typelib_from_itypeinfo(pTypeInfo);
}
返回次版本。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.ole_typelib # => 'Microsoft Excel 9.0 Object Library'
源码
static VALUE
foletype_progid(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_progid(pTypeInfo);
}
返回 OLE 类型名称。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.progid # => Excel.Application.9
源码
static VALUE
foletype_source_ole_types(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE);
}
也别名为:to_s
tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer") p tobj.source_ole_types # => [#<WIN32OLE::Type:DWebBrowserEvents2>, #<WIN32OLE::Type:DWebBrowserEvents>]
源码
static VALUE
foletype_src_type(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_src_type(pTypeInfo);
}
返回 WIN32OLE::Method 对象数组,这些对象表示在 OLE 类型库中定义的 OLE 方法。
tobj = WIN32OLE::Type.new('Microsoft Office 9.0 Object Library', 'MsoRGBType') puts tobj.src_type # => I4
源码
static VALUE
foletype_typekind(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_typekind(pTypeInfo);
}
ole_typelib #→ WIN32OLE::TypeLib 对象
tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.typekind # => 4
源码
static VALUE
foletype_variables(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_variables(pTypeInfo);
}
返回包含 WIN32OLE::Type 对象的 WIN32OLE::TypeLib 对象。如果找不到,则返回 nil。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'XlSheetType') vars = tobj.variables vars.each do |v| puts "#{v.name} = #{v.value}" end The result of above sample script is follows: xlChart = -4109 xlDialogSheet = -4116 xlExcel4IntlMacroSheet = 4 xlExcel4MacroSheet = 3 xlWorksheet = -4167
源码
static VALUE
foletype_visible(VALUE self)
{
ITypeInfo *pTypeInfo = itypeinfo(self);
return ole_type_visible(pTypeInfo);
}
返回 ProgID(如果存在)。如果找不到,则返回 nil。
tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.visible # => true