´Ù. Ž»ö±â ¿¬°á

ÀÏ¹Ý ÆäÀÌÁöÀÇ bExplorerPopup ¿É¼ÇÀº Ž»ö±âÀÇ Æ˾÷¸Þ´º¿¡ ¡®DangeunÀ¸·Î ÆíÁý¡¯ Ç׸ñÀ» Ç¥½ÃÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖÀ¸¸é Ž»ö±â¿¡¼­ ÆíÁýÆÄÀÏÀ» ¼±ÅÃÇÑ ÈÄ °ð¹Ù·Î DangeunÀ» È£ÃâÇÒ ¼ö ÀÖ¾î ¹®¼­ Áß½ÉÀÇ ÆíÁýÀ» ÇÒ ¼ö ÀÖ´Ù. ÆíÁý±â¸¦ ½ÇÇàÇسõ°í ÆíÁýÇÒ ÆÄÀÏÀ» ¿©´Â °ÍÀÌ ¾Æ´Ï¶ó ÆÄÀÏÀ» ¸ÕÀú ¼±ÅÃÇسõ°í ÆíÁý±â¸¦ °í¸¦ ¼ö ÀÖÀ¸¸ç »ç¿ëÀÚ ÇàÀ§¸¦ Áß½ÉÀ¸·Î ÇÏ´Â ¾ÆÁÖ ÈǸ¢ÇÑ ¹æ¹ýÀÌ´Ù.

Ž»ö±âÀÇ Æ˾÷¸Þ´º¿¡ ´ëÇÑ ¼³Á¤Àº ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ¸ç °¢°¢ÀÇ È®ÀåÀÚ¿¡ ´ëÇØ Æ˾÷¸Þ´º¸¦ ºÙÀÏ ¼ö ÀÖ´Ù. ·¹Áö½ºÆ®¸®ÀÇ ¾à¼ÓµÈ À§Ä¡¿¡ Å°¸¦ »ý¼ºÇسõÀ¸¸é Ž»ö±â´Â Æ˾÷¸Þ´º¸¦ ¿­ ¶§ ÀÌ °ªÀ» ÂüÁ¶ÇÏ¿© Æ˾÷¸Þ´º¿¡ Ç׸ñÀ» Ãß°¡ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¸ðµç Á¾·ùÀÇ ÆÄÀÏ¿¡ ´ëÇØ Æ˾÷¸Þ´º¸¦ ºÙÀ̰ųª Á¦°ÅÇÑ´Ù. Dangeun.cpp¿¡ ÀÌ ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.

 

void RegisterPopup(BOOL bReg)

{

     TCHAR Path[MAX_PATH];

 

     GetModuleFileName(g_hInst,Path,MAX_PATH);

     lstrcat(Path, " \"%1\"");

     if (bReg) {

          SHRegWriteString(SHCR,"*\\shell\\DangeunÀ¸·Î ÆíÁý\\Command",NULL,Path);

     } else {

          SHDeleteKey(SHCR,"*\\shell\\DangeunÀ¸·Î ÆíÁý");

     }

}

 

ÄÚµå ³»¿ëÀ» º¸¸é ¾Ë°ÚÁö¸¸ HKEY_CURRENT_USERÀÇ *¼­ºêÅ°¿¡ ¡®shell\DangeunÀ¸·Î ÆíÁý¡¯ ¼­ºêÅ°¸¦ ÀÛ¼ºÇسõÀ¸¸é * È®ÀåÀÚ, Áï ¸ðµç È®ÀåÀÚ¿¡ ´ëÇØ ÀÌ Æ˾÷¸Þ´º¸¦ º¸¿©ÁØ´Ù. ÀÌ ¸Þ´º°¡ ¼±ÅõǸé Command ¼­ºêÅ°¿¡ ±â·ÏµÈ ½ÇÇàÆÄÀÏÀ» ½ÇÇàÇ쵂 Àμö·Î ¼±Åà ÆÄÀÏÀÇ °æ·Î¸¦ ³Ñ°Ü ÁÖµµ·Ï µÇ¾î ÀÖ´Ù. ¿¹¸¦ µé¾î ReadMe.txt ÆÄÀÏ¿¡¼­ ¡®DangeunÀ¸·Î ÆíÁý¡¯À» ¼±ÅÃÇϸé Dangeun.exe ¡®ReadMe.txt¡¯°¡ ½ÇÇàµÈ´Ù. ±ä À̸§À» Áö¿øÇϱâ À§ÇØ Àμö´Â ¹Ýµå½Ã µû¿ÈÇ¥·Î ¹­¾î¾ß ÇÑ´Ù.

Æ˾÷¸Þ´ºÀÇ Ç׸ñÀ» »èÁ¦ÇÒ ¶§´Â ·¹Áö½ºÆ®¸®ÀÇ ¼­ºêÅ°¸¦ »èÁ¦ÇÏ¸é µÈ´Ù. ÀÌ Äڵ忡¼­ »ç¿ëµÈ SHDeleteKey ÇÔ¼ö´Â ÇÏÀ§ Ç׸ñ±îÁö ÇѲ¨¹ø¿¡ »èÁ¦ÇÑ´Ù. RegDeleteKey ÇÔ¼ö´Â 98ÀÌÇÏ¿¡¼­´Â ÇÏÀ§ Ç׸ñÀ» Áö¿öÁÖÁö¸¸ 2000¿¡¼­´Â ±×·¸Áö ¾ÊÀ¸¹Ç·Î Àç±Í È£ÃâÀ» »ç¿ëÇؾ߸¸ ÇÏÀ§ Ç׸ñÀ» Áö¿ï ¼ö Àִµ¥ ºñÇØ ÀÌ ÇÔ¼ö´Â ¿î¿µÃ¼Á¦ ¹öÀü¿¡ »ó°ü¾øÀÌ ÇÏÀ§ Ç׸ñÀ» »èÁ¦ÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ ¾²±â À§Çؼ­´Â Shlwapi.h¸¦ ÀÎŬ·çµåÇØ¾ß Çϸç Shlwapi.lib¸¦ ¿¬°áÇØ¾ß Çϴµ¥ ÀÌ ÀÛ¾÷Àº Dangeun1À» ¸¸µé ¶§ ÀÌ¹Ì ´Ù Çسõ¾Ò´Ù.

ApplyNow¿¡¼­´Â bExplorerPopup ¿É¼Ç°ªÀÌ º¯°æµÉ ¶§ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© Æ˾÷¸Þ´º¸¦ ¼³Ä¡Çϰųª Á¦°ÅÇÑ´Ù. ÀÌ ¿É¼ÇÀº ApiEdit¿Í´Â »ó°üÀÌ ¾øÀ¸¹Ç·Î while ·çÇÁ ¹Ù±ù¿¡¼­ Àû¿ëÇØ¾ß ÇÑ´Ù.

 

void ApplyNow()

{

     HWND hChild;

     SInfo *pSi;

     HDC hdc;

     LOGFONT tFont;

 

    if (Option.bExplorerPopup != NewOption.bExplorerPopup) {

        RegisterPopup(NewOption.bExplorerPopup);

    }

     ....

 

¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÑ ÈÄ Å½»ö±â¸¦ È®ÀÎÇغ¸¸é ´çÀå Æ˾÷¸Þ´º¿¡ ´ç±Ù Ç׸ñÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.

ÀÌ ¸Þ´º¸¦ ¼±ÅÃÇÏ¸é ´ç±ÙÀÌ ½ÇÇàµÈ´Ù. ÇÏÁö¸¸ ¾ÆÁ÷±îÁö ÆíÁý ´ë»ó ÆÄÀÏÀ» Àμö·Î Àü´Þ¹Þ´Â ±â´ÉÀ» ÀÛ¼ºÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ÆÄÀÏÀº ¿­¸®Áö ¾Ê´Âµ¥ ÀÌ ±â´ÉÀº Àá½Ã ÈÄ¿¡ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. ÀÌ ¿É¼Ç¿¡ ÀÇÇØ ·¹Áö½ºÆ®¸®¿¡ ±â·ÏµÇ´Â °ªÀº Dangeun.exeÀÇ Àý´ë°æ·Î´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¼³Ä¡¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ´Üµ¶ ½ÇÇàÆÄÀÏÀ̹ǷΠ¾î¶² À§Ä¡·Î³ª ÀÚÀ¯·Ó°Ô ¿Å°Ü¼­ ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ÈçÇÑ °æ¿ì´Â ¾Æ´ÏÁö¸¸ »ç¿ëÀÚ¿¡ ÀÇÇØ ½ÇÇàÆÄÀÏÀÇ À̸§ÀÌ Baechoo.exe³ª Muoo.exe·Î ¹Ù²ð ¼öµµ ÀÖ´Ù.

±×·¡¼­ RegisterPopup¿¡¼­ ÇÑ ¹ø µî·ÏÇسõÀº Àý´ë°æ·Î°¡ Ç×»ó Á¤È®ÇÏ´Ù°í º¸ÀåÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸Å ½ÇÇà½Ã¸¶´Ù ½ÇÁ¦ °æ·Î·Î º¯°æÇϵµ·Ï ÇÑ´Ù. OnCreate¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {

     } else {

          Option.Load(KEY);

        if (Option.bExplorerPopup) {

           RegisterPopup(TRUE);

        }

     }

     ....

 

·¹Áö½ºÆ®¸®¿¡¼­ ¼³Á¤»óŸ¦ Àоî¿Â Á÷ÈÄ¿¡ bExplorerPopup ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ÀÚ½ÅÀÇ °æ·Î¸¦ °»½ÅÇϵµ·Ï ÇÏ¿´´Ù. ÀÌ·¸°Ô Çϸé À§Ä¡¸¦ ¿Å±â°Å³ª À̸§À» ¹Ù²Ù´õ¶óµµ ÇÑ ¹ø¸¸ ½ÇÇàÇÏ¸é ·¹Áö½ºÆ®¸®ÀÇ Á¤º¸°¡ °»½ÅµÇ¾î Ž»ö±â°¡ Ç×»ó ´ç±ÙÀ»(À̸§ÀÌ ¹»·Î ¹Ù²î¾úµçÁö) Á¦´ë·Î ãÀ» ¼ö ÀÖ´Ù. Ž»ö±âÀÇ Æ˾÷¸Þ´º¿¡ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ´º¸¦ Ãß°¡ÇÏ·Á¸é ¿øÄ¢ÀûÀ¸·Î Ž»ö±â¿Í Åë½ÅÇÒ ¼ö ÀÖ´Â COM °³Ã¼¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. COM °³Ã¼´Â ¼±ÅÃµÈ ÆÄÀÏ¿¡ µû¶ó ´Ù¸¥ Æ˾÷ Ç׸ñÀ» ¸¸µé ¼ö ÀÖÀ¸¸ç ¸Þ´ºÀÇ Ä¸¼ÇÀ» ½Ç½Ã°£À¸·Î °áÁ¤ÇÒ ¼ö ÀÖ´Â µî ¿©·¯ °¡Áö ÀåÁ¡ÀÌ ÀÖ´Ù.

ÇÏÁö¸¸ COM °³Ã¼´Â ºÐ¸®µÈ DLLÀ̾î¾ß ÇÑ´Ù´Â °ÍÀÌ ºÎ´ã½º·´°í ÀÌ ¿¹Á¦ÀÇ °æ¿ì ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ Æ˾÷¸Þ´º¸¦ ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç ¸Þ´ºÀÇ Ä¸¼ÇÀÌ °íÁ¤µÇ¾î ÀÖÀ¸¹Ç·Î Á» ´õ °£´ÜÇÑ ¹æ¹ýÀ» »ç¿ëÇÏ¿´´Ù. Ž»ö±â¿ÍÀÇ ¿¬°áÀ» ¿Ï·áÇÏ·Á¸é Ž»ö±â°¡ Àü´ÞÇÏ´Â Àμö·ÎºÎÅÍ ÆíÁýÇÒ ÆÄÀϸíÀ» ÃßÃâÇØ ³»°í ±× ÆÄÀÏÀ» Áï½Ã ¿­¾î¾ß ÇÑ´Ù. ÃʱâÈ­ ¿Ï·á ½ÃÁ¡ÀÎ OnTimer¿¡¼­ ¸í·ÉÇà Àμö¸¦ Á¶»çÇÏ¸é µÈ´Ù.

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     int i;

     HWND hChild;

     TCHAR szKey[16];

     int nEditing;

     TCHAR Path[MAX_PATH];

 

     switch (wParam) {

     case 100:

          KillTimer(hWnd,100);

        if (__argc > 1) {

           OpenFromFile(__argv[1]);

           break;

        }

 

          switch (Option.StartAction)

          ....

 

¸í·ÉÇà Àμö°¡ Àü´ÞµÇ¾úÀ¸¸é OpenFromFile ÇÔ¼ö·Î ÀÌ ÆÄÀÏÀ» ¿­¾î ÁÖ¾ú´Ù. Àμö·Î Àü´ÞµÈ ÆÄÀÏÀ» ¿­ ¶§´Â ÀÌ ÆÄÀÏÀ» ´çÀå ¿­¶ó´Â ¸í½ÃÀûÀÎ ¸í·ÉÀ» ¹Þ¾ÒÀ¸¹Ç·Î StartActionÀ» ó¸®ÇÏÁö ¾Ê´Â´Ù. ÀÌÁ¦ Ž»ö±â¿¡¼­ ÆíÁý ´ë»óÀ» ¸ÕÀú °í¸£°í ´ç±ÙÀ» ½ÇÇàÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. Ž»ö±â°¡ ´ç±ÙÀÌ ¼³Ä¡µÈ °æ·Î¸¦ ã¾Æ ½ÇÇàÇÏ°í ÆíÁýÇÒ ÆÄÀÏÀ» Àμö·Î ¾Ë·ÁÁÖ¸ç ´ç±ÙÀº Àμö·Î Àü´ÞµÈ ÆÄÀÏÀ» ¿­ ¼ö ÀÖ´Ù.

Â÷ÈÄ¿¡ È®ÀåÀÚ ¿¬°á ±â´ÉÀ» ±¸ÇöÇϸé ÀÌ Äڵ尡 ¶Ç »ç¿ëµÈ´Ù. ÀÚÁÖ »ç¿ëÇϴ ƯÁ¤ È®ÀåÀÚÀÇ ÆÄÀÏÀ» Dangeun.exe¿Í ¿¬°áÇسõÀ¸¸é Ž»ö±â¿¡¼­ ÆÄÀÏÀ» ´õºíŬ¸¯Çϱ⸸ Çصµ °ð¹Ù·Î ÀÌ ÆÄÀÏÀ» ÆíÁýÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î txt È®ÀåÀÚÀÇ ÆíÁý ÇÁ·Î±×·¥À» Dangeun.exe·Î ¼³Á¤Çϸé ÅؽºÆ® ÆÄÀÏÀ» ´õºíŬ¸¯ÇÒ ¶§ ¸Þ¸ðÀå ´ë½Å ´ç±ÙÀÌ ½ÇÇàµÉ ¼öµµ ÀÖ´Ù. ÀÌ ±â´ÉÀº 1.0½ºÆÑ¿¡´Â Æ÷ÇԵǾî ÀÖÁö ¾ÊÁö¸¸ ¾ðÁ¨°¡´Â ±¸ÇöÇÒ °ÍÀÌ¸ç ±× Áغñ¸¦ ¿©±â¼­ ¹Ì¸® ÇسõÀº ¼ÀÀÌ´Ù.