ç³ãèš³ãããŸããããããã¯åé¡ã§ã¯ãããŸãããã代ããã«ãããã©ã«ãã®WSL端æ«ïŒç¹ã«UbuntuïŒã§è¡ã£ãããšãå£ããªãããã«ããããšãææ¡/èŠæ±ããŸããããŒã
ããã©ã«ãã®WSLã¿ãŒããã«ã§å
¥åãããšããªã³ãšã¢ã§å
¥åããŠããããã«æããŸãã notepad.exe
ããããä»ã®Windowsã¢ããªã«ã¯ãªãæ»ãããããããŸãã ä»ã®ãã¹ãŠã®Windowsã§ã¯75ms以äžïŒã»ãšãã©ã®ElectronããŒã¹ã®ã¢ããªã§ã¯200ã250ms以äžïŒã§ã¯ãªãã10msã®å
¥åã©ã°ãããããã«æããå Žåã
WSLã¿ãŒããã«ã®æ觊ãnotepad.exe
ãããåªããŠããçç±ã¯äœã§ããïŒãŸãããã®UIã®æ©èœåŒ·åã¯ãå°æ¥ãã¹ãŠã®Windowsã¢ããªã«é©çšãããŸããïŒ
話ãåããããªãå Žåã¯ããããéããŠãã ããã ç§ã¯äž»ã«ãããéããŠãå°æ¥äœããã®çš®é¡ã®ãªã°ã¬ãã·ã§ã³ãçºçããªãããã«ããããšãã©ãã»ã©è¯ãããèªèãããŸããã
誰ããæ¥ãŠãç§ãã¡ãäœãã§è¯ãä»äºãããŠãããšç§ãã¡ã«èšãããšã«æ±ºãããšããç§ã¯æ¬åœã«æ°ã«ããŸããã ç§ãã¡ã¯æ¯æ¥éåžžã«å€ãã®èŠæ ãèããŠããã®ã§ããã®ãããªæçš¿ã¯æ°é®®ãªç©ºæ°ã®æ¯å¹ã§ãã ããããšãããããŸãïŒ
ãŸããããªãããããèªãããšã«å®å šã«ãããããããŸã§ãç§ã¯ããªããšããã«ã€ããŠè©±ãåãããšãå¬ããæããŸãã ãåžæã®ãã©ããŒã¢ããã¯ãåãåãããã ããã ç§ã¯èªåã®ä»äºã«ã€ããŠç±ççã«æé·ããŠããŸãã ïŒP
ããªãã®ããã¹ããç»é¢ã«è¡šç€ºããéã«ãWindowsäžã®ä»ã®ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ãããé«éã«ãªã£ãŠããçç±ã«ã€ããŠç¥èã«åºã¥ããæšæž¬ãããªããã°ãªããªãã£ããšããã...ããã¯æåéãç§ãã¡ã®å¯äžã®ä»äºã ããã§ãïŒ ãŸãããããããWindowsããã®äœæ¥ãå®è¡ããããã«å¿ èŠãªæãå€ããŠæäœã¬ãã«ã®APIã®è¿ãã§darnã䜿çšããŠããããã§ãã
ElectronãšJavascriptã«ã€ããŠè©±ãå§ãããšããªã¹ãããä»ã®ã»ãšãã©ãã¹ãŠã«ãããçš®ã®ã¬ã€ã€ãŒãŸãã¯ãã¬ãŒã ã¯ãŒã¯ããããã¯å€ãã®ã¬ã€ã€ãŒãšãã¬ãŒã ã¯ãŒã¯ãå«ãŸããŸãã ç§ãã¡ã¯ããŸããã
è¿œå ã®ã³ã³ãããŒã«ãæ¥ç¶ãããŠããªããéåžžã«ç¹å¥ã§ãªããŠã£ã³ããŠã1ã€ãããŸãã ããŒã¯ããŠã£ã³ããŠã¡ãã»ãŒãžããåŠçããŠããã®ã§ãã«ãŒãã«ã®ããäžãããã£ãŒããããŸããããŒã¯ãä»ã®ããè€éãªUIãã¬ãŒã ã¯ãŒã¯ïŒWPFãWinFormsãUWPãé»åïŒã ãããŠãããªã«ãªãã§GDIã®PolyTextOutã䜿çšããŠãããã¹ãããŠã£ã³ããŠã®è¡šé¢ã«çŽæ¥ãã³ãããŸãã
notepad.exe
ãããå°ãªããšããŠã£ã³ããŠã«è€æ°ã®ã³ã³ãããŒã«ããããããããïŒç§ã¯èŠãŠããŸãããïŒç·šéã³ã³ãããŒã«ã§äœããã®ã©ã€ãã©ãªãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããã¹ãã¬ã€ã¢ãŠããææ¡ããŠããŸãïŒããããå¥ã®ã©ã€ãã©ãªã䜿çšããŠããŸãïŒãåœéåãµããŒãã®ãã¬ãŒã ã¯ãŒã¯...ïŒ
ãã¡ãããããã¯ãã¬ãŒããªããããããšãæå³ããŸãã ä»ã®ã»ãšãã©ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ããã«ãå®å šã«åœéçãªããã¹ãã¯ãµããŒãããŠããŸããã RTLïŒ çŸåšããŽãŒãŸãŒã³ã¯ãããŸããã 代çãã¢ãšçµµæåïŒ ç§ãã¡ã¯ããã«çããŸãããããŸã ããã«ã¯ããŸããã ææšã¹ã¯ãªããïŒ ãããã
ãªãã§ãããªæããªã®ïŒ äžã€ã«ã¯ã conhost.exe
ã¯æ±ããšããŠå€ãã§ãã ä»ã®ã»ãšãã©ã®ãã¬ãŒã ã¯ãŒã¯ãäœæãããåã«äœæãããããããã¹ãŠã®ãã¢ã¡ã¿ã«æäžå±€ã䜿çšããå¿
èŠããããŸãã ãŸãããã¬ãŒã ã¯ãŒã¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã«å¿
èŠãªãã®ããã¹ãŠæãåã«ãæ°ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãšãã£ã·ã§ã³ãããã€ã¹ãèµ·åãããšãã«æåã«è¡šç€ºããå¿
èŠãããã®ã¯ãå¯èœãªéãäœãã¬ãã«/ããã ã¬ãã«ãç¶æããããã§ããåäœããŸãã ãŸããC / C ++ã§èšè¿°ãããŠãããå¯èœãªéãäœãããã¢ã¡ã¿ã«ã§ãã
ãã®UIã®æ©èœåŒ·åã¯ãWindowsäžã®ä»ã®ã¢ããªã«ãé©çšãããŸããïŒ ã»ãŒééããªãããã§ã¯ãããŸããã 圌ãã¯ããŸãã«ãå€ãã®ããšãèµ·ãã£ãŠãããããã¯è¯ãããšã§ãæªãããšã§ããããŸãã æåã§ãã¯ã»ã«ãèšç®ãããããã©ã³ãã«é©çšãããã¹ã¿ã€ã«ãæ°ã«ãããããã«ã1ã€ã®ã¡ãœãããåŒã³åºããŠãããã¹ããè€éã§ãªãæ¹æ³ã§ä»»æã®èšèªã§ã¬ã€ã¢ãŠãã§ããããšã«å«åŠ¬ããŠããŸãã ããããç§ã®æåã®ãã¯ã»ã«èšç®ãããŒãã£ãªãŒãžã§ã³ã®èšç®ãã¹ã¯ããŒã«ãªãŒãžã§ã³ã®çæ°ãªã©ã«ãããããããããé«éã«ãªããŸãã ãŸãã誰ããããŠã£ã³ããŠã®äžéšã«ã¹ããŒã¿ã¹ããŒãè¿œå ã§ããŸããããšèšããšãUIãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠã¯ãªãã¯ããŠãã©ãã°ã§ããã®ã§ãç§ãã¡ã®å Žåã¯ã©ãã§ãæ©èœããã®ã§ãããããŸããã§ããæ°žé ã«ããã¯ãã°ã¢ã€ãã ã§ãããå®è£ ã«ã€ããŠèããèžçŒããäžããŠãããŸãã
ãããåŸéããªãããã«ããããšããŸããïŒ ã¯ãïŒ ä»ã®ãšãããããã¯äžçš®ã®æåããã»ã¹ã§ãã äœããé ããªã£ãŠããããšã確èªããŠããã WPRãå®è¡ãããã¬ãŒã¹ãéå§ããŸãã ç§ãã¡ã¯ããããã¹ãèŠã€ããäœãèµ·ãã£ãŠããã®ããæšè«ãããããæ¹åããããšããŸãã ããšãã°ãæåŸã®1ã2ãµã€ã¯ã«ã§ã¯ããšã³ãããŒãšã³ãã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããäž»èŠãªé åãšããŠããŒãå²ãåœãŠã«çŠç¹ãåœãŠãåºã«ãªããªã¯ãšã¹ãã«å¯ŸããŠã¹ã¿ãã¯æ§ç¯ãããã€ãã¬ãŒã¿ã®ãããªãã¡ãµãŒãã䜿çšããããã«ã³ãŒãã倧éã«å€æŽããŸããåŠçã®åã¬ãã«ã®æ°ããããŒãã¹ããŒã¹ã«å€æããŠå²ãåœãŠã代ããã«ããããã¡ã
äœè«ã§ããã @ bitcrazedã¯ãã³ã³ãã¹ãåºæã®æ¹æ³ã§ããã©ãŒãã³ã¹ãã¹ããèªååããããšãæãã§ããŸããããããå®è¡ããããã®å¶åŸ¡ãããç°å¢ããŸã å®å šã«ã¯ç解ããŠããŸããã Windowsãšã³ãžãã¢ãªã³ã°ã·ã¹ãã ã¯æ¯æ©ããã©ãŒãã³ã¹ãã¹ããå®è¡ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã å šäœã§äœããå°ç¡ãã«ãããã©ããã倧ãŸãã«ç¥ãæ¹æ³ãæäŸããæè¡çã«ã¯ç¬èªã®ããã©ãŒãã³ã¹ãã¹ããæ¿å ¥ããããã®ãã现ããæ¹æ³ãæäŸããŸã...ãããç§ã¯ãŸã ãããåé¿ããŠããŸããã èªååãããæ¹æ³ã§ãããè¡ãæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ãããã°ãç§ã¯ãã¹ãŠã®è³ã§ãã
ä»ã«ç¥ãããããšãããã°æããŠãã ããã ç§ã¯äžæ¥äžè¡ãããšãã§ããŸããã æçš¿ããåã«ããã®è¿ä¿¡ãã15åã®æ¥ç·ãåé€ããŸããã
äœã¬ãã«ã®WindowsAPIãšèšãã°ãã³ã³ãœãŒã«ïŒconhost.exeãcmd.exe ...ïŒãšWSLïŒwsl.exeãLxssManager.dll ...ïŒã®äž¡æ¹ã®ãã¹ãŠã®_usermode_ã³ã³ããŒãã³ããC ++ _ STL_ã倧éã«äœ¿çšããŠããããšãããããŸããã ããšãã°ãæååæäœãã¡ã¢ãªå²ãåœãŠãä»®æ³ããŒãã«ãªã©ã§ããCã®ã¿ã䜿çšããå Žåãããã©ãŒãã³ã¹ã¯åäžããŸããïŒ
ç§ã¯ããããC ++ STLããéåžžã«ã䜿çšããŠãããšã¯èããŠããŸããã 圌ãã¯ééããªãããã€ãã®ã³ã¬ã¯ã·ã§ã³ãšãããããå°ãã®æååæäœãšã¢ã«ãŽãªãºã ããã¡ãã¡ã§äœ¿çšããŠããŸãã STLã«ã¯ããããã®æ°ããããããã¯ããã«å€ãã®ãã®ãããããã«æããŸãã
ããããšã«ãã...ããªãã説æããããšã®ã»ãšãã©ã¯ããã°ããåã«Cã§ãŸã£ããã«æžãããŠããŸããã æèçãªãã¬ãŒããªããšããŠãC ++ãšSTLãéžæçã«äœ¿çšããããšãå¢ããŠããŸãã ãã³ãã¬ãŒããå éšã§äœãããŠããã®ããããç解ããæ£ãããã³ãã¬ãŒãã泚ææ·±ã䜿çšããŠããéããéåžžãã»ãã¥ãªãã£ãšããã°ã©ãã³ã°ã®å®¹æããå€§å¹ ã«åäžãããªãããããããããªããã©ãŒãã³ã¹ãããã¬ãŒãããŠããŸããã
å®éãã»ãã¥ãªãã£ã¯ãå¯èœãªéãç¬èªã®æ§é ãäœæããããšããããããSTLãã³ãã¬ãŒãã䜿çšãã倧ããªçç±ã§ãã ã³ã¬ã¯ã·ã§ã³ãšæååã«STLãã³ãã¬ãŒãã䜿çšãããšãéåžžããšã©ãŒãçºçããããæ¹æ³ã§æåã§å®è¡ããå¿ èŠãããïŒãŸãã¯ãŸã£ããå®è¡ããªãïŒå¢çãã§ãã¯ãå¯èœã«ãªããŸãã
ãŸããã¹ãã¬ãŒãCã®ãšãã«ã³ã³ãœãŒã«ã³ãŒãå ã«17ã®ç°ãªããã¥ãŒã€ã³ã°ãšãªã³ã¯ãªã¹ãã®å®è£ ãããæ¹ããä»æ¥std :: queueãšstd :: listã䜿çšãããããå šäœçã«ããã©ãŒãã³ã¹ãåªããŠãããã©ããã¯å³å¯ã«ã¯ããããŸããã ãããããåã ã®å®è£ ããšã«ããå€ãã®ãã£ã¹ã¯äžã®ã¹ããŒã¹ãæ¶è²»ããŸããããããã¯ç°ãªãã¿ã€ãã®ããã©ãŒãã³ã¹ã®åé¡ïŒã¹ãã¬ãŒãžãšããŒãžããŒãI / OïŒã§ãã
ãã®è¿ä¿¡ãæžãããã«æéãå²ããŠãããŠããããšãããããŠè³è³ã«åé¡ã¯ãããŸããã
éå»æ°ãæéãç§ã¯é©åãªç«¯æ«ã®ã»ããã¢ãããæ¢ããŠããŸãããtmuxã䜿çšããubuntu.exe
ã¯ãçŸåšã®ããŒã«ã䜿çšããå Žåãšåããããå®ç§ã«è¿ããšæããŸãã ubuntu.exe
端æ«èªäœã¯éåžžã«é«éã§ãããtmuxã¯ãã¹ãŠã®ã©ã€ãã°ããºïŒã¿ããåå²ãã€ã³ããããã¡ãŒæ€çŽ¢ãªã©ïŒãæäŸããŸãã
ã«ã©ãŒããŒãã®äºææ§ãé«ãããã©ã³ããµã€ãºã+/-ãºãŒã ããããã®ãããããŒãªã©ã®ããããã£é¢é£ã®æ©èœåŒ·åãè¡ãå°æ¥ã®ãªãªãŒã¹ãæ¬åœã«æ¥œãã¿ã«ããŠããŸãã
@miniksa ïŒéåžžã«èå³æ·±ãæçš¿ãããããšãïŒ
Windowsããã®äœæ¥ãå®è¡ããããã«å¿ èŠãªæãå€ããŠæäœã¬ãã«ã®APIã®è¿ãã§darnã䜿çšããŠããŸãã
ç§ã¯ããã«ã€ããŠãã°ããã®éèå³ããããŸããã ããŸããŸãªWin32APIïŒUSER32 / GDI32ïŒãåç §ããŠããããã§ãã ç§ã¯æè¿ãããããWindowsã®æè¿ã®ããŒãžã§ã³ïŒ8.0以éïŒã§ååŸã§ããã»ã©äœã¬ãã«ã§ãããã©ããããŸãã¯ãããã®APIãä»ã®ãã®ïŒDirect2Dãªã©ïŒã®äžã«éãã«å€æãããŠãããã©ããã«ã€ããŠç¢ºä¿¡ãæãŠãªããªããŸããã DirectWriteãªã©ïŒã å€ãAPIã¯æ°ããAPIãšã©ã®ããã«é¢é£ããŠããŸããïŒ ãã®ããããæ確ã«ããããšãã§ããã°ç§ã¯ããã倧奜ãã§ãïŒ
@stakx ãç§ã¯USER32ãšGDI32ãåç §ããŠããŸãã
詳现ã確èªããã®ã«äœæéãè²»ããããšãªããé ã®ãŠã£ãºãããç§ãç¥ã£ãŠããããšã®å€§ãŸããªæŠèŠã説æããŸãã ãã®ãããããã®äžéšã¯ææ¯ãã®å¯Ÿè±¡ã§ããããããã«æ£ãããªãå¯èœæ§ããããŸãããããããæ£ããæ¹åã«ãããŸãã ãã¹ãŠã®ã¹ããŒãã¡ã³ãã¯ãäžçãã©ã®ããã«æ©èœããæèŠã誀ãã®å¯Ÿè±¡ãšãªããã«ã€ããŠã®ç§ã®å人çãªç¥èã§ãããšèããŠãã ããã
ãã€ãã©ã€ã³ã®ã°ã©ãã£ãã¯éšåïŒGDI32ïŒã®å ŽåãGDIã®ãŠãŒã¶ãŒã¢ãŒãéšåã¯ããªãäžã«ãããŸãã ã¢ããªã¯GDI32ãåŒã³åºãããŠãŒã¶ãŒã¢ãŒãåŽã®DLLã§ããã€ãã®äœæ¥ãè¡ãããã«ãŒãã«åŒã³åºããã«ãŒãã«ã«ãžã£ã³ãããŠæç»ãè¡ãããŸãã
ãä»ã®ãã®ã®äžã«éãã«å€æãããããšããªããèããŠããéšåã¯ããããããã«ãŒãã«åŒã³åºãã«ã¶ã€ãããšãã«ãŒãã«GDIã®ãã®ã®æãåããã®ã®äžã«åãã©ãããã©ãŒã åãããåŸåããããšããããšã§ãDirectXãå®éã«NVIDIA / AMD / Intel / etcã«ãã£ãŠåŠçãããå Žåã ã¹ã¿ãã¯ã®äžçªäžã«ããã°ã©ãã£ãã¯ã¹ãã©ã€ããŒãšGPUã ããã¯ãWindowsVistaçšã®WDDMã®äžéšãšããŠæäŸãããã°ã©ãã£ãã¯ã¹ãã©ã€ããŒã®åã¢ãŒããã¯ãã£ã§çºçãããšæããŸãã GDIã§ãŸã å®éã«é«éã§ããããã©ãããã©ãŒã ã®åæ§ç¯ã®çµæãšããŠäœéã§ããåŒã³åºãã«ã€ããŠã®ããã¥ã¡ã³ããã©ããã«ãããŸãã ååãã®ããã¥ã¡ã³ããèŠã€ããŠç¢ºèªãããšãã¯ãé«éã®ãã®ã䜿çšããŠããŸããã
GDIã«å ããŠãCommon Controlsãcomctl32.dllã®ãããªãã®ããããããåªãã宣èšåãã¬ãŒã ã¯ãŒã¯ãã§ããåã«ãUIãäœæããããã®åå©çšå¯èœãªãã¿ã³ãšèŠçŽ ã®ã»ãããæäŸããŠãããšæããŸãã ã³ã³ãœãŒã«ã§ã¯å®éã«ã¯äœ¿çšããŸããïŒå³ã¯ãªãã¯ã¡ãã¥ãŒã®ããããã£ã·ãŒããé€ãïŒã
DirectWriteãšD2Dãããã³D3DãšDXGIèªäœã«é¢ããŠã¯ããããã¯ããŠãŒã¶ãŒã¢ãŒããšã«ãŒãã«ã¢ãŒãã®äž¡æ¹ã§ãGDIããå®å šã«é¢ããã³ãã³ããšãã¹ã®å¥åã®ã»ããã§ãã ãããã¯ã2ã€ã®éã«ããã€ãã®çžäºéçšæ§ã®èŠå®ãããããšãé€ããŠãå®éã«ã¯é¢é£ããŠããŸããã ãã ããä»ã®UIãã¬ãŒã ã¯ãŒã¯ã®ã»ãšãã©ã¯ãDirectXã¹ã¿ãã¯ã®äžã«æ§ç¯ãããåŸåããããŸãã XAMLã¯ç¢ºãã§ãã WPFã¯ããã ãšæããŸãã WinFormsã«ã€ããŠã¯ããããããŸããã ãŸããã³ã³ããžã·ã§ã³ã¹ã¿ãã¯ãšãŠã£ã³ããŠãããŒãžã£ãŒãDirectXã䜿çšããŠãããšæããŸãã
ãã€ãã©ã€ã³ã®å ¥å/çžäºäœçšéšåïŒUSER32ïŒã«é¢ããŠã¯ãä»ã®ã»ãšãã©ã®æ°ãããã®ïŒå°ãªããšããã¹ã¯ãããPCã®å ŽåïŒããã§ã«ååšãããã®ã®äžã«æ§ç¯ãããŠããããšã«æ°ä»ãåŸåããããŸãã USER32ã®äž»èŠãªæŠå¿µã¯ãŠã£ã³ããŠãšãŠã£ã³ããŠãã³ãã«ã§ããããã¹ãŠããŠã£ã³ããŠãã³ãã«ã«éä¿¡ãããŸãã ãã¹ã¯ããããã·ã³ïŒãŸãã¯ã©ããããããªã©...ã€ãŸããã¯ã©ã·ãã¯ã¹ã¿ã€ã«ã®WindowsæèŒãã·ã³ïŒã䜿çšããŠããéãããŠã£ã³ããŠãã³ãã«ãé¢ä¿ããã¡ãã»ãŒãžãæµ®ããã§ããŸããã€ãŸããUSER32ã«ã€ããŠè©±ããŠãããšããããšã§ãã
ãŠã£ã³ããŠã¡ãã»ãŒãžãã¥ãŒã¯ããã©ã¢ã°ã©ãŠã³ãã«ããéã«ãã®ãŠã£ã³ããŠã«é¢é£ããŠçºçããå ¥åãšãã·ã¹ãã å ã®ä»ã®ã³ã³ããŒãã³ãã«ãã£ãŠãŠã£ã³ããŠã«éä¿¡ããããã®ã®ãåçŽãªFIFOïŒå€ããå°ãªããïŒã§ãã
XAMLãWPFãWinFormsãªã©ã®æ°ãããã¯ãããžããã¬ãŒã ã¯ãŒã¯ã¯ããŠã£ã³ããŠã¡ãã»ãŒãžãã¥ãŒããã¡ãã»ãŒãžãäœããã®æ¹æ³ã§åä¿¡ããŠåŠçããã¯ãŒã«ãå ã§ããããžã§ãã³ã°ããããŸããŸãªãªããžã§ã¯ããžã®ã€ãã³ãã³ãŒã«ããã¯ã«å€æããåŸåããããŸãã
ãã ããXAMLãªã©ã®ä»ã®ãã¹ã¯ããã以å€ã®ãã©ãããã©ãŒã ã§ãæ©èœããæ°ãããã¯ãããžãŒã¯ããŸã£ããç°ãªãéUSER32ã¹ã¿ãã¯ããã®ãã®ãåŠçããæ©èœãåããŠããåŸåããããŸãã USER32ãšã¯å¥ã®äžŠåã¹ã¿ãã¯ããããåŸæ¥ã®ã¡ãã»ãŒãžã³ã°ãã¥ãŒãšãŠã£ã³ããŠãã³ãã«ããŸã£ããåãããã«åŠçããªããå ¥åãšå¯Ÿè©±ã®çºçæ¹æ³ã«é¢ãããã¹ãŠã®æ°ããã€ãããŒã·ã§ã³ãšå®çŸããããŸãã ããã¯ãCoreWindowãCoreMessagingãªã©ã®Core *ãã¡ããªãŒå šäœã§ãã 圌ãã¯ãŸããæºã®äžã«ããŒããŒããšããŠã¹ã眮ããç»é¢ã®åã®ããŒãªã³ã°ãã§ã¢ã§ãå°»ãäžå¿ã«ããªãããŠãŒã¶ãŒãšã¯äœãããšããç°ãªãæŠå¿µãæã£ãŠããŸãã
XAMLãŸãã¯ä»ã®ãã¬ãŒã ã¯ãŒã¯ã®ããããã䜿çšããŠããå Žå...ãã®è€éãã¯ãã¹ãŠèªåçã«åŠçãããŸãã XAMLã¯ãDirectXãå©çšããæ¹æ³ãç解ããã³ã³ããžã¿ãŒããã³ãŠã£ã³ããŠãããŒãžã£ãŒãšäº€æžããŠããŠãŒã¶ãŒã«ä»£ãã£ãŠã¯ãŒã«ãªå¹æãå®çŸããŸãã ãã©ãããã©ãŒã ã«å¿ããŠãUSER32ãŸãã¯Core *ããééçã«å ¥åã€ãã³ããååŸãããã©ãããå€æããå ¥åã¹ã¿ãã¯ã¯ãã³ãã¿ãããããŒããŒããããŠã¹ãªã©ãçµ±äžãããæ¹æ³ã§åŠçã§ããŸãã ããã¯ããªãã®äººçã楜ã«ããããããçš®é¡ã®ã°ããŒããªãŒãŒã·ã§ã³ãã¢ã¯ã»ã·ããªãã£ãå ¥åã®çžäºäœçšãªã©ãè¡ãããã«åã蟌ãŸããèŠå®ãæã£ãŠããŸãã ãã ããäœã¬ãã«ã«çŽæ¥ç§»åããŠèªåã§åŠçããããæ°ã«ããªããã®ã®åŠçãã¹ãããããããéžæã§ããŸãã
ç§èš£ã¯ãGDI32ãšUSER32ããéãããã³ãã³ãã»ããã§éãããäžçåãã«èšèšãããŠããããšã§ãã ãã¹ã¯ãããPCã ããååšããããŒããŒããšããŠã¹ã1人ã§æäœããVGAã¢ãã¿ãŒã«ã·ã³ãã«ãªã°ã©ãã£ãã¯ãåºåããŸããã ãããã£ãŠãconhostã®ããã«ãäœã¬ãã«ãã§çŽæ¥äœ¿çšããã®ã¯éåžžã«ç°¡åã§ãã æ°ãããã©ãããã©ãŒã ã¯ãäœã¬ãã«ãã§äœ¿çšã§ããŸãããããŸããŸãªãã©ãŒã ãã¡ã¯ã¿ãè€æ°ã®ã¢ã¯ãã£ããŠãŒã¶ãŒãè€æ°ã®ã°ã©ãã£ãã¯ã¢ããã¿ãªã©ã20幎以äžã«ããã£ãŠããŒãœãã«ã³ã³ãã¥ãŒãã£ã³ã°ã§çºçãããã¹ãŠã®ããšã説æããããã«ãªã£ããããæ¡éãã«è€éã«ãªã£ãŠããŸãããšãªã³ãšãªã³ãšãªã³ãšãªã³ã ãã®ãããæ°ãããã®ã䜿çšãããšãã¯ãã¬ãŒã ã¯ãŒã¯ã䜿çšããåŸåããããããé ãççºããããšã¯ãããŸããã 圌ãã¯ããªãã®ããã«ãããåŠçããŸããã圌ãã¯ä»¥åãããå€ããåŠçããã®ã§ãããçšåºŠé ããªããŸãã
ã§ã¯ãGDI32ãšUSER32ã¯æ°ãããã®ããããäœããã®ã§ããããã ããçš®ã
ããªãã¯æ°ãããã®ã§ãããäœãããããšãã§ããŸããïŒ ã»ãšãã©ã¯ããã§ããããããããããã¹ãã§ã¯ãªããããããããªãã§ãããã
æ°ãããã®ã¯å€ããã®ã®äžã«äœãã§ããŸããããããšãå€ããã®ã¯æ°ãããã®ã«åãã©ãããã©ãŒã åãããŠããŸããïŒ æã
ããã³/ãŸãã¯éšåçã«ã
åºæ¬çã«...ããã¯ãããããœãããŠã§ã¢ãžã®çãã®ãããªãã®ã§ã...ãããã¯è»œæžãããŠããªãçœå®³ã§ãããç§ãã¡å
šå¡ãå°ãåŸéããå ŽåãããããŸã£ããæ©èœããããšã«é©ãããã¯ãã§ããã ïŒP
ãšã«ãããããã¯ããæã®ããã®ååãªæ£æ©ã§ãã ããŸãããã°ãããã¯ããªãã®è³ªåã«ããããçããŠãããªãã«ããå°ãæŽå¯ãäžããŸããã
ããŸãããã°ãããã¯ããªãã®è³ªåã«ããããçããŠãããªãã«ããå°ãæŽå¯ãäžããŸããã
@miniksa ã確ãã«ããã ã£ãïŒ å®å šã«çã«ããªã£ãŠããŸãã ããããã¹ãŠæžãããã«æéãå²ããŠãããŠããããšãïŒ ïŒ+1ïŒ
ãšãããããã®åé¡ãã¯ããŒãºããŸãã ãåãåããããã ãããããšãããããŸããæ å ±ã楜ããã§ããã ããŠããããã§ãã
æãåèã«ãªãã³ã¡ã³ã
誰ããæ¥ãŠãç§ãã¡ãäœãã§è¯ãä»äºãããŠãããšç§ãã¡ã«èšãããšã«æ±ºãããšããç§ã¯æ¬åœã«æ°ã«ããŸããã ç§ãã¡ã¯æ¯æ¥éåžžã«å€ãã®èŠæ ãèããŠããã®ã§ããã®ãããªæçš¿ã¯æ°é®®ãªç©ºæ°ã®æ¯å¹ã§ãã ããããšãããããŸãïŒ
ãŸããããªãããããèªãããšã«å®å šã«ãããããããŸã§ãç§ã¯ããªããšããã«ã€ããŠè©±ãåãããšãå¬ããæããŸãã ãåžæã®ãã©ããŒã¢ããã¯ãåãåãããã ããã ç§ã¯èªåã®ä»äºã«ã€ããŠç±ççã«æé·ããŠããŸãã ïŒP
ããªãã®ããã¹ããç»é¢ã«è¡šç€ºããéã«ãWindowsäžã®ä»ã®ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ãããé«éã«ãªã£ãŠããçç±ã«ã€ããŠç¥èã«åºã¥ããæšæž¬ãããªããã°ãªããªãã£ããšããã...ããã¯æåéãç§ãã¡ã®å¯äžã®ä»äºã ããã§ãïŒ ãŸãããããããWindowsããã®äœæ¥ãå®è¡ããããã«å¿ èŠãªæãå€ããŠæäœã¬ãã«ã®APIã®è¿ãã§darnã䜿çšããŠããããã§ãã
ElectronãšJavascriptã«ã€ããŠè©±ãå§ãããšããªã¹ãããä»ã®ã»ãšãã©ãã¹ãŠã«ãããçš®ã®ã¬ã€ã€ãŒãŸãã¯ãã¬ãŒã ã¯ãŒã¯ããããã¯å€ãã®ã¬ã€ã€ãŒãšãã¬ãŒã ã¯ãŒã¯ãå«ãŸããŸãã ç§ãã¡ã¯ããŸããã
è¿œå ã®ã³ã³ãããŒã«ãæ¥ç¶ãããŠããªããéåžžã«ç¹å¥ã§ãªããŠã£ã³ããŠã1ã€ãããŸãã ããŒã¯ããŠã£ã³ããŠã¡ãã»ãŒãžããåŠçããŠããã®ã§ãã«ãŒãã«ã®ããäžãããã£ãŒããããŸããããŒã¯ãä»ã®ããè€éãªUIãã¬ãŒã ã¯ãŒã¯ïŒWPFãWinFormsãUWPãé»åïŒã ãããŠãããªã«ãªãã§GDIã®PolyTextOutã䜿çšããŠãããã¹ãããŠã£ã³ããŠã®è¡šé¢ã«çŽæ¥ãã³ãããŸãã
notepad.exe
ãããå°ãªããšããŠã£ã³ããŠã«è€æ°ã®ã³ã³ãããŒã«ããããããããïŒç§ã¯èŠãŠããŸãããïŒç·šéã³ã³ãããŒã«ã§äœããã®ã©ã€ãã©ãªãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããã¹ãã¬ã€ã¢ãŠããææ¡ããŠããŸãïŒããããå¥ã®ã©ã€ãã©ãªã䜿çšããŠããŸãïŒãåœéåãµããŒãã®ãã¬ãŒã ã¯ãŒã¯...ïŒãã¡ãããããã¯ãã¬ãŒããªããããããšãæå³ããŸãã ä»ã®ã»ãšãã©ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ããã«ãå®å šã«åœéçãªããã¹ãã¯ãµããŒãããŠããŸããã RTLïŒ çŸåšããŽãŒãŸãŒã³ã¯ãããŸããã 代çãã¢ãšçµµæåïŒ ç§ãã¡ã¯ããã«çããŸãããããŸã ããã«ã¯ããŸããã ææšã¹ã¯ãªããïŒ ãããã
ãªãã§ãããªæããªã®ïŒ äžã€ã«ã¯ã
conhost.exe
ã¯æ±ããšããŠå€ãã§ãã ä»ã®ã»ãšãã©ã®ãã¬ãŒã ã¯ãŒã¯ãäœæãããåã«äœæãããããããã¹ãŠã®ãã¢ã¡ã¿ã«æäžå±€ã䜿çšããå¿ èŠããããŸãã ãŸãããã¬ãŒã ã¯ãŒã¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã«å¿ èŠãªãã®ããã¹ãŠæãåã«ãæ°ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãšãã£ã·ã§ã³ãããã€ã¹ãèµ·åãããšãã«æåã«è¡šç€ºããå¿ èŠãããã®ã¯ãå¯èœãªéãäœãã¬ãã«/ããã ã¬ãã«ãç¶æããããã§ããåäœããŸãã ãŸããC / C ++ã§èšè¿°ãããŠãããå¯èœãªéãäœãããã¢ã¡ã¿ã«ã§ãããã®UIã®æ©èœåŒ·åã¯ãWindowsäžã®ä»ã®ã¢ããªã«ãé©çšãããŸããïŒ ã»ãŒééããªãããã§ã¯ãããŸããã 圌ãã¯ããŸãã«ãå€ãã®ããšãèµ·ãã£ãŠãããããã¯è¯ãããšã§ãæªãããšã§ããããŸãã æåã§ãã¯ã»ã«ãèšç®ãããããã©ã³ãã«é©çšãããã¹ã¿ã€ã«ãæ°ã«ãããããã«ã1ã€ã®ã¡ãœãããåŒã³åºããŠãããã¹ããè€éã§ãªãæ¹æ³ã§ä»»æã®èšèªã§ã¬ã€ã¢ãŠãã§ããããšã«å«åŠ¬ããŠããŸãã ããããç§ã®æåã®ãã¯ã»ã«èšç®ãããŒãã£ãªãŒãžã§ã³ã®èšç®ãã¹ã¯ããŒã«ãªãŒãžã§ã³ã®çæ°ãªã©ã«ãããããããããé«éã«ãªããŸãã ãŸãã誰ããããŠã£ã³ããŠã®äžéšã«ã¹ããŒã¿ã¹ããŒãè¿œå ã§ããŸããããšèšããšãUIãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠã¯ãªãã¯ããŠãã©ãã°ã§ããã®ã§ãç§ãã¡ã®å Žåã¯ã©ãã§ãæ©èœããã®ã§ãããããŸããã§ããæ°žé ã«ããã¯ãã°ã¢ã€ãã ã§ãããå®è£ ã«ã€ããŠèããèžçŒããäžããŠãããŸãã
ãããåŸéããªãããã«ããããšããŸããïŒ ã¯ãïŒ ä»ã®ãšãããããã¯äžçš®ã®æåããã»ã¹ã§ãã äœããé ããªã£ãŠããããšã確èªããŠããã WPRãå®è¡ãããã¬ãŒã¹ãéå§ããŸãã ç§ãã¡ã¯ããããã¹ãèŠã€ããäœãèµ·ãã£ãŠããã®ããæšè«ãããããæ¹åããããšããŸãã ããšãã°ãæåŸã®1ã2ãµã€ã¯ã«ã§ã¯ããšã³ãããŒãšã³ãã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããäž»èŠãªé åãšããŠããŒãå²ãåœãŠã«çŠç¹ãåœãŠãåºã«ãªããªã¯ãšã¹ãã«å¯ŸããŠã¹ã¿ãã¯æ§ç¯ãããã€ãã¬ãŒã¿ã®ãããªãã¡ãµãŒãã䜿çšããããã«ã³ãŒãã倧éã«å€æŽããŸããåŠçã®åã¬ãã«ã®æ°ããããŒãã¹ããŒã¹ã«å€æããŠå²ãåœãŠã代ããã«ããããã¡ã
äœè«ã§ããã @ bitcrazedã¯ãã³ã³ãã¹ãåºæã®æ¹æ³ã§ããã©ãŒãã³ã¹ãã¹ããèªååããããšãæãã§ããŸããããããå®è¡ããããã®å¶åŸ¡ãããç°å¢ããŸã å®å šã«ã¯ç解ããŠããŸããã Windowsãšã³ãžãã¢ãªã³ã°ã·ã¹ãã ã¯æ¯æ©ããã©ãŒãã³ã¹ãã¹ããå®è¡ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã å šäœã§äœããå°ç¡ãã«ãããã©ããã倧ãŸãã«ç¥ãæ¹æ³ãæäŸããæè¡çã«ã¯ç¬èªã®ããã©ãŒãã³ã¹ãã¹ããæ¿å ¥ããããã®ãã现ããæ¹æ³ãæäŸããŸã...ãããç§ã¯ãŸã ãããåé¿ããŠããŸããã èªååãããæ¹æ³ã§ãããè¡ãæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ãããã°ãç§ã¯ãã¹ãŠã®è³ã§ãã
ä»ã«ç¥ãããããšãããã°æããŠãã ããã ç§ã¯äžæ¥äžè¡ãããšãã§ããŸããã æçš¿ããåã«ããã®è¿ä¿¡ãã15åã®æ¥ç·ãåé€ããŸããã