2009-02-26 6 views
2

J'ai récemment (aujourd'hui) commencé à utiliser meddeling avec mon registre depuis Delphi. :) tout fonctionne bien et mon type de fichier personnalisé s'ouvre maintenant avec mon programme, mais il y a 2 problèmes que je ne peux pas résoudre.Menu d'association de fichier de registre Windows

1) Je voulais l'option « ouvrir avec » de tous les types de fichiers, donc j'ajouté

reg := TRegistry.Create; 
    reg.RootKey := HKEY_CLASSES_ROOT; 
    reg.LazyWrite := false; 
    reg.OpenKey('*\OpenWithList\EncryptionSystem', true); 
    reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); 
    reg.CloseKey; 
    reg.free; 

Si je regarde dans le registre en utilisant regedit il est sûr qu'il ya comme cela devrait sembler être mais quand je droit cliquez sur un fichier et sélectionnez Ouvrir avec c'est pas là ...

Je puis ajouté ce

reg.OpenKey('*\shell\Encrypt\command', true); 
    reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); 
    reg.CloseKey; 

cela fonctionne pour tous les fichiers, mais l'option est tout en haut avec « ouvert » et " modifier". Je veux qu'il apparaisse dans une sous-section de menu comme la plupart des programmes ... Je me suis rendu compte que je devais jouer avec shellext mais je ne comprenais pas la structure de la façon dont cela fonctionnait avec les gestionnaires de menus contextuels ... J'ai appris tout ce que j'avais en lisant le registre de toute façon ... Je sais que le nom du shellext apparaît plus tard après le ". *" mais quant à la signification des grandes touches du charabia, je n'en ai aucune idée.

Répondre

6

Il semble que le menu "Ouvrir avec" ne soit pas rempli par cette seule clé de registre. Il est forgées de toutes pièces par une liste spécifique d'extension stockée par l'explorateur à l'adresse suivante:

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

Je risque une hypothèse que la liste vous ajoutez votre application à est seulement utilisé si Explorer n'a rien de mieux à utiliser - donc seulement pour les fichiers qui n'ont pas déjà leurs propres listes "Ouvrir avec" définies.

En outre, il semble qu'une entrée de registre "Ouvrir avec" est supposée avoir une forme différente de celle que vous utilisez. La clé doit être le nom du fichier EXE, tel que ExcryptionSystem.exe. La valeur par défaut de cette clé, si présente, doit être une chaîne vide. Je base ceci juste sur ce que je vois dans le registre sur mon propre système.

Vous devriez jeter un coup d'œil à l'article MSDN File Types, qui fait partie du Introduction to File Associations.

+0

yea l'ajout de l'extension .exe et la suppression du lien de données dans l'entrée de regestry semble avoir fixé ,, lol je ne sais pas comment le lien de données était en disant où Ti était. meh .... – Arthur

1

En regardant le registre, il semble que votre ligne devrait être changé en.

De

reg.OpenKey('*\OpenWithList\EncryptionSystem', true); 
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"') 

à

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

Vérifiez ce premier.

0

Sur mon W7P, ils ne sont pas référencés. Au contraire, ils sont à ...

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 
Questions connexes