0

ms-word のハンドルを取得し、AccessibleObjectFromEvent を使用して IDispatch (late bingding) を取得します。次に、そのプロパティまたはメソッドを呼び出したいのですが、失敗します。</p>

しかし、C# を使用しても問題ありません。

遅延バインディングを使用してExcelインスタンスを取得するには?

このようなコード。

function GetProperty(dispobj: IDispatch; PropertyName: widestring;
    var retvalue: IDispatch): Boolean;
var
    hr: HResult;
    DispId1: Integer;
    value: Variant;
    params: TDispParams;
begin
    Result := false;
    hr := dispobj.GetIDsOfNames(GUID_NULL, @(PropertyName), 1,
        LOCALE_SYSTEM_DEFAULT, @DispId1);
    if (hr >= 0) then begin
        hr := dispobj.Invoke(DispId1, GUID_NULL, LOCALE_SYSTEM_DEFAULT,
            DISPATCH_PROPERTYGET, params, @value, nil, nil);
        if (hr >= 0) then begin
            retvalue := value;
            Result := true;
        end;
    end;
end;

    hWindow := GetWordHandle(Trim(LabeledEdit1.Text));
hWindow := GetChildWndHandle(hWindow, '_WwG');
if `AccessibleObjectFromWindow`(hWindow, 0, IID_IDispatch, WordObject) = S_OK then begin
    //GetProperty(WordObject, 'Application', WordApp);
   // WordObject.GetTypeInfoCount(nCount);
    //Showmessage(IntToStr(nCount));
    //WordApplication1.ConnectTo((WordObject.Application) as _Application);
   // Showmessage(WordObject.Application.Version)
    OleCheck(WordObject.QueryInterface(IID_IDispatch, WordApp));
    WordApplication1.ConnectTo(IDispatch(WordApp) as _Application);
    Showmessage(WordApplication1.Version)
end
4

1 に答える 1