¹é¾÷À̶õ ÆÄÀÏÀ» ÀúÀåÇÒ ¶§ ÀÌÀü ÆÄÀÏÀ» µ¤¾î ¾²Áö ¾Ê°í ´Ù¸¥ À̸§À¸·Î µû·Î ÀúÀåÇØ ³õ´Â ±â´ÉÀÌ´Ù. ÆÄÀÏÀ» ¼öÁ¤ÇÑ ÈÄ ÀúÀåÇߴµ¥ ¼öÁ¤Çϱâ ÀüÀÇ ³»¿ëÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ Á¾Á¾ ÀÖ´Ù. ÀÌ·² ¶§ ¹é¾÷ ±â´ÉÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ½Ç¼ö·Î Áö¿î ÆÄÀÏÀº ÈÞÁöÅë¿¡¼ ãÀ» ¼ö ÀÖÁö¸¸ µ¤¾î ¾´ ÆÄÀÏÀº º°µµÀÇ ¹é¾÷À» ÀúÀåÇØ ³õÁö ¾ÊÀ¸¸é º¹±¸ÇÒ ¼ö ¾ø´Ù. ±×·¡¼ ´ëºÎºÐÀÇ ÅØ½ºÆ® ÆíÁý±â´Â ¹é¾÷ ±â´ÉÀ» Á¦°øÇÑ´Ù. ¹é¾÷Àº È£½ºÆ®°¡ Á¦°øÇÏ´Â ±â´ÉÀ̹ǷΠApiEdit´Â Ưº°È÷ ¼öÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.
´ç±Ù¿¡µµ ÀÌ·± ¹é¾÷ ±â´ÉÀ» ÀÛ¼ºÇØ º¸µÇ ÀϹÝÀûÀÎ ¹é¾÷ ±â´Éº¸´Ù ÈξÀ ´õ ´Ù¾çÇÑ ¹é¾÷ ¿É¼ÇÀ» Á¦°øÇÒ °ÍÀÌ´Ù. ÀÌÀü ÇÁ·ÎÁ§Æ®¸¦ º¹»çÇÏ¿© Dangeun18ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ½Ç½ÀÀ» ÁøÇàÇÏÀÚ. ¸ÕÀú SOption¿¡ Ãß°¡ÇÒ ¿É¼Ç º¯¼öµéÀ» ¸ðµÎ ¼±¾ðÇÑ´Ù. ÀÌ Àå¿¡¼ »ç¿ëÇÒ ¸ðµç º¯¼ö¿Í °ü¸® Äڵ带 ÇѲ¨¹ø¿¡ Ãß°¡ÇÏ¿© ¿¹ºñ µ¿ÀÛÀ» ¹Ì¸® ÃëÇØ ³õ´Â´Ù.
struct SOption
{
...
int BackupLevel;
TCHAR BackupFolder[MAX_PATH];
int BackupNaming;
int AutoSaveInterval;
BOOL bMakeEditInfo;
BOOL bUpdateEditInfo;
TCHAR EditInfoFolder[MAX_PATH];
int EditInfoMask;
BOOL bUseEditInfo;
};
SOption::Init¿¡¼ ÀÌ º¯¼öµéÀ» ÃʱâÈÇÑ´Ù. Å×½ºÆ®¿¡ ÇÊ¿äÇÑ °ªÀ¸·Î ÃʱâÈÇßÀ¸¸ç Å×½ºÆ®°¡ ³¡³ ÈÄ ´Ù½Ã ¹«³ÇÑ °ªÀ¸·Î Á¶Á¤ÇÒ °ÍÀÌ´Ù.
void SOption::Init()
{
....
BackupLevel=1;
lstrcpy(BackupFolder,"");
BackupNaming=1;
AutoSaveInterval=1;
bMakeEditInfo=TRUE;
bUpdateEditInfo=TRUE;
lstrcpy(EditInfoFolder,"");
EditInfoMask=0x1f;
bUseEditInfo=TRUE;
}
Load, Save¿¡¼ ÀÌ º¯¼öµéÀ» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÑ´Ù. Setting ¼ºêŰ¿¡ ÀúÀåÇØ¾ß ÇϹǷΠ¹®¹ý °Á¶ÀÇ ½ºÅ¸ÀÏÀ» ÀÔ·ÂÇϱâ Àü¿¡ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¾ÕÀå¿¡¼ Ãß°¡ÇÑ bAutoConvert º¯¼ö ÀÔÃâ·Â¹® ´ÙÀ½¿¡ Äڵ带 Ãß°¡ÇÏ¸é µÈ´Ù.
void SOption::Load(TCHAR *Key)
{
....
BackupLevel=SHRegReadInt(SHCU,szKey,"BackupLevel",0);
SHRegReadString(SHCU,szKey,"BackupFolder","",BackupFolder,256);
BackupNaming=SHRegReadInt(SHCU,szKey,"BackupNaming",0);
AutoSaveInterval=SHRegReadInt(SHCU,szKey,"AutoSaveInterval",0);
bMakeEditInfo=SHRegReadInt(SHCU,szKey,"bMakeEditInfo",0);
bUpdateEditInfo=SHRegReadInt(SHCU,szKey,"bUpdateEditInfo",0);
SHRegReadString(SHCU,szKey,"EditInfoFolder","",EditInfoFolder,256);
EditInfoMask=SHRegReadInt(SHCU,szKey,"EditInfoMask",0);
bUseEditInfo=SHRegReadInt(SHCU,szKey,"bUseEditInfo",0);
void SOption::Save(TCHAR *Key)
{
....
SHRegWriteInt(SHCU,szKey,"BackupLevel",BackupLevel);
SHRegWriteString(SHCU,szKey,"BackupFolder",BackupFolder);
SHRegWriteInt(SHCU,szKey,"BackupNaming",BackupNaming);
SHRegWriteInt(SHCU,szKey,"AutoSaveInterval",AutoSaveInterval);
SHRegWriteInt(SHCU,szKey,"bMakeEditInfo",bMakeEditInfo);
SHRegWriteInt(SHCU,szKey,"bUpdateEditInfo",bUpdateEditInfo);
SHRegWriteString(SHCU,szKey,"EditInfoFolder",EditInfoFolder);
SHRegWriteInt(SHCU,szKey,"EditInfoMask",EditInfoMask);
SHRegWriteInt(SHCU,szKey,"bUseEditInfo",bUseEditInfo);
»õ·Î Ãß°¡µÈ ¿É¼ÇÀÌ Init¿¡¼ ÁöÁ¤ÇÑ ÃʱⰪÀ» °¡Áö·Á¸é ·¹Áö½ºÆ®¸®¸¦ ºñ¿ö¾ß ÇϹǷΠ¼³Ä¡ ÇØÁ¦ ÈÄ ´Ù½Ã ½ÇÇàÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸ðµÎ SHRegRead*¿¡¼ ÁöÁ¤ÇÑ µðÆúÆ®°ªÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. °³¹ßÁßÀ̹ǷΠÁ» ±ÍÂú¾Æµµ ¾î¿ ¼ö ¾ø´Ù. ´ÙÀ½Àº ÀÌ Àå¿¡¼ ÀÛ¼ºÇÒ ÇÔ¼öÀÇ ¿øÇüµéÀε¥ ÇÔ¼ö°¡ Ãß°¡µÉ ¶§¸¶´Ù Çì´õ ÆÄÀÏ¿¡ ÀÏÀÏÀÌ ¿øÇüÀ» ¼±¾ðÇϱ⠱ÍÂúÀ¸¹Ç·Î Dangeun.h¿¡ ¹Ì¸® ¼±¾ðÇØ µÐ´Ù.
void MakeBackupName(TCHAR *Folder,TCHAR *fname,TCHAR *ext,int level,TCHAR *szName);
void MakeBackup(TCHAR *Path);
void AutoSave();
void SaveEditings();
void MakeAssociate(TCHAR *ext, TCHAR *desc);
void UnAssociate(TCHAR *ext);
void RearrangePath();
¹é¾÷ °ü·Ã º¯¼ö´Â ´ÙÀ½ ¼¼ °³ÀÌ´Ù. ¹é¾÷ ´Ü°è¿Í ¹é¾÷ ÆÄÀÏÀ» ÀúÀåÇÒ À§Ä¡, ¹é¾÷ ÆÄÀÏÀÇ À̸§ ±ÔÄ¢À» ÁöÁ¤ÇÑ´Ù.
|
º¯¼ö |
¼³¸í |
|
BackupLevel |
¹é¾÷ ´Ü°èÀÌ´Ù. ´Ù´Ü°è ¹é¾÷ÀÌ °¡´ÉÇѵ¥ 0ÀÌ¸é ¹é¾÷À» ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù. |
|
BackupFolder |
¹é¾÷ ÆÄÀÏÀ» ÀúÀåÇÒ Æú´õÀÌ´Ù. ºó ¹®ÀÚ¿ÀÌ¸é ¹®¼°¡ ÀÖ´Â Æú´õ¿¡ ÀúÀåÇϴµ¥ ÀÌ·¸°Ô ÇÏ¸é ¹®¼ Æú´õ°¡ ÁöÀúºÐÇØÁú ¼ö ÀÖÀ¸¹Ç·Î º°µµÀÇ Æú´õ¿¡ ¹é¾÷ ÆÄÀϸ¸ µû·Î ÀúÀåÇÒ ¼öµµ ÀÖ´Ù. |
|
BackupNaming |
¹é¾÷ ÆÄÀÏÀÇ À̸§ ±ÔÄ¢ÀÌ´Ù. |
½ÇÁ¦·Î ¹é¾÷À» ÇÏ´Â ÇÔ¼ö¸¦ Dangeun.cpp¿¡ ÀÛ¼ºÇÑ´Ù. MakeBackupName ÇÔ¼ö´Â ¹é¾÷ ÆÄÀÏÀÇ °æ·Î¿Í À̸§¸¦ °áÁ¤ÇÏ´Â µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù.
void MakeBackupName(TCHAR *Folder,TCHAR *fname,TCHAR *ext,int level,TCHAR *szName)
{
TCHAR szNum[12];
// ù ¹øÂ° ¹é¾÷ ÆÄÀÏ¿¡´Â ¼ýÀÚ¸¦ ºÙÀÌÁø ¾Ê´Â´Ù.
if (level == 1) {
szNum[0]=0;
} else {
wsprintf(szNum,"%d",level);
}
// À̸§ ºÙÀ̱⠿ɼǿ¡ µû¶ó ¹®ÀÚ¿À» Á¶¸³ÇÑ´Ù.
switch (Option.BackupNaming) {
case 0:
wsprintf(szName,"%s%s.bak%s",Folder,fname,szNum);
break;
case 1:
wsprintf(szName,"%s%s_bak%s%s",Folder,fname,szNum,ext);
break;
case 2:
wsprintf(szName,"%s%s_¹é¾÷%s%s",Folder,fname,szNum,ext);
break;
case 3:
wsprintf(szName,"%s%s%s.bak%s",Folder,fname,ext,szNum);
break;
}
}
Àμö·Î Àü´ÞµÈ Æú´õ, ÆÄÀϸí, È®ÀåÀÚ, ¹é¾÷ ·¹º§´ë·Î ¹é¾÷ ÆÄÀÏÀÇ ¿ÏÀü °æ·Î¸¦ Á¶¸³ÇÏ¿© szNameÀ¸·Î ¸®ÅÏÇÑ´Ù. ¹é¾÷ ÆÄÀÏÀÇ À̸§Àº BakcupNaming ¿É¼Ç¿¡ µû¶ó ´Þ¶óÁö´Âµ¥ ¿øÇϴ´ë·Î ¹é¾÷ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
|
°ª |
¹é¾÷ ÆÄÀÏ |
¼³¸í |
|
0 |
File.bak |
È®ÀåÀÚ¸¦ bak·Î º¯°æÇÑ´Ù. |
|
1 |
File_bak.ext |
ÆÄÀÏ À̸§ µÚ¿¡ _bak¸¦ ºÙÀδÙ. |
|
2 |
File_¹é¾÷.ext |
ÆÄÀÏ À̸§ µÚ¿¡ _¹é¾÷À» ºÙÀδÙ. |
|
3 |
File.ext.bak |
ÆÄÀϸí°ú È®ÀåÀÚ ´ÙÀ½¿¡ .bak¸¦ ºÙÀδÙ. |
´Ù´Ü°è ¹é¾÷½Ã¿¡´Â ÀÏ·Ã ¹øÈ£¸¦ ºÙÀÌµÇ 1Â÷ ¹é¾÷¿¡ ´ëÇØ¼´Â ¹øÈ£¸¦ ºÙÀÌÁö ¾ÊÀ¸¸ç 2Â÷ ¹é¾÷º»ºÎÅÍ´Â ±¸ºÐÀ» À§ÇØ ¹øÈ£¸¦ ºÙÀδÙ. ¹é¾÷À» ÀÛ¼ºÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.
void MakeBackup(TCHAR *Path)
{
TCHAR Folder[MAX_PATH];
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
int i;
TCHAR Src[MAX_PATH];
TCHAR Dest[MAX_PATH];
// ¹é¾÷ ¿É¼ÇÀÌ ¼±ÅõÇÁö ¾Ê¾Ò°Å³ª FTP ÆÄÀÏÀÌ¸é ¹é¾÷ÇÏÁö ¾Ê´Â´Ù.
if (Option.BackupLevel == 0 || strnicmp(Path,"ftp",3)==0) {
return;
}
// ¹é¾÷ Æú´õ°¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ Æú´õ¿¡ ¹é¾÷ÇÑ´Ù.
_splitpath(Path,drive,dir,fname,ext);
if (lstrlen(Option.BackupFolder)==0 || _access(Option.BackupFolder,0)!=0) {
wsprintf(Folder,"%s%s",drive,dir);
} else {
lstrcpy(Folder,Option.BackupFolder);
if (Folder[lstrlen(Folder)-1]!='\\') {
lstrcat(Folder,"\\");
}
}
// ´Ù´Ü°è·Î ¹é¾÷ÇÑ´Ù. ÀÌÀü ´Ü°è ¹é¾÷ ÆÄÀÏÀ» ´ÙÀ½ ´Ü°è·Î º¹»çÇÑ´Ù.
for (i=Option.BackupLevel;i>0;i--) {
if (i==1) {
lstrcpy(Src,Path);
} else {
MakeBackupName(Folder,fname,ext,i-1,Src);
}
if (_access(Src,0)==0) {
MakeBackupName(Folder,fname,ext,i,Dest);
CopyFile(Src,Dest,FALSE);
}
}
}
Àμö·Î Àü´ÞµÈ Path ÆÄÀÏ¿¡ ´ëÇÑ ¹é¾÷À» ¿É¼Ç º¯¼ö°¡ Áö½ÃÇϴ´ë·Î »ý¼ºÇÑ´Ù. ¹é¾÷ ·¹º§ÀÌ 0ÀÌ¾î¼ ¹é¾÷ ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾Ê°Å³ª ¿ø°ÝÁöÀÇ FTP ÆÄÀÏÀÌ¸é ¹é¾÷ÇÏÁö ¾Ê´Â´Ù. ¸ÕÀú ¹é¾÷ ÆÄÀÏÀ» ÀÛ¼ºÇÒ Æú´õ¸¦ ±¸Çϴµ¥ BackupFolder ¿É¼Ç¿¡ ÁöÁ¤µÈ Æú´õ°¡ Á¸ÀçÇϸé ÀÌ Æú´õ¸¦ »ç¿ëÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹®¼°¡ ÀÖ´Â Æú´õ¸¦ »ç¿ëÇÑ´Ù. ¹é¾÷ÇÒ Æú´õ¸¦ °áÁ¤ÇÑ ÈÄ ´Ù´Ü°è ¹é¾÷À» ó¸®Çϴµ¥ ¹é¾÷ ÆÄÀÏÀÇ ³¡¿¡¼ºÎÅÍ ¹é¾÷À» ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î 3Â÷ ¹é¾÷±îÁö µÇ¾î ÀÖ´Â »óÅ¿¡¼ ´Ù½Ã ÀúÀåÇÑ´Ù¸é ¹é¾÷ ÆÄÀϵéÀº ´ÙÀ½°ú °°ÀÌ À̵¿µÈ´Ù.
|
i |
º¹»ç ¿øº» |
º¹»ç ´ë»ó |
|
3 |
File.bak2 |
File.bak3 |
|
2 |
File.bak |
File.bak2 |
|
1 |
File.ext |
File.bak |
File.bak2 2Â÷ ¹é¾÷ ÆÄÀÏÀÌ File.bak3 3Â÷ ¹é¾÷ ÆÄÀÏ·Î º¹»çµÊÀ¸·Î½á ¿ø·¡ 3Â÷ ¹é¾÷ ÆÄÀÏÀº »ç¶óÁø´Ù. 1Â÷ ¹é¾÷Àº 2Â÷ ¹é¾÷À¸·Î º¹»çµÇ°í ¿øº»Àº 1Â÷ ¹é¾÷ ÆÄÀÏÀÌ µÈ´Ù. ·çÇÁ´Â ¹é¾÷ ·¹º§ÀÇ ³¡¿¡¼ºÎÅÍ 1±îÁö ÁøÇàµÇ¸ç Src¿¡ ¹é¾÷ ¿øº», Dest¿¡ ¹é¾÷ ´ë»ó ÆÄÀÏÀÇ À̸§À» ±¸ÇÑ ÈÄ CopyFile ÇÔ¼ö·Î º¹»çÇÑ´Ù. ´Ü, i°¡ 1ÀÏ ¶§´Â ¹é¾÷º»ÀÌ ¾Æ´Ñ ¿øº»À» 1Â÷ ¹é¾÷ À̸§À¸·Î º¹»çÇØ¾ß ÇÑ´Ù.
¹é¾÷ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß¿¡ Áß°£ ¹é¾÷ ÆÄÀÏÀÌ ¾ø´Ù¸é ÀÌ ÆÄÀÏÀº ¹«½ÃÇÑ´Ù. ¿¹¸¦ µé¾î 2Â÷ ¹é¾÷ ÆÄÀÏÀÎ File.bak2°¡ ¾ø´Ù¸é ÀÌ ÆÄÀÏÀ» File.bak3·Î º¹»çÇÒ Çʿ䰡 ¾ø´Ù. ±×·¡¾ß ´Ù´Ü°è·Î ¹é¾÷À» ÇÏ´õ¶óµµ »õ·Î ÀúÀåµÇ´Â ÆÄÀÏÀº ºÒÇÊ¿äÇÑ ¹é¾÷ÀÌ »ý¼ºµÇÁö ¾Ê´Â´Ù. ¹é¾÷ÇÒ ½ÃÁ¡Àº ÆÄÀÏÀ» ÀúÀåÇÒ ¶§Àε¥ MakeBackup¿¡¼ ¸ðµç Á¶°ÇÀ» Á¡°ËÇϹǷΠȣÃâÇϱ⸸ ÇÏ¸é µÈ´Ù.
BOOL SaveToFile(HWND hChild,TCHAR *Path)
{
....
if (strnicmp(Path,"http",4)==0) {
MessageBox(hChild, "HTTP ÇÁ·ÎÅäÄÝÀº ¾÷·Îµå¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÌ À̸§À¸·Î´Â "
"ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù. »õ À̸§À¸·Î ÇÏµå µð½ºÅ©¿¡ ÀúÀåÇϽʽÿÀ","¾Ë¸²",MB_OK);
return FALSE;
}
MakeBackup(Path);
....
¹é¾÷Àº º°µµÀÇ ÇÏµå µð½ºÅ© °ø°£À» »ç¿ëÇϹǷΠ¹é¾÷ Áß¿¡ ¿ë·®ÀÌ ºÎÁ·ÇØÁö´Â »çŰ¡ ¹ß»ýÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î 10K ÆÄÀÏÀ» ÆíÁýÇØ¼ 12K·Î ´Ã¾î³µ°í µð½ºÅ© ¿ë·®Àº 8K¸¸ ³²¾Ò´Ù°í ÇØ º¸ÀÚ. ÀÌ °æ¿ì 10K Å©±âÀÇ ¹é¾÷ »ý¼ºÀº ½ÇÆÐÇÏÁö¸¸ ¿øº» ÆÄÀÏ ÀúÀåÀ» À§Çؼ´Â 2K¸¸ ´õ ÀÖÀ¸¸é µÇ¹Ç·Î ¼º°øÇÒ °ÍÀÌ´Ù. ¹Ý´ë·Î »õ·Î ¸¸µé¾îÁö´Â ¹é¾÷À¸·Î ÀÎÇØ ¿øº» ÆÄÀÏÀÌ ÀúÀåµÇÁö ¸øÇϴ Ư¼öÇÑ °æ¿ìµµ ÀÖÀ» ¼ö Àִµ¥ ´ç±ÙÀº ÀÌ »óȲÀ» ÆÄÀÏ ÀÔÃâ·Â ¿¡·¯·Î ó¸®ÇÑ´Ù. Á» ´õ Áö´ÉÀûÀ¸·Î ÀÛ¼ºÇÑ´Ù¸é ¿ë·®ÀÌ ºÎÁ·ÇÒ ¶§´Â ¹é¾÷ ÀÛ¼ºÀ» Æ÷±âÇÏ°í ¿øº» ÀúÀåÀ» ¿ì¼±ÀûÀ¸·Î ó¸®ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
ÀÚµ¿ ÀúÀåÀ̶õ ÁÖ±âÀûÀÎ ½Ã°£ °£°ÝÀ¸·Î ¶Ç´Â ÀÏÁ¤ÇÑ Á¶°ÇÀÌ µÇ¾úÀ» ¶§ ÆíÁý ÆÄÀÏÀ» ÀÚµ¿À¸·Î ÀúÀåÇÏ´Â ±â´ÉÀÌ´Ù. Áß¿äÇÑ ¼Ò½º³ª ¹®¼ÀÇ °æ¿ì´Â Å×½ºÆ®Áß¿¡ ½Ã½ºÅÛÀÌ ´Ù¿îµÈ´Ù°Å³ª ÇÏ´Â ºÒÀÇÀÇ »ç°í·Î ÀÎÇØ ÆíÁýÁßÀÎ ÆÄÀÏÀ» ÀÒÀ» ¼öµµ Àִµ¥ ÀÌ·± »ç°í¸¦ ¹æÁöÇϱâ À§ÇØ ÀÚµ¿ ÀúÀå ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÚµ¿ ÀúÀåÀº »ç¿ëÀÚÀÇ ¸í½ÃÀûÀÎ ¸í·ÉÀÌ ¾ø´õ¶óµµ ÆÄÀÏÀ» ¾Ë¾Æ¼ ÀúÀåÇÏ´Â ±â´ÉÀ̹ǷΠÆíÁýÇÏ´ø ¸ðµç ÆÄÀÏÀ» ÀúÀåÇÏ´Â ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù.
void AutoSave()
{
HWND hChild;
SInfo *pSi;
// ÀúÀå ´ë»ó ÆÄÀϵéÀ» ¸ðµÎ ÀúÀåÇÑ´Ù.
hChild=GetWindow(g_hMDIClient,GW_CHILD);
while (hChild) {
pSi=(SInfo *)GetWindowLongPtr(hChild,0);
if (strnicmp(pSi->NowFile,"http",4) != 0 &&
strncmp(pSi->NowFile,"À̸§¾øÀ½",8) != 0 &&
pSi->Ae.GetReadOnly() == FALSE &&
pSi->Ae.GetModified() == TRUE) {
SaveToFile(hChild,pSi->NowFile);
}
hChild=GetWindow(hChild,GW_HWNDNEXT);
}
// ÇöÀç ºñȰ¼ºÈµÈ »óÅÂÀÌ¸é ÆíÁý ¹®¼ Á¤º¸¸¦ ´Ù½Ã ÀÛ¼ºÇÑ´Ù.
if (GetForegroundWindow() != g_hFrameWnd) {
SaveEditings();
}
}
´Ü ÀúÀåÇÒ ¼ö ¾ø°Å³ª ÀúÀåÇÒ Çʿ䰡 ¾ø´Â ÆÄÀÏÀº Á¦¿ÜÇϴµ¥ »õ·Î ¸¸µç ¹®¼´Â °æ·Î°¡ °áÁ¤µÇÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀÚµ¿ ÀúÀåÇÒ ¼ö ¾øÀ¸¸ç http·Î ´Ù¿î¹ÞÀº ¹®¼¿Í Àбâ Àü¿ë ¹®¼µµ ÀúÀåÇÒ ¼ö ¾ø´Ù. ¿¾î ³õÀº ¸ðµç ¹®¼¸¦ ¼øÈ¸ÇÏ¸é¼ ÀúÀå °¡´ÉÇÏ¸é¼ ÆíÁýµÈ ¹®¼¸¦ ã¾Æ SaveToFile ÇÔ¼ö¸¦ È£ÃâÇÏ¸é º¯°æµÈ ¸ðµç ¹®¼°¡ ÀúÀåµÉ °ÍÀÌ´Ù.
ÀÌ ±â´ÉÀº º¯°æ °¨½Ã ±â´É°ú ¾à°£ÀÇ Ãæµ¹ÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. ´ç±ÙÀº ¿ÜºÎ¿¡¼ ÆÄÀÏÀ» ÆíÁýÇÒ °æ¿ì¸¦ ´ëºñÇÏ¿© ºñȰ¼ºÈµÉ ¶§ ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. ±×·±µ¥ ºñȰ¼ºÈ½Ã¿¡ ÀÚµ¿ ÀúÀå ±â´ÉÀÌ µ¿ÀÛÇϸé ÀúÀåÇØ ³õÀº ÆíÁý ÆÄÀÏ Á¤º¸¿Í ´Þ¶óÁ® ÀÚ½ÅÀÌ ÀúÀåÇßÀ¸¸é¼µµ ÆÄÀÏÀÌ ¿ÜºÎ¿¡¼ º¯°æµÈ °ÍÀ¸·Î À߸ø ÀνÄÇÑ´Ù. ±×·¡¼ ÀÚµ¿ ÀúÀåÇÑ ÈÄ ºñȰ¼ºÈ »óÅÂÀÏ ¶§´Â ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ´Ù½Ã Á¶»çÇØ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷À» ÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
// ÆíÁýÁßÀÎ ÆÄÀÏÀÇ Á¤º¸¸¦ ÀúÀåÇÑ´Ù.
void SaveEditings()
{
HWND hChild;
SInfo *pSi;
int idx=0;
HANDLE hFile;
if (Option.bWatchChange && g_ChildNum) {
if (pEditings) {
free(pEditings);
}
pEditings=(FileInfo *)malloc(sizeof(FileInfo)*(g_ChildNum+1));
hChild=GetWindow(g_hMDIClient,GW_CHILD);
while (hChild) {
pSi=(SInfo *)GetWindowLongPtr(hChild,0);
if (strncmp(pSi->NowFile,"À̸§¾øÀ½",8) && strnicmp(pSi->NowFile,"http",4)
&& strnicmp(pSi->NowFile,"ftp",3)) {
pEditings[idx].hWnd=hChild;
hFile=CreateFile(pSi->NowFile,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
pEditings[idx].size=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&pEditings[idx].st);
CloseHandle(hFile);
idx++;
}
}
hChild=GetWindow(hChild,GW_HWNDNEXT);
}
pEditings[idx].hWnd=NULL;
}
}
OnActivateApp¿¡ ÀÖ´ø ÄÚµå¿Í µ¿ÀÏÇ쵂 ÆíÁý ÆÄÀÏ Á¤º¸°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Â °æ¿ì¸¦ À§ÇØ pEditings¸¦ ¸ÕÀú ÇØÁ¦ÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù. ÀÚµ¿ ÀúÀå ÇÔ¼ö¿¡¼µµ ÆíÁý ÆÄÀÏ Á¤º¸¸¦ ´Ù½Ã Á¶»çÇØ¾ß ÇϹǷΠº°µµÀÇ ÇÔ¼ö·Î ºÐ¸®Çß´Ù. OnActivateApp¿¡¼´Â ÀÌ ÇÔ¼ö¸¦ ´ë½Å È£ÃâÇϰí Áö¿ªº¯¼ö hChild´Â »èÁ¦ÇÑ´Ù.
void OnActivateApp(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
if (wParam) {
....
} else {
SaveEditings();
}
}
OnCreate¿¡¼ ¿É¼Ç Á¤º¸¸¦ ¸ÕÀú ÀÐ¾î º¸°í ÀÚµ¿ ÀúÀå °£°ÝÀÌ 0ÀÌ ¾Æ´Ï¸é 1¹ø ŸÀ̸Ӹ¦ ¼³Ä¡ÇÑ´Ù. AutoSaveIntervalÀº ºÐ ´ÜÀ§·Î ÁöÁ¤µÇ¹Ç·Î ÀÌ ¿É¼Ç º¯¼ö¿¡ 60*1000À» °öÇÑ ÁÖ±â·Î ŸÀ̸Ӹ¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ÀÌ Å¸À̸Ӵ OnDestroy¿¡¼ ÆÄ±«ÇÑ´Ù.
int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {
....
} else {
....
}
if (Option.AutoSaveInterval) {
SetTimer(hWnd,1,Option.AutoSaveInterval*1000*60,NULL);
}
....
void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
KillTimer(hWnd,1);
}
ÀÚµ¿ ÀúÀå ±â´ÉÀÌ µ¿ÀÛÁßÀÏ ¶§´Â ÁֱⰡ ±²ÀåÈ÷ ´À¸° ŸÀÌ¸Ó Çϳª°¡ µ¹¾Æ°£´Ù. ¾î·µç ÀÚµ¿ ÀúÀå ½ÃÁ¡ÀÌ µÇ¸é WM_TIMER ¸Þ½ÃÁö°¡ Àü´ÞµÉ °ÍÀ̰í OnTimer¿¡¼ ÁÖ±âÀûÀ¸·Î ÀÚµ¿ ÀúÀå ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
switch (wParam) {
case 1:
AutoSave();
break;
AutoSave ÇÔ¼ö´Â º¯°æµÈ ¸ðµç ¹®¼¸¦ ÀúÀåÇϹǷΠÀÌ Áֱ⿡ ¸ÂÃç ¸ðµç ¹®¼°¡ ÀúÀåµÉ °ÍÀÌ´Ù. ÀÚµ¿ ÀúÀå ±â´ÉÀÌ ÄÑÁ® ÀÖ´õ¶óµµ º¯°æµÈ ¹®¼°¡ ¾øÀ¸¸é ¾Æ¹« Àϵµ ÀϾÁö ¾ÊÀ¸¹Ç·Î ÀÌ ±â´ÉÀ¸·Î ÀÎÇØ ´ç±ÙÀÌ ´À·ÁÁö°Å³ª ÇÏÁö´Â ¾Ê´Â´Ù.