Windows Mobile中的檔案改變通知

來源:互聯網
上載者:User

 

在資源管理員中,刪除一個檔案,更改一個檔案夾名稱,都能及時重新整理。這是怎麼做到的呢?答案是使用了檔案改變通知。

 

先看一個結構

 

typedef struct tagSHCHANGENOTIFYENTRY {

 

  DWORD dwEventMask;

 

  LPTSTR pszWatchDir;

 

  BOOL fRecursive;

 

} SHCHANGENOTIFYENTRY;

 

要接收檔案改變的訊息,我們要使用一個視窗hWnd,在視窗建立的WM_CREATE訊息處註冊:

 

SHCHANGENOTIFYENTRY schneNotifyEntry;

 

schneNotifyEntry.dwEventMask = SHCNE_ALLEVENTS;//監視所有事件

 

schneNotifyEntry.pszWatchDir = NULL;//要監視的目錄名,NULL表示所有

 

schneNotifyEntry.fRecursive = TRUE;//監視目錄時,是否遞迴

 

SHChangeNotifyRegister(hWnd, &schneNotifyEntry);

 

在視窗的過程函數裡,我們響應WM_FILECHANGEINFO訊息

 

case WM_FILECHANGEINFO:

 

{

 

       FILECHANGENOTIFY    *lpfcn;

 

       FILECHANGEINFO      *lpfci;

 

    lpfcn = (FILECHANGENOTIFY *)lParam;

 

    if (NULL == lpfcn)

 

    {

 

        break;

 

    }

 

    lpfci = &(lpfcn->fci);

 

    if (NULL == lpfci)

 

    {

 

        break;

 

    }

 

    else

 

    {

 

            if (FALSE == SHCNEEvent(lpfci))

 

            {

 

                MessageBox(TEXT("SCHNE Event failed"), TEXT("Error"), MB_OK);

 

            }                    

 

     }

 

 

 

     SHChangeNotifyFree(lpfcn);

 

}

 

break;

 

SHCNEEvent函數實現如下:

 

BOOL SHCNEEvent(FILECHANGEINFO *lpfci)

 

{

 

    //lpfci->wEventId,事件

 

    //lpfci->dwItem1,舊的檔案或目錄名

 

    //lpfci->dwItem2,新的檔案或目錄名

 

    //lpfci->dwAttributes,檔案或目錄特性

 

    //lpfci->ftModified,檔案改變時的時間

 

    //lpfci->nFileSize,檔案大小

 

    switch (lpfci->wEventId)

 

        {

 

        case SHCNE_RENAMEITEM: 

 

            break;

 

 

 

        case SHCNE_CREATE:

 

            break;

 

 

 

        case SHCNE_DELETE:

 

            break;

 

 

 

        case SHCNE_MKDIR:

 

            break;

 

 

 

        case SHCNE_RMDIR: 

 

            break;

 

 

 

        case SHCNE_MEDIAINSERTED: 

 

            break;

 

 

 

        case SHCNE_MEDIAREMOVED: 

 

            break;

 

 

 

        case SHCNE_DRIVEADD: 

 

            break;

 

 

 

        case SHCNE_DRIVEREMOVED: 

 

            break;

 

 

 

        case SHCNE_NETSHARE: 

 

            break;

 

 

 

        case SHCNE_NETUNSHARE: 

 

            break;

 

 

 

        case SHCNE_ATTRIBUTES: 

 

            break;

 

 

 

        case SHCNE_UPDATEDIR: 

 

            break;

 

 

 

        case SHCNE_SERVERDISCONNECT: 

 

            break;

 

 

 

        case SHCNE_RENAMEFOLDER: 

 

            break;

 

 

 

        default:

 

            break;

 

        }

 

 

 

    return TRUE;

 

}

 

根據事件,就可以知道是哪個檔案或目錄發生了改變。

 

最後,在hWnd銷毀處,要登出:

 

SHChangeNotifyDeregister(hWnd);

 

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/pknife/archive/2009/08/27/4490213.aspx

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.