SHChangeNotifyRegister-Funktion (shlobj_core.h)

Registriert ein Fenster zum Empfangen von Benachrichtigungen vom Dateisystem oder der Shell, wenn das Dateisystem Benachrichtigungen unterstützt.

Syntax

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

Parameter

[in] hwnd

Typ: HWND

Ein Handle für das Fenster, das die Änderungs- oder Benachrichtigungsmeldungen empfängt.

fSources

Typ: int

Mindestens einer der folgenden Werte, die den Typ der Ereignisse angeben, für die Benachrichtigungen empfangen werden sollen.

Hinweis In früheren Versionen des SDK sind diese Flags nicht in einer Headerdatei definiert, und Implementierende müssen diese Werte selbst definieren oder ihre numerischen Werte direkt verwenden. Ab Windows Vista werden diese Flags in Shlobj.h definiert.
 

SHCNRF_InterruptLevel (0x0001)

Benachrichtigungen auf Unterbrechungsebene vom Dateisystem.

SHCNRF_ShellLevel (0x0002)

Benachrichtigungen auf Shellebene von der Shell.

SHCNRF_RecursiveInterrupt (0x1000)

Unterbrechen sie Ereignisse für die gesamte Teilstruktur. Dieses Flag muss mit dem SHCNRF_InterruptLevel-Flag kombiniert werden. Bei Verwendung dieses Flags müssen Benachrichtigungen auch rekursiv gemacht werden, indem das fRecursive-Element der entsprechenden SHChangeNotifyEntry-Struktur , auf die von pshcne verwiesen wird, auf TRUE festgelegt wird. Die Verwendung von SHCNRF_RecursiveInterrupt in einer Ansicht auf einer einzelnen Ebene – z. B. eine PIDL, die relativ ist und nur eine SHITEMID enthält – blockiert Ereignisbenachrichtigungen auf höchster Ebene und verhindert dadurch eine rekursive, untergeordnete Aktualisierung. Daher kann ein Symbol, das in die unterste Ebene einer Ordnerhierarchie gezogen wird, möglicherweise nicht wie erwartet in der Ansicht angezeigt werden.

SHCNRF_NewDelivery (0x8000)

Empfangene Nachrichten verwenden gemeinsam genutzten Arbeitsspeicher. Rufen Sie SHChangeNotification_Lock auf, um auf die tatsächlichen Daten zuzugreifen. Rufen Sie SHChangeNotification_Unlock auf, um den Arbeitsspeicher freizugeben, wenn Sie fertig sind.

Hinweis Dieses Flag wird empfohlen, da es eine robustere Übermittlungsmethode bietet. Dieses Flag sollten von allen Clients angegeben werden.
 

fEvents

Typ: LONG

Ändern Sie Benachrichtigungsereignisse, für die Benachrichtigungen empfangen werden sollen. Mögliche Werte finden Sie in den in SHChangeNotify aufgeführten SHCNE-Flags .

wMsg

Typ: UINT

Nachricht, die an die Fensterprozedur gesendet werden soll.

cEntries

Typ: int

Anzahl der Einträge im Array "pshcne ".

[in] pshcne

Typ: const SHChangeNotifyEntry*

Array von SHChangeNotifyEntry-Strukturen , die die Benachrichtigungen enthalten. Dieses Array sollte immer auf eins festgelegt werden, wenn SHChangeNotifyRegister oder SHChangeNotifyDeregister nicht ordnungsgemäß funktioniert.

Rückgabewert

Typ: ULONG

Gibt eine positive ganzzahlige Registrierungs-ID zurück. Gibt 0 zurück, wenn nicht genügend Arbeitsspeicher vorhanden ist oder als Reaktion auf ungültige Parameter.

Hinweise

Ein vollständiges Beispiel, das die Verwendung dieser Funktion veranschaulicht, finden Sie im Change Notify Watcher-Beispiel im Windows Software Development Kit (SDK).

Wenn ein Änderungsbenachrichtigungsereignis ausgelöst wird, wird die von wMsg angegebene Nachricht an das durch den hwnd-Parameter angegebene Fenster übermittelt.

  • Wenn SHCNRF_NewDelivery angegeben wird, sollten die Werte wParam und lParam in der Nachricht als hChange- bzw. dwProcID-Parameter an SHChangeNotification_Lock übergeben werden.
  • Wenn SHCNRF_NewDelivery nicht angegeben wird, ist wParam ein Zeiger auf zwei PIDLIST_ABSOLUTE Zeiger, und lParam gibt das Ereignis an. Die beiden PIDLIST_ABSOLUTE-Zeiger können je nach gesendetem Ereignis NULL sein.
Wenn ein relevantes Dateisystemereignis stattfindet und der hwnd-Parameter nicht NULL ist, wird die von wMsg angegebene Meldung an das angegebene Fenster gesendet. Andernfalls wird dieser Benachrichtigungseintrag verwendet, wenn der pshcne-Parameter nicht NULL ist.

Aus Leistungsgründen können mehrere Benachrichtigungen zu einer einzigen Benachrichtigung kombiniert werden. Wenn beispielsweise eine große Anzahl von SHCNE_UPDATEITEM Benachrichtigungen für Dateien im selben Ordner generiert wird, können sie in eine einzelne SHCNE_UPDATEDIR Benachrichtigung eingebunden werden.

Die NTSHChangeNotifyRegister-Funktion , die ab Windows Vista nicht mehr verfügbar ist, entspricht SHChangeNotifyRegister mit dem SHCNRF_NewDelivery-Flag.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile shlobj_core.h (einschließlich Shlobj.h)
Bibliothek Shell32.lib
DLL Shell32.dll (Version 5.0 oder höher)
APIs ext-ms-win-shell-shell32-l1-2-1 (eingeführt in Windows 10, Version 10.0.10240)