Delphi下获取IE的UserAgent的方法
方法一:
使用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的方法的更多相关文章
- Windows下获取本机IP地址方法介绍
Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...
- Delphi在Android下实现BroadcastReceiver功能(举例在Delphi下获取USB外设拔插消息)
在Android里,用java通过实现BroadcastReceiver接口,就可以获得Intent消息.可是Delphi程序不能直接实现JBroadcastReceiver,如何能够实现类似Java ...
- 在Windows及Linux下获取毫秒级运行时间的方法
在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL W ...
- cocos2d-x在win32和iOS、android下获取当前系统时间的方法
最近在游戏里要显示当前系统时间的功能,网上一搜很多写着获取的方法,大都是如下 struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, ...
- Android下获取FPS的几种方法
FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...
- Delphi实现获取磁盘空间大小的方法
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ...
- Winform中修改WebBrowser控件User-Agent的方法(已经测试成功)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)
Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
随机推荐
- MYSQL 的 3 类数据类型
1.数据型: bool,float,double decimal(M,D) M是小数位数(精度)的总数,D是小数点(标度)后面的位数.DECIMAL整数最大位数(M)为65. smallint 小的整 ...
- XML的命名空间
XML命名空间提供避免元素命名冲突的方法. 命名冲突:在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个XML文档携带着某个表格中的信息: <ta ...
- 工作无聊,闲来无事,自己学习 android入门
工作无聊,闲来无事,自己学习. 最近几天看了看有关android的UI设计,布局以及android有关控件的知识,算是进一步了解了 android的相关内容. 明天就是周末了,明天及后天,我打算开始学 ...
- wikioi1450 xth的旅行
题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼 斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...
- Python中and和or
转自:http://unei66.blog.163.com/blog/static/544640292010320745886/ python中的and和or 4.6. and 和 or 的特殊性质在 ...
- mac系统奔溃无法启动时,如何备份重要资料
虽然说苹果系统以稳定性获得高度好评,但是作为一名程序员,还是要考虑到系统奔溃的情况. 当遇到系统奔溃,无法启动,而我们还没有备份电脑里面的重要资料,这时候不用着急.可以用下面的 方法来拯救你的苹果电脑 ...
- redi中删除所有的数据
EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 *
- 查询本天气预报Web Services支持的国内外城市或地区信息
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangkui.blog.51cto.com/1796259/497324 本文 ...
- Android 4.4 Kitkat 使能 USB adb 功能
背景 在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能.这篇文章依据原作者的 Google+ ...
- WorkFlow WF如何为一个集合赋值
今天刚刚开始学习WorkFlow.无奈WF网络上的学习资料实在太少. 刚刚学到Foreach控制流的使用,需要一个集合参数.经研究,静态赋值可以搞定.动态赋值还没. 首先添加一个List<int ...