// xkeymacsdll.cpp : Defines the initialization routines for the DLL.\r
//\r
\r
-#include "stdafx.h"\r
-#include "resource.h"\r
+#include "xkeymacsdll.h"\r
#include "Utils.h"\r
#include "Commands.h"\r
-#include <afxdllx.h>\r
+#include "../xkeymacs/resource.h"\r
#include <math.h>\r
#include <Imm.h>\r
#include <vector>\r
// CXkeymacsDll Class\r
//////////////////////////////////////////////////////////////////////\r
\r
-#include "xkeymacsDll.h"\r
#pragma data_seg(".xkmcs")\r
- bool CXkeymacsDll::m_bEnableKeyboardHook = false;\r
- DWORD CXkeymacsDll::m_nHookAltRelease = 0;\r
- BOOL CXkeymacsDll::m_bRightControl = FALSE;\r
- BOOL CXkeymacsDll::m_bRightAlt = FALSE;\r
- BOOL CXkeymacsDll::m_bRightShift = FALSE;\r
- BOOL CXkeymacsDll::m_bHook = TRUE;\r
- BYTE CXkeymacsDll::m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
- int CXkeymacsDll::m_nAccelerate = 0;\r
- int CXkeymacsDll::m_nKeyboardSpeed = 31;\r
- HCURSOR CXkeymacsDll::m_hCursor[MAX_STATUS] = {'\0'};\r
- HCURSOR CXkeymacsDll::m_hCurrentCursor = NULL;\r
- BOOL CXkeymacsDll::m_bCursor = FALSE;\r
- TCHAR CXkeymacsDll::m_M_xTip[128] = "";\r
- CONFIG CXkeymacsDll::m_Config = {0};\r
+Config CXkeymacsDll::m_Config = {0};\r
+bool CXkeymacsDll::m_bEnableKeyboardHook = false;\r
+BOOL CXkeymacsDll::m_bHook = TRUE;\r
+DWORD CXkeymacsDll::m_nHookAltRelease = 0;\r
+BOOL CXkeymacsDll::m_bRightShift = FALSE;\r
+BOOL CXkeymacsDll::m_bRightControl = FALSE;\r
+BOOL CXkeymacsDll::m_bRightAlt = FALSE;\r
+TCHAR CXkeymacsDll::m_M_xTip[128] = "";\r
+BYTE CXkeymacsDll::m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+int CXkeymacsDll::m_nAccelerate = 0;\r
+int CXkeymacsDll::m_nKeyboardSpeed = 31;\r
+HCURSOR CXkeymacsDll::m_hCurrentCursor = NULL;\r
+BOOL CXkeymacsDll::m_bCursor = FALSE;\r
+HCURSOR CXkeymacsDll::m_hCursor[MAX_STATUS] = {'\0'};\r
#pragma data_seg()\r
+\r
HHOOK CXkeymacsDll::m_hHookCallWnd = NULL;\r
HHOOK CXkeymacsDll::m_hHookCallWndRet = NULL;\r
HHOOK CXkeymacsDll::m_hHookGetMessage = NULL;\r
int CXkeymacsDll::m_nAppID = 0;\r
CList<CClipboardSnap *, CClipboardSnap *> CXkeymacsDll::m_oKillRing;\r
int CXkeymacsDll::m_nKillRing = 0;\r
-BOOL CXkeymacsDll::m_bRecordingMacro = FALSE;\r
-BOOL CXkeymacsDll::m_bDown[MAX_KEY] = {0};\r
-std::list<KbdMacro> CXkeymacsDll::m_Macro;\r
+KbdMacro* CXkeymacsDll::m_kbdMacro = NULL;\r
\r
BOOL CXkeymacsDll::SaveConfig()\r
{\r
return res;\r
}\r
\r
-void CXkeymacsDll::SetConfig(const CONFIG& config)\r
+void CXkeymacsDll::SetConfig(const Config& config)\r
{\r
m_Config = config;\r
}\r
ShowKeyboardHookState();\r
}\r
\r
+BOOL CXkeymacsDll::IsKeyboardHook()\r
+{\r
+ return m_bHook;\r
+}\r
+\r
void CXkeymacsDll::ShowKeyboardHookState()\r
{\r
- ICONMSG msg = {MAIN_ICON,};\r
+ IconMsg msg = {MAIN_ICON,};\r
if (m_bHook) {\r
if (CCommands::IsTemporarilyDisableXKeymacs()) {\r
msg.nState = STATUS_DISABLE_TMP;\r
DoSetCursor();\r
}\r
\r
-BOOL CXkeymacsDll::IsKeyboardHook()\r
-{\r
- return m_bHook;\r
-}\r
-\r
LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)\r
{\r
SetKeyboardHook();\r
return CallNextHookEx(NULL, nCode, wParam, lParam);\r
}\r
\r
-UINT CXkeymacsDll::GetModifierState(BOOL bPhysicalKey)\r
-{\r
- UINT result = 0;\r
- if (IsDown(VK_SHIFT, bPhysicalKey))\r
- result |= SHIFT;\r
- if (IsDown(VK_CONTROL, bPhysicalKey))\r
- result |= CONTROL;\r
- if (IsDown(VK_MENU, bPhysicalKey))\r
- result |= META;\r
- return result;\r
-}\r
-\r
-void CXkeymacsDll::SetModifierState(UINT after, UINT before)\r
-{\r
- if (after & SHIFT && !(before & SHIFT))\r
- DepressKey(VK_SHIFT);\r
- else if (!(after & SHIFT) && before & SHIFT)\r
- ReleaseKey(VK_SHIFT);\r
-\r
- if (after & CONTROL && !(before & CONTROL)) {\r
- UpdateKeyboardState(VK_CONTROL, 1);\r
- DepressKey(VK_CONTROL);\r
- } else if (!(after & CONTROL) && before & CONTROL) {\r
- ReleaseKey(VK_CONTROL);\r
- UpdateKeyboardState(VK_CONTROL, 0);\r
- }\r
-\r
- const BOOL bHookApp =\r
- CUtils::IsVisualCpp() || CUtils::IsVisualStudio() ||\r
- CUtils::IsInternetExplorer() || CUtils::IsFirefox() || CUtils::IsChrome();\r
- if (after & META && !(before & META)) {\r
- if (bHookApp)\r
- m_nHookAltRelease |= HOOK_ALT_LATER;\r
- DepressKey(VK_MENU);\r
- } else if (!(after & META) && before & META) {\r
- if (bHookApp)\r
- ++m_nHookAltRelease;\r
- ReleaseKey(VK_MENU);\r
- }\r
-}\r
-\r
-BOOL CXkeymacsDll::UpdateKeyboardState(BYTE bVk, BYTE bState)\r
-{\r
- BYTE ks[256] = {'\0'};\r
- if (!GetKeyboardState(ks))\r
- return FALSE;\r
- ks[bVk] = bState;\r
- return SetKeyboardState(ks);\r
-}\r
-\r
-BOOL CXkeymacsDll::IsDown(BYTE bVk, BOOL bPhysicalKey)\r
-{\r
- return bPhysicalKey ? GetAsyncKeyState(bVk) < 0 : GetKeyState(bVk) < 0;\r
-}\r
-\r
-void CXkeymacsDll::DoKeybd_event(BYTE bVk, DWORD dwFlags)\r
-{\r
- switch (bVk) {\r
- case VK_CONTROL:\r
- if (m_bRightControl)\r
- dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
- break;\r
-\r
- case VK_MENU:\r
- if (m_bRightAlt)\r
- dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
- break;\r
-\r
- case VK_SHIFT:\r
- if (m_bRightShift) {\r
- if (CUtils::IsXPorLater())\r
- bVk = VK_RSHIFT;\r
- else\r
- dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
- }\r
- break;\r
- case VK_PAUSE:\r
- if (IsDown(VK_CONTROL, FALSE)) // Break\r
- dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
- break;\r
- case VK_INSERT:\r
- case VK_DELETE:\r
- case VK_HOME:\r
- case VK_END:\r
- case VK_NEXT:\r
- case VK_PRIOR:\r
- case VK_UP:\r
- case VK_DOWN:\r
- case VK_RIGHT:\r
- case VK_LEFT:\r
- case VK_NUMLOCK:\r
- case VK_PRINT:\r
- dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
- break;\r
- }\r
-// CUtils::Log(_T("b: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
- keybd_event(bVk, 0, dwFlags, GetMessageExtraInfo());\r
-// CUtils::Log(_T("a: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
-}\r
-\r
-void CXkeymacsDll::DepressKey(BYTE bVk, BOOL bOriginal) // bVk is virtual-key code, MSDN said\r
-{\r
- if (bOriginal) {\r
-// CUtils::Log(_T("i: %x, %d, %d, %d, %d, %d, %d, %d, %d"), bVk,\r
-// IsDown(VK_CONTROL), IsDown(VK_CONTROL, FALSE), IsDepressedModifier(CCommands::C_), IsDepressedModifier(CCommands::C_, FALSE),\r
-// IsDown(VK_MENU), IsDown(VK_MENU, FALSE), IsDepressedModifier(CCommands::MetaAlt), IsDepressedModifier(CCommands::MetaAlt, FALSE));\r
- SetOriginal(GetModifierState(), bVk);\r
- }\r
- DoKeybd_event(bVk, 0);\r
-}\r
-\r
-void CXkeymacsDll::ReleaseKey(BYTE bVk) // bVk is virtual-key code, MSDN said\r
-{\r
- DoKeybd_event(bVk, KEYEVENTF_KEYUP);\r
-}\r
-\r
-void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)\r
-{\r
- while (n--) {\r
- DepressKey(bVk, bOriginal);\r
- ReleaseKey(bVk);\r
- }\r
-}\r
-\r
void CXkeymacsDll::InitKeyboardProc(BOOL bImeComposition)\r
{\r
CUtils::SetApplicationName(bImeComposition);\r
// Use Dialog Setting\r
m_nAppID = GetAppID(_T("Dialog"), m_nAppID);\r
\r
- ICONMSG msg[3] = {\r
+ IconMsg msg[3] = {\r
{CX_ICON, OFF_ICON, ""},\r
{MX_ICON, OFF_ICON, ""},\r
{META_ICON, OFF_ICON, ""}\r
\r
DO_NOTHING:\r
SetModifierIcons();\r
- if (m_bRecordingMacro && (!bRelease || m_bDown[wParam])) {\r
- KbdMacro m = { nCode, wParam, lParam, TRUE };\r
- m_Macro.push_back(m);\r
- m_bDown[wParam] |= !bRelease;\r
- }\r
+ if (m_kbdMacro)\r
+ m_kbdMacro->Record(nKey, bRelease);\r
return CallNextHookEx(NULL, nCode, wParam, lParam);\r
\r
RECURSIVE:\r
return TRUE;\r
}\r
\r
+void CXkeymacsDll::CancelMarkWithShift(BYTE nKey, bool bRelease)\r
+{\r
+ static bool bShift;\r
+ if (nKey != VK_SHIFT)\r
+ goto exit;\r
+ BYTE bVk = 0;\r
+ do {\r
+ if (bVk == VK_SHIFT || VK_LSHIFT || VK_RSHIFT)\r
+ continue;\r
+ if (IsDown(bVk, FALSE))\r
+ goto exit;\r
+ } while (++bVk);\r
+ if (!bRelease) {\r
+ bShift = true;\r
+ return;\r
+ }\r
+ if (bShift)\r
+ CCommands::SetMark(FALSE);\r
+exit:\r
+ bShift = false;\r
+ return;\r
+}\r
+\r
+int CXkeymacsDll::IsPassThrough(BYTE nKey)\r
+{\r
+ BYTE bVk = 0;\r
+ const BYTE *pnID = m_Config.nCommandID[m_nAppID][NONE]; \r
+ do {\r
+ if (IsDown(bVk) && Commands[pnID[bVk]].fCommand == CCommands::PassThrough) {\r
+ if (bVk == nKey)\r
+ return GOTO_HOOK;\r
+ return GOTO_DO_NOTHING;\r
+ }\r
+ } while (++bVk);\r
+ return CONTINUE;\r
+}\r
+\r
+void CXkeymacsDll::InvokeM_x(LPCTSTR szPath)\r
+{\r
+// CUtils::Log("M-x: szPath=_%s_", szPath);\r
+ int (*fCommand)() = NULL;\r
+ for (int i = 0; i < MAX_COMMAND; ++i)\r
+ if (_tcsicmp(szPath, Commands[i].szCommandName) == 0) {\r
+ fCommand = Commands[i].fCommand;\r
+ break;\r
+ }\r
+ if (fCommand) {\r
+// CUtils::Log("M-x: Command: _%s_", Commands[i].szCommandName);\r
+ fCommand();\r
+ } else {\r
+// CUtils::Log("M-x: Path: _%s_", szPath);\r
+ ShellExecute(NULL, NULL, szPath, NULL, NULL, SW_SHOWNORMAL);\r
+ }\r
+}\r
+\r
void CXkeymacsDll::SetModifierIcons()\r
{\r
- ICONMSG msg[6] = {\r
+ IconMsg msg[6] = {\r
{MX_ICON, CCommands::bM_x(), ""},\r
{CX_ICON, CCommands::bC_x(), ""},\r
{META_ICON, CCommands::bM_(), ""},\r
SendIconMessage(msg, 6);\r
}\r
\r
-void CXkeymacsDll::Clear(int nAppID)\r
+void CXkeymacsDll::SetM_xTip(LPCTSTR szPath)\r
{\r
- if (0 <= nAppID && nAppID < MAX_APP) {\r
- ZeroMemory(m_Config.szSpecialApp[nAppID], sizeof(m_Config.szSpecialApp[nAppID]));\r
- ZeroMemory(m_Config.nCommandID[nAppID], sizeof(m_Config.nCommandID[nAppID]));\r
- m_Config.nKillRingMax[nAppID] = 0;\r
- m_Config.bUseDialogSetting[nAppID] = FALSE;\r
- m_Config.nSettingStyle[nAppID] = 0;\r
- } else {\r
- ASSERT(0);\r
+ _tcscpy_s(m_M_xTip, "M-x LED");\r
+ if (szPath && _tcslen(szPath) < 128 - 5)\r
+ _stprintf_s(m_M_xTip, "M-x %s", szPath);\r
+}\r
+\r
+BOOL CXkeymacsDll::SendIconMessage(IconMsg *pMsg, DWORD num)\r
+{\r
+ DWORD ack, read;\r
+ return CallNamedPipe(ICON_PIPE, pMsg, sizeof(IconMsg) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT) && read == sizeof(DWORD);\r
+}\r
+\r
+void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)\r
+{\r
+ while (n--) {\r
+ DepressKey(bVk, bOriginal);\r
+ ReleaseKey(bVk);\r
}\r
}\r
\r
+void CXkeymacsDll::DepressKey(BYTE bVk, BOOL bOriginal) // bVk is virtual-key code, MSDN said\r
+{\r
+ if (bOriginal) {\r
+// CUtils::Log(_T("i: %x, %d, %d, %d, %d, %d, %d, %d, %d"), bVk,\r
+// IsDown(VK_CONTROL), IsDown(VK_CONTROL, FALSE), IsDepressedModifier(CCommands::C_), IsDepressedModifier(CCommands::C_, FALSE),\r
+// IsDown(VK_MENU), IsDown(VK_MENU, FALSE), IsDepressedModifier(CCommands::MetaAlt), IsDepressedModifier(CCommands::MetaAlt, FALSE));\r
+ SetOriginal(GetModifierState(), bVk);\r
+ }\r
+ DoKeybd_event(bVk, 0);\r
+}\r
+\r
+void CXkeymacsDll::ReleaseKey(BYTE bVk) // bVk is virtual-key code, MSDN said\r
+{\r
+ DoKeybd_event(bVk, KEYEVENTF_KEYUP);\r
+}\r
+\r
+void CXkeymacsDll::DoKeybd_event(BYTE bVk, DWORD dwFlags)\r
+{\r
+ switch (bVk) {\r
+ case VK_CONTROL:\r
+ if (m_bRightControl)\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ break;\r
+\r
+ case VK_MENU:\r
+ if (m_bRightAlt)\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ break;\r
+\r
+ case VK_SHIFT:\r
+ if (m_bRightShift)\r
+ bVk = VK_RSHIFT;\r
+ break;\r
+ case VK_PAUSE:\r
+ if (IsDown(VK_CONTROL, FALSE)) // Break\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ break;\r
+ case VK_INSERT:\r
+ case VK_DELETE:\r
+ case VK_HOME:\r
+ case VK_END:\r
+ case VK_NEXT:\r
+ case VK_PRIOR:\r
+ case VK_UP:\r
+ case VK_DOWN:\r
+ case VK_RIGHT:\r
+ case VK_LEFT:\r
+ case VK_NUMLOCK:\r
+ case VK_PRINT:\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ break;\r
+ }\r
+// CUtils::Log(_T("b: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+ keybd_event(bVk, 0, dwFlags, GetMessageExtraInfo());\r
+// CUtils::Log(_T("a: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+}\r
+\r
+void CXkeymacsDll::SetOriginal(UINT nType, BYTE bVk)\r
+{\r
+ m_nOriginal[nType & ~SHIFT][bVk]++;\r
+}\r
+\r
+int CXkeymacsDll::CheckOriginal(UINT nType, BYTE bVk)\r
+{\r
+ nType &= ~SHIFT;\r
+ if (m_nOriginal[nType][bVk])\r
+ return m_nOriginal[nType][bVk]--;\r
+ return 0;\r
+}\r
+\r
+UINT CXkeymacsDll::GetModifierState(BOOL bPhysicalKey)\r
+{\r
+ UINT result = 0;\r
+ if (IsDown(VK_SHIFT, bPhysicalKey))\r
+ result |= SHIFT;\r
+ if (IsDown(VK_CONTROL, bPhysicalKey))\r
+ result |= CONTROL;\r
+ if (IsDown(VK_MENU, bPhysicalKey))\r
+ result |= META;\r
+ return result;\r
+}\r
+\r
+void CXkeymacsDll::SetModifierState(UINT after, UINT before)\r
+{\r
+ if (after & SHIFT && !(before & SHIFT))\r
+ DepressKey(VK_SHIFT);\r
+ else if (!(after & SHIFT) && before & SHIFT)\r
+ ReleaseKey(VK_SHIFT);\r
+\r
+ if (after & CONTROL && !(before & CONTROL)) {\r
+ UpdateKeyboardState(VK_CONTROL, 1);\r
+ DepressKey(VK_CONTROL);\r
+ } else if (!(after & CONTROL) && before & CONTROL) {\r
+ ReleaseKey(VK_CONTROL);\r
+ UpdateKeyboardState(VK_CONTROL, 0);\r
+ }\r
+\r
+ const BOOL bHookApp =\r
+ CUtils::IsVisualCpp() || CUtils::IsVisualStudio() ||\r
+ CUtils::IsInternetExplorer() || CUtils::IsFirefox() || CUtils::IsChrome();\r
+ if (after & META && !(before & META)) {\r
+ if (bHookApp)\r
+ m_nHookAltRelease |= HOOK_ALT_LATER;\r
+ DepressKey(VK_MENU);\r
+ } else if (!(after & META) && before & META) {\r
+ if (bHookApp)\r
+ ++m_nHookAltRelease;\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+}\r
+\r
+BOOL CXkeymacsDll::UpdateKeyboardState(BYTE bVk, BYTE bState)\r
+{\r
+ BYTE ks[256] = {'\0'};\r
+ if (!GetKeyboardState(ks))\r
+ return FALSE;\r
+ ks[bVk] = bState;\r
+ return SetKeyboardState(ks);\r
+}\r
+\r
+BOOL CXkeymacsDll::IsControl()\r
+{\r
+ return CCommands::bC_() || IsDepressedModifier(CCommands::C_);\r
+}\r
+\r
+BOOL CXkeymacsDll::IsMeta()\r
+{\r
+ return CCommands::bM_() || IsDepressedModifier(CCommands::MetaAlt);\r
+}\r
+\r
BOOL CXkeymacsDll::IsDepressedModifier(int (__cdecl *Modifier)(void), BOOL bPhysicalKey)\r
{\r
BYTE bVk = 0;\r
return FALSE;\r
}\r
\r
-void CXkeymacsDll::CancelMarkWithShift(BYTE nKey, bool bRelease)\r
-{\r
- static bool bShift;\r
- if (nKey != VK_SHIFT)\r
- goto exit;\r
- BYTE bVk = 0;\r
- do {\r
- if (bVk == VK_SHIFT || VK_LSHIFT || VK_RSHIFT)\r
- continue;\r
- if (IsDown(bVk, FALSE))\r
- goto exit;\r
- } while (++bVk);\r
- if (!bRelease) {\r
- bShift = true;\r
- return;\r
- }\r
- if (bShift)\r
- CCommands::SetMark(FALSE);\r
-exit:\r
- bShift = false;\r
- return;\r
-}\r
-\r
-BOOL CXkeymacsDll::IsControl()\r
-{\r
- return CCommands::bC_() || IsDepressedModifier(CCommands::C_);\r
-}\r
-\r
-BOOL CXkeymacsDll::IsMeta()\r
+BOOL CXkeymacsDll::IsDown(BYTE bVk, BOOL bPhysicalKey)\r
{\r
- return CCommands::bM_() || IsDepressedModifier(CCommands::MetaAlt);\r
+ return bPhysicalKey ? GetAsyncKeyState(bVk) < 0 : GetKeyState(bVk) < 0;\r
}\r
\r
void CXkeymacsDll::AddKillRing(BOOL bNewData)\r
return pSnap->GetNext();\r
}\r
\r
-void CXkeymacsDll::SetOriginal(UINT nType, BYTE bVk)\r
-{\r
- m_nOriginal[nType & ~SHIFT][bVk]++;\r
-}\r
-\r
-int CXkeymacsDll::CheckOriginal(UINT nType, BYTE bVk)\r
-{\r
- nType &= ~SHIFT;\r
- if (m_nOriginal[nType][bVk])\r
- return m_nOriginal[nType][bVk]--;\r
- return 0;\r
-}\r
-\r
void CXkeymacsDll::IncreaseKillRingIndex(int nKillRing)\r
{\r
m_nKillRing += nKillRing;\r
return m_Config.bEnableCUA[m_nAppID];\r
}\r
\r
-void CXkeymacsDll::StartRecordMacro()\r
-{\r
- if (CCommands::bC_u())\r
- CallMacro();\r
- m_bRecordingMacro = TRUE;\r
- m_Macro.erase(m_Macro.begin(), m_Macro.end());\r
- ZeroMemory(m_bDown, MAX_KEY);\r
-}\r
-\r
-void CXkeymacsDll::EndRecordMacro()\r
-{\r
- m_bRecordingMacro = FALSE;\r
- while (!m_Macro.empty()) { // remove not released push\r
- const KbdMacro& m = m_Macro.back();\r
- if (HIWORD(m.lParam) & KF_UP)\r
- break;\r
- m_Macro.pop_back();\r
- }\r
-}\r
-\r
-void CXkeymacsDll::CallMacro()\r
+BOOL CXkeymacsDll::Get326Compatible()\r
{\r
- if (m_bRecordingMacro)\r
- m_bRecordingMacro = FALSE;\r
- UINT before = GetModifierState(FALSE);\r
- SetModifierState(0, before);\r
- for (std::list<KbdMacro>::const_iterator m = m_Macro.begin(); m != m_Macro.end(); ++m)\r
- if (HIWORD(m->lParam) & KF_UP)\r
- ReleaseKey(static_cast<BYTE>(m->wParam));\r
- else\r
- DepressKey(static_cast<BYTE>(m->wParam), m->bOriginal);\r
- SetModifierState(before, 0);\r
+ return m_Config.b326Compatible[m_nAppID];\r
}\r
\r
BOOL CXkeymacsDll::Is106Keyboard()\r
return m_Config.b106Keyboard;\r
}\r
\r
-int CXkeymacsDll::IsPassThrough(BYTE nKey)\r
+void CXkeymacsDll::SetKbMacro(KbdMacro* kbdMacro)\r
{\r
- BYTE bVk = 0;\r
- do {\r
- if (IsDown(bVk)\r
- && (Commands[m_Config.nCommandID[m_nAppID][NONE][bVk]].fCommand == CCommands::PassThrough)) {\r
- if (bVk == nKey) {\r
- return GOTO_HOOK;\r
- }\r
-\r
- return GOTO_DO_NOTHING;\r
- }\r
- } while (++bVk);\r
- return CONTINUE;\r
+ m_kbdMacro = kbdMacro;\r
}\r
\r
// call an original command which is defined in dot.xkeymacs\r
case IDS_WINDOW_TEXT_IGNORE: // *\r
bIsMatchWindowText = TRUE;\r
break;\r
- default:\r
- ASSERT(0);\r
- break;\r
}\r
-\r
// CUtils::Log(_T("IsMatchWindowText: %d, _%s_, _%s_"), bIsMatchWindowText, szCurrentWindowText, szWindowText);\r
return bIsMatchWindowText;\r
}\r
\r
void CXkeymacsDll::DoSetCursor()\r
{\r
- if (m_bCursor && m_hCurrentCursor) {\r
+ if (m_bCursor && m_hCurrentCursor)\r
::SetCursor(m_hCurrentCursor);\r
- }\r
-}\r
-\r
-BOOL CXkeymacsDll::Get326Compatible()\r
-{\r
- return m_Config.b326Compatible[m_nAppID];\r
-}\r
-\r
-void CXkeymacsDll::InvokeM_x(LPCTSTR szPath)\r
-{\r
-// CUtils::Log("M-x: szPath=_%s_", szPath);\r
- int (*fCommand)() = NULL;\r
-\r
- for (int i = 0; i < MAX_COMMAND; ++i) {\r
- if (_tcsicmp(szPath, Commands[i].szCommandName) == 0) {\r
- fCommand = Commands[i].fCommand;\r
- break;\r
- }\r
- }\r
-\r
- if (fCommand) {\r
-// CUtils::Log("M-x: Command: _%s_", Commands[i].szCommandName);\r
- fCommand();\r
- } else {\r
-// CUtils::Log("M-x: Path: _%s_", szPath);\r
- ShellExecute(NULL, NULL, szPath, NULL, NULL, SW_SHOWNORMAL);\r
- }\r
-}\r
-\r
-void CXkeymacsDll::SetM_xTip(LPCTSTR szPath)\r
-{\r
- _tcscpy_s(m_M_xTip, "M-x LED");\r
- if (szPath && _tcslen(szPath) < 128 - 5)\r
- _stprintf_s(m_M_xTip, "M-x %s", szPath);\r
-}\r
-\r
-BOOL CXkeymacsDll::SendIconMessage(ICONMSG *pMsg, DWORD num)\r
-{\r
- DWORD ack, read;\r
- return CallNamedPipe(ICON_PIPE, pMsg, sizeof(ICONMSG) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT);\r
}\r