Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用windows API获取当前鼠标光标类型?_Java_Windows_Api_Cursor - Fatal编程技术网

如何在java中使用windows API获取当前鼠标光标类型?

如何在java中使用windows API获取当前鼠标光标类型?,java,windows,api,cursor,Java,Windows,Api,Cursor,如何使用java中的windows API获取当前鼠标光标类型? (光标类型表示:指针、文本光标、忙碌光标和其他类别) 我找到了一个链接 其中api如下所示: BOOL WINAPI GetCursorInfo( __inout PCURSORINFO pci ); 但是如何在java中使用api,您可以使用JNA-java本机访问。它提供对本机库的访问,如windows中的DLL。 我认为你最接近的途径是: 在java应用程序中找到focusOwner组件 调用getCursor().

如何使用java中的windows API获取当前鼠标光标类型? (光标类型表示:指针、文本光标、忙碌光标和其他类别)

我找到了一个链接

其中api如下所示:

BOOL WINAPI GetCursorInfo(
  __inout  PCURSORINFO pci
);

但是如何在java中使用api,您可以使用JNA-java本机访问。它提供对本机库的访问,如windows中的DLL。

我认为你最接近的途径是:

  • 在java应用程序中找到focusOwner组件
  • 调用getCursor().getType()
    这对我在Win7上运行得很好。脚本是用Python编写的,但是应该很容易翻译成其他语言。当然,只有当相应的应用程序不使用自定义游标时,它才起作用:

    from win32con import IDC_APPSTARTING, IDC_ARROW, IDC_CROSS, IDC_HAND, \
        IDC_HELP, IDC_IBEAM, IDC_ICON, IDC_NO, IDC_SIZE, IDC_SIZEALL, \
        IDC_SIZENESW, IDC_SIZENS, IDC_SIZENWSE, IDC_SIZEWE, IDC_UPARROW, IDC_WAIT
    from win32gui import LoadCursor, GetCursorInfo
    
    def get_current_cursor():
        curr_cursor_handle = GetCursorInfo()[1]
        return Cursor.from_handle(curr_cursor_handle)
    
    class Cursor(object):
        @classmethod
        def from_handle(cls, handle):
            for cursor in DEFAULT_CURSORS:
                if cursor.handle == handle:
                    return cursor
            return cls(handle=handle)
        def __init__(self, cursor_type=None, handle=None):
            if handle is None:
                handle = LoadCursor(0, cursor_type)
            self.type = cursor_type
            self.handle = handle
    
    DEFAULT_CURSORS \
        = APPSTARTING, ARROW, CROSS, HAND, HELP, IBEAM, ICON, NO, SIZE, SIZEALL, \
          SIZENESW, SIZENS, SIZENWSE, SIZEWE, UPARROW, WAIT \
        = Cursor(IDC_APPSTARTING), Cursor(IDC_ARROW), Cursor(IDC_CROSS), \
          Cursor(IDC_HAND), Cursor(IDC_HELP), Cursor(IDC_IBEAM), Cursor(IDC_ICON), \
          Cursor(IDC_NO), Cursor(IDC_SIZE), Cursor(IDC_SIZEALL), \
          Cursor(IDC_SIZENESW), Cursor(IDC_SIZENS), Cursor(IDC_SIZENWSE), \
          Cursor(IDC_SIZEWE), Cursor(IDC_UPARROW), Cursor(IDC_WAIT)
    

    即使你让API工作,它也不会给你光标的类型,只会给你它的图片。您必须将其与所有标准游标HCURSOR进行比较,并希望应用程序没有使用自定义游标。