a oe+@sdZddlZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z ddlmZddlTz ddlZWnddlZYn0ddlZddlZddlZddlZddlZejj ddd d d gZgd Zd d gZgdZddgZgdZeeeeeeZ ej!ej"ej#ej$gZ%GdddZ&Gddde&Z'GdddZ(GdddZ)GdddZ*ddZ+ddZ,d d!Z-e.d"krddl/Zej0j12e*d#ej3vre-ne,nddl4Z4dS)$z This sample implements a simple IE Toolbar COM server supporting Windows XP styles and access to the IWebBrowser2 interface. It also demonstrates how to hijack the parent window to catch WM_COMMAND messages. N) universal) axcontrol)DispatchDispatchWithEvents constantsgencache getevents)shell)*z&{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B} GetBandInfo)ShowDWCloseDWZResizeBorderDW GetWindowZContextSensitiveHelp)Z UIActivateIOZ HasFocusIOZTranslateAcceleratorIOSetSiteZGetSite) GetClassIDZIsDirtyLoadSaveZ GetSizeMaxc@s$eZdZddZddZddZdS) WIN32STRUCTcKsZd}|jD].\}}}d|j|<|dkr0|d7}q ||7}q |D]\}}||j|<qBdS)NzZpi)_struct_items___dict__items)selfkwfull_fmtnamefmtdefaultvalr!9C:\Program Files\Certbot\pkgs\win32com\demos\ietoolbar.py__init__Hs   zWIN32STRUCT.__init__cCs*|ds||jvrt|||j|<dS)N_) startswithrAttributeError)rattrr r!r!r" __setattr__SszWIN32STRUCT.__setattr__cCsg|_d}g}|jD]\}}}|j|}|dkrd}|durR|d|dqtd|d}||d|t||j|n|dur|}||||7}qtj|ft |S)NrrZPirc) Z_buffsrrappendarrayZ buffer_infolenstructpacktuple)rrZvalsrrrr Zstr_bufr!r!r"toparamXs&     zWIN32STRUCT.toparamN)__name__ __module__ __qualname__r#r(r1r!r!r!r"rGs rc@seZdZgdZdS)TBBUTTON))iBitmapir) idCommandr7r)fsStateBr)fsStyler:r)Z bReservedHr)ZdwDataIr)iStringrNN)r2r3r4rr!r!r!r"r5psr5c@s eZdZdZddZddZdS)Stubzp this class serves as a method stub, outputting debug info whenever the object is being called. cCs ||_dSN)r)rrr!r!r"r#sz Stub.__init__cGstd|j|dS)NzSTUB: )printr)rargsr!r!r"__call__sz Stub.__call__N)r2r3r4__doc__r#rCr!r!r!r"r?|sr?c@s0eZdZdZddZddZddZdd Zd S) IEToolbarCtrlzQ a tiny wrapper for our winapi-based toolbar control implementation. c Cs|tjtjBtjBtjBtjBtjBtjBtj Btj Btj Btj B}t dd|dddd|dt jd |_t |jtjdddS)NZToolbarWindow32rd)win32conZWS_CHILDZ WS_VISIBLEZWS_CLIPSIBLINGSZWS_CLIPCHILDRENcommctrlZ TBSTYLE_LISTZ TBSTYLE_FLATZTBSTYLE_TRANSPARENTZCCS_TOPZ CCS_NODIVIDERZ CCS_NORESIZEZCCS_NOPARENTALIGNwin32guiZ CreateWindow dllhandlehwnd SendMessageZTB_BUTTONSTRUCTSIZE)r hwndparentZstylesr!r!r"r#sH    zIEToolbarCtrl.__init__cCst|j|dSr@)rJ ShowWindowrL)rmoder!r!r"rOszIEToolbarCtrl.ShowWindowcGs2d}|D]}||7}qt|jtjt||S)Nr)r1rJrMrLrIZ TB_ADDBUTTONSr-)rbuttonsZ tbbuttonsbuttonr!r!r" AddButtonss zIEToolbarCtrl.AddButtonscCs|jSr@)rLrr!r!r" GetSafeHwndszIEToolbarCtrl.GetSafeHwndN)r2r3r4rDr#rOrSrUr!r!r!r"rEs rEc@seZdZdZeZeZej Z dZ dZ dZ ddZddZd d Zd d Zd dZddZddZddZddZddZddZddZddZdS) IEToolbarz% The actual COM server class z&{F21202A2-959A-4149-B1C3-68B9013F3335}zPyWin32.IEToolbarPyWin32 IE ToolbarcCs6|jD]*}t||std|t||t|qdS)Nzproviding default stub for %s)_public_methods_hasattrrAsetattrr?)rmethodr!r!r"r#s   zIEToolbar.__init__cCs |jSr@)toolbarrUrTr!r!r"rszIEToolbar.GetWindowcCsdSr@r!)rstreamr!r!r"rszIEToolbar.LoadcCsdSr@r!)rZpStreamZ fClearDirtyr!r!r"rszIEToolbar.SavecCs|`dSr@)r\)rZ dwReservedr!r!r"rszIEToolbar.CloseDWcCs&|r|jtjn|jtjdSr@)r\rOrHZSW_SHOWZSW_HIDE)rZbShowr!r!r"r szIEToolbar.ShowDWcCstd|jddS)Nzfirst!z)http://starship.python.net/crew/mhammond/)rA webbrowserZ Navigate2rTr!r!r"on_first_buttonszIEToolbar.on_first_buttoncCs tddS)Nzsecond!rArTr!r!r"on_second_buttonszIEToolbar.on_second_buttoncCs tddS)Nzthird!r`rTr!r!r"on_third_buttonszIEToolbar.on_third_buttoncCs.|\}}}}}}||jkr*|j|dSr@)r\rU _command_map)rrBrLmessageZwparamZlparamtimeZpointr!r!r"toolbar_command_handlersz!IEToolbar.toolbar_command_handlerc Cs|r|tj}|}|tj}|tj}tj | dtj |_ t ||_d|jfd|jfd|jfg}i|_t|}tt|D]j}t} ||\} } d|} d| _| | _tj| _tj| _| | _| |jd|<|j | |!|j"t#j$qnd|_ dS)Nz&{0002DF05-0000-0000-C000-000000000046}zVisit PyWin32 HomepagezAnother ButtonzYet Another ButtoniDD)%ZQueryInterface pythoncomZIID_IOleWindowrrIID_IOleCommandTargetZIID_IServiceProviderwin32comclientrZ QueryServiceZ IID_IDispatchr^rEr\r_rarbrcwin32uiZCreateWindowFromHandleranger-r5r6r8rIZTBSTATE_ENABLEDr9ZTBSTYLE_BUTTONr;r>rSZ HookMessagerfrHZ WM_COMMAND) runknownZ olewindowrNZ cmdtargetZserviceproviderrQZwindowr7rRrfuncidr!r!r"rs<       zIEToolbar.SetSitecCs|jSr@) _reg_clsid_rTr!r!r"r#szIEToolbar.GetClassIDc Cs.d}d}d}d}d}t} d} |||||| | fS)N)r)irr)rrrWr)ZDBIMF_VARIABLEHEIGHT) rZdwBandIdZ dwViewModeZdwMaskZ ptMinSizeZ ptMaxSizeZ ptIntegralZptActualZwszTitleZ dwModeFlagsZcrBkgndr!r!r"r &szIEToolbar.GetBandInfoN)r2r3r4rD_ietoolbar_com_interfaces_Z_com_interfaces__ietoolbar_methods_rXrhZCLSCTX_INPROC_SERVERZ _reg_clsctx_rqZ _reg_progid_Z _reg_desc_r#rrrrr r_rarbrfrrr r!r!r!r"rVs(0rVcCst}dSr@)rV)ZbInstallZcmdLinecomclassr!r!r" DllInstall:srvcCspt}z0tdttjd}t||jdtjd}Wn$tyXtd||jfYn0td||jfdS)NzTrying to register Toolbar. ,SOFTWARE\Microsoft\Internet Explorer\Toolbarrr*z0Couldn't set registry value. hkey: %d CLSID: %s z'Set registry value. hkey: %d CLSID: %s ) rVrAwinreg CreateKeyHKEY_LOCAL_MACHINE SetValueExrq REG_BINARY WindowsError)ruhkeyZsubKeyr!r!r"DllRegisterServer?s$   rcCs^t}z(tdttjd}t||jWn$tyPtd||jfYn 0tddS)NzTrying to unregister Toolbar. rwz3Couldn't delete registry value. hkey: %d CLSID: %s zDeleting reg key succeeded. )rVrArxryrz DeleteValuerqr})rur~r!r!r"DllUnregisterServerXs  r__main__z --unregister)5rDsysrxrhrjrZwin32com.axcontrolrZwin32com.clientrrrrrZwin32com.shellr Zwin32com.shell.shellconZwinxpguirJr,r.rIrHrlrkZ EnsureModuleZIDeskBand_methodsZIDockingWindow_methodsZIOleWindow_methodsZIInputObject_methodsZIObjectWithSite_methodsZIPersistStream_methodsrtZ IID_IDeskBandZIID_IObjectWithSiteZIID_IPersistStreamrirsrr5r?rErVrvrrr2Zwin32com.server.registerZserverregisterZUseCommandLineargvZwin32traceutilr!r!r!r" sr      ) 2~