Ich denke über das Schreiben einer Win32-Shell-Erweiterung nach, die dem Dialogfeld Eigenschaften für Laufwerke und Ordner eine Seite hinzufügt. Diese Seite würde Informationen anzeigen, die teuer zu erwerben sein können. Aus diesem Grund möchte ich die Datenerfassungslogik in einen Arbeitsthread einfügen, um die Benutzeroberfläche nicht zu stören und dem Benutzer auf der betreffenden Seite eine Rückmeldung zu geben. Die Seite wird initialisiert und löst somit den Datenerfassungsprozess aus, wenn der Benutzer im Dialogfeld Eigenschaften die Seite (Registerkarte) auswählt. Nach dem Lesen der relevanten MSDN-Dokumentation ist mir nicht klar, wie man einen Worker-Thread in eine Eigenschaftsblatt-Seite für den von Shell erstellten Eigenschaften-Dialog integrieren würde. Normalerweise hätte ich PostThreadMessage
PostThreadMessage
verwendet, um eine private Nachricht an die Nachrichtenschleife im UI-Thread vom Arbeitsthread oder MsgWaitForMultipleObjects
im UI-Thread zu senden, und signalisierte ein Synchronisierungsereignis vom Arbeitsthread, um eine Arbeitseinheit anzugeben war getan worden und der UI-Rückmeldungsmechanismus (sagen wir, ein Fortschrittsmesser) sollte aktualisiert werden. Beide benötigen jedoch eine Integration in die Meldungsschleife, die im Dialogfeld Eigenschaften der Shell vordefiniert ist.Windows-Eigenschaftenblatt Shell-Erweiterung mit Worker-Thread
Ich stelle fest, dass, wenn ich den Standard-Eigenschaften-Dialog von Windows Explorer auf einen Ordner aufrufe und eine Zählung der Unterordner und Dateien in und aus dem ausgewählten Ordner anzeigt, dass der Ordner/die Dateizählung zu sein scheint passiert im Hintergrund, weil der Dialog immer noch reagiert, also nehme ich an, was ich tun will, muss möglich sein?
Sie können eine Nachricht auf Ihrer Eigenschaftenseite posten. –
Das Senden einer Nachricht von einem Thread an einen anderen (in diesem Fall von einem Hintergrund-Worker-Thread zum Vordergrund/UI-Hauptthread) erfordert die Verwendung von 'PostThreadMessage', einer Methode, die Nachrichten sendet, die keinem Fenster zugeordnet sind. Die MSDN-Dokumentation ist in diesem Punkt vage, aber es scheint nicht anzuzeigen, dass es eine Möglichkeit gibt, zu garantieren, dass eine "nicht relevante" oder "nicht standardmäßige" Nachricht, die von der vordefinierten Eigenschaftsdialog-Nachrichtenschleife der Shell empfangen wird, weitergegeben wird zu der Dialogprozedur für eine Seite. – Matthew
Es ist mir jedoch inzwischen eingefallen, dass eine mögliche Lösung für dieses Problem die Verwendung eines Nachrichten-Hooks sein könnte (d. H. 'SetWindowsHookEx (WH_GETMESSAGE, ...)'). Ich werde das zusammen mit dem Vorschlag von @DenisAnisimov überprüfen. – Matthew