Class: WIN32OLE::Type

Inherits:
Object
  • Object
show all
Defined in:
ext/win32ole/win32ole_type.c,
ext/win32ole/win32ole_type.c

Overview

WIN32OLE::Type objects represent OLE type library information.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#new(typelib, ole_class) ⇒ WIN32OLE::Type object

Returns a new WIN32OLE::Type object. The first argument typelib specifies OLE type library name. The second argument specifies OLE class name.

WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
    # => WIN32OLE::Type object of Application class of Excel.


260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# File 'ext/win32ole/win32ole_type.c', line 260

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;
}

Class Method Details

.ole_classes(typelib) ⇒ Object

Returns array of WIN32OLE::Type objects defined by the typelib type library.

This method will be OBSOLETE. Use WIN32OLE::TypeLib.new(typelib).ole_classes instead.



116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'ext/win32ole/win32ole_type.c', line 116

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);
}

.progidsObject

Returns array of ProgID.



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'ext/win32ole/win32ole_type.c', line 157

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;
}

.typelibsObject

Returns array of type libraries.

This method will be OBSOLETE. Use WIN32OLE::TypeLib.typelibs.collect{|t| t.name} instead.



140
141
142
143
144
145
146
147
148
149
# File 'ext/win32ole/win32ole_type.c', line 140

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}");
}

Instance Method Details

#default_event_sourcesObject

Returns the array of WIN32OLE::Type object which is implemented by the WIN32OLE::Type object and having IMPLTYPEFLAG_FSOURCE and IMPLTYPEFLAG_FDEFAULT.

tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer")
p tobj.default_event_sources  # => [#<WIN32OLE::Type:DWebBrowserEvents2>]


850
851
852
853
854
855
# File 'ext/win32ole/win32ole_type.c', line 850

static VALUE
foletype_default_event_sources(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT);
}

#default_ole_typesObject

Returns the array of WIN32OLE::Type object which is implemented by the WIN32OLE::Type object and having IMPLTYPEFLAG_FDEFAULT.

tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer")
p tobj.default_ole_types
# => [#<WIN32OLE::Type:IWebBrowser2>, #<WIN32OLE::Type:DWebBrowserEvents2>]


867
868
869
870
871
872
# File 'ext/win32ole/win32ole_type.c', line 867

static VALUE
foletype_default_ole_types(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FDEFAULT);
}

#guidObject

Returns GUID.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
puts tobj.guid  # => {00024500-0000-0000-C000-000000000046}


390
391
392
393
394
395
# File 'ext/win32ole/win32ole_type.c', line 390

static VALUE
foletype_guid(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_guid(pTypeInfo);
}

#helpcontextObject

Returns helpcontext. If helpcontext is not found, then returns nil.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet')
puts tobj.helpfile # => 131185


662
663
664
665
666
667
# File 'ext/win32ole/win32ole_type.c', line 662

static VALUE
foletype_helpcontext(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_helpcontext(pTypeInfo);
}

#helpfileObject

Returns helpfile path. If helpfile is not found, then returns nil.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet')
puts tobj.helpfile # => C:\...\VBAXL9.CHM


635
636
637
638
639
640
# File 'ext/win32ole/win32ole_type.c', line 635

static VALUE
foletype_helpfile(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_helpfile(pTypeInfo);
}

#helpstringObject

Returns help string.

tobj = WIN32OLE::Type.new('Microsoft Internet Controls', 'IWebBrowser')
puts tobj.helpstring # => Web Browser interface


573
574
575
576
577
578
# File 'ext/win32ole/win32ole_type.c', line 573

static VALUE
foletype_helpstring(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_helpstring(pTypeInfo);
}

#implemented_ole_typesObject

Returns the array of WIN32OLE::Type object which is implemented by the WIN32OLE::Type object.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet')
p tobj.implemented_ole_types # => [_Worksheet, DocEvents]


817
818
819
820
821
822
# File 'ext/win32ole/win32ole_type.c', line 817

static VALUE
foletype_impl_ole_types(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_impl_ole_types(pTypeInfo, 0);
}

#inspectString

Returns the type name with class name.

ie = WIN32OLE.new('InternetExplorer.Application')
ie.ole_type.inspect => #<WIN32OLE::Type:IWebBrowser2>

Returns:

  • (String)


883
884
885
886
887
# File 'ext/win32ole/win32ole_type.c', line 883

static VALUE
foletype_inspect(VALUE self)
{
    return default_inspect(self, "WIN32OLE::Type");
}

#major_versionObject

Returns major version.

tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents')
puts tobj.major_version # => 8


487
488
489
490
491
492
# File 'ext/win32ole/win32ole_type.c', line 487

static VALUE
foletype_major_version(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_major_version(pTypeInfo);
}

#minor_versionObject

Returns minor version.

tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents')
puts tobj.minor_version # => 2


516
517
518
519
520
521
# File 'ext/win32ole/win32ole_type.c', line 516

static VALUE
foletype_minor_version(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_minor_version(pTypeInfo);
}

#nameObject Also known as: to_s

Returns OLE type name.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
puts tobj.name  # => Application


296
297
298
299
300
# File 'ext/win32ole/win32ole_type.c', line 296

static VALUE
foletype_name(VALUE self)
{
    return rb_ivar_get(self, rb_intern("name"));
}

#ole_methodsObject

Returns array of WIN32OLE::Method objects which represent OLE method defined in OLE type library.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet')
methods = tobj.ole_methods.collect{|m|
  m.name
}
# => ['Activate', 'Copy', 'Delete',....]


744
745
746
747
748
749
# File 'ext/win32ole/win32ole_type.c', line 744

static VALUE
foletype_methods(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_methods_from_typeinfo(pTypeInfo, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);
}

#ole_typeObject

returns type of OLE class.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
puts tobj.ole_type  # => Class


356
357
358
359
360
361
# File 'ext/win32ole/win32ole_type.c', line 356

static VALUE
foletype_ole_type(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_ole_type(pTypeInfo);
}

#ole_typelibObject

Returns the WIN32OLE::TypeLib object which is including the WIN32OLE::Type object. If it is not found, then returns nil.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Worksheet')
puts tobj.ole_typelib # => 'Microsoft Excel 9.0 Object Library'


760
761
762
763
764
765
# File 'ext/win32ole/win32ole_type.c', line 760

static VALUE
foletype_ole_typelib(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_typelib_from_itypeinfo(pTypeInfo);
}

#progidObject

Returns ProgID if it exists. If not found, then returns nil.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
puts tobj.progid  # =>   Excel.Application.9


424
425
426
427
428
429
# File 'ext/win32ole/win32ole_type.c', line 424

static VALUE
foletype_progid(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_progid(pTypeInfo);
}

#source_ole_typesObject

Returns the array of WIN32OLE::Type object which is implemented by the WIN32OLE::Type object and having IMPLTYPEFLAG_FSOURCE.

tobj = WIN32OLE::Type.new('Microsoft Internet Controls', "InternetExplorer")
p tobj.source_ole_types
# => [#<WIN32OLE::Type:DWebBrowserEvents2>, #<WIN32OLE::Type:DWebBrowserEvents>]


834
835
836
837
838
839
# File 'ext/win32ole/win32ole_type.c', line 834

static VALUE
foletype_source_ole_types(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE);
}

#src_typeObject

Returns source class when the OLE class is ‘Alias’.

tobj =  WIN32OLE::Type.new('Microsoft Office 9.0 Object Library', 'MsoRGBType')
puts tobj.src_type # => I4


607
608
609
610
611
612
# File 'ext/win32ole/win32ole_type.c', line 607

static VALUE
foletype_src_type(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_src_type(pTypeInfo);
}

#typekindObject

Returns number which represents type.

tobj = WIN32OLE::Type.new('Microsoft Word 10.0 Object Library', 'Documents')
puts tobj.typekind # => 4


546
547
548
549
550
551
# File 'ext/win32ole/win32ole_type.c', line 546

static VALUE
foletype_typekind(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_typekind(pTypeInfo);
}

#variablesObject

Returns array of WIN32OLE::Variable objects which represent variables defined in OLE class.

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


725
726
727
728
729
730
# File 'ext/win32ole/win32ole_type.c', line 725

static VALUE
foletype_variables(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_variables(pTypeInfo);
}

#visible?(# = > true or false) ⇒ Boolean

Returns true if the OLE class is public.

tobj = WIN32OLE::Type.new('Microsoft Excel 9.0 Object Library', 'Application')
puts tobj.visible  # => true

Returns:

  • (Boolean)


458
459
460
461
462
463
# File 'ext/win32ole/win32ole_type.c', line 458

static VALUE
foletype_visible(VALUE self)
{
    ITypeInfo *pTypeInfo = itypeinfo(self);
    return ole_type_visible(pTypeInfo);
}