IAccessible:如何在Mozilla Firefox中获取url bar的价值?

时间:2014-09-12 21:47:32

标签: delphi delphi-xe6

我正在使用一个代码来保证从url bar获取值,但现在在IAccessible get_accValue属性的某些参数中出现一个编译错误。那么,如何解决?

任何帮助将不胜感激!

这是我的代码:

uses
  oleacc;

function ffdoc: THandle;
const
  A_szClassName: array[0..6] of PChar = ('MozillaUIWindowClass','MozillaWindowClass',
  'MozillaWindowClass','MozillaWindowClass','MozillaContentWindowClass',
  'MozillaWindowClass','MozillaWindowClass');
var
  i: Integer;
begin
  Result:= 0;
  for i:= 0 to 6 do
    Result:= FindWindowEx(Result,THandle(nil),A_szClassName[i],nil);
end;

function ffurl:string;
var
  acc: IAccessible;
  pw: PWChar;
begin
  if AccessibleObjectFromWindow(ffdoc,OBJID_CLIENT,IID_IAccessible,Pointer(acc)) = 0 then
    Acc.get_accValue(CHILDID_SELF,pw);
  Result:= pw;
end;

1 个答案:

答案 0 :(得分:0)

如果您查看oleacc.IAccessible.get_accValue()的声明,很明显您会收到错误:

function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;

您正试图传递PWChar,其中out WideString是预期的。对于varout参数,Delphi非常严格。

您需要更改pw变量:

function ffurl:string;
var
  acc: IAccessible;
  pw: WideString;
begin
  if AccessibleObjectFromWindow(ffdoc, OBJID_CLIENT, IID_IAccessible, acc) = 0 then
    acc.get_accValue(CHILDID_SELF, pw);
  Result := pw;
end;

COM使用BSTR作为其字符串,Delphi包含WideString。所以在将字符串传入/传出COM接口时总是使用WideString