類別 WIN32OLE::Type
公開類別方法
傳回新的 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_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; }
傳回由 typelib 類別庫定義的 WIN32OLE_TYPE 物件陣列。此方法將會過時。改用 WIN32OLE_TYPELIB.new(typelib).ole_classes。
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); }
傳回 ProgID 陣列。
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; }
傳回類別庫陣列。此方法將會過時。改用 WIN32OLE_TYPELIB.typelibs.collect{|t| t.name}。
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}"); }
公開實例方法
傳回 WIN32OLE_TYPE 物件陣列,這些物件由 WIN32OLE_TYPE 物件實作,並具有 IMPLTYPEFLAG_FSOURCE 和 IMPLTYPEFLAG_FDEFAULT。
tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', "InternetExplorer") p tobj.default_event_sources # => [#<WIN32OLE_TYPE:DWebBrowserEvents2>]
static VALUE foletype_default_event_sources(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT); }
傳回 WIN32OLE_TYPE 物件陣列,這些物件由 WIN32OLE_TYPE 物件實作,並具有 IMPLTYPEFLAG_FDEFAULT。
tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', "InternetExplorer") p tobj.default_ole_types # => [#<WIN32OLE_TYPE:IWebBrowser2>, #<WIN32OLE_TYPE:DWebBrowserEvents2>]
static VALUE foletype_default_ole_types(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FDEFAULT); }
傳回 GUID。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.guid # => {00024500-0000-0000-C000-000000000046}
static VALUE foletype_guid(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_guid(pTypeInfo); }
傳回說明內容。如果找不到說明內容,則傳回 nil。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.helpfile # => 131185
static VALUE foletype_helpcontext(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_helpcontext(pTypeInfo); }
傳回說明檔案路徑。如果找不到說明檔案,則傳回 nil。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.helpfile # => C:\...\VBAXL9.CHM
static VALUE foletype_helpfile(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_helpfile(pTypeInfo); }
傳回說明字串。
tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'IWebBrowser') puts tobj.helpstring # => Web Browser interface
static VALUE foletype_helpstring(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_helpstring(pTypeInfo); }
傳回 WIN32OLE_TYPE 物件所實作的 WIN32OLE_TYPE 物件陣列。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet') p tobj.implemented_ole_types # => [_Worksheet, DocEvents]
static VALUE foletype_impl_ole_types(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_impl_ole_types(pTypeInfo, 0); }
傳回具有類別名稱的類型名稱。
ie = WIN32OLE.new('InternetExplorer.Application') ie.ole_type.inspect => #<WIN32OLE_TYPE:IWebBrowser2>
static VALUE foletype_inspect(VALUE self) { return default_inspect(self, "WIN32OLE_TYPE"); }
傳回主要版本。
tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.major_version # => 8
static VALUE foletype_major_version(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_major_version(pTypeInfo); }
傳回次要版本。
tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.minor_version # => 2
static VALUE foletype_minor_version(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_minor_version(pTypeInfo); }
傳回 OLE 類型名稱。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.name # => Application
static VALUE foletype_name(VALUE self) { return rb_ivar_get(self, rb_intern("name")); }
傳回代表 OLE 類型庫中定義的 OLE 方法的 WIN32OLE_METHOD 物件陣列。
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_methods(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_methods_from_typeinfo(pTypeInfo, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF); }
傳回 OLE 類型的類型。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.ole_type # => Class
static VALUE foletype_ole_type(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_ole_type(pTypeInfo); }
傳回包含 WIN32OLE_TYPE 物件的 WIN32OLE_TYPELIB 物件。如果找不到,則傳回 nil。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet') puts tobj.ole_typelib # => 'Microsoft Excel 9.0 Object Library'
static VALUE foletype_ole_typelib(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_typelib_from_itypeinfo(pTypeInfo); }
如果存在,傳回 ProgID。如果找不到,則傳回 nil。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.progid # => Excel.Application.9
static VALUE foletype_progid(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_progid(pTypeInfo); }
傳回 WIN32OLE_TYPE 物件所實作且具有 IMPLTYPEFLAG_FSOURCE 的 WIN32OLE_TYPE 物件陣列。
tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', "InternetExplorer") p tobj.source_ole_types # => [#<WIN32OLE_TYPE:DWebBrowserEvents2>, #<WIN32OLE_TYPE:DWebBrowserEvents>]
static VALUE foletype_source_ole_types(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_impl_ole_types(pTypeInfo, IMPLTYPEFLAG_FSOURCE); }
當 OLE 類別為「別名」時,傳回來源類別。
tobj = WIN32OLE_TYPE.new('Microsoft Office 9.0 Object Library', 'MsoRGBType') puts tobj.src_type # => I4
static VALUE foletype_src_type(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_src_type(pTypeInfo); }
傳回 OLE 類型名稱。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.name # => Application
傳回代表類型的數字。
tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents') puts tobj.typekind # => 4
static VALUE foletype_typekind(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_typekind(pTypeInfo); }
傳回陣列的 WIN32OLE_VARIABLE 物件,代表在 OLE 類別中定義的變數。
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_variables(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_variables(pTypeInfo); }
如果 OLE 類別是公開的,傳回 true。
tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') puts tobj.visible # => true
static VALUE foletype_visible(VALUE self) { ITypeInfo *pTypeInfo = itypeinfo(self); return ole_type_visible(pTypeInfo); }