a „oe¬ã@srdZddlZddlZddlZGdd„dƒZdd„ZdZdZd Zdd d „Z d d „Z ddd„Z e dkrne e ƒjƒdS)zSUtilities for selecting and enumerating the Type Libraries installed on the system éNc@s@eZdZddd„Zdd„Zdd„Zdd „Zd d „Zdd d„Zd S)Ú TypelibSpecrcCs<t|ƒ|_t|ƒ|_||_||_d|_d|_d|_||_ dS)N) ÚstrÚclsidÚintÚlcidÚmajorÚminorÚdllÚdescÚver_descÚflags)Úselfrrrrr ©rú:C:\Program Files\Certbot\pkgs\win32com\client\selecttlb.pyÚ__init__ s  zTypelibSpec.__init__cCs|dkr|jStdƒ‚dS)NrzCant index me!)r Ú IndexError)r ÚitemrrrÚ __getitem__szTypelibSpec.__getitem__cCsP|jpd ¡|jpd ¡|j|jf}|jp,d ¡|jp8d ¡|j|jf}||kS©NÚ©r Úlowerr rr)r ÚotherÚmeZthemrrrÚ__lt__s  ü  üzTypelibSpec.__lt__cCsP|jpd ¡|jpd ¡koN|jp$d ¡|jp0d ¡koN|j|jkoN|j|jkSrr)r rrrrÚ__eq__-sÿ þ üzTypelibSpec.__eq__cCs*|jdurdSt |j¡}| |d¡dS)Nré)r Ú pythoncomZ LoadTypeLibÚ FromTypelib)r ZtlbrrrÚResolve5s    zTypelibSpec.ResolveNcCsB| ¡}t|dƒ|_|d|_|d|_|d|_|r>||_dS)Nrréé)Z GetLibAttrrrrrrr )r ZtypelibZdllNameZlarrrr<s   zTypelibSpec.FromTypelib)r)N) Ú__name__Ú __module__Ú __qualname__rrrrrrrrrrr s  rcCsxd}g}zt ||¡}Wntjy0YqtYn0zt ||¡}WntjyZd}Yn0| ||f¡|d}q|S)Nrrr)Úwin32apiZ RegEnumKeyÚerrorÚ RegQueryValueÚappend)ÚrootÚindexÚretrÚvalrrrÚEnumKeysFs   r-rér!cCs t tjd¡}t|ƒ}g}|D]ä\}}zt |t|ƒ¡}WntjyTYqYn0t|ƒD]¢\}}| dd¡} t| ƒdkrŠ|   d¡| d} | d} t |t|ƒ¡} zt t  | d¡ƒ} Wntjt fyÚd} Yn0| |@dkr^t| ƒD]\}}z t |ƒ}Wnt yYqðYn0zt | d|f¡}WnJtjy€zt | d |f¡}WntjyzYYqðYn0Yn0z*t  |d ¡\}}|tjkrªt |¡}WntjyÆd }Yn0t||| | | ƒ}||_||_|d |d |_|  |¡qðq^q|S) zFReturn a list of TypelibSpec objects, one for each registered library.ZTypelibÚ.rr.Ú0rÚFLAGSz%s\win32z%s\win64Nz (ú))r%Z RegOpenKeyÚwin32conÚHKEY_CLASSES_ROOTr-rr&ÚsplitÚlenr(rr'Ú ValueErrorZRegQueryValueExÚ REG_EXPAND_SZÚExpandEnvironmentStringsrr r r )Ú excludeFlagsÚkeyZiidsÚresultsZiidZcrapZkey2ÚversionZtlbdescZ major_minorrrZkey3r rZkey4r ÚtypÚspecrrrÚEnumTlbs_sX          r@cCs,g}tƒ}|D]}|j|kr| |¡q|S)z@Find all installed type libraries with the specified description)r@r r()r r+ÚitemsrrrrÚFindTlbsWithDescription›s   rBúSelect LibrarycCsfddl}t|ƒ}|D] }t|jdƒ|_t|jdƒ|_q| ¡|jj ||dg¡}|dur^dS||S)zUDisplay a list of all the type libraries, and select one. Returns None if cancelledrNéz Type Library) Zpywin.dialogs.listr@rrrÚsortZdialogsÚlistZSelectFromLists)Útitler:ZpywinrAÚiÚrcrrrÚ SelectTlb¥srJÚ__main__)r)rCr)Ú__doc__rr%r3rr-ZFLAG_RESTRICTEDZ FLAG_CONTROLZ FLAG_HIDDENr@rBrJr"ÚprintÚ__dict__rrrrÚs= <