a oe@s0dZddlZddlZddlZddlZddlmZddlmZmZm Z m Z m Z z e Wnej ytddlZYn0ddlZddlmZejj dddddd gZd d gZeeZejejgZGd d d ZGdddZddZddZGdddeZddZddZ e!dkr,ej"jj#eee ddS)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)DispatchDispatchWithEvents constantsgencache getevents) axcontrolz&{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}SetSiteZGetSiteExec QueryStatusc@s eZdZdZddZddZdS)Stubzp this class serves as a method stub, outputting debug info whenever the object is being called. cCs ||_dSN)name)selfrr8C:\Program Files\Certbot\pkgs\win32com\demos\iebutton.py__init__Esz Stub.__init__cGstd|j|dS)NzSTUB: )printr)rargsrrr__call__Hsz Stub.__call__N)__name__ __module__ __qualname____doc__rrrrrrr >sr c@sVeZdZdZeZeZej Z dZ dZ dZ dZddZddZd d Zd d Zd dZdS)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_hasattrrsetattrr )rmethodrrrrYs   zIEButton.__init__cCsZg}|D]&\}}|tjtjBO}|||fq|dur>d}n|tjkrNd}nd}||fS)Nz IEButton NamezIEButton State)rZOLECMDF_SUPPORTEDZOLECMDF_ENABLEDappendZOLECMDTEXTF_NAME)r pguidCmdGroupZprgCmdsZcmdtextfresultidflagsZcmdtextrrrr `s  zIEButton.QueryStatuscCst||||tddS)NzIOleCommandTarget::Exec called.)r)rr$ZnCmdIDZ nCmdExecOptZpvaInrrrr qsz IEButton.ExeccCs@|r6|tj}|tj}tj|dtj |_ nd|_ dS)Nz&{0002DF05-0000-0000-C000-000000000046}) ZQueryInterfacerIID_IOleCommandTarget pythoncomZIID_IServiceProviderwin32comclientrZ QueryServiceZ IID_IDispatchZ webbrowser)runknownZ cmdtargetZserviceproviderrrrr vs  zIEButton.SetSitecCs|jSr) _reg_clsid_)rrrr GetClassIDszIEButton.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.rrrrrLsrcCsddl}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 yt d Yn 0t d dS)Nr4SOFTWARE\Microsoft\Internet Explorer\Extensions\%38s ButtonTextClsidExtensionCLSIDz&{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}Default VisibleZYesToolTipIconHotIconz'Couldn't set standard toolbar reg keys.zSet standard toolbar reg keys.) winregr- CreateKeyHKEY_LOCAL_MACHINE SetValueExREG_SZr1r2r3r4 WindowsErrorrZclassobjr=Z subKeyCLSIDZhKeyZsubKeyrrrregisters.  rDcCsddl}d|j}zt||j|}||d}||d||d||d||d||d||d ||j|Wntytd Yn 0td dS) Nrr5r6r7r8r9r:r;r<z(Couldn't delete Standard toolbar regkey.z Deleted Standard toolbar regkey.)r=r-r>r? DeleteValue DeleteKeyrBrrCrrr unregisters$        rGc@s(eZdZdZdZdZdZdZdZeZ dS)PyWin32InternetExplorerButtonz&{104B66A9-9E68-49D1-A3F5-94754BE9E0E6}zPyWin32.IEButtonz Test ButtonrrrN) rrrr-Z _reg_progid_Z _reg_desc_r1r2r3r4rrrrrHsrHcCs ttdSr)rDrHrrrrDllRegisterServersrIcCs ttdSr)rGrHrrrrDllUnregisterServersrJ__main__)Zfinalize_registerZfinalize_unregister)$rr)Zwin32apir*Zwin32com.server.registerrZwin32com.clientrrrrrZGetConsoleTitleerrorZwin32traceutilZarrayZwin32com.axcontrolrr+Z EnsureModuleZIObjectWithSite_methodsZIOleCommandTarget_methodsr0r(ZIID_IObjectWithSiter/r rrDrGrHrIrJrZserverZUseCommandLinerrrr s@   >