JNA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

рдирдорд╕реНрдХрд╛рд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛, рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдмреАрдПрд╕рдбреА рдФрд░ рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ рдХреЗ рддрд╣рдд рдЬрд╛рд╡рд╛ рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рдЬреЗрдПрдирдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

JNA рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?


рдЬрд╛рд╡рд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЙрдЯрдХреАрдЬрд╝ рд╣реИ, рдЬреЛ рдСрдбрд┐рдпреЛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдЬрдм рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рд░рд╛рдЬреНрдп рдореЗрдВ рднреА рдХреБрдЫ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдпрд╛ рдореАрдбрд┐рдпрд╛ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЗрдПрдирдП рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдиреА рдФрд░ рд▓рд┐рдмрдлреА рдкрд░ рдПрдХ рдРрдб, рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рд╣реИред

рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ: рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП JIntelliType , рдЬреЛ рдореАрдбрд┐рдпрд╛ рдмрдЯрди, рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП JXGrabKey рдФрд░ рдореИрдХ OSX рдХреЗ рд▓рд┐рдП ossuport- рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рд╕рднреА рдЬреЗрдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬреЗрдиреА рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреНрд╖рдорддрд╛ рдЖрджрд┐ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛, рдкреНрд▓рд╕, рдпрд╣ рд╢рд╛рд╣реА рд╕реЗрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрднреНрдпрд╛рд╕ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдВрдбреЛрдЬ


рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЙрдЯрдХреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ User32 {
рд╕реНрдерд┐рд░ {
рдореВрд▓ рдирд┐рд╡рд╛рд╕реАред рд░рдЬрд┐рд╕реНрдЯрд░ ( NativeLibraryред getInstance ( "user32" , W32APIOptionsред DEFAULT_OPTIONS ) ) ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int MOD_ALT = 0x0001 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int MOD_CONTROL = 0x0002 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int MOD_SHIFT = 0x0004 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int MOD_WIN = 0x0008 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдЗрдВрдЯ WM_HOTKEY = 0x0312 ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рджреЗрд╢реА рдмреВрд▓рд┐рдпрди рд░рдЬрд┐рд╕реНрдЯрд░рд╣реЙрдЯрдХреЗ ( рдкреЙрдЗрдВрдЯрд░ hWnd, int id, int fsModifiers, intk pk ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рджреЗрд╢реА рдмреВрд▓рд┐рдпрди UnregisterHotKey ( рдкреЙрдЗрдВрдЯрд░ hWnd, рдЗрдВрдЯ рдЖрдИрдбреА ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рджреЗрд╢реА рдмреВрд▓рд┐рдпрди PeekMessage ( MSG lpMsg, Pointer hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ MSG рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪрдХ hWnd ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рд╕рдВрджреЗрд╢ ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int wParam ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int lParam ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдЯрд╛рдЗрдо ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int x ;
рдкрдмреНрд▓рд┐рдХ рдЗрдВрдЯ рд╡рд╛рдИ ;
}
}


рдпрд╣рд╛рдВ рд╣рдо рддрдерд╛рдХрдерд┐рдд рдбрд╛рдпрд░реЗрдХреНрдЯ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдпрд╣ рддреЗрдЬ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реНрдереИрддрд┐рдХ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрд╢реА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ User32 рд╕реЗ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

X11


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк X11 рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ FreeBSD рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░рдг рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ X11 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлреИрд▓реА {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ X11 Lib = ( X11 ) рдореВрд▓ ред loadLibrary ( "X11" , X11ред рд╡рд░реНрдЧ ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int GrabModeAsync = 1 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int KeyPress = 2 ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int ShiftMask = ( 1 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int LockMask = ( 1 << 1 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int ControlMask = ( 1 << 2 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int Mod1Mask = ( 1 << 3 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int Mod2Mask = ( 1 << 4 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int Mod3Mask = ( 1 << 5 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int Mod4Mask = ( 1 << 6 ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int Mod5Mask = ( 1 << 7 ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪрдХ XOpenDisplay ( рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong XDefaultRootWindow ( рд╕реВрдЪрдХ рдкреНрд░рджрд░реНрд╢рди ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмрд╛рдЗрдЯ XKeysymToKeycode ( рдкреЙрдЗрдВрдЯрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ, рд▓реЙрдиреНрдЧ рдХреАрд╕рдо ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int XGrabKey ( рдкреЙрдЗрдВрдЯрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ, int code, int modifiers, NativeLong root, int ownerEvents, int pointerMode, int keyBoardMode ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int XUngrabKey ( рдкреЙрдЗрдВрдЯрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ, рдЗрдВрдЯ рдХреЛрдб, рдЗрдВрдЯ рд╕рдВрд╢реЛрдзрдХ, рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд░реВрдЯ ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int XNextEvent ( рд╕реВрдЪрдХ рдкреНрд░рджрд░реНрд╢рди, XEvent рдШрдЯрдирд╛ ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int XPending ( рдкреЙрдЗрдВрдЯрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int XCloseDisplay ( рд╕реВрдЪрдХ рдкреНрд░рджрд░реНрд╢рди ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ XEvent рд╕рдВрдШ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ XKeyEvent xkey ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong [ ] рдкреИрдб = рдирдпрд╛ NativeLong [ 24 ] ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ XKeyEvent рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ ; // рдШрдЯрдирд╛ рдХреА
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ ; // # рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдХрд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int send_event ; // рд╕рдЪ рд╣реИ рдЕрдЧрд░ рдпрд╣ SendEvent рдЕрдиреБрд░реЛрдз рд╕реЗ рдЖрдпрд╛ рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪрдХ рдкреНрд░рджрд░реНрд╢рди ; // рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдШрдЯрдирд╛ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong рд╡рд┐рдВрдбреЛ ; // "рдШрдЯрдирд╛" рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреА рдЬрд╛рддреА рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong рдЬрдбрд╝ ; // рд░реВрдЯ рд╡рд┐рдВрдбреЛ рдЬрд┐рд╕ рдкрд░ рдИрд╡реЗрдВрдЯ рд╣реБрдЖ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдиреЗрдЯрд┐рд╡реНрд▓реЙрдиреНрдЧ рд╕рдмрд╡рд┐рдВрдбреЛ ; // рдмрдЪреНрдЪреЗ рдХреА рдЦрд┐рдбрд╝рдХреА
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NativeLong рд╕рдордп ; // рдорд┐рд▓реАрд╕реЗрдХрдВрдб
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int x, y ; // рдкреЙрдЗрдВрдЯрд░ x, y рдИрд╡реЗрдВрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int x_root, y_root ; // рд░реВрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рд░рд╛рдЬреНрдп ; // рдХреБрдВрдЬреА рдпрд╛ рдмрдЯрди рдореБрдЦреМрдЯрд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдХреАрдХреЛрдб ; // рд╡рд┐рд╕реНрддрд╛рд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int same_screen ; // рд╡рд╣реА рд╕реНрдХреНрд░реАрди рдлреНрд▓реИрдЧ
}
}


рдореИрдХ OSX


рдореИрдХ OSX рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдЖрдзрд╛рд░ рдСрд╕реНрдЯреНрд░реБрдкреЛрд░реНрдЯ-рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд▓реЗрдЦрдХ рдЯреЙрд░реНрд╕реНрдЯрди рдЙрд╣рд▓реНрдорди рдХрд╛ рдХрд╛рдо рдерд╛:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдмрди рдлреИрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдХрд╛рд░реНрдмрди Lib = ( рдХрд╛рд░реНрдмрди ) рдореВрд▓ ред loadLibrary ( "рдХрд╛рд░реНрдмрди" , рдХрд╛рд░реНрдмрдиред рд╡рд░реНрдЧ ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЕрдВрддрд┐рдо int cmdKey = 0x0100 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int рд╢рд┐рдлреНрдЯ = 0x0200 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int рд╡рд┐рдХрд▓реНрдк ey = 0x0800 ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int controlKey = 0x1000 ;

// OS_TYPE рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ рдХреЛ рдЗрдВрдЯреЗрдВрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int kEventClassKeyboard = OS_TYPE ( " рдХреАрдм " ) ;
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдЗрдВрдЯ рдЯрд╛рдЗрдк EventHotKeyID = OS_TYPE ( "hkid" ) ;
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо int kEventParamDirectObject = OS_TYPE ( "----" ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪрдХ GetEventDispatcherTarget ( ) ;

public int InstallEventHandler ( Pointer inTarget, EventHandlerProcPtr inHandler, int inNumTypes, EventTypeSpec [ ] inList, Pointer inUserData, PointerByReference outRef ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int RegisterEventHotKey ( int inHotKeyCode, int inHotKeyModifiers, EventHotKeyID; ByValue inHotKeyID, рд╕реВрдЪрдХ inTarget, int inOptions, PointerByReference outRef ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int GetEventParameter ( Pointer invent, int inName, int inDesiredType, Pointer outActualType, int inBufferSize, IntBuffer outActualSize, EventHotKeyID outData ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int RemoveEventHandler ( рд╕реВрдЪрдХ inHandlerRef ) ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int UnregisterEventHotKey ( рд╕реВрдЪрдХ inHotKey ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ EventTypeSpec рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдЗрд╡реЗрдВрдЯрдХреНрд▓рд╛рд╕ ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int рдЗрд╡реЗрдВрдЯрдХрд╛рдЗрдВрдб ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ EventHotKeyID рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдЖрдИрдбреА ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ ByValue EventHotKeyID рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рд╕рдВрд░рдЪрдирд╛ред рдмрд╛рдпрд╡реИрд▓реВ {
}
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ EventHandlerProcPtr рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЙрд▓рдмреИрдХ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдХреЙрд▓рдмреИрдХ ( рдкреЙрдЗрдВрдЯрд░ рдЗрдирд╣реИрдВрдбрд▓рд░рдХреИрд▓рд░рд┐рдл, рдкреЙрдЗрдВрдЯрд░ рдЗрдирд╡реЗрдВрдЯ, рдкреЙрдЗрдВрдЯрд░ рдЗрдирдпреВрд╕реЗрд░рд╛рдЯрд╛рдЯрд╛ ) ;
}
}



рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдЬреИрд╕реЗ рдХрд┐ FreeBSD рдкрд░ рдбрд╛рдпрд░реЗрдХреНрдЯ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрд░реИрд╢, JNA рдиреЗ XGrabKey рдореЗрдВ рдмреВрд▓рд┐рдпрди рдХреЛ рдореИрдк рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдФрд░ рдХрд╛рд░реНрдмрди рдореЗрдВ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, X11 рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдпрджрд┐ рд╣реЙрдЯрдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реА рдЧрдИ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд╛рдЯ рджреЗрддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдмрди рдкрд░ рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рд╕рднреА рдХреЛрдб рдХреЛ LGPL 3 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд jkeymaster рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Swing рд╕реЗ KeyStroke рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ X11 рдХреЗ рд▓рд┐рдП рдЖрдк рдореАрдбрд┐рдпрд╛ рдмрдЯрди - рдкреНрд▓реЗ / рдкреЙрдЬрд╝, рд╕реНрдЯреЙрдк, рдиреЗрдХреНрд╕реНрдЯ рдЯреНрд░реИрдХ, рдкрд┐рдЫрд▓рд╛ рдЯреНрд░реИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд┐рдорд╛рд░реНрдХреНрд╕ рдФрд░ рдкреИрдЪ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

ps рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ tulskiy рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ рдорд╛рд░реНрдЧрд░рд┐рди рдХреА рдмрджреМрд▓рдд рдЕрдм рд╣рдм рдкрд░ рд╣реИ рддреЛ рд╕рднреА рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рд╕ред

Source: https://habr.com/ru/post/In124567/


All Articles