delphi - Windows Registry File Association menu

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har for nylig (i dag) begyndt meddeling med mit register fra Delphi. :)
Alt fungerer godt, og min brugerdefinerede filtype åbnes nu med mit program, men der er 2 problemer, jeg kan ikke løse.


1) Jeg ønskede at 'åbne med' fra alle filtyper, så jeg tilføjede


  reg := TRegistry.Create;
  reg.RootKey := HKEY\_CLASSES\_ROOT;
  reg.LazyWrite := false;
  reg.OpenKey('*OpenWithListEncryptionSystem', true);
  reg.WriteString('','C:Program FilesEncryptionSystemEncryptionSystem.exe "\%1"');
  reg.CloseKey;
  reg.free;


Hvis jeg ser i registreringsdatabasen ved hjælp af regedit, er det sikkert der som det ser ud til at være, men når jeg højreklikker på en fil og vælger Åbn med det, er det ikke der ...


Så jeg tilføjede dette


  reg.OpenKey('*shellEncryptcommand', true);
  reg.WriteString('','C:Program FilesEncryptionSystemEncryptionSystem.exe "\%1"');
  reg.CloseKey;


Dette virker for hver fil, men indstillingen er lige øverst med 'open' og 'edit'.
Jeg vil gerne have, at den vises i et underafsnit som de fleste programmer gør ...
Jeg indså, at jeg havde brug for at spille med shellext, men jeg forstod ikke strukturen af ​​hvordan disse fungerede sammen med kontekstmenuhåndtererne ... Jeg har lært alt, hvad jeg havde fra at læse registreringsdatabasen alligevel ... Jeg kender navnet på shellexten vises senere efter '. *' men hvad angår betydningen af ​​de store jibberish nøgler, har jeg ingen idé.

Bedste reference


Det ser ud til, at menuen 'Åbn med' ikke er befolket af den pågældende registreringsnøgle alene. Det er trumpet af en udvidelsesspecifik liste gemt af Explorer på følgende sted:



  HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts



Jeg vil gerne gætte, at listen, du tilføjer din ansøgning til, kun bruges, hvis Explorer ikke har noget bedre at bruge - så kun for filer, der ikke allerede har deres egne 'Open with' lister defineret.


Det ser også ud til, at en 'Åbn med' registreringsdatabasen skal have en anden form end den, du bruger. Nøglen skal være navnet på EXE-filen, f.eks. ExcryptionSystem.exe . Standardværdien for den pågældende nøgle, hvis den er til stede, skal være en tom streng. Jeg baserer dette bare på det, jeg ser i registreringsdatabasen på mit eget system.


Du bør se på MSDN-artiklen File Types, en del af introduktionen til filforeninger. [6] [7]

Andre referencer 1


Ser man på registret, ser det ud til, at din linje skal ændres til.


Fra


reg.OpenKey('*OpenWithListEncryptionSystem', true);
reg.WriteString('','C:Program FilesEncryptionSystemEncryptionSystem.exe "\%1"')


til


reg.OpenKey('*OpenWithListEncryptionSystem.exe', true); //note exe
reg.WriteString('','C:Program FilesEncryptionSystemEncryptionSystem.exe "\%1"')


Tjek dette først.

Andre referencer 2


På min W7P er de ikke som referencer. I stedet er de ...


HKEY\_CURRENT\_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts