
    .e[                     l    d Z ddlZddlmZ ddlmZ  ee          ZdddZdd
Z	ddZ
ddZddZdS )a  
Utilities for Windows Registry manipulation

Notes:

winreg.SetValue -> sets _keys_ with default ("") values
winreg.SetValueEx -> sets values with named contents

This is important when the argument has backslashes.
SetValue will process the backslashes into a path of keys
SetValueEx will create a value with name "path\with\keys"


Mnemonic: SetValueEx for "excalars" (scalars, named values)
    N)	getLogger   
logged_runTcheckc                 .    t          dg|dd          S )Nzreg.exez/fTr   r   )r   argss     Elib/python3.11/site-packages/menuinst/platforms/win_utils/registry.py_reg_exer      s"    y.4..d;;;;    userc                    t          j        |dk    rt           j        nt           j        d          5 }t          j        t          j        ||  d          |dt           j        d           t                              d|            |  d| d}t          j	        ||t           j        |           t                              d	|           | d
}t          j	        ||t           j        |           t                              d|           |rRt          j
        ||          }t          j        |ddt           j        |           t                              d|           ddd           dS # 1 swxY w Y   dS )ad  
    We want to achieve this. Entries ending in / denote keys; no trailing / means named value.
    If the item has a value attached to it, it's written after the : symbol.

    HKEY_*/ # current user or local machine
      Software/
        Classes/
          .<extension>/
            OpenWithProgids/
              <extension-handler>
          ...
          <extension-handler>/: "a description of the file being handled"
            DefaultIcon: "path to the app icon"
            shell/
              open/
                command/: "the command to be executed when opening a file with this extension"
    systemzSoftware\Classes\OpenWithProgidsr    z)Created registry entry for extension '%s' z handlerz'Created registry entry for handler '%s'z\shell\open\commandz'Created registry entry for command '%s'DefaultIconz$Created registry entry for icon '%s'N)winreg	OpenKeyExHKEY_LOCAL_MACHINEHKEY_CURRENT_USER
SetValueEx	CreateKeyREG_SZlogdebugSetValueOpenKey)	extension
identifiercommandiconmodekeyhandler_descsubkeys           r   register_file_extensionr(      s   $ 
	8 	!!%	
 
 D
 
Si"A"A"ABBM	
 	
 	
 			=yIII $::j:::ZEEE		;ZHHH  444VV]G<<<		;WEEE 	D^C44FfmQtLLLII<dCCC=D D D D D D D D D D D D D D D D D Ds   D-E,,E03E0c                    |dk    rt           j        dfnt           j        df\  }}t          d| d|            	 t          j        |d|  ddt           j                  5 }	 t          j        ||           t          j        ||           n,# t          $ r t          
                    d	||            Y nw xY wd d d            d S # 1 swxY w Y   d S # t          $ r#}t                              d
| |            d }~ww xY w)Nr   HKLMHKCUdeletez\Software\Classes\Software\Classes\r   r   z2Handler '%s' is not associated with extension '%s'z%Could not check key '%s' for deletionexc_info)r   r   r   r   r   KEY_ALL_ACCESSQueryValueExDeleteValueFileNotFoundErrorr   r   	Exception	exception)r    r!   r$   rootroot_strr%   excs          r   unregister_file_extensionr9   R   s    8 
	"F++&/ D(
 X8CCzCCDDD^ByBBBAvG\
 
 
	44#C444 "3
3333 %   		H*V_    
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4    =ySVWWWs_   %C !C#B8C&B74C6B77C:C CC CC 
DC<<Dc           
      P   |dk    r t          j        t           j        |           }n"t          j        t           j        d|            }|5  t          j        |ddt           j        d|                                             t          j        |ddt           j        d           t          j        |dt           j        |           |r"t          j        |ddt           j        |           |r"t          j        |d	dt           j        |           d d d            d S # 1 swxY w Y   d S )
Nr   r-   r   r   zURL:zURL Protocolzshell\open\commandr   	_menuinst)r   r   HKEY_CLASSES_ROOTr   r   r   titler   )protocolr"   r!   r#   r$   r%   s         r   register_url_protocolr?   k   sl   xv7BBv79Xh9X9XYY	 
N 
N#r1fm5NHNN<L<L5N5NOOO#~q&-DDD 	2FM7KKK 	Jc=!V]DIII 	Nc;6=*MMM
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
N 
Ns   CDD"Dc                    |dk    rt           j        | f}d|  }nt           j        d|  f}d|  }	 t          j        | 5 }t          j        |d          \  }}|d u p||k    }d d d            n# 1 swxY w Y   n5# t
          $ r(}	t                              d| |	           Y d }	~	d S d }	~	ww xY w|rt          d|d	
           d S d S )Nr   zHKCR\r-   zHKCU\Software\Classes\r;   z#Could not check key %s for deletionr.   r,   Fr   )	r   r<   r   r   r1   OSErrorr   r5   r   )
r>   r!   r$   	key_tuplekey_strr%   value_r,   r8   s
             r   unregister_url_protocolrF   }   sR   x,h6	%8%%,.M8.M.MM	6H66^Y' 	?3*3<<HE14'>5J+>F	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?    ;XPSTTT  17%0000001 1s;   A;  #A/#A; /A33A; 6A37A; ;
B-B((B-)Nr   )r   )NNr   )__doc__r   loggingr   utilsr   __name__r   r   r(   r9   r?   rF    r   r   <module>rL      s                 i  < < < < <0D 0D 0D 0Dl   2N N N N$1 1 1 1 1 1r   