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
デイレクトリにあります。