Context Menu - ( Code de P. Castelain )
Bsr à tous.
Je cherche à ajouter un item au Context menu de Windows, mais je me heurte à quelques soucis. Je souhaiterais avoir un item quelque soit les types de fichiers selectionnés dans Windows. Pour ca, je dois obligatoirement passer par un objet COM.
Le seul code compréhensible que j' ai pu trouvé sur le net est celui donné par l' un des intervenants de ce forum (merci à cette personne au passage). Mais, si je n' ai aucun problème pour le faire fonctionner et pour comprendre les grandes lignes... la procédure qui suit me laisse perplexe pour ce que je veux faire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| procedure TShellExtTesterFactory.UpdateRegistry(Register: Boolean);
var
ClassID: string;
DocumentName: string;
begin
if Register then
begin
inherited UpdateRegistry(Register);
ClassID := GUIDToString(Class_ShellExtTester);
with TRegistry.Create do
try
RootKey:= HKEY_CLASSES_ROOT;
if OpenKey('.txt', false) then
DocumentName:= ReadString('');
finally
Free;
end;
CreateRegKey(DocumentName+'\shellex', '', '');
CreateRegKey(DocumentName+'\shellex\ContextMenuHandlers', '', '');
CreateRegKey(DocumentName+'\shellex\ContextMenuHandlers\ShellExtTester', '', ClassID);
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions', True);
OpenKey('Approved', True);
WriteString(ClassID, 'ShellExtTester Context Menu Extension');
finally
Free;
end;
end
else
begin
DeleteRegKey(DocumentName+'\shellex\ContextMenuHandlers\ShellExtTester');
inherited UpdateRegistry(Register);
end;
end; |
Ce code fonctionne parfaitement pour les fichiers TEXTE évidemment. Mais pour tout type de fichier, comment dois-je procéder ?
Je pourrais très certainement faire une boucle pour traiter X extensions différentes, mais cette méthode serait vraiment très "laide" et très lourde (je me trompe !?).
Dois-je passer par une boucle, ou y aurait-il une astuce ?