
    	he                     *   S r SSKrSSKrSSKrSSKrSSKrSSKrSr\R                  4S jr	\R                  4S jr
\R                  4S jr\R                  4S jr\R                  4S jrS	 rS
 rS rSSSSSSS/ 0 SSSS4S jrSS jrSS jrS rSS jrS rS rS rS rS rS r\R8                  (       d"   \R:                  " \R                  S\-  5        gg! \R<                   a"     \" 5          g! \R<                   a      gf = ff = f)aB  Utilities for registering objects.

This module contains utility functions to register Python objects as
valid COM Servers.  The RegisterServer function provides all information
necessary to allow the COM framework to respond to a request for a COM object,
construct the necessary Python object, and dispatch COM events.

    Nz&{B3EF80D0-68E2-11D0-A689-00C04FD658FF}c                    [         R                  " X 5      n UR                  5        H,  u  pE[         R                  " X4S [        R
                  U5        M.     [         R                  " U5        g ! [         R                  " U5        f = fN)win32apiRegCreateKeyitemsRegSetValueExwin32conREG_SZRegCloseKey)keyName	valueDictbasehkeykeyvalues         kC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\win32com/server/register.py_set_subkeysr      sa      /D##//+JC""4dHOOUK , 	T"T"s   A A/ /Bc                 P    [         R                  " X [        R                  U5        g)z#Set a string value in the registry.N)r   RegSetValuer	   r
   )pathr   r   s      r   _set_stringr      s     X__e<    c                 d     [         R                  " X5      $ ! [         R                   a     gf = f)z%Get a string value from the registry.N)r   RegQueryValueerror)r   r   s     r   _get_stringr   $   s.    %%d11>> s    //c                      [         R                  " X5        g! [         R                   aD  nUR                  u  p4nU[        R
                  :w  a  [         R                  " X4U5      e SnAgSnAff = f)z"Remove a string from the registry.N)r   RegDeleteKeyr   argswinerrorERROR_FILE_NOT_FOUND)r   r   xxx_todo_changeme1codefnmsgs         r   _remove_keyr&   -   s\    0d)>> 0,1138000..3// 10s    A1:A,,A1c                 r    [         R                  " X5      n   [         R                  " US5      n[        U S-   U-   U5        M,  ! [         R                   aD  nUR                  u  pVnU[
        R                  :w  a  [         R                  " XVU5      e SnAOSnAff = f[        X5        [         R                  " U5        g! [         R                  " U5        f = f! [         R                   aD  nUR                  u  pVnU[
        R                  :w  a  [         R                  " XVU5      e SnAgSnAff = f)zbRecursively delete registry keys.

This is needed since you can't blast a key when subkeys exist.
r   N\)r   
RegOpenKey
RegEnumKeyr   r   r    ERROR_NO_MORE_ITEMSrecurse_delete_keyr&   r   r!   )	r   r   h
subkeynamexxx_todo_changemer#   r$   r%   xxx_todo_changeme2s	            r   r,   r,   8   s   
$+	$!)!4!4Q!:J #4$;#;TB   ~~ &7&<&<OTsx;;;&nnTs;;	 #  #H  #- >> 0,1138000..3// 10sJ   C C A C B:BC BC CD62:D11D6c                      [         R                  " [         R                  S [         R                  [         R                  5      $ r   )	pythoncomCoCreateInstanceCLSID_StdComponentCategoriesMgrCLSCTX_INPROC_SERVERIID_ICatRegister r   r   _cat_registrarr8   X   s3    %%11&&""	 r   c                 6   [         R                  S:w  a  [         R                  $ [        R                  R                  [        R                  R                  [        R                  5      5      S   R                  S5      (       a  SnOSn[        R                  R                  [        R                  R                  [         R                  5      S   U5      n[        R                  R                  U5      (       d.  [        R                  R                  [         R                  U5      n[        R                  R                  U5      (       dt  S[         R                  ;   a1  [        R                  R                  [         R                  SSU5      nO/[        R                  R                  [         R                  SU5      n[        R                  R                  U5      (       dX   S	[         R                  -  n[         R"                  " [$        R&                  U5      n[        R                  R                  XA5      n[        R                  R                  U5      (       d  U (       a  [-        S
U-  5      eg U$ ! [(        [         R*                  4 a     NXf = f)Nwin32r   _dzpythonw_d.exezpythonw.exez64 bitPCbuildamd64z)SOFTWARE\Python\PythonCore\%s\InstallPathzCan not locate the program '%s')sysplatform
executableosr   splitextbasenamer2   __file__endswithjoinsplitexistsprefixversionwinverr   r   r	   HKEY_LOCAL_MACHINEAttributeErrorr   RuntimeError)mustfindexeBaseNameexeNamer   r   s        r   _find_localserver_exerR   a   s   
||w~~	ww((););<=a@II$OO%#ggll277==8;[IG77>>'""'',,szz;777>>'""s{{"ggll3::y';OGggll3::y+FG77>>'""	ACJJNC))(*E*EsKDggll45G 77>>'""@;NOON / 		s   (AI; ;JJc                     SS K n [        [        U R                  R                  5      5      nSn[
        R                  R                  XS-   5      n [
        R                  " U5        U$ ! [         a\     Sn[
        R                  R                  XU-   5      n [
        R                  " U5         U$ ! [         a    [        SU-  5      ef = ff = f)Nr   localserverz.pyz.pycz5Can not locate the Python module 'win32com.server.%s')win32com.servernextiterserver__path__rA   r   rF   statOSErrorrN   )win32comr   baseNamepyfileexts        r   _find_localserver_moduler`      s    X__--./DHWW\\$5 01F
 M  C dsN3	GGFO
 M	  	G(R 	s   A* */CB33CCbothc                 "
   U(       d  U(       d  [        S5      eS[        U 5      -  n[        X5        [        SU -  U5        U(       d!  [        R                  [        R
                  -  n[        R                  (       aW  [        R                  (       d   S5       e[        R                  S:X  a  U[        R                  -  nOU[        R
                  -  nU[        R                  -  (       Ga  [        R                  (       aF  [        [        S5      (       a&  [        R                  " [        R                  5      nGO)[        S5      e[        R                  R                  [        R                   5      n[        R                  R#                  [        R                  R%                  [        R                   5      5      S   R'                  S	5      (       a  S	OS
n[        R                  R)                  US[        R*                  R,                  [        R*                  R.                  U4-  5      n[        R                  R1                  U5      (       a  UO[        R                   n[3        US-   UUS.5        O[5        US-   5        U[        R
                  -  (       a  [        R                  (       a*  [        R6                  " [        R8                  5      nU S3nO5[;        S5      n[        R6                  " U5      n[=        5       nU SU SU  3n[        US-   U5        O[5        US-   5        U(       a  [        US-   U5        O[5        US-   5        U(       a  [        US-   U5        O[5        US-   5        U(       a  [        US-   U5        O[5        US-   5        U(       a  [        US-   U5        O[5        US-   5        U(       a  [        US-   U5        O[5        US-   5        U
c  [        R                  S:H  n
U
(       a
  U[>        /-   nU(       a  [A        5       nURC                  X5        U	(       a,  U	RE                  5        H  u  nn[        US-   U-   U5        M     U(       a  U(       a  [        US-   U5        O[        US-   U5        U(       a  [        X25        [        US-   [        U 5      5        U(       aI  [        US-   U5        [        US-   U5        U(       a  [        XB5        [        US-   [        U 5      5        ggg)a   Registers a Python object as a COM Server.  This enters almost all necessary
information in the system registry, allowing COM to use the object.

clsid -- The (unique) CLSID of the server.
pythonInstString -- A string holding the instance name that will be created
              whenever COM requests a new object.
desc -- The description of the COM object.
progID -- The user name of this object (eg, Word.Document)
verProgId -- The user name of this version's implementation (eg Word.6.Document)
defIcon -- The default icon for the object.
threadingModel -- The threading model this object supports.
policy -- The policy to use when creating this object.
catids -- A list of category ID's this object belongs in.
other -- A dictionary of extra items to be registered.
addPyComCat -- A flag indicating if the object should be added to the list
         of Python servers installed on the machine.  If None (the default)
         then it will be registered when running from python source, but
         not registered if running in a frozen environment.
dispatcher -- The dispatcher to use when creating this object.
clsctx -- One of the CLSCTX_* constants.
addnPath -- An additional path the COM framework will add to sys.path
            before attempting to create the object.
zYYou must specify either the Python Class or Python Policy which implement the COM object.CLSID\%sAppID\%szHpythoncom is frozen, but sys.frozen is not set - don't know the context!dllfrozendllhandlez?We appear to have a frozen DLL, but I don't know the DLL to user   r;    zpythoncomloader%d%d%s.dllz\InprocServer32)NThreadingModelz
 /Automate   z "z" z\LocalServer32z
\PythonCOMz\PythonCOMPolicyz\PythonCOMDispatcherz\DefaultIconz\PythonCOMPathNr(   z\ProgIDz\CLSIDz\CurVerz\VersionIndependentProgID)#	TypeErrorstrr   r2   r5   CLSCTX_LOCAL_SERVERfrozenr>   hasattrr   GetModuleFileNamerf   rN   rA   r   dirnamerD   rB   rC   rE   rF   version_infomajorminorisfiler   r&   GetShortPathNamer@   rR   r`   CATID_PythonCOMServerr8   RegisterClassImplCategoriesr   )clsidpythonInstStringdescprogID	verProgIDdefIconthreadingModelpolicycatidsotheraddPyComCat
dispatcherclsctxaddnPathkeyNameRootdllNamepythoncom_dirsuffix
loadernamerQ   commandr^   regCatr   r   s                            r   RegisterServerr      s.   T Fg
 	
 E
*K" e#V, //)2O2OO zz 	
V	
z ::i444Fi333F	....
 s-.."44S5H5HI"U  GGOOI,>,>?M 77##BGG$4$4Y5G5G$HI!LUU     +##))3+;+;+A+A6JKJ
 %'GGNN:$>$>jIDVDVG,,"0	
 	K"445	--- //?G 	,G ,A.G//8G-/F 	F82eW5GK"33W=K"334K-/1ABK-/0K"55v>K"556K"99:FK"99:K/17;K/12K"33X>K"334&&!+011 !**59 ++-JCd*S0%8 ( j0)<j0&9 %FY&E
3 +Y7 &BBFK I,	I-s5z:  r   c                 n   S[        U 5      -  [        R                  4/nU(       a!  UR                  U[        R                  45        U(       a!  UR                  U[        R                  45        UR                  S[        U 5      -  [        R                  45        U(       a  UR	                  U5        U$ )zGiven a server, return a list of of ("key", root), which are keys recursively
and uncondtionally deleted at unregister or uninstall time.
rc   rd   )rk   r	   HKEY_CLASSES_ROOTappendextend)rx   r{   r|   
customKeysrets        r   GetUnregisterServerKeysr   Y  s    
 #e*$h&@&@A
BC

Ix99:; 

FH6678JJc%j((*D*DEF

:Jr   c                 :    [        XX#5       H  n[        U6   M     g)z Unregisters a Python COM server.N)r   r,   )rx   r{   r|   r   r   s        r   UnregisterServerr   p  s     (yMD! Nr   c                 (    SU  SU 3n[        U5      $ )zCGiven a CLSID for a server and option name, return the option valuezCLSID\r(   )r   )rx   
optionNamer   s      r   GetRegisteredServerOptionr     s    E7"ZL1K{##r   c                      [        X5      $ ! [         a     Of = f U R                  nO! [         a    Us $ f = fU H  n[        XAS 5      nUc  M  Us  $    U$ r   )getattrrM   	__bases___get)obattrdefaultbasesr   vals         r   r   r     so    r     4t$?J  Ns   
 
+ ::c                     SU;   =(       a    US   nSU;   =(       a    US   nU  GHm  nUR                   n[        US5      n[        USU5      n[        US5      n[        US5      n	[        US5      n
[        USS	5      n[        US
/ 5      n[        US0 5      n[        US5      n[        US5      n[        US5      n[        US[        R                  S:g  5      (       + nS nU(       a  [        US5      nUc  SnSnSUS'   O[        US5      nSnSUS'   Uc  UR                  nUS:X  aN   [
        R                  R                  [        R                  " [        R                  S   5      S   S   5      S   nUS-   UR                  -   n[        R                  (       dR  [
        R                  R!                  [        R                  S   5      S   nU(       d  Sn[        R"                  " U5      n[%        UUUUU	U
UUUUUUUU5        U(       d  ['        SU=(       d    UU5        U(       d  GM  [
        R                  R)                  U5      n[        R*                  " U5      n[        R,                  " UU5        U(       a  GMa  ['        SU5        GMp     UR/                  S5      nU(       a  U" 5         g g ! [        [        R                  4 a    [        S5      ef = f) Nquietdebug_reg_progid_
_reg_desc__reg_class_spec__reg_verprogid_
_reg_icon__reg_threading_ra   _reg_catids__reg_options__reg_policy_spec__reg_clsctx__reg_typelib_filename__reg_disable_pycomcat_r   _reg_debug_dispatcher_spec_z1win32com.server.dispatcher.DefaultDebugDispatcherz(for debugging)1	Debugging_reg_dispatcher_spec_rg   0__main__   z[Can't locate the script hosting the COM object - please set _reg_class_spec_ in your object.zRegistered:zRegistered type library:finalize_register)_reg_clsid_r   r2   rm   
__module__rA   r   rB   r   	FindFilesr>   argv
IndexErrorr   rj   __name__rG   GetFullPathNamer   printabspathLoadTypeLibRegisterTypeLibget)classesflagsr   	debuggingclsrx   r{   rz   specr|   r}   r~   r   options
policySpecr   tlb_filenamer   r   dispatcherSpecdebuggingDesc
moduleName	scriptDirtypelibextras                            r   RegisterClassesr     s   u/wE5 3U7^Ic>*Cv.C+,/0	sL)c#4f=c>2.sOR0#23
c>*C!9:s$<i>N>NRS>STT "#'DEN%!T-M#&GK !#'>?NM#&GK <JZ'	!#!1!1 **388A;7:1=""J #cll2D##GGMM#((1+6q9	  #I#33I>	
  -4?<77??<8L++L9G%%g|<50,?[ \ II)*E Q #HNN3 #u s   +AJ88&Kc                  h   SU;   =(       a    US   nU  H  nUR                   n[        US5      n[        US5      n[        US5      n[        US5      S Ln[        XEXg5        U(       d  [        SU=(       d    [	        U5      5        U(       d  M{  [        US5      n	U	c  [        S5        M  [        US	S
5      u  p[        USS5      n [
        R                  " XX5        U(       d  [        S5        M  M     UR                  S5      nU(       a  U" 5         g g ! [
        R                   a     GM  f = f)Nr   r   r   _reg_remove_keys_r   zUnregistered:_typelib_guid_z5Have typelib filename, but no GUID - can't unregister_typelib_version_)ri   r   _typelib_lcid_r   zUnregistered type libraryfinalize_unregister)	r   r   r   r   rk   r2   UnRegisterTypeLib	com_errorr   )r   r   r   r   rx   r{   r|   r   unregister_typelibtlb_guidrr   rs   lcidr   s                 r   UnregisterClassesr     s!   u/wEc>*/0	#23
!#'?@L	>/6#7SZ8C!12HMN#C)<fEC!115//M 9: !) 2 II+,E 	 !** s   )DD10D1c            	          / nU  HN  nUR                   n[        US5      n[        US5      n[        US5      nUR                  [        XEXg5      5        MP     U$ )Nr   r   r   )r   r   r   r   )r   r   r   r   rx   r{   r|   r   s           r   UnregisterInfoClassesr     s[    
Cc>*/0	#23


*5)PQ  Jr   c           
      8   SS K nSS KnSS KnSS KnSSKJn  SSKJn  U S   (       d  [        S5        SR                  [        R                   Vs/ s H  nSU-   S-   PM     sn5      nU S   (       d  US	-  n U R                  S
UR                  5       5      n	UR                  S5      n
U
S-   nU
S-   n[         R"                  R%                  [        R&                  5      S   R)                  5       nS nUS:X  a/  [         R"                  R                  [        R*                  S5      nO4US:X  a.  [         R"                  R                  [        R*                  S5      nU(       a$  [         R"                  R-                  U5      (       d  [        R&                  n [/        US5      n [         R0                  " 5       n[        SUS9  [        S[         R2                  R                  SS5      -  US9  [        [         R"                  R5                  U5      S   US9  [        S[         R0                  " 5       -  US9  [        SR7                  [8        R:                  " U5      X5      US9  UR=                  5         [         R2                  R                  SS5      nU" U	UR>                  SUSU-  [@        RB                  S9nUS    nURE                  UURF                  5        URI                  U5      n[/        U5      n URK                  5       nUR=                  5         U(       a  [        S!U-  5        [        USS"9  X4 H  n [         RL                  " U5        M     g s  snf ! UR                   a    Sn	 GNf = f! UR=                  5         f = f! UR=                  5         f = f! [N         a  n[        S#U S$U 35         S nAM  S nAff = f! X4 HC  n [         RL                  " U5        M  ! [N         a  n[        S#U S$U 35         S nAM=  S nAff = f   f = f)%Nr   )shellcon)ShellExecuteExr   z$Requesting elevation and retrying... "
unattendedz --unattendedhwndpycomserverregz.outz.batri   zpythonwin.exez
python.exezpythonwin_d.exezpython_d.exewz	@echo off)filezset PYTHONPATH=%s
PYTHONPATHrg   zcd "%s"z{} {} > "{}" 2>&1COMSPECzcmd.exerunasz/C "%s")r   fMasklpVerblpFilelpParametersnShowhProcessz*Error: registration failed (exit code %s).)endzFailed to remove tempfile 'z': )(tempfilewin32console
win32eventwin32processwin32com.shellr   win32com.shell.shellr   r   rF   r>   r   r   GetConsoleWindowr   mktemprA   r   rG   r@   lowerrI   rH   opengetcwdenviron
splitdriveformatr   ru   closeSEE_MASK_NOCLOSEPROCESSr	   SW_SHOWWaitForSingleObjectINFINITEGetExitCodeProcessreadunlinkr[   )r   r   r   r   r   r   r   a
new_paramsr   tempbaseoutfilebatfilecurrent_exe
exe_to_runbatfcwdr@   rchproc	exit_codeoutfoutputfexcs                            r   ReExecuteElevatedr    sf   '3>45#((;(Q37S=(;<J o%
yy!>!>!@A /0HGG ''--/288:KJo%WW\\#**l;
	)	)WW\\#**n=
RWW^^J77^^
0AGS!	))+C+D) %

|R(HHtT"''$$S)!,48)biik)5#**--j9: 	 JJLZZ^^Iy9
22"W,""
 :&&uj.A.AB 33E:	G}	YY[FJJL>JK 	f##AA		! $U <  L JJL" JJL  A3A3c#?@@A #AA		! A3A3c#?@@A $s   M8 M! O %CM: 'BO ;N /O N$!M76M7:NO N!!O $
O
.OO
PO-+P-
P	7P	PP	Pc                     S[         R                  ;   nS[         R                  ;   nUR                  SS5      =(       d    S[         R                  ;   US'   UR                  SS5      =(       d    S[         R                  ;   US'   UR                  SS5      =(       d    S	[         R                  ;   US'   U(       a  [        U 0 UD6$  U(       a  [	        U 0 UD6  g [        U 0 UD6  g ! [        R                   aZ  nUS   (       d:  UR                  [        R                  :w  d  [         R                  " 5       S   S
:  a  e [        U5         S nAg S nAff = f)Nz--unregister_infoz--unregisterr   r   z--quietr   z--debugr   z--unattended   )r>   r   r   r   r   r   r   r   r    ERROR_ACCESS_DENIEDgetwindowsversionr  )r   r   unregisterInfo
unregisterr  s        r   UseCommandLiner%  {  s   (CHH4N388+JYYw*Ci388.CE'NYYw*Ci388.CE'N))L!4R#((8RE,$g777!w0%0W..>> 
!
 ,||x;;;$$&q)A-%  
!s   C& C& &E:AEEc                  J    [        5       n U R                  [        SS4/5        g)z2Register the Python COM Server component category.i	  zPython COM ServerN)r8   RegisterCategoriesrv   )r   s    r   RegisterPyComCategoryr(    s$    F
 5v?RSTUr   zComponent Categories\%s)NNNr   )__doc__rA   r>   r2   r   r	   r    rv   r   r   r   r   r&   r,   r8   rR   r`   r   r   r   r   r   r   r   r   r  r%  r(  rm   r   r   r7   r   r   <module>r*     sY   
 
    @  +3*D*D # #+"<"< = $55  $55 0 #+"<"< $@B4 	
|;~." $$SlH	YAx!4V 	&&&)>>	
  >> 	!# 		s*   > C   D1C::D
DDD