임프님이 얘기한 방법을 한번 구현해 봅니다.
1. 파일변경 여부 직접 api를 써서 감시
1.1 바로가기 아이콘 (링크파일) 리스트 가져오기
void __fastcall GetLinkFiles(String FindPath, TStringList *Lst)
{
TSearchRec sr;//: TSearchRec;
int retInt;//: Integer;
String sFindFile= FindPath+"\\*.*";
if (FindFirst(sFindFile , faAnyFile, sr) == 0)
{
do
{
if ((sr.Attr & faDirectory) != sr.Attr)
{
Lst->Add(FindPath+"\\"+sr.Name);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
#define FVSHOWINFO xxFVSHOWINFOxx
#define FOLDERSETTINGS xxFOLDERSETTINGSxx
#define DESKBANDINFO xxDESKBANDINFOxx
#define SHELLFLAGSTATE xxSHELLFLAGSTATExx
#include
void __fastcall TForm1::Button8Click(TObject *Sender)
{
char Path[256];
TStringList *lst=new TStringList;
// 공통 데스크탑 디렉토리
SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, 0, Path);
GetLinkFiles(Path,lst);
// 내 데스크탑 디렉토리
SHGetFolderPath(0, CSIDL_DESKTOP, 0, 0, Path);
GetLinkFiles(Path,lst);
Memo2->Lines->Clear();
Memo2->Lines->Assign(lst);
delete lst;
}
1.2 파일변경 감시 는 ...
아래 함수들을 이용해서 구현 가능합니다.
FindFirstChangeNotification ,
FindNextChangeNotification ,
FindCloseChangeNotification ,
WaitForMultipleObjects
뭔가 이벤트가 있을때까지 sleep하는것이 좋으니 쓰레드로 구현하심이...
아래 링크를 참조하세요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=component&no=223
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=33830 (사례)
2. Rx라이브러리 컴포넌트 사용은..
저도 Rx라리브러리를 별로 쓰지 않아서 그런 기능이 있는지 몰랐는데..
해보니까 간단하네요
void __fastcall TForm1::Button10Click(TObject *Sender)
{
char Path1[256],Path2[256];
// 공통 데스크탑 디렉토리
SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, 0, Path1);
// 내 데스크탑 디렉토리
SHGetFolderPath(0, CSIDL_DESKTOP, 0, 0, Path2);
String s=Path2;
RxFolderMonitor1->FolderName=s+"\\";
RxFolderMonitor1->OnChange=RxFolderMonitor1Change;
RxFolderMonitor1->MonitorSubtree=false;
RxFolderMonitor1->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RxFolderMonitor1Change(TObject *Sender)
{
Memo4->Lines->Add("C:\\ Change");
}
컴포넌트는
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=component&no=526
이상입니다.
도움이 되길....
그럼..
박지훈.임프 님이 쓰신 글 :
: 바탕화면 폴더의 실제 물리적 디렉토리를 알아낸 다음, 디렉토리 안의 파일이 변경되는 여부를 모니터링을 하면 될 거 같은데요. 파일 변경 모니터링은 직접 API를 써서 감시할 수도 있지만, 전 귀찮아서 그럴 필요가 있을 때는 Rx라이브러리에 있는 컴포넌트를 사용합니다.
:
:
: 개발자 님이 쓰신 글 :
: : 윈도우의 바탕화면의 바로가기아이콘이나 새로 업데이트 되는 바탕화면 아이콘의
: : 이름(파일명)을 ansi형태로 가져 올 수 있는 방법이 없나요?
: : 그래서 가져온 파일명을 ShowMessage로 뿌기고 싶어서요
: :
: : 부탁드립니다.