#pragma once\r
#endif // _MSC_VER > 1000\r
\r
+#include <list>\r
#include "ClipboardSnap.h"\r
\r
-enum { MAX_APP = 64 };\r
-enum { NONE = 0x0, SHIFT = 0x1, CONTROL = 0x2, META = 0x4, CONTROLX = 0x8,\r
- MAX_COMMAND_TYPE = NONE + SHIFT + CONTROL + META + CONTROLX + 1 };\r
-enum { /* WIN_SHIFT = 0x100, */ WIN_CTRL = 0x200, WIN_ALT = 0x400, WIN_WIN = 0x800 };\r
-enum { MAX_KEY = 256 };\r
-enum { MAX_FUNCTION = 64 };\r
-enum { MAX_DEFINITION = 256 };\r
+const int MAX_APP = 64;\r
+const int NONE = 0x0, SHIFT = 0x1, CONTROL = 0x2, META = 0x4, CONTROLX = 0x8,\r
+ MAX_COMMAND_TYPE = NONE + SHIFT + CONTROL + META + CONTROLX + 1;\r
+const int /* WIN_SHIFT = 0x100, */ WIN_CTRL = 0x200, WIN_ALT = 0x400, WIN_WIN = 0x800;\r
+const int MAX_KEY = 256;\r
+const int MAX_FUNCTION = 64;\r
+const int MAX_DEFINITION = 256;\r
\r
-enum { WINDOW_NAME_LENGTH = 128 };\r
-enum { CLASS_NAME_LENGTH = 128 };\r
-enum { SUB_KEY_NAME_LENGTH = 128 };\r
-enum { WINDOW_TEXT_LENGTH = 128 + 128 + 3};\r
+const int WINDOW_NAME_LENGTH = 128;\r
+const int CLASS_NAME_LENGTH = 128;\r
+const int SUB_KEY_NAME_LENGTH = 128;\r
+const int WINDOW_TEXT_LENGTH = WINDOW_NAME_LENGTH * 2 + 3;\r
\r
enum ICON_TYPE { MAIN_ICON, CX_ICON, MX_ICON, META_ICON, SHIFT_ICON, CTRL_ICON, ALT_ICON, MAX_ICON_TYPE };\r
enum XKEYMACS_STATUS { STATUS_ENABLE, STATUS_DISABLE_TMP, STATUS_DISABLE_WOCQ, STATUS_DISABLE, MAX_STATUS };\r
-enum { ON_ICON, OFF_ICON }; // alias of status\r
+enum { OFF_ICON, ON_ICON };\r
\r
enum GOTO { GOTO_DO_NOTHING, GOTO_HOOK, GOTO_RECURSIVE, GOTO_HOOKX, GOTO_HOOK0_9, CONTINUE };\r
enum SETTING_STYLE { SETTING_DEFAULT, SETTING_SPECIFIC, SETTING_DISABLE, SETTING_UNDEFINED };\r
\r
-enum { EXTENDED_KEY = 0x01000000 };\r
-enum { REPEATED_KEY = 0x40000000 };\r
-enum { BEING_RELEASED = 0x80000000 };\r
+#include "ipc.h"\r
\r
struct KeyBind\r
{\r
- int nCommandType;\r
+ int nType;\r
BYTE bVk;\r
int nControlID;\r
};\r
LPCTSTR name;\r
};\r
\r
+struct KbdMacro\r
+{\r
+ int nCode;\r
+ WPARAM wParam;\r
+ LPARAM lParam;\r
+ BOOL bOriginal;\r
+};\r
+\r
+const DWORD HOOK_ALT_LATER = 0x10000;\r
+\r
class AFX_EXT_CLASS CXkeymacsDll \r
{\r
public:\r
- static void ModifyM_xTip(const TCHAR *const szPath);\r
+ static BOOL SaveConfig();\r
+ static BOOL LoadConfig();\r
+ static void SetConfig(const CONFIG& config);\r
+ static void SetM_xTip(const TCHAR *const szPath);\r
static BOOL Get326Compatible();\r
- void Set326Compatible(int nApplicationID, BOOL b326Compatible);\r
- void SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
+ static void SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
static unsigned int GetMaxKeyInterval(void);\r
static void SetKeyboardSpeed(int nKeyboardSpeed);\r
static int GetAccelerate(void);\r
static void SetAccelerate(int nAccelerate);\r
- void SetWindowText(int nApplicationID, CString szWindowText);\r
- void AddAllShell_NotifyIcon();\r
- void DeleteAllShell_NotifyIcon();\r
- void SetKillRingMax(int nApplicationID, int nKillRingMax);\r
- void CXkeymacsDll::EnableShell_NotifyIcon(ICON_TYPE icon, BOOL bEnable);\r
- void SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hEnable, HICON hDisableTMP, HICON hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
- void SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hOn, HICON hOff, BOOL bEnable);\r
- void Clear(int nApplicationID);\r
- BOOL IsKeyboardHook();\r
- void SetCommandID(int nApplicationID, int nCommandType, int nKey, int nCommandID);\r
- void SetAtIbeamCursorOnly(int nApplicationID, int nCommandType, int nKey, BOOL bAtIbeamCursorOnly);\r
- void SetApplicationName(int nApplicationID, CString szApplicationName);\r
+ static void Clear(int nAppID);\r
+ static BOOL IsKeyboardHook();\r
static void ReleaseHooks();\r
static void ReleaseKeyboardHook();\r
- void SetEnableCUA(int nApplicationID, BOOL bEnableCUA);\r
- void SetIgnoreUndefinedC_x(int nApplicationID, BOOL bIgnoreUndefinedC_x);\r
- void SetIgnoreUndefinedMetaCtrl(int nApplicationID, BOOL bIgnoreUndefinedMetaCtrl);\r
static void SetHooks();\r
static void SetKeyboardHook();\r
- void SetSettingStyle(int nApplicationID, int nSettingStyle);\r
- void SetUseDialogSetting(int nApplicationID, BOOL bUseDialogSetting);\r
+ static void ResetHooks();\r
static void AddKillRing(BOOL bNewData = TRUE);\r
static void CallMacro();\r
- static void ClearFunctionDefinition();\r
- static void DefiningMacro(BOOL bDefiningMacro);\r
+ static void StartRecordMacro();\r
+ static void EndRecordMacro();\r
static void DepressKey(BYTE bVk, BOOL bOriginal = TRUE);\r
static BOOL GetEnableCUA();\r
static CClipboardSnap* GetKillRing(CClipboardSnap *pSnap, BOOL bForce = TRUE);\r
static void IncreaseKillRingIndex(int nKillRing = 1);\r
+ static UINT GetModifierState(BOOL bPhysicalKey = TRUE);\r
+ static void SetModifierState(const UINT before, const UINT after);\r
static BOOL IsDown(BYTE bVk, BOOL bPhysicalKey = TRUE);\r
static void Kdu(BYTE bVk, DWORD n = 1, BOOL bOriginal = TRUE);\r
- static int ModifyShell_NotifyIcon(ICON_TYPE icon, BOOL bNewStatus, BOOL bForce = TRUE);\r
static void ReleaseKey(BYTE bVk);\r
- static void SetFunctionDefinition(int nFunctionID, CString szDefinition);\r
- static void SetFunctionKey(int nFunctionID, int nApplicationID, int nCommandType, int nKey);\r
- static void SetKeyboardHookFlag();\r
- static void SetKeyboardHookFlag(BOOL bFlag);\r
static BOOL Is106Keyboard();\r
- static void Set106Keyboard(BOOL b106Keyboard);\r
- CXkeymacsDll();\r
- virtual ~CXkeymacsDll();\r
+ static void ToggleKeyboardHookState();\r
+ static void ShowKeyboardHookState();\r
+ static BOOL SendIconMessage(ICONMSG *pMsg, DWORD num);\r
+\r
private:\r
+ static bool m_bEnableKeyboardHook;\r
+ static DWORD m_nHookAltRelease;\r
+ static TCHAR m_M_xTip[128];\r
static void InvokeM_x(const TCHAR* const szPath);\r
- static BOOL m_b326Compatible[MAX_APP];\r
+ static BOOL UpdateKeyboardState(BYTE bVK, BYTE bState);\r
static void LogCallWndProcMessage(WPARAM wParam, LPARAM lParam);\r
static void DoSetCursor();\r
static HCURSOR m_hCurrentCursor;\r
static HHOOK m_hHookCallWndRet;\r
static LRESULT CALLBACK CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam);\r
static BOOL IsMatchWindowText(CString szWindowText);\r
- static TCHAR m_szWindowText[MAX_APP][WINDOW_TEXT_LENGTH];\r
- static BOOL m_bEnableKeyboardHook;\r
static HHOOK m_hHookCallWnd;\r
static HHOOK m_hHookGetMessage;\r
static HHOOK m_hHookShell;\r
- static void AddShell_NotifyIcon(ICON_TYPE icon);\r
- void DeleteShell_NotifyIcon(ICON_TYPE icon);\r
- static BOOL DefiningMacro();\r
static BOOL IsControl();\r
static BOOL IsMeta();\r
+ static void SetModifierIcons();\r
static void DoKeybd_event(BYTE bVk, DWORD dwFlags);\r
static LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);\r
static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);\r
static LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);\r
static LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);\r
- static KeyBind ParseKey(const int nFunctionID, unsigned int &i);\r
+ static int GetAppID(const LPCSTR szName, const int fallback);\r
+ static KeyBind ParseKey(LPCTSTR& def);\r
static BYTE a2v(TCHAR nAscii);\r
static BOOL IsShift(TCHAR nAscii);\r
- static TCHAR m_szFunctionDefinition[MAX_FUNCTION][MAX_DEFINITION];\r
- static void CallFunction(int nFunctionID);\r
- static int m_nFunctionID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
- static BOOL m_bEnableCUA[MAX_APP];\r
- static TCHAR m_szOldApplicationName[MAX_PATH];\r
- static TCHAR m_szApplicationName[MAX_PATH];\r
+ static void CallFunction(int nFuncID);\r
static int IsPassThrough(BYTE nKey);\r
- static BOOL IsDepressedShiftKeyOnly(BYTE nKey);\r
+ static void CancelMarkWithShift(BYTE nKey, bool bRelease);\r
static BOOL IsDepressedModifier(int Modifier(), BOOL bPhysicalKey = TRUE);\r
static BOOL IsValidKey(BYTE bVk);\r
- static CObList m_Macro;\r
- static BOOL m_bDefiningMacro;\r
- static void Original(int nCommandType, BYTE bVk, int nOriginal);\r
- static int Original(int nCommandType, BYTE bVk);\r
- static HICON m_hIcon[MAX_ICON_TYPE][MAX_STATUS];\r
- static BOOL m_bUseDialogSetting[MAX_APP];\r
+ static std::list<KbdMacro> m_Macro;\r
+ static BOOL m_bRecordingMacro;\r
+ static BOOL m_bDown[MAX_KEY];\r
+ static void SetOriginal(UINT nType, BYTE bVk);\r
+ static int CheckOriginal(UINT nType, BYTE bVk);\r
static void InitKeyboardProc(BOOL bImeComposition);\r
- static BOOL m_bIgnoreUndefinedC_x[MAX_APP];\r
- static BOOL m_bIgnoreUndefinedMetaCtrl[MAX_APP];\r
- static int m_nSettingStyle[MAX_APP];\r
- static int m_nApplicationID;\r
- static int m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY];\r
+ static int m_nAppID;\r
+ static BYTE m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY];\r
static int m_nKillRing;\r
static CList<CClipboardSnap *, CClipboardSnap *> m_oKillRing;\r
- static int m_nKillRingMax[MAX_APP];\r
- static int GetMickey(int nDifferential, int nThreshold1, int nThreshold2, int nAcceleration, int nSpeed);\r
- static BOOL DoShell_NotifyIcon(ICON_TYPE icon, DWORD dwMessage);\r
- static BOOL m_bIcon[MAX_ICON_TYPE];\r
- static DWORD m_dwOldMessage[MAX_ICON_TYPE];\r
- static NOTIFYICONDATA m_stNtfyIcon[MAX_ICON_TYPE];\r
- static NOTIFYICONDATA m_stOldNtfyIcon[MAX_ICON_TYPE];\r
static BOOL m_bHook;\r
static BOOL m_bRightShift;\r
static BOOL m_bRightAlt;\r
static BOOL m_bRightControl;\r
- static TCHAR m_szSpecialApp[MAX_APP][CLASS_NAME_LENGTH];\r
- static int m_nCommandID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
- static BOOL m_bAtIbeamCursorOnly[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
- static BOOL m_b106Keyboard;\r
+ static CONFIG m_Config;\r
};\r
\r
#endif // !defined(AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_)\r