2
我一直在討論Java Access Bridge,並設法使其大部分工作,只有一個例外:我只能在Java窗口中掛鉤MouseClicked事件。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中提供的許多事件,但沒有任何工作。我在智慧的結局 - 即使是一個普遍的想法,對發生的事情會有所幫助。
注意:如果它是每種事件類型所需的特定方法,那麼我正在使用的方法是PropertyValueChangeFP,PropertySelectionChangeFP,PropertyTextChangeFP。
是的,我是。事實上,出於某種原因,我使用的程序只會在奇怪的時間觸發這些事件。例如,僅當用戶停止輸入300毫秒左右時,纔會觸發AccessibleTextChanged。感謝您的幫助,並查看我最新的問題,以瞭解我最新的Java Access Bridge相關的頭痛問題:-P – HeWhoWas