a „oe­ã@s0dZddlZddlZddlZddlZddlmZddlmZmZm Z m Z m Z z e  ¡Wnej ytddlZYn0ddlZddlmZejj  dddd¡dd gZd d gZeeZejejgZGd d „d ƒZGdd„dƒZdd„Zdd„ZGdd„deƒZdd„Zdd„Z e!dk�r,ej"jj#eee d�dS)a· This sample implements a simple IE Button COM server with access to the IWebBrowser2 interface. To demonstrate: * Execute this script to register the server. * Open Pythonwin's Tools -> Trace Collector Debugging Tool, so you can see the output of 'print' statements in this demo. * Open a new IE instance. The toolbar should have a new "scissors" icon, with tooltip text "IE Button" - this is our new button - click it. * Switch back to the Pythonwin window - you should see: IOleCommandTarget::Exec called. This is the button being clicked. Extending this to do something more useful is left as an exercise. Contribtions to this sample to make it a little "friendlier" welcome! éN)Ú universal)ÚDispatchÚDispatchWithEventsÚ constantsÚgencacheÚ getevents)Ú axcontrolz&{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}éÚSetSiteZGetSiteÚExecÚ QueryStatusc@s eZdZdZdd„Zdd„ZdS)ÚStubzp this class serves as a method stub, outputting debug info whenever the object is being called. cCs ||_dS©N)Úname)Úselfr©rú8C:\Program Files\Certbot\pkgs\win32com\demos\iebutton.pyÚ__init__Esz Stub.__init__cGstd|j|ƒdS)NzSTUB: )Úprintr)rÚargsrrrÚ__call__Hsz Stub.__call__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrrr >sr c@sVeZdZdZeZeZej Z dZ dZ dZ dZdd„Zdd„Zd d „Zd d „Zd d„ZdS)ÚIEButtonz% The actual COM server class ú IE Buttonú+An example implementation for an IE Button.ÚcCs6|jD]*}t||ƒstd|ƒt||t|ƒƒqdS)Nzproviding default stub for %s)Ú_public_methods_ÚhasattrrÚsetattrr )rÚmethodrrrrYs   zIEButton.__init__cCsZg}|D]&\}}|tjtjBO}| ||f¡q|dur>d}n|tjkrNd}nd}||fS)Nz IEButton NamezIEButton State)rZOLECMDF_SUPPORTEDZOLECMDF_ENABLEDÚappendZOLECMDTEXTF_NAME)rÚ pguidCmdGroupZprgCmdsZcmdtextfÚresultÚidÚflagsZcmdtextrrrr `s  zIEButton.QueryStatuscCst||||ƒtdƒdS)NzIOleCommandTarget::Exec called.)r)rr$ZnCmdIDZ nCmdExecOptZpvaInrrrr qsz IEButton.ExeccCs@|r6| tj¡}| tj¡}tj | dtj ¡¡|_ nd|_ dS)Nz&{0002DF05-0000-0000-C000-000000000046}) ZQueryInterfacerÚIID_IOleCommandTargetÚ pythoncomZIID_IServiceProviderÚwin32comÚclientrZ QueryServiceZ IID_IDispatchZ webbrowser)rÚunknownZ cmdtargetZserviceproviderrrrr vs  ÿÿzIEButton.SetSitecCs|jSr)Ú _reg_clsid_)rrrrÚ GetClassID†szIEButton.GetClassIDN)rrrrÚ_iebutton_com_interfaces_Z_com_interfaces_Ú_iebutton_methods_rr)ZCLSCTX_INPROC_SERVERZ _reg_clsctx_Ú _button_text_Ú _tool_tip_Ú_icon_Ú _hot_icon_rr r r r.rrrrrLsrcCsâddl}d|j}z¨| |j|¡}| |dd|j|j¡}| |dd|j|j¡| |dd|jd¡| |dd|jd¡| |d d|j|j¡| |d d|j|j¡| |d d|j|j ¡Wnt yÔt d ƒYn 0t d ƒdS)Nrú4SOFTWARE\Microsoft\Internet Explorer\Extensions\%38sÚ ButtonTextÚClsidExtensionÚCLSIDz&{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}úDefault VisibleZYesÚToolTipÚIconÚHotIconz'Couldn't set standard toolbar reg keys.zSet standard toolbar reg keys.) Úwinregr-Ú CreateKeyÚHKEY_LOCAL_MACHINEÚ SetValueExÚREG_SZr1r2r3r4Ú WindowsErrorr©Zclassobjr=Z subKeyCLSIDZhKeyZsubKeyrrrÚregisterŠs.ÿÿÿÿ ÿ rDcCs®ddl}d|j}zt| |j|¡}| |d¡}| |d¡| |d¡| |d¡| |d¡| |d¡| |d ¡| |j|¡Wnty td ƒYn 0td ƒdS) Nrr5r6r7r8r9r:r;r<z(Couldn't delete Standard toolbar regkey.z Deleted Standard toolbar regkey.)r=r-r>r?Ú DeleteValueÚ DeleteKeyrBrrCrrrÚ unregister¦s$ÿÿ        rGc@s(eZdZdZdZdZdZdZdZeZ dS)ÚPyWin32InternetExplorerButtonz&{104B66A9-9E68-49D1-A3F5-94754BE9E0E6}zPyWin32.IEButtonz Test ButtonrrrN) rrrr-Z _reg_progid_Z _reg_desc_r1r2r3r4rrrrrHÂsrHcCs ttƒdSr)rDrHrrrrÚDllRegisterServerÌsrIcCs ttƒdSr)rGrHrrrrÚDllUnregisterServerÐsrJÚ__main__)Zfinalize_registerZfinalize_unregister)$rr)Zwin32apir*Zwin32com.server.registerrZwin32com.clientrrrrrZGetConsoleTitleÚerrorZwin32traceutilZarrayZwin32com.axcontrolrr+Z EnsureModuleZIObjectWithSite_methodsZIOleCommandTarget_methodsr0r(ZIID_IObjectWithSiter/r rrDrGrHrIrJrZserverZUseCommandLinerrrrÚ s@   þ>  ý