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¿¡ ´ëÇÑ À߸øµÈ ÀÌÇØ¿¡¼­ ³ª¿Â ¾ÆÁÖ À߸øµÈ Äڵ忴´ø °Í ÀÔ´Ï´Ù. ¤¾¤¾~ Áö³­ ´Þ¿¡µµ Å×½ºÆ®¸¦ ÇÑ´Ù°í Çß¾ú´Âµ¥ Á¦°¡ Å×½ºÆ® ½Ã¿¡´Â ¿©·¯ âÀ» ´Ý°í ÇØ¼­ Á¦´ë·Î Å×½ºÆ®°¡ µÇÁö ¾Ê¾Ò´ø °Í °°½À´Ï´Ù.