gpt4 book ai didi

delphi - 将 Chrome 检测为与 Windows 中的 html 文件关联的浏览器

转载 作者:行者123 更新时间:2023-12-03 15:01:21 25 4
gpt4 key购买 nike

我们提供 Flash 教程视频,这些视频与我们的应用程序一起安装在本地 (Windows) 硬盘上。我们的应用程序使用 ShellExecute 打开嵌入它们的 html 文件(在与 html 文件关联的任何浏览器中)。

显然,Chrome 最新的 Flash 播放器存在一个错误,无法播放本地文件(但网络上的文件没问题。)

(坦白说,我很惊讶 Google 还没有修复这个错误。对我来说这似乎是一个大错误......但也许没有多少人从网络以外的位置玩 Flash?)

Chrome 中的 about:plugins 屏幕上有一个解决方法,但我们不能要求用户这样做。以下是对解决方法的讨论:http://techsmith.custhelp.com/app/answers/detail/a_id/3518

我想为我的用户提供一个选项来打开我们的 html 文件 IE。 如果 Chrome 是他们的默认浏览器,那么我会显示一个复选框,上面写着一些令人尴尬的内容,例如“如果我们的教程视频无法播放,请选中此框以在 IE 中尝试。”

这个 XE2 代码(两年前的 SO: link )仍然合理吗?

if pos('CHROME', UpperCase(GetAssociation('C:\Path\File.html')) > 0 then
// Chrome is the default browser

function GetAssociation(const DocFileName: string): string;
var
FileClass: string;
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create(KEY_EXECUTE);
Reg.RootKey := HKEY_CLASSES_ROOT;
FileClass := '';
if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then
begin
FileClass := Reg.ReadString('');
Reg.CloseKey;
end;
if FileClass <> '' then begin
if Reg.OpenKeyReadOnly(FileClass + '\Shell\Open\Command') then
begin
Result := Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;

最佳答案

如果您有磁盘上现有文件的实际完整路径,则可以使用 FindExecutable反而。它更容易,并且不需要访问注册表,但它确实需要存在一个实际文件。

这是一个演示使用的 XE2 控制台应用程序:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
SysUtils, ShellAPI, Windows;

var
Buffer: array[0..MAX_PATH] of Char;
Res: Integer;

begin
FillChar(Buffer, SizeOf(Buffer), #0);
Res := FindExecutable(PChar('C:\Path\File.html'), nil, Buffer);
if Res > 32 then
Writeln('Executable is ' + Buffer)
else
WriteLn(SysErrorMessage(Res));
Readln;
end.

您展示的方法可以工作,但 FindExecutable 更容易(代码更少)并且适用于 XP 及更高版本。

关于delphi - 将 Chrome 检测为与 Windows 中的 html 文件关联的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11962753/

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