# class WIN32OLE::Type

`WIN32OLE::Type` objects represent OLE type library information.

### Public Class Methods

new(typelib, ole_class) → WIN32OLE::Type object
Source

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

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.

ole_classes(typelib)
Source

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

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.

progids
Source

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

Returns array of ProgID.

typelibs
Source

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

Returns array of type libraries.

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

### Public Instance Methods

default_event_sources
Source

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

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>]

default_ole_types
Source

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

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>]

guid #→ GUID
Source

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

Returns GUID.

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

helpcontext
Source

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

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

helpfile
Source

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

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

helpstring #→ help string.
Source

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

Returns help string.

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

implemented_ole_types
Source

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

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]

inspect → String
Source

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

Returns the type name with class name.

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

major_version
Source

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

Returns major version.

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

minor_version #→ OLE minor version
Source

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

Returns minor version.

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

name #→ OLE type name
Source

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

Returns OLE type name.

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

Also aliased as: to_s
ole_methods # the array of WIN32OLE::Method objects.
Source

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

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',....]

ole_type #→ OLE type string.
Source

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

returns type of OLE class.

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

ole_typelib
Source

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

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'

progid #→ ProgID
Source

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

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

source_ole_types
Source

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

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>]

src_type #→ OLE source class
Source

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

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

to_s
Alias for: name
typekind #→ number of type.
Source

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

Returns number which represents type.

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

variables
Source

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

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

visible? #→ true or false
Source

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

Returns true if the OLE class is public.

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