
    ~@;jF                         d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ e G d de                      ZdS )	    N)HWND)Dict	GeneratorListOptional)Logger)	singleton)TIMEOUTc                      e Zd Z ej        dddd          Z ej        dddd          Zi ddddddd	d
dddddddddddddddddddddd d!d"d#d$i d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFi dGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhi didjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddēddƓddȓddʓdd̓ddΓi ddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddddddi dddddddddddddddd ddddddddd	d
dddddddddddddddddd	Zd@dZde	fdZ
edeeef         fd             Zd!edee         fd"Zd!edee         fd#Zed$edefd%            Zefd!ed&edefd'Zedefd(            Zd$eddfd)Zed$eddfd*            Zed$eddfd+            Zed$ed,ed-eddfd.            Zed$ed/ed0eddfd1            Zed$edefd2            ZedAdyed{ed3ed4eddf
d5            Z edefd6            Z!ed7eddfd8            Z"ed@d9            Z#d@d:Z$d@d;Z%d@d<Z&d@d=Z'd7eddfd>Z(d7eddfd?Z)dS (B  
Win32UtilsNr   	backspace   tab	   clear   enter   shift   ctrl   alt   pause   	caps_lock   esc   spacebar    page_up!   	page_down"   end#   home$   
left_arrow%   up_arrow&   right_arrow'   
down_arrow(   select)   print*   execute+   print_screen,   ins-   del.   help/   00   11   22   33   44   55   66   77   88   99   aA   bB   cC   dD   eE   fF   gG   hH   iI   jJ   kK   lL   mM   nN   oO   pP   qQ   rR   sS   tT   uU   vV   wW   xX   yY   zZ   numpad_0`   numpad_1a   numpad_2b   numpad_3c   numpad_4d   numpad_5e   numpad_6f   numpad_7g   numpad_8h   numpad_9i   multiply_keyj   add_keyk   separator_keyl   subtract_keym   decimal_keyn   
divide_keyo   F1p   F2q   F3r   F4s   F5t   F6u   F7v   F8w   F9x   F10y   F11z   F12{   F13|   F14}   F15~   F16   F17   F18   F19   F20   F21   F22   F23   F24   num_lock   scroll_lock   
left_shift   zright_shift    left_control   right_control   	left_menu   
right_menu   browser_back   browser_forward   browser_refresh   browser_stop   browser_search   browser_favorites   browser_start_and_home   volume_mute   volume_Down   	volume_up   
next_track   previous_track   
stop_media   zplay/pause_media   
start_mail   select_media   start_application_1   start_application_2   attn_key   	crsel_key   	exsel_key   play_key   zoom_key   	clear_key   +   ,                              )	-./`;[\]'returnc                 .    t          d          | _        d S )Npyjab)r   logger)selfs    eC:\Users\Administrator\AppData\Local\Temp\2\pip-target-b0z114gj\lib\python\pyjab/common/win32utils.py__init__zWin32Utils.__init__   s    Woo    c              #   |  K   | j         | j        f}| j                            d           	 t	          j        |ddt          j                  }|t          j        k    r| j                            d           d S |t          j        dz   k    r| j                            d           n|t          j        t          |          z   k    rJ| j                            d           t          j
                    r| j                            d	           d S n:|t          j        k    r| j                            d
           nt          d          	 d V  | j                            d           t	          j        | j                    n8# | j                            d           t	          j        | j                    w xY w)Nzsetup message pumpupTr      z;first event listed, the StopEvent, was triggered, must exit   zsecond event listed was setzwindows message is waitingzreceived a wm_quit messagetimeoutz!unexpected win32wait return valuezteardown message pumpup)
stop_eventother_eventr0  debug
win32eventMsgWaitForMultipleObjectsQS_ALLEVENTSWAIT_OBJECT_0len	pythoncomPumpWaitingMessagesWAIT_TIMEOUTRuntimeErrorSetEvent)r1  	waitablesrcs      r2  setup_msg_pumpzWin32Utils.setup_msg_pump   s     OT%55	0111)	55'	 B Z---!!Q   z/!333 !!"?@@@@z/#i..@@@
 !!">???022 K%%&BCCCE z... !!),,,,"#FGGG
5!!";<<<#DO4444 !!";<<<#DO4444S)	5s   F 5F9c                  X    t                      fd} t          j        | d           S )Nc                     t          j        |           rSt          j        |           rAt          j        |           r/                    | t          j        |           i           d S d S d S d S N)win32guiIsWindowIsWindowEnabledIsWindowVisibleupdateGetWindowText)hwnd_	dict_hwnds     r2  get_all_hwndsz.Win32Utils.enum_windows.<locals>.get_all_hwnds   s    !$''G,T22G ,T22G
   $(>t(D(D!EFFFFFG G G G G Gr4  r   )dictrL  EnumWindows)rU  rT  s    @r2  enum_windowszWin32Utils.enum_windows   sE    FF		G 	G 	G 	G 	G 	]A...r4  titlec                 D    |                      |          x}r|d         S d S )Nr   )get_hwnds_by_title)r1  rY  possible_matchess      r2  get_hwnd_by_titlezWin32Utils.get_hwnd_by_title   s.    #66u=== 	'#A&&tr4  c                 l    |                                  }fd|                                D             S )Nc                 D    g | ]\  }}t          j         |          |S  )fnmatch).0rR  	win_titlerY  s      r2  
<listcomp>z1Win32Utils.get_hwnds_by_title.<locals>.<listcomp>   s0    cccyQZ\aAbAbccccr4  )rX  items)r1  rY  rT  s    ` r2  r[  zWin32Utils.get_hwnds_by_title   s8    %%''	ccccIOO,=,=ccccr4  rR  c                 *    t          j        |           S rK  )win32apirQ  rR  s    r2  get_title_by_hwndzWin32Utils.get_title_by_hwnd   s    %d+++r4  r8  c                 4   d}t          j                     }	 |                     |          x}r|S d| d}||k    r| j                            |           |}t          j                     }t	          ||z
            }||k    rt          d| d| d          )N Tzno hwnd found by win title =>'r,  zno hwnd found by title 'z' in 'z	' seconds)timer]  r0  r;  roundTimeoutError)	r1  rY  r8  
latest_logstartrR  	error_logcurrentelapseds	            r2  wait_hwnd_by_titlezWin32Utils.wait_hwnd_by_title   s    
		--e444t AAAAIY&&!!),,,&
ikkGGeO,,G'!!"NuNNGNNN  	r4  c                  (    t          j                    S rK  )rL  GetForegroundWindowr`  r4  r2  _get_foreground_windowz!Win32Utils._get_foreground_window  s    +---r4  c                     ||                                  k    rd S t          j                            d                              d           t          j        |           d S )NzWScript.Shell )rw  win32comclientDispatchSendKeysrL  SetForegroundWindow)r1  rR  s     r2  _set_window_foregroundz!Win32Utils._set_window_foreground  sY    4..0000F  11::3???$T*****r4  c                     t          j        | t          j                   t          j        | t          j                   d S rK  )rL  
ShowWindowwin32con
SW_RESTORESW_MAXIMIZErh  s    r2  _set_window_maximizezWin32Utils._set_window_maximize  4    D("5666D("677777r4  c                     t          j        | t          j                   t          j        | t          j                   d S rK  )rL  r  r  r  SW_MINIMIZErh  s    r2  _set_window_minimizezWin32Utils._set_window_minimize  r  r4  widthheightc                 j    t          j        |           \  }}}}t          j        | ||||d           d S NTrL  GetWindowRect
MoveWindow)rR  r  r  lefttoprS  s         r2  _set_window_sizezWin32Utils._set_window_size  s;    "066c1aD$UFDAAAAAr4  r  r  c                 v    t          j        |           \  }}}}t          j        | ||||z
  ||z
  d           d S r  r  )rR  r  r  rS  rightbottoms         r2  _set_window_positionzWin32Utils._set_window_position   sD    &4T::1eVD$TE\3<NNNNNr4  c                 <    t          j        |           \  }}}}||fS rK  )rL  r  )rR  r  r  rS  s       r2  _get_window_positionzWin32Utils._get_window_position%  s$    "066c1aSyr4  holdbuttonc                 6   |dk    rt           j        nt           j        }|dk    rt           j        nt           j        }t          j        | |f           t          j        || |dd           |rt          j	        |           t          j        || |dd           d S )Nr  r   )
r  MOUSEEVENTF_LEFTDOWNMOUSEEVENTF_RIGHTDOWNMOUSEEVENTF_LEFTUPMOUSEEVENTF_RIGHTUPrg  SetCursorPosmouse_eventrl  sleep)r   r   r  r  mouse_down_actmouse_up_acts         r2  _click_mousezWin32Utils._click_mouse*  s    :@F:J:J66PXPn6<6F6Fx22HLhq!f%%%^Q1a888 	Jt\1aA66666r4  c                      t          j                     t          j        t          j                  } t          j                     | S rK  )win32clipboardOpenClipboardGetClipboardDatar  CF_UNICODETEXTCloseClipboard)datas    r2  _get_clipboardzWin32Utils._get_clipboard4  s8    $&&&.x/FGG%'''r4  textc                     t          j                     t          j                     t          j        t          j        |            t          j                     d S rK  )r  r  EmptyClipboardSetClipboardDatar  r  r  r  s    r2  _set_clipboardzWin32Utils._set_clipboard;  sK    $&&&%''''(?FFF%'''''r4  c                  x    t          j                     t          j                     t          j                     d S rK  )r  r  r  r  r`  r4  r2  _empty_clipboardzWin32Utils._empty_clipboardC  s5    $&&&%'''%'''''r4  c                     |D ]P}t          j        | j        |         ddd           t          j        | j        |         dt          j        d           QdS )z
        one press, one release.

        accepts as many arguments as you want. e.g. press_key('left_arrow', 'a','b').
        r   Nrg  keybd_eventvirtual_key_coder  KEYEVENTF_KEYUPr1  keyskeys      r2  
_press_keyzWin32Utils._press_keyI  sj    
  	 	C !6s!;Q1EEE %c*Ax/G   	 	r4  c                 T    |D ]$}t          j        | j        |         ddd           %dS )z
        press and hold. Do NOT release.

        accepts as many arguments as you want.

        e.g. press_and_hold_key('left_arrow', 'a','b').
        r   N)rg  r  r  r  s      r2  _press_and_hold_keyzWin32Utils._press_and_hold_keyT  sC      	F 	FC !6s!;Q1EEEE	F 	Fr4  c                    |D ]8}t          j        | j        |         ddd           t          j        d           9|D ]B}t          j        | j        |         dt
          j        d           t          j        d           CdS )a\  
        press and hold passed in strings. Once held, release

        accepts as many arguments as you want.

        e.g. press_hold_release_key('left_arrow', 'a','b').


        this is useful for issuing shortcut command or shift commands.

        e.g. press_hold_release_key('ctrl', 'alt', 'del'), press_hold_release_key('shift','a')
        r   g?g?N)rg  r  r  rl  r  r  r  r  s      r2  _press_hold_release_keyz"Win32Utils._press_hold_release_key]  s      	 	C !6s!;Q1EEEJt 	 	C %c*Ax/G   JsOOOO		 	r4  c                 h    |D ].}t          j        | j        |         dt          j        d           /dS )z
        release depressed keys

        accepts as many arguments as you want.

        e.g. release_key('left_arrow', 'a','b').
        r   Nr  r  s      r2  _release_keyzWin32Utils._release_keyo  sK      	 	C %c*Ax/G   	 	r4  c                    |                                 s|                     |           dS i d| j        dgdd| j        ddgdd	| j        dd
gdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        ddgdd| j        dd gdd!| j        dd"gdd#| j        dd$gdd%| j        dd&gdi d'| j        dd(gdd)| j        dd*gdd+| j        dd,gdd-| j        dd.gdd/| j        dd0gdd1| j        dd2gdd3| j        dd4gdd5| j        dd6gdd7| j        dd8gdd9| j        dd:gdd;| j        dd<gdd=| j        dd>gdd?| j        dd@gddA| j        ddBgddC| j        ddDgddE| j        ddFgddG| j        ddHgd| j        ddIgd| j        ddJgd| j        ddKgd| j        ddLgd| j        ddMgd| j        ddNgd| j        ddOgd| j        ddPgd| j        ddQgd| j        ddRgd| j        ddSgd| j        ddTgd| j        ddUgd| j        ddVgddW}t	          |          D ]\}|                    |t          | j        |g                    }|                    dX          }|                    dY          } ||  ]dS )ZaN  Simulate keyboard type for specific text.

        Characters will be typed one by one.

        None-ASCII characters will directly paste to the field(check the security option before).

        NOT RECOMMEND use this func for the text field which support auto complete.

        Args:
            text (str): text need type
        r  Nry  r!   )funcr  ~r   r'  !rC   @rE   #rG   $rI   %rK   ^rM   &rO   *rQ   (rS   )rA   rS  r$  r  ={r)  }r+  |r*  :r(  "r,  <r  >r%  ?r&  ArU   BrW   CrY   Dr[   Er]   Fr_   Gra   Hrc   Ire   Jrg   Kri   Lrk   rm   ro   rq   rs   ru   rw   ry   r{   r}   r   r   r   r   r   )MNOPQRSTUVWXYZr  r  )isascii_paste_textr  r  strgetrV  )r1  r  sp_keytxtkey_mapr  r  s          r2  
_send_keyszWin32Utils._send_keysz  s    ||~~ 	$'''F1
$/J<@@1
$6s@STT1
 $6s@STT1
 $6s@STT	1

 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
 $6s@STT1
  $6s@STT!1
" $6t@TUU#1
 1
$ $6s@STT%1
& $6s@STT'1
( $6s@STT)1
* $6s@STT+1
, $6s@STT-1
. $6s@STT/1
0 $6s@STT11
2 $6s@STT31
4 $6s@STT51
6 $6s@STT71
8 $6s@STT91
: $6s@STT;1
< $6s@STT=1
> $6s@STT?1
@ $6s@STTA1
B $6s@STTC1
D $6s@STTE1
 1
F 6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STT6s@STTa1
 1
 1
d t99 	 	Cjjdse&L&L&LMMG;;v&&D;;v&&DD$KKK		 	r4  c                     |                      t          |                     |                     dd           |                                  dS )zSimulates typing text with paste from clipboard.

        RECOMMEND use this for text field directly typing or another launage typing support.

        Args:
            text (str): text need type
        r  r   r   N)r  r  r  r  )r1  r  s     r2  r  zWin32Utils._paste_text  sO     	T+++$$VS111r4  )r-  N)r   r  )*__name__
__module____qualname__r<  CreateEventr9  r:  r  r3  r   rH  staticmethodr   r   r  rX  r   r]  r   r[  ri  r
   intrt  rw  r  r  r  r  r  tupler  r  r  r  r  r  r  r  r  r  r  r`  r4  r2  r   r      sS       ''aD99J(*(q!T::KRTRtR 	R 		R
 	R 	R 	tR 	R 	TR 	tR 	DR 	4R 	TR 	tR 	R  	d!R" 	D#R R$ 	t%R& 	d'R( 	$)R* 	+R, 	4-R. 	/R0 	t1R2 	t3R4 	5R6 	T7R8 	T9R: 	T;R< 	T=R> 	T?R@ 	TARB 	TCRD 	TER R RF 	TGRH 	TIRJ 	TKRL 	TMRN 	TORP 	TQRR 	TSRT 	TURV 	TWRX 	TYRZ 	T[R\ 	T]R^ 	T_R` 	TaRb 	TcRd 	TeRf 	TgR R Rh 	TiRj 	TkRl 	TmRn 	ToRp 	TqRr 	TsRt 	TuRv 	TwRx 	TyRz 	T{R| 	T}R~ 	DR@ 	DARB 	DCRD 	DERF 	DGRH 	DIR R RJ 	DKRL 	DMRN 	DORP 	DQRR 	SRT 	4URV 	WRX 	YRZ 	t[R\ 	d]R^ 	d_R` 	daRb 	dcRd 	deRf 	dgRh 	diRj 	dkR R Rl 	dmRn 	doRp 	tqRr 	tsRt 	tuRv 	twRx 	tyRz 	t{R| 	t}R~ 	tR@ 	tARB 	tCRD 	tERF 	tGRH 	tIRJ 	tKRL 	tMR R RN 	DORP 	tQRR 	dSRT 	URV 	WRX 	YRZ 	T[R\ 	d]R^ 	_R` 	4aRb 	4cRd 	eRf 	$gRh 	TiRj 	!$kRl 	tmRn 	toR R Rp 	TqRr 	dsRt 	$uRv 	dwRx 	DyRz 	d{R| 	}R~ 	tR@ 	tARB 	DCRD 	TERF 	TGRH 	DIRJ 	DKRL 	TMRN 	TORP 	TQR RR cR R Rh& & & &,5	 ,5 ,5 ,5 ,5\ $tSy/    \s x~    
d dT
 d d d d , , , , , \, =D   c     " .D . . . \.+4 +D + + + + 84 8D 8 8 8 \8 84 8D 8 8 8 \8 Bt BC B B B B B \B O4 Os O O O O O \O 4 E    \ 7 7 7 73 7C 7T 7 7 7 \7 C    \ (S (T ( ( ( \( ( ( ( \(
	 	 	 	F F F F   $	 	 	 	Es Et E E E EN
  
  
  
  
  
  
  
 r4  r   )ra  rl  ctypes.wintypesr   typingr   r   r   r   rA  rg  r  win32com.clientrz  r  r<  rL  pyjab.common.loggerr   pyjab.common.singletonr	   pyjab.configr
   objectr   r`  r4  r2  <module>r     s                 2 2 2 2 2 2 2 2 2 2 2 2                    & & & & & & , , , , , ,             y  y  y  y  y  y  y  y  y  y r4  