oi+jdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZddlmZddlmZejddddd gZgd Zd d gZgd ZddgZgdZeezezezezezZeje jeje jgZ GddZ!Gdde!Z"GddZ#GddZ$GddZ%dZ&dZ'dZ(e)dkrDddl*Zej+j,-e%dej.vr e(dSe'dSddl/Z/dS) 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) axcontrol)Dispatchgencache)shellDBIMF_VARIABLEHEIGHTz&{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B} GetBandInfo)ShowDWCloseDWResizeBorderDW GetWindowContextSensitiveHelp) UIActivateIO HasFocusIOTranslateAcceleratorIOSetSiteGetSite) GetClassIDIsDirtyLoadSave GetSizeMaxc eZdZdZdZdZdS) WIN32STRUCTc d}|jD]!\}}}d|j|<|dkr|dz }||z }"|D]\}}||j|<dS)Nzpi)_struct_items___dict__items)selfkwfull_fmtnamefmtdefaultvals HC:\PYTHON\Scheduler\python\Lib\site-packages\win32com/demos/ietoolbar.py__init__zWIN32STRUCT.__init__@s"&"5  D#w"&DM$ czzD C & &ID#"%DM$   & &ct|ds||jvrt|||j|<dS)N_) startswithr!AttributeError)r#attrr)s r* __setattr__zWIN32STRUCT.__setattr__KsBs## 'DM(A(A && &! dr,c6g|_d}g}|jD]\}}}|j|}|dkrd}|+|d|dnt jd|dz}||d|t ||j|n||}||||z }tj|ft|zS)NrrPirc) _buffsr r!appendarray buffer_infolenstructpacktuple)r#r%valsr&r'r(r)str_bufs r*toparamzWIN32STRUCT.toparamPs "&"5   D#w-%Cczz;KKNNNKKNNNN#k#sTz::GKK 3 3 5 5a 8999KKC)))K&&w////;!C C   OHH{XK%++566r,N)__name__ __module__ __qualname__r+r2rAr,r*rr?sA & & &""" 77777r,rceZdZgdZdS)TBBUTTON))iBitmapir) idCommandrIr)fsStateBr)fsStylerLr) bReservedHr)dwDataIr)iStringrNN)rBrCrDr rEr,r*rGrGhsNNNr,rGceZdZdZdZdZdS)Stubzp this class serves as a method stub, outputting debug info whenever the object is being called. c||_dSN)r&)r#r&s r*r+z Stub.__init__{s  r,c2td|j|dS)NzSTUB: )printr&)r#argss r*__call__z Stub.__call__~s h 4(((((r,N)rBrCrD__doc__r+rZrEr,r*rTrTts< )))))r,rTc*eZdZdZdZdZdZdZdS) IEToolbarCtrlzQ a tiny wrapper for our winapi-based toolbar control implementation. c tjtjztjztjzt jzt jzt jzt j zt j zt j zt j z}tjdd|dddd|dtjd |_tj|jt jdddS)NToolbarWindow32rd)win32conWS_CHILD WS_VISIBLEWS_CLIPSIBLINGSWS_CLIPCHILDRENcommctrl TBSTYLE_LIST TBSTYLE_FLATTBSTYLE_TRANSPARENTCCS_TOP CCS_NODIVIDER CCS_NORESIZECCS_NOPARENTALIGNwin32gui CreateWindow dllhandlehwnd SendMessageTB_BUTTONSTRUCTSIZE)r# hwndparentstyless r*r+zIEToolbarCtrl.__init__s  ! "& '& '#  $ #  $ *  + $ %# $( ) )              TY(Db!LLLLLr,c:tj|j|dSrV)ro ShowWindowrr)r#modes r*rxzIEToolbarCtrl.ShowWindowsDIt,,,,,r,cd}|D]}||z }tj|jtjt ||S)Nr)rArorsrrrg TB_ADDBUTTONSr;)r#buttons tbbuttonsbuttons r* AddButtonszIEToolbarCtrl.AddButtonssU  * *F )) )II# Ix-s7||Y   r,c|jSrV)rrr#s r* GetSafeHwndzIEToolbarCtrl.GetSafeHwnds yr,N)rBrCrDr[r+rxrrrEr,r*r]r]s] MMM:---   r,r]ceZdZdZeZeZej Z dZ dZ dZ dZdZdZdZd Zd Zd Zd Zd ZdZdZdZdZdS) IEToolbarz% The actual COM server class z&{F21202A2-959A-4149-B1C3-68B9013F3335}zPyWin32.IEToolbarPyWin32 IE Toolbarc|jD]B}t||s0td|zt||t |CdS)Nzproviding default stub for %s)_public_methods_hasattrrXsetattrrT)r#methods r*r+zIEToolbar.__init__s]+ 4 4F4(( 45>???fd6ll333 4 4r,c4|jSrV)toolbarrrs r*rzIEToolbar.GetWindows|'')))r,cdSrVrE)r#streams r*rzIEToolbar.Load r,cdSrVrE)r#pStream fClearDirtys r*rzIEToolbar.Saverr,c |`dSrV)r)r# dwReserveds r*r zIEToolbar.CloseDWs LLLr,c|r&|jtjdS|jtjdSrV)rrxrbSW_SHOWSW_HIDE)r#bShows r*r zIEToolbar.ShowDWsH  6 L # #H$4 5 5 5 5 5 L # #H$4 5 5 5 5 5r,cXtd|jddS)Nzfirst!z#https://github.com/mhammond/pywin32)rX webbrowser Navigate2rs r*on_first_buttonzIEToolbar.on_first_buttons* h !!"GHHHHHr,c$tddS)Nzsecond!rXrs r*on_second_buttonzIEToolbar.on_second_buttons ir,c$tddS)Nzthird!rrs r*on_third_buttonzIEToolbar.on_third_buttons hr,c|\}}}}}}||jkr|j|dSdSrV)rr _command_map)r#rYrrmessagewparamlparamtimepoints r*toolbar_command_handlerz!IEToolbar.toolbar_command_handlersQ592gvvtU T\--// / / %D f % ' ' ' ' ' 0 /r,cv|r|tj}|}|tj}|tj}t|dtj |_ t||_ d|j fd|jfd|jfg}i|_t#j|}t't)|D]}t+} ||\} } d|z} d| _| | _t0j| _t0j| _| | _| |jd|z<|j | ||j tBj"dSd|_ dS)Nz&{0002DF05-0000-0000-C000-000000000046}zVisit PyWin32 HomepagezAnother ButtonzYet Another ButtoniDD)#QueryInterface pythoncomIID_IOleWindowrrIID_IOleCommandTargetIID_IServiceProviderr QueryService IID_IDispatchrr]rrrrrwin32uiCreateWindowFromHandleranger;rGrHrJrgTBSTATE_ENABLEDrKTBSTYLE_BUTTONrMrRr HookMessagerrb WM_COMMAND) r#unknown olewindowru cmdtargetserviceproviderr|windowrIr~r&funcids r*rzIEToolbar.SetSites - #..y/GHHI",,..J ..y/NOOI'66y7UVVO&,,UDO)44DL*4+?@!4#89%t';<G !#D 3J??F3w<<(( V V!$QZ daZ!##% !)!9!)!8!%04!&1*- ''///""4#?ATUUUU V V#DOOOr,c|jSrV) _reg_clsid_rs r*rzIEToolbar.GetClassIDs r,c:d}d}d}d}d}t} d} |||||| | fS)N)r)ir)rrrrr) r#dwBandId dwViewModedwMask ptMinSize ptMaxSize ptIntegralptActualwszTitle dwModeFlagscrBkgnds r*r zIEToolbar.GetBandInfosD   '*          r,N)rBrCrDr[_ietoolbar_com_interfaces__com_interfaces__ietoolbar_methods_rrCLSCTX_INPROC_SERVER _reg_clsctx_r _reg_progid_ _reg_desc_r+rrrr r rrrrrrr rEr,r*rrs 2*1L:K&L%J444***      666 III((( .#.#.#`        r,rct}dSrV)r)bInstallcmdLinecomclasss r* DllInstallr2s HHHr,cFt} tdtjtjd}tj||jdtjd}td||jfzdS#t$rtd||jfzYdSwxYw)NzTrying to register Toolbar. ,SOFTWARE\Microsoft\Internet Explorer\Toolbarrz'Set registry value. hkey: %d CLSID: %s z0Couldn't set registry value. hkey: %d CLSID: %s ) rrXwinreg CreateKeyHKEY_LOCAL_MACHINE SetValueExr REG_BINARYOSError)rhkeysubKeys r*DllRegisterServerr7sH  -...  %'X  " (&6+rs  ((((((........ 888888>1aHHH#O@@@!#9:OOO$i0PPP     !   # &7&7&7&7&7&7&7&7R     {    ) ) ) ) ) ) ) )////////dz z z z z z z z |    2///( z#### O++I666!!r,