Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ããã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¡ãã»ãŒãžãããŠã¹ ã¢ã¯ã·ã§ã³ãããŒã¹ãããŒã¯ãªã©ã®ã€ãã³ããã€ã³ã¿ãŒã»ããã§ããã¡ã«ããºã ã§ãã ç¹å®ã®çš®é¡ã®ã€ãã³ããã€ã³ã¿ãŒã»ãããã颿°ã¯ã ãã㯠ããã·ãŒãžã£ãšåŒã°ããŸãã ãã㯠ããã·ãŒãžã£ã¯ãåä¿¡ããåã€ãã³ãã«å¯ŸããŠåäœããã€ãã³ãã倿ŽãŸãã¯ç Žæ£ã§ããŸãã
ããã¯ã«ã¯ã次ã®ãããªçšéããããŸãã
- ãããã°ç®çã§ã®ã¡ãã»ãŒãžã®ç£èŠ
- ãã¯ãã®èšé²ãšåçã®ãµããŒããæäŸãã
- ãã«ã ããŒã®ãµããŒãã®æäŸ (F1)
- ããŠã¹ãšããŒããŒãå ¥åã®ã·ãã¥ã¬ãŒã
- ã³ã³ãã¥ãŒã¿ãŒ ããŒã¹ã®ãã¬ãŒãã³ã° (CBT) ã¢ããªã±ãŒã·ã§ã³ã®å®è£
泚
ããã¯ã¯ãåã¡ãã»ãŒãžã«å¯ŸããŠã·ã¹ãã ãå®è¡ããå¿ èŠãããåŠçéãå¢ãããããã·ã¹ãã ã®é床ãäœäžããåŸåããããŸãã ããã¯ã¯ãå¿ èŠãªå Žåã«ã®ã¿ã€ã³ã¹ããŒã«ããã§ããã ãæ©ãåé€ããå¿ èŠããããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã次ã«ã€ããŠèª¬æããŸãã
ãã㯠ãã§ãŒã³
ã·ã¹ãã ã¯ãããã¯ã®å€ãã®ç°ãªãã¿ã€ãããµããŒãããŠããŸããååã¯ãã¡ãã»ãŒãžåŠçã¡ã«ããºã ã®ããŸããŸãªåŽé¢ã«ã¢ã¯ã»ã¹ã§ããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ ãWH_MOUSE ããã¯ã䜿çšããŠãããŠã¹ ã¡ãã»ãŒãžã®ã¡ãã»ãŒãž ãã©ãã£ãã¯ãç£èŠã§ããŸãã
ã·ã¹ãã ã¯ãããã¯ã®çš®é¡ããšã«åå¥ã®ãã㯠ãã§ãŒã³ãç¶æããŸãã ãã㯠ãã§ãŒã³ã¯ããã㯠ããã·ãŒãžã£ãšåŒã°ããç¹æ®ãªã¢ããªã±ãŒã·ã§ã³å®çŸ©ã³ãŒã«ããã¯é¢æ°ãžã®ãã€ã³ã¿ãŒã®äžèЧã§ãã ç¹å®ã®çš®é¡ã®ããã¯ã«é¢é£ä»ããããŠããã¡ãã»ãŒãžãçºçãããšãã·ã¹ãã ã¯ããã㯠ãã§ãŒã³ã§åç §ãããŠããåãã㯠ããã·ãŒãžã£ã«ã¡ãã»ãŒãžã 1 ã€ãã€æž¡ããŸãã ãã㯠ããã·ãŒãžã£ãå®è¡ã§ããã¢ã¯ã·ã§ã³ã¯ãé¢ä¿ããããã¯ã®çš®é¡ã«ãã£ãŠç°ãªããŸãã äžéšã®çš®é¡ã®ããã¯ã®ãã㯠ããã·ãŒãžã£ã§ã¯ãã¡ãã»ãŒãžã®ã¿ãç£èŠã§ããŸããä»ã®ãŠãŒã¶ãŒã¯ãã¡ãã»ãŒãžã倿Žãããããã§ãŒã³ãä»ããŠé²è¡ç¶æ³ã忢ãããããŠã次ã®ãã㯠ããã·ãŒãžã£ãŸãã¯å®å ãŠã£ã³ããŠã«å°éã§ããªãããã«ããããšãã§ããŸãã
ãã㯠ããã·ãŒãžã£
ç¹å®ã®çš®é¡ã®ããã¯ãå©çšããããã«ãéçºè ã¯ãã㯠ããã·ãŒãžã£ãæäŸãã SetWindowsHookEx 颿°ã䜿çšããŠããã¯ã«é¢é£ä»ããããŠãããã§ãŒã³ã«ã€ã³ã¹ããŒã«ããŸãã ãã㯠ããã·ãŒãžã£ã«ã¯ãæ¬¡ã®æ§æãå¿ èŠã§ãã
LRESULT CALLBACK HookProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
// process event
...
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
HookProc ã¯ãã¢ããªã±ãŒã·ã§ã³å®çŸ©åã®ãã¬ãŒã¹ãã«ããŒã§ãã
nCode ãã©ã¡ãŒã¿ãŒã¯ããã㯠ããã·ãŒãžã£ãå®è¡ããã¢ã¯ã·ã§ã³ã決å®ããããã«äœ¿çšãããã㯠ã³ãŒãã§ãã ãã㯠ã³ãŒãã®å€ã¯ãããã¯ã®çš®é¡ã«ãã£ãŠç°ãªããŸããåã¿ã€ãã«ã¯ãç¬èªã®ç¹æ§ã»ããã®ãã㯠ã³ãŒãããããŸãã wParam ãã©ã¡ãŒã¿ãŒãš lParam ãã©ã¡ãŒã¿ãŒã®å€ã¯ãã㯠ã³ãŒãã«ãã£ãŠç°ãªããŸãããéåžžã¯éä¿¡ãŸãã¯æçš¿ãããã¡ãã»ãŒãžã«é¢ããæ å ±ãå«ãŸããŸãã
SetWindowsHookEx 颿°ã¯ãåžžã«ãã㯠ãã§ãŒã³ã®å é ã«ãã㯠ããã·ãŒãžã£ãã€ã³ã¹ããŒã«ããŸãã ç¹å®ã®çš®é¡ã®ããã¯ã«ãã£ãŠç£èŠãããã€ãã³ããçºçãããšãããã¯ã«é¢é£ä»ããããŠãããã㯠ãã§ãŒã³ã®å é ã§ããã·ãŒãžã£ãåŒã³åºãããŸãã ãã§ãŒã³å ã®åãã㯠ããã·ãŒãžã£ã¯ãã€ãã³ããæ¬¡ã®ããã·ãŒãžã£ã«æž¡ããã©ãããæ±ºå®ããŸãã ãã㯠ããã·ãŒãžã£ã¯ ãCallNextHookEx 颿°ãåŒã³åºããŠæ¬¡ã®ããã·ãŒãžã£ã«ã€ãã³ããæž¡ããŸãã
äžéšã®çš®é¡ã®ããã¯ã®ãã㯠ããã·ãŒãžã£ã§ã¯ãã¡ãã»ãŒãžã®ã¿ãç£èŠã§ããããšã«æ³šæããŠãã ããã ã·ã¹ãã ã¯ãç¹å®ã®ããã·ãŒãžã£ã CallNextHookEx ãåŒã³åºããã©ããã«é¢ä¿ãªããåãã㯠ããã·ãŒãžã£ã«ã¡ãã»ãŒãžãæž¡ããŸãã
ã°ããŒãã« ããã¯ã¯ãåŒã³åºãå ã¹ã¬ãããšåããã¹ã¯ãããå ã®ãã¹ãŠã®ã¹ã¬ããã®ã¡ãã»ãŒãžãç£èŠããŸãã ã¹ã¬ããåºæã®ããã¯ã¯ãåã ã®ã¹ã¬ããã«ã€ããŠã®ã¿ã¡ãã»ãŒãžãç£èŠããŸãã ã°ããŒãã« ãã㯠ããã·ãŒãžã£ã¯ãåŒã³åºãå ã¹ã¬ãããšåããã¹ã¯ãããå ã®ä»»æã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã¹ãã§åŒã³åºãããšãã§ããã®ã§ãããã·ãŒãžã£ã¯å¥ã® DLL ã¢ãžã¥ãŒã«ã«å«ãŸããŠããå¿ èŠããããŸãã ã¹ã¬ããåºæã®ãã㯠ããã·ãŒãžã£ã¯ãé¢é£ä»ããããã¹ã¬ããã®ã³ã³ããã¹ãã§ã®ã¿åŒã³åºãããŸãã ã¢ããªã±ãŒã·ã§ã³ãç¬èªã®ã¹ã¬ããã® 1 ã€ã«ãã㯠ããã·ãŒãžã£ãã€ã³ã¹ããŒã«ããå Žåããã㯠ããã·ãŒãžã£ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã®æ®ãã®éšåãšåãã¢ãžã¥ãŒã«ãŸã㯠DLL å ã«çœ®ãããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¬ããã®ãã㯠ããã·ãŒãžã£ãã€ã³ã¹ããŒã«ããå Žåãããã·ãŒãžã£ã¯ DLL å ã«ããå¿ èŠããããŸãã 詳现ã«ã€ããŠã¯ãã Dynamic-Link ã©ã€ãã©ãªããåç §ããŠãã ããã
泚
ã°ããŒãã« ããã¯ã¯ããããã°ç®çã§ã®ã¿äœ¿çšããå¿ èŠããããŸãããã以å€ã®å Žåã¯ãããããé¿ããå¿ èŠããããŸãã ã°ããŒãã« ããã¯ã¯ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãäœäžãããåãçš®é¡ã®ã°ããŒãã« ããã¯ãå®è£ ããä»ã®ã¢ããªã±ãŒã·ã§ã³ãšã®ç«¶åãåŒãèµ·ãããŸãã
ããã¯ã®çš®é¡
ããã¯ã®çš®é¡ããšã«ãã¢ããªã±ãŒã·ã§ã³ã¯ã·ã¹ãã ã®ã¡ãã»ãŒãžåŠçã¡ã«ããºã ã®ããŸããŸãªåŽé¢ãç£èŠã§ããŸãã æ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ã䜿çšå¯èœãªããã¯ã«ã€ããŠèª¬æããŸãã
- WH_CALLWNDPROCãšWH_CALLWNDPROCRET
- WH_CBT
- WH_DEBUG
- WH_FOREGROUNDIDLE
- WH_GETMESSAGE
- WH_JOURNALPLAYBACK
- WH_JOURNALRECORD
- WH_KEYBOARD_LL
- WH_KEYBOARD
- WH_MOUSE_LL
- WH_MOUSE
- WH_MSGFILTERãšWH_SYSMSGFILTER
- WH_SHELL
WH_CALLWNDPROCãšWH_CALLWNDPROCRET
WH_CALLWNDPROCãšWH_CALLWNDPROCRETããã¯ã䜿çšãããšããŠã£ã³ã㊠ããã·ãŒãžã£ã«éä¿¡ãããã¡ãã»ãŒãžãç£èŠã§ããŸãã ã·ã¹ãã ã¯ãã¡ãã»ãŒãžãåä¿¡ãŠã£ã³ããŠã»ããã·ãŒãžã£ãŒã«æž¡ãåã« WH_CALLWNDPROC ã»ããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºãããŠã£ã³ããŠã»ããã·ãŒãžã£ãŒãã¡ãã»ãŒãžãåŠçããåŸã« WH_CALLWNDPROCRET ã»ããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºããŸãã
WH_CALLWNDPROCRETããã¯ã¯ãCWPRETSTRUCT æ§é äœãžã®ãã€ã³ã¿ãŒããã㯠ããã·ãŒãžã£ã«æž¡ããŸãã æ§é äœã«ã¯ãã¡ãã»ãŒãžãåŠçãããŠã£ã³ã㊠ããã·ãŒãžã£ããã®æ»ãå€ãšãã¡ãã»ãŒãžã«é¢é£ä»ããããŠããã¡ãã»ãŒãž ãã©ã¡ãŒã¿ãŒãå«ãŸããŠããŸãã ãŠã£ã³ããŠã®ãµãã¯ã©ã¹åã¯ãããã»ã¹éã§èšå®ãããã¡ãã»ãŒãžã§ã¯æ©èœããŸããã
詳现ã«ã€ããŠã¯ã CallWndProc ããã³ CallWndRetProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_CBT
ã·ã¹ãã ã¯ããŠã£ã³ããŠãã¢ã¯ãã£ãåãäœæãç Žæ£ãæå°åãæå€§åãç§»åããŸãã¯ãµã€ãºå€æŽããåã«ã WH_CBT ããã¯ããã·ãŒãžã£ãåŒã³åºããŸããã·ã¹ãã ã³ãã³ããå®äºããåã«;ã·ã¹ãã ã¡ãã»ãŒãž ãã¥ãŒããããŠã¹ãŸãã¯ããŒããŒã ã€ãã³ããåé€ããåãå ¥åãã©ãŒã«ã¹ãèšå®ããåã«;ãŸãã¯ã·ã¹ãã ã¡ãã»ãŒãž ãã¥ãŒãšåæããåã«è¡ããŸãã ããã¯ã»ããã·ãŒãžã£ãŒãæ»ãå€ã¯ãã·ã¹ãã ããããã®æäœã® 1 ã€ãèš±å¯ãŸãã¯çŠæ¢ãããã©ãããæ±ºå®ããŸãã WH_CBT ããã¯ã¯ãäž»ã«ã³ã³ãã¥ãŒã¿ãŒ ããŒã¹ã®ãã¬ãŒãã³ã° (CBT) ã¢ããªã±ãŒã·ã§ã³ã察象ãšããŠããŸãã
詳现ã«ã€ããŠã¯ã CBTProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
詳现ã«ã€ããŠã¯ãã WinEventsããåç §ããŠãã ããã
WH_DEBUG
ã·ã¹ãã ã¯ãã·ã¹ãã å ã®ä»ã®ããã¯ã«é¢é£ä»ããããããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºãåã«ã WH_DEBUG ã»ããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºããŸãã ãã®ããã¯ã䜿çšããŠãã·ã¹ãã ãä»ã®ã¿ã€ãã®ããã¯ã«é¢é£ä»ããããããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºããããã«ãããã©ãããå€å¥ã§ããŸãã
詳现ã«ã€ããŠã¯ã DebugProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_FOREGROUNDIDLE
WH_FOREGROUNDIDLE ããã¯ã䜿çšãããšããã©ã¢ã°ã©ãŠã³ã ã¹ã¬ãããã¢ã€ãã«ç¶æ ã®ãšãã«åªå é äœã®äœãã¿ã¹ã¯ãå®è¡ã§ããŸãã ã·ã¹ãã ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã©ã¢ã°ã©ãŠã³ã ã¹ã¬ãããã¢ã€ãã«ç¶æ ã«ãªããããšããŠãããšãã«ã WH_FOREGROUNDIDLE ãã㯠ããã·ãŒãžã£ãåŒã³åºããŸãã
詳现ã«ã€ããŠã¯ã ForegroundIdleProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_GETMESSAGE
WH_GETMESSAGEããã¯ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ GetMessage ãŸã㯠PeekMessage 颿°ã«ãã£ãŠè¿ãããã¡ãã»ãŒãžãç£èŠã§ããŸãã WH_GETMESSAGE ããã¯ã䜿çšããŠãããŠã¹ãšããŒããŒãã®å ¥åãããã³ã¡ãã»ãŒãž ãã¥ãŒã«æçš¿ããããã®ä»ã®ã¡ãã»ãŒãžãç£èŠã§ããŸãã
詳现ã«ã€ããŠã¯ã GetMsgProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_JOURNALPLAYBACK
Warnung
Journaling Hooks API ã¯ãWindows 11 以éã§ã¯ãµããŒããããŠããããä»åŸã®ãªãªãŒã¹ã§åé€ãããäºå®ã§ãã ãã®ããã代ããã«ãSendInput TextInput API ãåŒã³åºãããã«åŒ·ããå§ãããŸãã
WH_JOURNALPLAYBACK ããã¯ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ã·ã¹ãã ã¡ãã»ãŒãž ãã¥ãŒã«ã¡ãã»ãŒãžãæ¿å ¥ã§ããŸãã ãã®ããã¯ã䜿çšãããšãWH_JOURNALRECORD ã䜿çšããŠãåã«èšé²ããäžé£ã®ããŠã¹ ã€ãã³ããšããŒããŒã ã€ãã³ããåçã§ããŸãã WH_JOURNALPLAYBACKããã¯ãã€ã³ã¹ããŒã«ãããŠããéããéåžžã®ããŠã¹ãšããŒããŒãã®å ¥åã¯ç¡å¹ã«ãªããŸãã WH_JOURNALPLAYBACK ããã¯ã¯ã°ããŒãã« ããã¯ã§ãããã¹ã¬ããåºæã®ããã¯ãšããŠäœ¿çšããããšã¯ã§ããŸããã
WH_JOURNALPLAYBACK ããã¯ã¯ã¿ã€ã ã¢ãŠãå€ãè¿ããŸãã ãã®å€ã¯ãåçããã¯ããçŸåšã®ã¡ãã»ãŒãžãåŠçãããŸã§ã«åŸ æ©ããããªç§æ°ãã·ã¹ãã ã«éç¥ããŸãã ããã«ãããããã¯ã¯åçãããã€ãã³ãã®ã¿ã€ãã³ã°ãå¶åŸ¡ã§ããŸãã
詳现ã«ã€ããŠã¯ã JournalPlaybackProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_JOURNALRECORD
Warnung
Journaling Hooks API ã¯ãWindows 11 以éã§ã¯ãµããŒããããŠããããä»åŸã®ãªãªãŒã¹ã§åé€ãããäºå®ã§ãã ãã®ããã代ããã«ãSendInput TextInput API ãåŒã³åºãããã«åŒ·ããå§ãããŸãã
WH_JOURNALRECORD ããã¯ã䜿çšãããšãå ¥åã€ãã³ããç£èŠããã³èšé²ã§ããŸãã éåžžããã®ããã¯ã䜿çšããŠãWH_JOURNALPLAYBACK ã䜿çšããŠåŸã§åçããäžé£ã®ããŠã¹ã€ãã³ããšããŒããŒã ã€ãã³ããèšé²ããŸãã WH_JOURNALRECORD ããã¯ã¯ã°ããŒãã« ããã¯ã§ãããã¹ã¬ããåºæã®ããã¯ãšããŠäœ¿çšããããšã¯ã§ããŸããã
詳现ã«ã€ããŠã¯ã JournalRecordProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_KEYBOARD_LL
WH_KEYBOARD_LLããã¯ã䜿çšãããšãã¹ã¬ããå ¥åãã¥ãŒã«ãã¹ããããããšããŠããããŒããŒãå ¥åã€ãã³ããç£èŠã§ããŸãã
詳现ã«ã€ããŠã¯ã LowLevelKeyboardProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_KEYBOARD
WH_KEYBOARD ããã¯ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ GetMessage ãŸã㯠PeekMessage 颿°ã«ãã£ãŠè¿ãããWM_KEYDOWNã¡ãã»ãŒãžãšWM_KEYUPã¡ãã»ãŒãžã®ã¡ãã»ãŒãž ãã©ãã£ãã¯ãç£èŠã§ããŸãã WH_KEYBOARD ããã¯ã䜿çšããŠãã¡ãã»ãŒãž ãã¥ãŒã«ãã¹ããããããŒããŒãå ¥åãç£èŠã§ããŸãã
詳现ã«ã€ããŠã¯ã KeyboardProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_MOUSE_LL
WH_MOUSE_LLããã¯ã䜿çšãããšãã¹ã¬ããå ¥åãã¥ãŒã«ãã¹ããããããšããŠããããŠã¹å ¥åã€ãã³ããç£èŠã§ããŸãã
詳现ã«ã€ããŠã¯ã LowLevelMouseProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_MOUSE
WH_MOUSE ããã¯ã䜿çšãããšãGetMessage ãŸã㯠PeekMessage 颿°ã«ãã£ãŠè¿ãããããŠã¹ ã¡ãã»ãŒãžãç£èŠã§ããŸãã WH_MOUSEããã¯ã䜿çšããŠãã¡ãã»ãŒãž ãã¥ãŒã«ãã¹ããããããŠã¹å ¥åãç£èŠã§ããŸãã
詳现ã«ã€ããŠã¯ã MouseProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_MSGFILTERãšWH_SYSMSGFILTER
WH_MSGFILTERãšWH_SYSMSGFILTERããã¯ã䜿çšãããšãã¡ãã¥ãŒãã¹ã¯ããŒã« ããŒãã¡ãã»ãŒãž ããã¯ã¹ããŸãã¯ãã€ã¢ãã° ããã¯ã¹ã«ãã£ãŠåŠçãããã¡ãã»ãŒãžãç£èŠãããããŠãŒã¶ãŒã Alt + Tab ããŒãŸã㯠Alt + Esc ããŒã®çµã¿åãããæŒããçµæãšããŠãå¥ã®ãŠã£ã³ããŠãã¢ã¯ãã£ãåãããããšããŠããã¿ã€ãã³ã°ãæ€åºãããã§ããŸãã WH_MSGFILTER ããã¯ã¯ããã㯠ããã·ãŒãžã£ãã€ã³ã¹ããŒã«ããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠäœæãããã¡ãã¥ãŒãã¹ã¯ããŒã« ããŒãã¡ãã»ãŒãž ããã¯ã¹ããŸãã¯ãã€ã¢ãã° ããã¯ã¹ã«æž¡ãããã¡ãã»ãŒãžã®ã¿ãç£èŠã§ããŸãã WH_SYSMSGFILTER ããã¯ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠãã®ãããªã¡ãã»ãŒãžãç£èŠããŸãã
WH_MSGFILTERãšWH_SYSMSGFILTERã®ããã¯ã䜿çšãããšãã¡ã€ã³ ã¡ãã»ãŒãž ã«ãŒãã§è¡ããããã£ã«ã¿ãŒåŠçãšåçã®ã¢ãŒãã« ã«ãŒãäžã«ã¡ãã»ãŒãž ãã£ã«ã¿ãŒåŠçãå®è¡ã§ããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯ããã¥ãŒããã¡ãã»ãŒãžãååŸããŠããã¡ãã»ãŒãžããã£ã¹ãããããŠãããå¿ èŠã«å¿ããŠç¹å¥ãªåŠçãå®è¡ããŠãããã¡ã€ã³ ã«ãŒãå ã®æ°ããã¡ãã»ãŒãžã調ã¹ãããšããããããŸãã ãã ããã¢ãŒãã« ã«ãŒãäžãã·ã¹ãã ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã³ ã¡ãã»ãŒãž ã«ãŒãå ã®ã¡ãã»ãŒãžããã£ã«ã¿ãŒåŠçããããšãèš±å¯ããã«ãã¡ãã»ãŒãžãååŸããŠãã£ã¹ãããããŸãã ã¢ããªã±ãŒã·ã§ã³ã WH_MSGFILTERãŸãã¯WH_SYSMSGFILTER ãã㯠ããã·ãŒãžã£ ã ã€ã³ã¹ããŒã«ããå Žåãã·ã¹ãã ã¯ã¢ãŒãã« ã«ãŒãäžã«ããã·ãŒãžã£ãåŒã³åºããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãCallMsgFilter 颿°ãåŒã³åºãããšã«ãã£ãŠãWH_MSGFILTER ããã¯ãçŽæ¥åŒã³åºãããšãã§ããŸãã ãã®é¢æ°ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ã¡ã€ã³ ã¡ãã»ãŒãž ã«ãŒãã§äœ¿çšããã®ãšåãã³ãŒãã䜿çšããŠãã¢ãŒãã« ã«ãŒãäžã«ã¡ãã»ãŒãžããã£ã«ã¿ãŒåŠçã§ããŸãã ãã®ããã«ã¯ããã£ã«ã¿ãŒåŠçæäœãWH_MSGFILTERãã㯠ããã·ãŒãžã£ã«ã«ãã»ã«åããGetMessage 颿°ãš DispatchMessage 颿°ã®åŒã³åºãã®éã§ CallMsgFilter ãåŒã³åºããŸãã
while (GetMessage(&msg, (HWND) NULL, 0, 0))
{
if (!CallMsgFilter(&qmsg, 0))
DispatchMessage(&qmsg);
}
CallMsgFilter ã®æåŸã®åŒæ°ã¯ãåçŽã«ãã㯠ããã·ãŒãžã£ã«æž¡ãããŸããä»»æã®å€ãå ¥åã§ããŸãã ãã㯠ããã·ãŒãžã£ã§ã¯ã MSGF_MAINLOOPãªã©ã®å®æ°ãå®çŸ©ããããšã§ããã®å€ã䜿çšããŠããã·ãŒãžã£ã®åŒã³åºãå ãç¹å®ã§ããŸãã
詳现ã«ã€ããŠã¯ã MessageProc ããã³ SysMsgProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã
WH_SHELL
ã·ã§ã« ã¢ããªã±ãŒã·ã§ã³ã¯ã WH_SHELL ããã¯ã䜿çšããŠéèŠãªéç¥ãåä¿¡ã§ããŸãã ã·ã§ã«ã» ã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ã åãããããšããŠãããšããããã³ãããã¬ãã«ã»ãŠã£ã³ããŠãäœæãŸãã¯ç Žæ£ããããšãã«ãã·ã¹ãã ã¯WH_SHELLã»ããã¯ã»ããã·ãŒãžã£ãŒãåŒã³åºããŸãã
ã«ã¹ã¿ã ã·ã§ã« ã¢ããªã±ãŒã·ã§ã³ã¯ ãWH_SHELL ã¡ãã»ãŒãžãåä¿¡ããªãããšã«æ³šæããŠãã ããã ãã®ãããæ¢å®ã®ã·ã§ã«ãšããŠèªèº«ãç»é²ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ãWH_SHELLã¡ãã»ãŒãžãåä¿¡ããåã« SystemParametersInfo 颿°ãåŒã³åºãå¿ èŠããããŸãã ãã®é¢æ°ã¯ã SPI_SETMINIMIZEDMETRICS ãš MINIMIZEDMETRICS æ§é äœã䜿çšããŠåŒã³åºãå¿ èŠããããŸãã ãã®æ§é äœã® iArrange ã¡ã³ããŒãARW_HIDEã«èšå® ããŸãã
詳现ã«ã€ããŠã¯ã ShellProc ã³ãŒã«ããã¯é¢æ°ãåç §ããŠãã ããã