繁体   English   中英

Java Access Bridge C#:只有 MouseClicked 事件触发?

[英]Java Access Bridge C#: Only MouseClicked event firing?

我一直在搞乱 Java Access Bridge 并设法使其大部分工作,除了一个例外:我只能在 Java Z05B8C74CBD96FBF2DE4C1A352702 中挂钩 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 window 收到鼠标点击时,处理它的代码也会触发 - 太棒了。 但是,当我尝试挂钩另一个事件时,我什么也得不到。 不管发生什么事件,我什么都没有收到。 这是一个例子:

[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 文档、源代码和示例,两者的调用约定和变量类型都是相同的。

我无法弄清楚任何事情,并且我尝试使用文档中提供的许多许多事件,但没有任何效果。 我已经束手无策了——即使是对正在发生的事情有一个大致的了解也会有所帮助。

注意:如果它是每种事件类型所需的特定方法,我希望使用的是 PropertyValueChangeFP、PropertySelectionChangeFP、PropertyTextChangeFP。

您是否将 function 指针设置为回调?

/* Setup */
private void InitAccessBridge()
{
    Windows_run();
    FocusGainedDelegate fgd= new FocusGainedDelegate(HandleFocusGained);
    /* right here */
    setFocusGainedFP(fgd);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM