Java Access Bridge API

Java Accessibilityガイド> ユーザー補助テクノロジ開発者向けJava Access Bridgeプログラマーズ・ガイド> Java Access Bridge API

Java Access Bridge APIを使用すると、Javaアプリケーションで機能する、Microsoft Windowsオペレーティング・システム向けユーザー補助テクノロジ・アプリケーションを開発できます。これには、JavaアプリケーションのGUI要素についての情報(Java Access Bridge経由でユーザー補助テクノロジ・アプリケーションに転送される)を表示および操作できるネイティブ・メソッドが含まれています。

次の項目について説明します。

APIファイル

Java Access Bridge APIは、AccessBridgeCalls.hAccessBridgePackages.h、およびAccessBridgeCallbacks.hの3つのファイルにあります。これらのファイルは、Java Access Bridge API呼び出し、APIデータ構造、およびAPIコールバックにそれぞれ対応しています。

2.0.1からの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);

API呼出し

Java Access Bridge API呼出しはAccessBridgeCalls.hに含まれていて、これらを使用するには使用しているアプリケーションとWindowsAccessBridge.dllとの間のインタフェースとして機能するファイルAccessBridgeCalls.cもコンパイルする必要があります。

初期化/シャットダウン関数

これらの2つの関数はJava Access Bridgeを起動してシャットダウンします。

ゲートウェイ関数

通常はこれらの関数を呼び出してから、その他のJava Access Bridge API関数を呼び出します。

イベント処理関数

これらは、イベント・タイプを処理する関数への関数ポインタを取ります。これらのタイプのイベントを受け取る必要がなくなった場合、関数を再度呼び出してNULL値を渡します。ファイルAccessBridgeCallbacks.h内で、これらの関数に渡す必要がある関数ポインタのプロトタイプを探します。これらのプロトタイプの詳細は、セクション「APIコールバック」を参照してください。

全般関数

使用可能な機能を判別するために、GetVersionInfo呼び出しからバージョン情報を取得できます。

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ビット・プロセス間通信(ファイル名に-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番目の子(または親)を取得できます。

Accessibleテキスト関数

これらの関数は、Java Accessibility APIによって提供されるAccessibleText情報を取得します(効率化のために7つのチャンクに分割されます)。AccessibleContextInfoデータ構造内のaccessibleTextフラグがTRUEに設定されている場合、AccessibleContext内にAccessibleText情報が含まれます。これらの関数で使用されるstruct値はファイルAccessBridgePackages.hで定義されており、セクション「APIコールバック」で説明されています。

Accessible値関数

これらの関数は、Java Accessibility APIによって提供されるAccessibleValue情報を取得します。AccessibleContextInfoデータ構造内のaccessibleValueフラグがTRUEに設定されている場合、AccessibleContextオブジェクト内にAccessibleValue情報が含まれます。返される値は文字列(char *value)です(値が、Java言語構造体java.lang.Numberをサブクラス化する整数、浮動小数点値、またはほかのオブジェクトであるかどうかを事前に判別できないため)。

Accessible選択関数

これらの関数は、Java Accessibility APIによって提供されるAccessibleSelection情報を取得および操作します。AccessibleContextInfoデータ構造内のaccessibleSelectionフラグがTRUEに設定されている場合、AccessibleContext内にAccessibleSelection情報が含まれます。AccessibleSelectionサポートは、照会時とは異なり、選択に対して項目を追加および削除することでユーザー・インタフェースを操作できる最初の場所です。一部の関数は子座標にあるインデックスを使用し、その他は選択座標を使用します。たとえば、子インデックスを渡すことにより、選択に対する追加または削除を行います(たとえば、4番目の子を選択に追加するなど)。一方、選択された子の列挙は選択座標内で行われます(たとえば、選択された最初のオブジェクトのAccessibleContextを取得するなど)。

APIデータ構造

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];
};

APIコールバック

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ヘッダー・ファイルを参照してください。


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.