a „oe+ã@sÌdZddlZddlZddlZddlZddlmZddlmZddlm Z m Z m Z m Z m Z ddlmZddlTz ddlZWnddlZYn0ddlZddlZddlZddlZddlZejj  ddd d ¡d gZgd ¢Zd d gZgd¢ZddgZgd¢ZeeeeeeZ ej!ej"ej#ej$gZ%Gdd„dƒZ&Gdd„de&ƒZ'Gdd„dƒZ(Gdd„dƒZ)Gdd„dƒZ*dd„Z+dd„Z,d d!„Z-e.d"k�rÀddl/Zej0j1 2e*¡d#ej3v�r¸e-ƒ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)ÚDispatchÚDispatchWithEventsÚ constantsÚgencacheÚ getevents)Úshell)Ú*z&{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}éÚ GetBandInfo)ÚShowDWÚCloseDWZResizeBorderDWÚ GetWindowZContextSensitiveHelp)Z UIActivateIOZ HasFocusIOZTranslateAcceleratorIOÚSetSiteZGetSite)Ú GetClassIDZIsDirtyÚLoadÚSaveZ GetSizeMaxc@s$eZdZdd„Zdd„Zdd„ZdS)Ú WIN32STRUCTcKsZd}|jD].\}}}d|j|<|dkr0|d7}q ||7}q | ¡D]\}}||j|<qBdS)NÚÚzZpi)Ú_struct_items_Ú__dict__Úitems)ÚselfÚkwÚfull_fmtÚnameÚfmtÚdefaultÚval©r!ú9C:\Program Files\Certbot\pkgs\win32com\demos\ietoolbar.pyÚ__init__Hs   zWIN32STRUCT.__init__cCs*| d¡s||jvrt|ƒ‚||j|<dS)NÚ_)Ú startswithrÚAttributeError)rÚattrr r!r!r"Ú __setattr__SszWIN32STRUCT.__setattr__cCsÄg|_d}g}|jD]š\}}}|j|}|dkr�d}|durR| d¡| d¡q¦t d|d¡}| | ¡d¡| t|ƒ¡|j |¡n|durœ|}| |¡||7}qtj|ft |ƒŽS)NrrZPirÚcú) Z_buffsrrÚappendÚarrayZ buffer_infoÚlenÚstructÚpackÚtuple)rrZvalsrrrr Zstr_bufr!r!r"ÚtoparamXs&     zWIN32STRUCT.toparamN)Ú__name__Ú __module__Ú __qualname__r#r(r1r!r!r!r"rGs rc@seZdZgd¢ZdS)ÚTBBUTTON))ÚiBitmapÚir)Ú idCommandr7r)ÚfsStateÚBr)ÚfsStyler:r)Z bReservedÚHr)ZdwDataÚIr)ÚiStringrNN)r2r3r4rr!r!r!r"r5psr5c@s eZdZdZdd„Zdd„ZdS)ÚStubzp this class serves as a method stub, outputting debug info whenever the object is being called. cCs ||_dS©N)r)rrr!r!r"r#ƒsz Stub.__init__cGstd|j|ƒdS)NzSTUB: )Úprintr)rÚargsr!r!r"Ú__call__†sz Stub.__call__N)r2r3r4Ú__doc__r#rCr!r!r!r"r?|sr?c@s0eZdZdZdd„Zdd„Zdd„Zdd „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  |jtjdd¡dS)NZToolbarWindow32rédé)Úwin32conZWS_CHILDZ WS_VISIBLEZWS_CLIPSIBLINGSZWS_CLIPCHILDRENÚcommctrlZ TBSTYLE_LISTZ TBSTYLE_FLATZTBSTYLE_TRANSPARENTZCCS_TOPZ CCS_NODIVIDERZ CCS_NORESIZEZCCS_NOPARENTALIGNÚwin32guiZ CreateWindowÚ dllhandleÚhwndÚ SendMessageZTB_BUTTONSTRUCTSIZE)rÚ hwndparentZstylesr!r!r"r#�sHÿþýüûúùø ÷ öÿ õ zIEToolbarCtrl.__init__cCst |j|¡dSr@)rJÚ ShowWindowrL)rÚmoder!r!r"rO­szIEToolbarCtrl.ShowWindowcGs2d}|D]}|| ¡7}qt |jtjt|ƒ|¡S)Nr)r1rJrMrLrIZ TB_ADDBUTTONSr-)rÚbuttonsZ tbbuttonsÚbuttonr!r!r"Ú AddButtons°s ÿzIEToolbarCtrl.AddButtonscCs|jSr@)rL©rr!r!r"Ú GetSafeHwnd¸szIEToolbarCtrl.GetSafeHwndN)r2r3r4rDr#rOrSrUr!r!r!r"rEŠs rEc@s’eZdZdZeZeZej Z dZ dZ dZ dd„Zdd„Zd d „Zd d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS) Ú IEToolbarz% The actual COM server class z&{F21202A2-959A-4149-B1C3-68B9013F3335}zPyWin32.IEToolbarúPyWin32 IE ToolbarcCs6|jD]*}t||ƒstd|ƒt||t|ƒƒqdS)Nzproviding default stub for %s)Ú_public_methods_ÚhasattrrAÚsetattrr?)rÚmethodr!r!r"r#És   zIEToolbar.__init__cCs |j ¡Sr@)ÚtoolbarrUrTr!r!r"rÐszIEToolbar.GetWindowcCsdSr@r!)rÚstreamr!r!r"rÓszIEToolbar.LoadcCsdSr@r!)rZpStreamZ fClearDirtyr!r!r"r×szIEToolbar.SavecCs|`dSr@)r\)rZ dwReservedr!r!r"rÛszIEToolbar.CloseDWcCs&|r|j tj¡n|j tj¡dSr@)r\rOrHZSW_SHOWZSW_HIDE)rZbShowr!r!r"r ÞszIEToolbar.ShowDWcCstdƒ|j d¡dS)Nzfirst!z)http://starship.python.net/crew/mhammond/)rAÚ webbrowserZ Navigate2rTr!r!r"Úon_first_buttonäszIEToolbar.on_first_buttoncCs tdƒdS)Nzsecond!©rArTr!r!r"Úon_second_buttonèszIEToolbar.on_second_buttoncCs tdƒdS)Nzthird!r`rTr!r!r"Úon_third_buttonëszIEToolbar.on_third_buttoncCs.|\}}}}}}||j ¡kr*|j|ƒdSr@)r\rUÚ _command_map)rrBrLÚmessageZwparamZlparamÚtimeZpointr!r!r"Útoolbar_command_handlerîsz!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$¡qŠnd|_ dS)Nz&{0002DF05-0000-0000-C000-000000000046}zVisit PyWin32 HomepagezAnother ButtonzYet Another ButtoniDDéþÿÿÿ)%ZQueryInterfaceÚ pythoncomZIID_IOleWindowrrÚIID_IOleCommandTargetZIID_IServiceProviderÚwin32comÚclientrZ QueryServiceZ IID_IDispatchr^rEr\r_rarbrcÚwin32uiZCreateWindowFromHandleÚranger-r5r6r8rIZTBSTATE_ENABLEDr9ZTBSTYLE_BUTTONr;r>rSZ HookMessagerfrHZ WM_COMMAND) rÚunknownZ olewindowrNZ cmdtargetZserviceproviderrQZwindowr7rRrÚfuncÚidr!r!r"rós<   ÿÿ ý   zIEToolbar.SetSitecCs|jSr@)Ú _reg_clsid_rTr!r!r"r#szIEToolbar.GetClassIDc Cs.d}d}d}d}d}t} d} |||||| | fS)N)ré)iÐrr)rrrWr)ZDBIMF_VARIABLEHEIGHT) rZdwBandIdZ dwViewModeZdwMaskZ ptMinSizeZ ptMaxSizeZ ptIntegralZptActualZwszTitleZ dwModeFlagsZcrBkgndr!r!r"r &sùzIEToolbar.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"rV¼s(0rVcCst}dSr@)rV)ZbInstallZcmdLineÚcomclassr!r!r"Ú DllInstall:srvcCspt}z0tdƒt tjd¡}t ||jdtjd¡}Wn$tyXtd||jfƒYn0td||jfƒdS)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 ) rVrAÚwinregÚ CreateKeyÚHKEY_LOCAL_MACHINEÚ SetValueExrqÚ REG_BINARYÚ WindowsError)ruÚhkeyZsubKeyr!r!r"ÚDllRegisterServer?s$ÿÿ ÿÿ  ÿrcCs^t}z(tdƒt tjd¡}t ||j¡Wn$tyPtd||jfƒYn 0tdƒdS)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)5rDÚsysrxrhrjrZwin32com.axcontrolrZwin32com.clientrrrrrZwin32com.shellr Zwin32com.shell.shellconZwinxpguirJr,r.rIrHrlrkZ EnsureModuleZIDeskBand_methodsZIDockingWindow_methodsZIOleWindow_methodsZIInputObject_methodsZIObjectWithSite_methodsZIPersistStream_methodsrtZ IID_IDeskBandZIID_IObjectWithSiteZIID_IPersistStreamrirsrr5r?rErVrvrr�r2Zwin32com.server.registerZserverÚregisterZUseCommandLineÚargvZwin32traceutilr!r!r!r"Ú sr     ÿþýüûÿ ü) 2~