Java Accessibilityガイド> ユーザー補助テクノロジ開発者向けJava Access Bridgeプログラマーズ・ガイド> Java Access Bridge API
Java Access Bridge APIを使用すると、Javaアプリケーションで機能する、Microsoft Windowsオペレーティング・システム向けユーザー補助テクノロジ・アプリケーションを開発できます。これには、JavaアプリケーションのGUI要素についての情報(Java Access Bridge経由でユーザー補助テクノロジ・アプリケーションに転送される)を表示および操作できるネイティブ・メソッドが含まれています。
次の項目について説明します。
Java Access Bridge APIは、AccessBridgeCalls.h
、AccessBridgePackages.h
、およびAccessBridgeCallbacks.h
の3つのファイルにあります。これらのファイルは、Java Access Bridge API呼び出し、APIデータ構造、およびAPIコールバックにそれぞれ対応しています。
Java Access Bridge 2.0.2には、64ビット・システムをサポートするために新しいAPIセットが含まれます。ただし、APIの変更はAPI呼出しに渡されるパラメータのみで、APIの名前は変更されていません。
ユーザー補助テクノロジのアプリケーションは、ソースで提供されている新しいヘッダー・ファイルで再コンパイルする必要があります。
jobject
型のオブジェクトはjlong
として渡されるようになりました。typedef JOBJECT64
は、ACCESSBRIDGE_ARCH_LEGACY
が定義されているかどうかに応じてjobject
またはjlong
のいずれかになります。AccessBridgePackages.h
ヘッダー・ファイルを参照してください。
使用例については、JavaFerret.cpp
の例を参照してください。
void HandlePropertyChildChange( long vmID, PropertyChangeEvent event, AccessibleContext ac, JOBJECT64 oldChild, JOBJECT64 newChild); void HandlePropertyActiveDescendentChange( long vmID, PropertyChangeEvent event, AccessibleContext ac, JOBJECT64 oldActiveDescendent, JOBJECT64 newActiveDescendent);
Java Access Bridge API呼出しはAccessBridgeCalls.h
に含まれていて、これらを使用するには使用しているアプリケーションとWindowsAccessBridge.dll
との間のインタフェースとして機能するファイルAccessBridgeCalls.c
もコンパイルする必要があります。
これらの2つの関数はJava Access Bridgeを起動してシャットダウンします。
BOOL
initializeAccessBridge
();
Java Access Bridgeを起動します。この関数を呼び出すまではJava Access Bridge APIのいずれの部分も使用できません。
BOOL
shutdownAccessBridge
();
Java Access Bridgeをシャットダウンします。アプリケーションがJava Access Bridgeの使用を終了するときは、(アプリケーションが存在する前に)この関数を呼び出してJava Access Bridgeが正しくメモリー・クリーンアップを実行できるようにすることが重要です。
注: 関数shutdownAccessBridge
を呼び出すことは、JVMによって保持されているデータ構造を解放することの代わりにはならないため、関数ReleaseJavaObject
を呼び出すことでこれを行なってください。
通常はこれらの関数を呼び出してから、その他のJava Access Bridge API関数を呼び出します。
BOOL
IsJavaWindow
(HWND window);
指定されたウィンドウがJava Accessibility APIを実装しているかどうかを確認します。
BOOL
GetAccessibleContextFromHWND
(HWND target, long *vmID, AccessibleContext *ac);
指定されたウィンドウのAccessibleContext
およびvmID
値を取得します。多くのJava Access Bridge関数にはAccessibleContext
およびvmID
値が必要です。
これらは、イベント・タイプを処理する関数への関数ポインタを取ります。これらのタイプのイベントを受け取る必要がなくなった場合、関数を再度呼び出してNULL
値を渡します。ファイルAccessBridgeCallbacks.h
内で、これらの関数に渡す必要がある関数ポインタのプロトタイプを探します。これらのプロトタイプの詳細は、セクション「APIコールバック」を参照してください。
void
SetFocusGained
(AccessBridge_FocusGainedFP fp);
void
SetFocusLost
(AccessBridge_FocusLostFP fp);
使用可能な機能を判別するために、GetVersionInfo
呼び出しからバージョン情報を取得できます。
void
ReleaseJavaObject
(long vmID, Java_Object object);
Javaオブジェクトobject
によって使用されるメモリーを解放します(object
はJava Access Bridgeによって返されるオブジェクト)。Java Access BridgeはJVM内で返されるすべてのJavaオブジェクトへの参照を自動的に保持するため、それらはガベージ・コレクトされません。メモリー・リークを防ぐには、Java Access Bridgeによって返されたすべてのJavaオブジェクトの使用が終了したら、それらに対してReleaseJavaObject
を呼び出す必要があります。これの実行例については、JavaFerret.c
を参照してください。
BOOL
GetVersionInfo
(long vmID, AccessBridgeVersionInfo *info);
アプリケーションが使用しているJava Access Bridgeインスタンスのインスタンス・バージョン情報を取得します。この情報を使用して、Java Access Bridgeのバージョンの利用できる機能を判別できます。
注: JVMのバージョンを判別するには有効なvmID
を渡す必要があります。そうでない場合は返されるものはすべて、アプリケーションが接続されているWindowsAccessBridge.DLL
ファイルのバージョンです。
これらの関数は、Java Access Bridgeにより公開されるJava Accessibility APIのコア部分を提供します。
関数GetAccessibleContextAt
およびGetAccessibleContextWithFocus
は、AccessibleContext
オブジェクト(Accessible
オブジェクトへのマジック・クッキー(実際にはJava Object
参照)とJVMクッキー)を取得します。これらの2つのクッキーを使用して、Java Access Bridge経由でオブジェクトを参照します。ほとんどのJava Access Bridge API関数には、これら2つのパラメータを渡す必要があります。
注: AccessibleContext
オブジェクトは64ビット・プロセス間通信(ファイル名に-32
および-64
が付いたDLLおよびJARファイルを使用)での64ビット参照、AccessibleContext
オブジェクトは32ビット・プロセス間通信(ファイル名に-32
および-64
が付いていないDLLおよびJARファイルを使用)での32ビット参照です。したがって、64ビット・プロセス間通信を使用している場合は、ユーザー補助テクノロジ・アプリケーションを再コンパイルする必要があります。
関数GetAccessibleContextInfo
は、JVMに属するAccessibleContext
オブジェクトの詳細情報を返します。パフォーマンスを向上させるために、Java Accessibility APIのさまざまな異なるメソッドが集められてJava Access Bridge APIのいくつかのルーチンにまとめられ、struct
値で返されます。これらのstruct
値はファイルAccessBridgePackages.h
で定義されており、セクション「APIコールバック」で説明されています。
関数GetAccessibleChildFromContext
およびGetAccessibleParentFromContext
を使用すると、GUIコンポーネント階層をウォークして、特定のGUIオブジェクトのn番目の子(または親)を取得できます。
BOOL
GetAccessibleContextAt
(long vmID, AccessibleContext acParent, jint x, jint y, AccessibleContext *ac)
マウス・ポインタの下にあるウィンドウまたはオブジェクトのAccessibleContext
オブジェクトを取得します。
BOOL
GetAccessibleContextWithFocus
(HWND window, long *vmID, AccessibleContext *ac);
フォーカスを持つウィンドウまたはオブジェクトのAccessibleContext
オブジェクトを取得します。
BOOL
GetAccessibleContextInfo
(long vmID, AccessibleContext ac, AccessibleContextInfo *info);
AccessibleContext
オブジェクトac
のAccessibleContextInfo
オブジェクトを取得します。
AccessibleContext
GetAccessibleChildFromContext
(long vmID, AccessibleContext ac, jint index);
オブジェクトac
のn番目の子を表すAccessibleContext
オブジェクトを返します(nは値index
で指定される)。
AccessibleContext
GetAccessibleParentFromContext
(long vmID, AccessibleContext ac);
オブジェクトac
の親を表すAccessibleContext
オブジェクトを返します。
これらの関数は、Java Accessibility APIによって提供されるAccessibleText
情報を取得します(効率化のために7つのチャンクに分割されます)。AccessibleContextInfo
データ構造内のaccessibleText
フラグがTRUE
に設定されている場合、AccessibleContext
内にAccessibleText
情報が含まれます。これらの関数で使用されるstruct
値はファイルAccessBridgePackages.h
で定義されており、セクション「APIコールバック」で説明されています。
BOOL
GetAccessibleTextInfo
(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y);
BOOL
GetAccessibleTextItems
(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index);
BOOL
GetAccessibleTextSelectionInfo
(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection);
char *
GetAccessibleTextAttributes
(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes);
BOOL
GetAccessibleTextRect
(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index);
BOOL
GetAccessibleTextRange
(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len);
BOOL
GetAccessibleTextLineBounds
(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex);
これらの関数は、Java Accessibility APIによって提供されるAccessibleValue
情報を取得します。AccessibleContextInfo
データ構造内のaccessibleValue
フラグがTRUE
に設定されている場合、AccessibleContext
オブジェクト内にAccessibleValue
情報が含まれます。返される値は文字列(char *value
)です(値が、Java言語構造体java.lang.Number
をサブクラス化する整数、浮動小数点値、またはほかのオブジェクトであるかどうかを事前に判別できないため)。
BOOL
GetCurrentAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_t *value, short len);
BOOL
GetMaximumAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_ *value, short len);
BOOL
GetMinimumAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_ *value, short len);
これらの関数は、Java Accessibility APIによって提供されるAccessibleSelection
情報を取得および操作します。AccessibleContextInfo
データ構造内のaccessibleSelection
フラグがTRUE
に設定されている場合、AccessibleContext
内にAccessibleSelection
情報が含まれます。AccessibleSelection
サポートは、照会時とは異なり、選択に対して項目を追加および削除することでユーザー・インタフェースを操作できる最初の場所です。一部の関数は子座標にあるインデックスを使用し、その他は選択座標を使用します。たとえば、子インデックスを渡すことにより、選択に対する追加または削除を行います(たとえば、4番目の子を選択に追加するなど)。一方、選択された子の列挙は選択座標内で行われます(たとえば、選択された最初のオブジェクトのAccessibleContext
を取得するなど)。
void
AddAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
void
ClearAccessibleSelectionFromContext
(long vmID, AccessibleSelection as);
jobject
GetAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
int
GetAccessibleSelectionCountFromContext
(long vmID, AccessibleSelection as);
BOOL
IsAccessibleChildSelectedFromContext
(long vmID, AccessibleSelection as, int i);
void
RemoveAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
void
SelectAllAccessibleSelectionFromContext
(long vmID, AccessibleSelection as);
Java Access Bridge APIデータ構造はファイルAccessBridgePackages.h
に含まれています。このファイルには必要がない(および無視できる)データ構造があります。これらは2つのJava Access Bridge DLLのプロセス間通信メカニズムの一部として使用されます。重要なデータ構造は次のとおりです。
#define MAX_STRING_SIZE 1024 #define SHORT_STRING_SIZE 256 struct AccessBridgeVersionInfo { wchar_t VMversion[SHORT_STRING_SIZE]; // version of the Java VM wchar_t bridgeJavaClassVersion[SHORT_STRING_SIZE]; // version of the // AccessBridge.class wchar_t bridgeJavaDLLVersion[SHORT_STRING_SIZE]; // version of // JavaAccessBridge.dll wchar_t bridgeWinDLLVersion[SHORT_STRING_SIZE]; // version of // WindowsAccessBridge.dll }; struct AccessibleContextInfo { wchar_ name[MAX_STRING_SIZE]; // the AccessibleName of the object wchar_ description[MAX_STRING_SIZE]; // the AccessibleDescription of the object wchar_ role[SHORT_STRING_SIZE]; // localized AccesibleRole string wchar_ states[SHORT_STRING_SIZE]; // localized AccesibleStateSet string // (comma separated) jint indexInParent // index of object in parent jint childrenCount // # of children, if any jint x; // screen x-axis co-ordinate in pixels jint y; // screen y-axis co-ordinate in pixels jint width; // pixel width of object jint height; // pixel height of object BOOL accessibleComponent; // flags for various additional BOOL accessibleAction; // Java Accessibility interfaces BOOL accessibleSelection; // FALSE if this object doesn't BOOL accessibleText; // implement the additional interface BOOL accessibleInterfaces; // new bitfield containing additional // interface flags }; struct AccessibleTextInfo { jint charCount; // # of characters in this text object jint caretIndex; // index of caret jint indexAtPoint; // index at the passsed in point }; struct AccessibleTextItemsInfo { wchar_t letter; wchar_t word[SHORT_STRING_SIZE]; wchar_t sentence[MAX_STRING_SIZE]; }; struct AccessibleTextSelectionInfo { jint selectionStartIndex; jint selectionEndIndex; wchar_t selectedText[MAX_STRING_SIZE]; }; struct AccessibleTextRectInfo { jint x; // bounding recttangle of char at index, x-axis co-ordinate jint y; // y-axis co-ordinate jint width; // bounding rectangle width jint height; // bounding rectangle height }; struct AccessibleTextAttributesInfo { BOOL bold; BOOL italic; BOOL underline; BOOL strikethrough; BOOL superscript; BOOL subscript; wchar_t backgroundColor[SHORT_STRING_SIZE]; wchar_t foregroundColor[SHORT_STRING_SIZE]; wchar_t fontFamily[SHORT_STRING_SIZE]; jint fontSize; jint alignment; jint bidiLevel; jfloat firstLineIndent; jfloat leftIndent; jfloat rightIndent; jfloat lineSpacing; jfloat spaceAbove; jfloat spaceBelow; wchar_t fullAttributesString[MAX_STRING_SIZE]; };
Java Access Bridge APIコールバックはファイルAccessBridgeCallbacks.h
に含まれています。イベント処理関数はこれらのプロトタイプに一致する必要があります。
注: すべてのJava Access Bridgeイベント・ハンドラは、Java Ferretの例で定義および使用されています。
これらのイベント・ハンドラの使用が終了したら、イベント・ハンドラにより返されたすべてのJOBJECT64
に対して関数ReleaseJavaObject
を呼び出し、JVMのメモリー・リークを防ぐ必要があります。
ここで、JOBJECT64
は64ビット・システムではjlong
、レガシー・バージョンのJava Access Bridgeではjobject
として定義されています。定義については、AccessBridgePackages.h
ヘッダー・ファイルのセクションACCESSBRIDGE_ARCH_LEGACY
を参照してください。
レガシーAPIを使用する場合は、ACCESSBRIDGE_ARCH_LEGACY
を定義してください。AccessBridgePackages.h
ヘッダー・ファイルを参照してください。
typedef void (*
AccessBridge_FocusGainedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_FocusLostFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_CaretUpdateFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseClickedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseEnteredFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseExitedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MousePressedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseReleasedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuCanceledFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuDeselectedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuSelectedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuCanceledFP
) (long vmID JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuWillBecomeInvisibleFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuWillBecomeVisibleFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyNameChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldName, wchar_t *newName);
typedef void (*
AccessBridge_PropertyDescriptionChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldDescription, wchar_t *newDescription);
typedef void (*
AccessBridge_PropertyStateChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldState, wchar_t *newState);
typedef void (*
AccessBridge_PropertyValueChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldValue, wchar_t *newValue);
typedef void (*
AccessBridge_PropertySelectionChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyTextChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyCaretChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, int oldPosition, int newPosition);
typedef void (*
AccessBridge_PropertyVisibleDataChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyChildChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, JOBJECT64 oldChild, JOBJECT64 newChild);
typedef void (*
AccessBridge_PropertyActiveDescendentChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, JOBJECT64 oldActiveDescendent, JOBJECT64 newActiveDescendent);