Hallo zusammen,
möchte über das IAccessible-Interface auf Windows-Objekte zugreifen. Bekomme nun leider bei Aufruf einer entsprechenden Funktion den o.g. Fehler. Was mache ich falsch ?
Hier der Code von beiden Units:
<PRE>
UNIT 1:
program MSN6Reader;
uses
Windows, Accessibility_TLB, sndkey32, sysutils, classes, Comobj;
{$R *.res}
var
handle: HWND;
accParent: IAccessible;
procedure EnumerarControles(var accParent: IAccessible);
var
item, count: Integer;
oItem: OleVariant;
accChild: IAccessible;
Dispatcher: IDispatch;
begin
count := accParent.accChildCount;
for item := 1 to count do
begin
VarCast(oItem, item, varInteger);
// BEI FOLGENDER ZEILE ERSCHEINT DER FEHLER:
Dispatcher := accParent.accChild[oItem];
Dispatcher.QueryInterface(IID_IAccessible, accChild);
MessageBoxW(0, PWideChar(accChild.accValue[0]), PWideChar(accChild.accName[0]), 0);
EnumerarControles(accChild);
end;
end;
begin
CoInitialize(nil);
handle := FindWindow(nil,'Microsoft Word');
AccessibleObjectFromWindow(handle, 0, IID_IAccessible, accParent);
if accParent <> nil then
enumerarControles(accParent);
CoUninitialize;
end.
UNIT 2:
unit Accessibility_TLB;
interface
uses Windows;
const
IID_IAccessible: TGUID = '{618736E0-3C3D-11CF-810C-00AA00389B71}';
oleacc = 'oleacc.dll';
ole32 = 'ole32.dll';
type
IAccessible = interface(IDispatch)
['{618736E0-3C3D-11CF-810C-00AA00389B71}']
function Get_accParent: IDispatch; safecall;
function Get_accChildCount: Integer; safecall;
function Get_accChild(varChild: OleVariant): IDispatch; safecall;
function Get_accName(varChild: OleVariant): WideString; safecall;
function Get_accValue(varChild: OleVariant): WideString; safecall;
function Get_accDescription(varChild: OleVariant): WideString; safecall;
function Get_accRole(varChild: OleVariant): OleVariant; safecall;
function Get_accState(varChild: OleVariant): OleVariant; safecall;
function Get_accHelp(varChild: OleVariant): WideString; safecall;
function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant): Integer; safecall;
function Get_accKeyboardShortcut(varChild: OleVariant): WideString; safecall;
function Get_accFocus: OleVariant; safecall;
function Get_accSelection: OleVariant; safecall;
function Get_accDefaultAction(varChild: OleVariant): WideString; safecall;
procedure accSelect(flagsSelect: Integer; varChild: OleVariant); safecall;
procedure accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant); safecall;
function accNavigate(navDir: Integer; varStart: OleVariant): OleVariant; safecall;
function accHitTest(xLeft: Integer; yTop: Integer): OleVariant; safecall;
procedure accDoDefaultAction(varChild: OleVariant); safecall;
procedure Set_accName(varChild: OleVariant; const pszName: WideString); safecall;
procedure Set_accValue(varChild: OleVariant; const pszValue: WideString); safecall;
property accParent: IDispatch read Get_accParent;
property accChildCount: Integer read Get_accChildCount;
property accChild[varChild: OleVariant]: IDispatch read Get_accChild;
property accName[varChild: OleVariant]: WideString read Get_accName write Set_accName;
property accValue[varChild: OleVariant]: WideString read Get_accValue write Set_accValue;
property accDescription[varChild: OleVariant]: WideString read Get_accDescription;
property accRole[varChild: OleVariant]: OleVariant read Get_accRole;
property accState[varChild: OleVariant]: OleVariant read Get_accState;
property accHelp[varChild: OleVariant]: WideString read Get_accHelp;
property accHelpTopic[out pszHelpFile: WideString; varChild: OleVariant]: Integer read Get_accHelpTopic;
property accKeyboardShortcut[varChild: OleVariant]: WideString read Get_accKeyboardShortcut;
property accFocus: OleVariant read Get_accFocus;
property accSelection: OleVariant read Get_accSelection;
property accDefaultAction[varChild: OleVariant]: WideString read Get_accDefaultAction;
end;
IAccessibleDisp = dispinterface
['{618736E0-3C3D-11CF-810C-00AA00389B71}']
property accParent: IDispatch readonly dispid -5000;
property accChildCount: Integer readonly dispid -5001;
property accChild[varChild: OleVariant]: IDispatch readonly dispid -5002;
property accName[varChild: OleVariant]: WideString dispid -5003;
property accValue[varChild: OleVariant]: WideString dispid -5004;
property accDescription[varChild: OleVariant]: WideString readonly dispid -5005;
property accRole[varChild: OleVariant]: OleVariant readonly dispid -5006;
property accState[varChild: OleVariant]: OleVariant readonly dispid -5007;
property accHelp[varChild: OleVariant]: WideString readonly dispid -5008;
property accHelpTopic[out pszHelpFile: WideString; varChild: OleVariant]: Integer readonly dispid -5009;
property accKeyboardShortcut[varChild: OleVariant]: WideString readonly dispid -5010;
property accFocus: OleVariant readonly dispid -5011;
property accSelection: OleVariant readonly dispid -5012;
property accDefaultAction[varChild: OleVariant]: WideString readonly dispid -5013;
procedure accSelect(flagsSelect: Integer; varChild: OleVariant); dispid -5014;
procedure accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant); dispid -5015;
function accNavigate(navDir: Integer; varStart: OleVariant): OleVariant; dispid -5016;
function accHitTest(xLeft: Integer; yTop: Integer): OleVariant; dispid -5017;
procedure accDoDefaultAction(varChild: OleVariant); dispid -5018;
end;
function AccessibleObjectFromWindow(hwnd, dwObjectID: DWORD; const riid: TGUID; out ppvObject: IAccessible): HResult; stdcall;
function CoInitialize(lpReserved: Pointer): HResult; stdcall;
procedure CoUninitialize; stdcall;
implementation
function AccessibleObjectFromWindow; external oleacc name 'AccessibleObjectFromWindow';
function CoInitialize; external ole32 name 'CoInitialize';
procedure CoUninitialize; external ole32 name 'CoUninitialize';
end.
</PRE>
Bin für jeden Tip dankbar!
Gruss
Jan
möchte über das IAccessible-Interface auf Windows-Objekte zugreifen. Bekomme nun leider bei Aufruf einer entsprechenden Funktion den o.g. Fehler. Was mache ich falsch ?
Hier der Code von beiden Units:
<PRE>
UNIT 1:
program MSN6Reader;
uses
Windows, Accessibility_TLB, sndkey32, sysutils, classes, Comobj;
{$R *.res}
var
handle: HWND;
accParent: IAccessible;
procedure EnumerarControles(var accParent: IAccessible);
var
item, count: Integer;
oItem: OleVariant;
accChild: IAccessible;
Dispatcher: IDispatch;
begin
count := accParent.accChildCount;
for item := 1 to count do
begin
VarCast(oItem, item, varInteger);
// BEI FOLGENDER ZEILE ERSCHEINT DER FEHLER:
Dispatcher := accParent.accChild[oItem];
Dispatcher.QueryInterface(IID_IAccessible, accChild);
MessageBoxW(0, PWideChar(accChild.accValue[0]), PWideChar(accChild.accName[0]), 0);
EnumerarControles(accChild);
end;
end;
begin
CoInitialize(nil);
handle := FindWindow(nil,'Microsoft Word');
AccessibleObjectFromWindow(handle, 0, IID_IAccessible, accParent);
if accParent <> nil then
enumerarControles(accParent);
CoUninitialize;
end.
UNIT 2:
unit Accessibility_TLB;
interface
uses Windows;
const
IID_IAccessible: TGUID = '{618736E0-3C3D-11CF-810C-00AA00389B71}';
oleacc = 'oleacc.dll';
ole32 = 'ole32.dll';
type
IAccessible = interface(IDispatch)
['{618736E0-3C3D-11CF-810C-00AA00389B71}']
function Get_accParent: IDispatch; safecall;
function Get_accChildCount: Integer; safecall;
function Get_accChild(varChild: OleVariant): IDispatch; safecall;
function Get_accName(varChild: OleVariant): WideString; safecall;
function Get_accValue(varChild: OleVariant): WideString; safecall;
function Get_accDescription(varChild: OleVariant): WideString; safecall;
function Get_accRole(varChild: OleVariant): OleVariant; safecall;
function Get_accState(varChild: OleVariant): OleVariant; safecall;
function Get_accHelp(varChild: OleVariant): WideString; safecall;
function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant): Integer; safecall;
function Get_accKeyboardShortcut(varChild: OleVariant): WideString; safecall;
function Get_accFocus: OleVariant; safecall;
function Get_accSelection: OleVariant; safecall;
function Get_accDefaultAction(varChild: OleVariant): WideString; safecall;
procedure accSelect(flagsSelect: Integer; varChild: OleVariant); safecall;
procedure accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant); safecall;
function accNavigate(navDir: Integer; varStart: OleVariant): OleVariant; safecall;
function accHitTest(xLeft: Integer; yTop: Integer): OleVariant; safecall;
procedure accDoDefaultAction(varChild: OleVariant); safecall;
procedure Set_accName(varChild: OleVariant; const pszName: WideString); safecall;
procedure Set_accValue(varChild: OleVariant; const pszValue: WideString); safecall;
property accParent: IDispatch read Get_accParent;
property accChildCount: Integer read Get_accChildCount;
property accChild[varChild: OleVariant]: IDispatch read Get_accChild;
property accName[varChild: OleVariant]: WideString read Get_accName write Set_accName;
property accValue[varChild: OleVariant]: WideString read Get_accValue write Set_accValue;
property accDescription[varChild: OleVariant]: WideString read Get_accDescription;
property accRole[varChild: OleVariant]: OleVariant read Get_accRole;
property accState[varChild: OleVariant]: OleVariant read Get_accState;
property accHelp[varChild: OleVariant]: WideString read Get_accHelp;
property accHelpTopic[out pszHelpFile: WideString; varChild: OleVariant]: Integer read Get_accHelpTopic;
property accKeyboardShortcut[varChild: OleVariant]: WideString read Get_accKeyboardShortcut;
property accFocus: OleVariant read Get_accFocus;
property accSelection: OleVariant read Get_accSelection;
property accDefaultAction[varChild: OleVariant]: WideString read Get_accDefaultAction;
end;
IAccessibleDisp = dispinterface
['{618736E0-3C3D-11CF-810C-00AA00389B71}']
property accParent: IDispatch readonly dispid -5000;
property accChildCount: Integer readonly dispid -5001;
property accChild[varChild: OleVariant]: IDispatch readonly dispid -5002;
property accName[varChild: OleVariant]: WideString dispid -5003;
property accValue[varChild: OleVariant]: WideString dispid -5004;
property accDescription[varChild: OleVariant]: WideString readonly dispid -5005;
property accRole[varChild: OleVariant]: OleVariant readonly dispid -5006;
property accState[varChild: OleVariant]: OleVariant readonly dispid -5007;
property accHelp[varChild: OleVariant]: WideString readonly dispid -5008;
property accHelpTopic[out pszHelpFile: WideString; varChild: OleVariant]: Integer readonly dispid -5009;
property accKeyboardShortcut[varChild: OleVariant]: WideString readonly dispid -5010;
property accFocus: OleVariant readonly dispid -5011;
property accSelection: OleVariant readonly dispid -5012;
property accDefaultAction[varChild: OleVariant]: WideString readonly dispid -5013;
procedure accSelect(flagsSelect: Integer; varChild: OleVariant); dispid -5014;
procedure accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant); dispid -5015;
function accNavigate(navDir: Integer; varStart: OleVariant): OleVariant; dispid -5016;
function accHitTest(xLeft: Integer; yTop: Integer): OleVariant; dispid -5017;
procedure accDoDefaultAction(varChild: OleVariant); dispid -5018;
end;
function AccessibleObjectFromWindow(hwnd, dwObjectID: DWORD; const riid: TGUID; out ppvObject: IAccessible): HResult; stdcall;
function CoInitialize(lpReserved: Pointer): HResult; stdcall;
procedure CoUninitialize; stdcall;
implementation
function AccessibleObjectFromWindow; external oleacc name 'AccessibleObjectFromWindow';
function CoInitialize; external ole32 name 'CoInitialize';
procedure CoUninitialize; external ole32 name 'CoUninitialize';
end.
</PRE>
Bin für jeden Tip dankbar!
Gruss
Jan