EnumChildWindows »ç¿ë ÄÚµå ¹ö±× ÆÐÄ¡
2006-07-25 ½Å¿µÁø
7¿ùÈ£ ±â»ç¿¡ EnumChildWindows¸¦ »ç¿ëÇÑ ¼Ò½º¿¡ Ä¡¸íÀûÀÎ °áÇÔÀÌ ÀÖ½À´Ï´Ù. ³Ê¹«³Ê¹« Ä¡¸íÀûÀÌ¾î¼ Á¤¸» Á˼ÛÇÒ µû¸§ÀÔ´Ï´Ù. ¤Ð.¤Ì~ ¼öÁ¤ÇÏÁö ¾Ê°í »ç¿ëÇÒ °æ¿ì Á¦´ë·ÎµÈ °á°ú¸¦ º¸Àå¹ÞÁö ¸øÇϸç, ¼º´É»ó¿¡ ½É°¢ÇÑ ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù. ²À °íÃļ »ç¿ëÇϵµ·Ï ÇսôÙ.
EnumChildWindows
EnumChildWindows¿¡ ´ëÇÑ ÇÔ¼ö ¼Ò°³´Â 7¿ùÈ£ ¿ø°í¸¦ Âü°í Çϼ¼¿ä. ¾Æ·¡ ȸéÀ» º¾½Ã´Ù. Spy++·Î Shell_TrayWnd¸¦ È®ÀåÇÑ È¸éÀÔ´Ï´Ù. ÀÚ½ÄÀÌ ÃÑ 10°³°¡ Á¸ÀçÇÕ´Ï´Ù. EnumChildWindows·Î Shell_TrayWnd¸¦ ¿°ÅÇÏ¸é ¾î¶² À©µµ¿ìµéÀÌ ¿°Å µÉ±î¿ä?

¾Æ·¡¿Í °°ÀÌ 10°³ÀÇ ¸ðµç ÀÚ½Ä À©µµ¿ì°¡ ¿°Å µË´Ï´Ù. ¾Æ¸¶ ÀÌÂë µÇ¸é 7¿ùÈ£ ¿ø°í¿¡ ¹«½¼ ¹®Á¦°¡ ÀÖ´ÂÁö ¸ðµÎµé ¾Æ½Ã¸®¶ó »ý°¢µË´Ï´Ù. Ȥ½Ã³ª ¾ÆÁ÷ ÀÌÇØ°¡ µÇÁö ¾Ê´Â ºÐµéÀº ¾Æ·¡ ³»¿ëÀ» ¸¶Àú º¸µµ·Ï ÇսôÙ.

Recursive Call
À§ ÄÚµå´Â ¸¶¼Ò 7¿ùÈ£¿¡ ¼Ò°³µÈ ¸ðµç À©µµ¿ì¸¦ ¿°ÅÇÏ´Â ÄÚµå ÀÔ´Ï´Ù. Àç±Í È£ÃâÀ» »ç¿ëµÇ¾î Á¦À۵Ǿî ÀÖ½À´Ï´Ù. ÀÌ Äڵ尡 µ¿ÀÛÇÏ·Á¸é ¾Õ¼ »ìÆì º¸¾Ò´ø À©µµ¿ì ±¸Á¶¿¡¼ EnumChildWindows°¡ Á÷Á¢ÀûÀÎ ÀÚ½ÄÀÎ Button, TrayNotifyWnd, ReBarWindow32¸¸ ¿°ÅÇØ¾ß ÇÕ´Ï´Ù. ÇÏÁö¸¸ ±×·¸Áö ¾ÊÁÒ.
±×·¸´Ù¸é À§ Äڵ带 ÅëÇØ¼ Shell_TrayWnd¸¦ ¿°ÅÇØ º¸µµ·Ï ÇսôÙ. ¾î¶»°Ô µÉ±î¿ä?

À§ÀÇ °á°ú¿Í °°ÀÌ Áߺ¹µÈ °ªµéÀÌ ³ª¿À°Ô µË´Ï´Ù. °èÃþ ±¸Á¶°¡ ±íÀ»¼ö·Ï, ÀÚ½ÄÀÇ ÀÚ½ÄÀÌ ¸¹À» ¼ö·Ï Áߺ¹µÈ À©µµ¿ì°¡ ¸¹ÀÌ ³ª¿À°Ô µË´Ï´Ù. °á±¹ À§ Ãâ·Â °á°ú´Â ¿ÏÀü Ʋ¸° °ÍÀÌÁÒ.
¹Ù·ÎÀâ¾Æ º¾½Ã´Ù
¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Ð ¹«¾ùÀÌ ÀÖÀ»±î¿ä? ±×·¸½À´Ï´Ù. °¡Àå ¼Õ½¬¿î ¹æ¹ýÀÎ GetWindow¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Äڵ带 ´ÙÀ½°ú °°ÀÌ °íÃĺ¾½Ã´Ù.
Àüü À©µµ¿ì¸¦ ¿°ÅÇϱâ À§Çؼ´Â ¾Æ·¡¿Í °°ÀÌ È£ÃâÇÏ¸é µË´Ï´Ù.
¾Æ·¡´Â À§ Äڵ带 ÅëÇØ¼ Shell_TrayWnd¸¦ ¿°ÅÇÑ È¸é ÀÔ´Ï´Ù.

±¸Â÷ÇÑ º¯¸íÀÔ´Ï´Ù.
EnumChildWindowsÀÇ MSDN ¼³¸íÀ» º¸¸é "If this parameter is NULL, this function is equivalent to EnumWindows." ¹®±¸°¡ ÀÖ½À´Ï´Ù. NULLÀ» ³ÖÀ¸¸é EnumWindows¿Í µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÑ´Ù´Â °ÍÀÌÁÒ. ¿©±â¼ NULLÀ» Á¦°¡ GetDesktopWindowÀÇ ¸®ÅÏ °ªÀ¸·Î Âø°¢À» Çß´ø °Í °°½À´Ï´Ù. ±×¸®°í Ãß°¡ÀûÀ¸·Î 98/MEÀÇ °æ¿ì¿¡´Â NULLÀ» ³ÖÀ¸¸é µ¿ÀÛÇÏÁö ¾Ê´Â´Ù°í ÇÕ´Ï´Ù. ¿Ö ±»ÀÌ NT Äھ¼´Â NULLÀ» ³Ö¾úÀ» ¶§ EnumWindowsó·³ µ¿ÀÛÇϵµ·Ï ¸¸µé¾ú³ª ÀÌÇØ°¡ µÇÁö ¾Ê´Â ºÎºÐÀÔ´Ï´Ù.
¾î¶»°Ô ¾Ë¾ÒÀ»±î¿ä?
9¿ùÈ£¿¡ Á¦°øµÉ Spy++°ú À¯»çÇÑ ÇÁ·Î±×·¥ »ùÇÃÀ» Á¦ÀÛÇÏ´Ù ¾Ë°Ô µÇ¾ú½À´Ï´Ù. Æ®¸®¸¦ ±¸¼ºÇϴµ¥ Àڱ׸¶Ä¡ ¾ÆÁÖ ¿À·£ ½Ã°£ÀÌ °É¸®´õ±º¿ä~ ¿Ö ±×·²±î? ÇÏ´ø °í¹Î ³¡¿¡ Spy++À» µð¹ö±ë ÇØ º¸¾Ò½À´Ï´Ù. EnumWindows, EnumChildWindows¿¡ ºêÆ÷¸¦ °É¾îµµ ÀâÈ÷Áö ¾Ê±æ·¡ »ìÆìºÃ´õ´Ï GetWindow¸¦ ÅëÇØ¼ ·çÇÁ¸¦ µ¹°í ÀÖ´õ±º¿ä. ±×·¡¼ GetWindow¹öÀü°ú EnumChildWindow ¹öÀüÀ» ÇÁ·ÎÆÄÀϸµ ÇØº¸¾Ò½À´Ï´Ù. ÇÔ¼ö¸í, È£ÃâȽ¼ö, ½Ã°£À̶ó°í º¸¸é µË´Ï´Ù.
GetWindow »ç¿ë ¹öÀü CheckTime(class CTreeCtrl &) 2 0.001218 0.001218 689.497084 52.968649 FillTreeProc(struct HWND__ *,long) 7138 8.581973 4.867138 689.494853 52.966418 EnumChildWindows »ç¿ë ¹öÀü FillTreeProc(struct HWND__ *,long) 336655 309.217339 243.460755 26262.506450 2393.042883 CheckTime(class CTreeCtrl &) 2 0.000949 0.000949 26262.508388 2393.044822
EnumChildWindows ¹öÀüÀÇ È£Ãâ Ƚ¼ö¸¦ Çѹø º¸ÁÒ. ¹«·Á 336655¹ø ÀÔ´Ï´Ù. ¸»µµ ¾È µÇ´Â È£Ãâ Ƚ¼öÁÒ. ±×·¡¼ Áö³´Þ °Á¿¡ »ç¿ëµÈ Äڵ带 µð¹ö±ë ÇØº¸¾Ò½À´Ï´Ù. ±×·¨´õ´Ï ¾Æ´Ï³ª ´Ù¸¦±î EnumChildWindows¿¡ ´ëÇÑ À߸øµÈ ÀÌÇØ¿¡¼ ³ª¿Â ¾ÆÁÖ À߸øµÈ Äڵ忴´ø °Í ÀÔ´Ï´Ù. ¤¾¤¾~ Áö³ ´Þ¿¡µµ Å×½ºÆ®¸¦ ÇÑ´Ù°í Çß¾ú´Âµ¥ Á¦°¡ Å×½ºÆ® ½Ã¿¡´Â ¿©·¯ âÀ» ´Ý°í ÇØ¼ Á¦´ë·Î Å×½ºÆ®°¡ µÇÁö ¾Ê¾Ò´ø °Í °°½À´Ï´Ù.