ã¯ããã«
ã¢ãžã¢ã®èšèªæåã§ã¯ãæšæºã®ããŒããŒãã¬ã€ã¢ãŠãã«å¿ ãããåãŸããªãæåãå€æ°ãããŸãã ãããã®æåãå ¥åããããã«ãå ¥åãããŒãžã£ãŒãšãã£ã¿ãŒïŒãã·ã¢èªããå ¥åã¡ãœãããšãã£ã¿ãŒãïŒãšåŒã°ããç¹å¥ãªæè¡ãéçºãããŸããã å ¥åæ¹åŒãšãã£ã¿ãŒïŒIMEïŒã¯ããŠãŒã¶ãŒãããŒããŒãã«ç©ççã«ååšããªãæåãå ¥åã§ããããã«ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããã°ã©ã ãŸãã¯ã³ã³ããŒãã³ãã§ãã
ãã€ã³ãããã¡ãœãããšãã£ã¿ãïŒIMEïŒãšããçšèªã¯ããšããšMicrosoft Windowsã§ã®ã¿äœ¿çšãããŠãããšããäºå®ã«ãããããããã€ã³ãããã¡ãœãããæäŸããããã°ã©ã ã®æ©èœãšã€ã³ãããã¡ãœããã®äžè¬çãªãµããŒãããåºå¥ããããšãéèŠãªå ŽåãçŸåšä»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§äœ¿çšãããŠããŸããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã
ãå ¥åæ¹æ³ããšããçšèªã¯ãéåžžãTsanjieããã³ã€ã³ã䜿çšããå ¥åããŸãã¯ãããããããŒã®äœ¿çšãªã©ãèšèªã®ç¹å®ã®ããŒããŒãå ¥åæ¹æ³ãæå³ããŸãã
ãå ¥åæ¹åŒãšãã£ã¿ãŒããšããçšèªã¯ãéåžžãå ¥åæ¹åŒïŒSCIMãMicrosoft IMEãªã©ïŒã䜿çšã§ããç¹å®ã®ããã°ã©ã ãæå³ããŸãã
ããã©ã«ãã®IMEã·ã¹ãã
èšèªã«ã«ãã£ã«å«ãŸããæåã100æå以äžã®å ŽåãããŒããŒãããå ¥åãããšãã«ãã¿ã€ãã©ã€ã¿ãŒã®å Žåã®ããã«ãæŒãããè€æ°ã®ããŒã1æåã«å€æããå¿ èŠã¯ãããŸããã ææ°ã®ããŒããŒãã®å Žåããã®èŠåã¯éèŠã§ããããšãã°ãQWERTYããŒããŒãã«ã¯102åã®ããŒãšããã€ãã®ä¿®é£Ÿåãå«ãŸããŸãã ãã ããèšèªã®æåæ°ã100æåãè¶ ããå Žåãå ¥åããæåãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããåã«ãå ¥åããæåã®çµã¿åãããå€æããå¿ èŠããããŸãã ãã®ããã»ã¹ã¯ãéä¿¡ããã»ã¹ãïŒFEPïŒãšåŒã°ããIMEã¯Windowsäžã®FEPã®æšæºçãªæ¹æ³ã§ãã
ããã©ã«ãã§ã¯ãIMEã¯éžæãããèšèªã®é³ç¯é³å£°å ¥åã«ãŒãã䜿çšããŸãã éåžžã®ã·ããªãªã§ã¯ããŠãŒã¶ãŒã¯ç¹å®ã®é³ç¯ã®çºé³ã«å«ãŸããã©ãã³æåãå ¥åããŸãã IMEãå ¥åãããé³ç¯ãèªèãããšããŠãŒã¶ãŒã«åè£ã®åèªãŸãã¯ãã¬ãŒãºã®ãªã¹ãã衚瀺ããããŠãŒã¶ãŒã¯ããããæçµããŒãžã§ã³ãéžæã§ããŸãã éžæãããåèªã¯ãäžé£ã®Microsoft Windowsã¡ãã»ãŒãž-WM_CHARãä»ããŠã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ãããŸãã IMEã¯ïŒããŒããŒãå ¥åãã€ã³ã¿ãŒã»ããããããšã«ããïŒéåžžã®ã¢ããªã±ãŒã·ã§ã³ãããäœãã¬ãã«ã§åäœãããããIMEã®ååšã¯ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠééçã§ãã ã»ãšãã©ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠã¯ããã®ååšãç¥ãããç¹å¥ãªã³ãŒãã£ã³ã°ãå¿ èŠãšããã«ãIMEãç°¡åã«äœ¿çšã§ããŸãã
éžæããèšèªã·ã¹ãã ã«å¿ããŠã2ã€ãŸãã¯3ã€ã®æ®µéã§1ã€ã®åèªãå ¥åã§ããŸãã
ããšãã°ãæ¥æ¬èªã®ã¹ã¯ãªããïŒ
- ãŠãŒã¶ãŒã¯ã©ãã³èªã§é³ç¯ã®æå®ãå ¥åããŸãã ããšãã°ããtsunamiããšããåèªã¯ãtsunamiããšå ¥åãããŸãã
- ã©ãã³èªã§å ¥åãããé³ç¯ã¯ãã²ãããªãŸãã¯ã«ã¿ã«ãã®æåã«èªåçã«çœ®ãæããããŸãã ã²ãããªãšã«ã¿ã«ãã¯ãæ¥æ¬èªã®åé³ã«ç¬èªã®ç¹åŸŽãããé³ç¯æåã§ãã ããšãã°ããŠãŒã¶ãŒãã²ãããªãéžæããå Žåããã€ãã¯èªåçã«ãã€ãããnaã->ããªãããmiã->ãã¿ãã«çœ®ãæããããŸãã
- ãŠãŒã¶ãŒã¯ãåèªãã²ãããªã§èšé²ãããŸãŸã«ããŠã象圢æåã«å€æã§ããŸãã 象圢æåãžã®å€æã¯T9å ¥åã·ã¹ãã ã«äŒŒãŠããŸããææªã®å ŽåããŠãŒã¶ãŒã«ã¯ãªãã·ã§ã³ã®ãªã¹ãã衚瀺ããããããã1ã€ã®ãªãã·ã§ã³ãéžæããå¿ èŠããããŸãã ã²ãããªã®æŽ¥æ³¢ã®äŸã§ã¯ãã€ãªã¿ã¯è±¡åœ¢æåã®æŽ¥æ³¢ã«å€ãããŸãã 3çªç®ã®æ®µéã§ã¯ãéåžžãSpaceãããEnterããç¢å°ããnumpadãããŒã䜿çšããŠå€æãå¶åŸ¡ã§ããŸãã ããšãã°ãã¹ããŒã¹ã¯ã²ãããªãã象圢æåã«å€æãããå¥ã®ã¹ããŒã¹ã¯çœ®æãªãã·ã§ã³ä»ãã®ãªã¹ãã衚瀺ããŸãããEnterãã¯å€æãçµäºããå ¥åãããæåãããã®ãŸãŸãæ®ãããšãæå³ããŸãã
æåã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ããŠãŒã¶ãŒããæ§ææååããšåŒã°ããäžé£ã®æåãå ¥åããæ¹æ³ã瀺ããŠããŸãïŒenããæ§ææååãïŒã 2ã€ã®ææ¡ãããã·ã³ãã«ã®ã·ãŒã±ã³ã¹ãããŒãããã¯ã®1ã€ã®ã·ã³ãã«ãFãã«å€æãããããšã«æ³šæããŠãã ããã
2çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ããŠãŒã¶ãŒãé³ç¯ã®å ¥åãå®äºããããšã瀺ããIMEã·ã¹ãã ã¯é©åãªåèªã®éžæãææ¡ããŸãïŒãŠãŒã¶ãŒããã¹ããŒã¹ããæŒããïŒã ãŠãŒã¶ãŒã¯ãEnterããæŒããŠåèªã確èªã§ããŸãã
EnterããŒãæŒããŠå ¥åããåèªã確èªãããšãã¢ããªã±ãŒã·ã§ã³ïŒãã®äŸã§ã¯ã¡ã¢åž³ïŒã¯ãWM_IME_CHARã¡ãã»ãŒãžã®åœ¢åŒã§çµæã®æååãåãåããŸãã ãã®åŸãã¢ããªã±ãŒã·ã§ã³ããã®ã¡ãã»ãŒãžãåŠçããªãå ŽåãIMEã·ã¹ãã ããæšæºã®WM_CHARã¡ãã»ãŒãžãåãåããŸãã
ããã©ã«ãã®IMEåäœãäžæžããã
éåžžãIMEã¯æšæºã®Windowsããã·ãŒãžã£ã䜿çšããŠïŒWinAPIã䜿çšããŠïŒãŠã£ã³ããŠãäœæããŸãã
泚ïŒããšãã°ã²ãŒã ã®å Žåã®ããã«ãã¢ããªã±ãŒã·ã§ã³ãå šç»é¢ã¢ãŒãã§å®è¡ãããŠããå ŽåãæšæºãŠã£ã³ããŠã¯æ©èœãããã¢ããªã±ãŒã·ã§ã³ã®äžã«è¡šç€ºã§ããŸããã ãã®åé¡ã解決ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãIMEã¡ãã»ãŒãžãç¬èªã«åŠçããIMEãŠã£ã³ããŠã«äŸåããã«ãã®ã¿ã¹ã¯ãå®äºããå¿ èŠããããŸãã
ããã©ã«ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯IMEé¢é£ã®ã¡ãã»ãŒãžãåŠçããInput Method ManagerïŒIMMïŒãåŒã³åºãããšã«ãããIMEã©ã€ãã©ãªãçŽæ¥äœ¿çšã§ããŸãã
ãŠãŒã¶ãŒãIMEã¬ã€ã¢ãŠãã䜿çšããŠè€éãªæåãå ¥åãããšãIMMã¯ã¢ããªã±ãŒã·ã§ã³ã«ã¡ãã»ãŒãžãéä¿¡ããŠãäœæãŠã£ã³ããŠã®èµ·åããåèªåè£ã®ãªã¹ãã®è¡šç€ºããªã©ã®éèŠãªã€ãã³ããéç¥ããŸãã éåžžãã¢ããªã±ãŒã·ã§ã³ã¯ãããã®ã¡ãã»ãŒãžãç¡èŠããããã©ã«ãã§Windowsã¡ãã»ãŒãžãã³ãã©ãŒã«æž¡ããŸããããã«ãããIMEã©ã€ãã©ãªãåŒã³åºãããŸãã
ããã»ã¹å³ïŒå³2ïŒã¯ãããã¹ãå ¥åããã»ã¹ãã©ã®ããã«çºçãããã瀺ããŠããŸãã
- IMMã¯ãããŒããŒããã©ã€ããŒããããŒã¹ãããŒã¯ãåãåããšãImeProcessKeyé¢æ°ãåŒã³åºããŠä»®æ³æåãIMEã·ã¹ãã ã«éä¿¡ããŸãã ãã®é¢æ°ã®çµæãã0ãã®å ŽåãããŒã¹ãããŒã¯ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã¢ããªã±ãŒã·ã§ã³èªäœã§åŠçããå¿ èŠããããŸãã ã¡ãã»ãŒãžWM_KEYDOWNããã³WM_KEYUPã次ã«WM_CHARãŸãã¯WM_COMMANDãã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ãããŸãã
- IMEã·ã¹ãã ãã0ã以å€ã®çµæãè¿ããå ŽåãIMMã¯æŒãããæåãéä¿¡ããIMEã©ã€ãã©ãªã®ãImeToAsciiExãé¢æ°ãåŒã³åºããŸãã
- IMEã·ã¹ãã ã¯ãã¢ããªã±ãŒã·ã§ã³ã«æž¡ãå¿ èŠã®ããWindowsã¡ãã»ãŒãžãå«ããlpdwTransBufããã©ã¡ãŒã¿ãŒãè¿ããŸãã IMEã·ã¹ãã ã¯ããæ§ææååãã瀺ãããŠãããã©ã¡ãŒã¿ãŒãšããŠhIMCãåãå ¥ããŸãã æäœäžãIMEã·ã¹ãã ã¯hIMCã¡ã¢ãªé åã®å 容ãå€æŽããŸãã
- IMMã¯ãlpdwTransBufããã©ã¡ãŒã¿ãŒãåä¿¡ãããã³ã«ããã®ãããã¡ãŒã«ã¢ããªã±ãŒã·ã§ã³ã®ã¡ãã»ãŒãžãå«ãŸããŠãããã©ããã確èªããŸãã éåžžããããã¡ã«ã¯WM_IME_COMPOSITIONã¡ãã»ãŒãžãå«ãŸããŠãããæ§æè¡ãå€æŽããããã³ã«ã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããå¿ èŠããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãIMEããµããŒãããŠããªãå ŽåãWM_IME_COMPOSITIONã¡ãã»ãŒãžã¯åŠçãããŸããã ãããã£ãŠããŠãŒã¶ãŒã«ã¯å ¥åã衚瀺ãããŸããã ãã®å Žåãã¡ãã»ãŒãžã¯å¯Ÿå¿ããIME UIãŠã£ã³ããŠïŒãImeInquireãé¢æ°ã§ã®åæåäžã«IMEã·ã¹ãã ã«ãã£ãŠäœæãããŸãïŒã«éä¿¡ãããŸããããã¯ãIMEãã¢ã¯ãã£ãåããããšåžžã«äœæãããŸãã IMEãŠã£ã³ããŠã«ã¯ããŠãŒã¶ãŒãå ¥åããæ§æè¡ã衚瀺ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãIMEããµããŒãããŠããå ŽåãWM_IME_COMPOSITIONã¡ãã»ãŒãžãåŠçããŸãã æ§ææååã®å 容ãååŸããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ã©ã€ãã©ãªãImm32.dllãããé¢æ°ãImmGetCompositionStringããåŒã³åºããŸãã WM_IME_COMPOSITIONã¡ãã»ãŒãžã¯ãæååãçæãããããšãã¢ããªã±ãŒã·ã§ã³ã«éç¥ããå ŽåããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãIMMããæ§ææååãåä¿¡ããå ŽåãWM_IME_CHARã¡ãã»ãŒãžã«å¯ŸããŠDefWindowProcé¢æ°ãåŒã³åºãå¿ èŠããããŸãã ããã«åŠçãããšããã®ã¡ãã»ãŒãžãåã³çæãããå ŽåããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãIMEããµããŒãããŠããªãå ŽåãWM_IME_CHARã¡ãã»ãŒãžãåãåããŸãã ã¢ããªã±ãŒã·ã§ã³ãUnicodeããµããŒãããŠããå Žåããã©ã¡ãŒã¿ãŒã§Unicodeæåãæž¡ãããŸããããã§ãªãå Žåãã¢ããªã±ãŒã·ã§ã³ã¯WM_CHARã¡ãã»ãŒãžãåãåããŸãããæåãå€æããå¿ èŠãããããšãããããŸãã
- ãã®çµæãã¢ããªã±ãŒã·ã§ã³ã¯åžžã«WM_CHARã¡ãã»ãŒãžãåä¿¡ããæåãå€æãããã©ãããèªèããŸãã
IMEã©ã€ãã©ãªã¯éåžžã®æ¡åŒµåãã.imeãã®éåžžã®DLLãã¡ã€ã«ã§ãã åIMEã·ã¹ãã ã¯ãMicrosoft Windowsã®ã¬ãžã¹ããªãHKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet00X \ Keyboard Layoutsãã«ç»é²ããå¿ èŠããããŸãã ã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ããããŒããŒãã³ã³ããã¹ãããã€ã§ãååŸã§ããŸãã
IMEã·ã¹ãã ã䜿çšããå Žåã®æœåšçãªè åš
IMEã·ã¹ãã ãå«ãåããŒããŒãã¬ã€ã¢ãŠãã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã¹ãŠã®ããã»ã¹ã«åžžã«èªã¿èŸŒãŸããŸãã ãŠãŒã¶ãŒç°å¢ã§å®è¡ãããŠããéåžžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ãã¬ã¹ç©ºéãžã®ããŒããŒãã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ãçŠæ¢ã§ããŸããã IMEã©ã€ãã©ãªã¯ãWindowsã©ã€ãã©ãªãšåæ§ã«ããªãŒããŒã©ã€ãå¯èœãªããã€ãã®é¢æ°ããšã¯ã¹ããŒãããããã«å¿ èŠã§ãã ãŸããã©ã€ãã©ãªãããŒããããšãDLLMainé¢æ°ãåžžã«åŒã³åºãããŸãã
ããŒãã¬ãŒãªã©ã®æ»æãå®è£ ããã«ã¯ãæ»æè ã¯ãããŒããŒãã¬ã€ã¢ãŠãïŒããšãã°ãUSãUKãRUãCHãJPãKRã®IMEïŒã«å¯ŸããŠIMEã·ã¹ãã ãäœæããã ãã§ããããŠã£ã³ããŠã衚瀺ãããæåãå€æããŸãã ã€ãŸã ãŠãŒã¶ãŒã«ã¯èŠããªããªããŸãã
äžèšã®ããã«ãIMMãããŒãžã£ãŒã¯åžžã«ãéžæããIMEã·ã¹ãã ã«ããŒã¹ãããŒã¯ã³ãŒããæž¡ããIMEã©ã€ãã©ãªãããšã¯ã¹ããŒããããImeProcessKeyããã³ImeToAsciiExé¢æ°ãåŒã³åºããŸãã
ããŒã¹ãããŒã¯ãã€ã³ã¿ãŒã»ããããæãç°¡åãªæ¹æ³ã¯ããImeProcessKeyãé¢æ°ã䜿çšããããšã§ãããã®é¢æ°ã¯ãåžžã«ã0ããè¿ããŠãç¹å®ã®æåã®ã¡ãã»ãŒãžããã以äžåŠçãããªãããã«ããŸãã ãªããªã IMEã©ã€ãã©ãªããã¹ãŠã®ããã»ã¹ã«ããŒãããããšããŠãŒã¶ãŒã¯æšæºçãªæ段ã§çãããã¢ã¯ãã£ããã£ã«æ°ä»ãããšãã§ããªããªããŸãïŒããšãã°ãIMEã©ã€ãã©ãªã«ã¯å¥ã®ããã»ã¹ã¯ãããŸããïŒã
ãŸããImeProcessKeyããŒã以å€ã®å€ãè¿ãå ŽåãããŒã€ã³ã¿ãŒã»ããã¯ImeToAsciiExé¢æ°ã§å®è¡ã§ããŸãããæŒãããããŒã®ã¹ãã£ã³ã³ãŒããç®çã®ãšã³ã³ãŒãã®æåã«å€æããå¿ èŠããããŸããããã¯ç°¡åãªæäœã§ãã
ããæªè³ªãªã¢ã¯ã·ã§ã³
眲åãããïŒæ³çïŒIMEã©ã€ãã©ãªãã¡ã€ã«ã¯ããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒããç°¡åã«åé€ã§ããŸãã IMEã©ã€ãã©ãªããµã€ããŒç¯çœªè ã«ãã£ãŠäœæãããå Žåãæ³çã©ã€ãã©ãªã®ä»£ããã«è¿œå ã§ããŸãã ããã«ããã次ã®è åšãçºçããå¯èœæ§ããããŸãã
- æªæã®ããIMEã¯ããã¹ãŠã®ãŠãŒã¶ãŒã®æšæºIMEãå€æŽã§ããŸãã
- ãŠãŒã¶ãŒãããã©ã«ãã®IMEãå€æŽããŠãããã§ã«éžæãããŠããIMEãšãã£ã¿ãŒã¯å€æŽãããŸããã ãŠãŒã¶ãŒã¯OSã«ãã°ã€ã³ããããã³ã³ãã¥ãŒã¿ãŒãåèµ·åããå¿ èŠããããŸãã
- IMEã©ã€ãã©ãªãå¥ã®ã¹ã¬ããã§å®è¡ãããŠããå ŽåãåŒãç¶ãåäœããŸãã ãŠãŒã¶ãŒã¯æšæºçãªæ¹æ³ã§ã¯å®äºã§ããŸããã
- æ»æè ã¯ã¬ãžã¹ããªã®å€æŽã«ç¹å¥ãªæš©éãèšå®ããŠãIMEã©ã€ãã©ãªã®åé€ãå°é£ã«ããããšãã§ããŸãã
- IMEã¯ã16ãããã¢ããªã±ãŒã·ã§ã³ããã³ã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ã§ãããŒãããŸãã
- IMEã¯WinSockãµãã·ã¹ãã ãããŠã³ããŒãããŠãã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ã§ããŸãã