方法一:
使用SHDocVw, MSHtml单元提供的一些方法利用浏览器的特性来获取。

uses SHDocVw, MSHtml;

function GetUserAgent: string;
var
  Doc: IHTMLDocument2;
  win: IHTMLWindow2;
  wb: TWebBrowser;
begin
  Result := '';
  try
    wb := TWebBrowser.Create(nil);
    try
      wb.Navigate('about:blank');
      while not wb.ReadyState = READYSTATE_COMPLETE do
        Application.ProcessMessages;
      Doc := IHTMLDocument2(wb.Document);
      if not Assigned(Doc) then Exit;
      win := Doc.parentWindow;
      if Assigned(win) then
        Result := win.clientInformation.userAgent;
    finally
      wb.Free;
    end;
  except
  end;
end;

注:此方法为获取系统默认的UserAgent的方法,而不一定是系统默认IE浏览器的UserAgent,如需获取IE浏览器的UserAgent,可将Webbrowser对象改为IWebBrowser2或IShellWindows等接口即可。

方法二:
其实很简单就是从注册表里面读取。不过该方法读取出来的并不完整。

uses Registry;

function GetDefaultUserAgent: string;
var
  reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet Settings\', FALSE)
      then Result := Reg.ReadString('User Agent');
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;

注:其实也可以从 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 下面读取 User Agent 的值,从 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform 下读取 .NET CLR 2.0.50727 类似如此的项名称,然后拼接在一起就可以构成一个IE浏览器的 UserAgent。

方法三:
利用UrlMon里面提供的方法来获取浏览器的User Agent,不过该方法有时候会失误,比如我的浏览器是IE8.0,而结果却是IE7.0。

uses UrlMon;

function GetIEUserAgent: String;
var
  IeUserAgent: array[0 .. MAX_PATH] of Char;
  dwSizeOut: DWord;
begin
  Result := '';
  try
    dwSizeOut := 0;
    ZeroMemory(@IeUserAgent, MAX_PATH * SizeOf(Char));
    UrlMkGetSessionOption(URLMON_OPTION_USERAGENT, @IeUserAgent, MAX_PATH, dwSizeOut, 0);
    Result := StrPas(IeUserAgent);
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
    end;
  end;
end;

http://www.lsworks.net/article/42.html

Delphi下获取IE的UserAgent的方法的更多相关文章

  1. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  2. Delphi在Android下实现BroadcastReceiver功能(举例在Delphi下获取USB外设拔插消息)

    在Android里,用java通过实现BroadcastReceiver接口,就可以获得Intent消息.可是Delphi程序不能直接实现JBroadcastReceiver,如何能够实现类似Java ...

  3. 在Windows及Linux下获取毫秒级运行时间的方法

    在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL W ...

  4. cocos2d-x在win32和iOS、android下获取当前系统时间的方法

    最近在游戏里要显示当前系统时间的功能,网上一搜很多写着获取的方法,大都是如下 struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, ...

  5. Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...

  6. Delphi实现获取磁盘空间大小的方法

    unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ...

  7. Winform中修改WebBrowser控件User-Agent的方法(已经测试成功)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  8. Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)

    Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...

  9. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

随机推荐

  1. MYSQL 的 3 类数据类型

    1.数据型: bool,float,double decimal(M,D) M是小数位数(精度)的总数,D是小数点(标度)后面的位数.DECIMAL整数最大位数(M)为65. smallint 小的整 ...

  2. XML的命名空间

    XML命名空间提供避免元素命名冲突的方法. 命名冲突:在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个XML文档携带着某个表格中的信息: <ta ...

  3. 工作无聊,闲来无事,自己学习 android入门

    工作无聊,闲来无事,自己学习. 最近几天看了看有关android的UI设计,布局以及android有关控件的知识,算是进一步了解了 android的相关内容. 明天就是周末了,明天及后天,我打算开始学 ...

  4. wikioi1450 xth的旅行

    题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼 斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...

  5. Python中and和or

    转自:http://unei66.blog.163.com/blog/static/544640292010320745886/ python中的and和or 4.6. and 和 or 的特殊性质在 ...

  6. mac系统奔溃无法启动时,如何备份重要资料

    虽然说苹果系统以稳定性获得高度好评,但是作为一名程序员,还是要考虑到系统奔溃的情况. 当遇到系统奔溃,无法启动,而我们还没有备份电脑里面的重要资料,这时候不用着急.可以用下面的 方法来拯救你的苹果电脑 ...

  7. redi中删除所有的数据

    EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 *

  8. 查询本天气预报Web Services支持的国内外城市或地区信息

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangkui.blog.51cto.com/1796259/497324 本文 ...

  9. Android 4.4 Kitkat 使能 USB adb 功能

    背景 在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能.这篇文章依据原作者的 Google+ ...

  10. WorkFlow WF如何为一个集合赋值

    今天刚刚开始学习WorkFlow.无奈WF网络上的学习资料实在太少. 刚刚学到Foreach控制流的使用,需要一个集合参数.经研究,静态赋值可以搞定.动态赋值还没. 首先添加一个List<int ...