分享

delphi Twebbrowser IE版本选择

 hncdman 2023-04-24 发布于湖南

资料来源网上,如有异议请联系删除。

经过验证和修改。twebbrowser如果不设置,默认使用系统默认核心,一般是IE8。

由于IE8版本较低,在特殊情况下,浏览网页会发生异常错误,不兼容等。需要修改调研的默认IE版本,默认使用系统的最高IE版本

{增加Registry引用}
function GetIEVersionStr: string;
var
    Reg:TRegistry;
begin
     Result := '';
     Reg := TRegistry.Create;
     try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
         if Reg.OpenKeyReadOnly('Software\Microsoft\Internet Explorer') then
           begin
            //IE版本,不同版本键值不同
            if Reg.ValueExists('svcVersion') then
              Result := Reg.ReadString('svcVersion')
            else
             if Reg.ValueExists('Version') then
               Result := Reg.ReadString('Version');
          end;
     finally
       Reg.Free;
     end;

end;

function IsWin64: Boolean;
//判断是否为64为系统
var
   Kernel32Handle:THandle;
   IsWow64Process: function(Handle:THandle;var Res:BOOL):BOOL;stdcall;
   GetNativeSystemInfo:procedure(var lpSystemInfo:TSystemInfo);stdcall;
   isWoW64: Bool;
   SystemInfo: TSystemInfo;
const
   PROCESSOR_ARCHITECTURE_AMD64=9;
   PROCESSOR_ARCHITECTURE_IA64=6;
begin
    Kernel32Handle:=GetModuleHandle('KERNEL32.DLL');
    if Kernel32Handle=0 then
       Kernel32Handle:=LoadLibrary('KERNEL32.DLL');
    if Kernel32Handle<>0 then
        begin
            IsWOW64Process:=GetProcAddress(Kernel32Handle,'IsWow64Process');
            GetNativeSystemInfo:=GetProcAddress(Kernel32Handle,'GetNativeSystemInfo');
            if Assigned(IsWow64Process) then
            begin
              IsWow64Process(GetCurrentProcess,isWoW64);
              Result:=isWoW64 and Assigned(GetNativeSystemInfo);
              if Result then
              begin
                 GetNativeSystemInfo(SystemInfo);
                 Result:=(SystemInfo.wProcessorArchitecture=PROCESSOR_ARCHITECTURE_AMD64)or
                 (SystemInfo.wProcessorArchitecture=PROCESSOR_ARCHITECTURE_IA64);
              end;
            end
            else
            Result:=False;
        end
    else
       Result:=False;
end;

function WriteAppNameToReg: Boolean;
 var
 reg:TRegistry;
 sPath,sAppName:String;
 Sver:string;
 lenver:Integer;
begin
      Result:=True;
      reg:=TRegistry.Create;
    try
        reg.RootKey:=HKEY_LOCAL_MACHINE;
        sPath:='SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION';
        if isWin64 then
          sPath:='SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION';
        if reg.OpenKey(sPath,True) then
        begin
         sAppName:=ExtractFileName(Application.ExeName);
         Sver:=GetIEVersionStr;     
         lenver:=StrToInt( Copy(Sver,1,Pos('.',Sver)-1) );
         //获取IE大版本号
          if lenver<=7 then
            reg.WriteInteger(sAppName,7000)
          else
          if lenver=8 then
          begin
            reg.WriteInteger(sAppName,8000)
          end
          else
          if lenver=9 then
          begin
            reg.WriteInteger(sAppName,9000)
          end
           else
          if lenver=10 then
          begin
            reg.WriteInteger(sAppName,10000)
          end
           else
          if lenver=11 then
          begin
            reg.WriteInteger(sAppName,11001)
          end;
        end;
        reg.CloseKey;

    finally
       FreeAndNil(reg);
    end;

end;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多