1

Java で Windows API を使用して現在のマウス カーソルの種類を取得するにはどうすればよいですか? (カーソルの種類とは、ポインター、テキスト カーソル、ビジー カーソル、その他のカテゴリを意味します)

私はここにリンクを見つけました

APIは次のように指定されます

BOOL WINAPI GetCursorInfo(
  __inout  PCURSORINFO pci
);

しかし、JavaでAPIを使用する方法

4

3 に答える 3

2

最も近いのは次のとおりだと思います:

  1. focusOwner である Java アプリ内のコンポーネントを見つけます
  2. getCursor().getType(); を呼び出します。
于 2012-04-23T17:14:35.480 に答える
0

これは、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)
于 2013-04-11T11:12:54.700 に答える
0

JNA - Java ネイティブ アクセスを使用できます。Windows の DLL などのネイティブ ライブラリへのアクセスを提供します。 https://github.com/twall/jna#readme

于 2012-04-23T17:13:52.310 に答える