a „oeÊ3ã@sàddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddd„Z Gdd „d ej ƒZ Gd d „d ejƒZGd d „d ejƒZGdd„dejƒZGdd„dejƒZGdd„de jƒZeƒZddd„ZedkrÜeƒdS)éN)ÚdialogÚdocviewÚwindowé)ÚhierlistÚc CsXz||ŽWdStjyR}z*d|d|j}t |¡WYd}~dSd}~00dS)NrzError z r)Úwin32apiÚerrorÚstrerrorÚwin32uiÚ MessageBox)ÚfnÚargsZerr_descÚexcÚmsg©rú>C:\Program Files\Certbot\pkgs\pythonwin\pywin\tools\regedit.pyÚ SafeApply s rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú SplitterFramecCsd|_tj |¡dS©N)ÚimagesrÚ MDIChildWndÚ__init__©ÚselfrrrrszSplitterFrame.__init__cCsªt ¡}|j}| ¡}|d|d|d|ddf}|dd|df}| |dd¡t|ƒ|_t|ƒ|_|  |jdd|¡|  |jddd¡|  d|dd¡dS)Nérér)rr) r ZCreateSplitterÚdocZ GetWindowRectZ CreateStaticÚRegistryTreeViewÚkeysviewÚRegistryValueViewÚ valuesviewZ CreatePaneZ SetRowInfo)rZcpÚcontextZsplitterrZ frame_rectÚsizeZsub_sizerrrÚOnCreateClients$  zSplitterFrame.OnCreateClientcCsH|\}}}|tjkrdS|tjdkr@|j ¡}|j |¡dSdSdS)Nrr)r ÚAFX_IDW_PANE_FIRSTrÚ SelectedItemr!Ú EditValue)rÚinfoÚextraZhwndFromZidFromÚcodeÚitemrrrÚOnItemDoubleClick0s    zSplitterFrame.OnItemDoubleClickcCs |j |¡Sr)r!ÚUpdateForRegItem©rr+rrrÚPerformItemSelected=sz!SplitterFrame.PerformItemSelectedcCs(tj ||¡|jr$|j ¡d|_dSr)rrÚ OnDestroyrZDeleteImageList©rrrrrr0@s zSplitterFrame.OnDestroyN)Ú__name__Ú __module__Ú __qualname__rr$r,r/r0rrrrrs  rc@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)rcCs’|j ¡}| ¡ ¡|_t | ¡tjtj ¡|_ |j   |j|  ¡¡|j   tjtjBtjB¡|j|j _|j |jjtj¡|j |jtj¡dSr)Ú_obj_ÚOnInitialUpdateZ GetParentÚframerZHierListWithItemsÚ GetHLIRootr ZIDB_HIERFOLDERSr%ÚhierListZHierInitZ GetTreeCtrlZSetStyleÚcommctrlZ TVS_HASLINESZTVS_LINESATROOTZTVS_HASBUTTONSr/Z HookNotifyr,Z NM_DBLCLKÚOnItemRightClickZ NM_RCLICK)rÚrcrrrr6Hs ÿÿ z RegistryTreeView.OnInitialUpdatecCs | ¡}|j}|j}t||dƒS)NZRoot)Z GetDocumentÚrootÚsubkeyÚHLIRegistryKey)rrZregrootr>rrrr8YszRegistryTreeView.GetHLIRootcCsÊ| t ¡¡}| |¡\}}|dks2tj|@dkr6dS| |tj¡t  ¡}|  t j t j Bdd¡|  t j t j Bdd¡|  t j t j Bdd¡| |jd¡| |jd¡| |jd¡| t ¡¡dS)NrièzAdd Keyiéz Add Valueiêz Delete Key)ZScreenToClientrZ GetCursorPosZHitTestr:Z TVHT_ONITEMZSelectZ TVGN_CARETr ZCreatePopupMenuZ AppendMenuÚwin32conZ MF_STRINGZ MF_ENABLEDZ HookCommandÚOnAddKeyÚ OnAddValueÚ OnDeleteKeyZTrackPopupMenu)rZ notify_datar)ÚptÚflagsZhItemZmenurrrr;_sz!RegistryTreeView.OnItemRightClickcCsŽ|j ¡}|j |¡}d|jf}t |dtj¡}|tjkr@dSt t j |j |jfdƒrŠz|  |¡}Wntjy|d}Yn0|j |¡dS)Nz-Are you sure you wish to delete the key '%s'?zdeleting registry key)r9ÚGetSelectedItemÚItemFromHandleÚkeyNamer r r@ZMB_YESNOZIDYESrrZ RegDeleteKeyÚkeyRootZ GetParentItemr ÚRefresh)rÚcommandr*Úhitemr+rÚidZhparentrrrrCqs    ÿ zRegistryTreeView.OnDeleteKeycCshddlm}| ddd¡}|dur&dS|j ¡}|j |¡}ttj|j |j d|fƒrd|j  |¡dS)Nr©rz New key namerz Add new keyú\) Ú pywin.mfcrÚGetSimpleInputr9rFrGrrZ RegCreateKeyrIrHrJ©rrKr*rÚvalrLr+rrrrA‚s   zRegistryTreeView.OnAddKeycCsdddlm}| ddd¡}|dur&dS|j ¡}|j |¡}ttj|j |j t j |fƒr`|  |¡dS)NrrNz New valuerz Add new value)rPrrQr9rFrGrrZ RegSetValuerIrHr@ÚREG_SZr/rRrrrrBs   ÿzRegistryTreeView.OnAddValuecCs |j |¡Sr)r7r/r.rrrr/sz$RegistryTreeView.PerformItemSelectedcCs|j |j ¡¡Sr)r9rGrFrrrrr& szRegistryTreeView.SelectedItemcCs:|j d¡}|j |tj¡r(|j |¡S|j |¡}q dS©Nr)r9Z GetChildItemZ GetItemStater:Z TVIS_SELECTEDrGZGetNextSiblingItem)rÚhandlerrrÚSearchSelectedItem£s  z#RegistryTreeView.SearchSelectedItemN) r2r3r4r6r8r;rCrArBr/r&rWrrrrrGs rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r cCsn|j ¡}t |tj¡}t |tj|tj@tj B¡tj dddf}|  d|¡tj dddf}|  d|¡dS)NédÚNameriôZDatar) r5Ú GetSafeHwndrÚ GetWindowLongr@Ú GWL_STYLEÚ SetWindowLongr:Z LVS_TYPEMASKZ LVS_REPORTZ LVCFMT_LEFTZ InsertColumn)rZhwndÚstyleZ itemDetailsrrrr6®s ý z!RegistryValueView.OnInitialUpdatec Cs¦| ¡t |j|j¡}z|d}g}zt ||¡}WntjyJYqˆYn0|d}|s\d}| ||¡| |dt |dƒ¡|d}q"Wt  |¡n t  |¡0dS)Nrz (Default)r) ZDeleteAllItemsrÚ RegOpenKeyrIrHZ RegEnumValuer Z InsertItemZ SetItemTextÚstrÚ RegCloseKey)rr+ÚhkeyZvalNumÚretÚresÚnamerrrr-¼s    z"RegistryValueView.UpdateForRegItemc Cs Gdd„dtjƒ}z| dtj¡}Wntjy:YdS0|dkrJd}n | |d¡}z| ||¡}Wn0t y–}zt  |¡WYd}~dSd}~00||ƒ}|  ¡t j krz| |||j¡Wn8tjyü}zt  d|j¡WYd}~n d}~00| |¡dS)Nc@s$eZdZdd„Zdd„Zdd„ZdS)z/RegistryValueView.EditValue..EditDialogcSs||_tj |tj¡dSr)r+rÚDialogrr ZIDD_LARGE_EDITr.rrrrÓsz8RegistryValueView.EditValue..EditDialog.__init__cSsŒ| d¡| tj¡ tj¡| tj¡|_t   |j  ¡tj ¡}|tj @}t  |j  ¡tj |¡|j t|jƒ¡|j d¡tj |¡S)NzEnter new valueéÿÿÿÿ)Z SetWindowTextZ GetDlgItemr@ZIDCANCELZ ShowWindowZSW_SHOWr Z IDC_EDIT1Úeditrr[rZr\Z ES_WANTRETURNr]r`r+ZSetSelrrfÚ OnInitDialog)rr^rrrri×s  ÿ ÿ z.EditDialog.OnInitDialogcSs|j ¡|_dSr)rhZ GetWindowTextÚnewvaluer1rrrr0çsz9RegistryValueView.EditValue..EditDialog.OnDestroyN)r2r3r4rrir0rrrrÚ EditDialogÒsrkrgrrzError setting value %s)rrfZ GetNextItemr:Z LVNI_SELECTEDr r Z GetItemTextÚGetItemsCurrentValueÚ TypeErrorr ZDoModalr@ZIDOKÚSetItemsCurrentValuerjrr r-) rr+rkÚindexZkeyValZnewValZdetailsÚdrrrrr'Ðs(  &zRegistryValueView.EditValuec CsTt |j|j¡}z2t ||¡\}}|tjkr4tdƒ‚|Wt |¡St |¡0dS)NzOnly strings can be edited) rr_rIrHZRegQueryValueExr@rTrmra)rr+Ú valueNamerbrSÚtyperrrrls  þz&RegistryValueView.GetItemsCurrentValuec CsJt |j|jdtj¡}z"t ||dtj|¡Wt |¡n t |¡0dSrU) rr_rIrHr@Ú KEY_SET_VALUEZ RegSetValueExrTra)rr+rqÚvaluerbrrrrn s ÿz&RegistryValueView.SetItemsCurrentValueN)r2r3r4r6r-r'rlrnrrrrr ­s 2 r c@seZdZdd„Zddd„ZdS)Ú RegTemplatecCstj |tjdtd¡dSr)rÚ DocTemplaterr ZIDR_PYTHONTYPErrrrrrs ÿzRegTemplate.__init__NcCs†|durt ¡}|dur t ¡}| ¡D],}|j|kr(|j|kr(| ¡ ¡|Sq(t|||ƒ}|  |¡}|  ¡|  ||d¡|S©Nr) ÚregutilZ GetRootKeyZBuildDefaultPythonKeyZGetDocumentListr=r>Z GetFirstViewZ ActivateFrameÚ RegDocumentZCreateNewFrameZ OnNewDocumentZInitialUpdateFrame)rr=r>rr7rrrÚOpenRegistryKey!s     zRegTemplate.OpenRegistryKey)NN)r2r3r4rrzrrrrrus ÿruc@seZdZdd„Zdd„ZdS)rycCs,tj ||¡||_||_| d|¡dS)NzRegistry Editor: )rÚDocumentrr=r>ZSetTitle)rÚtemplater=r>rrrr6szRegDocument.__init__cCs tdƒ‚dS)Nz This template can not open filesr)rm)rrerrrÚOnOpenDocument<szRegDocument.OnOpenDocumentN)r2r3r4rr}rrrrry5sryc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)r?cCs"||_||_||_tj |¡dSr)rIrHÚuserNamerÚ HierListItemr)rrIrHr~rrrrBszHLIRegistryKey.__init__cCs |j|jkSr)re©rÚotherrrrÚ__lt__HszHLIRegistryKey.__lt__cCs$|j|jko"|j|jko"|j|jkSr)rIrHr~r€rrrÚ__eq__Ks   ÿ ýzHLIRegistryKey.__eq__cCsd|jj|j|jfS)Nz<%s with root=%s, key=%s>)Ú __class__r2rIrHrrrrÚ__repr__Rs ýzHLIRegistryKey.__repr__cCs|jSr)r~rrrrÚGetTextYszHLIRegistryKey.GetTextcCsdSrwrrrrrÚ IsExpandable\szHLIRegistryKey.IsExpandablec Cs¨t |j|j¡}t d¡zrd}g}zt ||¡}WntjyLYqvYn0| t |j|jd||ƒ¡|d}q$Wt  |¡t d¡nt  |¡t d¡0|S)NrrrO) rr_rIrHr Z DoWaitCursorZ RegEnumKeyr Úappendr?ra)rrbZkeyNumrcÚkeyrrrÚ GetSubListgs      ÿ  zHLIRegistryKey.GetSubListN) r2r3r4rr‚rƒr…r†r‡rŠrrrrr?As r?cCst ||¡}dSr)r|rz)r=r‰rrrrÚ EditRegistry}sr‹Ú__main__)r)NN)r:rxrr@r rPrrrrrrrrZTreeViewrZListViewr rvrur{ryrr?r|r‹r2rrrrÚs"  0fj 9