C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54895] Re:Re:윈도우 바탕화면을 ShowMessage로 뿌릴수 없나요? 부탁.
장성호 [nasilso] 1479 읽음    2008-10-15 13:03
임프님이 얘기한 방법을 한번 구현해 봅니다.

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로 뿌기고 싶어서요
: :
: : 부탁드립니다.

+ -

관련 글 리스트
54856 윈도우 바탕화면을 ShowMessage로 뿌릴수 없나요? 부탁. 개발자 1143 2008/10/12
54891     Re:윈도우 바탕화면을 ShowMessage로 뿌릴수 없나요? 부탁. 박지훈.임프 967 2008/10/15
54895         Re:Re:윈도우 바탕화면을 ShowMessage로 뿌릴수 없나요? 부탁. 장성호 1479 2008/10/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.