方法一: 使用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
|
请发表评论