【问题标题】:Java Access Bridge C#: Only MouseClicked event firing?Java Access Bridge C#:仅触发 MouseClicked 事件?
【发布时间】:2011-09-27 14:20:19
【问题描述】:

我一直在搞乱 Java Access Bridge 并设法让它大部分工作,但有一个例外:我只能在 Java 窗口中挂钩 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。

【问题讨论】:

    标签: java c# events java-access-bridge


    【解决方案1】:

    你是否将函数指针设置为回调?

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

    【讨论】:

    • 是的,我是。事实证明,由于某种原因,我使用的程序只会在奇怪的时间触发这些事件。例如,只有当用户停止输入 300 毫秒左右时,AccessibleTextChanged 才会触发。感谢您的帮助,请参阅我最新的 Java Access Bridge 相关问题的最新问题:-P
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2015-10-30
    • 2011-10-22
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多