gpt4 book ai didi

delphi - 如何将程序与文件类型关联,但仅限当前用户?

转载 作者:行者123 更新时间:2023-12-03 14:35:55 25 4
gpt4 key购买 nike

因此,如果不强制可怜的用户输入其管理员密码,我就无法将我的程序与特定文件类型关联起来(对于家庭用户来说可能没问题,但对于企业环境中的用户来说这是一个巨大的问题)。在这种情况下,唯一的解决方案是仅针对当前用户进行关联。

我已经尝试过,但有些东西不起作用。

如果我理解正确的话,我必须在 ctCurUserFileExt 中编写一个类似于(比方说)“.mp3”的键,并在其中写入类似于“my_file”的内容。然后在 ctCurUserClases 中添加一个像这样的键:

WriteReg_String(RootKey, ctCurUserClases+ 'my_file\shell\open\command', '', Application.ExeName+ ' "%L"', TRUE) 

但是,当我双击该文件时,Windows 会询问我应该使用哪个应用程序打开它。

以下是常数:

CONST
RootKey= 'HKEY_CURRENT_USER';
ctCurUserFileExt= '\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\';
ctCurUserClases = '\Software\Classes\';

最佳答案

如果您想为每个用户注册关联,请将您的数据写入

HKEY_LOCAL_MACHINE\Software\Classes

如果您只想为当前用户注册关联,请将您的数据写入

HKEY_CURRENT_USER\Software\Classes

这是执行后者的方法:

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);

这将关联名为“我自己的文本文件类型”的 .myfile 文件,以便它们具有 notepad.exe 的图标,并由 notepad.exe 打开。最后一行告诉资源管理器“重新加载”自身以反射(reflect)对文件关联所做的更改。例如,资源管理器文件 ListView 将更新。 WinAPI函数SHChangeNotifyShlObj.pas中声明,因此您需要使用ShlObj

请注意,shell\open\command 中的 %1 将扩展到当前文件。例如,如果双击C:\some dir\test.myfile,则资源管理器将执行命令

C:\WINDOWS\notepad.exe "C:\some dir\test.myfile"

关于delphi - 如何将程序与文件类型关联,但仅限当前用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com