рдирдорд╕реНрдХрд╛рд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛, рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдмреАрдПрд╕рдбреА рдФрд░ рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ рдХреЗ рддрд╣рдд рдЬрд╛рд╡рд╛ рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рдЙрддреНрдХреГрд╖реНрдЯ
рдЬреЗрдПрдирдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
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 рд╕реЗ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- RegisterHotKey - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реЙрдЯрдХреА рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ - рд╣рдорд╛рд░реЗ рд╣реЙрдЯрдХреА рдХреА рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдЦреНрдпрд╛, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рд╣реЙрдЯрдХреА рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ UnregisterHotKey рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред FsModifiers рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рд╕рдВрд╢реЛрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (ctrl, shift, alt рдпрд╛ win)ред Vk рдореЗрдВ рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, AWT рдореЗрдВ KeyEvent рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрдб рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ:
// рд╕рдВрдпреЛрдЬрди рдЬреАрдд + рдПрдл рд░рдЬрд┐рд╕реНрдЯрд░
RegisterHotKey ( рд╢реВрдиреНрдп , 1 , 0x8, KeyEvent ред VK_F ) ;
- PeekMessage - рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ MSG рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз PeekMessage рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╡рд░реБрджреНрдз GetMessage рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
MSG рд╕рдВрджреЗрд╢ = рдирдпрд╛ MSG ( ) ;
рдЬрдмрдХрд┐ ( рд╕реБрдиреЛ ) {
рдЬрдмрдХрд┐ ( PeekMessage ( рд╕рдВрджреЗрд╢, рдЕрд╢рдХреНрдд , 0 , 0 , PM_REMOVE ) ) {
рдЕрдЧрд░ ( рд╕рдВрджреЗрд╢ред == WM_HOTKEY ) {
рдкреНрд░рдгрд╛рд▓реАред рдмрд╛рд╣рд░ ред Println ( "Yattaaaaред Hotkey with id" + msgред wParam ) ;
}
}
рдереНрд░реЗрдбред рдиреАрдВрдж ( 300 ) ;
}
рдпрд╣рд╛рдВ рд╣рдо рдЬреАрдд + рдПрдл рд╕рдВрдпреЛрдЬрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ 300 рдПрдордПрд╕ рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
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 ; // рд╡рд╣реА рд╕реНрдХреНрд░реАрди рдлреНрд▓реИрдЧ
}
}
- XOpenDisplay, XCloseDisplay, XDefaultRootWindow - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рд╕реНрдкреНрд▓реЗ рдФрд░ рд░реВрдЯ рд╡рд┐рдВрдбреЛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдмрдВрдж рдХрд░реЗрдВред
- XKeysymToKeycode - рдПрдХ рд╡рд░реНрдг рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╡рд░реНрдгреЛрдВ рдХреЗ рд╡рд░реНрдгрдиреЛрдВ рдХреЛ рдХреАрдмреЛрд░реНрдб рдХреЛрдб рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
// рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдг рд╕рдВрдЦреНрдпрд╛ KeyEvent рдореЗрдВ рдореВрд▓реНрдп рд╕реЗ рднреА рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
рдмрд╛рдЗрдЯ рдХреЛрдб = XKeysymToKeycode ( рдкреНрд░рджрд░реНрд╢рди, KeyEvent ред VK_F ) ;
- XGrabKey, XUngrabKey - рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рд╣реЙрдЯрдХреАрдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдХреЛрдб рдореЗрдВ, рдпрд╣рд╛рдБ XKeysymToKeycode рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрд╢реЛрдзрдХ рд╕рдВрд╢реЛрдзрдХ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЬрдбрд╝ рдореЗрдВ XDefaultRootWindow рд╕реЗ рдорд╛рди рд╣реИред рд╢реЗрд╖ рдорд╛рди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рднрд░рд╛ рд╣реБрдЖ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ X11 рдореЗрдВ, рджрдмрд╛рдП рдЧрдП рд╕реНрдХреНрд░реЙрд▓рд▓реЙрдХ, рдиреНрдпреВрдореЙрдХ, рдХреИрдкреНрд╕рд▓реЙрдХ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд▓реЙрдХ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╣реЙрдЯрдХреА рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП 16 рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
// рдпрд╣ рд╣реИрдХ рдбреЗрдбрдмреАрдл рдкреНрд▓реЗрдпрд░ рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рд╣реЙрдЯрдХреА рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХреЗ рд▓рд┐рдП ( рдЭрдВрдбреЗ = 0 ; рдЭрдВрдбреЗ < 16 ; рдореИрдВ ++ ) {
int ret = рд╕рдВрд╢реЛрдзрдХ ;
рдЕрдЧрд░ ( рдЭрдВрдбреЗ рдФрд░ 1 ) ! = 0 )
рд░рд┐рдЯ ; = рд▓реЙрдХрдорд╛рд╕реНрдХ ;
рдЕрдЧрд░ ( рдЭрдВрдбреЗ рдФрд░ 2 ) ! = 0 )
рд░рд┐рдЯ ред = Mod2Mask ;
рдЕрдЧрд░ ( рдЭрдВрдбреЗ рдФрд░ 4 ) ! = 0 )
рд░рд┐рдЯ ред = Mod3Mask ;
рдЕрдЧрд░ ( рдЭрдВрдбреЗ рдФрд░ 8 ) ! = 0 )
рд░рд┐рдЯ ред = Mod5Mask ;
XGrabKey ( рдкреНрд░рджрд░реНрд╢рди, рдХреЛрдб, рд░рд┐рдЯ, рд░реВрдЯ, 1 , GrabModeAsync, GrabModeAsync ) ;
// XUngrabKey (рдкреНрд░рджрд░реНрд╢рди, рдХреЛрдб, рд░рд┐рдЯ, рд░реВрдЯ);
}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╣реЙрдЯрдХреА рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк XUngrabKey рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХреНрд╕ рдЗрд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рддрдХ рд░рдЦреЗрдЧрд╛ред
- XPending рдФрд░ XNextEvent - рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
рдЬрдмрдХрд┐ ( рд╕реБрдирдХрд░ ) {
рдЬрдмрдХрд┐ ( Libред XPending ( рдкреНрд░рджрд░реНрд╢рди ) > 0 ) {
рд▓рд┐рдмред XNextEvent ( рдкреНрд░рджрд░реНрд╢рди, рдШрдЯрдирд╛ ) ;
рдЕрдЧрд░ ( рдШрдЯрдирд╛ред рдЯрд╛рдЗрдк == рдХреА- рд╡рд░реНрдб ) {
// рдпреВрдирд┐рдпрди рдПрдХреНрд╕рдИрд╡реЗрдВрдЯ рд╕реЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкрдврд╝реЗрдВ
// JNA рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдШ рдХреЛ рдХреМрди рд╕рд╛ рдХреНрд╖реЗрддреНрд░ рднрд░рдирд╛ рд╣реИ,
// рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЧрд┐рдирдирд╛ рд╣реИред
XKeyEvent xkey = ( XKeyEvent ) рдШрдЯрдирд╛ред readField ( "xkey" ) ;
// рд╕реНрдкрд╖реНрдЯ рдХрдЪрд░рд╛ рд╕рдВрд╢реЛрдзрдХ
int state = xkeyред рд╕реНрдерд┐рддрд┐ & ( ShiftMask | ControlMask | Mod1Mask | Mod4Mask )
рдкреНрд░рдгрд╛рд▓реАред рдмрд╛рд╣рд░ ред Println ( "Yattaaaa, hotkey with code:" + xkeyред keycode + "рдФрд░ рд╕рдВрд╢реЛрдзрдХ:" + рд░рд╛рдЬреНрдп ) ;
}
}
рдереНрд░реЗрдбред рдиреАрдВрдж ( 300 ) ;
}
рдореИрдХ 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 рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЙрд▓рдмреИрдХ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯ рдХреЙрд▓рдмреИрдХ ( рдкреЙрдЗрдВрдЯрд░ рдЗрдирд╣реИрдВрдбрд▓рд░рдХреИрд▓рд░рд┐рдл, рдкреЙрдЗрдВрдЯрд░ рдЗрдирд╡реЗрдВрдЯ, рдкреЙрдЗрдВрдЯрд░ рдЗрдирдпреВрд╕реЗрд░рд╛рдЯрд╛рдЯрд╛ ) ;
}
}
- GetEventDispatcherTarget - рд╕рд┐рд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- InstallEventHandler - рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЗрд╕ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд╛рд░реНрдмрди рдореЗрдВ рдШрдЯрдирд╛рдПрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЖрддреА рд╣реИрдВ:
EventHandlerReference = new PointerByReference ( ) ;
// рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реА рд╣реИрдВрдбрд▓рд░ рд╣реИ
keyListener = рдирдпрд╛ рдЗрд╡реЗрдВрдЯрд╣реИрдВрдбрд▓рд░ ( ) ;
// рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрдирдП рдЬрд╛рджреВ
EventTypeSpec [ ] EventTypes = ( EventTypeSpec [ ] ) ( рдирдпрд╛ EventTypeSpec ( ) ред ToArray ( 1 ) ) ;
EventTypes [рдХреЛ реж ] ред EventClass = kEventClassKeyboard ;
EventTypes [рдХреЛ реж ] ред EventKind = kEventHotKeyPressed ;
int status = рд▓рд┐рдмред InstallEventHandler ( Libред GetEventDispatcherTarget ( ) , рдХреАрд▓рд┐рд╕реНрдЯрдирд░, 1 , рдИрд╡реЗрдВрдЯрдЯрд╛рдЗрдкреНрд╕, рдЕрд╢рдХреНрдд , рдИрд╡реЗрдВрдЯрд╣реИрдВрдбрд▓рд░ рд╕рдВрджрд░реНрдн ) ;
рдпрд╣рд╛рдВ рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреАрдмреЛрд░реНрдб рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдЧрд░реНрдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдПрдВрдЧреЗред
EventHandlerReference рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╕рдВрджрд░реНрдн рдмреИрдХ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ RemoveEventHandler рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдирд┐рдЬреА рд╡рд░реНрдЧ EventHandler рдХрд╛рд░реНрдмрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ ред EventHandlerProcPtr {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int рдХреЙрд▓рдмреИрдХ ( рд╕реВрдЪрдХ inHandlerCallRef, рд╕реВрдЪрдХ рд╕реВрдЪрдХ, рд╕реВрдЪрдХ рд╕реВрдЪрдХ inserserata ) {
EventHotKeyID eventHotKeyID = рдирдпрд╛ EventHotKeyID ( ) ;
// рдЗрд╡реЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
int ret = рд▓рд┐рдмред GetEventParameter ( InEvent, kEventParamDirectObject, typeEventHotKeyID, null , eventHotKeyIDред size ( ) , null , eventHotKeyID ) ;
рдЕрдЧрд░ ( рд░рд┐рдЯ ! = 0 ) {
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рдЪреЗрддрд╛рд╡рдиреА ( "рдЗрд╡реЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред рддреНрд░реБрдЯрд┐ рдХреЛрдб:" + ret ) ;
} {
// рдпрд╣рд╛рдВ рдЗрд╡реЗрдВрдЯ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ
int eventId = eventHotKeyIDред рдЖрдИрдбреА ;
рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ред рдЬрд╛рдирдХрд╛рд░реА ( "рдкреНрд░рд╛рдкреНрдд рдИрд╡реЗрдВрдЯ рдЖрдИрдбреА:" + eventId ) ;
}
рд╡рд╛рдкрд╕реА 0 ;
}
}
- RegisterEventHotKey - рдПрдХ рд╣реЙрдЯрдХреА рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдЗрдирдкреБрдЯ рдХреБрдВрдЬреА рдХреЛрдб рд╣реИред рдХреЛрдб рдЯреЗрдмрд▓ рдпрд╣рд╛рдБ рд╣реИ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╢реЛрдзрдХ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдлрд┐рд░ EventHotKeyID.ByValue рд╕рдВрд░рдЪрдирд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЪрд╛рд░-рдЕрдХреНрд╖рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдВрдХрд┐рдд рд╣реИрдВред ByValue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╣реЙрдЯрдХреА рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ UnregisterEventHotKey рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
EventHotKeyIDред ByValue hotKeyReference = рдирдпрд╛ EventHotKeyIDред рдмрд╛рдпрд╡реИрд▓реБ ( ) ;
hotKeyReferenceред рдЖрдИрдбреА = 1 ;
hotKeyReferenceред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ = OS_TYPE ( "hk01" ) ;
PointerByReference gMyHotKeyRef = рдирдпрд╛ PointerByReference ( ) ;
int status = рд▓рд┐рдмред RegisterEventHotKey ( рдХреЛрдб, рд╕рдВрд╢реЛрдзрдХ, hotKeyReference, Libред GetEventDispatcherTarget ( ) , 0 , gMyHotKeyRef ) ;
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдЬреИрд╕реЗ рдХрд┐ FreeBSD рдкрд░ рдбрд╛рдпрд░реЗрдХреНрдЯ рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрд░реИрд╢, JNA рдиреЗ XGrabKey рдореЗрдВ рдмреВрд▓рд┐рдпрди рдХреЛ рдореИрдк рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдФрд░ рдХрд╛рд░реНрдмрди рдореЗрдВ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, X11 рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдпрджрд┐ рд╣реЙрдЯрдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реА рдЧрдИ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд╛рдЯ рджреЗрддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдмрди рдкрд░ рдХрд┐рд╕реА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИред
рдЗрд╕ рд╕рднреА рдХреЛрдб рдХреЛ LGPL 3 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд
jkeymaster рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Swing рд╕реЗ KeyStroke рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ X11 рдХреЗ рд▓рд┐рдП рдЖрдк рдореАрдбрд┐рдпрд╛ рдмрдЯрди - рдкреНрд▓реЗ / рдкреЙрдЬрд╝, рд╕реНрдЯреЙрдк, рдиреЗрдХреНрд╕реНрдЯ рдЯреНрд░реИрдХ, рдкрд┐рдЫрд▓рд╛ рдЯреНрд░реИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд░рд┐рдорд╛рд░реНрдХреНрд╕ рдФрд░ рдкреИрдЪ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
ps рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ
tulskiy рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ
рдорд╛рд░реНрдЧрд░рд┐рди рдХреА рдмрджреМрд▓рдд рдЕрдм рд╣рдм рдкрд░ рд╣реИ рддреЛ рд╕рднреА рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рд╕ред