私はJava Access Bridgeを使いこなしていましたが、1つの例外を除いてほとんどの機能が動作するようになっています.MouseClickedイベントはJavaウィンドウ内にのみフックできます。Java Access Bridge C#:MouseClickedイベントの起動のみですか?
このコード:問題なし
[DllImport("WindowsAccessBridge.dll", CallingConvention = CallingConvention.Cdecl)]
private extern static void setMouseClickedFP(MouseClickedDelegate fp);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void MouseClickedDelegate(System.Int32 vmID, IntPtr jevent, IntPtr ac);
static MouseClickedDelegate mcd;
mcd = new MouseClickedDelegate(HandleMouseClicked);
static void HandleMouseClicked(System.Int32 vmID, IntPtr jevent, IntPtr ac)
{
getVersionInfo(vmID, out vi);
releaseJavaObject(vmID, ac);
releaseJavaObject(vmID, jevent);
}
作品。 JavaウィンドウがMouseClickを受け取るたびに、それを処理するコードがトリガされます。しかし、別のイベントを試してみると、何も得られません。イベントが何であれ、私は何も受け取っていない。ここでは例です:
[DllImport("WindowsAccessBridge.dll", CallingConvention = CallingConvention.Cdecl)]
private extern static void setFocusGainedFP(FocusGainedDelegate fp);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void FocusGainedDelegate(System.Int32 vmID, IntPtr jevent, IntPtr ac);
static FocusGainedDelegate fgd;
fgd = new FocusGainedDelegate(HandleFocusGained);
static void HandleFocusGained(System.Int32 vmID, IntPtr jevent, IntPtr ac)
{
AccessibleContextInfo aci = new AccessibleContextInfo();
getAccessibleContextInfo(vmID, ac, out aci);
}
上記のコードは、Oracleのドキュメント、ソース、および例によると、呼び出し規約と変数の型が両方で同じであっても、トリガされません。
私は何かを理解することができませんでした。私はdocumentationで提供されたイベントの多くを使用しようとしましたが、何も動作していません。私は私の知恵の終わりにいます - 何が起きているのかという一般的な考えでさえ助けになります。
NB:それぞれのイベントタイプに必要な特定のメソッドの場合、私が使用しようとしているメソッドはPropertyValueChangeFP、PropertySelectionChangeFP、PropertyTextChangeFPです。
はい、ありました。何らかの理由で私が使っていたプログラムが、これらの出来事を奇妙な時期にしか発射しないことが実際に判明しました。たとえば、AccessibleTextChangedは、ユーザーが300ms程度入力を停止した場合にのみ発生します。ご協力いただきありがとうございます。最新のJava Access Bridge関連の頭痛に関する最新の質問をご覧ください: - P – HeWhoWas