Der Funktion IShellExtInit.Initialize (im Tutorial TDFKontextMenuShellExt.SEInitialize) wird ein PIDL auf den Ordner übergeben, in dem die Aktion stattfindet. Mit der Funktion SHGetSpecialFolderLocation kannst Du die IDL für z.B. das Startmenü (CSIDL_STARTMENU) herausfinden (Achtung: IDL hinterher freigeben nicht vergessen!)
Jetzt hast Du zwei IDL, die Du vergleichen musst:
Du holst Dir ein IShellFolder-Interface mit SHGetDesktopFolder, davon verwendest Du die Methode CompareIDs mit den beiden IDL (die übergebene und die ermittelte), und schaust, ob sie gleich sind.
Delphi-Quellcode:
Function DoIDLEqual(pidl1: PItemIDList; pidl2: PItemIDList): Boolean;
var df: IShellFolder;
Begin
Result := False;
If SHGetDesktopFolder(
df)=NOERROR
Then
Result := (
df.CompareIDs(0,pidl1,pidl2)=0);
End;
Bei Gleichheit bist Du im Startmenü und gehst mit Result := E_FAIL; und aus der Funktion raus und nix passiert.
Gruß, teebee