§
    å‡¬jK  ã            
       ó  — d 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  e	ej
        d¦  «        rej
                             d¬¦  «         ej                             dej                             ej                             ej                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ dd	lmZmZ dd
lmZ ej        j        Zej        j        ZdZd„ Z G d„ d¦  «        Zd„ Z e!dk    r e ¦   «          dS dS )u�  
AutoPOE2 - Cá»­a Sá»• Xem Trá»±c Tiáº¿p MÃ n HÃ¬nh Game (Live Screen Preview / Mirror)
Cho phÃ©p ngÆ°á»�i dÃ¹ng theo dÃµi trá»±c tiáº¿p game POE2 Ä‘ang test á»Ÿ cháº¿ Ä‘á»™ ngáº§m hoáº·c desktop áº£o
mÃ  khÃ´ng lÃ m giÃ¡n Ä‘oáº¡n cÃ´ng viá»‡c, khÃ´ng chiáº¿m tiÃªu Ä‘iá»ƒm chuá»™t.

TÃ­nh nÄƒng:
- Tá»± Ä‘á»™ng gáº¯n GUI vÃ o Desktop chÃ­nh ('Default') Ä‘á»ƒ ngÆ°á»�i dÃ¹ng luÃ´n nhÃ¬n tháº¥y.
- Chá»¥p frame buffer cá»§a POE2 qua Win32 PrintWindow / GDI Capture (30-60 FPS).
- Cá»­a sá»• Picture-in-Picture cÃ³ thá»ƒ tÃ¹y chá»‰nh kÃ­ch thÆ°á»›c, báº­t/táº¯t Always-on-Top.
- PhÃ­m táº¯t Space Ä‘á»ƒ táº¡m dá»«ng frame, phÃ­m T Ä‘á»ƒ ghim cá»­a sá»• lÃªn trÃªn cÃ¹ng.
é    N)ÚOptionalÚreconfigurezutf-8)Úencodingz..)ÚImageÚImageTk)Úcapture_window_printÚcapture_rect_bitblt)Úfind_poe2_windowi   c                  ó  — 	 t                                dddt          ¦  «        } | r6t                                | ¦  «         t                                | ¦  «         dS dS # t
          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w)uO   Báº£o Ä‘áº£m thread GUI luÃ´n gáº¯n vÃ o Desktop tÆ°Æ¡ng tÃ¡c chÃ­nh 'Default'.ÚDefaultr   Fu.   [Preview] KhÃ´ng thá»ƒ gáº¯n Desktop Default: N)Úuser32ÚOpenDesktopWÚGENERIC_ALLÚSetThreadDesktopÚCloseDesktopÚ	ExceptionÚprint)ÚhdeskÚexs     úscripts/live_preview.pyÚ attach_thread_to_default_desktopr   #   s¯   € ðEÝ×#Ò# I¨q°%½ÑEÔEˆØð 	'Ý×#Ò# EÑ*Ô*Ð*Ý×Ò Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'øõ ð Eð Eð EÝÐC¸rÐCÐCÑDÔDÐDÐDÐDÐDÐDÐDÐDøøøøðEøøøs   ‚AA Á
BÁ(B Â Bc                   óN   — e Zd Zdej        fd„Zd„ Zd„ Zdee	         fd„Z
d„ ZdS )	ÚPoe2LivePreviewAppÚrootc           
      ó  ‡ — |‰ _         ‰ j                              d¦  «         ‰ j                              d¦  «         ‰ j                              dd¦  «         ‰ j                              d¬¦  «         d‰ _        d‰ _        d‰ _        t          j        ¦   «         ‰ _	        d‰ _
        d ‰ _        t          j        ‰ j         d	d
¬¦  «        ‰ _        ‰ j                             t          j        t          j        ¬¦  «         t          j        ‰ j        ddd	d¬¦  «        ‰ _        ‰ j                             t          j        dd¬¦  «         t          j        ‰ j        ddd	d¬¦  «        ‰ _        ‰ j                             t          j        d¬¦  «         t          j        ‰ j        d‰ j        ddt          j        dd¬¦  «        ‰ _        ‰ j                             t          j        dd¬¦  «         t          j        ‰ j         dd¬¦  «        ‰ _        ‰ j                             t          j        d¬ ¦  «         d ‰ _        ‰ j                              d!ˆ fd"„¦  «         ‰ j                              d#ˆ fd$„¦  «         ‰                       ¦   «          d S )%Nu=   AutoPOE2 - Live Game Preview (GÆ°Æ¡ng Soi Thá»�i Gian Thá»±c)Ú800x480i�  éð   z#1e1e2e)ÚbgFr   z#181825é$   )r   Úheight)ÚfillÚsideu/   Ä�ang tÃ¬m kiáº¿m cá»­a sá»• Path of Exile 2...ú#cdd6f4)úSegoe UIé
   Úbold)ÚtextÚfgr   Úfonté   é   )r"   ÚpadxÚpadyzFPS: 0z#a6adc8)r$   é	   )r"   r,   õ   ðŸ“Œ Ghim trÃªn cÃ¹ng: Táº¯tú#313244é   )r'   Úcommandr   r(   Úreliefr,   r)   é   ú#11111b)r   ÚhighlightthicknessT)r!   Úexpandz<space>c                 ó,   •— ‰                      ¦   «         S ©N)Útoggle_pause©ÚeÚselfs    €r   ú<lambda>z-Poe2LivePreviewApp.__init__.<locals>.<lambda>i   s   ø€ ¨D×,=Ò,=Ñ,?Ô,?€ ó    z<t>c                 ó,   •— ‰                      ¦   «         S r9   )Útoggle_always_on_topr;   s    €r   r>   z-Poe2LivePreviewApp.__init__.<locals>.<lambda>j   s   ø€ ¨×(AÒ(AÑ(CÔ(C€ r?   )!r   ÚtitleÚgeometryÚminsizeÚ	configureÚ	is_pausedÚalways_on_topÚfps_counterÚtimeÚlast_fps_timeÚcurrent_fpsÚpoe_hwndÚtkÚFrameÚheaderÚpackÚXÚTOPÚLabelÚ
lbl_statusÚLEFTÚlbl_fpsÚRIGHTÚButtonrA   ÚFLATÚbtn_topÚCanvasÚcanvasÚBOTHÚimg_tkÚbindÚupdate_frame)r=   r   s   ` r   Ú__init__zPoe2LivePreviewApp.__init__/   s_  ø€ ØˆŒ	ØŒ	�ŠÐWÑXÔXÐXØŒ	×Ò˜9Ñ%Ô%Ð%ØŒ	×Ò˜#˜sÑ#Ô#Ð#ð 	Œ	×Ò˜yÐÑ)Ô)Ð)ð ˆŒØ"ˆÔØˆÔÝ!œY™[œ[ˆÔØˆÔØ'+ˆŒõ ”h˜tœy¨Y¸rÐBÑBÔBˆŒØŒ×Ò�bœd­¬ÐÑ0Ô0Ð0åœ(ØŒKØBØØØ)ð
ñ 
ô 
ˆŒð 	Œ×Ò¥"¤'°¸ÐÑ;Ô;Ð;å”xØŒKØØØØ ð
ñ 
ô 
ˆŒð 	Œ×Ò�rœx¨bÐÑ1Ô1Ð1å”yØŒKØ/ØÔ-ØØÝ”7ØØ ð	
ñ 	
ô 	
ˆŒð 	Œ×Ò�rœx¨a°aÐÑ8Ô8Ð8õ ”i ¤	¨iÈAÐNÑNÔNˆŒØŒ×Ò�bœg¨dÐÑ3Ô3Ð3àˆŒð 	Œ	�Š�yÐ"?Ð"?Ð"?Ð"?Ñ@Ô@Ð@ØŒ	�Š�uÐCÐCÐCÐCÑDÔDÐDð 	×ÒÑÔÐÐÐr?   c                 óÐ   — | j          | _         | j                             d| j         ¦  «         | j                             | j         rdnd| j         rdnd| j         rdnd¬¦  «         d S )	Nz-topmostu   ðŸ“Œ Ghim trÃªn cÃ¹ng: Báº­tr/   z#89b4far0   r5   r#   )r'   r   r(   )rG   r   Ú
attributesrZ   Úconfig)r=   s    r   rA   z'Poe2LivePreviewApp.toggle_always_on_topo   s„   € Ø!%Ô!3Ð3ˆÔØŒ	×Ò˜Z¨Ô);Ñ<Ô<Ð<ØŒ×ÒØ37Ô3EÐiÐ/Ð/ÐKiØ Ô.Ð=ˆyˆy°IØ Ô.Ð=ˆyˆy°Ið 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                 óˆ   — | j          | _         | j         rdnd}| j                             d| j         sdnd› |› �¬¦  «         d S )Nu    (Táº M Dá»ªNG)Ú u   Tráº¡ng thÃ¡i: u   Ä�ang cháº¡yu   Táº¡m dá»«ng©r'   )rF   rT   rd   )r=   Ústatuss     r   r:   zPoe2LivePreviewApp.toggle_pausex   sZ   € Ø!œ^Ð+ˆŒØ&*¤nÐ<Ð"Ð"¸"ˆØŒ×ÒÐ$xÈDÌNÐ6n°n°nÐ`nÐ$xÐpvÐ$xÐ$xÐÑyÔyÐyÐyÐyr?   Úreturnc                 ód   — t          ddg¦  «        }|rt                               |¦  «        r|S dS )u   TÃ¬m HWND game POE2.zPath of Exile 2zPath of ExileN)r
   r   ÚIsWindow)r=   Úhwnds     r   Úfind_target_hwndz#Poe2LivePreviewApp.find_target_hwnd}   s:   € åÐ!2°OÐ DÑEÔEˆØð 	•F—O’O DÑ)Ô)ð 	ØˆKØˆtr?   c                 óf  — 	 | j         �sï| j        rt                               | j        ¦  «        s|                      ¦   «         | _        | j        �rt          | j        d¬¦  «        }|€t          dddd¦  «        }|�rÆ| j                             ¦   «         }| j         	                    ¦   «         }|dk    �rŒ|dk    �r…|j
        \  }}t          ||z  ||z  ¦  «        }t          dt          ||z  ¦  «        ¦  «        }t          dt          ||z  ¦  «        ¦  «        }|                     ||ft          j        j        ¦  «        }	t%          j        |	¦  «        | _        | j                             d¦  «         | j                             |d	z  |d	z  t.          j        | j        ¬
¦  «         | j                             d| j        › d|› d|› �d¬¦  «         | xj        dz  c_        t9          j        ¦   «         }
|
| j        z
  dk    r=| j        | _        d| _        |
| _        | j                             d| j        › �¬¦  «         nµ| j                             dd¬¦  «         n˜| j                             dd¬¦  «         | j                             d¦  «         | j                             ¦   «         }| j         	                    ¦   «         }| j                              |d	z  |d	z  dddt.          j        ¬¦  «         n# tB          $ r
}Y d }~nd }~ww xY w| j"         #                    d| j$        ¦  «         d S )NT)Úrender_full_contentr   i€  i8  r%   é   Úallé   )ÚanchorÚimageu   Ä�ang xem POE2 (HWND: z) - Úxz#a6e3a1)r'   r(   g      ð?zFPS: rg   u6   KhÃ´ng thá»ƒ Ä‘á»�c frame buffer cá»§a cá»­a sá»• POE2z#f38ba8u8   Ä�ang chá»� client POE2 má»Ÿ (ChÆ°a tÃ¬m tháº¥y HWND)...z#f9e2afuW   ChÆ°a tÃ¬m tháº¥y cá»­a sá»• game Path of Exile 2.
HÃ£y khá»Ÿi cháº¡y game hoáº·c tool.z#6c7086)r$   r*   Úitalic)r'   r!   r)   Újustifyé!   )%rF   rL   r   rk   rm   r   r	   r\   Úwinfo_widthÚwinfo_heightÚsizeÚminÚmaxÚintÚresizer   Ú
ResamplingÚBILINEARr   Ú
PhotoImager^   ÚdeleteÚcreate_imagerM   ÚCENTERrT   rd   rH   rI   rJ   rK   rV   Úcreate_textr   r   Úafterr`   )r=   Úpil_imgÚcwÚchÚimg_wÚimg_hÚratioÚnew_wÚnew_hÚresizedÚnowr<   s               r   r`   zPoe2LivePreviewApp.update_frame„   sH  € ð>	Ø”>ñ ;Ø”}ð <­F¯OªO¸D¼MÑ,JÔ,Jð <Ø$(×$9Ò$9Ñ$;Ô$;�D”Mà”=ñ 7å2°4´=ÐVZÐ[Ñ[Ô[�GØ�å"5°a¸¸DÀ$Ñ"GÔ"G˜àñ #|Ø!œ[×4Ò4Ñ6Ô6˜Ø!œ[×5Ò5Ñ7Ô7˜Ø š7™7 r¨B¢w¡wà+2¬<™L˜E 5Ý$'¨¨U©
°B¸±JÑ$?Ô$?˜EÝ$'¨­3¨u°u©}Ñ+=Ô+=Ñ$>Ô$>˜EÝ$'¨­3¨u°u©}Ñ+=Ô+=Ñ$>Ô$>˜Eà&-§n¢n°e¸U°^ÅUÔEUÔE^Ñ&_Ô&_˜GÝ*1Ô*<¸WÑ*EÔ*E˜DœKà œK×.Ò.¨uÑ5Ô5Ð5Ø œK×4Ò4Ø " a¡Ø " a¡Ý')¤yØ&*¤kð	 5ñ ô ð ð !œO×2Ò2Ø%`¸d¼mÐ%`Ð%`ÐQVÐ%`Ð%`ÐY^Ð%`Ð%`Ø#,ð 3ñ ô ð ð !Ð,Ô,°Ñ1Ð,Ô,Ý"&¤)¡+¤+˜CØ" TÔ%7Ñ7¸3Ò>Ð>Ø37Ô3C Ô 0Ø34 Ô 0Ø58 Ô 2Ø $¤× 3Ò 3Ð9SÀÔAQÐ9SÐ9SÐ 3Ñ TÔ TÐ Tøàœ×.Ò.Ð4lÐqzÐ.Ñ{Ô{Ð{Ð{à”O×*Ò*Ð0jÐoxÐ*ÑyÔyÐyØ”K×&Ò& uÑ-Ô-Ð-Øœ×0Ò0Ñ2Ô2�BØœ×1Ò1Ñ3Ô3�BØ”K×+Ò+Ø˜a™Ø˜a™ØwØ&Ø7Ý "¤	ð ,ñ ô ð øøõ ð 	ð 	ð 	ØˆDˆDˆDˆDøøøøð	øøøð 	Œ	�Š˜˜DÔ-Ñ.Ô.Ð.Ð.Ð.s   ‚K7K: Ë:
LÌ	LN)Ú__name__Ú
__module__Ú__qualname__rM   ÚTkra   rA   r:   r   r~   rm   r`   © r?   r   r   r   .   s†   € € € € € ð>˜RœUð >ð >ð >ð >ð@
ð 
ð 
ðzð zð zð
 (¨3¤-ð ð ð ð ðB/ð B/ð B/ð B/ð B/r?   r   c                  óŽ   — t          ¦   «          t          j        ¦   «         } t          | ¦  «        }|                      ¦   «          d S r9   )r   rM   r•   r   Úmainloop)r   Úapps     r   Úmainrš   É   s7   € Ý$Ñ&Ô&Ð&ÝŒ5‰7Œ7€DÝ
˜TÑ
"Ô
"€CØ‡M‚M�O„O€O€O€Or?   Ú__main__)"Ú__doc__ÚctypesÚosÚsysrI   ÚtkinterrM   Útypingr   ÚhasattrÚstdoutr   ÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__ÚPILr   r   Úsrc.common.screen_capturer   r	   Úsrc.common.win32_windowr
   Úwindllr   Úkernel32r   r   r   rš   r’   r–   r?   r   ú<module>r¯      s—  ðð
ð 
ð €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à
€7ˆ3Œ:�}Ñ%Ô%ð -Ø„J×Ò GÐÑ,Ô,Ð,ð „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rà Ð Ð Ð Ð Ð Ð Ð Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ 4Ð 4Ð 4Ð 4Ð 4Ð 4à	ŒÔ	€ØŒ=Ô!€Ø€ðEð Eð EðX/ð X/ð X/ð X/ð X/ñ X/ô X/ð X/ðvð ð ð ˆzÒÐØ€D�F„F€F€F€Fð Ðr?   