TOP > カテゴリ > C/C++ >

フォルダを監視する(C/C++版)

フォルダを監視するサンプルです。

サンプルの実行画面

ソースコード

[Sample90.c]

//--------------------------------------------------------------------------------------
//  ■フォルダを監視する■ Sample NO.90
//
//--------------------------------------------------------------------------------------

#include <windows.h>

#define IDD_DIALOG 101
#define IDB_1     1000

//コールバックプロシージャ
LRESULT CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

/////////////////////////////////////////////////////////////////////////////////
//
//  WinMain  
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{    
 DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), 0, (DLGPROC)DialogProc);
 return (0);
}

/////////////////////////////////////////////////////////////////////////////////
//
//  DialogProc  
//
LRESULT CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
   HANDLE  hForder;
   DWORD   Result;
  
  switch (uMsg) 
    {
     case WM_COMMAND:   
         switch (LOWORD(wParam)) 
         {            
                case IDB_1:
                    MessageBox(hwnd,"10秒以内にC:\\Windowsフォルダ内の何らかのファイルを更新またはファイル名を変更した下さい。","説明",MB_OK);
                    //C:\Windowsフォルダ内のファイルを監視するハンドルを取得(フラグによってサブフォルダなども監視可能)
                    hForder=  FindFirstChangeNotification("C:\\Windows",FALSE,
                                                FILE_NOTIFY_CHANGE_FILE_NAME  |
                                                FILE_NOTIFY_CHANGE_ATTRIBUTES);
                   if (hForder!=INVALID_HANDLE_VALUE)
                   {
                     //監視開始
                     Result= WaitForSingleObject(hForder,10000);
                     if (Result==WAIT_TIMEOUT)
                         MessageBox(hwnd,"タイムアウト - 10秒の間、ファイルに変更はありませんでした。","失敗",MB_OK);
                     else if (Result==WAIT_OBJECT_0)  
                         MessageBox(hwnd,"チェンジ - フォルダ内の何らかのファイルが変更されました。-","成功",MB_OK);
                   }
                   //解放
                   FindCloseChangeNotification(hForder);
                   
                   break;
                case 2:
                    EndDialog(hwnd, 2); 
                    break;    
                default: return FALSE;    
         }
     default: return FALSE; 
   } 
 return TRUE;
}



ソースコード一式のダウンロード

capi_sample90.zip 1,412 バイト

動作環境

このサンプルは 「Windows98」及び「Microsoft Visual C++5.0」「Borland C++ Compiler 5.5」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。

Visual C++5.0でのコンパイル

VC5.0でサンプルをコンパイルする場合は新規プロジェクト(Win32Application)を作成後、各ファイルを追加してビルドしてください。

Borland C++ Compiler 5.5でのコンパイル

BCC5.5でサンプルをコンパイルする場合は「bcc32.exe」で*.c又は*.cppファイルをコンパイルします。リソースがある場合は「brc32.exe」で*resファイルを付与してください。

サンプルについて

このWindows APIサンプル集(C/C++版)は2000年頃にC/C++言語の学習の為に作成したものです。コードはエレガントではなく「初心者レベルのコーディング」です。仕事などの業務で利用する際にはエラー処理やメモリ解放などの再確認を必ずして下さい。





関連記事



公開日:2015年03月19日
記事NO:00546