puedo - ¿Cómo asociar un programa Delphi con un tipo de archivo, pero solo para el usuario actual?
no puedo cambiar programa predeterminado windows 10 (2)
¿Ha mirado configurarlo en HKEY_CURRENT_USER / Software / Classes según http://support.microsoft.com/kb/257592
Por lo tanto, no puedo asociar mi programa con un tipo de archivo específico sin forzar al usuario pobre a ingresar su contraseña de administrador (puede ser correcto para usuarios domésticos, pero es un problema gigantesco para los usuarios en un entorno corporativo). En este caso, la única solución es hacer la asociación solo para el usuario actual.
Lo he intentado pero algo no funciona.
Si lo entiendo correctamente, tengo que escribir una clave como (digamos) ''.mp3'' en ctCurUserFileExt y escribir algo así como ''mi_archivo''. Luego en ctCurUserClases agrego una clave como esta:
WriteReg_String(RootKey, ctCurUserClases+ ''my_file/shell/open/command'', '''', Application.ExeName+ '' "%L"'', TRUE)
Sin embargo, cuando hago doble clic en el archivo, Windows me pregunta con qué aplicación debe abrirlo.
Aquí están las constantes:
CONST
RootKey= ''HKEY_CURRENT_USER'';
ctCurUserFileExt= ''/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts/';
ctCurUserClases = ''/Software/Classes/';
Si desea registrar la asociación para cada usuario, escriba sus datos en
HKEY_LOCAL_MACHINE/Software/Classes
Si desea registrar la asociación solo para el usuario actual, escriba sus datos en
HKEY_CURRENT_USER/Software/Classes
Esta es la forma de hacer esto último:
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey(''/Software/Classes/.myfile'', true) then
WriteString('''', ''MyAppDataFile'');
if OpenKey(''/Software/Classes/MyAppDataFile'', true) then
WriteString('''', ''My Very Own Text File Type'');
if OpenKey(''/Software/Classes/MyAppDataFile/DefaultIcon'', true) then
WriteString('''', ''C:/WINDOWS/notepad.exe'');
if OpenKey(''/Software/Classes/MyAppDataFile/shell/open/command'', true) then
WriteString('''', ''C:/WINDOWS/notepad.exe "%1"'');
finally
Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
Esto asociará los archivos .myfile, llamados "Mi propio tipo de archivo de texto" para que tengan el ícono de notepad.exe y serán abiertos por notepad.exe. La última línea le dice a Explorer que se ''vuelva a cargar'' para reflejar los cambios realizados en las asociaciones de archivos. Por ejemplo, las vistas de la lista de archivos de Explorer se actualizarán. La función SHChangeNotify
se declara en ShlObj.pas
, por lo que necesita uses ShlObj
.
Observe que el shell/open/command
%1
in shell/open/command
se expandirá al archivo actual. Por ejemplo, si hace doble clic en C:/some dir/test.myfile
, Explorer ejecutará el comando
C:/WINDOWS/notepad.exe "C:/some dir/test.myfile"