a „oe_‘ã@szddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZddlmZmZddlmZmZddlmZdZer¬ddlZdZdd „ZiZd d „ZGd d „d ƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd„dƒZ#Gdd„dƒZ$dd„Z%dd„Z&e'd k�rvdd!l(m)Z)e)j*e"ee%e&d"�dS)#éN)Ú scintillacon)Ú COMException)ÚNewEnumÚwrap)ÚshellÚshellcon)ÚIIDToInterfaceNameTcCs^t ¡}| ddtj |¡¡}|\}}}|}t|ƒdkrV| d¡}| |gdtj ¡}q,||fS)Nré) rZSHGetDesktopFolderÚParseDisplayNameÚosÚpathÚabspathÚlenÚpopÚ BindToObjectÚIID_IShellFolder)ÚfilenameZdesktopÚinfoZcchEatenÚpidlÚattrÚfolderÚthis©rúKC:\Program Files\Certbot\pkgs\win32comext\shell\demos\servers\shell_view.pyÚGetFolderAndPIDLForPathPs   rcCsZz t|}WnHtyTtj |¡\}}tj |¡\}}t ||g¡}|t|<Yn0|S©N)Ú clbr_modulesÚKeyErrorr r ÚsplitÚsplitextÚpyclbrZ readmodule_ex)r ÚobjectsÚdirrÚbaseÚextrrrÚget_clbr_for_filebs  r%c@sReZdZejejejejgZ e j e j e j Zdd„Zdd„Zdd„Zdd„Zd S) ÚShellFolderBasecCsdS©Nrr)ÚselfÚmaskrrrÚGetFrameOptions�szShellFolderBase.GetFrameOptionscCstd|ƒdS)Nr ©Úprint)r(ÚhwndZreservedZ displayNamerrrrr …sz ShellFolderBase.ParseDisplayNamecCstd|t|ƒƒdS)NZBTS)r,r)r(rÚbcÚiidrrrÚ BindToStorage‰szShellFolderBase.BindToStoragec Csl|d}| dd¡\}}|dkr&t}n,|dkr4t}n|dkrBt}ntdt|ƒƒ‚t||ƒ|tdkd �}|S) Néÿÿÿÿúr Ú directoryÚfileÚobjectzWhat is r©Ú useDispatcher)rÚShellFolderDirectoryÚShellFolderFileÚShellFolderObjectÚ RuntimeErrorÚreprrÚdebug) r(rr.r/Ú final_pidlÚtypZextraÚklassÚretrrrrŒszShellFolderBase.BindToObjectN)Ú__name__Ú __module__Ú __qualname__rZIID_IBrowserFrameOptionsÚ pythoncomZ IID_IPersistZIID_IPersistFolderrÚ_com_interfaces_rZIBrowserFrame_MethodsZIPersistFolder_MethodsZIShellFolder_MethodsÚ_public_methods_r*r r0rrrrrr&ssüÿþÿr&c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚShellFolderFileSystemcCs|d d¡\}}t|ƒS)Nrr2)rr)r(Zmy_idlr?ÚnamerrrÚ_GetFolderAndPIDLForPIDL¤sz.ShellFolderFileSystem._GetFolderAndPIDLForPIDLcCs||kr dS||krdSdS)Nr1rr r)r(ZparamZid1Zid2rrrÚ CompareIDs©s z ShellFolderFileSystem.CompareIDsc Cs‚t|ƒdksJdƒ‚|d}| |¡\}}z| ||g|||¡\}}Wn2tjyx} zt| jd�‚WYd} ~ n d} ~ 00||fS)Nr z%oops - arent expecting more than one!r©Úhresult)rrJÚ GetUIObjectOfrEÚ com_errorrrM) r(Ú hwndOwnerÚpidlsr/ÚinoutrrÚ child_pidlrAÚexcrrrrN°s"z#ShellFolderFileSystem.GetUIObjectOfcCs| |¡\}}| ||¡}|Sr)rJÚGetDisplayNameOf)r(rÚflagsrrSrArrrrU¼s z&ShellFolderFileSystem.GetDisplayNameOfcCsrd}|D]d}|d}| d¡\}}tj}t |d|¡\}} | \} } } }} tjtjBtjBtjB}|| |BM}q|S)Nr1rr2) rrZSHGFI_ATTRIBUTESrZ SHGetFileInfoÚSFGAO_HASSUBFOLDERÚ SFGAO_FOLDERÚSFGAO_FILESYSANCESTORÚSFGAO_BROWSABLE)r(rQÚ attrFlagsÚ ret_flagsrr?rIrVÚrcrZhIconZiIconZdwAttrZtypeNameÚextrasrrrÚGetAttributesOfÂs"ÿþýÿz%ShellFolderFileSystem.GetAttributesOfN)rBrCrDrJrKrNrUr_rrrrrH£s  rHc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r8cCstj |¡|_dSr©r r r ©r(r rrrÚ__init__ÖszShellFolderDirectory.__init__cCst|jƒ\}}| ||¡Sr)rr ÚCreateViewObject)r(r-r/rrSrrrrcÙsz%ShellFolderDirectory.CreateViewObjectc Cs’g}t |j¡D]l}tj |j|¡}tj |¡r:d}t}n&tj |¡\}} | dvr\t}d}nd}|dur| |d|g¡qt |t j t dkd�S)Nr3)z.pyz.pywr4r2r©r/r7) r Úlistdirr ÚjoinÚisdirr8rr9ÚappendrrÚIID_IEnumIDListr=) r(rPrVrQÚfnameZfqnÚ type_nameZ type_classr#r$rrrÚ EnumObjectsÞs z ShellFolderDirectory.EnumObjectscCs&|d}| d¡d}tj |¡dS©Nr1r2)rr r )r(rrVr>Z full_fnamerrrrUðsz%ShellFolderDirectory.GetDisplayNameOfcCstjtjBtjBtjBSr)rrWrXrYrZ)r(rQr[rrrr_õsÿþýÿz$ShellFolderDirectory.GetAttributesOfN©rBrCrDrbrcrlrUr_rrrrr8Õs r8c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r9cCstj |¡|_dSrr`rarrrrbszShellFolderFile.__init__cCsNt|jƒ}g}| ¡D]"\}}| d|jd|g¡qt|tjtdkd�S)Núobjectr2rrd)r%r Úitemsrhrrrir=)r(rPrVr!rQrIÚobrrrrls  zShellFolderFile.EnumObjectsc Cs|d}|D]n}t|ƒdks Jdƒ‚|d}| d¡\}}}t|ƒ}||} tjtjBtjB} t| dƒrn| tjO} || M}q|S)Nr1r úExpecting relative pidlsrr2Úmethods) rrr%rrZrXrYÚhasattrrW) r(rQr[r\rr?rÚobnameZobsrqrVrrrr_ s"ÿþÿ   zShellFolderFile.GetAttributesOfcCsXt|ƒdksJdƒ‚|d d¡\}}}tj |¡dd|}|tj@rP|}n|}|S©Nr zExpecting relative PIDLrr2Ú.©rrr r rrZSHGDN_INFOLDER)r(rrVr?rjruÚfqnamerArrrrUs z ShellFolderFile.GetDisplayNameOfcCstt||jƒ|tdkd�S©Nrr6)rÚScintillaShellViewr r=©r(r-r/rrrrc(sz ShellFolderFile.CreateViewObjectN)rBrCrDrbrlr_rUrcrrrrr9s  r9c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r:cCsB| d¡\|_}| d¡dkr2| d¡\|_|_n ||_d|_dS)Nr2rwr)rr ÚfindÚ class_nameÚ method_name)r(Údetailsrrrrb.s zShellFolderObject.__init__cCsRt|jƒ}||j}|jdur&|j}n(|j|j}tt||j|ƒ|tdkd�SdSrz) r%r r~rÚlinenorsrr{r=)r(r-r/Ú mod_objectsr5r�rrrrc6s     ýz"ShellFolderObject.CreateViewObjectc Csz|jdusJdƒ‚t|jƒ}||j}g}|j ¡D]0\}}d|jd|jd|g}| |¡q4t|tj t dkd�S)NzShould not be enuming methods!ror2rwrrd) rr%r r~rsrprhrrrir=) r(rPrVr‚Z my_objectsrQZ func_namer�rrrrrlCs   zShellFolderObject.EnumObjectsc Csft|ƒdksJdƒ‚|d d¡\}}}| d¡\}}tj |¡dd|}|tj@r^|} n|} | Srvrx) r(rrVr?rjrur~rryrArrrrUMs z"ShellFolderObject.GetDisplayNameOfcCs@d}|D]2}t|ƒdks Jdƒ‚tjtjBtjB}||M}q|S)Nr1r rr)rrrZrXrY)r(rQr[r\rrVrrrr_Ysÿþÿ z!ShellFolderObject.GetAttributesOfNrnrrrrr:-s    r:c@s@eZdZdZdZdZdd„Zdd„Zdd „Zd d „Z d d „Z dS)ÚShellFolderRootzPython.ShellExtension.FolderzPython Path Shell Browserz&{f6287035-3074-4cb5-a8a6-d3c80e206944}cCs|jSr)Ú _reg_clsid_©r(rrrÚ GetClassIDnszShellFolderRoot.GetClassIDcCs ||_dSr)r)r(rrrrÚ InitializeqszShellFolderRoot.InitializecCstt||ƒ|tdkd�Srz)rÚFileSystemViewr=r|rrrrcxsz ShellFolderRoot.CreateViewObjectcCs$dd„tjDƒ}t|tjtdkd�S)NcSs"g|]}tj |¡rd|g‘qS)z directory)r r rg)Ú.0ÚprrrÚ |óz/ShellFolderRoot.EnumObjects..rrd)Úsysr rrrir=)r(rPrVrprrrrl{szShellFolderRoot.EnumObjectscCs|d}| d¡d}|Srm)r)r(rrVr>Z display_namerrrrUsz ShellFolderRoot.GetDisplayNameOfN) rBrCrDZ _reg_progid_Ú _reg_desc_r„r†r‡rcrlrUrrrrrƒisrƒc@sÆeZdZejZejej gZ dd„Z dd„Z dd„Z dd„Zd d „Zd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+S),rˆcCs4||_d|_d|_d|_d|_d|_||_d|_dSr)Ú hwnd_parentr-Ú hwnd_childÚactivate_stateÚhmenuÚbrowserrÚchildren)r(rr-rrrrb’szFileSystemView.__init__cCs|jSr©r-r…rrrÚ GetWindow�szFileSystemView.GetWindowcCsttjd�‚dS©NrL©rÚwinerrorZ E_NOTIMPL)r(Z enter_moderrrÚContextSensitiveHelp sz#FileSystemView.ContextSensitiveHelpcCs€td||||ƒ||_||_| ||||¡| |¡t |jtj ddd¡}t   |t j ¡}||kshJ‚| ¡| ¡ks|J‚dS)NúFileSystemView.CreateViewWindowér)r,Úcur_foldersettingsr“Ú_CreateMainWindowÚ_CreateChildWindowÚwin32guiÚ SendMessager�Úwin32conZWM_USERrEZObjectFromAddressrZIID_IShellBrowserZQueryActiveShellView)r(ÚprevÚsettingsr“ÚrectZ browser_adZ browser_obrrrÚCreateViewWindow¤s  r›c CstjtjB}d}t ¡}tj|_||_tjtj B|_ zt  |¡Wn6tj yx}z|dt jkrd‚WYd}~n d}~00tj|jtj|jtj|jtj|jtj|ji} t |d||d|d|d|d|d|d|jdtjd¡ |_t |jtj| ¡td|jƒ|jS)NZShellViewDemo_DefViewrÚr éézView 's hwnd is)r¢ÚWS_CHILDÚ WS_VISIBLEr ZWNDCLASSÚ dllhandleZ hInstanceZ lpszClassNameZ CS_VREDRAWZ CS_HREDRAWÚstyleZ RegisterClassÚerrorr™ZERROR_CLASS_ALREADY_EXISTSZ WM_DESTROYÚ OnDestroyZ WM_COMMANDÚ OnCommandZ WM_NOTIFYÚOnNotifyZWM_CONTEXTMENUÚ OnContextMenuÚWM_SIZEÚOnSizeÚ CreateWindowr�r-Z SetWindowLongZ GWL_WNDPROCr,) r(r£r¤r“r¥r­Z wclass_nameZwcr€Ú message_maprrrržµsB ûõ  z FileSystemView._CreateMainWindowc CsÒ|jdusJdƒ‚|jdus$Jdƒ‚tjtjBtjBtjBtjB}|j\}}|t j krh|tj tj BO}nj|t j kr„|tjtj BO}nN|t jkr |tjtj BO}n2|t jkr¼|tjtj BO}nt j}|tjtj BO}t jtjft jtjft jtjffD]\}}||@rô||O}qôt tjdd|dddd|jddd¡ |_t |j¡}t |jdd|d|d|d|dd ¡tj tj!dd d d �\}} t "|jtj#d|¡tj tj$dd dd �\}} t "|jtj#d|¡| %¡dS)Nzalready have a windowz no settingsZ SysListView32réèr¨r©r TÚNamei,)ZfmtÚsubItemÚtextZcxZExistsé2)&r�r�r¢rªr«Z WS_BORDERÚcommctrlZLVS_SHAREIMAGELISTSZLVS_EDITLABELSrZFVM_ICONZLVS_ICONZLVS_AUTOARRANGEZ FVM_SMALLICONZ LVS_SMALLICONZFVM_LISTZLVS_LISTZ FVM_DETAILSZ LVS_REPORTZ FWF_SINGLESELZ LVS_SINGLESELZ FWF_ALIGNLEFTZ LVS_ALIGNLEFTZFWF_SHOWSELALWAYSZLVS_SHOWSELALWAYSr ZCreateWindowExZWS_EX_CLIENTEDGEr-Z GetClientRectÚ MoveWindowÚwin32gui_structZ PackLVCOLUMNZ LVCFMT_LEFTr¡ZLVM_INSERTCOLUMNZ LVCFMT_RIGHTÚRefresh) r(r£r­Z view_modeZ view_flagsÚf_flagZl_flagZcrZlvcr^rrrrŸßslÿþýüÿ        ý  ô . ÿ  ÿ z!FileSystemView._CreateChildWindowcCs|jSr)r�r…rrrÚGetCurrentInfo!szFileSystemView.GetCurrentInfocCs tdƒdS©NZ OnActivater+©r(r‘rrrÚ UIActivate$szFileSystemView.UIActivatecCsx|j|krdS| ¡|tjkrn|jdus2Jdƒ‚t ¡|_d}|j |j|¡|  |¡|j  |jd|j ¡||_dS)NzShould have destroyed it!)rrrrrrr) r‘Ú _OnDeactivaterÚSVUIA_DEACTIVATEr’r Ú CreateMenur“Z InsertMenusSBÚ _MergeMenusÚ SetMenuSBr-)r(r‘ZwidthsrrrÚ _OnActivate's    zFileSystemView._OnActivatecCsV|jdurD|jdurD|j ddd¡|j |j¡t |j¡d|_d|_tj|_ dSr') r“r’rÉZ RemoveMenusSBr Ú DestroyMenuZ hsubmenusrrÆr‘r…rrrrÅ6s zFileSystemView._OnDeactivatecCsP|tjk}tj}t tj¡\}}t |j |d|¡t  |¡}|d}t dƒdS)NFr©zDo someting with the file menu!) rÚSVUIA_ACTIVATE_FOCUSZFCIDM_MENU_FILEr¾ZEmptyMENUITEMINFOr¢Z MIIM_SUBMENUr ZGetMenuItemInfor’ZUnpackMENUITEMINFOr,)r(r‘Zhave_selZmidÚbufr^ÚdataZsubmenurrrrÈ?s  zFileSystemView._MergeMenusc CstjtjB}d}g|_|j |jd¡D]}|j |¡q&t|jƒD]À\}}t |ƒdks^Jdƒ‚|d  d¡\}}t j   |¡r€dp‚d}||f} tj|d| d||d�\}} t |jtj||¡d} | dd…D]4} tj|| | d�\}} t |jtjd|¡| d7} qÌqBdS) Nrr zexpecting just a child PIDLr2ZYesZNo)Úitemr¹rºÚstateÚ stateMask)rÏr¹rº)r¼Z LVIS_SELECTEDZLVIS_DROPHILITEDr”rrlr-rhÚ enumeraterrr r Úexistsr¾Z PackLVITEMr r¡r�ZLVM_INSERTITEMZ LVM_SETITEM) r(rÑrÐZcidZ row_indexrÎr?r ZdescZ prop_valsr^Z col_indexZprop_valrrrr¿Ms6 û  ÿÿ zFileSystemView.RefreshcCstd|ƒdS)Nz$Please implement SelectItem for PIDLr+)r(rÚflagrrrÚ SelectItemoszFileSystemView.SelectItemcCsttjd�‚dSr—r˜)r(Zitem_numr/rrrÚ GetItemObjectuszFileSystemView.GetItemObjectcCstjSr©r™ZS_FALSE©r(ÚmsgrrrÚTranslateAcceleratorxsz#FileSystemView.TranslateAcceleratorcCst |j¡d|_tdƒdS)NzDestroyed view window©r Z DestroyWindowr-r,r…rrrÚDestroyViewWindow{s z FileSystemView.DestroyViewWindowcCs tdƒdS)NZ OnDestoryr+©r(r-rÙÚwparamÚlparamrrrr¯�szFileSystemView.OnDestroycCs tdƒdS)Nr°r+rÝrrrr°„szFileSystemView.OnCommandc CsNt |¡\}}}|tjkr@|jdur0|j d¡| tj¡�n |tj krT|  ¡nö|tj k�rJg}d} t   |jtj| tj¡} | dkrˆq¢| |j| dd…¡qhtd|ƒt  ¡} zˆ|j |j|tjd¡\} } tj} z|j tj¡| tjO} Wntj�yYn0tj |jt!j"dd|dd�}td|ƒWt  #| ¡n t  #| ¡0dS)Nr1z Selection isrrZexplore)r-ZnShowZlpClassZlpVerbZlpIDListzShellExecuteEx returned)$r¾ZUnpackWMNOTIFYr¼Z NM_SETFOCUSr“ZOnViewWindowActiverÊrrÌZ NM_KILLFOCUSrÅZ NM_DBLCLKr r¡r�ÚLVM_GETNEXTITEMÚ LVNI_SELECTEDrhr”r,rÇrrNr�rÚIID_IContextMenuZCMF_DEFAULTONLYÚGetControlWindowÚFCW_TREEÚ CMF_EXPLORErErOZShellExecuteExr¢Z SW_NORMALrË)r(r-rÙrÞrßZhwndFromZidFromÚcodeÚselÚnr’rRÚcmrVÚrvrrrr±‡sJ      ÿ  ÿ û zFileSystemView.OnNotifyc CsRg}d}t |jtj|tj¡}|dkr(qB| |j|dd…¡qt  ¡}|sZt dƒdS|j   |j |tjd¡\}} t ¡} d} z–d} z|j tj¡| tjO} Wntjy¶Yn0d} |  | d| d| ¡tjtjBtjB}t | ||d|dd|jd¡} t d| ƒWt | ¡n t | ¡0| �rNd|j | | dddddf}|   |¡dS)Nr1zIgnoring background clickrr zTrackPopupMenu returned)!r r¡r�r¼ràrárhr”Úwin32apiZ GetCursorPosr,rrNr�rrâZCreatePopupMenur“rãrrärårErOZQueryContextMenur¢Z TPM_LEFTALIGNZ TPM_RETURNCMDZTPM_RIGHTBUTTONZTrackPopupMenur-rËZ InvokeCommand)r(r-rÙrÞrßrQrèZsptrRrér’rçrVZ id_cmd_firstZ tpm_flagsZcirrrr²ÞsPÿ ÿÿþÿÿ zFileSystemView.OnContextMenucCs8|jdur4t |¡}t |¡}t |jdd||d¡dS©NrF)r�rëÚLOWORDÚHIWORDr r½©r(r-rÙrÞrßÚxÚyrrrr´s   zFileSystemView.OnSizeN) rBrCrDrÚIShellView_MethodsrGrEÚIID_IOleWindowrÚIID_IShellViewrFrbr–ršr¦ržrŸrÁrÄrÊrÅrÈr¿rÕrÖrÚrÜr¯r°r±r²r´rrrrrˆ‹s2þ *B "W0rˆc@sjeZdZejZejej gZ ddd„Z ddd„Z dd„Z d d „Zd d „Zd d„Zdd„Zdd„Zdd„ZdS)r{NcCs||_||_||_d|_dSr)rr�r�r-)r(r-rr�rrrrbszScintillaShellView.__init__rcCst |j|||¡Sr)r r¡r-)r(rÙrÞrßrrrÚ_SendSci%szScintillaShellView._SendScic CsPtd||||ƒzt d¡WnltjyŠtjD]H}tj |d¡}tj |¡sbtj |dd¡}tj |¡r4t  |¡q†q4t dƒ‚Yn0t j t j Bt jBt jBt jB}t dd||d|d|d|d|d |d|jd dd¡ |_t j|ji}t|jd ƒ ¡} | ¡| tjt| ƒ| ¡|jdk�r@| tj |j¡td |jƒdS) Nú#ScintillaShellView.CreateViewWindowz Scintilla.dllZBuildzCan't find scintilla!Z Scintillarr r¨r©r·ÚUzScintilla's hwnd is)!r,rëZGetModuleHandler®r�r r rfÚisfileZ LoadLibraryr;r¢rªZ WS_VSCROLLZ WS_HSCROLLZWS_CLIPCHILDRENr«r rµr�r-r³r´r4rÚreadÚ _SetupLexerrõrZ SCI_ADDTEXTrr�Z SCI_GOTOLINE) r(r£r¤r“r¥rŠrjr­r¶Z file_datarrrr¦)sV    ÿþýüÿõÿ röcCsœ|j}ddtjfddtjfddtjfddtjfddtjfddtjfddtjfddtj fddtj fddtj fd dtj fd dtj fddtjfddtjfg}| tjtjd ¡| tjd ¡d }|D]Ø\}}}| tj||d¡| tj||d¡|dd@�r| tj|d¡n| tj|d ¡|dd@�r@| tj|d¡n| tj|d ¡| tj|t|ddƒ¡|du�r†| tj||¡| tj|d¡q¾dS)N)rréÈr退€)rr¨rûri€)rr¨rûrrü)rrrûr退)rrrûr退)rrrûrrrþ)rr rûri€)rr rûriÿ)rr rûrrýré)ièrrûrrré1z Courier Newérœr r¨é)r-rZ SCE_P_DEFAULTZSCE_P_COMMENTLINEZSCE_P_COMMENTBLOCKZ SCE_P_NUMBERZ SCE_P_STRINGZSCE_P_CHARACTERZ SCE_P_TRIPLEZSCE_P_TRIPLEDOUBLEZSCE_P_STRINGEOLZ SCE_P_WORDZSCE_P_CLASSNAMEZ SCE_P_DEFNAMEZSCE_P_OPERATORZSCE_P_IDENTIFIERrõZ SCI_SETLEXERZ SCLEX_PYTHONZSCI_SETSTYLEBITSZSCI_STYLESETFOREZSCI_STYLESETFONTZSCI_STYLESETBOLDZSCI_STYLESETITALICZSCI_STYLESETSIZEÚintZSCI_STYLESETBACKZSCI_STYLESETEOLFILLED)r(ÚhZstylesZ baseFormatÚfÚbgZstylenumrrrrú\sH              òÿ ÿzScintillaShellView._SetupLexercCs|jSrr•r…rrrr–†szScintillaShellView.GetWindowcCs tdƒdSrÂr+rÃrrrrĉszScintillaShellView.UIActivatecCst |j¡d|_tdƒdS)NzDestroyed scintilla windowrÛr…rrrrÜŒs z$ScintillaShellView.DestroyViewWindowcCstjSrr×rØrrrrÚ‘sz'ScintillaShellView.TranslateAcceleratorcCs.t |¡}t |¡}t |jdd||d¡dSrì)rërírîr r½r-rïrrrr´”s  zScintillaShellView.OnSize)N)rr)rBrCrDrròrGrErórrôrFrbrõr¦rúr–rÄrÜrÚr´rrrrr{sþ  3*r{cCs”ddl}| |jdtj¡}| |dd|jtj¡| |jdtjd¡}t j t j Bt j B}ddl }| d|¡}| |dd|j|¡ttjdƒdS)NrúESOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\Namespace\zCLSID\z \ShellFolderÚiZ Attributeszregistration complete.)ÚwinregÚ CreateKeyÚHKEY_LOCAL_MACHINErƒr„Ú SetValueExÚREG_SZrŽÚHKEY_CLASSES_ROOTrrXrWrZÚstructÚpackÚ REG_BINARYr,)r ÚkeyrrÚsrrrÚDllRegisterServeršs$ÿþ þÿ rc Cslddl}z| |jdtj¡}Wn:tyZ}z"ddl}|j|jkrF‚WYd}~n d}~00ttj dƒdS)Nrrzunregistration complete.) r Ú DeleteKeyr rƒr„Ú WindowsErrorÚerrnoÚENOENTr,rŽ)r rr€rrrrÚDllUnregisterServer³sÿþ rÚ__main__)Úregister)r=Zfinalize_registerZfinalize_unregister)+Ú_threadr r r�r¼rErër¢r r¾r™Zpywin.scintillarZwin32com.server.exceptionrZwin32com.server.utilrrZwin32com.shellrrZ win32com.utilrr=Zwin32traceutilZcom_auto_reloadrrr%r&rHr8r9r:rƒrˆr{rrrBZwin32com.serverrZUseCommandLinerrrrÚ1sX   02+-<"  ü