SHChangeNotifyRegister 関数 (shlobj_core.h)

ファイル システムが通知をサポートしている場合は、ファイル システムまたはシェルから通知を受信するウィンドウを登録します。

構文

ULONG SHChangeNotifyRegister(
  [in] HWND                      hwnd,
       int                       fSources,
       LONG                      fEvents,
       UINT                      wMsg,
       int                       cEntries,
  [in] const SHChangeNotifyEntry *pshcne
);

パラメーター

[in] hwnd

型: HWND

変更メッセージまたは通知メッセージを受信するウィンドウへのハンドル。

fSources

型: int

通知を受信するイベントの種類を示す 1 つ以上の次の値。

メモ 以前のバージョンの SDK では、これらのフラグはヘッダー ファイルで定義されていないため、実装者はこれらの値自体を定義するか、数値を直接使用する必要があります。 Windows Vista の時点では、これらのフラグは Shlobj.h で定義されています。
 

SHCNRF_InterruptLevel (0x0001)

ファイル システムからの割り込みレベルの通知。

SHCNRF_ShellLevel (0x0002)

シェルからのシェル レベルの通知。

SHCNRF_RecursiveInterrupt (0x1000)

サブツリー全体の割り込みイベント。 このフラグは 、SHCNRF_InterruptLevel フラグと組み合わせる必要があります。 このフラグを使用する場合は、pshcne によって参照される対応する SHChangeNotifyEntry 構造体の fRecursive メンバーを TRUE に設定して、通知を再帰的にする必要もあります。 1 つのレベル ビュー (たとえば、相対で 1 つの SHITEMID のみを含む PIDL) でSHCNRF_RecursiveInterruptを使用すると、最高レベルでイベント通知がブロックされ、再帰的な子更新が防止されます。 したがって、フォルダー階層の最下位レベルにドラッグされたアイコンが、期待どおりにビューに表示されない場合があります。

SHCNRF_NewDelivery (0x8000)

受信したメッセージは共有メモリを使用します。 SHChangeNotification_Lockを呼び出して、実際のデータにアクセスします。 SHChangeNotification_Unlockを呼び出して、完了したらメモリを解放します。

メモ このフラグは、より堅牢な配信方法を提供するため、お勧めします。 すべてのクライアントでこのフラグを指定する必要があります。
 

fEvents

型: LONG

通知を受信する通知イベントを変更します。 使用可能な値については、 SHChangeNotify に記載されている SHCNE フラグを参照してください。

wMsg

型: UINT

ウィンドウ プロシージャに投稿するメッセージ。

cEntries

型: int

pshcne 配列内のエントリの数。

[in] pshcne

型: const SHChangeNotifyEntry*

通知を含む SHChangeNotifyEntry 構造体の配列。 SHChangeNotifyRegister を呼び出すとき、または SHChangeNotifyDeregister が正しく機能しない場合は、この配列を常に 1 に設定する必要があります。

戻り値

種類: ULONG

正の整数登録 ID を返します。 メモリ不足の場合、または無効なパラメーターに応答して 0 を返します。

解説

この関数の使用方法を示す完全な例については、Windows ソフトウェア開発キット (SDK) の Change Notify Watcher サンプル を参照してください。

変更通知イベントが発生すると、 wMsg によって示されるメッセージは 、hwnd パラメーターで指定されたウィンドウに配信されます。

  • SHCNRF_NewDeliveryを指定した場合、メッセージ内の wParamlParam の値をそれぞれ hChange パラメーターと dwProcID パラメーターとしてSHChangeNotification_Lockに渡す必要があります。
  • SHCNRF_NewDeliveryが指定されていない場合、 wParam は 2 つのPIDLIST_ABSOLUTE ポインターへのポインターであり、 lParam は イベントを指定します。 送信されるイベントに応じて、2 つのPIDLIST_ABSOLUTE ポインターを NULL にすることができます。
関連するファイル システム イベントが発生し、 hwnd パラメーターが NULL でない場合、 wMsg によって示されるメッセージは、指定されたウィンドウにポストされます。 それ以外の場合、 pshcne パラメーターが NULL でない場合は、その通知エントリが使用されます。

パフォーマンス上の理由から、複数の通知を 1 つの通知に組み合わせることができます。 たとえば、同じフォルダー内のファイルに対して多数の SHCNE_UPDATEITEM 通知が生成された場合は、1 つの SHCNE_UPDATEDIR 通知に参加させることができます。

Windows Vista の時点で使用できなくなった NTSHChangeNotifyRegister 関数は、SHCNRF_NewDelivery フラグを持つ SHChangeNotifyRegister と同等でした。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shlobj_core.h (Shlobj.h を含む)
Library Shell32.lib
[DLL] Shell32.dll (バージョン 5.0 以降)
API セット ext-ms-win-shell-shell32-l1-2-1 (Windows 10 バージョン 10.0.10240 で導入)