OSDN Git Service

Use the reg command to import/export properties
[xkeymacs/xkeymacs.git] / xkeymacsdll / KbdMacro.cpp
1 #include "KbdMacro.h"\r
2 #include "xkeymacsdll.h"\r
3 \r
4 void KbdMacro::Start()\r
5 {\r
6         ZeroMemory(m_down, sizeof(m_down));\r
7         m_keys.clear();\r
8 }\r
9 \r
10 void KbdMacro::Record(BYTE vk, bool up)\r
11 {\r
12         if (up && !m_down[vk])\r
13                 return;\r
14         if (!up)\r
15                 m_down[vk] = true;\r
16         Key k = {vk, up};\r
17         m_keys.push_back(k);\r
18 }\r
19 \r
20 void KbdMacro::End()\r
21 {\r
22         while (!m_keys.empty()) { // remove not pushed up\r
23                 if (!m_keys.front().up)\r
24                         break;\r
25                 m_keys.erase(m_keys.begin());\r
26         }\r
27         while (!m_keys.empty()) {  // remove not released push\r
28                 if (m_keys.back().up)\r
29                         break;\r
30                 m_keys.pop_back();\r
31         }\r
32 }\r
33 \r
34 void KbdMacro::Call() const\r
35 {\r
36         UINT before = CXkeymacsDll::GetModifierState(FALSE);\r
37         CXkeymacsDll::SetModifierState(0, before);\r
38         for (auto k = m_keys.cbegin(); k != m_keys.cend(); ++k)\r
39                 if (k->up)\r
40                         CXkeymacsDll::ReleaseKey(k->vk);\r
41                 else\r
42                         CXkeymacsDll::DepressKey(k->vk);\r
43         CXkeymacsDll::SetModifierState(before, 0);\r
44 }\r