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 の例で定義および使用されています。

これらのイベントハンドラの使用が終了したら、イベントハンドラにより返されたすべての jobject に対して関数 ReleaseJavaObject を呼び出し、JVM のメモリーリークを防ぐ必要があります。

ここで、JOBJECT64 は 64 ビットシステムでは jlong、レガシーバージョンの Java Access Bridge では jobject として定義されています。定義については、AccessBridgePackages.h ヘッダーファイルのセクション ACCESSBRIDGE_ARCH_LEGACY を参照してください。

レガシー API を使用する場合は、ACCESSBRIDGE_ARCH_LEGACY を定義してください。AccessBridgePackages.h ヘッダーファイルを参照してください。


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