方法一:
使用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;