Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒããŒããšããŠã¹ããã®ãŠãŒã¶ãŒå ¥åãåãå ¥ããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ããŠã£ã³ããŠã«æçš¿ãããã¡ãã»ãŒãžã®åœ¢åŒã§ããŒããŒãå ¥åãåãåããŸãã
ããŒããŒãå ¥åã¢ãã«
ã·ã¹ãã ã¯ãçŸåšã®ããŒããŒãã«é©ããããŒããŒã ããã€ã¹ ãã©ã€ããŒãã€ã³ã¹ããŒã«ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã€ã¹ã«äŸåããªãããŒããŒã ãµããŒããæäŸããŸãã ã·ã¹ãã ã¯ããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠçŸåšéžæãããŠããèšèªåºæã®ããŒããŒã ã¬ã€ã¢ãŠãã䜿çšããŠãèšèªã«äŸåããªãããŒããŒã ãµããŒããæäŸããŸãã ããŒããŒã ããã€ã¹ ãã©ã€ããŒã¯ãããŒããŒãããã¹ãã£ã³ ã³ãŒããåãåããããŒããŒã ã¬ã€ã¢ãŠãã«éä¿¡ãããã¡ãã»ãŒãžã«å€æãããã¢ããªã±ãŒã·ã§ã³å ã®é©åãªãŠã£ã³ããŠã«æçš¿ãããŸãã
ããŒããŒãã®åããŒã«å²ãåœãŠãããã®ã¯ã ã¹ãã£ã³ ã³ãŒããšåŒã°ããäžæã®å€ã§ãããããŒããŒãã®ããŒã®ããã€ã¹ã«äŸåããèå¥åã§ãã ããŒããŒãã¯ããŠãŒã¶ãŒãããŒãå ¥åãããš 2 ã€ã®ã¹ãã£ã³ ã³ãŒããçæããŸãã1 ã€ã¯ãŠãŒã¶ãŒãããŒãæŒãããšããšããŠãŒã¶ãŒãããŒãé¢ãããšãã§ãã
ããŒããŒã ããã€ã¹ ãã©ã€ããŒã¯ãã¹ãã£ã³ ã³ãŒããè§£éããããã ä»®æ³ã㌠ã³ãŒã (ããŒã®ç®çãèå¥ããã·ã¹ãã ã«ãã£ãŠå®çŸ©ãããããã€ã¹ã«äŸåããªãå€) ã«å€æ (ããã) ããŸãã ã¹ãã£ã³ ã³ãŒãã倿ãããšãããŒããŒã ã¬ã€ã¢ãŠãã«ãã£ãŠãã¹ãã£ã³ ã³ãŒããä»®æ³ã㌠ã³ãŒããããŒã¹ãããŒã¯ã«é¢ãããã®ä»ã®æ å ±ãå«ãã¡ãã»ãŒãžãäœæãããã¡ãã»ãŒãžãã·ã¹ãã ã¡ãã»ãŒãž ãã¥ãŒã«é 眮ãããŸãã ã·ã¹ãã ã¯ãã·ã¹ãã ã»ã¡ãã»ãŒãžåŸ ã¡è¡åããã¡ãã»ãŒãžãé€å»ãããããé©åãªã¹ã¬ããã®ã¡ãã»ãŒãžåŸ ã¡è¡åã«ãã¹ãããŸãã æçµçã«ãã¹ã¬ããã®ã¡ãã»ãŒãž ã«ãŒãã¯ã¡ãã»ãŒãžãåé€ããåŠçã®ããã«é©åãªãŠã£ã³ã㊠ããã·ãŒãžã£ã«æž¡ããŸãã æ¬¡ã®å³ã¯ãããŒããŒãå ¥åã¢ãã«ã瀺ããŠããŸãã
ããŒããŒã ãã©ãŒã«ã¹ãšã¢ã¯ãã£ãå
ã·ã¹ãã ã¯ãããŒããŒã ãã©ãŒã«ã¹ã䜿çšããŠãŠã£ã³ããŠãäœæãããã©ã¢ã°ã©ãŠã³ã ã¹ã¬ããã®ã¡ãã»ãŒãž ãã¥ãŒã«ããŒããŒã ã¡ãã»ãŒãžããã¹ãããŸãã ããŒããŒã ãã©ãŒã«ã¹ã¯ããŠã£ã³ããŠã®äžæçãªããããã£ã§ãã ã·ã¹ãã ã¯ãããŒããŒããã©ãŒã«ã¹ããŠãŒã¶ãŒã®æ¹åã«ããããŠã£ã³ããŠããå¥ã®ãŠã£ã³ããŠã«ã·ããããããšã§ããã£ã¹ãã¬ã€äžã®ãã¹ãŠã®ãŠã£ã³ããŠéã§ããŒããŒããå ±æããŸãã ããŒããŒã ãã©ãŒã«ã¹ããããŠã£ã³ããŠã¯ããã©ãŒã«ã¹ãå¥ã®ãŠã£ã³ããŠã«å€ãããŸã§ããã¹ãŠã®ããŒããŒã ã¡ãã»ãŒãžã (äœæããã¹ã¬ããã®ã¡ãã»ãŒãž ãã¥ãŒãã) åãåããŸãã
ã¹ã¬ãã㯠GetFocus 颿°ãåŒã³åºããŠãçŸåšããŒããŒã ãã©ãŒã«ã¹ãæã£ãŠãããŠã£ã³ã㊠(ååšããå Žå) ãæ±ºå®ã§ããŸãã ã¹ã¬ãã㯠ãSetFocus 颿°ãåŒã³åºãããšã«ãã£ãŠãããããã®ãŠã£ã³ããŠã«ããŒããŒã ãã©ãŒã«ã¹ãäžããããšãã§ããŸãã ããŒããŒããã©ãŒã«ã¹ããŠã£ã³ããŠéã§å€åãããšãã·ã¹ãã ã¯ãã©ãŒã«ã¹ã倱ã£ããŠã£ã³ããŠã« WM_KILLFOCUS ã¡ãã»ãŒãžãéä¿¡ãããã©ãŒã«ã¹ãååŸãããŠã£ã³ããŠã« WM_SETFOCUS ã¡ãã»ãŒãžãéä¿¡ããŸãã
ããŒããŒã ãã©ãŒã«ã¹ã®æŠå¿µã¯ãã¢ã¯ãã£ã ãŠã£ã³ããŠã®æŠå¿µã«é¢é£ããŠããŸãã ã¢ã¯ãã£ã ãŠã£ã³ããŠã¯ããŠãŒã¶ãŒãçŸåšæäœããŠããæäžäœã®ãŠã£ã³ããŠã§ãã ããŒããŒã ãã©ãŒã«ã¹ããããŠã£ã³ããŠã¯ãã¢ã¯ãã£ããŠã£ã³ããŠãŸãã¯ã¢ã¯ãã£ããŠã£ã³ããŠã®åãŠã£ã³ããŠã§ãã ãŠãŒã¶ãŒãã¢ã¯ãã£ããŠã£ã³ããŠãèå¥ããããããããã«ãã·ã¹ãã ã¯ãããZãªãŒããŒã®äžçªäžã«é 眮ããã¿ã€ãã«ããŒ(ããå Žå)ãšå¢çç·ã匷調衚瀺ããŸãã
ãŠãŒã¶ãŒã¯ããããã¬ãã« ãŠã£ã³ããŠãã¯ãªãã¯ãããã Alt + Tab ããŒãŸã㯠Alt +Esc ããŒã®çµã¿åããã䜿çšããŠéžæããããã¿ã¹ã¯ ãªã¹ãããéžæããããšã§ã¢ã¯ãã£ãåã§ããŸãã ã¹ã¬ãã㯠ãSetActiveWindow 颿°ã䜿çšããŠãããã¬ãã« ãŠã£ã³ããŠãã¢ã¯ãã£ãåã§ããŸãã äœæããæäžäœãŠã£ã³ããŠãã¢ã¯ãã£ããã©ããã倿ããã«ã¯ã GetActiveWindow 颿°ã䜿çšããŸãã
1 ã€ã®ãŠã£ã³ããŠãéã¢ã¯ãã£ãåãããå¥ã®ãŠã£ã³ããŠãã¢ã¯ãã£ãã«ãªããšã WM_ACTIVATE ã¡ãã»ãŒãžãéä¿¡ãããŸãã ãŠã£ã³ããŠãéã¢ã¯ãã£ãåãããŠããå Žåã wParam ãã©ã¡ãŒã¿ãŒã®äžäœã¯ãŒã㯠0 ã§ãã¢ã¯ãã£ãåãããŠããå Žå㯠0 以å€ã§ãã æ¢å®ã®ãŠã£ã³ã㊠ããã·ãŒãžã£ã¯ã WM_ACTIVATE ã¡ãã»ãŒãžãåãåããšãããŒããŒã ãã©ãŒã«ã¹ãã¢ã¯ãã£ã ãŠã£ã³ããŠã«èšå®ããŸãã
ããŒããŒããšããŠã¹ã®å ¥åã€ãã³ããã¢ããªã±ãŒã·ã§ã³ã«å°éããã®ããããã¯ããã«ã¯ã BlockInput ã䜿çšããŸãã BlockInput 颿°ã¯ãéåæããŒããŒãå ¥åç¶æ ããŒãã«ã«å¹²æžããªãããšã«æ³šæããŠãã ããã ã€ãŸããå ¥åããããã¯ãããŠããéã« SendInput 颿°ãåŒã³åºããšãéåæããŒããŒãå ¥åç¶æ ããŒãã«ã倿ŽãããŸãã
ããŒã¹ãããŒã¯ ã¡ãã»ãŒãž
ããŒãæŒããšãããŒããŒã ãã©ãŒã«ã¹ããããŠã£ã³ããŠã«æ¥ç¶ãããŠããã¹ã¬ãã ã¡ãã»ãŒãž ãã¥ãŒã«WM_KEYDOWNãŸãã¯WM_SYSKEYDOWNã¡ãã»ãŒãžãé 眮ãããŸãã ããŒãè§£æŸãããšã WM_KEYUP ãŸã㯠WM_SYSKEYUP ã¡ãã»ãŒãžããã¥ãŒã«é 眮ãããŸãã
éåžžãããŒã¢ããã¡ãã»ãŒãžãšããŒããŠã³ã¡ãã»ãŒãžã¯ãã¢ã§è¡ãããŸããããŠãŒã¶ãŒãããŒããŒãã®èªåç¹°ãè¿ãæ©èœãéå§ããã®ã«ååãªé·ãã®ããŒãæŒããšãã·ã¹ãã ã¯å€æ°ã® WM_KEYDOWN ãŸã㯠WM_SYSKEYDOWN ã¡ãã»ãŒãžãé£ç¶ããŠçæããŸãã ãã®åŸããŠãŒã¶ãŒãããŒãè§£æŸãããšã1 ã€ã® WM_KEYUP ãŸã㯠WM_SYSKEYUP ã¡ãã»ãŒãžãçæãããŸãã
ãã®ã»ã¯ã·ã§ã³ã¯ã次ã®ãããã¯ã§æ§æãããŠããŸãã
- ã·ã¹ãã ããŒã¹ãããŒã¯ãšéã·ã¹ãã ããŒã¹ãããŒã¯
- Virtual-Key ã³ãŒãã«ã€ããŠèª¬æ
- ããŒã¹ãããŒã¯ ã¡ãã»ãŒãž ãã©ã°
ã·ã¹ãã ããŒã¹ãããŒã¯ãšéã·ã¹ãã ããŒã¹ãããŒã¯
ã·ã¹ãã ã¯ãã·ã¹ãã ããŒã¹ãããŒã¯ãšéã·ã¹ãã ããŒã¹ãããŒã¯ãåºå¥ããŸãã ã·ã¹ãã ããŒã¹ãããŒã¯ã¯ãã·ã¹ãã ããŒã¹ãããŒã¯ã¡ãã»ãŒãžã WM_SYSKEYDOWN ããã³ WM_SYSKEYUPãçæããŸãã éã·ã¹ãã ããŒã¹ãããŒã¯ã§ã¯ãéã·ã¹ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã WM_KEYDOWN ã ããã³WM_KEYUPãçæãããŸãã
ãŠã£ã³ã㊠ããã·ãŒãžã£ãã·ã¹ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãåŠçããå¿ èŠãããå Žåã¯ãã¡ãã»ãŒãžã®åŠçåŸã«ããã·ãŒãžã£ã DefWindowProc 颿°ã«æž¡ãããããšã確èªããŸãã ãã以å€ã®å ŽåããŠã£ã³ããŠã«ããŒããŒã ãã©ãŒã«ã¹ãããå Žåã¯åžžã« ãAlt ããŒã«é¢é£ãããã¹ãŠã®ã·ã¹ãã æäœãç¡å¹ã«ãªããŸãã ã€ãŸãããŠãŒã¶ãŒã¯ãŠã£ã³ããŠã®ã¡ãã¥ãŒãã·ã¹ãã ã¡ãã¥ãŒã«ã¢ã¯ã»ã¹ãããã Alt + Esc ããŒãŸã㯠Alt + Tab ããŒã¹ãããŒã¯ã䜿çšããŠå¥ã®ãŠã£ã³ããŠãã¢ã¯ãã£ãåãããããããšã¯ã§ããŸããã
ã·ã¹ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã¯ãäž»ã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãã·ã¹ãã ã§äœ¿çšãããŸãã ã·ã¹ãã ã¯ãããã䜿çšããŠãçµã¿èŸŒã¿ã®ããŒããŒã ã€ã³ã¿ãŒãã§ã€ã¹ãã¡ãã¥ãŒã«æäŸãããŠãŒã¶ãŒãã¢ã¯ãã£ããªãŠã£ã³ããŠãå¶åŸ¡ã§ããããã«ããŸãã ã·ã¹ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã¯ããŠãŒã¶ãŒã Alt ããŒãšçµã¿åãããŠããŒãå ¥åãããšãããŸãã¯ãŠãŒã¶ãŒãå ¥åãããŠã£ã³ããŠã«ããŒããŒã ãã©ãŒã«ã¹ããªãå Žå (ã¢ã¯ãã£ããªã¢ããªã±ãŒã·ã§ã³ãæå°åãããŠããå Žåãªã©) ã«çæãããŸãã ãã®å Žåãã¡ãã»ãŒãžã¯ãã¢ã¯ãã£ã ãŠã£ã³ããŠã«æ¥ç¶ãããŠããã¡ãã»ãŒãž ãã¥ãŒã«ãã¹ããããŸãã
éã·ã¹ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ ãŠã£ã³ããŠã§äœ¿çšãããŸãã DefWindowProc 颿°ã§ã¯äœãè¡ãããŸããã ãŠã£ã³ã㊠ããã·ãŒãžã£ã¯ãäžèŠãªã·ã¹ãã ããŒã¹ãããŒã¯ã¡ãã»ãŒãžãç Žæ£ã§ããŸãã
Virtual-Key ã³ãŒãã«ã€ããŠã®èª¬æ
ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãæŒãããããŒãŸãã¯è§£æŸãããããŒã® ä»®æ³ã㌠ã³ãŒã ãå«ãŸããŠããŸãã ãŠã£ã³ã㊠ããã·ãŒãžã£ã¯ãä»®æ³ã㌠ã³ãŒãã®å€ã«å¿ããŠãããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãåŠçãŸãã¯ç¡èŠããŸãã
äžè¬çãªãŠã£ã³ã㊠ããã·ãŒãžã£ã¯ãåä¿¡ããããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã®ããäžéšã®ã¿ãåŠçããæ®ãã¯ç¡èŠããŸãã ããšãã°ããŠã£ã³ã㊠ããã·ãŒãžã£ã¯ ãWM_KEYDOWN ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã®ã¿ãåŠçããã«ãŒãœã«ç§»åããŒãã·ãã ã㌠(å¶åŸ¡ããŒãšãåŒã°ããŸã)ãããã³ãã¡ã³ã¯ã·ã§ã³ ããŒã®ä»®æ³ã㌠ã³ãŒããå«ãã¡ãã»ãŒãžã®ã¿ãåŠçã§ããŸãã äžè¬çãªãŠã£ã³ã㊠ããã·ãŒãžã£ã§ã¯ãæåããŒããã®ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã¯åŠçãããŸããã 代ããã«ã TranslateMessage 颿°ã䜿çšããŠã¡ãã»ãŒãžãæåã¡ãã»ãŒãžã«å€æããŸãã TranslateMessage ãšæåã¡ãã»ãŒãžã®è©³çްã«ã€ããŠã¯ããæåã¡ãã»ãŒãžããåç §ããŠãã ããã
ããŒã¹ãããŒã¯ ã¡ãã»ãŒãž ãã©ã°
ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã® lParam ãã©ã¡ãŒã¿ãŒã«ã¯ãã¡ãã»ãŒãžãçæããããŒã¹ãããŒã¯ã«é¢ããè¿œå æ å ±ãå«ãŸããŠããŸãã ãã®æ å ±ã«ã¯ã ç¹°ãè¿ãæ°ã ã¹ãã£ã³ ã³ãŒãã æ¡åŒµã㌠ãã©ã°ã ã³ã³ããã¹ã ã³ãŒããåã® ããŒç¶æ ãã©ã°ã ããã³é·ç§»ç¶æ ãã©ã°ãå«ãŸããŸãã æ¬¡ã®å³ã¯ããããã®ãã©ã°ã®å Žæãš lParam ãã©ã¡ãŒã¿ãŒã®å€ã瀺ããŠããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã次ã®å€ã䜿çšã㊠ãlParam ã®äžäœã¯ãŒãããããŒã¹ãããŒã¯ ãã©ã°ãååŸã§ããŸãã
| äŸ¡å€ | 説æ |
|---|---|
|
KF_EXTENDED 0x0100 |
æ¡åŒµã㌠ãã©ã°ãæäœããŸãã |
|
KF_DLGMODE 0x0800 |
ãã€ã¢ãã° ããã¯ã¹ãã¢ã¯ãã£ããã©ããã瀺ããã€ã¢ãã° ã¢ãŒã ãã©ã°ãæäœããŸãã ææ°ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã»ãšãã©äœ¿çšãããªãã |
|
KF_MENUMODE 0x1000 |
ã¡ãã¥ãŒãã¢ã¯ãã£ããã©ããã瀺ãã¡ãã¥ãŒ ã¢ãŒã ãã©ã°ãæäœããŸãã ææ°ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã»ãšãã©äœ¿çšãããªãã |
|
KF_ALTDOWN 0x2000 |
ã³ã³ããã¹ã ã³ãŒã ãã©ã°ãæäœããŸãã |
|
KF_REPEAT 0x4000 |
åã®ããŒç¶æ ãã©ã°ãæäœããŸãã |
|
KF_UP 0x8000 |
é·ç§»ç¶æ ãã©ã°ãæäœããŸãã |
ã³ãŒãäŸ:
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
WORD vkCode = LOWORD(wParam); // virtual-key code
WORD keyFlags = HIWORD(lParam);
WORD scanCode = LOBYTE(keyFlags); // scan code
BOOL isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED; // extended-key flag, 1 if scancode has 0xE0 prefix
if (isExtendedKey)
scanCode = MAKEWORD(scanCode, 0xE0);
BOOL wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT; // previous key-state flag, 1 on autorepeat
WORD repeatCount = LOWORD(lParam); // repeat count, > 0 if several keydown messages was combined into one message
BOOL isKeyReleased = (keyFlags & KF_UP) == KF_UP; // transition-state flag, 1 on keyup
// if we want to distinguish these keys:
switch (vkCode)
{
case VK_SHIFT: // converts to VK_LSHIFT or VK_RSHIFT
case VK_CONTROL: // converts to VK_LCONTROL or VK_RCONTROL
case VK_MENU: // converts to VK_LMENU or VK_RMENU
vkCode = LOWORD(MapVirtualKeyW(scanCode, MAPVK_VSC_TO_VK_EX));
break;
}
// ...
}
break;
ç¹°ãè¿ãåæ°
ç¹°ãè¿ãæ°ã確èªããŠãããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãè€æ°ã®ããŒã¹ãããŒã¯ã衚ããŠãããã©ããã倿ã§ããŸãã ã·ã¹ãã ã¯ãã¢ããªã±ãŒã·ã§ã³ãããããåŠçã§ããé床ãããéãããŒããŒãã WM_KEYDOWN ãŸã㯠WM_SYSKEYDOWN ã¡ãã»ãŒãžãçæãããšãã«ã«ãŠã³ããã€ã³ã¯ãªã¡ã³ãããŸãã ããã¯å€ãã®å ŽåããŠãŒã¶ãŒãããŒããŒãã®èªåç¹°ãè¿ãæ©èœãéå§ããã®ã«ååãªé·ãã«ããŒãæŒãããšãã«çºçããŸãã ã·ã¹ãã ã¡ãã»ãŒãž ãã¥ãŒã«çµæã®ããŒããŠã³ ã¡ãã»ãŒãžãå ¥åãã代ããã«ãã·ã¹ãã ã¯ã¡ãã»ãŒãžã 1 ã€ã®ããŒããŠã³ ã¡ãã»ãŒãžã«çµåããç¹°ãè¿ãæ°ãå¢ãããŸãã ããŒãè§£æŸããŠãèªåç¹°ãè¿ãæ©èœãéå§ã§ããªãããã WM_KEYUP ã¡ãã»ãŒãžãš WM_SYSKEYUP ã¡ãã»ãŒãžã®ç¹°ãè¿ãæ°ã¯åžžã« 1 ã«èšå®ãããŸãã
ã¹ãã£ã³ ã³ãŒã
ã¹ãã£ã³ ã³ãŒãã¯ããŠãŒã¶ãŒãããŒãæŒãããšãã«ã·ã¹ãã ã«ãã£ãŠçæãããå€ã§ãã ããã¯ãããŒã«ãã£ãŠè¡šãããæåã§ã¯ãªããã¢ã¯ãã£ã㪠ããŒããŒã ã¬ã€ã¢ãŠãã«é¢ä¿ãªãæŒãããããŒãèå¥ããå€ã§ãã éåžžãã¢ããªã±ãŒã·ã§ã³ã¯ã¹ãã£ã³ ã³ãŒããç¡èŠããŸãã 代ããã«ãä»®æ³ã㌠ã³ãŒãã䜿çšããŠããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãè§£éããŸãã
ææ°ã®ããŒããŒãã¯ãã³ã³ãã¥ãŒã¿ãŒãšã®éä¿¡ã« ãã¥ãŒãã³ ã€ã³ã¿ãŒãã§ã€ã¹ ããã€ã¹ (HID) 仿§ã䜿çšããŠããŸãã ããŒããŒããã©ã€ããŒã¯ãããŒããŒãããéä¿¡ããã HID äœ¿çšæ³ã®å€ãã¹ãã£ã³ã³ãŒãã«å€æãããããã¢ããªã±ãŒã·ã§ã³ã«æž¡ããŸãã
泚
éåžžãä»®æ³ã㌠ã³ãŒãã¯ãã¹ã¯ããã ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãã䟿å©ã§ãããçŸåšã® ããŒããŒã ã¬ã€ã¢ãŠãã«é¢ä¿ãªããã©ã®ããŒãæŒãããŠããããç¥ãå¿ èŠãããå Žåãã¹ãã£ã³ ã³ãŒããå¿ èŠã«ãªãå ŽåããããŸãã ããšãã°ãã²ãŒã ã® WASD (W ãäžãA ãå·ŠãS ãããŠã³ãD ãå³) ã®ã㌠ãã€ã³ãã§ãã ããã«ãããUS QWERTY ãŸã㯠ãã©ã³ã¹èªã® AZERTY ããŒããŒã ã¬ã€ã¢ãŠãå šäœã§äžè²«ããããŒã®åœ¢æãä¿èšŒãããŸãã
次ã®è¡šã«ãWindows ã§çŸåšèªèãããŠããã¹ãã£ã³ ã³ãŒãã®ã»ããã瀺ããŸãã HID 䜿çšç¶æ³ããŒãž/HID 䜿çšç¶æ³ ID/HID äœ¿çšæ³åã® å€ã¯ã HID äœ¿çšæ³ããŒãã« ããã¥ã¡ã³ããåç §ããŸãã ããŒã®å Žæã®å€ã¯ãäžèšã®ããŒããŒã ã€ã¡ãŒãžãåç §ããŸãã
Scan 1 Make ã³ãŒãã¯ãWM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUPããã³WM_INPUTã¡ãã»ãŒãžã§é ä¿¡ãããŸãã
| HID çšéããŒãžå | HIDçšéå | HID ã® [䜿çšç¶æ³] ããŒãž | HID äœ¿çšæ³ã® ID | Scan 1 Make | ããŒã®å Žæ |
|---|---|---|---|---|---|
| æ±çšãã¹ã¯ããã | ã·ã¹ãã 黿ºããŠã³ | 0x0001 | 0x0081 | 0xE05E | |
| æ±çšãã¹ã¯ããã | ã·ã¹ãã ã¹ãªãŒã | 0x0001 | 0x0082 | 0xE05F | |
| æ±çšãã¹ã¯ããã | ã·ã¹ãã ãŠã§ã€ã¯ ã¢ãã | 0x0001 | 0x0083 | 0xE063 | |
| ããŒããŒã/ããŒããã | ErrorRollOver | 0x0007 | 0x0001 | 0x00FF | |
| ããŒããŒã/ããŒããã | ããŒããŒã A | 0x0007 | 0x0004 | 0x001E | 31 |
| ããŒããŒã/ããŒããã | ããŒããŒã B | 0x0007 | 0x0005 | 0x0030 | 50 |
| ããŒããŒã/ããŒããã | ããŒããŒã C | 0x0007 | 0x0006 | 0x002E | 48 |
| ããŒããŒã/ããŒããã | ããŒããŒã D | 0x0007 | 0x0007 | 0x0020 | 33 |
| ããŒããŒã/ããŒããã | ããŒããŒã E | 0x0007 | 0x0008 | 0x0012 | 19 |
| ããŒããŒã/ããŒããã | ããŒããŒã F | 0x0007 | 0x0009 | 0x0021 | 34 |
| ããŒããŒã/ããŒããã | ããŒããŒã G | 0x0007 | 0x000A | 0x0022 | 35 |
| ããŒããŒã/ããŒããã | ããŒããŒã H | 0x0007 | 0x000B | 0x0023 | 36 |
| ããŒããŒã/ããŒããã | ããŒããŒã I | 0x0007 | 0x000C | 0x0017 | 24 |
| ããŒããŒã/ããŒããã | ããŒããŒã J | 0x0007 | 0x000D | 0x0024 | 37 |
| ããŒããŒã/ããŒããã | ããŒããŒã K | 0x0007 | 0x000E | 0x0025 | äžåå « |
| ããŒããŒã/ããŒããã | ããŒããŒã L | 0x0007 | 0x000F | 0x0026 | 39 |
| ããŒããŒã/ããŒããã | ããŒããŒã M | 0x0007 | 0x0010 | 0x0032 | 52 |
| ããŒããŒã/ããŒããã | ããŒããŒã N | 0x0007 | 0x0011 | 0x0031 | 51 |
| ããŒããŒã/ããŒããã | ããŒããŒã O | 0x0007 | 0x0012 | 0x0018 | äºåäº |
| ããŒããŒã/ããŒããã | ããŒããŒã P | 0x0007 | 0x0013 | 0x0019 | 26 |
| ããŒããŒã/ããŒããã | ããŒããŒã Q | 0x0007 | 0x0014 | 0x0010 | åäž |
| ããŒããŒã/ããŒããã | ããŒããŒã R | 0x0007 | 0x0015 | 0x0013 | 20 |
| ããŒããŒã/ããŒããã | ããŒããŒã S | 0x0007 | 0x0016 | 0x001F | 32 |
| ããŒããŒã/ããŒããã | ããŒããŒã T | 0x0007 | 0x0017 | 0x0014 | 21 (äºåäž) |
| ããŒããŒã/ããŒããã | ããŒããŒã U | 0x0007 | 0x0018 | 0x0016 | 23 |
| ããŒããŒã/ããŒããã | ããŒããŒã V | 0x0007 | 0x0019 | 0x002F | 49 |
| ããŒããŒã/ããŒããã | ããŒããŒã W | 0x0007 | 0x001A | 0x0011 | 18 |
| ããŒããŒã/ããŒããã | ããŒããŒã X | 0x0007 | 0x001B | 0x002D | 47 |
| ããŒããŒã/ããŒããã | ããŒããŒã Y | 0x0007 | 0x001C | 0x0015 | 22 |
| ããŒããŒã/ããŒããã | ããŒããŒã Z | 0x0007 | 0x001D | 0x002C | 46 |
| ããŒããŒã/ããŒããã | ããŒããŒã 1 ãš Bang | 0x0007 | 0x001E | 0x0002 | 2 |
| ããŒããŒã/ããŒããã | ããŒããŒã 2 ãš At | 0x0007 | 0x001F | 0x0003 | 3 |
| ããŒããŒã/ããŒããã | ããŒããŒã 3 ãšããã·ã¥ | 0x0007 | 0x0020 | 0x0004 | 4 |
| ããŒããŒã/ããŒããã | ããŒããŒã 4 ãšãã« | 0x0007 | 0x0021 | 0x0005 | 5 |
| ããŒããŒã/ããŒããã | ããŒããŒã 5 ãšããŒã»ã³ã | 0x0007 | 0x0022 | 0x0006 | 6 |
| ããŒããŒã/ããŒããã | ããŒããŒã 6 ãšãã£ã¬ãã | 0x0007 | 0x0023 | 0x0007 | 7 |
| ããŒããŒã/ããŒããã | ããŒããŒã 7 ãšã¢ã³ããµã³ã | 0x0007 | 0x0024 | 0x0008 | 8 |
| ããŒããŒã/ããŒããã | ããŒããŒã 8 ãšæ | 0x0007 | 0x0025 | 0x0009 | 9 |
| ããŒããŒã/ããŒããã | ããŒããŒã 9 ãšå·Šè§æ¬åŒ§ | 0x0007 | 0x0026 | 0x000A | 10 |
| ããŒããŒã/ããŒããã | ããŒããŒã0ãšå³ãã©ã±ãã | 0x0007 | 0x0027 | 0x000B | 11 |
| ããŒããŒã/ããŒããã | ããŒããŒã ãªã¿ãŒã³ Enter | 0x0007 | 0x0028 | 0x001C | 43 |
| ããŒããŒã/ããŒããã | ããŒããŒã ãšã¹ã±ãŒã | 0x0007 | 0x0029 | 0x0001 | 110 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®åé€ | 0x0007 | 0x002A | 0x000E | 15 |
| ããŒããŒã/ããŒããã | ããŒããŒãã¿ã | 0x0007 | 0x002B | 0x000F | 16 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® Space ã㌠| 0x0007 | 0x002C | 0x0039 | 61 |
| ããŒããŒã/ããŒããã | ããŒããŒãããã·ã¥ãšã¢ã³ããŒã¹ã³ã¢ | 0x0007 | 0x002D | 0x000C | 12 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®çå·ãšãã©ã¹ | 0x0007 | 0x002E | 0x000D | 13 |
| ããŒããŒã/ããŒããã | ããŒããŒãå·Šäžãã£ã | 0x0007 | 0x002F | 0x001A | äºåäž |
| ããŒããŒã/ããŒããã | ããŒããŒãå³äžãã£ã | 0x0007 | 0x0030 | 0x001B | 28 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®ããã¯ã¹ã©ãã·ã¥ãšãã€ã | 0x0007 | 0x0031 | 0x002B | äºåä¹ |
| ããŒããŒã/ããŒããã | ããŒããŒãã®éç±³åœä»æ§ã® Hash ãš Tilde | 0x0007 | 0x0032 | 0x002B | 42 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®ã»ãã³ãã³ãšã³ãã³ | 0x0007 | 0x0033 | 0x0027 | 40 |
| ããŒããŒã/ããŒããã | ããŒããŒãã¢ãã¹ãããã£ãšäºéåŒçšç¬Š | 0x0007 | 0x0034 | 0x0028 | 41 |
| ããŒããŒã/ããŒããã | ããŒããŒã æé³ã¢ã¯ã»ã³ããšãã«ã | 0x0007 | 0x0035 | 0x0029 | 1 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® Comma ãš LessThan | 0x0007 | 0x0036 | 0x0033 | 53 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® Period ãš GreaterThan | 0x0007 | 0x0037 | 0x0034 | 54 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® ForwardSlash ãš QuestionMark | 0x0007 | 0x0038 | 0x0035 | 55 |
| ããŒããŒã/ããŒããã | ããŒããŒã ãã£ãã ãã㯠| 0x0007 | 0x0039 | 0x003A | 30 |
| ããŒããŒã/ããŒããã | ããŒããŒã F1 | 0x0007 | 0x003A | 0x003B | 1:12 |
| ããŒããŒã/ããŒããã | ããŒããŒã F2 | 0x0007 | 0x003B | 0x003C | 113 |
| ããŒããŒã/ããŒããã | ããŒããŒã F3 | 0x0007 | 0x003C | 0x003D | 114 |
| ããŒããŒã/ããŒããã | ããŒããŒã F4 | 0x0007 | 0x003D | 0x003E | 115 |
| ããŒããŒã/ããŒããã | ããŒããŒã F5 | 0x0007 | 0x003E | 0x003F | 116 |
| ããŒããŒã/ããŒããã | ããŒããŒã F6 | 0x0007 | 0x003F | 0x0040 | 117 |
| ããŒããŒã/ããŒããã | ããŒããŒã F7 | 0x0007 | 0x0040 | 0x0041 | 1:18 |
| ããŒããŒã/ããŒããã | ããŒããŒã F8 | 0x0007 | 0x0041 | 0x0042 | 119 |
| ããŒããŒã/ããŒããã | ããŒããŒã F9 | 0x0007 | 0x0042 | 0x0043 | 120 |
| ããŒããŒã/ããŒããã | ããŒããŒã F10 | 0x0007 | 0x0043 | 0x0044 | 121 |
| ããŒããŒã/ããŒããã | ããŒããŒã F11 | 0x0007 | 0x0044 | 0x0057 | 122 |
| ããŒããŒã/ããŒããã | ããŒããŒã F12 | 0x0007 | 0x0045 | 0x0058 | 123 |
| ããŒããŒã/ããŒããã | ããŒããŒãå°å·ç»é¢ | 0x0007 | 0x0046 | 0xE037 0x0054 *泚 1 |
124 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã¹ã¯ããŒã« ãã㯠| 0x0007 | 0x0047 | 0x0046 | 125 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®äžæåæ¢ | 0x0007 | 0x0048 | 0xE11D45 0xE046 *泚 2 0x0045 *泚 3 |
126 |
| ããŒããŒã/ããŒããã | ããŒããŒãæ¿å ¥ | 0x0007 | 0x0049 | 0xE052 | 75 |
| ããŒããŒã/ããŒããã | ããŒããŒã ããŒã | 0x0007 | 0x004A | 0xE047 | 80 |
| ããŒããŒã/ããŒããã | ããŒããŒã PageUp | 0x0007 | 0x004B | 0xE049 | 85 |
| ããŒããŒã/ããŒããã | ããŒããŒã ãã©ã¯ãŒã ããªãŒã | 0x0007 | 0x004C | 0xE053 | 76 |
| ããŒããŒã/ããŒããã | ããŒããŒã End | 0x0007 | 0x004D | 0xE04F | 81 |
| ããŒããŒã/ããŒããã | ããŒããŒã PageDown | 0x0007 | 0x004E | 0xE051 | 86 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®å³ç¢å° | 0x0007 | 0x004F | 0xE04D | 89 |
| ããŒããŒã/ããŒããã | ããŒããŒãå·Šç¢å° | 0x0007 | 0x0050 | 0xE04B | 79 |
| ããŒããŒã/ããŒããã | ããŒããŒã äžç¢å° | 0x0007 | 0x0051 | 0xE050 | 84 |
| ããŒããŒã/ããŒããã | ããŒããŒã äžç¢å° | 0x0007 | 0x0052 | 0xE048 | 83 |
| ããŒããŒã/ããŒããã | ããŒãããã®ãã ããã¯ãšã¯ãªã¢ | 0x0007 | 0x0053 | 0x0045 0xE045 *泚3 |
90 |
| ããŒããŒã/ããŒããã | ããŒããã ãã©ã¯ãŒã ã¹ã©ãã·ã¥ | 0x0007 | 0x0054 | 0xE035 | 95 |
| ããŒããŒã/ããŒããã | ããŒãããã¹ã¿ãŒ | 0x0007 | 0x0055 | 0x0037 | 100 |
| ããŒããŒã/ããŒããã | ããŒãããããã·ã¥ | 0x0007 | 0x0056 | 0x004A | 105 |
| ããŒããŒã/ããŒããã | ããŒããã ãã©ã¹ | 0x0007 | 0x0057 | 0x004E | 106 |
| ããŒããŒã/ããŒããã | ããŒããã ENTER | 0x0007 | 0x0058 | 0xE01C | 1:08 |
| ããŒããŒã/ããŒããã | ããŒããã 1 ãš End | 0x0007 | 0x0059 | 0x004F | 93 |
| ããŒããŒã/ããŒããã | ããŒããã 2 ãšäžç¢å° | 0x0007 | 0x005A | 0x0050 | 98 |
| ããŒããŒã/ããŒããã | ããŒããã 3 ãš PageDn | 0x0007 | 0x005B | 0x0051 | 1:03 |
| ããŒããŒã/ããŒããã | ããŒããã 4 ãšå·Šç¢å° | 0x0007 | 0x005C | 0x004B | 92 |
| ããŒããŒã/ããŒããã | ããŒããã 5 | 0x0007 | 0x005D | 0x004C | 97 |
| ããŒããŒã/ããŒããã | ããŒããã 6 ãšå³ç¢å° | 0x0007 | 0x005E | 0x004D | 102 |
| ããŒããŒã/ããŒããã | ããŒããã 7 ãšããŒã | 0x0007 | 0x005F | 0x0047 | 91 |
| ããŒããŒã/ããŒããã | ããŒããã 8 ãšäžç¢å° | 0x0007 | 0x0060 | 0x0048 | 96 |
| ããŒããŒã/ããŒããã | ããŒããã 9 ãš PageUp | 0x0007 | 0x0061 | 0x0049 | 101 |
| ããŒããŒã/ããŒããã | ããŒããã 0 ãš Insert | 0x0007 | 0x0062 | 0x0052 | ä¹åä¹ |
| ããŒããŒã/ããŒããã | ããŒãããã® Period ãš Period | 0x0007 | 0x0063 | 0x0053 | 104 |
| ããŒããŒã/ããŒããã | ããŒããŒãã®éç±³åœä»æ§ã® Backslash ãš Backslash | 0x0007 | 0x0064 | 0x0056 | 45 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã¢ããªã±ãŒã·ã§ã³ | 0x0007 | 0x0065 | 0xE05D | 129 |
| ããŒããŒã/ããŒããã | ããŒããŒã黿º | 0x0007 | 0x0066 | 0xE05E | |
| ããŒããŒã/ããŒããã | ããŒããã çå· | 0x0007 | 0x0067 | 0x0059 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F13 | 0x0007 | 0x0068 | 0x0064 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F14 | 0x0007 | 0x0069 | 0x0065 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F15 | 0x0007 | 0x006A | 0x0066 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F16 | 0x0007 | 0x006B | 0x0067 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F17 | 0x0007 | 0x006C | 0x0068 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F18 | 0x0007 | 0x006D | 0x0069 | |
| ããŒããŒã/ããŒããã | ããŒããŒã F19 | 0x0007 | 0x006E | 0x006A | |
| ããŒããŒã/ããŒããã | ããŒããŒã F20 | 0x0007 | 0x006F | 0x006B | |
| ããŒããŒã/ããŒããã | ããŒããŒã F21 | 0x0007 | 0x0070 | 0x006C | |
| ããŒããŒã/ããŒããã | ããŒããŒã F22 | 0x0007 | 0x0071 | 0x006D | |
| ããŒããŒã/ããŒããã | ããŒããŒã F23 | 0x0007 | 0x0072 | 0x006E | |
| ããŒããŒã/ããŒããã | ããŒããŒã F24 | 0x0007 | 0x0073 | 0x0076 | |
| ããŒããŒã/ããŒããã | ããŒããã ã³ã³ã | 0x0007 | 0x0085 | 0x007E | 107 *泚4 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã€ã³ã¿ãŒãã·ã§ãã« 1 | 0x0007 | 0x0087 | 0x0073 | 56 *泚 4ã5 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã€ã³ã¿ãŒãã·ã§ãã« 2 | 0x0007 | 0x0088 | 0x0070 | 133 *泚5 |
| ããŒããŒã/ããŒããã | Keyboard International3 | 0x0007 | 0x0089 | 0x007D | 14 *泚5 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã€ã³ã¿ãŒãã·ã§ãã« 4 | 0x0007 | 0x008A | 0x0079 | 132 *泚 5 |
| ããŒããŒã/ããŒããã | ããŒããŒã ã€ã³ã¿ãŒãã·ã§ãã« 5 | 0x0007 | 0x008B | 0x007B | 131 *泚 5 |
| ããŒããŒã/ããŒããã | ããŒããŒãã€ã³ã¿ãŒãã·ã§ãã«6 | 0x0007 | 0x008C | 0x005C | |
| ããŒããŒã/ããŒããã | ããŒããŒã LANG1 | 0x0007 | 0x0090 | 0x0072 *泚 6 0x00F2 *泚 3, 6 |
|
| ããŒããŒã/ããŒããã | ããŒããŒã LANG2 | 0x0007 | 0x0091 | 0x0071 *泚 6 0x00F1 *Note 3, 6 |
|
| ããŒããŒã/ããŒããã | ããŒããŒã LANG3 | 0x0007 | 0x0092 | 0x0078 | |
| ããŒããŒã/ããŒããã | ããŒããŒã LANG4 | 0x0007 | 0x0093 | 0x0077 | |
| ããŒããŒã/ããŒããã | ããŒããŒã LANG5 | 0x0007 | 0x0094 | 0x0076 | |
| ããŒããŒã/ããŒããã | ããŒããŒãã® LeftControl | 0x0007 | 0x00E0 | 0x001D | 58 |
| ããŒããŒã/ããŒããã | ããŒããŒã å·Šã® Shift | 0x0007 | 0x00E1 | 0x002A | 44 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® LeftAlt | 0x0007 | 0x00E2 | 0x0038 | å å |
| ããŒããŒã/ããŒããã | ããŒããŒãã®å·ŠåŽã®GUI | 0x0007 | 0x00E3 | 0xE05B | 1:27 |
| ããŒããŒã/ããŒããã | ããŒããŒãã® RightControl | 0x0007 | 0x00E4 | 0xE01D | 64 |
| ããŒããŒã/ããŒããã | ããŒããŒãå³ã·ãã | 0x0007 | 0x00E5 | 0x0036 | äºåäž |
| ããŒããŒã/ããŒããã | ããŒããŒãã® RightAlt | 0x0007 | 0x00E6 | 0xE038 | 62 |
| ããŒããŒã/ããŒããã | ããŒããŒã å³ã® GUI | 0x0007 | 0x00E7 | 0xE05C | 128 |
| ã³ã³ã·ã¥ãŒã㌠| 次ã®ãã©ãã¯ãã¹ãã£ã³ãã | 0x000C | 0x00B5 | 0xE019 | |
| ã³ã³ã·ã¥ãŒã㌠| åã®ãã©ãã¯ãã¹ãã£ã³ãã | 0x000C | 0x00B6 | 0xE010 | |
| ã³ã³ã·ã¥ãŒã㌠| æ¢ãŸã | 0x000C | 0x00B7 | 0xE024 | |
| ã³ã³ã·ã¥ãŒã㌠| åç/äžæåæ¢ | 0x000C | 0x00CD | 0xE022 | |
| ã³ã³ã·ã¥ãŒã㌠| ãã¥ãŒã | 0x000C | 0x00E2 | 0xE020 | |
| ã³ã³ã·ã¥ãŒã㌠| é³éãäžãã | 0x000C | 0x00E9 | 0xE030 | |
| ã³ã³ã·ã¥ãŒã㌠| é³éã®æžå° | 0x000C | 0x00EA | 0xE02E | |
| ã³ã³ã·ã¥ãŒã㌠| AL ã³ã³ã·ã¥ãŒããŒå¶åŸ¡ã®æ§æ | 0x000C | 0x0183 | 0xE06D | |
| ã³ã³ã·ã¥ãŒã㌠| AL é»åã¡ãŒã« ãªãŒã㌠| 0x000C | 0x018A | 0xE06C | |
| ã³ã³ã·ã¥ãŒã㌠| AL èšç®æ© | 0x000C | 0x0192 | 0xE021 | |
| ã³ã³ã·ã¥ãŒã㌠| ALããŒã«ã«ãã·ã³ãã©ãŠã¶ãŒ | 0x000C | 0x0194 | 0xE06B | |
| ã³ã³ã·ã¥ãŒã㌠| AC æ€çŽ¢ | 0x000C | 0x0221 | 0xE065 | |
| ã³ã³ã·ã¥ãŒã㌠| AC ããŒã ããŒãž | 0x000C | 0x0223 | 0xE032 | |
| ã³ã³ã·ã¥ãŒã㌠| AC ãã㯠| 0x000C | 0x0224 | 0xE06A | |
| ã³ã³ã·ã¥ãŒã㌠| AC 転é | 0x000C | 0x0225 | 0xE069 | |
| ã³ã³ã·ã¥ãŒã㌠| ãšã¢ã³ã³åæ¢ | 0x000C | 0x0226 | 0xE068 | |
| ã³ã³ã·ã¥ãŒã㌠| AC æŽæ° | 0x000C | 0x0227 | 0xE067 | |
| ã³ã³ã·ã¥ãŒã㌠| AC ããã¯ããŒã¯ | 0x000C | 0x022A | 0xE066 |
泚èš:
- SysRq ã㌠ã¹ãã£ã³ ã³ãŒãã Alt + Print ç»é¢ ã®ããŒã¹ãããŒã¯ã§åºåããã
- Ctrl + Pause ããŒã¹ãããŒã¯ã§ãã¬ãŒã¯ ã㌠ã¹ãã£ã³ ã³ãŒããåºåããã
- åŸæ¥ã®ããŒããŒã ã¡ãã»ãŒãžã«è¡šç€ºããããšãã
- ãã®ããŒã¯ããã©ãžã«ã®ããŒããŒãã«ååšããŸã
- ããŒã¯æ¥æ¬èªããŒããŒãã«ååšããŸã
- ã¹ãã£ã³ ã³ãŒãã¯ãã㌠ãªãªãŒã¹ ã€ãã³ãã§ã®ã¿åºåãããŸã
Extended-Key ãã©ã°
æ¡åŒµã㌠ãã©ã°ã¯ãããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãæ¡åŒµ 101/102 ã㌠ããŒããŒãã®è¿œå ããŒã® 1 ã€ããéä¿¡ããããã©ããã瀺ããŸãã æ¡åŒµããŒãšã¯ãããŒããŒãå³åŽã® Alt ããŒãš Ctrl ããŒãæ°å€ããŒãããã®å·ŠåŽã®ããŒçŸ€ã«ãã InsertãDeleteãHomeãEndãPage UpãPage DownãArrow ã®åããŒãBreakïŒCtrl+PauseïŒããŒãPrint Screen ããŒãæ°å€ããŒãããäžã® Divide (/) ããŒãš Enter ããŒãããã³ Windows ããŒãš Application ããŒãæããŸãã
Num Lock ããŒã«ã¯ãäžæåæ¢ããŒãšã¯å¥ã®ã¹ãã£ã³ ã³ãŒã (æ¡åŒµã㌠ãã©ã°ãªãã§åãã¹ãã£ã³ ã³ãŒãã䜿çš) ããããæ¡åŒµããŒåããŒãã«ã«è¡šç€ºãããŠããã«ããããããæ¡åŒµããŒãšã¯èŠãªãããªãããšã«æ³šæããŠãã ããã å³åŽã® Shift ããŒã¯æ¡åŒµããŒãšãèŠãªãããŸããã代ããã«å¥ã®ã¹ãã£ã³ ã³ãŒã (0x36) ããããŸãã
æå®ããå Žåãã¹ãã£ã³ ã³ãŒã㯠2 ãã€ãã®ã·ãŒã±ã³ã¹ã§æ§æãããæåã®ãã€ãã®å€ã¯ 0xE0ã
ã³ã³ããã¹ã ã³ãŒã
ã³ã³ããã¹ã ã³ãŒãã¯ãããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãçæããããšãã« Alt ããŒãããŠã³ãããã©ããã瀺ããŸãã Alt ããŒãããŠã³ããå Žåã¯ã³ãŒã㯠1ãã¢ããããŠããå Žå㯠0 ã§ãã
åã® Key-State ãã©ã°
åã®ããŒç¶æ ãã©ã°ã¯ãããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãçæããããŒã以åã«ã¢ãããŸãã¯ããŠã³ãããã©ããã瀺ããŸãã ããŒã以åã«ããŠã³ããŠããå Žå㯠1ãããŒã以åã«ã¢ããããŠããå Žå㯠0 ã§ãã ãã®ãã©ã°ã䜿çšãããšãããŒããŒãã®èªåç¹°ãè¿ãæ©èœã«ãã£ãŠçæãããããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãèå¥ã§ããŸãã ãã®ãã©ã°ã¯ãèªåç¹°ãè¿ãæ©èœã«ãã£ãŠçæããã WM_KEYDOWN ããã³ WM_SYSKEYDOWN ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã«å¯Ÿã㊠1 ã«èšå®ãããŸãã WM_KEYUPã¡ãã»ãŒãžãšWM_SYSKEYUPã¡ãã»ãŒãžã®å Žåãåžžã« 1 ã«èšå®ãããŸãã
Transition-State ãã©ã°
é·ç§»ç¶æ ãã©ã°ã¯ãããŒãæŒãããããŒãè§£æŸããŠããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãçæãããã瀺ããŸãã WM_KEYDOWNããã³WM_SYSKEYDOWNã¡ãã»ãŒãžã®å Žåããã®ãã©ã°ã¯åžžã« 0 ã«èšå®ãããŸããWM_KEYUPã¡ãã»ãŒãžãšWM_SYSKEYUPã¡ãã»ãŒãžã®å Žåã¯åžžã« 1 ã«èšå®ãããŸãã
æåã¡ãã»ãŒãž
ããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã¯ããŒã¹ãããŒã¯ã«é¢ããå€ãã®æ å ±ãæäŸããŸãããæåããŒã¹ãããŒã¯ã®æåã³ãŒãã¯æäŸããŸããã æåã³ãŒããååŸããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¹ã¬ãã ã¡ãã»ãŒãž ã«ãŒãã« TranslateMessage 颿°ãå«ããå¿ èŠããããŸãã TranslateMessage ã¯ã WM_KEYDOWN ãŸã㯠WM_SYSKEYDOWN ã¡ãã»ãŒãžãããŒããŒã ã¬ã€ã¢ãŠãã«æž¡ããŸãã ã¬ã€ã¢ãŠãã¯ã¡ãã»ãŒãžã®ä»®æ³ã㌠ã³ãŒãã調ã¹ãæåããŒã«å¯Ÿå¿ããå Žåã¯ãåçã®æåã³ãŒããæäŸããŸã ( Shift ããŒãš Caps Lock ããŒã®ç¶æ ãèæ ®)ã æ¬¡ã«ãæåã³ãŒããå«ãæåã¡ãã»ãŒãžãçæããã¡ãã»ãŒãžãã¡ãã»ãŒãž ãã¥ãŒã®å é ã«é 眮ããŸãã ã¡ãã»ãŒãž ã«ãŒãã®æ¬¡ã®ã€ãã¬ãŒã·ã§ã³ã§ã¯ããã¥ãŒããæåã¡ãã»ãŒãžãåé€ããé©åãªãŠã£ã³ã㊠ããã·ãŒãžã£ã«ã¡ãã»ãŒãžããã£ã¹ãããããŸãã
ãã®ã»ã¯ã·ã§ã³ã¯ã次ã®ãããã¯ã§æ§æãããŠããŸãã
éã·ã¹ãã æåã¡ãã»ãŒãž
ãŠã£ã³ã㊠ããã·ãŒãžã£ã¯ãWM_CHARãWM_DEADCHARãWM_SYSCHARãWM_SYSDEADCHARãããã³WM_UNICHARã®æåã¡ãã»ãŒãžãåãåãããšãã§ããŸãã TranslateMessage 颿°ã¯ãWM_KEYDOWN ã¡ãã»ãŒãžãåŠçãããšãã«WM_CHARãŸãã¯WM_DEADCHARã¡ãã»ãŒãžãçæããŸãã åæ§ã«ã WM_SYSKEYDOWN ã¡ãã»ãŒãžãåŠçãããš ãWM_SYSCHAR ãŸã㯠WM_SYSDEADCHAR ã¡ãã»ãŒãžãçæãããŸãã
ããŒããŒãå ¥åãåŠçããã¢ããªã±ãŒã·ã§ã³ã¯ãéåžžã WM_CHAR ããã³ WM_UNICHAR ã¡ãã»ãŒãžãé€ããã¹ãŠã®ã¡ãã»ãŒãžãç¡èŠãã DefWindowProc 颿°ã«ä»ã®ã¡ãã»ãŒãžãæž¡ããŸãã WM_CHARã§ã¯ UTF-16 (16 ããã Unicode å€æåœ¢åŒ) ãŸã㯠ANSI æåã»ããã䜿çšãããŸãããWM_UNICHARã§ã¯åžžã« UTF-32 (32 ããã Unicode å€æåœ¢åŒ) ã䜿çšãããããšã«æ³šæããŠãã ããã ã·ã¹ãã 㯠ãWM_SYSCHAR ã¡ãã»ãŒãžãš WM_SYSDEADCHAR ã¡ãã»ãŒãžã䜿çšããŠã¡ãã¥ãŒããŒã¢ããã¯ãå®è£ ããŸãã
ãã¹ãŠã®æåã¡ãã»ãŒãžã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãæŒãããæåããŒã®æåã³ãŒããå«ãŸããŠããŸãã æåã³ãŒãã®å€ã¯ãã¡ãã»ãŒãžãåä¿¡ãããŠã£ã³ããŠã®ãŠã£ã³ã㊠ã¯ã©ã¹ã«ãã£ãŠç°ãªããŸãã RegisterClass 颿°ã® Unicode ããŒãžã§ã³ã䜿çšããŠãŠã£ã³ã㊠ã¯ã©ã¹ãç»é²ããå Žåãã·ã¹ãã ã¯ãã®ã¯ã©ã¹ã®ãã¹ãŠã®ãŠã£ã³ããŠã« Unicode æåãæäŸããŸãã ãã以å€ã®å Žåãã·ã¹ãã 㯠ANSI æåã³ãŒããæäŸããŸãã 詳现ã«ã€ããŠã¯ãWindows ã¢ã㪠ã§ã®ãŠã£ã³ã㊠ã¯ã©ã¹ã®ç»é² ãš UTF-8 ã³ãŒã ããŒãžã®äœ¿çšã«é¢ããããŒãžãåç §ããŠãã ããã
æåã¡ãã»ãŒãžã® lParam ãã©ã¡ãŒã¿ãŒã®å 容ã¯ãæåã¡ãã»ãŒãžãçæããããã«å€æãããããŒããŠã³ ã¡ãã»ãŒãžã® lParam ãã©ã¡ãŒã¿ãŒã®å 容ãšåãã§ãã 詳现ã«ã€ããŠã¯ãã ããŒã¹ãããŒã¯ ã¡ãã»ãŒãž ãã©ã°ããåç §ããŠãã ããã
ããããã£ã©ã¯ã¿ãŒ ã¡ãã»ãŒãž
äžéšã®è±èªä»¥å€ã®ããŒããŒãã«ã¯ãåç¬ã§æåãçæããããšãæ³å®ãããŠããªãæåããŒãå«ãŸããŠããŸãã 代ããã«ãåŸç¶ã®ããŒã¹ãããŒã¯ã«ãã£ãŠçæãããæåã«åé³èšå·ã远å ããããã«äœ¿çšãããŸãã ãããã®ããŒã¯ ãããã ããŒãšåŒã°ããŸãã ãã€ãèªããŒããŒãã® circumflex ããŒã¯ãããã ããŒã®äŸã§ãã "o" ã§æ§æãããæåã circumflex ãšå ±ã«å ¥åããã«ã¯ããã€ãèªã®ãŠãŒã¶ãŒã¯ãcircumflex ããŒã®åŸã« "o" ããŒãå ¥åããŸãã ããŒããŒã ãã©ãŒã«ã¹ã®ãããŠã£ã³ããŠã«ã¯ã次ã®äžé£ã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
TranslateMessage ã¯ããããããŒãã WM_KEYDOWN ã¡ãã»ãŒãžãåŠçãããš WM_DEADCHAR ã¡ãã»ãŒãžãçæããŸãã WM_DEADCHAR ã¡ãã»ãŒãžã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãããããŒã®åé³èšå·ã®æåã³ãŒããå«ãŸããŠããŸãããéåžžã¢ããªã±ãŒã·ã§ã³ã¯ãã®ã¡ãã»ãŒãžãç¡èŠããŸãã 代ããã«ãåŸç¶ã®ããŒã¹ãããŒã¯ã«ãã£ãŠçæããã WM_CHAR ã¡ãã»ãŒãžãåŠçããŸãã WM_CHAR ã¡ãã»ãŒãžã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãåé³èšå·ãå«ãæåã³ãŒããå«ãŸããŠããŸãã åŸç¶ã®ããŒã¹ãããŒã¯ã§åé³èšå·ãšçµã¿åãããããšãã§ããªãæåãçæãããå Žåãã·ã¹ãã 㯠2 ã€ã® WM_CHAR ã¡ãã»ãŒãžãçæããŸãã æåã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãåé³èšå·ã®æåã³ãŒããå«ãŸããŠããŸãã2 çªç®ã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãåŸç¶ã®æåããŒã®æåã³ãŒããå«ãŸããŠããŸãã
TranslateMessage 颿°ã¯ãã·ã¹ãã ã®ããã ã㌠(Alt ããŒãšçµã¿åãããŠæŒãããããã ããŒ) ããWM_SYSKEYDOWN ã¡ãã»ãŒãžãåŠçãããšãã«ãWM_SYSDEADCHAR ã¡ãã»ãŒãžãçæããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯éåžžã WM_SYSDEADCHAR ã¡ãã»ãŒãžãç¡èŠããŸãã
ããŒã®ç¶æ
ããŒããŒã ã¡ãã»ãŒãžã®åŠçäžã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãçŸåšã®ã¡ãã»ãŒãžãçæããããŒä»¥å€ã®å¥ã®ããŒã®ç¶æ ã確èªããå¿ èŠãããå ŽåããããŸãã ããšãã°ããŠãŒã¶ãŒã Shift ããŒãæŒããªãã End ããŒãæŒããŠããã¹ã ãããã¯ãéžæã§ããããã«ããã¯ãŒãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãEnd ããŒããããŒã¹ãããŒã¯ ã¡ãã»ãŒãžãåä¿¡ãããã³ã« Shift ããŒã®ç¶æ ã確èªããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ GetKeyState 颿°ã䜿çšããŠãçŸåšã®ã¡ãã»ãŒãžãçæããããšãã®ä»®æ³ããŒã®ç¶æ ã倿ã§ããŸãã GetAsyncKeyState 颿°ã䜿çšããŠãä»®æ³ããŒã®çŸåšã®ç¶æ ãååŸã§ããŸãã
äžéšã®ããŒã¯ãããŒããŒã ã¬ã€ã¢ãŠãã®ç¶æ ã倿Žãããã°ã« ããŒãšèŠãªãããŸãã ãã°ã« ããŒã«ã¯ãéåžžã CapsLock (VK_CAPITAL)ã Num Lock (VK_NUMLOCK)ã ã¹ã¯ããŒã« ãã㯠(VK_SCROLL) ããŒãå«ãŸããŸãã ã»ãšãã©ã®ããŒããŒãã«ã¯ããããã®ããŒã«å¯Ÿå¿ãã LED ã€ã³ãžã±ãŒã¿ãŒããããŸãã
ããŒããŒã ã¬ã€ã¢ãŠãã§ã¯ãååã®äžèЧãä¿æãããŸãã 1 ã€ã®æåãçæããããŒã®ååã¯ãããŒã«ãã£ãŠçæãããæåãšåãã§ãã Tab ããŒã Enter ããŒãªã©ã®æå以å€ã®ããŒã®ååã¯ãæååãšããŠæ ŒçŽãããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ ãGetKeyNameText 颿°ãåŒã³åºãããšã«ãã£ãŠãããŒããŒã ã¬ã€ã¢ãŠãããä»»æã®ããŒã®ååãååŸã§ããŸãã
ããŒã¹ãããŒã¯ãšæå翻蚳
ã·ã¹ãã ã«ã¯ãããŸããŸãªããŒã¹ãããŒã¯ ã¡ãã»ãŒãžã«ãã£ãŠæäŸãããã¹ãã£ã³ ã³ãŒããæåã³ãŒããããã³ä»®æ³ã㌠ã³ãŒãã倿ããç¹æ®ãªç®çã®æ©èœãããã€ãå«ãŸããŠããŸãã ãããã®é¢æ°ã«ã¯ã MapVirtualKeyã ToAsciiã ToUnicodeã VkKeyScan ãå«ãŸããŸãã
ããã«ãMicrosoft Rich Edit 3.0 ã§ã¯ HexToUnicode IME ããµããŒããããŠããŸããããã«ããããŠãŒã¶ãŒã¯ããã ããŒã䜿çšã㊠16 鲿åãš Unicode æåã倿ã§ããŸãã ã€ãŸããMicrosoft Rich Edit 3.0 ãã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒããšãã¢ããªã±ãŒã·ã§ã³ã¯ HexToUnicode IME ã®æ©èœãç¶æ¿ããŸãã
ããã ããŒã®ãµããŒã
ããã ããŒã¯ãWM_HOTKEY ã¡ãã»ãŒãžãçæããããŒã®çµã¿åããã§ãã·ã¹ãã ãã¹ã¬ããã®ã¡ãã»ãŒãž ãã¥ãŒã®å é ã«é 眮ãããã¥ãŒå ã®æ¢åã®ã¡ãã»ãŒãžããã€ãã¹ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã ããŒã䜿çšããŠããŠãŒã¶ãŒããåªå 床ã®é«ãããŒããŒãå ¥åãååŸããŸãã ããšãã°ã Ctrl + C ããŒã¹ãããŒã¯ã§æ§æãããããã ããŒãå®çŸ©ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒãé·ãæäœãåãæ¶ãããšãã§ããŸãã
ããã ããŒãå®çŸ©ããããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ RegisterHotKey 颿°ãåŒã³åºãã WM_HOTKEY ã¡ãã»ãŒãžãçæããããŒã®çµã¿åãããã¡ãã»ãŒãžãåä¿¡ãããŠã£ã³ããŠãžã®ãã³ãã«ãããã ããŒã®èå¥åãæå®ããŸãã ãŠãŒã¶ãŒãããã ããŒãæŒããšããŠã£ã³ããŠãäœæããã¹ã¬ããã®ã¡ãã»ãŒãž ãã¥ãŒã« WM_HOTKEY ã¡ãã»ãŒãžãé 眮ãããŸãã ã¡ãã»ãŒãžã® wParam ãã©ã¡ãŒã¿ãŒã«ã¯ãããã ããŒã®èå¥åãå«ãŸããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ã¹ã¬ããã«å¯ŸããŠè€æ°ã®ããã ããŒãå®çŸ©ã§ããŸãããã¹ã¬ããå ã®åããã ããŒã«ã¯äžæã®èå¥åãå¿ èŠã§ãã ã¢ããªã±ãŒã·ã§ã³ãçµäºããåã«ã UnregisterHotKey 颿°ã䜿çšããŠããã ããŒãç Žæ£ããå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã ã㌠ã³ã³ãããŒã«ã䜿çšããŠããŠãŒã¶ãŒãããã ããŒãç°¡åã«éžæã§ããããã«ããŸãã ããã ã㌠ã³ã³ãããŒã«ã¯ãéåžžããŠã£ã³ããŠãã¢ã¯ãã£ãã«ããããã ããŒãå®çŸ©ããããã«äœ¿çšãããŸãã RegisterHotKey 颿°ãš UnregisterHotKey 颿°ã¯ 䜿çšããŸããã 代ããã«ãããã ã㌠ã³ã³ãããŒã«ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã¯ãéåžžã WM_SETHOTKEY ã¡ãã»ãŒãžã éä¿¡ããŠããã ããŒãèšå®ããŸãã ãŠãŒã¶ãŒãããã ããŒãæŒããã³ã«ãã·ã¹ãã ã¯SC_HOTKEYãæå®ããWM_SYSCOMMAND ã¡ãã»ãŒãžãéä¿¡ããŸãã ããã ã㌠ã³ã³ãããŒã«ã®è©³çްã«ã€ããŠã¯ããããã ã㌠ã³ã³ãããŒã«ã®äœ¿çšããåç §ããŠãã ããã
ãã©ãŠãºããã®ä»ã®æ©èœã®ããŒããŒã ããŒ
Windows ã§ã¯ããã©ãŠã¶ãŒæ©èœãã¡ãã£ã¢æ©èœãã¢ããªã±ãŒã·ã§ã³èµ·åã黿ºç®¡ççšã®ç¹å¥ãªããŒãåããããŒããŒãããµããŒããããŠããŸãã WM_APPCOMMANDã§ã¯ã远å ã®ããŒããŒã ããŒããµããŒããããŸãã ããã«ã ShellProc 颿°ã¯ã远å ã®ããŒããŒã ããŒããµããŒãããããã«å€æŽãããŸãã
ã³ã³ããŒãã³ã ã¢ããªã±ãŒã·ã§ã³ã®åãŠã£ã³ããŠã§ããããã®è¿œå ã®ããŒããŒã ããŒã®ã³ãã³ããçŽæ¥å®è£ ã§ããå¯èœæ§ã¯ã»ãšãã©ãããŸããã ãã®ããããããã®ããŒã®ãããããæŒããããšã DefWindowProc 㯠ãŠã£ã³ããŠã«WM_APPCOMMAND ã¡ãã»ãŒãžãéä¿¡ããŸãã DefWindowProc ã¯ã WM_APPCOMMAND ã¡ãã»ãŒãžã芪ãŠã£ã³ããŠã«ããã«ããŸãã ããã¯ãå³ããŠã¹ ãã¿ã³ã䜿çšããŠã³ã³ããã¹ã ã¡ãã¥ãŒãåŒã³åºãæ¹æ³ãšäŒŒãŠããŸãã ããã¯ãDefWindowProc ãå³ãã¿ã³ ã¯ãªã㯠ã§WM_CONTEXTMENU ã¡ãã»ãŒãžãéä¿¡ãã芪ã«ããã«ãä»ããæ¹æ³ã§ãã ããã«ã DefWindowProc ããããã¬ãã« ãŠã£ã³ããŠã® WM_APPCOMMAND ã¡ãã»ãŒãžãåä¿¡ãããšãã³ãŒã HSHELL_APPCOMMANDãå«ãã·ã§ã« ããã¯ãåŒã³åºãããŸãã
Windows ã§ã¯ã5 ã€ã®ãã¿ã³ãæã€ããŠã¹ã§ãã Microsoft IntelliMouse ãšã¯ã¹ãããŒã©ãŒããµããŒããããŠããŸãã 2 ã€ã®è¿œå ãã¿ã³ã¯ãåæ¹ããã³åŸæ¹ã®ãã©ãŠã¶ãŒ ããã²ãŒã·ã§ã³ããµããŒãããŸãã 詳现ã«ã€ããŠã¯ã XBUTTON ãåç §ããŠãã ããã
å ¥åã®ã·ãã¥ã¬ãŒã
äžæãããªãäžé£ã®ãŠãŒã¶ãŒå ¥åã€ãã³ããã·ãã¥ã¬ãŒãããã«ã¯ã SendInput 颿°ã䜿çšããŸãã ãã®é¢æ°ã¯ã3 ã€ã®ãã©ã¡ãŒã¿ãŒãåãåããŸãã æåã®ãã©ã¡ãŒã¿ãŒ cInputs ã¯ãã·ãã¥ã¬ãŒããããå ¥åã€ãã³ãã®æ°ã瀺ããŸãã 2 çªç®ã®ãã©ã¡ãŒã¿ãŒ rgInputs 㯠INPUT æ§é äœã®é åã§ããããããããå ¥åã€ãã³ãã®çš®é¡ãšãã®ã€ãã³ãã«é¢ããè¿œå æ å ±ãèšè¿°ããŸãã æåŸã®ãã©ã¡ãŒã¿ãŒ cbSize ã¯ã INPUT æ§é äœã®ãµã€ãºããã€ãåäœã§åãå ¥ããŸãã
SendInput 颿°ã¯ãã·ãã¥ã¬ãŒããããäžé£ã®å ¥åã€ãã³ããããã€ã¹ã®å ¥åã¹ããªãŒã ã«æ¿å ¥ããããšã«ãã£ãŠæ©èœããŸãã ãã®å¹æã¯ ãkeybd_event ãŸã㯠mouse_event 颿°ãç¹°ãè¿ãåŒã³åºãããšãšäŒŒãŠããŸãããã·ãã¥ã¬ãŒããããã€ãã³ããšä»ã®å ¥åã€ãã³ããæ··åšããªãããã«ã·ã¹ãã ã«ãã£ãŠä¿èšŒãããç¹ãç°ãªããŸãã åŒã³åºããå®äºãããšãæ»ãå€ã¯ãæ£åžžã«åçãããå ¥åã€ãã³ãã®æ°ã瀺ããŸãã ãã®å€ã 0 ã®å Žåãå ¥åã¯ãããã¯ãããŸããã
SendInput 颿°ã¯ãããŒããŒãã®çŸåšã®ç¶æ ããªã»ããããŸããã ãã®ããããŠãŒã¶ãŒããã®é¢æ°ãåŒã³åºããšãã«æŒãããããŒãããå Žåããã®é¢æ°ãçæããã€ãã³ãã«å¹²æžããå¯èœæ§ããããŸãã å¹²æžã®å¯èœæ§ãå¿é ãªå Žåã¯ã GetAsyncKeyState 颿°ã䜿çšããŠããŒããŒãã®ç¶æ ã確èªããå¿ èŠã«å¿ããŠä¿®æ£ããŸãã
èšèªããã±ãŒã«ãããŒããŒã ã¬ã€ã¢ãŠã
èšèªã¯ãè±èªããã©ã³ã¹èªãæ¥æ¬èªãªã©ã®èªç¶èšèªã§ãã ãµãèšèªã¯ãè±åœãšç±³åœã§è©±ãããè±èªã®ãµãèšèªãªã©ãç¹å®ã®å°ççå°åã§è©±ãããèªç¶èšèªã®ããªãšãŒã·ã§ã³ã§ãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã èšèªèå¥åãšåŒã°ããå€ã䜿çšããŠãèšèªãšãµãèšèªãäžæã«èå¥ããŸãã
éåžžãã¢ããªã±ãŒã·ã§ã³ã¯ ãã±ãŒã« ã䜿çšããŠãå ¥åãšåºåãåŠçãããèšèªãèšå®ããŸãã ããšãã°ãããŒããŒãã®ãã±ãŒã«ãèšå®ãããšãããŒããŒãã«ãã£ãŠçæãããæåå€ã«åœ±é¿ããŸãã ãã£ã¹ãã¬ã€ãŸãã¯ããªã³ã¿ãŒã®ãã±ãŒã«ãèšå®ãããšã衚瀺ãŸãã¯å°å·ãããã°ãªãã«åœ±é¿ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒããŒã ã¬ã€ã¢ãŠããèªã¿èŸŒãã§äœ¿çšããããšã§ãããŒããŒãã®ãã±ãŒã«ãèšå®ããŸãã æå®ãããã±ãŒã«ããµããŒããããã©ã³ããéžæããŠããã£ã¹ãã¬ã€ãŸãã¯ããªã³ã¿ãŒã®ãã±ãŒã«ãèšå®ããŸãã
ããŒããŒã ã¬ã€ã¢ãŠãã¯ãããŒããŒãäžã®ããŒã®ç©ççãªäœçœ®ãæå®ããã ãã§ãªãããããã®ããŒãæŒãããšã«ãã£ãŠçæãããæåå€ã決å®ããŸãã åã¬ã€ã¢ãŠãã¯ãçŸåšã®å ¥åèšèªãèå¥ããããŒãšããŒã®çµã¿åããã«ãã£ãŠçæãããæåå€ã決å®ããŸãã
ãã¹ãŠã®ããŒããŒã ã¬ã€ã¢ãŠãã«ã¯ãã¬ã€ã¢ãŠããšèšèªãèå¥ãã察å¿ãããã³ãã«ããããŸãã ãã³ãã«éšåã®äžäœã¯ãŒãã¯èšèªèå¥åã§ãã é«ãåèªã¯ãç©çã¬ã€ã¢ãŠããæå®ããããã€ã¹ ãã³ãã«ããŸãã¯æ¢å®ã®ç©çã¬ã€ã¢ãŠãã瀺ã 0 ã§ãã ãŠãŒã¶ãŒã¯ãä»»æã®å ¥åèšèªãç©çã¬ã€ã¢ãŠãã«é¢é£ä»ããããšãã§ããŸãã ããšãã°ããã©ã³ã¹èªã§é »ç¹ã«äœæ¥ããè±èªã話ããŠãŒã¶ãŒã¯ãããŒããŒãã®ç©ççãªã¬ã€ã¢ãŠãã倿Žããã«ãããŒããŒãã®å ¥åèšèªããã©ã³ã¹èªã«èšå®ã§ããŸãã ã€ãŸãããŠãŒã¶ãŒã¯äœ¿ãæ £ããè±èªã¬ã€ã¢ãŠãã䜿çšããŠãã©ã³ã¹èªã§ããã¹ããå ¥åã§ããŸãã
éåžžãã¢ããªã±ãŒã·ã§ã³ã¯å ¥åèšèªãçŽæ¥æäœããããšã¯æ³å®ãããŠããŸããã 代ããã«ããŠãŒã¶ãŒã¯èšèªãšã¬ã€ã¢ãŠãã®çµã¿åãããèšå®ãããã®éã§åãæ¿ããŸãã ãŠãŒã¶ãŒãå¥ã®èšèªã§ããŒã¯ãããããã¹ããã¯ãªãã¯ãããšãã¢ããªã±ãŒã·ã§ã³ã¯ ActivateKeyboardLayout 颿°ãåŒã³åºããŠããã®èšèªã®ãŠãŒã¶ãŒã®æ¢å®ã®ã¬ã€ã¢ãŠããã¢ã¯ãã£ãã«ããŸãã ãŠãŒã¶ãŒãã¢ã¯ãã£ããªãªã¹ãã«ãªãèšèªã§ããã¹ããç·šéããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯èšèªã§ LoadKeyboardLayout 颿°ãåŒã³åºããŠããã®èšèªã«åºã¥ããŠã¬ã€ã¢ãŠããååŸã§ããŸãã
ActivateKeyboardLayout 颿°ã¯ãçŸåšã®ã¿ã¹ã¯ã®å ¥åèšèªãèšå®ããŸãã hkl ãã©ã¡ãŒã¿ãŒã«ã¯ãããŒããŒã ã¬ã€ã¢ãŠãã®ãã³ãã«ãŸã㯠0 ããæ¡åŒµãããèšèªèå¥åã®ãããããæå®ã§ããŸãã ããŒããŒã ã¬ã€ã¢ãŠã ãã³ãã«ã¯ã LoadKeyboardLayout ãŸã㯠GetKeyboardLayoutList 颿°ããååŸã§ããŸãã HKL_NEXTãšHKL_PREVã®å€ã䜿çšããŠã次ã®ããŒããŒããŸãã¯åã®ããŒããŒããéžæããããšãã§ããŸãã
GetKeyboardLayoutName 颿°ã¯ãåŒã³åºãå ã¹ã¬ããã®ã¢ã¯ãã£ããªããŒããŒã ã¬ã€ã¢ãŠãã®ååãååŸããŸãã ã¢ããªã±ãŒã·ã§ã³ã LoadKeyboardLayout 颿°ã䜿çšããŠã¢ã¯ãã£ããªã¬ã€ã¢ãŠããäœæããå Žåã GetKeyboardLayoutName ã¯ã¬ã€ã¢ãŠãã®äœæã«äœ¿çšããã®ãšåãæååãååŸããŸãã ãã以å€ã®å Žåãæååã¯ãã¢ã¯ãã£ããªã¬ã€ã¢ãŠãã®ãã±ãŒã«ã«å¯Ÿå¿ãããã©ã€ããªèšèªèå¥åã§ãã ã€ãŸãã颿°ã¯å¿ ãããåããã©ã€ããªèšèªãæã€ç°ãªãã¬ã€ã¢ãŠãéã§åºå¥ãããªãå¯èœæ§ããããããå ¥åèšèªã«é¢ããç¹å®ã®æ å ±ãè¿ãããšã¯ã§ããŸããã ãã ãã GetKeyboardLayout 颿°ã䜿çšããŠå ¥åèšèªã決å®ã§ããŸãã
LoadKeyboardLayout 颿°ã¯ãããŒããŒã ã¬ã€ã¢ãŠããèªã¿èŸŒã¿ããŠãŒã¶ãŒãã¬ã€ã¢ãŠãã䜿çšã§ããããã«ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã KLF_ACTIVATE å€ã䜿çšããŠãçŸåšã®ã¹ã¬ããã®ã¬ã€ã¢ãŠããããã«ã¢ã¯ãã£ãã«ããããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã KLF_REORDER å€ã䜿çšããŠã KLF_ACTIVATE å€ãæå®ããã«ã¬ã€ã¢ãŠããäžŠã¹æ¿ããããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒããŒã ã¬ã€ã¢ãŠããèªã¿èŸŒããšãã« åžžã« KLF_SUBSTITUTE_OK å€ã䜿çšããŠããŠãŒã¶ãŒã®èšå® (ããå Žå) ãéžæãããŠããããšã確èªããå¿ èŠããããŸãã
å€èšèªãµããŒãã®ããã«ã LoadKeyboardLayout 颿°ã¯ KLF_REPLACELANG ãã©ã°ãš KLF_NOTELLSHELL ãã©ã°ãæäŸããŸãã KLF_REPLACELANG ãã©ã°ã¯ãèšèªã倿Žããã«æ¢åã®ããŒããŒã ã¬ã€ã¢ãŠãã眮ãæãã颿°ãæç€ºããŸãã åãèšèªèå¥åã䜿çšãã KLF_REPLACELANG ãæå®ããã«æ¢åã®ã¬ã€ã¢ãŠãã眮ãæããããšãããšããšã©ãŒã«ãªããŸãã KLF_NOTELLSHELL ãã©ã°ãèšå®ãããšãããŒããŒã ã¬ã€ã¢ãŠãã远å ãŸãã¯çœ®ãæãããããšãã«ã颿°ãã·ã§ã«ã«éç¥ã§ããªããªããŸãã ããã¯ãé£ç¶ããäžé£ã®åŒã³åºãã§è€æ°ã®ã¬ã€ã¢ãŠãã远å ããã¢ããªã±ãŒã·ã§ã³ã«åœ¹ç«ã¡ãŸãã ãã®ãã©ã°ã¯ãæåŸã®åŒã³åºã以å€ã®ãã¹ãŠã®åŒã³åºãã§äœ¿çšããå¿ èŠããããŸãã
UnloadKeyboardLayout 颿°ã¯ãã·ã¹ãã ã®æ¢å®ã®å ¥åèšèªãã¢ã³ããŒãã§ããªããšããç¹ã§å¶éãããŠããŸãã ããã«ãããã·ã§ã«ããã³ãã¡ã€ã« ã·ã¹ãã ã§äœ¿çšãããã®ãšåãæåã»ããã䜿çšããŠããŠãŒã¶ãŒãåžžã« 1 ã€ã®ã¬ã€ã¢ãŠããå ¥åããã¹ãã«äœ¿çšã§ããããã«ãªããŸãã