5 Java Access Bridge API
Java Access Bridge APIを使用すると、Javaアプリケーションで機能する、Microsoft Windowsオペレーティング・システム向けユーザー補助テクノロジ・アプリケーションを開発できます。これには、JavaアプリケーションのGUI要素についての情報(Java Access Bridge経由でユーザー補助テクノロジ・アプリケーションに転送される)を表示および操作できるネイティブ・メソッドが含まれています。
Java Access Bridge APIファイル
Java Access Bridge APIは、AccessBridgeCalls.hおよびAccessBridgeCalls.c (APIコール)、AccessBridgePackages.h (データ構造)およびAccessBridgeCallbacks.h (コールバック)の4つのファイルにあります。
                  
Java Access Bridge APIファイルの場所
次のJava Access Bridge API include (ヘッダー)ファイルを%JAVA_HOME%\include\win32\bridgeで探します。
                     
- 
                           
AccessBridgeCallbacks.h - 
                           
AccessBridgeCalls.h - 
                           
AccessBridgePackages.h 
いくつかの主要なインタフェースを定義するファイルAccessBridgeCalls.cをJDKのソース・コード・リポジトリで探します。
                     
Java Access Bridge APIコール
ファイルAccessBridgeCalls.hには、Java Access Bridge APIコールが含まれています。これらを使用するには、ファイルAccessBridgeCalls.cをコンパイルします。Java Access Bridge APIコールは、ユーザーのアプリケーションとWindowsAccessBridge.dllの間のインタフェースとして機能します。
                  
初期化/シャットダウン関数
これらの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内で、これらの関数に渡す必要がある関数ポインタのプロトタイプを探します。Java Access Bridge APIコールバックでは、これらのプロトタイプを説明します。
                  全般関数
void ReleaseJavaObject(long vmID, Java_Object object);Javaオブジェクト
objectによって使用されるメモリーを解放します(objectはJava Access Bridgeによって返されるオブジェクト)。Java Access BridgeはJVM内で返されるすべてのJavaオブジェクトへの参照を自動的に保持するため、それらはガベージ・コレクトされません。メモリー・リークを防ぐには、Java Access Bridgeによって返されたすべてのJavaオブジェクトの使用が終了した後、それらに対してReleaseJavaObjectを呼び出します。BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info);アプリケーションが使用しているJava Access Bridgeインスタンスのインスタンス・バージョン情報を取得します。この情報を使用して、Java Access Bridgeのバージョンの利用できる機能を判別できます。
ノート:
JVMのバージョンを判別するには、有効なvmIDを渡す必要があります。そうでない場合は返されるものはすべて、アプリケーションが接続されているWindowsAccessBridge.DLLファイルのバージョンです。
Accessibleコンテキスト関数
これらの関数は、Java Access Bridgeにより公開されるJava Accessibility APIのコア部分を提供します。
関数GetAccessibleContextAtおよびGetAccessibleContextWithFocusは、AccessibleContextオブジェクト(Accessibleオブジェクトへのマジック・クッキー(Java Object参照)とJVMクッキー)を取得します。これらの2つのクッキーを使用して、Java Access Bridge経由でオブジェクトを参照します。ほとんどのJava Access Bridge API関数には、これら2つのパラメータを渡す必要があります。
                     
ノート:
AccessibleContextオブジェクトは、64ビット・プロセス間通信(windowsaccessbridge-64.dllファイルを使用)の下での64ビット参照です。ただし、JDK 9より前では、AccessibleContextオブジェクトは、32ビット・プロセス間通信(ファイル名に-32または-64がないwindowsaccessbridge.dllファイルを使用)の下での32ビット参照です。したがって、使用しているユーザー補助テクノロジ・アプリケーションを64ビットのWindowsシステム上で実行するように変換する場合は、ユーザー補助テクノロジ・アプリケーションを再コンパイルする必要があります。
                     関数GetAccessibleContextInfoは、JVMに属するAccessibleContextオブジェクトの詳細情報を返します。パフォーマンスを向上させるために、Java Accessibility APIのさまざまな異なるメソッドが集められてJava Access Bridge APIのいくつかのルーチンにまとめられ、struct値で返されます。ファイルAccessBridgePackages.hが、これらのstruct値を定義しており、Java Access Bridge 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オブジェクトを返します。HWND getHWNDFromAccessibleContext(long vmID, AccessibleContext ac);HWNDをトップ・レベルのウィンドウのAccessibleContextから返します。
Accessibleテキスト関数
これらの関数は、Java Accessibility APIによって提供されるAccessibleText情報を取得します(効率化のために7つのチャンクに分割されます)。AccessibleContextInfoデータ構造内のフラグaccessibleTextをTRUEに設定した場合、AccessibleContext内にAccessibleText情報が含まれます。ファイルAccessBridgePackages.hが、これらの関数で使用されるstruct値を定義しており、Java Access Bridge 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);
その他のテキスト関数
BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext, const int startIndex, const int endIndex);2つのインデックス間のテキストを選択します。選択には、先頭のインデックスのテキストと末尾のインデックスのテキストを含みます。正常終了かどうかを返します。
BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext, const int startIndex, const int endIndex, AccessibleTextAttributesInfo *attributes, short *len);2つのインデックス間のテキスト属性を取得します。属性リストには、先頭のインデックスのテキストと末尾のインデックスのテキストを含みます。正常終了かどうかを返します。
BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext, const int position);キャレットをテキストの位置に設定します。正常終了かどうかを返します。
BOOL getCaretLocation(long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index);テキスト・キャレットの位置を取得します。
BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text);編集可能なテキストの内容を設定します。AccessibleContextは、AccessibleEditableTextを実装し、編集できる必要があります。設定できる最大テキスト長は
MAX_STRING_SIZE - 1です。正常終了かどうかを返します。
Accessible表関数
BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo);表に関する情報、たとえば、キャプション、要約、行数および列数、およびAccessibleTableを返します。
BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable, jint row, jint column, AccessibleTableCellInfo *tableCellInfo);指定された表セルに関する情報を返します。行および列指定子はゼロベースです。
BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo);指定された表の表の行ヘッダーを表として返します。
BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo);指定された表の表の列ヘッダーを表として返します。
AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row);指定された表の指定された行の説明を返します。行指定子はゼロベースです。
AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column);指定された表の指定された列の説明を返します。列指定子はゼロベースです。
jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table);表の選択された行数を返します。
BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row);指定されたゼロ・ベースの行が選択されている場合にtrueを返します。
BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections);選択された行のゼロ・ベースのインデックスの配列を返します。
jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table);表の選択された列数を返します。
BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column);指定されたゼロ・ベースの列が選択されている場合にtrueを返します。
BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections);選択された列のゼロ・ベースのインデックスの配列を返します。
jint getAccessibleTableRow(long vmID, AccessibleTable table, jint index);指定したセル・インデックスでのセルの行番号を返します。値はゼロ・ベースです。
jint getAccessibleTableColumn(long vmID, AccessibleTable table, jint index);指定したセル・インデックスでのセルの列番号を返します。値はゼロ・ベースです。
jint getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column);指定した行および列オフセットの表のインデックスを返します。値はゼロ・ベースです。
Accessible関連セット関数
BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext, AccessibleRelationSetInfo *relationSetInfo);オブジェクトの関連オブジェクトに関する情報を返します。
Accessibleハイパーテキスト関数
BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext, AccessibleHypertextInfo *hypertextInfo);コンポーネントに関連付けられたハイパーテキスト情報を返します。
BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext, AccessibleHyperlink accessibleHyperlink);ハイパーテキストのアクティブ化をリクエストします。
jint getAccessibleHyperlinkCount(const long vmID, const AccessibleHypertext hypertext);コンポーネントのハイパーリンク数を返します。AccessibleHypertext.getLinkCountにマップします。エラー時に-1を返します。
BOOL getAccessibleHypertextExt(const long vmID, const AccessibleContext accessibleContext, const jint nStartIndex, AccessibleHypertextInfo *hypertextInfo);コンポーネントのハイパーリンクを繰り返します。ハイパーリンク・インデックスnStartIndexから始まるコンポーネントのハイパーテキスト情報を返します。このメソッドへの各コールに対してMAX_HYPERLINKS次のAccessibleHypertextInfoオブジェクトが返されます。エラー時にFALSEを返します。
jint getAccessibleHypertextLinkIndex(const long vmID, const AccessibleHypertext hypertext, const jint nIndex);ドキュメントの文字インデックスに関連付けられたハイパーリンクの配列へのインデックスを返します。AccessibleHypertext.getLinkIndexにマップします。エラー時に-1を返します。
BOOL getAccessibleHyperlink(const long vmID, const AccessibleHypertext hypertext, const jint nIndex, AccessibleHypertextInfo *hyperlinkInfo);ドキュメントのn番目のハイパーリンクを返します。AccessibleHypertext.getLinkにマップします。エラー時にFALSEを返します。
Accessibleキー・バインディング関数
BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext, AccessibleKeyBindings *keyBindings);コンポーネントに関連付けられたキー・バインデイングのリストを返します。
Accessibleアイコン関数
BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext, AccessibleIcons *icons);コンポーネントに関連付けられたアイコンのリストを返します。
Accessibleアクション関数
BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, AccessibleActions *actions);コンポーネントが実行できるアクションのリストを返します。
BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext, AccessibleActionsToDo *actionsToDo, jint *failure);AccessibleActionsのリストがコンポーネントによって実行されるようリクエストします。すべてのアクションが実行された場合にTRUEを返します。最初にリクエストしたアクションが失敗した場合にFALSEを返します。この場合、"failure"に失敗したアクションのインデックスが含まれます。
ユーティリティ関数
BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2);2つのオブジェクト参照が同じオブジェクトを参照するかどうかを返します。
AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);指定されたオブジェクトの祖先である指定のロールを持つAccessibleContextを返します。このロールはJava Access Bridge APIデータ構造で定義されたロール文字列の1つです。指定のロールを持つ祖先オブジェクトがない場合は、(AccessibleContext)0を返します。
AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);指定されたオブジェクトの祖先である指定のロールを持つAccessibleContextを返します。このロールはJava Access Bridge APIデータ構造で定義されたロール文字列の1つです。指定のロールを持つオブジェクトが存在しない場合、Javaウィンドウのトップ・レベルのオブジェクトを返します。エラー時に(AccessibleContext)0を返します。
AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext);Javaウィンドウのトップ・レベルのオブジェクトに対するAccessibleContextを返します。これは、そのウィンドウに対するGetAccessibleContextFromHWNDから取得される同じAccessibleContextです。エラー時に(AccessibleContext)0を返します。
int getObjectDepth (const long vmID, const AccessibleContext accessibleContext);指定されたオブジェクトの、オブジェクト階層での深さを返します。オブジェクト階層の最上位のオブジェクトのオブジェクト深さは0です。エラー時に-1を返します。
AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext);オブジェクトの現在のActiveDescendentのAccessibleContextを返します。このメソッドは、ActiveDescendentがコンテナ・オブジェクトで現在選択されているコンポーネントであると仮定しています。エラー時または選択がない場合に(AccessibleContext)0を返します。
BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext);コンポーネントのフォーカスをリクエストします。正常終了かどうかを返します。
int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext);コンポーネントの可視の子ノードの数を返します。エラー時に-1を返します。
BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext, const int startIndex, VisibleChildrenInfo *visibleChildrenInfo);AccessibleContextの可視の子を取得します。正常終了かどうかを返します。
int getEventsWaiting();起動を待機しているイベントの数を取得します。
Accessible値関数
これらの関数は、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);
Accessible選択関数
これらの関数は、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データ構造
Java Access Bridge APIデータ構造はファイルAccessBridgePackages.hに含まれています。
                  
重要なデータ構造
このファイルには必要がない(および無視できる)データ構造があります。これらは2つのJava Access Bridge DLLのプロセス間通信メカニズムの一部として使用されます。重要なデータ構造は次のとおりです。
#define MAX_STRING_SIZE     1024
#define SHORT_STRING_SIZE    256
typedef struct AccessibleContextInfoTag {
  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
} AccessibleContextInfo;
 
typedef struct AccessibleTextInfoTag {
  jint charCount;       // # of characters in this text object
  jint caretIndex;      // index of caret
  jint indexAtPoint;    // index at the passsed in point
} AccessibleTextInfo;
typedef struct AccessibleTextItemsInfoTag {
  wchar_t letter;
  wchar_t word[SHORT_STRING_SIZE];
  wchar_t sentence[MAX_STRING_SIZE];
} AccessibleTextItemsInfo;
 
typedef struct AccessibleTextSelectionInfoTag {
  jint selectionStartIndex;
  jint selectionEndIndex;
  wchar_t selectedText[MAX_STRING_SIZE];
} AccessibleTextSelectionInfo;
 
typedef struct AccessibleTextRectInfoTag  {
  jint x;          // bounding rectangle of char at index, x-axis co-ordinate
  jint y;          // y-axis co-ordinate
  jint width;      // bounding rectangle width
  jint height;     // bounding rectangle height
} AccessibleTextRectInfo;
 
typedef struct AccessibleTextAttributesInfoTag {
  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];
} AccessibleTextAttributesInfo;
typedef struct AccessibleTableInfoTag  {
  JOBJECT64 caption;  // AccesibleContext
  JOBJECT64 summary;  // AccessibleContext
  jint rowCount;
  jint columnCount;
  JOBJECT64 accessibleContext;
  JOBJECT64 accessibleTable;
} AccessibleTableInfo;
typedef struct AccessibleTableCellInfoTag  {
  JOBJECT64  accessibleContext;
  jint       index;
  jint       row;
  jint       column;
  jint       rowExtent;
  jint       columnExtent;
  jboolean   isSelected;
} AccessibleTableCellInfo;
typedef struct AccessibleRelationSetInfoTag {
  jint relationCount;
  AccessibleRelationInfo relations[MAX_RELATIONS];
} AccessibleRelationSetInfo;
typedef struct AccessibleRelationInfoTag {
  wchar_t key[SHORT_STRING_SIZE];
  jint targetCount;
  JOBJECT64 targets[MAX_RELATION_TARGETS];  // AccessibleContexts
} AccessibleRelationInfo;
typedef struct AccessibleHypertextInfoTag {
  jint linkCount;                                 // number of hyperlinks
  AccessibleHyperlinkInfo links[MAX_HYPERLINKS];  // the hyperlinks
  JOBJECT64 accessibleHypertext;                  // AccessibleHypertext object
} AccessibleHypertextInfo;
typedef struct AccessibleHyperlinkInfoTag {
  wchar_t text[SHORT_STRING_SIZE]; // the hyperlink text
  jint startIndex;                 // index in the hypertext document where the link begins
  jint endIndex;                   // index in the hypertext document where the link ends
  JOBJECT64 accessibleHyperlink;   // AccessibleHyperlink object
} AccessibleHyperlinkInfo;
typedef struct AccessibleKeyBindingsTag {
  int keyBindingsCount; // number of key bindings
  AccessibleKeyBindingInfo keyBindingInfo[MAX_KEY_BINDINGS];
} AccessibleKeyBindings;
typedef struct AccessibleKeyBindingInfoTag {
  jchar character; // the key character
  jint modifiers;  // the key modifiers
} AccessibleKeyBindingInfo;
typedef struct  AccessibleIconsTag {
  jint iconsCount;                            // number of icons
  AccessibleIconInfo iconInfo[MAX_ICON_INFO]; // the icons
} AccessibleIcons;
typedef struct AccessibleIconInfoTag {
  wchar_t description[SHORT_STRING_SIZE]; // icon description
  jint height;                            // icon height
  jint width;                             // icon width
} AccessibleIconInfo;
typedef struct AccessibleActionsTag {
  jint actionsCount;                                // number of actions
  AccessibleActionInfo actionInfo[MAX_ACTION_INFO]; // the action information
} AccessibleActions;
typedef struct AccessibleActionInfoTag {
  wchar_t name[SHORT_STRING_SIZE]; // action name
} AccessibleActionInfo;
typedef struct AccessibleActionsToDoTag {
  jint actionsCount;                               // number of actions to do
  AccessibleActionInfo actions[MAX_ACTIONS_TO_DO]; // the accessible actions to do
} AccessibleActionsToDo;
typedef struct VisibleChildenInfoTag {
  int returnedChildrenCount;                        // number of children returned
  AccessibleContext children[MAX_VISIBLE_CHILDREN]; // the visible children
} VisibleChildenInfo;
Java Access Bridge APIコールバック
Java Access Bridge APIコールバックはファイルAccessBridgeCallbacks.hに含まれています。イベント処理関数はこれらのプロトタイプに一致する必要があります。 
                  
これらのイベント・ハンドラの使用が終了したら、イベント・ハンドラにより返されたすべてのJOBJECT64に対して関数ReleaseJavaObjectを呼び出し、JVMのメモリー・リークを防ぐ必要があります。
                     
レガシーAPIを使用する場合は、ACCESSBRIDGE_ARCH_LEGACYを定義してください。
                     
JOBJECT64は、64ビット・システムではjlong、レガシー・バージョンのJava Access Bridgeではjobjectとして定義されています。定義については、AccessBridgePackages.hヘッダー・ファイルのセクションACCESSBRIDGE_ARCH_LEGACYを参照してください。
                     
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);
Java Access Bridgeのトラブルシューティング
このトピックでは、Java Access Bridge用ユーザー補助テクノロジ・アプリケーション開発者向けに、既知の問題点および使用上のヒントについて説明します。
既知の問題点
メニュー・イベントを再登録すると重複コピーが生成される: メニュー・イベントを登録して登録解除してから再登録すると、Java Access Bridgeはメニュー・イベントの重複コピーを生成します。
メニューが閉じられたときにMenuDeselectedイベントが生成される: MenuCanceled (またはPopupMenuCanceled)イベントを受信しません。メニューが閉じていることを確認するには、MenuDeselectedイベントを調べてください。
                     
使用上のヒント
メニュー項目の選択の変更の判断: StateのPropertyChangeイベントを使用して、メニュー項目選択の変更を判断します(たとえば、ユーザーが矢印ボタンまたはキーを使用してメニュー内で上下に移動したとき)。
                     
GUI要素の追跡: AccessibleValueサポートとValueのPropertyChangeイベントを使用して、GUI要素(スライダやスクロール・バーなど)の値を追跡します。
                     
選択項目の判断: AccessibleSelectionサポートを使用して、リストや表などの項目が含まれているコンテナで選択されている項目を判断します。これは、すべての子要素を列挙し、StateSet属性を検査し、Selected値がそれらの中にあるかどうか確認するよりも効率的です。
                     
Java Access Bridgeテスト・ツール: Java Access Bridgeテスト・ツールjaccessinspectorおよびjaccesswalkerは、Java binデイレクトリにあります。