#ifndef __KEYBOARD_H #define __KEYBOARD_H #include #include #include #ifdef WIN32 #define MAX_KEY 256 #else #define MAX_KEY 65536 #endif class ifc_window; class AccSec { public: AccSec(const wchar_t *pname, ifc_window *pwnd, int pglobal=0) : name(pname), wnd(pwnd), global(pglobal) { } StringW name; ifc_window *wnd; int global; }; #include class AccSecViewer : public DependentViewerTPtr { public: void viewItem(ifc_window *i) { viewer_addViewItem(i); } virtual int viewer_onItemDeleted(ifc_window *item); }; class Keyboard { public: static int onForwardOnChar(ifc_window *from, unsigned int c, int kd); static int onForwardOnKeyDown(ifc_window *from, int k, int kd, int nomsg=0); static int onForwardOnKeyUp(ifc_window *from, int k, int kd); static int onForwardOnSysKeyDown(ifc_window *from, int k, int kd); static int onForwardOnSysKeyUp(ifc_window *from, int k, int kd); static int onForwardOnKillFocus(); static int interceptOnChar(unsigned int c); static int interceptOnKeyDown(int k); static int interceptOnKeyUp(int k); static int interceptOnSysKeyDown(int k, int kd); static int interceptOnSysKeyUp(int k, int kd); static void hookKeyboard(ifc_window *hooker); static void unhookKeyboard(ifc_window *hooker); static void reset(); static void registerAcceleratorSection(const wchar_t *name, ifc_window *wnd, int pglobal); static PtrList accSecEntries; private: static int forwardKbdMessage(ifc_window *from, int msg, int wp, int lp); static wchar_t *getVkName(int vkey); static void syncKeyTable(); // special keys typedef struct { int vk; wchar_t *trans; } vkEntry; static vkEntry vkEntries[]; static wchar_t pressedKeys[MAX_KEY]; static AccSecViewer viewer; static PtrList hookers; static int infw; static int lastwasreset; }; #endif