--- /dev/null
+// 104Keyboard.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include <Lmcons.h>\r
+#include "xkeymacs.h"\r
+#include "104Keyboard.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C104Keyboard dialog\r
+\r
+\r
+C104Keyboard::C104Keyboard(const HKEY_TYPE hkey_type, CWnd *const pParent /*=NULL*/)\r
+ : CDialog(C104Keyboard::IDD, pParent)\r
+{\r
+ //{{AFX_DATA_INIT(C104Keyboard)\r
+ // NOTE: the ClassWizard will add member initialization here\r
+ //}}AFX_DATA_INIT\r
+ m_HkeyType = hkey_type;\r
+}\r
+\r
+\r
+void C104Keyboard::DoDataExchange(CDataExchange *const pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(C104Keyboard)\r
+ // NOTE: the ClassWizard will add DDX and DDV calls here\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(C104Keyboard, CDialog)\r
+ //{{AFX_MSG_MAP(C104Keyboard)\r
+ ON_WM_DESTROY()\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C104Keyboard message handlers\r
+\r
+BOOL C104Keyboard::OnInitDialog() \r
+{\r
+ CDialog::OnInitDialog();\r
+ \r
+ // TODO: Add extra initialization here\r
+ CString szWindowText;\r
+ CString szFor;\r
+ switch (m_HkeyType) {\r
+ case CURRENT_USER:\r
+ {\r
+ TCHAR szUserName[UNLEN + 1] = {'0'};\r
+ DWORD nSize = UNLEN + 1;\r
+ if (GetUserName(szUserName, &nSize)) {\r
+ szFor.Format(IDS_FOR, szUserName);\r
+ } else {\r
+ szFor.LoadString(IDS_FOR_LOGGED_ON_USER);\r
+ }\r
+ }\r
+ break;\r
+ case LOCAL_MACHINE:\r
+ szFor.LoadString(IDS_FOR_ANY_USER);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ this->GetWindowText(szWindowText);\r
+ this->SetWindowText(szWindowText + szFor);\r
+\r
+ m_ToolTip.Create(this, TTS_ALWAYSTIP | TTS_NOPREFIX);\r
+ m_ToolTip.SetMaxTipWidth(0x100); // Enable multiline\r
+\r
+ CProfile::LoadScanCodeMap(m_HkeyType);\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (!GetDlgItem(KeyboardLayouts[i].nBaseControlID)\r
+ || !GetDlgItem(KeyboardLayouts[i].nCurrentControlID)) {\r
+ continue;\r
+ }\r
+\r
+ KeyboardLayouts[i].pBaseKey = new CKey(KeyboardLayouts[i].nBaseControlID, NORMAL_KEY, m_HkeyType);\r
+ KeyboardLayouts[i].pBaseKey->SubclassDlgItem(KeyboardLayouts[i].nBaseControlID, this);\r
+ m_ToolTip.AddTool(GetDlgItem(KeyboardLayouts[i].nBaseControlID), CProfile::GetToolTipID(KeyboardLayouts[i].nToolTipID));\r
+\r
+ KeyboardLayouts[i].pCurrentKey = new CKey(KeyboardLayouts[i].nCurrentControlID, ORIGINAL_KEY, m_HkeyType);\r
+ KeyboardLayouts[i].pCurrentKey->SubclassDlgItem(KeyboardLayouts[i].nCurrentControlID, this);\r
+ m_ToolTip.AddTool(GetDlgItem(KeyboardLayouts[i].nCurrentControlID), CProfile::GetToolTipID(KeyboardLayouts[i].nToolTipID));\r
+\r
+ ScanCode_t current = {'\0'};\r
+ if (CProfile::GetScanCodeMap(m_HkeyType, KeyboardLayouts[i].scancode, ¤t)) {\r
+ KeyboardLayouts[i].pCurrentKey->SetKeyType(REMAPPED_KEY);\r
+\r
+ CString szWindowText;\r
+ GetDlgItem(CProfile::GetBaseControlID(current))->GetWindowText(szWindowText);\r
+ GetDlgItem(KeyboardLayouts[i].nCurrentControlID)->SetWindowText(szWindowText);\r
+\r
+ KeyboardLayout_t *pKeyboardLayout = CProfile::GetKeyboardLayouts(CProfile::GetBaseControlID(current));\r
+ if (pKeyboardLayout) {\r
+ m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pKeyboardLayout->nToolTipID), GetDlgItem(KeyboardLayouts[i].nCurrentControlID));\r
+ }\r
+ }\r
+ }\r
+ \r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void C104Keyboard::OnOK() \r
+{\r
+ // TODO: Add extra validation here\r
+ if (CProfile::LostKeyWarning(m_HkeyType) != IDCANCEL) {\r
+ CProfile::SaveScanCodeMap(m_HkeyType);\r
+\r
+ CDialog::OnOK();\r
+ }\r
+}\r
+\r
+void C104Keyboard::OnDestroy() \r
+{\r
+ CDialog::OnDestroy();\r
+\r
+ // TODO: Add your message handler code here\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (!GetDlgItem(KeyboardLayouts[i].nBaseControlID)\r
+ || !GetDlgItem(KeyboardLayouts[i].nCurrentControlID)) {\r
+ continue;\r
+ }\r
+\r
+ if (KeyboardLayouts[i].pBaseKey) {\r
+ delete KeyboardLayouts[i].pBaseKey;\r
+ KeyboardLayouts[i].pBaseKey = NULL;\r
+ }\r
+ if (KeyboardLayouts[i].pCurrentKey) {\r
+ delete KeyboardLayouts[i].pCurrentKey;\r
+ KeyboardLayouts[i].pCurrentKey = NULL;\r
+ }\r
+ }\r
+}\r
+\r
+BOOL C104Keyboard::PreTranslateMessage(MSG *const pMsg) \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ switch (pMsg->message) {\r
+ case WM_LBUTTONDOWN:\r
+ case WM_LBUTTONUP:\r
+ case WM_MOUSEMOVE:\r
+ m_ToolTip.RelayEvent(pMsg);\r
+ break;\r
+ }\r
+\r
+ return CDialog::PreTranslateMessage(pMsg);\r
+}\r
--- /dev/null
+#if !defined(AFX_104KEYBOARD_H__0206A99F_158D_419A_A816_CC493DDDA16C__INCLUDED_)\r
+#define AFX_104KEYBOARD_H__0206A99F_158D_419A_A816_CC493DDDA16C__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include "Key.h"\r
+\r
+// 104Keyboard.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C104Keyboard dialog\r
+\r
+class C104Keyboard : public CDialog\r
+{\r
+// Construction\r
+public:\r
+ CToolTipCtrl m_ToolTip;\r
+ C104Keyboard(HKEY_TYPE hkey_type, CWnd* pParent = NULL); // standard constructor\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(C104Keyboard)\r
+ enum { IDD = IDD_104KEYBOARD };\r
+ // NOTE: the ClassWizard will add data members here\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(C104Keyboard)\r
+ public:\r
+ virtual BOOL PreTranslateMessage(MSG* pMsg);\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(C104Keyboard)\r
+ virtual BOOL OnInitDialog();\r
+ virtual void OnOK();\r
+ afx_msg void OnDestroy();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ HKEY_TYPE m_HkeyType;\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_104KEYBOARD_H__0206A99F_158D_419A_A816_CC493DDDA16C__INCLUDED_)\r
--- /dev/null
+// 109Keyboard.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include <Lmcons.h>\r
+#include "xkeymacs.h"\r
+#include "109Keyboard.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C109Keyboard dialog\r
+\r
+\r
+C109Keyboard::C109Keyboard(const HKEY_TYPE hkey_type, CWnd *const pParent /*=NULL*/)\r
+ : CDialog(C109Keyboard::IDD, pParent)\r
+{\r
+ //{{AFX_DATA_INIT(C109Keyboard)\r
+ // NOTE: the ClassWizard will add member initialization here\r
+ //}}AFX_DATA_INIT\r
+ m_HkeyType = hkey_type;\r
+}\r
+\r
+\r
+void C109Keyboard::DoDataExchange(CDataExchange *const pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(C109Keyboard)\r
+ // NOTE: the ClassWizard will add DDX and DDV calls here\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(C109Keyboard, CDialog)\r
+ //{{AFX_MSG_MAP(C109Keyboard)\r
+ ON_WM_DESTROY()\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C109Keyboard message handlers\r
+\r
+BOOL C109Keyboard::OnInitDialog() \r
+{\r
+ CDialog::OnInitDialog();\r
+ \r
+ // TODO: Add extra initialization here\r
+ CString szWindowText;\r
+ CString szFor;\r
+ switch (m_HkeyType) {\r
+ case CURRENT_USER:\r
+ {\r
+ TCHAR szUserName[UNLEN + 1] = {'0'};\r
+ DWORD nSize = UNLEN + 1;\r
+ if (GetUserName(szUserName, &nSize)) {\r
+ szFor.Format(IDS_FOR, szUserName);\r
+ } else {\r
+ szFor.LoadString(IDS_FOR_LOGGED_ON_USER);\r
+ }\r
+ }\r
+ break;\r
+ case LOCAL_MACHINE:\r
+ szFor.LoadString(IDS_FOR_ANY_USER);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ this->GetWindowText(szWindowText);\r
+ this->SetWindowText(szWindowText + szFor);\r
+\r
+ m_ToolTip.Create(this, TTS_ALWAYSTIP | TTS_NOPREFIX);\r
+ m_ToolTip.SetMaxTipWidth(0x100); // Enable multiline\r
+\r
+ CProfile::LoadScanCodeMap(m_HkeyType);\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (!GetDlgItem(KeyboardLayouts[i].nBaseControlID)\r
+ || !GetDlgItem(KeyboardLayouts[i].nCurrentControlID)) {\r
+ continue;\r
+ }\r
+\r
+ KeyboardLayouts[i].pBaseKey = new CKey(KeyboardLayouts[i].nBaseControlID, NORMAL_KEY, m_HkeyType);\r
+ KeyboardLayouts[i].pBaseKey->SubclassDlgItem(KeyboardLayouts[i].nBaseControlID, this);\r
+ m_ToolTip.AddTool(GetDlgItem(KeyboardLayouts[i].nBaseControlID), CProfile::GetToolTipID(KeyboardLayouts[i].nToolTipID));\r
+\r
+ KeyboardLayouts[i].pCurrentKey = new CKey(KeyboardLayouts[i].nCurrentControlID, ORIGINAL_KEY, m_HkeyType);\r
+ KeyboardLayouts[i].pCurrentKey->SubclassDlgItem(KeyboardLayouts[i].nCurrentControlID, this);\r
+ m_ToolTip.AddTool(GetDlgItem(KeyboardLayouts[i].nCurrentControlID), CProfile::GetToolTipID(KeyboardLayouts[i].nToolTipID));\r
+\r
+ ScanCode_t current = {'\0'};\r
+ if (CProfile::GetScanCodeMap(m_HkeyType, KeyboardLayouts[i].scancode, ¤t)) {\r
+ KeyboardLayouts[i].pCurrentKey->SetKeyType(REMAPPED_KEY);\r
+\r
+ CString szWindowText;\r
+ GetDlgItem(CProfile::GetBaseControlID(current))->GetWindowText(szWindowText);\r
+ GetDlgItem(KeyboardLayouts[i].nCurrentControlID)->SetWindowText(szWindowText);\r
+\r
+ KeyboardLayout_t *pKeyboardLayout = CProfile::GetKeyboardLayouts(CProfile::GetBaseControlID(current));\r
+ if (pKeyboardLayout) {\r
+ m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pKeyboardLayout->nToolTipID), GetDlgItem(KeyboardLayouts[i].nCurrentControlID));\r
+ }\r
+ }\r
+ }\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void C109Keyboard::OnOK() \r
+{\r
+ // TODO: Add extra validation here\r
+ if (CProfile::LostKeyWarning(m_HkeyType) != IDCANCEL) {\r
+ CProfile::SaveScanCodeMap(m_HkeyType);\r
+\r
+ CDialog::OnOK();\r
+ }\r
+}\r
+\r
+void C109Keyboard::OnDestroy() \r
+{\r
+ CDialog::OnDestroy();\r
+\r
+ // TODO: Add your message handler code here\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (!GetDlgItem(KeyboardLayouts[i].nBaseControlID)\r
+ || !GetDlgItem(KeyboardLayouts[i].nCurrentControlID)) {\r
+ continue;\r
+ }\r
+\r
+ if (KeyboardLayouts[i].pBaseKey) {\r
+ delete KeyboardLayouts[i].pBaseKey;\r
+ KeyboardLayouts[i].pBaseKey = NULL;\r
+ }\r
+ if (KeyboardLayouts[i].pCurrentKey) {\r
+ delete KeyboardLayouts[i].pCurrentKey;\r
+ KeyboardLayouts[i].pCurrentKey = NULL;\r
+ }\r
+ }\r
+}\r
+\r
+BOOL C109Keyboard::PreTranslateMessage(MSG *const pMsg) \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ switch (pMsg->message) {\r
+ case WM_LBUTTONDOWN:\r
+ case WM_LBUTTONUP:\r
+ case WM_MOUSEMOVE:\r
+ m_ToolTip.RelayEvent(pMsg);\r
+ break;\r
+ }\r
+\r
+ return CDialog::PreTranslateMessage(pMsg);\r
+}\r
--- /dev/null
+#if !defined(AFX_109KEYBOARD_H__269D3317_3B74_469E_8C53_49EE2D785965__INCLUDED_)\r
+#define AFX_109KEYBOARD_H__269D3317_3B74_469E_8C53_49EE2D785965__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include "Key.h"\r
+\r
+// 109Keyboard.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// C109Keyboard dialog\r
+\r
+class C109Keyboard : public CDialog\r
+{\r
+// Construction\r
+public:\r
+ CToolTipCtrl m_ToolTip;\r
+ C109Keyboard(HKEY_TYPE hkey_type, CWnd* pParent = NULL); // standard constructor\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(C109Keyboard)\r
+ enum { IDD = IDD_109KEYBOARD };\r
+ // NOTE: the ClassWizard will add data members here\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(C109Keyboard)\r
+ public:\r
+ virtual BOOL PreTranslateMessage(MSG* pMsg);\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(C109Keyboard)\r
+ virtual BOOL OnInitDialog();\r
+ virtual void OnOK();\r
+ afx_msg void OnDestroy();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ HKEY_TYPE m_HkeyType;\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_109KEYBOARD_H__269D3317_3B74_469E_8C53_49EE2D785965__INCLUDED_)\r
--- /dev/null
+(fset 'sample-hello-world "Hello World!")\r
+(fset 'sample-isprint "_ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~_")\r
+(fset 'sample-forward-char-next-line "\C-f\C-n")\r
+(fset 'sample-foobar [?b ?a ?r home ?f ?o ?o ?\C-e])\r
+(fset 'sample-find "\Ctrl+F")\r
+(fset 'sample-desktop "\Win+D")\r
+(fset 'sample-mkdir [?\Alt+F ?w ?f])\r
+(fset 'sample-cycle-items [?\Alt+escape])\r
+(fset 'sample-cycle-items-inversely [?\Alt+S-escape])\r
+(fset 'sample-backward-kill-line "\C-0\C-k")\r
+(fset 'sample-calc [?\M-x ?c ?a ?l ?c return])\r
+(fset 'sample-notepad [?\M-x ?C ?: ?\\ ?W ?I ?N ?D ?O ?W ?S ?\\ ?s ?y ?s ?t ?e ?m ?3 ?2 ?\\ ?n ?o ?t ?e ?p ?a ?d return])\r
+\r
+; Supported Modifiers List\r
+;\r
+; C-\r
+; M-\r
+; S-\r
+; Ctrl+\r
+; Alt+\r
+; Win+\r
+\r
+; Supported Control Keys List\r
+;\r
+;(fset 'sample-break [break])\r
+;(fset 'sample-backspace [backspace])\r
+;(fset 'sample-tab [tab])\r
+;(fset 'sample-return [return])\r
+;(fset 'sample-capslock [capslock])\r
+;(fset 'sample-romaji [kana])\r
+;(fset 'sample-hiragana [kanji])\r
+;(fset 'sample-escape [escape])\r
+;(fset 'sample-convert [convert])\r
+;(fset 'sample-nonconvert [nonconvert])\r
+;(fset 'sample-space [? ])\r
+;(fset 'sample-pageup [prior])\r
+;(fset 'sample-pagedown [next])\r
+;(fset 'sample-end [end])\r
+;(fset 'sample-home [home])\r
+;(fset 'sample-left [left])\r
+;(fset 'sample-up [up])\r
+;(fset 'sample-right [right])\r
+;(fset 'sample-down [down])\r
+;(fset 'sample-select [select])\r
+;(fset 'sample-print [print])\r
+;(fset 'sample-execute [execute])\r
+;(fset 'sample-insert [insert])\r
+;(fset 'sample-delete [delete])\r
+;(fset 'sample-left-windows-key [lwindow])\r
+;(fset 'sample-right-windows-key [rwindow])\r
+;(fset 'sample-application-key [apps])\r
+;(fset 'sample-sleep [sleep])\r
+;(fset 'sample-kp-0 [kp-0])\r
+;(fset 'sample-kp-1 [kp-1])\r
+;(fset 'sample-kp-2 [kp-2])\r
+;(fset 'sample-kp-3 [kp-3])\r
+;(fset 'sample-kp-4 [kp-4])\r
+;(fset 'sample-kp-5 [kp-5])\r
+;(fset 'sample-kp-6 [kp-6])\r
+;(fset 'sample-kp-7 [kp-7])\r
+;(fset 'sample-kp-8 [kp-8])\r
+;(fset 'sample-kp-9 [kp-9])\r
+;(fset 'sample-kp-multiply [kp-multiply])\r
+;(fset 'sample-kp-add [kp-add])\r
+;(fset 'sample-kp-subtract [kp-subtract])\r
+;(fset 'sample-kp-decimal [kp-decimal])\r
+;(fset 'sample-kp-devide [kp-divide])\r
+;(fset 'sample-f1 [f1])\r
+;(fset 'sample-f2 [f2])\r
+;(fset 'sample-f3 [f3])\r
+;(fset 'sample-f4 [f4])\r
+;(fset 'sample-f5 [f5])\r
+;(fset 'sample-f6 [f6])\r
+;(fset 'sample-f7 [f7])\r
+;(fset 'sample-f8 [f8])\r
+;(fset 'sample-f9 [f9])\r
+;(fset 'sample-f10 [f10])\r
+;(fset 'sample-f11 [f11])\r
+;(fset 'sample-f12 [f12])\r
+;(fset 'sample-f13 [f13])\r
+;(fset 'sample-f14 [f14])\r
+;(fset 'sample-f15 [f15])\r
+;(fset 'sample-f16 [f16])\r
+;(fset 'sample-f17 [f17])\r
+;(fset 'sample-f18 [f18])\r
+;(fset 'sample-f19 [f19])\r
+;(fset 'sample-f20 [f20])\r
+;(fset 'sample-f21 [f21])\r
+;(fset 'sample-f22 [f22])\r
+;(fset 'sample-f23 [f23])\r
+;(fset 'sample-f24 [f24])\r
+;(fset 'sample-kp-numlock [kp-numlock])\r
+;(fset 'sample-scrolllock [scroll])\r
+;(fset 'sample-browser-back [browser-back])\r
+;(fset 'sample-browser-forward [browser-forward])\r
+;(fset 'sample-browser-refresh [browser-refresh])\r
+;(fset 'sample-browser-stop [browser-stop])\r
+;(fset 'sample-browser-search [browser-search])\r
+;(fset 'sample-browser-favorites [browser-favorites])\r
+;(fset 'sample-browser-home [browser-home])\r
+;(fset 'sample-volume-mute [volume-mute])\r
+;(fset 'sample-volume-down [volume-down])\r
+;(fset 'sample-volume-up [volume-up])\r
+;(fset 'sample-media-next-track [media-next-track])\r
+;(fset 'sample-media-prev-track [media-prev-track])\r
+;(fset 'sample-media-stop [media-stop])\r
+;(fset 'sample-media-play-pause [media-play-pause])\r
+;(fset 'sample-launch-mail [launch-mail])\r
+;(fset 'sample-launch-media-select [launch-media-select])\r
+;(fset 'sample-launch-1 [launch-1])\r
+;(fset 'sample-launch-2 [launch-2])\r
--- /dev/null
+// DotXkeymacs.cpp: implementation of the CDotXkeymacs class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include <direct.h>\r
+#include <Shlwapi.h>\r
+#include "xkeymacs.h"\r
+#include "DotXkeymacs.h"\r
+\r
+#ifdef _DEBUG\r
+#undef THIS_FILE\r
+static char THIS_FILE[]=__FILE__;\r
+#define new DEBUG_NEW\r
+#endif\r
+\r
+#pragma data_seg(".xkmcs")\r
+ CObList CDotXkeymacs::m_oFunctionDefinition;\r
+ int CDotXkeymacs::m_nIndex[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+ const TCHAR CDotXkeymacs::m_szExt[] = _T("xkeymacs");\r
+#pragma data_seg()\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CDotXkeymacs::CDotXkeymacs()\r
+{\r
+\r
+}\r
+\r
+CDotXkeymacs::~CDotXkeymacs()\r
+{\r
+\r
+}\r
+\r
+void CDotXkeymacs::Load(LPCTSTR lpszFileName)\r
+{\r
+ CStdioFile oDotXkeymacs;\r
+ if (oDotXkeymacs.Open(lpszFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead | CFile::shareDenyWrite | CFile::typeText)) {\r
+ CString szRead;\r
+ while (oDotXkeymacs.ReadString(szRead)) {\r
+ if (IsFunctionDefinition(szRead)) {\r
+ CFunctionDefinition *pFunctionDefinition = new CFunctionDefinition(GetSymbol(szRead), GetDefinition(szRead));\r
+\r
+ // Delete a listed definition which has the same symbol as a new one.\r
+ for (POSITION currentPos, pos = m_oFunctionDefinition.GetHeadPosition(); (currentPos = pos) != NULL; ) {\r
+ CFunctionDefinition *pCurrentDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetNext(pos);\r
+\r
+ if (pCurrentDefinition->GetSymbol() == pFunctionDefinition->GetSymbol()) {\r
+ CFunctionDefinition *pOverwritten = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(currentPos);\r
+ m_oFunctionDefinition.RemoveAt(currentPos);\r
+ delete pOverwritten;\r
+ }\r
+ }\r
+\r
+ m_oFunctionDefinition.AddTail((CObject *)pFunctionDefinition);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void CDotXkeymacs::LoadMainData(LPCTSTR lpszFileName)\r
+{\r
+ TCHAR szModuleFileName[MAX_PATH] = {'\0'};\r
+ TCHAR szDrive[_MAX_DRIVE] = {'\0'};\r
+ TCHAR szDir[_MAX_DIR] = {'\0'};\r
+\r
+ if (GetModuleFileName(NULL, szModuleFileName, sizeof(szModuleFileName))) {\r
+ _tsplitpath(szModuleFileName, szDrive, szDir, NULL, NULL);\r
+ }\r
+\r
+ TCHAR szOldPath[MAX_PATH] = {'\0'}; // This path is used by XKeymacs 3.22 and earlier\r
+ _tmakepath(szOldPath, szDrive, szDir, lpszFileName, m_szExt);\r
+\r
+ PathAppend(szDir, _T("etc"));\r
+ TCHAR szEtc[MAX_PATH] = {'\0'};\r
+ _tmakepath(szEtc, szDrive, szDir, NULL, NULL);\r
+ (void)_tmkdir(szEtc); // make etc directory if needed\r
+\r
+ TCHAR szPath[MAX_PATH] = {'\0'};\r
+ _tmakepath(szPath, szDrive, szDir, lpszFileName, m_szExt);\r
+\r
+ if (_trename(szOldPath, szPath)) { // try to move old file as backup when rename returns an error because files exist in both directorys\r
+ TCHAR szBackupPath[MAX_PATH] = {'\0'};\r
+ TCHAR szBackupFlag[_MAX_FNAME] = _T("~");\r
+ _tmakepath(szBackupPath, szDrive, szDir, _tcscat(szBackupFlag, lpszFileName), m_szExt);\r
+ (void)_trename(szOldPath, szBackupPath); // do nothing when a backup file has existed already\r
+ }\r
+\r
+ Load(szPath);\r
+}\r
+\r
+void CDotXkeymacs::LoadUserData(LPCTSTR lpszFileName)\r
+{\r
+ TCHAR szPath[MAX_PATH] = {'\0'};\r
+ if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_APPDATA, TRUE)) {\r
+ _tmakepath(szPath, NULL, szPath, lpszFileName, m_szExt);\r
+ Load(szPath);\r
+ }\r
+}\r
+\r
+void CDotXkeymacs::Load()\r
+{\r
+ static LPCTSTR szFileName = _T("dot");\r
+\r
+ ClearFunctionDefinition();\r
+ LoadMainData(GetLanguage()); // just for localization\r
+ LoadMainData(szFileName);\r
+ LoadUserData(szFileName); // overwrite main data\r
+}\r
+\r
+BOOL CDotXkeymacs::IsFunctionDefinition(CString szFunctionDefinition)\r
+{\r
+ return !_tcsncmp(szFunctionDefinition, CString(MAKEINTRESOURCE(IDS_FSET)), _tcslen(CString(MAKEINTRESOURCE(IDS_FSET))));\r
+}\r
+\r
+CString CDotXkeymacs::GetSymbol(CString szFunctionDefinition)\r
+{\r
+ const int nFirst = _tcslen(CString(MAKEINTRESOURCE(IDS_FSET))) + _tcslen(_T("'"));\r
+ return szFunctionDefinition.Mid(nFirst, szFunctionDefinition.Find(_T(' '), nFirst) - nFirst);\r
+}\r
+\r
+CString CDotXkeymacs::GetDefinition(CString szFunctionDefinition)\r
+{\r
+ const int nFirst = szFunctionDefinition.Find(_T(' '), _tcslen(CString(MAKEINTRESOURCE(IDS_FSET)))) + _tcslen(_T("'"));\r
+ return szFunctionDefinition.Mid(nFirst, szFunctionDefinition.GetLength() - nFirst - _tcslen(_T(")")));\r
+}\r
+\r
+void CDotXkeymacs::ClearFunctionDefinition()\r
+{\r
+ while (!m_oFunctionDefinition.IsEmpty()) {\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetHead();\r
+ delete pFunctionDefinition;\r
+ pFunctionDefinition = NULL;\r
+ m_oFunctionDefinition.RemoveHead();\r
+ }\r
+ memset(m_nIndex, -1, sizeof(m_nIndex));\r
+}\r
+\r
+int CDotXkeymacs::GetFunctionNumber()\r
+{\r
+ return m_oFunctionDefinition.GetCount();\r
+}\r
+\r
+CString CDotXkeymacs::GetFunctionSymbol(int nIndex)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return CString();\r
+ }\r
+\r
+ if (CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex))) {\r
+ return pFunctionDefinition->GetSymbol();\r
+ }\r
+ return CString();\r
+}\r
+\r
+CString CDotXkeymacs::GetFunctionDefinition(int nIndex)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return CString();\r
+ }\r
+\r
+ if (CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex))) {\r
+ return pFunctionDefinition->GetDefinition();\r
+ }\r
+ return CString();\r
+}\r
+\r
+CString CDotXkeymacs::GetFunctionDefinition(CString szSymbol)\r
+{\r
+ for (POSITION pos = m_oFunctionDefinition.GetHeadPosition(); pos;) {\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetNext(pos);\r
+ if (!pFunctionDefinition->GetSymbol().Compare(szSymbol)) {\r
+ return pFunctionDefinition->GetDefinition();\r
+ }\r
+ }\r
+\r
+ return CString(_T("Undefined Command"));\r
+}\r
+\r
+void CDotXkeymacs::ClearKey(int nIndex, int nApplicationID)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return;\r
+ }\r
+\r
+ if (CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex))) {\r
+ pFunctionDefinition->ClearKey(nApplicationID);\r
+ }\r
+\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ if (m_nIndex[nApplicationID][nCommandType][nKey] == nIndex) {\r
+ m_nIndex[nApplicationID][nCommandType][nKey] = -1;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void CDotXkeymacs::SetKey(int nIndex, int nApplicationID, int nCommandType, int nKey)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return;\r
+ }\r
+\r
+ if (CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex))) {\r
+ pFunctionDefinition->SetKey(nApplicationID, nCommandType, nKey);\r
+ m_nIndex[nApplicationID][nCommandType][nKey] = nIndex;\r
+ }\r
+}\r
+\r
+int CDotXkeymacs::GetIndex(CString szSymbol)\r
+{\r
+ int nIndex = 0;\r
+ for (nIndex = 0; nIndex < m_oFunctionDefinition.GetCount(); ++nIndex) {\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex));\r
+ if (!pFunctionDefinition->GetSymbol().Compare(szSymbol)) {\r
+ return nIndex;\r
+ }\r
+ }\r
+ return -1;\r
+}\r
+\r
+int CDotXkeymacs::GetKeyNumber(int nIndex, int nApplicationID)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return 0;\r
+ }\r
+\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex));\r
+ return pFunctionDefinition->GetKeyNumber(nApplicationID);\r
+}\r
+\r
+void CDotXkeymacs::GetKey(int nIndex, int nApplicationID, int nKeyID, int *pCommandType, int *pKey)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return;\r
+ }\r
+\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex));\r
+ pFunctionDefinition->GetKey(nApplicationID, nKeyID, pCommandType, pKey);\r
+}\r
+\r
+int CDotXkeymacs::GetIndex(int nApplicationID, int nCommandType, int nKey)\r
+{\r
+ return m_nIndex[nApplicationID][nCommandType][nKey];\r
+}\r
+\r
+void CDotXkeymacs::RemoveKey(const int nIndex, const int nApplicationID, const int nCommandType, const int nKey)\r
+{\r
+ if (nIndex < 0 || m_oFunctionDefinition.GetCount() <= nIndex) {\r
+ return;\r
+ }\r
+\r
+ CFunctionDefinition *pFunctionDefinition = (CFunctionDefinition *)m_oFunctionDefinition.GetAt(m_oFunctionDefinition.FindIndex(nIndex));\r
+ if (pFunctionDefinition) {\r
+ pFunctionDefinition->RemoveKey(nApplicationID, nCommandType, nKey);\r
+ }\r
+}\r
+\r
+void CDotXkeymacs::RemoveKey(const int nApplicationID, const int nCommandType, const int nKey)\r
+{\r
+ for (int nIndex = 0; nIndex < m_oFunctionDefinition.GetCount(); ++nIndex) {\r
+ RemoveKey(nIndex, nApplicationID, nCommandType, nKey);\r
+ }\r
+}\r
+\r
+LPCTSTR CDotXkeymacs::GetLanguage()\r
+{\r
+ LPCTSTR szLanguage = _T("unknown");\r
+\r
+ TCHAR lptstrFilename[MAX_PATH] = {'\0'};\r
+ _tmakepath(lptstrFilename, NULL, _tgetenv(_T("windir")), _T("explorer"), _T("exe"));\r
+ DWORD dwLen = GetFileVersionInfoSize(lptstrFilename, NULL);\r
+\r
+ if (dwLen) {\r
+ LPVOID lpData = malloc(dwLen);\r
+\r
+ if (lpData && GetFileVersionInfo(lptstrFilename, NULL, dwLen, lpData)) {\r
+ Translate_t *lpTranslate;\r
+ UINT cbTranslate = 0;\r
+\r
+ if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &cbTranslate) && sizeof(Translate_t) <= cbTranslate) {\r
+ for (int i = 0; i < sizeof(Languages)/sizeof(Languages[0]); ++i) {\r
+ if (Languages[i].wLanguage == lpTranslate->wLanguage) {\r
+ szLanguage = Languages[i].szLanguage;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ free(lpData);\r
+ }\r
+\r
+ return szLanguage;\r
+}\r
--- /dev/null
+// DotXkeymacs.h: interface for the CDotXkeymacs class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_DOTXKEYMACS_H__0538C427_5733_47DA_B2C6_2E957EEFC59D__INCLUDED_)\r
+#define AFX_DOTXKEYMACS_H__0538C427_5733_47DA_B2C6_2E957EEFC59D__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+typedef struct Language\r
+{\r
+ WORD wLanguage;\r
+ LPCTSTR szLanguage;\r
+} Language_t;\r
+\r
+static const Language_t Languages[] = {\r
+ { 0x0001, _T("Arabic") },\r
+ { 0x0004, _T("Chinese") },\r
+ { 0x0009, _T("English") },\r
+ { 0x0401, _T("Arabic (Saudi Arabia)") },\r
+ { 0x0402, _T("Bulgarian") },\r
+ { 0x0403, _T("Catalan") },\r
+ { 0x0404, _T("Chinese (Taiwan)") },\r
+ { 0x0405, _T("Czech") },\r
+ { 0x0406, _T("Danish") },\r
+ { 0x0407, _T("German (Germany)") },\r
+ { 0x0408, _T("Greek") },\r
+ { 0x0409, _T("English (United States)") },\r
+ { 0x040A, _T("Spanish (Traditional Sort)") },\r
+ { 0x040B, _T("Finnish") },\r
+ { 0x040C, _T("French (France)") },\r
+ { 0x040D, _T("Hebrew") },\r
+ { 0x040E, _T("Hungarian") },\r
+ { 0x040F, _T("Icelandic") },\r
+ { 0x0410, _T("Italian (Italy)") },\r
+ { 0x0411, _T("Japanese") },\r
+ { 0x0412, _T("Korean") },\r
+ { 0x0413, _T("Dutch (Netherlands)") },\r
+ { 0x0414, _T("Norwegian (Bokmal)") },\r
+ { 0x0415, _T("Polish") },\r
+ { 0x0416, _T("Portuguese (Brazil)") },\r
+ { 0x0417, _T("Rhaeto-Romanic") },\r
+ { 0x0418, _T("Romanian") },\r
+ { 0x0419, _T("Russian") },\r
+ { 0x041A, _T("Croatian") },\r
+ { 0x041B, _T("Slovak") },\r
+ { 0x041C, _T("Albanian") },\r
+ { 0x041D, _T("Swedish") },\r
+ { 0x041E, _T("Thai") },\r
+ { 0x041F, _T("Turkish") },\r
+ { 0x0420, _T("Urdu") },\r
+ { 0x0421, _T("Indonesian") },\r
+ { 0x0422, _T("Ukrainian") },\r
+ { 0x0423, _T("Belarusian") },\r
+ { 0x0424, _T("Slovenian") },\r
+ { 0x0425, _T("Estonian") },\r
+ { 0x0426, _T("Latvian") },\r
+ { 0x0427, _T("Lithuanian") },\r
+ { 0x0428, _T("Tajik") },\r
+ { 0x0429, _T("Farsi") },\r
+ { 0x042A, _T("Vietnamese") },\r
+ { 0x042B, _T("Armenian") },\r
+ { 0x042C, _T("Azeri (Latin)") },\r
+ { 0x042D, _T("Basque") },\r
+ { 0x042E, _T("Sorbian") },\r
+ { 0x042F, _T("Macedonian (FYROM)") },\r
+ { 0x0430, _T("Sutu") },\r
+ { 0x0431, _T("Tsonga") },\r
+ { 0x0432, _T("Tswana") },\r
+ { 0x0434, _T("Xhosa") },\r
+ { 0x0435, _T("Zulu") },\r
+ { 0x0436, _T("Afrikaans") },\r
+ { 0x0437, _T("Georgian") },\r
+ { 0x0438, _T("Faeroese") },\r
+ { 0x0439, _T("Hindi") },\r
+ { 0x043A, _T("Maltese") },\r
+ { 0x043C, _T("Gaelic") },\r
+ { 0x043D, _T("Yiddish") },\r
+ { 0x043E, _T("Malay (Malaysia)") },\r
+ { 0x043F, _T("Kazakh") },\r
+ { 0x0440, _T("Kyrgyz") },\r
+ { 0x0441, _T("Swahili") },\r
+ { 0x0442, _T("Turkmen") },\r
+ { 0x0443, _T("Uzbek (Latin)") },\r
+ { 0x0444, _T("Tatar") },\r
+ { 0x0445, _T("Bengali") },\r
+ { 0x0446, _T("Punjabi") },\r
+ { 0x0447, _T("Gujarati") },\r
+ { 0x0448, _T("Oriya") },\r
+ { 0x0449, _T("Tamil") },\r
+ { 0x044A, _T("Telugu") },\r
+ { 0x044B, _T("Kannada") },\r
+ { 0x044C, _T("Malayalam") },\r
+ { 0x044D, _T("Assamese") },\r
+ { 0x044E, _T("Marathi") },\r
+ { 0x044F, _T("Sanskrit") },\r
+ { 0x0450, _T("Mongolian") },\r
+ { 0x0456, _T("Galician") },\r
+ { 0x0457, _T("Konkani") },\r
+ { 0x0458, _T("Manipuri") },\r
+ { 0x0459, _T("Sindhi") },\r
+ { 0x045A, _T("Syriac") },\r
+ { 0x045B, _T("Sinhalese") },\r
+ { 0x045C, _T("Cherokee") },\r
+ { 0x045D, _T("Inuktitut") },\r
+ { 0x045E, _T("Amharic") },\r
+ { 0x045F, _T("Tamazight (Berber/Arabic)") },\r
+ { 0x0460, _T("Kashmiri (Arabic)") },\r
+ { 0x0461, _T("Nepali") },\r
+ { 0x0462, _T("Frisian") },\r
+ { 0x0463, _T("Pashto") },\r
+ { 0x0464, _T("Filipino") },\r
+ { 0x0465, _T("Dhivehi") },\r
+ { 0x0466, _T("Edo") },\r
+ { 0x0467, _T("Fulfulde") },\r
+ { 0x0468, _T("Hausa") },\r
+ { 0x0469, _T("Ibibio") },\r
+ { 0x046A, _T("Yoruba") },\r
+ { 0x0470, _T("Igbo") },\r
+ { 0x0471, _T("Kanuri") },\r
+ { 0x0472, _T("Oromo") },\r
+ { 0x0473, _T("Tigrigna (Ethiopia)") },\r
+ { 0x0475, _T("Hawaiian") },\r
+ { 0x0476, _T("Latin") },\r
+ { 0x0477, _T("Somali") },\r
+ { 0x0478, _T("Yi") },\r
+ { 0x0801, _T("Arabic (Iraq)") },\r
+ { 0x0804, _T("Chinese (PRC)") },\r
+ { 0x0807, _T("German (Switzerland)") },\r
+ { 0x0809, _T("English (United Kingdom)") },\r
+ { 0x080A, _T("Spanish (Mexico)") },\r
+ { 0x080C, _T("French (Belgium)") },\r
+ { 0x0810, _T("Italian (Switzerland)") },\r
+ { 0x0813, _T("Dutch (Belgium)") },\r
+ { 0x0814, _T("Norwegian (Nynorsk)") },\r
+ { 0x0816, _T("Portuguese (Portugal)") },\r
+ { 0x0818, _T("Romanian (Moldova)") },\r
+ { 0x0819, _T("Russian (Moldova)") },\r
+ { 0x081A, _T("Serbian (Latin)") },\r
+ { 0x081D, _T("Swedish (Finland)") },\r
+ { 0x082C, _T("Azeri (Cyrillic)") },\r
+ { 0x0843, _T("Uzbek (Cyrillic)") },\r
+ { 0x085F, _T("Tamazight (Latin)") },\r
+ { 0x0873, _T("Tigrigna (Eritrea)") },\r
+ { 0x0C01, _T("Arabic (Egypt)") },\r
+ { 0x0C04, _T("Chinese (Hong Kong SAR)") },\r
+ { 0x0C07, _T("German (Austria)") },\r
+ { 0x0C09, _T("English (Australia)") },\r
+ { 0x0C0A, _T("Spanish (International Sort)") },\r
+ { 0x0C0C, _T("French (Canada)") },\r
+ { 0x0C1A, _T("Serbian (Cyrillic)") },\r
+ { 0x1001, _T("Arabic (Libya)") },\r
+ { 0x1004, _T("Chinese (Singapore)") },\r
+ { 0x1007, _T("German (Luxembourg)") },\r
+ { 0x1009, _T("English (Canada)") },\r
+ { 0x100A, _T("Spanish (Guatemala)") },\r
+ { 0x100C, _T("French (Switzerland)") },\r
+ { 0x1401, _T("Arabic (Algeria)") },\r
+ { 0x1407, _T("German (Liechtenstein)") },\r
+ { 0x1409, _T("English (New Zealand)") },\r
+ { 0x140A, _T("Spanish (Costa Rica)") },\r
+ { 0x140C, _T("French (Luxembourg)") },\r
+ { 0x1801, _T("Arabic (Morocco)") },\r
+ { 0x1809, _T("English (Ireland)") },\r
+ { 0x180A, _T("Spanish (Panama)") },\r
+ { 0x1C01, _T("Arabic (Tunisia)") },\r
+ { 0x1C09, _T("English (South Africa)") },\r
+ { 0x1C0A, _T("Spanish (Dominican Republic)") },\r
+ { 0x2001, _T("Arabic (Oman)") },\r
+ { 0x2009, _T("English (Jamaica)") },\r
+ { 0x200A, _T("Spanish (Venezuela)") },\r
+ { 0x2401, _T("Arabic (Yemen)") },\r
+ { 0x240A, _T("Spanish (Colombia)") },\r
+ { 0x2801, _T("Arabic (Syria)") },\r
+ { 0x2809, _T("English (Belize)") },\r
+ { 0x280A, _T("Spanish (Peru)") },\r
+ { 0x2C01, _T("Arabic (Jordan)") },\r
+ { 0x2C09, _T("English (Trinidad)") },\r
+ { 0x2C0A, _T("Spanish (Argentina)") },\r
+ { 0x3001, _T("Arabic (Lebanon)") },\r
+ { 0x300A, _T("Spanish (Ecuador)") },\r
+ { 0x3401, _T("Arabic (Kuwait)") },\r
+ { 0x340A, _T("Spanish (Chile)") },\r
+ { 0x3801, _T("Arabic (U.A.E.)") },\r
+ { 0x380A, _T("Spanish (Uruguay)") },\r
+ { 0x3C01, _T("Arabic (Bahrain)") },\r
+ { 0x3C0A, _T("Spanish (Paraguay)") },\r
+ { 0x4001, _T("Arabic (Qatar)") },\r
+ { 0x400A, _T("Spanish (Bolivia)") },\r
+ { 0x440A, _T("Spanish (El Salvador)") },\r
+ { 0x480A, _T("Spanish (Honduras)") },\r
+ { 0x4C0A, _T("Spanish (Nicaragua)") },\r
+ { 0x500A, _T("Spanish (Puerto Rico)") },\r
+};\r
+ \r
+class CDotXkeymacs \r
+{\r
+public:\r
+ static void RemoveKey(const int nApplicationID, const int nCommandType, const int nKey);\r
+ static void RemoveKey(const int nIndex, const int nApplicationID, const int nCommandType, const int nKey);\r
+ static CString GetFunctionDefinition(int nIndex);\r
+ static int GetIndex(int nApplicationID, int nCommandType, int nKey);\r
+ static void GetKey(int nIndex, int nApplicationID, int nKeyID, int *pCommandType, int *pKey);\r
+ static int GetKeyNumber(int nIndex, int nApplicationID);\r
+ static int GetIndex(CString szSymbol);\r
+ static void SetKey(int nIndex, int nApplicationID, int nCommandType, int nKey);\r
+ static void ClearKey(int nIndex, int nApplicationID);\r
+ static CString GetFunctionDefinition(CString szSymbol);\r
+ static CString GetFunctionSymbol(int nIndex);\r
+ static int GetFunctionNumber();\r
+ static void Load();\r
+ CDotXkeymacs();\r
+ virtual ~CDotXkeymacs();\r
+\r
+private:\r
+ static LPCTSTR GetLanguage();\r
+ static const TCHAR m_szExt[];\r
+ static int m_nIndex[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
+ static void ClearFunctionDefinition();\r
+ static CString GetDefinition(CString szFunctionDefinition);\r
+ static CString GetSymbol(CString szFunctionDefinition);\r
+ static BOOL IsFunctionDefinition(CString szFunctionDefinition);\r
+ static CObList m_oFunctionDefinition;\r
+ static void LoadUserData(LPCTSTR lpszFileName);\r
+ static void LoadMainData(LPCTSTR lpszFileName);\r
+ static void Load(LPCTSTR lpszFileName);\r
+};\r
+\r
+#endif // !defined(AFX_DOTXKEYMACS_H__0538C427_5733_47DA_B2C6_2E957EEFC59D__INCLUDED_)\r
--- /dev/null
+// Key.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "Key.h"\r
+#include "Profile.h"\r
+#include "104Keyboard.h"\r
+#include "109Keyboard.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CKey\r
+\r
+CKey::CKey(const int nKey, const int nKeyType, const HKEY_TYPE hkeyType)\r
+{\r
+ m_nKey = nKey;\r
+ m_nKeyType = nKeyType;\r
+ m_nDroppableKey = 0;\r
+ m_nDroppableKeyType = NORMAL_KEY;\r
+ m_HkeyType = hkeyType;\r
+}\r
+\r
+CKey::~CKey()\r
+{\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CKey, CButton)\r
+ //{{AFX_MSG_MAP(CKey)\r
+ ON_WM_LBUTTONDOWN()\r
+ ON_WM_LBUTTONUP()\r
+ ON_WM_MOUSEMOVE()\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CKey message handlers\r
+\r
+\r
+\r
+void CKey::DrawItem(const LPDRAWITEMSTRUCT lpDrawItemStruct) \r
+{\r
+ // TODO: Add your code to draw the specified item\r
+ static const COLORREF BLACK = RGB(0, 0, 0);\r
+ static const COLORREF RED = RGB(255, 0, 0);\r
+ static const COLORREF BLUE = RGB(0, 0, 255);\r
+\r
+ COLORREF textcolor = BLACK;\r
+ UINT nEdge = EDGE_RAISED;\r
+ CRect textrect;\r
+ textrect.CopyRect(&lpDrawItemStruct->rcItem);\r
+\r
+ switch (m_nKeyType) {\r
+ case NORMAL_KEY:\r
+ nEdge = EDGE_RAISED;\r
+ textcolor = BLACK;\r
+ break;\r
+ case PUSHED_KEY:\r
+ nEdge = EDGE_SUNKEN;\r
+ textcolor = BLACK;\r
+ textrect.OffsetRect(1, 1);\r
+ break;\r
+ case DROPPABLE_KEY:\r
+ nEdge = EDGE_SUNKEN;\r
+ textcolor = BLUE;\r
+ textrect.OffsetRect(1, 1);\r
+ break;\r
+ case ORIGINAL_KEY:\r
+ nEdge = EDGE_ETCHED;\r
+ textcolor = BLACK;\r
+ break;\r
+ case REMAPPED_KEY:\r
+ nEdge = EDGE_RAISED;\r
+ textcolor = RED;\r
+ break;\r
+ case REMAPPED_PUSHED_KEY:\r
+ nEdge = EDGE_SUNKEN;\r
+ textcolor = RED;\r
+ textrect.OffsetRect(1, 1);\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);\r
+ CRect buttonrect;\r
+ buttonrect.CopyRect(&lpDrawItemStruct->rcItem);\r
+\r
+ pDC->DrawEdge(buttonrect, nEdge, BF_RECT);\r
+ pDC->SetTextColor(textcolor);\r
+\r
+ CString szWindowText;\r
+ GetWindowText(szWindowText);\r
+\r
+ if (textcolor == RED) { // FW_BOLD\r
+ LOGFONT logfont;\r
+ GetObject(GetStockObject(DEFAULT_GUI_FONT), sizeof(logfont), &logfont);\r
+ logfont.lfWeight = FW_BOLD;\r
+\r
+ CFont font;\r
+ font.CreateFontIndirect(&logfont);\r
+\r
+ pDC->SelectObject(&font);\r
+ pDC->DrawText(szWindowText, textrect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);\r
+ pDC->SelectStockObject(DEFAULT_GUI_FONT);\r
+ } else { // FW_NORMAL\r
+ pDC->DrawText(szWindowText, textrect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);\r
+ }\r
+}\r
+\r
+void CKey::SetKeyType(const int nKeyType)\r
+{\r
+ if (m_nKeyType != nKeyType) {\r
+ m_nKeyType = nKeyType;\r
+ RedrawWindow();\r
+ }\r
+}\r
+\r
+int CKey::GetKeyType()\r
+{\r
+ return m_nKeyType;\r
+}\r
+\r
+void CKey::OnLButtonDown(const UINT nFlags, const CPoint point) \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ switch (m_nKeyType) {\r
+ case NORMAL_KEY:\r
+ SetKeyType(PUSHED_KEY);\r
+ CProfile::SetDraggingCursor();\r
+ break;\r
+ case REMAPPED_KEY:\r
+ SetKeyType(REMAPPED_PUSHED_KEY);\r
+ break;\r
+ }\r
+\r
+ CButton::OnLButtonDown(nFlags, point);\r
+}\r
+\r
+void CKey::OnLButtonUp(const UINT nFlags, const CPoint point) \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ if (m_nKeyType == PUSHED_KEY) {\r
+ SetKeyType(NORMAL_KEY);\r
+ }\r
+\r
+ if (m_nKeyType == REMAPPED_PUSHED_KEY) {\r
+ if (m_nKey == GetPointedKey(point)) {\r
+ KeyboardLayout_t *pKeyboardLayout = CProfile::GetKeyboardLayouts(m_nKey);\r
+ if (pKeyboardLayout) {\r
+ CString szWindowText;\r
+ GetParent()->GetDlgItem(pKeyboardLayout->nBaseControlID)->GetWindowText(szWindowText);\r
+ SetWindowText(szWindowText);\r
+\r
+ if (CProfile::Is106Keyboard()) {\r
+ ((C109Keyboard*)GetParent())->m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pKeyboardLayout->nToolTipID), this);\r
+ } else {\r
+ ((C104Keyboard*)GetParent())->m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pKeyboardLayout->nToolTipID), this);\r
+ }\r
+\r
+ ScanCodeMapping_t ScanCodeMapping = {{0, 0}, {pKeyboardLayout->scancode.nScanCode, pKeyboardLayout->scancode.nPrefixedScanCode}};\r
+ CProfile::SetScanCodeMap(m_HkeyType, ScanCodeMapping);\r
+ }\r
+ SetKeyType(ORIGINAL_KEY);\r
+ } else {\r
+ SetKeyType(REMAPPED_KEY);\r
+ }\r
+ }\r
+\r
+ int nPointedKey = GetPointedKey(point);\r
+ if (m_nDroppableKey && nPointedKey) {\r
+ if (m_nDroppableKey != nPointedKey) {\r
+ ((CKey*)GetParent()->GetDlgItem(m_nDroppableKey))->SetKeyType(m_nDroppableKeyType);\r
+ if (IsDroppableKey(nPointedKey)) {\r
+ m_nDroppableKey = nPointedKey;\r
+ } else {\r
+ m_nDroppableKey = 0;\r
+ }\r
+ }\r
+\r
+ if (m_nDroppableKey) {\r
+ KeyboardLayout_t *pKeyboardLayout = CProfile::GetKeyboardLayouts(m_nDroppableKey);\r
+ KeyboardLayout_t *pBaseKeyboardLayout = CProfile::GetKeyboardLayouts(m_nKey);\r
+ if (pKeyboardLayout && pBaseKeyboardLayout) {\r
+ CString szWindowText;\r
+ GetWindowText(szWindowText);\r
+ GetParent()->GetDlgItem(pKeyboardLayout->nCurrentControlID)->SetWindowText(szWindowText);\r
+\r
+ if (CProfile::Is106Keyboard()) {\r
+ ((C109Keyboard*)GetParent())->m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pBaseKeyboardLayout->nToolTipID), GetParent()->GetDlgItem(pKeyboardLayout->nCurrentControlID));\r
+ } else {\r
+ ((C104Keyboard*)GetParent())->m_ToolTip.UpdateTipText(CProfile::GetToolTipID(pBaseKeyboardLayout->nToolTipID), GetParent()->GetDlgItem(pKeyboardLayout->nCurrentControlID));\r
+ }\r
+\r
+ ((CKey*)GetParent()->GetDlgItem(pKeyboardLayout->nBaseControlID))->SetKeyType(NORMAL_KEY);\r
+ ((CKey*)GetParent()->GetDlgItem(pKeyboardLayout->nCurrentControlID))->SetKeyType(REMAPPED_KEY);\r
+\r
+ ScanCodeMapping_t ScanCodeMapping = {{pBaseKeyboardLayout->scancode.nScanCode, pBaseKeyboardLayout->scancode.nPrefixedScanCode}, \r
+ {pKeyboardLayout->scancode.nScanCode, pKeyboardLayout->scancode.nPrefixedScanCode}};\r
+ CProfile::SetScanCodeMap(m_HkeyType, ScanCodeMapping);\r
+ }\r
+ }\r
+ }\r
+\r
+ m_nDroppableKey = 0;\r
+ m_nDroppableKeyType = NORMAL_KEY;\r
+\r
+ CProfile::SetNormalCursor();\r
+\r
+ CButton::OnLButtonUp(nFlags, point);\r
+}\r
+\r
+int CKey::GetPointedKey(const CPoint point)\r
+{\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (!GetParent()->GetDlgItem(KeyboardLayouts[i].nBaseControlID)\r
+ || !GetParent()->GetDlgItem(KeyboardLayouts[i].nCurrentControlID)) {\r
+ continue;\r
+ }\r
+\r
+ CRect rButton;\r
+ GetParent()->GetDlgItem(KeyboardLayouts[i].nBaseControlID)->GetWindowRect(&rButton);\r
+ ScreenToClient(&rButton);\r
+ if (rButton.PtInRect(point)) {\r
+ return KeyboardLayouts[i].nBaseControlID;\r
+ }\r
+ GetParent()->GetDlgItem(KeyboardLayouts[i].nCurrentControlID)->GetWindowRect(&rButton);\r
+ ScreenToClient(&rButton);\r
+ if (rButton.PtInRect(point)) {\r
+ return KeyboardLayouts[i].nCurrentControlID;\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+void CKey::OnMouseMove(const UINT nFlags, const CPoint point) \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ if (nFlags & MK_LBUTTON) {\r
+ if (m_nKeyType == PUSHED_KEY) {\r
+ int nPointedKey = GetPointedKey(point);\r
+ if (nPointedKey) {\r
+ if (nPointedKey != m_nDroppableKey) {\r
+ if (m_nDroppableKey) {\r
+ ((CKey*)GetParent()->GetDlgItem(m_nDroppableKey))->SetKeyType(m_nDroppableKeyType);\r
+ CProfile::SetNoCursor();\r
+ }\r
+ if (IsDroppableKey(nPointedKey)) {\r
+ m_nDroppableKey = nPointedKey;\r
+ m_nDroppableKeyType = ((CKey*)GetParent()->GetDlgItem(m_nDroppableKey))->GetKeyType();\r
+ ((CKey*)GetParent()->GetDlgItem(m_nDroppableKey))->SetKeyType(DROPPABLE_KEY);\r
+ CProfile::SetDraggingCursor();\r
+ }\r
+ }\r
+ } else {\r
+ if (m_nDroppableKey) {\r
+ ((CKey*)GetParent()->GetDlgItem(m_nDroppableKey))->SetKeyType(m_nDroppableKeyType);\r
+ m_nDroppableKey = 0;\r
+ m_nDroppableKeyType = NORMAL_KEY;\r
+ CProfile::SetNoCursor();\r
+ }\r
+ }\r
+ }\r
+\r
+ if (m_nKeyType == REMAPPED_PUSHED_KEY) {\r
+ if (m_nKey != GetPointedKey(point)) {\r
+ SetKeyType(REMAPPED_KEY);\r
+ }\r
+ }\r
+ if (m_nKeyType == REMAPPED_KEY) {\r
+ if (m_nKey == GetPointedKey(point)) {\r
+ SetKeyType(REMAPPED_PUSHED_KEY);\r
+ }\r
+ }\r
+ }\r
+ \r
+ CButton::OnMouseMove(nFlags, point);\r
+}\r
+\r
+BOOL CKey::IsDroppableKey(const int nKey)\r
+{\r
+ if (m_nKeyType != PUSHED_KEY\r
+ || !nKey) {\r
+ return FALSE;\r
+ }\r
+\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (KeyboardLayouts[i].nBaseControlID != m_nKey) {\r
+ continue;\r
+ }\r
+\r
+ if (KeyboardLayouts[i].nBaseControlID == nKey\r
+ || KeyboardLayouts[i].nCurrentControlID == nKey) {\r
+ return FALSE;\r
+ }\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
+}\r
--- /dev/null
+#if !defined(AFX_KEY_H__509440FD_B54D_4C17_AAA1_C394820F4FB6__INCLUDED_)\r
+#define AFX_KEY_H__509440FD_B54D_4C17_AAA1_C394820F4FB6__INCLUDED_\r
+\r
+#include "Profile.h" // Added by ClassView\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// Key.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CKey window\r
+\r
+class CKey : public CButton\r
+{\r
+// Construction\r
+public:\r
+ CKey(int nKey = 0, int nKeyType = NORMAL_KEY, HKEY_TYPE hkeyType = CURRENT_USER);\r
+\r
+// Attributes\r
+public:\r
+\r
+// Operations\r
+public:\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(CKey)\r
+ public:\r
+ virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+public:\r
+ int GetKeyType();\r
+ void SetKeyType(int nKeyType);\r
+ virtual ~CKey();\r
+\r
+ // Generated message map functions\r
+protected:\r
+ //{{AFX_MSG(CKey)\r
+ afx_msg void OnLButtonDown(UINT nFlags, CPoint point);\r
+ afx_msg void OnLButtonUp(UINT nFlags, CPoint point);\r
+ afx_msg void OnMouseMove(UINT nFlags, CPoint point);\r
+ //}}AFX_MSG\r
+\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ BOOL IsDroppableKey(int nKey);\r
+ int m_nDroppableKeyType;\r
+ int m_nDroppableKey;\r
+ int m_nKey;\r
+ int GetPointedKey(CPoint point);\r
+ int m_nKeyType;\r
+ HKEY_TYPE m_HkeyType;\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_KEY_H__509440FD_B54D_4C17_AAA1_C394820F4FB6__INCLUDED_)\r
--- /dev/null
+// MainFrm.cpp : implementation of the CMainFrame class\r
+//\r
+\r
+#include "stdafx.h"\r
+#include <Lmcons.h>\r
+#include "xkeymacs.h"\r
+#include "Profile.h"\r
+\r
+#include "MainFrm.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+#define WM_USER_NTFYICON (WM_USER+100)\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CMainFrame\r
+\r
+IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)\r
+\r
+BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)\r
+ //{{AFX_MSG_MAP(CMainFrame)\r
+ ON_WM_CREATE()\r
+ ON_COMMAND(IDC_ABOUT, OnAbout)\r
+ ON_COMMAND(IDC_QUIT, OnQuit)\r
+ ON_COMMAND(IDC_DISABLE, OnDisable)\r
+ ON_COMMAND(IDC_PROPERTIES, OnProperties)\r
+ ON_COMMAND(IDC_OPTIONS, OnOptions)\r
+ ON_COMMAND(IDC_KEYBOARD, OnKeyboard)\r
+ ON_COMMAND(IDC_IMPORT, OnImport)\r
+ ON_COMMAND(IDC_EXPORT, OnExport)\r
+ ON_COMMAND(IDC_RESET, OnReset)\r
+ ON_COMMAND(ID_HELP_FINDER, OnHelpFinder)\r
+ ON_COMMAND(IDC_KEYBOARD_ANY_USER, OnKeyboardAnyUser)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CMainFrame construction/destruction\r
+\r
+CMainFrame::CMainFrame()\r
+{\r
+ // TODO: add member initialization code here\r
+\r
+ m_pXkeymacsDll = new CXkeymacsDll;\r
+ m_pPropertiesDlg = new CProperties;\r
+ m_nResultPropertiesDlg = -1;\r
+ m_bPropertiesDlgExist = FALSE;\r
+ m_pAboutDlg = new CAboutDlg;\r
+ m_nResultAboutDlg = -1;\r
+ m_bAboutDlgExist = FALSE;\r
+ m_pOptionsDlg = new COptionsDlg;\r
+ m_nResultOptionsDlg = -1;\r
+ m_bOptionsDlgExist = FALSE;\r
+ memset(m_p104KeyboardDlg, 0, sizeof(m_p104KeyboardDlg));\r
+ memset(m_p109KeyboardDlg, 0, sizeof(m_p109KeyboardDlg));\r
+ for (int i = 0; i < MAX_HKEY_TYPE; ++i) {\r
+ m_p104KeyboardDlg[i] = new C104Keyboard((HKEY_TYPE) i);\r
+ m_p109KeyboardDlg[i] = new C109Keyboard((HKEY_TYPE) i);\r
+ }\r
+ memset(m_nResultKeyboardDlg, -1, sizeof(m_nResultKeyboardDlg));\r
+ memset(m_bKeyboardDlgExist, 0, sizeof(m_bKeyboardDlgExist));\r
+\r
+ // register window class\r
+ WNDCLASS stWndClass;\r
+ CString szClassName(MAKEINTRESOURCE(AFX_IDS_APP_TITLE));\r
+\r
+ stWndClass.style = CS_BYTEALIGNWINDOW;\r
+ stWndClass.lpfnWndProc = &AfxWndProc;\r
+ stWndClass.cbClsExtra = 0;\r
+ stWndClass.cbWndExtra = 0;\r
+ stWndClass.hInstance = AfxGetInstanceHandle();\r
+ stWndClass.hIcon = NULL;\r
+ stWndClass.hCursor = NULL;\r
+ stWndClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;\r
+ stWndClass.lpszMenuName = NULL;\r
+ stWndClass.lpszClassName = szClassName;\r
+\r
+ AfxRegisterClass(&stWndClass);\r
+\r
+ // make window\r
+ CRect rect(0, 0, 100, 100);\r
+\r
+ Create(szClassName, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), WS_OVERLAPPEDWINDOW | WS_MINIMIZE, rect);\r
+}\r
+\r
+CMainFrame::~CMainFrame()\r
+{\r
+ delete m_pXkeymacsDll;\r
+ m_pXkeymacsDll = NULL;\r
+\r
+ delete m_pPropertiesDlg;\r
+ m_pPropertiesDlg = NULL;\r
+\r
+ delete m_pAboutDlg;\r
+ m_pAboutDlg = NULL;\r
+\r
+ delete m_pOptionsDlg;\r
+ m_pOptionsDlg = NULL;\r
+\r
+ for (int i = 0; i < MAX_HKEY_TYPE; ++i) {\r
+ delete m_p104KeyboardDlg[i];\r
+ m_p104KeyboardDlg[i] = NULL;\r
+\r
+ delete m_p109KeyboardDlg[i];\r
+ m_p109KeyboardDlg[i] = NULL;\r
+ }\r
+}\r
+\r
+int CMainFrame::OnCreate(const LPCREATESTRUCT lpCreateStruct)\r
+{\r
+ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) {\r
+ return -1;\r
+ }\r
+\r
+ CXkeymacsData::Set106Keyboard(CProfile::Is106Keyboard());\r
+\r
+ // init notify icon data\r
+ NOTIFYICONDATA notifyIconData[MAX_ICON_TYPE] = {\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, MAIN_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_SHARED) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, CX_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_CX_OFF) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, MX_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_MX_OFF) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, META_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_META_OFF) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, SHIFT_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_SHIFT_OFF) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, CTRL_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_CTRL_OFF) },\r
+ { sizeof(NOTIFYICONDATA), m_hWnd, ALT_ICON, NIF_MESSAGE | NIF_ICON | NIF_TIP, WM_USER_NTFYICON,\r
+ AfxGetApp()->LoadIcon(IDI_ALT_OFF) },\r
+ };\r
+ LoadString(AfxGetInstanceHandle(), AFX_IDS_APP_TITLE, notifyIconData[MAIN_ICON].szTip,\r
+ sizeof(notifyIconData[MAIN_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_CX, notifyIconData[CX_ICON].szTip,\r
+ sizeof(notifyIconData[CX_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_MX, notifyIconData[MX_ICON].szTip,\r
+ sizeof(notifyIconData[MX_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_META, notifyIconData[META_ICON].szTip,\r
+ sizeof(notifyIconData[META_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_SHIFT, notifyIconData[SHIFT_ICON].szTip,\r
+ sizeof(notifyIconData[SHIFT_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_CTRL, notifyIconData[CTRL_ICON].szTip,\r
+ sizeof(notifyIconData[CTRL_ICON].szTip));\r
+ LoadString(AfxGetInstanceHandle(), IDS_TIP_ALT, notifyIconData[ALT_ICON].szTip,\r
+ sizeof(notifyIconData[ALT_ICON].szTip));\r
+\r
+ // set notify icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(MAIN_ICON, notifyIconData[MAIN_ICON],\r
+ (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_SHARED),\r
+ (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAIN_DISABLE_TMP), IMAGE_ICON, 16, 16, LR_SHARED),\r
+ (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAIN_DISABLE_WOCQ), IMAGE_ICON, 16, 16, LR_SHARED), // disable without C-q\r
+ (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAIN_DISABLE), IMAGE_ICON, 16, 16, LR_SHARED),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MAIN)), 1));\r
+\r
+ // set notify ^X icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(CX_ICON, notifyIconData[CX_ICON], AfxGetApp()->LoadIcon(IDI_CX_ON),\r
+ AfxGetApp()->LoadIcon(IDI_CX_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CX)), 0));\r
+\r
+ // set notify M-x icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(MX_ICON, notifyIconData[MX_ICON], AfxGetApp()->LoadIcon(IDI_MX_ON),\r
+ AfxGetApp()->LoadIcon(IDI_MX_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MX)), 0));\r
+\r
+ // set notify Meta icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(META_ICON, notifyIconData[META_ICON], AfxGetApp()->LoadIcon(IDI_META_ON),\r
+ AfxGetApp()->LoadIcon(IDI_META_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_META)), 0));\r
+\r
+ // set notify Shift icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(SHIFT_ICON, notifyIconData[SHIFT_ICON], AfxGetApp()->LoadIcon(IDI_SHIFT_ON),\r
+ AfxGetApp()->LoadIcon(IDI_SHIFT_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_SHIFT)), 0));\r
+\r
+ // set notify Ctrl icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(CTRL_ICON, notifyIconData[CTRL_ICON], AfxGetApp()->LoadIcon(IDI_CTRL_ON),\r
+ AfxGetApp()->LoadIcon(IDI_CTRL_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CTRL)), 0));\r
+\r
+ // set notify Alt icon data\r
+ m_pXkeymacsDll->SetNotifyIconData(ALT_ICON, notifyIconData[ALT_ICON], AfxGetApp()->LoadIcon(IDI_ALT_ON),\r
+ AfxGetApp()->LoadIcon(IDI_ALT_OFF),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ALT)), 0));\r
+\r
+ m_pXkeymacsDll->SetKeyboardSpeed(CProfile::GetKeyboardSpeed());\r
+ m_pXkeymacsDll->SetAccelerate(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ACCELERATE)), 1));\r
+\r
+ m_pXkeymacsDll->SetCursorData((HCURSOR)::LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED),\r
+ (HCURSOR)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_DISABLE_TMP_CURSOR), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED),\r
+ (HCURSOR)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_DISABLE_WOCQ_CURSOR), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED),\r
+ (HCURSOR)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_DISABLE_CURSOR), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED),\r
+ AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CHANGE_CURSOR)), 0));\r
+\r
+ m_pXkeymacsDll->SetKeyboardHook();\r
+\r
+ return 0;\r
+}\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CMainFrame diagnostics\r
+\r
+#ifdef _DEBUG\r
+void CMainFrame::AssertValid() const\r
+{\r
+ CFrameWnd::AssertValid();\r
+}\r
+\r
+void CMainFrame::Dump(CDumpContext& dc) const\r
+{\r
+ CFrameWnd::Dump(dc);\r
+}\r
+\r
+#endif //_DEBUG\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CMainFrame message handlers\r
+\r
+void CMainFrame::SetForegroundTheDialog(CDialog *const pDialog)\r
+{\r
+ if (pDialog) {\r
+ pDialog->SetForegroundWindow();\r
+ }\r
+}\r
+\r
+void CMainFrame::SetForegroundSomeDialog()\r
+{\r
+ CDialog *pDialog = NULL;\r
+\r
+ if (m_bPropertiesDlgExist) {\r
+ pDialog = m_pPropertiesDlg;\r
+ } else if (m_bOptionsDlgExist) {\r
+ pDialog = m_pOptionsDlg;\r
+ } else if (m_bKeyboardDlgExist[ENGLISH_KEYBOARD][CURRENT_USER]) {\r
+ pDialog = m_p104KeyboardDlg[CURRENT_USER];\r
+ } else if (m_bKeyboardDlgExist[ENGLISH_KEYBOARD][LOCAL_MACHINE]) {\r
+ pDialog = m_p104KeyboardDlg[LOCAL_MACHINE];\r
+ } else if (m_bKeyboardDlgExist[JAPANESE_KEYBOARD][CURRENT_USER]) {\r
+ pDialog = m_p109KeyboardDlg[CURRENT_USER];\r
+ } else if (m_bKeyboardDlgExist[JAPANESE_KEYBOARD][LOCAL_MACHINE]) {\r
+ pDialog = m_p109KeyboardDlg[LOCAL_MACHINE];\r
+ } else if (m_bAboutDlgExist) {\r
+ pDialog = m_pAboutDlg;\r
+ } else {\r
+ EnableWindow(FALSE);\r
+ return;\r
+ }\r
+\r
+ SetForegroundTheDialog(pDialog);\r
+ return;\r
+}\r
+\r
+void CMainFrame::PopUpDialog(CDialog *const pDialog, int *const pnResultDialog, BOOL *const pbDialogExist)\r
+{\r
+ if (pDialog == NULL\r
+ || pnResultDialog == NULL\r
+ || pbDialogExist == NULL) {\r
+ return;\r
+ }\r
+\r
+ if (!*pbDialogExist) {\r
+ *pbDialogExist = TRUE;\r
+ *pnResultDialog = pDialog->DoModal();\r
+ *pbDialogExist = FALSE;\r
+ *pnResultDialog = -1;\r
+\r
+ SetForegroundSomeDialog();\r
+ } else {\r
+ SetForegroundTheDialog(pDialog);\r
+ }\r
+}\r
+\r
+void CMainFrame::PopUpPropertiesDialog()\r
+{\r
+ PopUpDialog(m_pPropertiesDlg, &m_nResultPropertiesDlg, &m_bPropertiesDlgExist);\r
+}\r
+\r
+// show right menu on icon in system tray\r
+void CMainFrame::ShowRightMenu(const ICON_TYPE icon)\r
+{\r
+ CMenu rightMenu;\r
+ rightMenu.LoadMenu(IDR_RIGHT_MENU);\r
+\r
+ CMenu *popUp = rightMenu.GetSubMenu(0);\r
+\r
+ if (icon == MAIN_ICON) {\r
+ popUp->SetDefaultItem(IDC_PROPERTIES);\r
+\r
+ CString szDisable(MAKEINTRESOURCE(IDS_ENABLE));\r
+ if (m_pXkeymacsDll->IsKeyboardHook()) {\r
+ szDisable.LoadString(IDS_DISABLE);\r
+ }\r
+ szDisable += _T("\tCtrl+Q");\r
+ popUp->ModifyMenu(IDC_DISABLE, MF_STRING, IDC_DISABLE, szDisable);\r
+\r
+ TCHAR szUserName[UNLEN + 1] = {'0'};\r
+ DWORD nSize = UNLEN + 1;\r
+ if (GetUserName(szUserName, &nSize)) {\r
+ CString szFor;\r
+ szFor.Format(IDS_KEYBOARD, szUserName);\r
+ popUp->ModifyMenu(IDC_KEYBOARD, MF_STRING, IDC_KEYBOARD, szFor);\r
+ }\r
+\r
+ if (CProfile::Is9x()) {\r
+ popUp->DeleteMenu(IDC_KEYBOARD, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_KEYBOARD_ANY_USER, MF_BYCOMMAND);\r
+ } else if (CProfile::IsVistaOrLater()) {\r
+ popUp->DeleteMenu(IDC_KEYBOARD_ANY_USER, MF_BYCOMMAND);\r
+ }\r
+ } else {\r
+ popUp->SetDefaultItem(IDC_OPTIONS);\r
+\r
+ popUp->DeleteMenu(IDC_PROPERTIES, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_IMPORT, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_EXPORT, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_KEYBOARD, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_KEYBOARD_ANY_USER, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_DISABLE, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_RESET, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(IDC_QUIT, MF_BYCOMMAND);\r
+ popUp->DeleteMenu(0, MF_BYPOSITION); // Delete separator\r
+ popUp->DeleteMenu(1, MF_BYPOSITION); // Delete separator\r
+ popUp->DeleteMenu(2, MF_BYPOSITION); // Delete popup menu of Keyboard Layout\r
+ }\r
+\r
+ SetForegroundWindow();\r
+\r
+ CPoint pt;\r
+ GetCursorPos(&pt);\r
+ popUp->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);\r
+}\r
+\r
+// get message of icon on system tray\r
+LRESULT CMainFrame::WindowProc(const UINT message, const WPARAM wParam, const LPARAM lParam) \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ static UINT s_uTaskbarRestart;\r
+\r
+ switch (message) {\r
+ case WM_CREATE:\r
+ s_uTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated"));\r
+ break;\r
+ case WM_USER_NTFYICON:\r
+ switch (lParam) {\r
+ case WM_LBUTTONUP:\r
+ SetForegroundSomeDialog();\r
+ break;\r
+ case WM_LBUTTONDBLCLK:\r
+ if (wParam == MAIN_ICON) {\r
+ PopUpPropertiesDialog();\r
+ } else {\r
+ PopUpOptionsDialog();\r
+ }\r
+ break;\r
+ case WM_RBUTTONUP:\r
+ ShowRightMenu((ICON_TYPE)wParam);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ default:\r
+ if (message == s_uTaskbarRestart) {\r
+ m_pXkeymacsDll->AddAllShell_NotifyIcon();\r
+ }\r
+ break;\r
+ }\r
+ \r
+ return CFrameWnd::WindowProc(message, wParam, lParam);\r
+}\r
+\r
+void CMainFrame::OnProperties()\r
+{\r
+ PopUpPropertiesDialog();\r
+}\r
+\r
+void CMainFrame::PopUpOptionsDialog()\r
+{\r
+ PopUpDialog(m_pOptionsDlg, &m_nResultOptionsDlg, &m_bOptionsDlgExist);\r
+}\r
+\r
+void CMainFrame::OnOptions() \r
+{\r
+ // TODO: Add your command handler code here\r
+ PopUpOptionsDialog();\r
+}\r
+\r
+// stop/start keyboard hook\r
+void CMainFrame::OnDisable() \r
+{\r
+ // TODO: Add your command handler code here\r
+ if (m_pXkeymacsDll->IsKeyboardHook()) {\r
+ m_pXkeymacsDll->SetKeyboardHookFlag(FALSE);\r
+ } else {\r
+ m_pXkeymacsDll->SetKeyboardHookFlag(TRUE);\r
+ }\r
+}\r
+\r
+// Close the Dialog if it is opened.\r
+void CMainFrame::CloseDialog(CDialog *const pDialog, int *const pnResult)\r
+{\r
+ if (*pnResult != -1) {\r
+ pDialog->EndDialog(*pnResult);\r
+ *pnResult = -1;\r
+ }\r
+}\r
+\r
+void CMainFrame::OnQuit() \r
+{\r
+ // TODO: Add your command handler code here\r
+ CloseDialog(m_pAboutDlg, &m_nResultAboutDlg);\r
+ CloseDialog(m_pPropertiesDlg, &m_nResultPropertiesDlg);\r
+ CloseDialog(m_pOptionsDlg, &m_nResultOptionsDlg);\r
+ for (int i = 0; i < MAX_HKEY_TYPE; ++i) {\r
+ CloseDialog(m_p104KeyboardDlg[i], &m_nResultKeyboardDlg[ENGLISH_KEYBOARD][i]);\r
+ CloseDialog(m_p109KeyboardDlg[i], &m_nResultKeyboardDlg[JAPANESE_KEYBOARD][i]);\r
+ }\r
+\r
+ m_pXkeymacsDll->ReleaseKeyboardHook();\r
+ m_pXkeymacsDll->DeleteAllShell_NotifyIcon();\r
+\r
+ PostQuitMessage(0);\r
+}\r
+\r
+void CMainFrame::PopUpAboutDialog()\r
+{\r
+ PopUpDialog(m_pAboutDlg, &m_nResultAboutDlg, &m_bAboutDlgExist);\r
+}\r
+\r
+void CMainFrame::OnAbout() \r
+{\r
+ // TODO: Add your command handler code here\r
+ PopUpAboutDialog();\r
+}\r
+\r
+void CMainFrame::OnKeyboard() \r
+{\r
+ // TODO: Add your command handler code here\r
+ PopUpKeyboardDialog(CURRENT_USER);\r
+}\r
+\r
+void CMainFrame::OnKeyboardAnyUser() \r
+{\r
+ // TODO: Add your command handler code here\r
+ PopUpKeyboardDialog(LOCAL_MACHINE);\r
+}\r
+\r
+void CMainFrame::PopUpKeyboardDialog(const HKEY_TYPE hkeyType)\r
+{\r
+ if (CProfile::Is106Keyboard()) {\r
+ PopUpDialog(m_p109KeyboardDlg[hkeyType], &m_nResultKeyboardDlg[JAPANESE_KEYBOARD][hkeyType], &m_bKeyboardDlgExist[JAPANESE_KEYBOARD][hkeyType]);\r
+ } else {\r
+ PopUpDialog(m_p104KeyboardDlg[hkeyType], &m_nResultKeyboardDlg[ENGLISH_KEYBOARD][hkeyType], &m_bKeyboardDlgExist[ENGLISH_KEYBOARD][hkeyType]);\r
+ }\r
+}\r
+\r
+void CMainFrame::OnImport() \r
+{\r
+ // TODO: Add your command handler code here\r
+ CProfile::ImportProperties();\r
+ CProfile::InitDllData();\r
+}\r
+\r
+void CMainFrame::OnExport() \r
+{\r
+ // TODO: Add your command handler code here\r
+ CProfile::ExportProperties();\r
+}\r
+\r
+void CMainFrame::OnReset() \r
+{\r
+ // TODO: Add your command handler code here\r
+ m_pXkeymacsDll->ReleaseKeyboardHook();\r
+ m_pXkeymacsDll->SetKeyboardHook();\r
+}\r
+\r
+void CMainFrame::OnHelpFinder() \r
+{\r
+ // TODO: Add your command handler code here\r
+ TCHAR szPath[MAX_PATH] = {'\0'};\r
+ const TCHAR szExt[] = _T("txt");\r
+ _tmakepath(szPath, NULL, NULL, CString(MAKEINTRESOURCE(IDS_README)), szExt);\r
+\r
+ TCHAR szModuleFileName[MAX_PATH] = {'\0'};\r
+ if (GetModuleFileName(NULL, szModuleFileName, sizeof(szModuleFileName))) {\r
+ TCHAR szDrive[_MAX_DRIVE] = {'\0'};\r
+ TCHAR szDir[_MAX_DIR] = {'\0'};\r
+ _tsplitpath(szModuleFileName, szDrive, szDir, NULL, NULL);\r
+ _tmakepath(szPath, szDrive, szDir, CString(MAKEINTRESOURCE(IDS_README)), szExt);\r
+ }\r
+\r
+ ShellExecute(NULL, NULL, szPath, NULL, NULL, SW_SHOWNORMAL);\r
+}\r
--- /dev/null
+// MainFrm.h : interface of the CMainFrame class\r
+//\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_MAINFRM_H__CF58719A_1B31_4BC0_8E55_06E0AE5BED2E__INCLUDED_)\r
+#define AFX_MAINFRM_H__CF58719A_1B31_4BC0_8E55_06E0AE5BED2E__INCLUDED_\r
+\r
+#include "OptionsDlg.h" // Added by ClassView\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include "104Keyboard.h"\r
+#include "109Keyboard.h"\r
+#include "Properties.h"\r
+\r
+enum KEYBOARD_TYPE { UNKNOWN_KEYBOARD, ENGLISH_KEYBOARD, JAPANESE_KEYBOARD, MAX_KEYBOARD_TYPE };\r
+\r
+class CMainFrame : public CFrameWnd\r
+{\r
+ \r
+protected: // create from serialization only\r
+public:\r
+ CMainFrame();\r
+protected:\r
+ DECLARE_DYNCREATE(CMainFrame)\r
+\r
+// Attributes\r
+public:\r
+\r
+// Operations\r
+public:\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(CMainFrame)\r
+ public:\r
+ protected:\r
+ virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+public:\r
+ virtual ~CMainFrame();\r
+#ifdef _DEBUG\r
+ virtual void AssertValid() const;\r
+ virtual void Dump(CDumpContext& dc) const;\r
+#endif\r
+\r
+// Generated message map functions\r
+protected:\r
+ //{{AFX_MSG(CMainFrame)\r
+ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\r
+ afx_msg void OnAbout();\r
+ afx_msg void OnQuit();\r
+ afx_msg void OnDisable();\r
+ afx_msg void OnProperties();\r
+ afx_msg void OnOptions();\r
+ afx_msg void OnKeyboard();\r
+ afx_msg void OnImport();\r
+ afx_msg void OnExport();\r
+ afx_msg void OnReset();\r
+ afx_msg void OnHelpFinder();\r
+ afx_msg void OnKeyboardAnyUser();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ BOOL m_bKeyboardDlgExist[MAX_KEYBOARD_TYPE][MAX_HKEY_TYPE];\r
+ int m_nResultKeyboardDlg[MAX_KEYBOARD_TYPE][MAX_HKEY_TYPE];\r
+ C109Keyboard *m_p109KeyboardDlg[MAX_HKEY_TYPE];\r
+ C104Keyboard *m_p104KeyboardDlg[MAX_HKEY_TYPE];\r
+ void PopUpKeyboardDialog(HKEY_TYPE hkeyType);\r
+ void SetForegroundTheDialog(CDialog *pDialog);\r
+ void CloseDialog(CDialog *pDialog, int *pnResult);\r
+ void SetForegroundSomeDialog();\r
+ void PopUpOptionsDialog();\r
+ void PopUpDialog(CDialog *pDialog, int *pnDialogExist, BOOL *pbDialogExist);\r
+ void PopUpAboutDialog();\r
+ void PopUpPropertiesDialog();\r
+ void ShowRightMenu(ICON_TYPE icon);\r
+ BOOL m_bPropertiesDlgExist;\r
+ BOOL m_bOptionsDlgExist;\r
+ BOOL m_bAboutDlgExist;\r
+ COptionsDlg *m_pOptionsDlg;\r
+ int m_nResultOptionsDlg;\r
+ CAboutDlg *m_pAboutDlg;\r
+ int m_nResultAboutDlg;\r
+ int m_nResultPropertiesDlg;\r
+public:\r
+ CProperties *m_pPropertiesDlg;\r
+ CXkeymacsDll *m_pXkeymacsDll;\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_MAINFRM_H__CF58719A_1B31_4BC0_8E55_06E0AE5BED2E__INCLUDED_)\r
--- /dev/null
+// OptionsDlg.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "OptionsDlg.h"\r
+#include "MainFrm.h"\r
+#include "Profile.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// COptionsDlg dialog\r
+\r
+\r
+COptionsDlg::COptionsDlg(CWnd *pParent /*=NULL*/)\r
+ : CDialog(COptionsDlg::IDD, pParent)\r
+{\r
+ //{{AFX_DATA_INIT(COptionsDlg)\r
+ //}}AFX_DATA_INIT\r
+}\r
+\r
+COptionsDlg::~COptionsDlg()\r
+{\r
+}\r
+\r
+void COptionsDlg::DoDataExchange(CDataExchange *pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(COptionsDlg)\r
+ DDX_Control(pDX, IDC_M_X, m_cMx);\r
+ DDX_Control(pDX, IDC_M_, m_cM_);\r
+ DDX_Control(pDX, IDC_ALT, m_cAlt);\r
+ DDX_Control(pDX, IDC_SHIFT, m_cShift);\r
+ DDX_Control(pDX, IDC_CTRL, m_cCtrl);\r
+ DDX_Control(pDX, IDC_C_X_, m_cCx);\r
+ DDX_Control(pDX, IDC_FILE_COMPLETION, m_cFileCompletion);\r
+ DDX_Control(pDX, IDC_AUTO_RUN, m_cAutoRun);\r
+ DDX_Control(pDX, IDOK, m_cOK);\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(COptionsDlg, CDialog)\r
+ //{{AFX_MSG_MAP(COptionsDlg)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// COptionsDlg message handlers\r
+\r
+BOOL COptionsDlg::OnInitDialog() \r
+{\r
+ CDialog::OnInitDialog();\r
+ \r
+ // TODO: Add extra initialization here\r
+ // clear all check\r
+ m_cAutoRun.SetCheck(0);\r
+ m_cCx.SetCheck(0);\r
+ m_cMx.SetCheck(0);\r
+ m_cM_.SetCheck(0);\r
+ m_cShift.SetCheck(0);\r
+ m_cCtrl.SetCheck(0);\r
+ m_cAlt.SetCheck(0);\r
+\r
+ // for auto run\r
+ {\r
+ TCHAR szFileName[MAX_PATH] = {'\0'};\r
+ GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
+ HKEY hKey = NULL;\r
+\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS\r
+ || RegOpenKeyEx(HKEY_LOCAL_MACHINE, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {\r
+ DWORD dwType = REG_SZ;\r
+ TCHAR szSavedFileName[MAX_PATH] = {'\0'};\r
+ DWORD dwBufLen = sizeof(szSavedFileName);\r
+ RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), NULL, &dwType,\r
+ (LPBYTE)szSavedFileName, &dwBufLen);\r
+ RegCloseKey(hKey);\r
+\r
+ if (!_tcsnicmp(szFileName, szSavedFileName, sizeof(szFileName))) {\r
+ m_cAutoRun.SetCheck(1);\r
+ }\r
+ }\r
+ }\r
+\r
+ // for file and directory name completion\r
+ if (CProfile::IsNT()) {\r
+ HKEY hKey = NULL;\r
+\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS\r
+ || RegOpenKeyEx(HKEY_LOCAL_MACHINE, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {\r
+ DWORD dwType = REG_DWORD;\r
+ DWORD dwCompletionChar = 0;\r
+ DWORD dwcbData = sizeof(dwCompletionChar);\r
+ RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(IDS_COMPLETION_CHAR)), NULL, &dwType,\r
+ (LPBYTE)&dwCompletionChar, &dwcbData);\r
+ RegCloseKey(hKey);\r
+ if (dwCompletionChar == 0x9) {\r
+ m_cFileCompletion.SetCheck(1);\r
+ }\r
+ }\r
+ } else if (CProfile::Is9x()) {\r
+ m_cFileCompletion.EnableWindow(FALSE);\r
+ }\r
+\r
+ // for icons in the taskbar's status area\r
+ m_cCx.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CX)), 0));\r
+ m_cMx.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MX)), 0));\r
+ m_cM_.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_META)), 0));\r
+ m_cShift.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_SHIFT)), 0));\r
+ m_cCtrl.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CTRL)), 0));\r
+ m_cAlt.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ALT)), 0));\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void COptionsDlg::OnOK() \r
+{\r
+ // TODO: Add extra validation here\r
+ // for auto run\r
+ {\r
+ TCHAR szFileName[MAX_PATH] = {'\0'};\r
+ GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
+ HKEY hKey = NULL;\r
+\r
+ DWORD dwDisposition;\r
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {\r
+ if (m_cAutoRun.GetCheck() == 1) {\r
+ RegSetValueEx(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), 0, REG_SZ, (LPBYTE)szFileName, _tcslen(szFileName));\r
+ } else {\r
+ RegDeleteValue(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)));\r
+ }\r
+ RegCloseKey(hKey);\r
+ }\r
+ }\r
+\r
+ // for file and directory name completion\r
+ if (CProfile::IsNT()) {\r
+ HKEY hKey = NULL;\r
+\r
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS) {\r
+ DWORD dwCompletionChar;\r
+ if (m_cFileCompletion.GetCheck() == 1) {\r
+ dwCompletionChar = 0x9; // use enum\r
+ } else {\r
+ dwCompletionChar = 0x0;\r
+ }\r
+ RegSetValueEx(hKey, CString(MAKEINTRESOURCE(IDS_COMPLETION_CHAR)), 0, REG_DWORD,\r
+ (LPBYTE)&dwCompletionChar, sizeof(dwCompletionChar));\r
+ RegCloseKey(hKey);\r
+ }\r
+ }\r
+\r
+ // for icons in the taskbar's status area\r
+ {\r
+ // write data in registry\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CX)), m_cCx.GetCheck());\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MX)), m_cMx.GetCheck());\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_META)), m_cM_.GetCheck());\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_SHIFT)), m_cShift.GetCheck());\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CTRL)), m_cCtrl.GetCheck());\r
+ AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ALT)), m_cAlt.GetCheck());\r
+\r
+ // set dll data\r
+ CMainFrame *pMainFrame = (CMainFrame*)AfxGetMainWnd();\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(CX_ICON, m_cCx.GetCheck());\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(MX_ICON, m_cMx.GetCheck());\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(META_ICON, m_cM_.GetCheck());\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(SHIFT_ICON, m_cShift.GetCheck());\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(CTRL_ICON, m_cCtrl.GetCheck());\r
+ pMainFrame->m_pXkeymacsDll->EnableShell_NotifyIcon(ALT_ICON, m_cAlt.GetCheck());\r
+ }\r
+\r
+ CDialog::OnOK();\r
+}\r
--- /dev/null
+#if !defined(AFX_OPTIONSDLG_H__526E5E0B_92DC_4F9C_BCE5_5ADB5DFE3444__INCLUDED_)\r
+#define AFX_OPTIONSDLG_H__526E5E0B_92DC_4F9C_BCE5_5ADB5DFE3444__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// OptionsDlg.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// COptionsDlg dialog\r
+\r
+class COptionsDlg : public CDialog\r
+{\r
+// Construction\r
+public:\r
+ virtual ~COptionsDlg();\r
+ COptionsDlg(CWnd *pParent = NULL); // standard constructor\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(COptionsDlg)\r
+ enum { IDD = IDD_OPTIONS };\r
+ CButton m_cMx;\r
+ CButton m_cM_;\r
+ CButton m_cAlt;\r
+ CButton m_cShift;\r
+ CButton m_cCtrl;\r
+ CButton m_cCx;\r
+ CButton m_cFileCompletion;\r
+ CButton m_cAutoRun;\r
+ CButton m_cOK;\r
+ //}}AFX_DATA\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(COptionsDlg)\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange *pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(COptionsDlg)\r
+ virtual BOOL OnInitDialog();\r
+ virtual void OnOK();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_OPTIONSDLG_H__526E5E0B_92DC_4F9C_BCE5_5ADB5DFE3444__INCLUDED_)\r
--- /dev/null
+// Profile.cpp: implementation of the CProfile class\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "Profile.h"\r
+#include "MainFrm.h"\r
+#include "DotXkeymacs.h"\r
+#include <Imm.h>\r
+#include <Shlwapi.h> // Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later). \r
+ // Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later). \r
+\r
+#ifdef _DEBUG\r
+#undef THIS_FILE\r
+static char THIS_FILE[]=__FILE__;\r
+#define new DEBUG_NEW\r
+#endif\r
+\r
+#pragma data_seg(".xkmcs")\r
+ CXkeymacsData CProfile::m_XkeymacsData[MAX_APP];\r
+ TASK_LIST CProfile::m_TaskList[MAX_TASKS];\r
+ DWORD CProfile::m_dwTasks;\r
+ ScanCode_t CProfile::m_CurrentScanCodeMap[MAX_HKEY_TYPE][4][256];\r
+ ScanCode_t CProfile::m_ScanCodeMap[MAX_HKEY_TYPE][4][256];\r
+#pragma data_seg()\r
+\r
+enum { INITIAL_SIZE = 51200 };\r
+enum { EXTEND_SIZE = 25600 };\r
+\r
+void CProfile::Item2AppName(CString *const sz)\r
+{\r
+ if (IsTheString(*sz, IDS_DEFAULT_TITLE)) {\r
+ sz->LoadString(IDS_DEFAULT);\r
+ }\r
+\r
+ if (IsTheString(*sz, IDS_DIALOG_TITLE)) {\r
+ sz->LoadString(IDS_DIALOG);\r
+ }\r
+\r
+ int nStart, nEnd, nCount;\r
+\r
+ nStart = sz->ReverseFind(_T('(')) + 1;\r
+ nEnd = sz->Find(_T(')'), nStart) - 1;\r
+ nCount = (nEnd + 1) - nStart;\r
+ *sz = sz->Mid(nStart, nCount);\r
+}\r
+\r
+int CProfile::IsNotSameString(CComboBox *const pApplication, const CString szListItem)\r
+{\r
+ CString szItem, szList;\r
+ szList = szListItem;\r
+ Item2AppName(&szList);\r
+\r
+ for (int i = 0; i < pApplication->GetCount(); ++i) {\r
+ pApplication->GetLBText(i, szItem);\r
+ Item2AppName(&szItem);\r
+ if (!_tcsicmp(szItem, szList)) {\r
+ return 0;\r
+ }\r
+ }\r
+\r
+ return 1;\r
+}\r
+\r
+int CProfile::CountSeparator(const CString szMainString, const CString szSeparator)\r
+{\r
+ int index = 0;\r
+ int counter = 0;\r
+\r
+ while ((index = szMainString.Find(szSeparator, index)) != -1) {\r
+ ++index;\r
+ ++counter;\r
+ }\r
+\r
+ return counter;\r
+}\r
+\r
+void CProfile::GetNthString(CString *const szAppName, const CString szWindowName, const CString szSeparator, int n)\r
+{\r
+ int index = -1;\r
+\r
+ while (--n) {\r
+ index = szWindowName.Find(szSeparator, index + 1);\r
+ }\r
+\r
+ int nStart;\r
+ if (index != -1) {\r
+ nStart = index + szSeparator.GetLength();\r
+ } else {\r
+ nStart = 0;\r
+ }\r
+\r
+ int nEnd = szWindowName.Find(szSeparator, nStart);\r
+ if (nEnd == -1) {\r
+ nEnd = szWindowName.GetLength();\r
+ }\r
+\r
+ *szAppName = szWindowName.Mid(nStart, nEnd - nStart);\r
+}\r
+\r
+void CProfile::GetAppName(CString *const szAppName, LPCTSTR pWindowName)\r
+{\r
+ CString szWindowName(pWindowName);\r
+ CString szSeparator(MAKEINTRESOURCE(IDS_SEPARATE_WINDOWTITLE));\r
+ int nWord = CountSeparator(szWindowName, szSeparator) + 1;\r
+\r
+ while (nWord) {\r
+ GetNthString(szAppName, szWindowName, szSeparator, nWord);\r
+ if (szAppName->GetAt(0) == _T('[')\r
+ || szAppName->Find(_T('.'), 0) != -1 // for Microsoft Project\r
+ || szAppName->Find(_T(']'), 0) != -1) { // for the file name like [foo - bar]\r
+ --nWord;\r
+ } else {\r
+ return;\r
+ }\r
+ }\r
+\r
+ *szAppName = szWindowName;\r
+}\r
+\r
+BOOL CALLBACK CProfile::EnumWindowsProc(const HWND hWnd, const LPARAM lParam)\r
+{\r
+ CComboBox *pApplication = (CComboBox*)lParam;\r
+ PTASK_LIST pTask = CProfile::m_TaskList;\r
+ \r
+ TCHAR szWindowName[WINDOW_NAME_LENGTH];\r
+ TCHAR szClassName[CLASS_NAME_LENGTH];\r
+ WINDOWPLACEMENT wpl;\r
+ \r
+ wpl.length = sizeof(WINDOWPLACEMENT);\r
+ ::GetWindowText(hWnd, szWindowName, sizeof(szWindowName));\r
+ GetClassName(hWnd, szClassName, sizeof(szClassName));\r
+\r
+ CString szAppName;\r
+ // Get Process Name\r
+ DWORD dwProcessId = 0;\r
+ GetWindowThreadProcessId(hWnd, &dwProcessId);\r
+ for (DWORD i = 0; i < CProfile::m_dwTasks; ++i) {\r
+ if (pTask[i].dwProcessId == dwProcessId) {\r
+\r
+ // Get Application Name\r
+ if (szWindowName[0] == '\0') {\r
+ continue;\r
+ }\r
+ if (!_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_B2)), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.LoadString(IDS_BECKY);\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_EXPLORER)), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.LoadString(IDS_PROGRAM_MANAGER);\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_MSIMN)), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.LoadString(IDS_OUTLOOK_EXPRESS);\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_PROJECT)), sizeof(pTask[i].ProcessName))\r
+ || !_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_EXCEL)), sizeof(pTask[i].ProcessName))\r
+ || !_tcsnicmp(pTask[i].ProcessName, _T("psp.exe"), sizeof(pTask[i].ProcessName))) {\r
+ GetNthString(&szAppName, szWindowName, CString(MAKEINTRESOURCE(IDS_SEPARATE_WINDOWTITLE)), 1);\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("sakura.exe"), sizeof(pTask[i].ProcessName))) {\r
+ GetNthString(&szAppName, szWindowName, CString(MAKEINTRESOURCE(IDS_SEPARATE_WINDOWTITLE)), 2); // '.' is included, so...\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, CString(MAKEINTRESOURCE(IDS_MSDN)), sizeof(pTask[i].ProcessName))) {\r
+ szAppName = szWindowName;\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("devenv.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.Format(_T("Microsoft Visual Studio .NET"));\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("vb6.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.Format(_T("Microsoft Visual Basic"));\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("ssexp.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.LoadString(IDS_VISUAL_SOURCESAFE_EXPLORER);\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("sh.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.Format(_T("MKS Korn Shell"));\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("csh.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.Format(_T("C Shell"));\r
+ } else if (!_tcsnicmp(pTask[i].ProcessName, _T("vim.exe"), sizeof(pTask[i].ProcessName))) {\r
+ szAppName.Format(_T("VIM"));\r
+ } else {\r
+ CUtils::SetCorrectApplicationName(pTask[i].ProcessName, sizeof(pTask[i].ProcessName), szWindowName, sizeof(szWindowName));\r
+ GetAppName(&szAppName, szWindowName);\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ \r
+ \r
+ if ((IsWindowVisible(hWnd)) // Is visible?\r
+ && (GetWindow(hWnd, GW_OWNER) == NULL) // Is top level window?\r
+ && (lstrlen(szWindowName) > 0) // Have caption?\r
+ && (pApplication->FindString(-1, szClassName) == CB_ERR)) {// Is not same string?\r
+ CString szListItem;\r
+ szListItem.Format(IDS_APPLICATION_LIST_ITEM, szAppName, pTask[i].ProcessName);\r
+ if (IsNotSameString(pApplication, szListItem)) {\r
+ pApplication->AddString(szListItem);\r
+ }\r
+ }\r
+ return TRUE;\r
+}\r
+\r
+ \r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CProfile::CProfile()\r
+{\r
+\r
+}\r
+\r
+CProfile::~CProfile()\r
+{\r
+\r
+}\r
+\r
+// This method initializes data in the registry, or retrieves and validates registry data.\r
+// bSaveAndValidate specifies a flag that indicates \r
+// whether registry data is being initialized (FALSE) or data is being retrieved (TRUE). \r
+void CProfile::UpdateRegistryData(const BOOL bSaveAndValidate)\r
+{\r
+ CString szEntry;\r
+ CString szApplicationName;\r
+ CString szApplicationTitle;\r
+ CString szWindowText;\r
+ CString szWindowTextType;\r
+\r
+ BOOL bUseDialogSetting = FALSE;\r
+\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ // application name\r
+ CString szSection(MAKEINTRESOURCE(IDS_REG_SECTION_APPLICATION));\r
+ szEntry.Format(IDS_REG_ENTRY_APPLICATION, nApplicationID);\r
+ if (bSaveAndValidate) { // retrieve\r
+ m_XkeymacsData[nApplicationID].ClearAll();\r
+ szApplicationName = AfxGetApp()->GetProfileString(szSection, szEntry);\r
+ if (szApplicationName.IsEmpty()) {\r
+ if (nApplicationID) {\r
+ if (!bUseDialogSetting) {\r
+ szApplicationName.LoadString(IDS_DIALOG);\r
+ bUseDialogSetting = TRUE;\r
+ } else {\r
+ continue;\r
+ }\r
+ } else {\r
+ szApplicationName.LoadString(IDS_DEFAULT);\r
+ }\r
+ } else {\r
+ if (szApplicationName == CString(MAKEINTRESOURCE(IDS_DIALOG))) {\r
+ bUseDialogSetting = TRUE;\r
+ }\r
+ }\r
+ m_XkeymacsData[nApplicationID].SetApplicationName(szApplicationName);\r
+ } else { // initialize\r
+ szApplicationName = m_XkeymacsData[nApplicationID].GetApplicationName();\r
+ if (szApplicationName.IsEmpty()) {\r
+ continue;\r
+ }\r
+ AfxGetApp()->WriteProfileString(szSection, szEntry, szApplicationName);\r
+ }\r
+\r
+ // application title\r
+ szEntry.LoadString(IDS_REG_ENTRY_APPLICATOIN_TITLE);\r
+ if (bSaveAndValidate) { // retrieve\r
+ szApplicationTitle = AfxGetApp()->GetProfileString(szApplicationName, szEntry);\r
+ m_XkeymacsData[nApplicationID].SetApplicationTitle(szApplicationTitle);\r
+ } else { // initialize\r
+ szApplicationTitle = m_XkeymacsData[nApplicationID].GetApplicationTitle();\r
+ while (!szApplicationTitle.IsEmpty() && szApplicationTitle.GetAt(0) == _T(' ')) {\r
+ szApplicationTitle.Delete(0);\r
+ }\r
+ AfxGetApp()->WriteProfileString(szApplicationName, szEntry, szApplicationTitle);\r
+ }\r
+\r
+ // window text\r
+ szEntry.LoadString(IDS_REG_ENTRY_WINDOW_TEXT);\r
+ if (bSaveAndValidate) { // retrieve\r
+ szWindowText = AfxGetApp()->GetProfileString(szApplicationName, szEntry, _T("*"));\r
+ if (szWindowText.IsEmpty()) {\r
+ szWindowText = _T('*');\r
+ }\r
+ m_XkeymacsData[nApplicationID].SetWindowText(szWindowText);\r
+ } else { // initialize\r
+ szWindowText = m_XkeymacsData[nApplicationID].GetWindowText();\r
+ AfxGetApp()->WriteProfileString(szApplicationName, szEntry, szWindowText);\r
+ }\r
+\r
+ // window text type\r
+ szEntry.LoadString(IDS_REG_ENTRY_WINDOW_TEXT_TYPE);\r
+ if (bSaveAndValidate) { // retrieve\r
+ szWindowTextType = AfxGetApp()->GetProfileString(szApplicationName, szEntry);\r
+\r
+ int nWindowTextType = IDS_WINDOW_TEXT_IGNORE;\r
+ if (szWindowTextType == CString(MAKEINTRESOURCE(IDS_WINDOW_TEXT_MATCH))) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH;\r
+ } else if (szWindowTextType == CString(MAKEINTRESOURCE(IDS_WINDOW_TEXT_MATCH_FORWARD))) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_FORWARD;\r
+ } else if (szWindowTextType == CString(MAKEINTRESOURCE(IDS_WINDOW_TEXT_MATCH_BACKWARD))) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_BACKWARD;\r
+ } else if (szWindowTextType == CString(MAKEINTRESOURCE(IDS_WINDOW_TEXT_MATCH_FULL))) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_FULL;\r
+ }\r
+\r
+ m_XkeymacsData[nApplicationID].SetWindowTextType(nWindowTextType);\r
+ } else { // initialize\r
+ szWindowTextType.LoadString(m_XkeymacsData[nApplicationID].GetWindowTextType());\r
+ AfxGetApp()->WriteProfileString(szApplicationName, szEntry, szWindowTextType);\r
+ }\r
+\r
+ // on/off\r
+ if (bSaveAndValidate) { // retrieve\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ szEntry = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szEntry.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ HKEY hKey = NULL;\r
+ CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szSubKey += _T("\\") + szApplicationName + _T("\\") + szEntry;\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+ // Use registry data\r
+ TCHAR szKeyBind[128] = {'\0'};\r
+ DWORD dwKeyBind = sizeof(szKeyBind);\r
+ FILETIME ft = {'\0'}; // not use\r
+ for (DWORD dwIndex = 0;\r
+ RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, &ft) == ERROR_SUCCESS;\r
+ ++dwIndex) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ ReadKeyBind(&nCommandType, &nKey, szKeyBind);\r
+ m_XkeymacsData[nApplicationID].SetCommandID(nCommandType, nKey, nCommandID);\r
+\r
+// if (nCommandType == CONTROL && nKey == 'D') {\r
+// CUtils::Log("GetProfileInt(at ibeam cursor only): %s, %s", szSubKey, szKeyBind);\r
+// }\r
+ const CString szSection = szSubKey.Right(szSubKey.GetLength() - CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)).GetLength() - _tcslen(_T("\\"))) + _T("\\") + szKeyBind;\r
+ const BOOL bAtIbeamCursorOnly = AfxGetApp()->GetProfileInt(szSection, CString(MAKEINTRESOURCE(IDS_REG_ENTRY_AT_IBEAM_CURSOR_ONLY)), FALSE);\r
+ m_XkeymacsData[nApplicationID].SetAtIbeamCursorOnly(nCommandType, nKey, bAtIbeamCursorOnly);\r
+\r
+ memset(szKeyBind, 0, sizeof(szKeyBind));\r
+ dwKeyBind = sizeof(szKeyBind);\r
+ }\r
+ RegCloseKey(hKey);\r
+ } else {\r
+ // Use default setting\r
+ for (int i = 0; ; ++i) {\r
+ if (CXkeymacsData::GetDefaultControlID(nCommandID, i) == IDC_CO2) {\r
+ continue;\r
+ }\r
+\r
+ int nCommandType = CXkeymacsData::GetDefaultCommandType(nCommandID, i);\r
+ int nKey = CXkeymacsData::GetDefaultCommandKey(nCommandID, i);\r
+ if (nKey == 0) {\r
+ break;\r
+ }\r
+ m_XkeymacsData[nApplicationID].SetCommandID(nCommandType, nKey, nCommandID);\r
+ m_XkeymacsData[nApplicationID].SetAtIbeamCursorOnly(nCommandType, nKey, FALSE);\r
+ }\r
+ }\r
+ }\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ HKEY hKey = NULL;\r
+ CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szSubKey += _T("\\") + szApplicationName + _T("\\") + CDotXkeymacs::GetFunctionSymbol(nFunctionID);\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+ // Use registry data\r
+ CDotXkeymacs::ClearKey(nFunctionID, nApplicationID);\r
+ TCHAR szKeyBind[128] = {'\0'};\r
+ DWORD dwKeyBind = sizeof(szKeyBind);\r
+ FILETIME ft = {'\0'}; // not use\r
+ for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, &ft) == ERROR_SUCCESS; ++dwIndex) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ ReadKeyBind(&nCommandType, &nKey, szKeyBind);\r
+ CDotXkeymacs::SetKey(nFunctionID, nApplicationID, nCommandType, nKey);\r
+\r
+ memset(szKeyBind, 0, sizeof(szKeyBind));\r
+ dwKeyBind = sizeof(szKeyBind);\r
+ }\r
+ RegCloseKey(hKey);\r
+ }\r
+ }\r
+ } else { // initialize\r
+ // create all commands\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ szEntry = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szEntry.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ SaveCommand(szApplicationName, nCommandID);\r
+ }\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ int nCommandID = m_XkeymacsData[nApplicationID].GetCommandID(nCommandType, nKey);\r
+ SaveKeyBind(szApplicationName, nCommandID, nCommandType, nKey);\r
+ }\r
+ }\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ for (int nKeyID = 0; nKeyID < CDotXkeymacs::GetKeyNumber(nFunctionID, nApplicationID); ++nKeyID) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ CDotXkeymacs::GetKey(nFunctionID, nApplicationID, nKeyID, &nCommandType, &nKey);\r
+ SaveKeyBind(szApplicationName, CDotXkeymacs::GetFunctionSymbol(nFunctionID), nCommandType, nKey);\r
+ }\r
+ }\r
+ }\r
+\r
+ // kill-ring-max\r
+ szEntry.LoadString(IDS_REG_ENTRY_KILL_RING_MAX);\r
+ if (bSaveAndValidate) { // retrieve\r
+ int nKillRingMax = AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 1);\r
+ m_XkeymacsData[nApplicationID].SetKillRingMax(nKillRingMax);\r
+ } else { // initialize\r
+ int nKillRingMax = m_XkeymacsData[nApplicationID].GetKillRingMax();\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, nKillRingMax);\r
+ }\r
+\r
+ // Use Dialog Setting\r
+ szEntry.LoadString(IDS_REG_ENTRY_USE_DIALOG_SETTING);\r
+ if (bSaveAndValidate) { // retrieve\r
+ BOOL bUseDialogSetting = AfxGetApp()->GetProfileInt(szApplicationName,szEntry, 1);\r
+ m_XkeymacsData[nApplicationID].SetUseDialogSetting(bUseDialogSetting);\r
+ } else { // initialize\r
+ BOOL bUseDialogSetting = m_XkeymacsData[nApplicationID].GetUseDialogSetting();\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, bUseDialogSetting);\r
+ }\r
+\r
+ // Setting Style\r
+ szEntry.LoadString(IDS_REG_ENTRY_DISABLE_XKEYMACS);\r
+ if (bSaveAndValidate) { // retrieve\r
+ int nSettingStyle = SETTING_SPECIFIC;\r
+ if (AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0) != 0) {\r
+ nSettingStyle = SETTING_DISABLE;\r
+ }\r
+ m_XkeymacsData[nApplicationID].SetSettingStyle(nSettingStyle);\r
+ } else { // initialize\r
+ BOOL bDisableXkeymacs = FALSE;\r
+ if (m_XkeymacsData[nApplicationID].GetSettingStyle() == SETTING_DISABLE) {\r
+ bDisableXkeymacs = TRUE;\r
+ }\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, bDisableXkeymacs);\r
+ }\r
+\r
+ // Ignore Meta Ctrl+? when it is undefined.\r
+ szEntry.LoadString(IDC_REG_ENTRY_IGNORE_META_CTRL);\r
+ if (bSaveAndValidate) { // retrieve\r
+ m_XkeymacsData[nApplicationID].SetIgnoreUndefinedMetaCtrl(AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0));\r
+ } else { // initialize\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, m_XkeymacsData[nApplicationID].GetIgnoreUndefinedMetaCtrl());\r
+ }\r
+\r
+ // Ignore C-x ? when it is undefined.\r
+ szEntry.LoadString(IDC_REG_ENTRY_IGNORE_C_X);\r
+ if (bSaveAndValidate) { // retrieve\r
+ m_XkeymacsData[nApplicationID].SetIgnoreUndefinedC_x(AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0));\r
+ } else { // initialize\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, m_XkeymacsData[nApplicationID].GetIgnoreUndefinedC_x());\r
+ }\r
+\r
+ // Enable CUA-mode\r
+ szEntry.LoadString(IDC_REG_ENTRY_ENABLE_CUA);\r
+ if (bSaveAndValidate) { // retrieve\r
+ m_XkeymacsData[nApplicationID].SetEnableCUA(AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0));\r
+ } else { // initialize\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, m_XkeymacsData[nApplicationID].GetEnableCUA());\r
+ }\r
+\r
+ // Version 3.26 compatible mode\r
+ szEntry.LoadString(IDS_REG_ENTRY_326_COMPATIBLE);\r
+ if (bSaveAndValidate) { // retrieve\r
+ m_XkeymacsData[nApplicationID].Set326Compatible(AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0));\r
+ } else { // initialize\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, szEntry, m_XkeymacsData[nApplicationID].Get326Compatible());\r
+ }\r
+ }\r
+}\r
+\r
+void CProfile::LoadRegistryData()\r
+{\r
+ CDotXkeymacs::Load();\r
+ LevelUp();\r
+ UpdateRegistryData(TRUE);\r
+}\r
+\r
+void CProfile::SaveRegistryData()\r
+{\r
+ DeleteAllRegistryData();\r
+ UpdateRegistryData(FALSE);\r
+ SetDllData();\r
+}\r
+\r
+void CProfile::SetDllData()\r
+{\r
+ CMainFrame *pMainFrame = (CMainFrame*)AfxGetMainWnd();\r
+\r
+ pMainFrame->m_pXkeymacsDll->ClearFunctionDefinition();\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ pMainFrame->m_pXkeymacsDll->SetFunctionDefinition(nFunctionID, CDotXkeymacs::GetFunctionDefinition(nFunctionID));\r
+ }\r
+\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+\r
+ CString szApplicationName = m_XkeymacsData[nApplicationID].GetApplicationName();\r
+\r
+ if (szApplicationName.IsEmpty()) {\r
+ pMainFrame->m_pXkeymacsDll->Clear(nApplicationID);\r
+ continue;\r
+ }\r
+\r
+ pMainFrame->m_pXkeymacsDll->SetApplicationName(nApplicationID, szApplicationName);\r
+ pMainFrame->m_pXkeymacsDll->SetWindowText(nApplicationID, m_XkeymacsData[nApplicationID].GetWindowText());\r
+ pMainFrame->m_pXkeymacsDll->SetCommandID(nApplicationID, CONTROL, 'X', 0);\r
+ pMainFrame->m_pXkeymacsDll->SetAtIbeamCursorOnly(nApplicationID, CONTROL, 'X', FALSE);\r
+\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ const int nCommandID = m_XkeymacsData[nApplicationID].GetCommandID(nCommandType, nKey);\r
+ pMainFrame->m_pXkeymacsDll->SetCommandID(nApplicationID, nCommandType, nKey, nCommandID);\r
+ const BOOL bAtIbeamCursorOnly = m_XkeymacsData[nApplicationID].GetAtIbeamCursorOnly(nCommandType, nKey);\r
+ pMainFrame->m_pXkeymacsDll->SetAtIbeamCursorOnly(nApplicationID, nCommandType, nKey, bAtIbeamCursorOnly);\r
+ if ((nCommandType & CONTROLX) && nCommandID) {\r
+ pMainFrame->m_pXkeymacsDll->SetCommandID(nApplicationID, CONTROL, 'X', 1); // Commands[1] is C-x\r
+ pMainFrame->m_pXkeymacsDll->SetAtIbeamCursorOnly(nApplicationID, CONTROL, 'X', bAtIbeamCursorOnly);\r
+ }\r
+ }\r
+ }\r
+\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ for (int nKeyID = 0; nKeyID < CDotXkeymacs::GetKeyNumber(nFunctionID, nApplicationID); ++nKeyID) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ CDotXkeymacs::GetKey(nFunctionID, nApplicationID, nKeyID, &nCommandType, &nKey);\r
+ pMainFrame->m_pXkeymacsDll->SetFunctionKey(nFunctionID, nApplicationID, nCommandType, nKey);\r
+ if (nCommandType & CONTROLX) {\r
+ pMainFrame->m_pXkeymacsDll->SetCommandID(nApplicationID, CONTROL, 'X', 1); // Commands[1] is C-x\r
+ const BOOL bAtIbeamCursorOnly = m_XkeymacsData[nApplicationID].GetAtIbeamCursorOnly(nCommandType, nKey);\r
+ pMainFrame->m_pXkeymacsDll->SetAtIbeamCursorOnly(nApplicationID, CONTROL, 'X', bAtIbeamCursorOnly);\r
+ }\r
+ }\r
+ }\r
+\r
+ pMainFrame->m_pXkeymacsDll->SetKillRingMax(nApplicationID, m_XkeymacsData[nApplicationID].GetKillRingMax());\r
+ pMainFrame->m_pXkeymacsDll->SetUseDialogSetting(nApplicationID, m_XkeymacsData[nApplicationID].GetUseDialogSetting());\r
+ pMainFrame->m_pXkeymacsDll->SetSettingStyle(nApplicationID, m_XkeymacsData[nApplicationID].GetSettingStyle());\r
+ pMainFrame->m_pXkeymacsDll->SetIgnoreUndefinedMetaCtrl(nApplicationID, m_XkeymacsData[nApplicationID].GetIgnoreUndefinedMetaCtrl());\r
+ pMainFrame->m_pXkeymacsDll->SetIgnoreUndefinedC_x(nApplicationID, m_XkeymacsData[nApplicationID].GetIgnoreUndefinedC_x());\r
+ pMainFrame->m_pXkeymacsDll->SetEnableCUA(nApplicationID, m_XkeymacsData[nApplicationID].GetEnableCUA());\r
+ pMainFrame->m_pXkeymacsDll->Set326Compatible(nApplicationID, m_XkeymacsData[nApplicationID].Get326Compatible());\r
+ }\r
+}\r
+\r
+void CProfile::ReadKeyBind(int *const pnCommandType, int *const pnKey, LPCTSTR szKeyBind)\r
+{\r
+ *pnCommandType = KeyBind2CommandType(szKeyBind);\r
+ *pnKey = KeyBind2Key(szKeyBind + _tcslen(CommandType2String(*pnCommandType)));\r
+}\r
+\r
+CString CProfile::WriteKeyBind(const int nCommandType, const int nKey)\r
+{\r
+ CString szKeyBind;\r
+ szKeyBind.Format(_T("%s%s"), CommandType2String(nCommandType), Key2String(nKey));\r
+ return szKeyBind;\r
+}\r
+\r
+int CProfile::KeyBind2CommandType(LPCTSTR szKeyBind)\r
+{\r
+ for (int nCommandType = MAX_COMMAND_TYPE - 1; nCommandType; --nCommandType) {\r
+ if (IsCommandType(nCommandType, szKeyBind)) {\r
+ return nCommandType;\r
+ }\r
+ }\r
+ return NONE;\r
+}\r
+\r
+int CProfile::KeyBind2Key(LPCTSTR szKey)\r
+{\r
+ for (int nKey = 1; nKey < 0xff; ++nKey) {\r
+ if (!_tcscmp(szKey, Key2String(nKey))) {\r
+ return nKey;\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+LPCTSTR CProfile::CommandType2String(int nCommandType)\r
+{\r
+ if (nCommandType < 0 || sizeof(CommandTypes) / sizeof(CommandTypes[0]) <= nCommandType) {\r
+ ASSERT(0);\r
+ nCommandType = NONE;\r
+ }\r
+ return CommandTypes[nCommandType].szCommandTypeName;\r
+}\r
+\r
+LPCTSTR CProfile::Key2String(int nKey)\r
+{\r
+ if (CProfile::Is106Keyboard()) {\r
+ switch (nKey) {\r
+ case 0xBA:\r
+ return _T(":");\r
+ case 0xBB:\r
+ return _T(";");\r
+ case 0xC0:\r
+ return _T("@");\r
+ case 0xDE:\r
+ return _T("^");\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (nKey < 0 || sizeof(KeyNames) / sizeof(KeyNames[0]) <= nKey) {\r
+ ASSERT(0);\r
+ nKey = 0;\r
+ }\r
+ return KeyNames[nKey].name;\r
+}\r
+\r
+BOOL CProfile::IsCommandType(const int nCommandType, LPCTSTR szKeyBind)\r
+{\r
+ LPCTSTR szCommandType = CommandType2String(nCommandType);\r
+\r
+ if (!_tcsnicmp(szKeyBind, szCommandType, _tcslen(szCommandType))) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+void CProfile::SaveKeyBind(const CString szApplicationName, const int nCommandID, const int nCommandType, const int nKey)\r
+{\r
+ if (!nCommandID) {\r
+ return;\r
+ }\r
+\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ return;\r
+ }\r
+\r
+ SaveKeyBind(szApplicationName, szCommandName, nCommandType, nKey);\r
+}\r
+\r
+void CProfile::SaveKeyBind(const CString szApplicationName, const CString szCommandName, const int nCommandType, const int nKey)\r
+{\r
+ CString szKeyBind = WriteKeyBind(nCommandType, nKey);\r
+ CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szSubKey += _T("\\") + szApplicationName + _T("\\") + szCommandName;\r
+ if (!szKeyBind.IsEmpty()) {\r
+ szSubKey += _T("\\") + szKeyBind;\r
+ }\r
+\r
+ HKEY hKey = NULL;\r
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS) {\r
+ RegCloseKey(hKey);\r
+ }\r
+}\r
+\r
+void CProfile::SaveCommand(const CString szApplicationName, const int nCommandID)\r
+{\r
+ SaveKeyBind(szApplicationName, nCommandID, 0, 0);\r
+}\r
+\r
+void CProfile::AddKeyBind2C_(const CString szApplicationName, const BYTE bVk)\r
+{\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ if (Commands[nCommandID].fCommand == CCommands::C_) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ SaveKeyBind(szApplicationName, nCommandID, NONE, bVk);\r
+}\r
+\r
+void CProfile::LevelUp()\r
+{\r
+ const int nDefalutLevel = 0;\r
+ const int nLatestLevel = 4;\r
+\r
+ CString szSection;\r
+ CString szEntry;\r
+ szEntry.Format(_T("Level"));\r
+\r
+// const int nCurrentLevel = AfxGetApp()->GetProfileInt(szSection, szEntry, nDefalutLevel);\r
+ switch (AfxGetApp()->GetProfileInt(szSection, szEntry, nDefalutLevel)) {\r
+ case nDefalutLevel:\r
+ {\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString szEntry;\r
+ szEntry.Format(IDS_REG_ENTRY_APPLICATION, nApplicationID);\r
+\r
+ CString szApplicationName;\r
+ szApplicationName = AfxGetApp()->GetProfileString(CString(MAKEINTRESOURCE(IDS_REG_SECTION_APPLICATION)), szEntry);\r
+ if (szApplicationName.IsEmpty()) {\r
+ continue;\r
+ }\r
+\r
+ AddKeyBind2C_(szApplicationName, VK_LCONTROL);\r
+ AddKeyBind2C_(szApplicationName, VK_RCONTROL);\r
+ }\r
+ }\r
+ // Do NOT write break; here.\r
+ case 1:\r
+ {\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString szEntry;\r
+ szEntry.Format(IDS_REG_ENTRY_APPLICATION, nApplicationID);\r
+\r
+ CString szApplicationName;\r
+ szApplicationName = AfxGetApp()->GetProfileString(CString(MAKEINTRESOURCE(IDS_REG_SECTION_APPLICATION)), szEntry);\r
+ if (szApplicationName.IsEmpty()) {\r
+ continue;\r
+ }\r
+\r
+ // Set kill-ring-max 1 if it is 0.\r
+ if (!AfxGetApp()->GetProfileInt(szApplicationName, CString(MAKEINTRESOURCE(IDS_REG_ENTRY_KILL_RING_MAX)), 0)) {\r
+ AfxGetApp()->WriteProfileInt(szApplicationName, CString(MAKEINTRESOURCE(IDS_REG_ENTRY_KILL_RING_MAX)), 1);\r
+ }\r
+ }\r
+ }\r
+ // Do NOT write break; here.\r
+ case 2:\r
+ {\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString szEntry;\r
+ szEntry.Format(IDS_REG_ENTRY_APPLICATION, nApplicationID);\r
+\r
+ CString szApplicationName;\r
+ szApplicationName = AfxGetApp()->GetProfileString(CString(MAKEINTRESOURCE(IDS_REG_SECTION_APPLICATION)), szEntry);\r
+ if (szApplicationName.IsEmpty()) {\r
+ continue;\r
+ }\r
+\r
+ // Chaged a label from Enter to newline.\r
+ CString szSrcSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szSrcSubKey += _T("\\") + szApplicationName + _T("\\") + _T("Enter");\r
+ CString szDestSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szDestSubKey += _T("\\") + szApplicationName + _T("\\") + _T("newline");\r
+ HKEY hKeyDest = NULL;\r
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, szDestSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyDest, NULL) == ERROR_SUCCESS) {\r
+ SHCopyKey(HKEY_CURRENT_USER, szSrcSubKey, hKeyDest, NULL);\r
+ SHDeleteKey(HKEY_CURRENT_USER, szSrcSubKey);\r
+ RegCloseKey(hKeyDest);\r
+ }\r
+ }\r
+ }\r
+ // Do NOT write break; here.\r
+ case 3:\r
+ {\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString szEntry;\r
+ szEntry.Format(IDS_REG_ENTRY_APPLICATION, nApplicationID);\r
+\r
+ CString szApplicationName;\r
+ szApplicationName = AfxGetApp()->GetProfileString(CString(MAKEINTRESOURCE(IDS_REG_SECTION_APPLICATION)), szEntry);\r
+ if (szApplicationName.IsEmpty()) {\r
+ continue;\r
+ }\r
+\r
+ // rename original function to remove IDS_REG_ORIGINAL_PREFIX\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ HKEY hKey = NULL;\r
+ CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+ szSubKey += _T("\\") + szApplicationName + _T("\\") + CString(MAKEINTRESOURCE(IDS_REG_ORIGINAL_PREFIX)) + CDotXkeymacs::GetFunctionSymbol(nFunctionID);\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+ // Use registry data\r
+ TCHAR szKeyBind[128] = {'\0'};\r
+ DWORD dwKeyBind = sizeof(szKeyBind);\r
+ FILETIME ft = {'\0'}; // not use\r
+ for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, &ft) == ERROR_SUCCESS; ++dwIndex) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ ReadKeyBind(&nCommandType, &nKey, szKeyBind);\r
+ SaveKeyBind(szApplicationName, CDotXkeymacs::GetFunctionSymbol(nFunctionID), nCommandType, nKey);\r
+\r
+ memset(szKeyBind, 0, sizeof(szKeyBind));\r
+ dwKeyBind = sizeof(szKeyBind);\r
+ }\r
+ RegCloseKey(hKey);\r
+ }\r
+ }\r
+ }\r
+ }\r
+// case 4:\r
+// foo();\r
+// ...\r
+// case nLatestLevel-1:\r
+// bar();\r
+ AfxGetApp()->WriteProfileInt(szSection, szEntry, nLatestLevel);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void CProfile::InitDllData()\r
+{\r
+ LoadRegistryData();\r
+ SetDllData();\r
+}\r
+\r
+void CProfile::ClearData(const CString szCurrentApplication)\r
+{\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ if (m_XkeymacsData[nApplicationID].GetApplicationName() == szCurrentApplication) {\r
+ break;\r
+ }\r
+ }\r
+ if (nApplicationID < MAX_APP) {\r
+ m_XkeymacsData[nApplicationID].ClearAll();\r
+ }\r
+}\r
+\r
+// return count of saved settings\r
+int CProfile::GetSavedSettingCount()\r
+{\r
+ int nSavedSetting = 0;\r
+\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString szApplicationName;\r
+ szApplicationName = m_XkeymacsData[nApplicationID].GetApplicationName();\r
+ if (!szApplicationName.IsEmpty()) {\r
+ ++nSavedSetting;\r
+ }\r
+ }\r
+\r
+ return nSavedSetting;\r
+}\r
+\r
+void CProfile::InitApplicationList(CComboBox *const cApplicationList)\r
+{\r
+ cApplicationList->ResetContent();\r
+\r
+ m_dwTasks = GetTaskList(m_TaskList, MAX_TASKS);\r
+\r
+ EnumWindows(EnumWindowsProc, (LPARAM)cApplicationList);\r
+\r
+ for (int i = 0; i < MAX_APP; ++i) {\r
+ CString szApplicationName = m_XkeymacsData[i].GetApplicationName();\r
+ CString szApplicationTitle = m_XkeymacsData[i].GetApplicationTitle();\r
+\r
+ CString szListItem;\r
+ szListItem.Format(IDS_APPLICATION_LIST_ITEM, szApplicationTitle, szApplicationName);\r
+ if (IsNotSameString(cApplicationList, szListItem)\r
+ && !IsDefault(szApplicationName)\r
+ && !IsDialog(szApplicationName)\r
+ && !szApplicationName.IsEmpty()) {\r
+ cApplicationList->AddString(szListItem);\r
+ }\r
+ }\r
+\r
+ // Add IME\r
+ HKL hKL = GetKeyboardLayout(0);\r
+ if (ImmIsIME(hKL)) {\r
+ LPTSTR szIMEDescription = NULL;\r
+ UINT nIMEDescription = ImmGetDescription(hKL, NULL, 0);\r
+ if (nIMEDescription) {\r
+ nIMEDescription += sizeof(TCHAR); // for NULL\r
+ if ((szIMEDescription = new TCHAR[nIMEDescription]) != NULL) {\r
+ ImmGetDescription(hKL, szIMEDescription, nIMEDescription);\r
+ }\r
+// CUtils::Log(_T("nIMEDescription = %d, szIMEDescription = _%s_"), nIMEDescription, szIMEDescription);\r
+ }\r
+\r
+ LPTSTR szIMEFileName = NULL;\r
+ UINT nIMEFileName = ImmGetIMEFileName(hKL, NULL, 0);\r
+ if (nIMEFileName) {\r
+ nIMEFileName += sizeof(TCHAR);\r
+ if ((szIMEFileName = new TCHAR[nIMEFileName]) != NULL) {\r
+ ImmGetIMEFileName(hKL, szIMEFileName, nIMEFileName);\r
+ }\r
+// CUtils::Log(_T("nIMEFileName = %d, szIMEFileName = _%s_"), nIMEFileName, szIMEFileName);\r
+ }\r
+\r
+ CString szIMETitle;\r
+ CString szIME(MAKEINTRESOURCE(IDS_IME_FILE_NAME));\r
+ szIMETitle.Format(IDS_APPLICATION_LIST_ITEM, szIMEDescription ? szIMEDescription : szIME, szIMEFileName ? szIMEFileName : szIME);\r
+// CUtils::Log(_T("szIMETitle = _%s_, szIMEDescription = _%s_, szIMEFileName = _%s_"), szIMETitle, szIMEDescription, szIMEFileName);\r
+ if (IsNotSameString(cApplicationList, szIMETitle)) {\r
+ cApplicationList->AddString(szIMETitle);\r
+ }\r
+\r
+ delete[] szIMEDescription;\r
+ szIMEDescription = NULL;\r
+ delete[] szIMEFileName;\r
+ szIMEFileName = NULL;\r
+ }\r
+\r
+ // Add Dialog\r
+ cApplicationList->InsertString(0, CString(MAKEINTRESOURCE(IDS_DIALOG_TITLE)));\r
+\r
+ // Add Default\r
+ cApplicationList->InsertString( 0, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));\r
+ cApplicationList->SelectString(-1, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));\r
+}\r
+\r
+DWORD CProfile::GetTaskList(PTASK_LIST pTask, const DWORD dwNumTasks)\r
+{\r
+ for (int i = 0; i < MAX_TASKS; ++i) {\r
+ ZeroMemory(&pTask[i], sizeof(PTASK_LIST));\r
+ }\r
+\r
+ OSVERSIONINFO verInfo = {0};\r
+ verInfo.dwOSVersionInfoSize = sizeof (verInfo);\r
+ GetVersionEx(&verInfo);\r
+ if (verInfo.dwPlatformId == VER_PLATFORM_WIN32_NT\r
+ && verInfo.dwMajorVersion < 5) {\r
+ return GetTaskListNT(pTask, dwNumTasks);\r
+ }\r
+\r
+ HMODULE hKernel = GetModuleHandle(_T("KERNEL32.DLL"));\r
+ if (!hKernel) {\r
+ return 0;\r
+ }\r
+\r
+ CREATESNAPSHOT pCreateToolhelp32Snapshot = (CREATESNAPSHOT)GetProcAddress(hKernel, "CreateToolhelp32Snapshot");\r
+ if (!pCreateToolhelp32Snapshot) {\r
+ return 0;\r
+ }\r
+\r
+ PROCESSWALK pProcess32First = (PROCESSWALK)GetProcAddress(hKernel, "Process32First");\r
+ if (!pProcess32First) {\r
+ return 0;\r
+ }\r
+\r
+ PROCESSWALK pProcess32Next = (PROCESSWALK)GetProcAddress(hKernel, "Process32Next");\r
+ if (!pProcess32Next) {\r
+ return 0;\r
+ }\r
+\r
+ HANDLE hProcessSnap = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\r
+ if (hProcessSnap == (HANDLE)-1) {\r
+ return 0;\r
+ }\r
+\r
+ DWORD dwTaskCount = 0;\r
+ PROCESSENTRY32 processEntry32 = {sizeof(PROCESSENTRY32)};\r
+ if (pProcess32First(hProcessSnap, &processEntry32)) {\r
+ do {\r
+ LPTSTR pCurChar = NULL;\r
+ for (pCurChar = processEntry32.szExeFile + lstrlen(processEntry32.szExeFile); *pCurChar != _T('\\') && pCurChar != processEntry32.szExeFile; --pCurChar) {\r
+ ;\r
+ }\r
+ if (*pCurChar == _T('\\')) {\r
+ ++pCurChar;\r
+ }\r
+\r
+ lstrcpy(pTask->ProcessName, pCurChar);\r
+ pTask->dwProcessId = processEntry32.th32ProcessID;\r
+\r
+ ++dwTaskCount;\r
+ ++pTask;\r
+ } while (dwTaskCount < dwNumTasks && pProcess32Next(hProcessSnap, &processEntry32));\r
+ }\r
+\r
+ CloseHandle(hProcessSnap);\r
+ return dwTaskCount;\r
+}\r
+\r
+LPBYTE CProfile::GetCounters()\r
+{\r
+ LANGID lid = MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL);\r
+ CString szSubKey;\r
+ szSubKey.Format(CString(MAKEINTRESOURCE(IDS_REGSUBKEY_PERF)), lid);\r
+ HKEY hKey = NULL;\r
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {\r
+ return NULL;\r
+ }\r
+\r
+ DWORD dwSize = 0;\r
+ if (RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_COUNTERS)), NULL, NULL, NULL, &dwSize) != ERROR_SUCCESS) {\r
+ RegCloseKey(hKey);\r
+ return NULL;\r
+ }\r
+ LPBYTE pCounters = (LPBYTE) calloc(dwSize, sizeof(BYTE));\r
+ if (pCounters == NULL) {\r
+ RegCloseKey(hKey);\r
+ return NULL;\r
+ }\r
+ if (RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_COUNTERS)), NULL, NULL, pCounters, &dwSize) != ERROR_SUCCESS) {\r
+ RegCloseKey(hKey);\r
+ free(pCounters);\r
+ return NULL;\r
+ }\r
+ RegCloseKey(hKey);\r
+ return pCounters;\r
+}\r
+\r
+BOOL CProfile::GetProcessInfo(CString *const szProcessName, DWORD *const dwProcessId)\r
+{\r
+ LPBYTE pCounters = GetCounters();\r
+ if (!pCounters) {\r
+ return FALSE;\r
+ }\r
+ LPTSTR pTopOfString = (LPTSTR)pCounters;\r
+ while (*pTopOfString) {\r
+ if (_tcsicmp(pTopOfString, CString(MAKEINTRESOURCE(IDS_PROCESS))) == 0) {\r
+ for (LPTSTR p2 = pTopOfString - 2; _istdigit(*p2); --p2) {\r
+ ;\r
+ }\r
+ szProcessName->Format(_T("%s"), p2 + 1); // 230\r
+ } else if (_tcsicmp(pTopOfString, CString(MAKEINTRESOURCE(IDS_PROCESSID))) == 0) {\r
+ for (LPTSTR p2 = pTopOfString - 2; _istdigit(*p2); --p2) {\r
+ ;\r
+ }\r
+ *dwProcessId = _ttol(p2 + 1); // 784\r
+ }\r
+ pTopOfString += (_tcslen(pTopOfString) + 1);\r
+ }\r
+ free(pCounters);\r
+ return TRUE;\r
+}\r
+\r
+PPERF_DATA_BLOCK CProfile::GetPerformanceData(const CString szProcessName)\r
+{\r
+ DWORD dwSize = INITIAL_SIZE;\r
+ PPERF_DATA_BLOCK pPerformanceData = (PPERF_DATA_BLOCK) calloc(dwSize, sizeof(BYTE));\r
+ if (pPerformanceData == NULL) {\r
+ return NULL;\r
+ }\r
+\r
+ for (;;) {\r
+ switch (RegQueryValueEx(HKEY_PERFORMANCE_DATA, szProcessName, NULL, NULL, (LPBYTE)pPerformanceData, &dwSize)) {\r
+ case ERROR_SUCCESS:\r
+ if (0 < dwSize\r
+ && pPerformanceData->Signature[0] == (WCHAR)'P'\r
+ && pPerformanceData->Signature[1] == (WCHAR)'E'\r
+ && pPerformanceData->Signature[2] == (WCHAR)'R'\r
+ && pPerformanceData->Signature[3] == (WCHAR)'F') {\r
+ return pPerformanceData;\r
+ }\r
+ case ERROR_MORE_DATA:\r
+ dwSize += EXTEND_SIZE;\r
+ pPerformanceData = (PPERF_DATA_BLOCK) realloc(pPerformanceData, dwSize);\r
+ if (!pPerformanceData) {\r
+ return NULL;\r
+ }\r
+ memset(pPerformanceData, 0, dwSize);\r
+ break;\r
+ default:\r
+ free(pPerformanceData);\r
+ return NULL;\r
+ }\r
+ }\r
+}\r
+\r
+// Add running application's names to the list\r
+// only for _Windows NT_\r
+DWORD CProfile::GetTaskListNT(PTASK_LIST pTask, DWORD dwNumTasks)\r
+{\r
+ CString szProcessName;\r
+ DWORD dwProcessIdTitle = 0;\r
+ if (!GetProcessInfo(&szProcessName, &dwProcessIdTitle)) {\r
+ return dwNumTasks;\r
+ }\r
+\r
+ PPERF_DATA_BLOCK pPerformanceData = GetPerformanceData(szProcessName);\r
+ if (!pPerformanceData) {\r
+ return dwNumTasks;\r
+ }\r
+\r
+ PPERF_OBJECT_TYPE pObj = (PPERF_OBJECT_TYPE) ((DWORD)pPerformanceData + pPerformanceData->HeaderLength);\r
+ PPERF_COUNTER_DEFINITION pCounterDef = (PPERF_COUNTER_DEFINITION) ((DWORD)pObj + pObj->HeaderLength);\r
+ DWORD dwProcessIdCounter = 0;\r
+ for (DWORD i = 0; i < pObj->NumCounters; ++i) {\r
+ if (pCounterDef->CounterNameTitleIndex == dwProcessIdTitle) {\r
+ dwProcessIdCounter = pCounterDef->CounterOffset;\r
+ break;\r
+ }\r
+ ++pCounterDef;\r
+ }\r
+\r
+ dwNumTasks = min(dwNumTasks - 1, (DWORD)pObj->NumInstances);\r
+ PPERF_INSTANCE_DEFINITION pInst = (PPERF_INSTANCE_DEFINITION) ((DWORD)pObj + pObj->DefinitionLength);\r
+ for (i = 0; i < dwNumTasks; ++i) {\r
+ LPCWSTR pProcessName = (LPCWSTR) ((DWORD)pInst + pInst->NameOffset);\r
+\r
+ CHAR szProcessName[MAX_PATH] = {'\0'};\r
+ if (!WideCharToMultiByte(CP_ACP, 0, pProcessName, -1, szProcessName, sizeof(szProcessName), NULL, NULL)) {\r
+ _tcscpy(pTask->ProcessName, CString(MAKEINTRESOURCE(IDS_UNKNOWN_TASK)));\r
+ }\r
+\r
+ if (_tcslen(szProcessName)+4 <= sizeof(pTask->ProcessName)) {\r
+ _tcscpy(pTask->ProcessName, szProcessName);\r
+ _tcscat(pTask->ProcessName, CString(MAKEINTRESOURCE(IDS_EXTENSION_EXECUTABLE)));\r
+ }\r
+\r
+ PPERF_COUNTER_BLOCK pCounter = (PPERF_COUNTER_BLOCK) ((DWORD)pInst + pInst->ByteLength);\r
+ pTask->dwProcessId = *((LPDWORD) ((DWORD)pCounter + dwProcessIdCounter));\r
+ if (pTask->dwProcessId == 0) {\r
+ pTask->dwProcessId = (DWORD) -2;\r
+ }\r
+\r
+ ++pTask;\r
+ pInst = (PPERF_INSTANCE_DEFINITION) ((DWORD)pCounter + pCounter->ByteLength);\r
+ }\r
+\r
+ free(pPerformanceData);\r
+ return dwNumTasks;\r
+}\r
+\r
+// return application index\r
+// and update setting style\r
+// if there is NOT the application in the data, this function takes care of it.\r
+int CProfile::GetApplicationIndex(const CString szApplicationName, const BOOL bSaveAndValidate, int *const nSettingStyle)\r
+{\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ *nSettingStyle = SETTING_UNDEFINED;\r
+ }\r
+\r
+ int nApplicationID = GetApplicationIndex(szApplicationName);\r
+\r
+ if (nApplicationID == MAX_APP) {\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ for (nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ CString sz = m_XkeymacsData[nApplicationID].GetApplicationName();\r
+ if (sz.IsEmpty()) {\r
+ m_XkeymacsData[nApplicationID].SetApplicationName(szApplicationName);\r
+ break;\r
+ }\r
+ }\r
+ if (nApplicationID == MAX_APP) {\r
+ return nApplicationID;\r
+ }\r
+ } else { // SetDialogData\r
+ for (nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ if (IsDefault(m_XkeymacsData[nApplicationID].GetApplicationName())) {\r
+ *nSettingStyle = SETTING_DEFAULT;\r
+ break;\r
+ }\r
+ }\r
+ if (nApplicationID == MAX_APP) {\r
+ return nApplicationID;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ m_XkeymacsData[nApplicationID].SetSettingStyle(*nSettingStyle);\r
+ } else { // SetDialogData\r
+ if (*nSettingStyle == SETTING_UNDEFINED) { // It means that *nSettingStyle != SETTING_DEFAULT.\r
+ *nSettingStyle = m_XkeymacsData[nApplicationID].GetSettingStyle();\r
+ }\r
+ }\r
+\r
+ return nApplicationID;\r
+}\r
+\r
+BOOL CProfile::IsTheString(const CString sz, const UINT nID)\r
+{\r
+ return sz == CString(MAKEINTRESOURCE(nID));\r
+}\r
+\r
+// if sz is "Default", return TRUE\r
+BOOL CProfile::IsDefault(const CString sz)\r
+{\r
+ return IsTheString(sz, IDS_DEFAULT);\r
+}\r
+\r
+// if sz is "Dialog", return TRUE\r
+BOOL CProfile::IsDialog(const CString sz)\r
+{\r
+ return IsTheString(sz, IDS_DIALOG);\r
+}\r
+\r
+void CProfile::GetApplicationTitle(CComboBox *const cApplicationList, CString &rList, const int nIndex)\r
+{\r
+ if (0 <= nIndex) {\r
+ cApplicationList->GetLBText(nIndex, rList);\r
+ } else {\r
+ cApplicationList->GetWindowText(rList);\r
+ }\r
+\r
+ if (IsTheString(rList, IDS_DEFAULT_TITLE)) {\r
+ rList.LoadString(IDS_DEFAULT);\r
+ }\r
+\r
+ if (IsTheString(rList, IDS_DIALOG_TITLE)) {\r
+ rList.LoadString(IDS_DIALOG);\r
+ }\r
+\r
+ return;\r
+}\r
+\r
+void CProfile::UpdateApplicationTitle(CComboBox *const cApplicationList, const CString szCurrentApplication, const int nApplicationID, const BOOL bSaveAndValidate)\r
+{\r
+ static CString szApplicationTitle;\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ if (!CProfile::IsDefault(szCurrentApplication)) {\r
+ m_XkeymacsData[nApplicationID].SetApplicationTitle(szApplicationTitle);\r
+ }\r
+ szApplicationTitle.Empty();\r
+ } else { // SetDialogData\r
+ CString szListItem;\r
+ CProfile::GetApplicationTitle(cApplicationList, szListItem);\r
+ int nEndTitle = szListItem.ReverseFind(_T('('));\r
+ if (nEndTitle > 0) {\r
+ szApplicationTitle = szListItem.Left(nEndTitle);\r
+ }\r
+ }\r
+}\r
+\r
+void CProfile::SetCommandID(const int nApplicationID, const int nCommandType, const int nKey, int nCommandID)\r
+{\r
+ if (nKey == 0xf0 && Commands[nCommandID].fCommand == CCommands::C_) {\r
+ // Change CommandID C_Eisu\r
+ for (nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ if (Commands[nCommandID].fCommand == CCommands::C_Eisu) {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ m_XkeymacsData[nApplicationID].SetCommandID(nCommandType, nKey, nCommandID);\r
+}\r
+\r
+int CProfile::GetCommandID(const int nApplicationID, const int nCommandType, const int nKey)\r
+{\r
+ int nCommandID = m_XkeymacsData[nApplicationID].GetCommandID(nCommandType, nKey);\r
+ if (nKey == 0xf0 && Commands[nCommandID].fCommand == CCommands::C_Eisu) {\r
+ // Change CommandID C_\r
+ for (nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ if (Commands[nCommandID].fCommand == CCommands::C_) {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return nCommandID;\r
+}\r
+\r
+void CProfile::SetKillRingMax(const int nApplicationID, const int nKillRingMax)\r
+{\r
+ m_XkeymacsData[nApplicationID].SetKillRingMax(nKillRingMax);\r
+}\r
+\r
+int CProfile::GetKillRingMax(const int nApplicationID)\r
+{\r
+ return m_XkeymacsData[nApplicationID].GetKillRingMax();\r
+}\r
+\r
+void CProfile::SetUseDialogSetting(const int nApplicationID, const BOOL bUseDialogSetting)\r
+{\r
+ m_XkeymacsData[nApplicationID].SetUseDialogSetting(bUseDialogSetting);\r
+}\r
+\r
+BOOL CProfile::GetUseDialogSetting(const int nApplicationID)\r
+{\r
+ return m_XkeymacsData[nApplicationID].GetUseDialogSetting();\r
+}\r
+\r
+void CProfile::SetWindowText(const int nApplicationID, const CString szWindowText)\r
+{\r
+ m_XkeymacsData[nApplicationID].SetWindowText(szWindowText);\r
+}\r
+\r
+CString CProfile::GetWindowText(const int nApplicationID)\r
+{\r
+ return m_XkeymacsData[nApplicationID].GetWindowText();\r
+}\r
+\r
+void CProfile::DeleteAllRegistryData()\r
+{\r
+ HKEY hkey = NULL;\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)), 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS) {\r
+ // I am sure that I have to do only one time, but...\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ DWORD dwIndex = 0;\r
+ TCHAR szName[SUB_KEY_NAME_LENGTH] = {'\0'};\r
+ DWORD dwName = sizeof(szName);\r
+ FILETIME filetime;\r
+\r
+ while (RegEnumKeyEx(hkey, dwIndex, szName, &dwName, NULL, NULL, NULL, &filetime) == ERROR_SUCCESS) {\r
+// RegDeleteKey(hkey, szName);\r
+ SHDeleteKey(hkey, szName);\r
+ ZeroMemory(szName, sizeof(szName));\r
+ dwName = sizeof(szName);\r
+ }\r
+ }\r
+ RegCloseKey(hkey);\r
+ }\r
+}\r
+\r
+int CProfile::GetCurrentApplicationID(CComboBox *const cApplicationList, const CString szCurrentApplication)\r
+{\r
+ int nCounter = cApplicationList->GetCount();\r
+ CString szListItem;\r
+ int nCurSel = cApplicationList->GetCurSel();\r
+\r
+ for (int i = 0; i < nCounter; ++i) {\r
+ cApplicationList->SetCurSel(i);\r
+ CProfile::GetApplicationTitle(cApplicationList, szListItem);\r
+ if (szListItem.Find(szCurrentApplication) != -1) {\r
+ cApplicationList->SetCurSel(nCurSel);\r
+ return i;\r
+ }\r
+ }\r
+ return -1;\r
+}\r
+\r
+void CProfile::CopyData(const CString szDestinationApplication, const CString szSourceApplication)\r
+{\r
+ int nSettingStyle = SETTING_SPECIFIC;\r
+ int nDestinationApplication = GetApplicationIndex(szDestinationApplication, TRUE, &nSettingStyle);\r
+ int nSourceApplication = GetApplicationIndex(szSourceApplication);\r
+\r
+ CString szApplicationName = m_XkeymacsData[nDestinationApplication].GetApplicationName();\r
+ CString szApplicationTitle = m_XkeymacsData[nDestinationApplication].GetApplicationTitle();\r
+ CString szWindowText = m_XkeymacsData[nDestinationApplication].GetWindowText();\r
+ int nWindowTextType = m_XkeymacsData[nDestinationApplication].GetWindowTextType();\r
+\r
+ m_XkeymacsData[nDestinationApplication] = m_XkeymacsData[nSourceApplication];\r
+\r
+ m_XkeymacsData[nDestinationApplication].SetApplicationName(szApplicationName);\r
+ m_XkeymacsData[nDestinationApplication].SetApplicationTitle(szApplicationTitle);\r
+ m_XkeymacsData[nDestinationApplication].SetWindowText(szWindowText);\r
+ m_XkeymacsData[nDestinationApplication].SetWindowTextType(nWindowTextType);\r
+}\r
+\r
+// return application index\r
+// if there is NOT the application in the data, return MAX_APP\r
+int CProfile::GetApplicationIndex(const CString szApplicationName)\r
+{\r
+ int nApplicationID = 0;\r
+ for (nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ if (m_XkeymacsData[nApplicationID].GetApplicationName() == szApplicationName) {\r
+ break;\r
+ }\r
+ }\r
+ return nApplicationID;\r
+}\r
+\r
+BOOL CProfile::Is106Keyboard()\r
+{\r
+ static KEYBOARD_TYPE keyboard = UNKNOWN_KEYBOARD;\r
+\r
+ if (keyboard == UNKNOWN_KEYBOARD) {\r
+ OSVERSIONINFO verInfo = {0};\r
+ verInfo.dwOSVersionInfoSize = sizeof (verInfo);\r
+ GetVersionEx(&verInfo);\r
+\r
+ DWORD subtype = 0;\r
+ DWORD cbData = sizeof(subtype);\r
+\r
+ if (verInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) {\r
+ HKEY hKey = NULL;\r
+ CString szSubKey(_T("SYSTEM\\CurrentControlSet\\Services\\i8042prt\\Parameters"));\r
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubKey, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {\r
+ static const CString szValueName(_T("OverrideKeyboardSubtype"));\r
+ if (RegQueryValueEx(hKey, szValueName, NULL, NULL, (LPBYTE)&subtype, &cbData) != ERROR_SUCCESS) {\r
+ subtype = 0;\r
+ }\r
+ RegCloseKey(hKey);\r
+ }\r
+ } else if (verInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {\r
+ subtype = GetPrivateProfileInt(_T("keyboard"), _T("subtype"), 0, _T("system.ini"));\r
+ }\r
+\r
+ keyboard = (subtype & 0x02) ? JAPANESE_KEYBOARD : ENGLISH_KEYBOARD;\r
+ }\r
+\r
+ return keyboard == JAPANESE_KEYBOARD;\r
+}\r
+\r
+void CProfile::LoadScanCodeMap(const HKEY_TYPE hkeyType)\r
+{\r
+ memset(m_ScanCodeMap[hkeyType], 0, sizeof(m_ScanCodeMap[hkeyType]));\r
+ memset(m_CurrentScanCodeMap[hkeyType], 0, sizeof(m_CurrentScanCodeMap[hkeyType]));\r
+\r
+ CString szSubKey;\r
+ CString szValueName;\r
+ HKEY hKey = HKEY_LOCAL_MACHINE;\r
+ if (IsNT()) {\r
+ switch (hkeyType) {\r
+ case CURRENT_USER:\r
+ hKey = HKEY_CURRENT_USER;\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEYBOARD_LAYOUT);\r
+ break;\r
+ case LOCAL_MACHINE:\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEYBOARD_LAYOUT_ANY_USER);\r
+ break;\r
+ default:\r
+ return;\r
+ }\r
+ szValueName.LoadString(IDS_SCANCODE_MAP);\r
+ } else if (Is9x()) {\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEY_REMAP);\r
+ szValueName.LoadString(IDS_0);\r
+ } else {\r
+ return;\r
+ }\r
+\r
+ HKEY hkResult = NULL;\r
+ if (RegOpenKeyEx(hKey, szSubKey, 0, KEY_QUERY_VALUE, &hkResult) == ERROR_SUCCESS) {\r
+ // get data size\r
+ DWORD dwType = REG_BINARY;\r
+ DWORD dwData = 0;\r
+ RegQueryValueEx(hkResult, szValueName, NULL, &dwType, NULL, &dwData);\r
+\r
+ // get data\r
+ LPBYTE lpData = new BYTE[dwData];\r
+ if (lpData) {\r
+ RegQueryValueEx(hkResult, szValueName, NULL, &dwType, lpData, &dwData);\r
+ }\r
+ RegCloseKey(hkResult);\r
+\r
+ if (IsNT()) {\r
+ if (lpData && dwData) {\r
+ DWORD offset = 0;\r
+ offset += 8; // skip Version Information and Flags\r
+ DWORD *pdwMappings = (DWORD *)(lpData + offset);\r
+ offset += 4; // skip Number of Mappings\r
+ DWORD *pdwNullTerminator = (DWORD *)(lpData + dwData - 4);\r
+\r
+ if (4 * *pdwMappings + 12 != dwData) {\r
+ // illegal data\r
+ } else if (*pdwNullTerminator != 0) {\r
+ // illegal data\r
+ } else {\r
+ while (offset < dwData - 4) {\r
+ ScanCodeMapping_t *pScanCodeMapping = (ScanCodeMapping_t *)(lpData + offset);\r
+ offset += 4; // go to next data\r
+\r
+ m_CurrentScanCodeMap[hkeyType][PrefixedScanCode2ID(pScanCodeMapping->original.nPrefixedScanCode)][pScanCodeMapping->original.nScanCode].nPrefixedScanCode = pScanCodeMapping->current.nPrefixedScanCode;\r
+ m_CurrentScanCodeMap[hkeyType][PrefixedScanCode2ID(pScanCodeMapping->original.nPrefixedScanCode)][pScanCodeMapping->original.nScanCode].nScanCode = pScanCodeMapping->current.nScanCode;\r
+ m_ScanCodeMap[hkeyType][PrefixedScanCode2ID(pScanCodeMapping->original.nPrefixedScanCode)][pScanCodeMapping->original.nScanCode].nPrefixedScanCode = pScanCodeMapping->current.nPrefixedScanCode;\r
+ m_ScanCodeMap[hkeyType][PrefixedScanCode2ID(pScanCodeMapping->original.nPrefixedScanCode)][pScanCodeMapping->original.nScanCode].nScanCode = pScanCodeMapping->current.nScanCode;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ delete[] lpData;\r
+ lpData = NULL;\r
+ }\r
+}\r
+\r
+int CProfile::LostKeyWarning(const HKEY_TYPE hkeyType)\r
+{\r
+ if (!ChangedKeyboardLayout(hkeyType)) {\r
+ return IDOK;\r
+ }\r
+\r
+ CString szLostKeysList;\r
+\r
+ for (int nPrefixedScanCodeID = 0; nPrefixedScanCodeID < 3; ++nPrefixedScanCodeID) {\r
+ for (int nScanCode = 0; nScanCode < 256; ++nScanCode) {\r
+ if (m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode) {\r
+ BOOL lostKey = TRUE;\r
+\r
+ for (int i = 0; i < 3 && lostKey; ++i) {\r
+ for (int j = 0; j < 256 && lostKey; ++j) {\r
+ if (m_ScanCodeMap[hkeyType][i][j].nPrefixedScanCode == nPrefixedScanCodeID\r
+ && m_ScanCodeMap[hkeyType][i][j].nScanCode == nScanCode) {\r
+ lostKey = FALSE;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (lostKey) {\r
+ for (int i = 0; i < sizeof(KeyboardLayouts)/sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (KeyboardLayouts[i].scancode.nScanCode == nScanCode\r
+ && KeyboardLayouts[i].scancode.nPrefixedScanCode == nPrefixedScanCodeID) {\r
+ CString szLostKey;\r
+ szLostKey.Format(IDS_ERR_LOST_KEY, CString(MAKEINTRESOURCE(GetToolTipID(KeyboardLayouts[i].nToolTipID))));\r
+ szLostKeysList += szLostKey;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (szLostKeysList.IsEmpty()) {\r
+ return IDOK;\r
+ }\r
+\r
+ return AfxMessageBox(szLostKeysList, MB_OKCANCEL | MB_ICONEXCLAMATION);\r
+}\r
+\r
+void CProfile::SaveScanCodeMap(const HKEY_TYPE hkeyType)\r
+{\r
+ CString szSubKey;\r
+ CString szValueName;\r
+ HKEY hKey = HKEY_LOCAL_MACHINE;\r
+ if (IsNT()) {\r
+ switch (hkeyType) {\r
+ case CURRENT_USER:\r
+ hKey = HKEY_CURRENT_USER;\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEYBOARD_LAYOUT);\r
+ break;\r
+ case LOCAL_MACHINE:\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEYBOARD_LAYOUT_ANY_USER);\r
+ break;\r
+ default:\r
+ return;\r
+ }\r
+ szValueName.LoadString(IDS_SCANCODE_MAP);\r
+ } else if (Is9x()) {\r
+ szSubKey.LoadString(IDS_REGSUBKEY_KEY_REMAP);\r
+ szValueName.LoadString(IDS_0);\r
+ } else {\r
+ return;\r
+ }\r
+\r
+ HKEY hkResult = NULL;\r
+ if (RegCreateKeyEx(hKey, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hkResult, NULL) == ERROR_SUCCESS) {\r
+ if (IsNT()) {\r
+ DWORD cbData = GetScanCodeLength(hkeyType);\r
+ if (cbData <= 16) {\r
+ RegDeleteValue(hkResult, szValueName);\r
+ } else {\r
+ LPBYTE lpData = new BYTE[cbData];\r
+ memset(lpData, 0, sizeof(BYTE) * cbData);\r
+\r
+ {\r
+ DWORD dwMappings = (cbData - 12) / 4;\r
+ memmove(lpData + 8, &dwMappings, 4);\r
+ }\r
+\r
+ int offset = 12;\r
+ for (int nPrefixedScanCodeID = 0; nPrefixedScanCodeID < 3; ++nPrefixedScanCodeID) {\r
+ for (int nScanCode = 0; nScanCode < 256; ++nScanCode) {\r
+ if (m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode) {\r
+ ScanCodeMapping_t sScanCodeMapping = {'\0'};\r
+ sScanCodeMapping.original.nPrefixedScanCode = PrefixedScanCodeID2Code(nPrefixedScanCodeID);\r
+ sScanCodeMapping.original.nScanCode = (BYTE)nScanCode;\r
+ sScanCodeMapping.current.nPrefixedScanCode = m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nPrefixedScanCode;\r
+ sScanCodeMapping.current.nScanCode = m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode;\r
+ memcpy(lpData + offset, &sScanCodeMapping, sizeof(sScanCodeMapping));\r
+ offset += sizeof(sScanCodeMapping);\r
+ }\r
+ }\r
+ }\r
+ RegSetValueEx(hkResult, szValueName, 0, REG_BINARY, lpData, cbData);\r
+\r
+ delete[] lpData;\r
+ lpData = NULL;\r
+ }\r
+ }\r
+ RegCloseKey(hkResult);\r
+ }\r
+\r
+ // Do you want to restart computer?\r
+ if (ChangedKeyboardLayout(hkeyType)) {\r
+ if (AfxMessageBox(CString(MAKEINTRESOURCE(IDS_RESTART_OR_NOT)), MB_YESNO | MB_ICONQUESTION) == IDYES) {\r
+ RestartComputer();\r
+ }\r
+ }\r
+}\r
+\r
+// Return True if Windows 95, Windows 98, or Windows Me. \r
+BOOL CProfile::Is9x()\r
+{\r
+ OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};\r
+ GetVersionEx(&info);\r
+\r
+ if (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+// Return True if Windows NT 4.0, Windows 2000, Windows XP, Windows 2003 or Windows Vista.\r
+BOOL CProfile::IsNT()\r
+{\r
+ OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};\r
+ GetVersionEx(&info);\r
+\r
+ if (info.dwPlatformId == VER_PLATFORM_WIN32_NT) {\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+// Return True if Windows Vista or later.\r
+BOOL CProfile::IsVistaOrLater()\r
+{\r
+ OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};\r
+ GetVersionEx(&info);\r
+\r
+ if (6 <= info.dwMajorVersion) {\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+void CProfile::RestartComputer()\r
+{\r
+ if (!AdjustTokenPrivileges(SE_SHUTDOWN_NAME)) {\r
+ return;\r
+ }\r
+\r
+ ExitWindowsEx(EWX_REBOOT, 0);\r
+}\r
+\r
+int CProfile::GetControlID(const ScanCode_t scancode, const BOOL bBase)\r
+{\r
+ for (int i = 0; ; ++i) {\r
+ if (KeyboardLayouts[i].scancode.nPrefixedScanCode == scancode.nPrefixedScanCode\r
+ && KeyboardLayouts[i].scancode.nScanCode == scancode.nScanCode) {\r
+ if (bBase) {\r
+ return KeyboardLayouts[i].nBaseControlID;\r
+ } else {\r
+ return KeyboardLayouts[i].nCurrentControlID;\r
+ }\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
+int CProfile::GetBaseControlID(const ScanCode_t scancode)\r
+{\r
+ return GetControlID(scancode, TRUE);\r
+}\r
+\r
+int CProfile::GetCurrentControlID(const ScanCode_t scancode)\r
+{\r
+ return GetControlID(scancode, FALSE);\r
+}\r
+\r
+BOOL CProfile::GetScanCodeMap(const HKEY_TYPE hkeyType, const ScanCode_t original, ScanCode_t *const current)\r
+{\r
+ if (!current) {\r
+ return FALSE;\r
+ }\r
+ *current = m_ScanCodeMap[hkeyType][PrefixedScanCode2ID(original.nPrefixedScanCode)][original.nScanCode];\r
+ return 0 < current->nScanCode;\r
+}\r
+\r
+void CProfile::SetScanCodeMap(const HKEY_TYPE hkeyType, const ScanCodeMapping_t ScanCodeMappeing)\r
+{\r
+ m_ScanCodeMap[hkeyType][PrefixedScanCode2ID(ScanCodeMappeing.original.nPrefixedScanCode)][ScanCodeMappeing.original.nScanCode] = ScanCodeMappeing.current;\r
+}\r
+\r
+int CProfile::PrefixedScanCode2ID(const BYTE nPrefixedScanCode)\r
+{\r
+ int nID = 0;\r
+\r
+ switch (nPrefixedScanCode) {\r
+ case 0x00:\r
+ nID = 0;\r
+ break;\r
+ case 0xe0:\r
+ nID = 1;\r
+ break;\r
+ case 0xe1:\r
+ nID = 2;\r
+ break;\r
+ default:\r
+ // invalid scan code\r
+ nID = 3;\r
+ break;\r
+ }\r
+\r
+ return nID;\r
+}\r
+\r
+BYTE CProfile::PrefixedScanCodeID2Code(const int nPrefixedScanCodeID)\r
+{\r
+ BYTE nCode = 0;\r
+\r
+ switch (nPrefixedScanCodeID) {\r
+ case 0:\r
+ nCode = 0x00;\r
+ break;\r
+ case 1:\r
+ nCode = 0xe0;\r
+ break;\r
+ case 2:\r
+ nCode = 0xe1;\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ return nCode;\r
+}\r
+\r
+DWORD CProfile::GetScanCodeLength(const HKEY_TYPE hkeyType)\r
+{\r
+ DWORD dwScanCodeLength = 0;\r
+ dwScanCodeLength += 4; // Header: Version Information\r
+ dwScanCodeLength += 4; // Header: Flags\r
+ dwScanCodeLength += 4; // Header: Number of Mappings\r
+ for (int nPrefixedScanCodeID = 0; nPrefixedScanCodeID < 3; ++nPrefixedScanCodeID) {\r
+ for (int nScanCode = 0; nScanCode < 256; ++nScanCode) {\r
+ if (m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode) {\r
+ dwScanCodeLength += 4; // Individual Mappings\r
+ }\r
+ }\r
+ }\r
+ dwScanCodeLength += 4; // Null Terminator (0x00000000)\r
+ return dwScanCodeLength;\r
+}\r
+\r
+BOOL CProfile::ChangedKeyboardLayout(const HKEY_TYPE hkeyType)\r
+{\r
+ for (int nPrefixedScanCodeID = 0; nPrefixedScanCodeID < 3; ++nPrefixedScanCodeID) {\r
+ for (int nScanCode = 0; nScanCode < 256; ++nScanCode) {\r
+ if (m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nPrefixedScanCode != m_CurrentScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nPrefixedScanCode\r
+ || m_ScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode != m_CurrentScanCodeMap[hkeyType][nPrefixedScanCodeID][nScanCode].nScanCode) {\r
+ return TRUE;\r
+ }\r
+ }\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+void CProfile::SetDraggingCursor()\r
+{\r
+ HCURSOR hCursor = (HCURSOR)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_DRAG_CURSOR),\r
+ IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+ SetCursor(hCursor);\r
+}\r
+\r
+void CProfile::SetNormalCursor()\r
+{\r
+ HCURSOR hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW),\r
+ IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+ SetCursor(hCursor);\r
+}\r
+\r
+void CProfile::SetNoCursor()\r
+{\r
+ HCURSOR hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_NO),\r
+ IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+ SetCursor(hCursor);\r
+}\r
+\r
+int CProfile::GetToolTipID(int nToolTipID)\r
+{\r
+ if (Is106Keyboard()) {\r
+ switch (nToolTipID) {\r
+ case IDS_EQUAL: // ^\r
+ nToolTipID = IDS_CARET;\r
+ break;\r
+ case IDS_SQUARE_BRA: // @\r
+ nToolTipID = IDS_AT_MARK;\r
+ break;\r
+ case IDS_SQUARE_CKET: // [\r
+ nToolTipID = IDS_SQUARE_BRA;\r
+ break;\r
+ case IDS_QUOTE: // :\r
+ nToolTipID = IDS_COLON;\r
+ break;\r
+ case IDS_BACK_QUOTE: // Hankaku/Zenkaku\r
+ nToolTipID = IDS_HANKAKU;\r
+ break;\r
+ case IDS_BACKSLASH: // ]\r
+ nToolTipID = IDS_SQUARE_CKET;\r
+ break;\r
+ }\r
+ }\r
+\r
+ return nToolTipID;\r
+}\r
+\r
+KeyboardLayout_t* CProfile::GetKeyboardLayouts(const int nKey)\r
+{\r
+ for (int i = 0; i < sizeof(KeyboardLayouts) / sizeof(KeyboardLayouts[0]); ++i) {\r
+ if (KeyboardLayouts[i].nBaseControlID == nKey\r
+ || KeyboardLayouts[i].nCurrentControlID == nKey) {\r
+ return &KeyboardLayouts[i];\r
+ }\r
+ }\r
+ return NULL;\r
+}\r
+\r
+BOOL CProfile::AdjustTokenPrivileges(LPCTSTR lpName)\r
+{\r
+ BOOL rc = TRUE;\r
+\r
+ if (IsNT()) {\r
+ HANDLE hToken;\r
+ if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {\r
+ LUID luid;\r
+ if (LookupPrivilegeValue(NULL, lpName, &luid)) {\r
+ TOKEN_PRIVILEGES tp;\r
+ tp.PrivilegeCount = 1;\r
+ tp.Privileges[0].Luid = luid;\r
+ tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;\r
+\r
+ if (!::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {\r
+ rc = FALSE;\r
+ }\r
+ } else {\r
+ rc = FALSE;\r
+ }\r
+ CloseHandle(hToken);\r
+ } else {\r
+ rc = FALSE;\r
+ }\r
+ }\r
+\r
+ return rc;\r
+}\r
+\r
+BOOL CProfile::DiableTokenPrivileges()\r
+{\r
+ BOOL rc = TRUE;\r
+\r
+ if (IsNT()) {\r
+ HANDLE hToken;\r
+ if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {\r
+ if (!::AdjustTokenPrivileges(hToken, TRUE, NULL, NULL, NULL, NULL)) {\r
+ rc = FALSE;\r
+ }\r
+ CloseHandle(hToken);\r
+ } else {\r
+ rc = FALSE;\r
+ }\r
+ }\r
+\r
+ return rc;\r
+}\r
+\r
+void CProfile::ExportProperties()\r
+{\r
+ if (!AdjustTokenPrivileges(SE_BACKUP_NAME)) {\r
+ return;\r
+ }\r
+\r
+ CFileDialog oFileOpenDialog(FALSE, _T("reg"), _T("xkeymacs"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, CString(MAKEINTRESOURCE(IDS_REGISTRATION_FILTER)));\r
+ if (oFileOpenDialog.DoModal() == IDOK) {\r
+ CString szCommandLine;\r
+ szCommandLine.Format(_T("regedit /e \"%s\" HKEY_CURRENT_USER\\%s"), oFileOpenDialog.GetPathName(), CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)));\r
+ CUtils::Run(szCommandLine, TRUE); // regedit /e "x:\xkeymacs.reg" HKEY_CURRENT_USER\Software\Oishi\XKeymacs2\r
+ }\r
+\r
+ DiableTokenPrivileges();\r
+ return;\r
+}\r
+\r
+void CProfile::ImportProperties()\r
+{\r
+ if (!AdjustTokenPrivileges(SE_RESTORE_NAME)) {\r
+ return;\r
+ }\r
+\r
+ CFileDialog oFileOpenDialog(TRUE, _T("reg"), _T("xkeymacs"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, CString(MAKEINTRESOURCE(IDS_REGISTRATION_FILTER)));\r
+ if (oFileOpenDialog.DoModal() == IDOK) {\r
+ CString szCommandLine;\r
+ szCommandLine.Format(_T("regedit \"%s\""), oFileOpenDialog.GetPathName());\r
+ CUtils::Run(szCommandLine, TRUE); // regedit "x:\xkeymacs.reg"\r
+ }\r
+\r
+ DiableTokenPrivileges();\r
+ return;\r
+}\r
+\r
+BOOL CProfile::GetEnableCUA(const int nApplicationID)\r
+{\r
+ return m_XkeymacsData[nApplicationID].GetEnableCUA();\r
+}\r
+\r
+void CProfile::SetEnableCUA(const int nApplicationID, const BOOL bEnableCUA)\r
+{\r
+ m_XkeymacsData[nApplicationID].SetEnableCUA(bEnableCUA);\r
+}\r
+\r
+int CProfile::GetKeyboardSpeed()\r
+{\r
+ int nKeyboardSpeed = 31; // default value of Windows\r
+ CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_KEYBOARD));\r
+ CString szValueName(MAKEINTRESOURCE(IDS_KEYBOARD_SPEED));\r
+\r
+ HKEY hKey = NULL;\r
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {\r
+ // get data size\r
+ DWORD dwType = REG_SZ;\r
+ BYTE data[4] = {0};\r
+ DWORD dwcbData = sizeof(data)/sizeof(data[0]);\r
+ RegQueryValueEx(hKey, szValueName, NULL, &dwType, (LPBYTE)&data, &dwcbData);\r
+ RegCloseKey(hKey);\r
+\r
+ for (DWORD i = 0; i < dwcbData; ++i) {\r
+ if (data[i]) {\r
+ if (i) {\r
+ nKeyboardSpeed = nKeyboardSpeed * 10 + data[i] - _T('0');\r
+ } else {\r
+ nKeyboardSpeed = data[i] - _T('0');\r
+ }\r
+ } else {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ return nKeyboardSpeed;\r
+}\r
--- /dev/null
+// Profile.h: interface of the CProfile class\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_PROFILE_H__9415254D_4656_484B_A730_E02580D8A221__INCLUDED_)\r
+#define AFX_PROFILE_H__9415254D_4656_484B_A730_E02580D8A221__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include <winperf.h> // for Windows NT\r
+#include "resource.h"\r
+\r
+#define PROCESS_SIZE MAX_PATH\r
+\r
+//\r
+// Function pointer types for accessing Toolhelp32 functions dynamically.\r
+// By dynamically accessing these functions, we can do so only on Windows\r
+// 95 and still run on Windows NT, which does not have these functions.\r
+//\r
+#include <tlhelp32.h> // for Windows 95\r
+typedef BOOL (WINAPI *PROCESSWALK)(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);\r
+typedef HANDLE (WINAPI *CREATESNAPSHOT)(DWORD dwFlags, DWORD th32ProcessID);\r
+\r
+typedef struct _TASK_LIST {\r
+ DWORD dwProcessId;\r
+ CHAR ProcessName[PROCESS_SIZE];\r
+} TASK_LIST, *PTASK_LIST;\r
+\r
+enum { MAX_TASKS = 256 };\r
+\r
+enum KEY_TYPE { NORMAL_KEY, PUSHED_KEY, DROPPABLE_KEY, ORIGINAL_KEY, REMAPPED_KEY, REMAPPED_PUSHED_KEY };\r
+enum HKEY_TYPE { CURRENT_USER, LOCAL_MACHINE, MAX_HKEY_TYPE }; // USERS, CLASSES_ROOT, CURRENT_CONFIG, \r
+\r
+typedef struct ScanCode\r
+{\r
+ BYTE nScanCode;\r
+ BYTE nPrefixedScanCode; // 0x00, 0xE0 or 0xE1 cf. Keyboard Scan Code Specification -- 16\r
+} ScanCode_t;\r
+\r
+typedef struct ScanCodeMapping\r
+{\r
+ ScanCode_t current;\r
+ ScanCode_t original;\r
+} ScanCodeMapping_t;\r
+\r
+class CKey;\r
+\r
+typedef struct KeyboardLayout\r
+{\r
+ ScanCode_t scancode;\r
+ int nBaseControlID;\r
+ int nCurrentControlID;\r
+ int nToolTipID;\r
+ CKey *pBaseKey;\r
+ CKey *pCurrentKey;\r
+} KeyboardLayout_t;\r
+\r
+static KeyboardLayout_t KeyboardLayouts[] = {\r
+ {{0x01, 0x00}, IDC_ESC, IDC_ESC_, IDS_ESC},\r
+ {{0x02, 0x00}, IDC_1, IDC_1_, IDS_1},\r
+ {{0x03, 0x00}, IDC_2, IDC_2_, IDS_2},\r
+ {{0x04, 0x00}, IDC_3, IDC_3_, IDS_3},\r
+ {{0x05, 0x00}, IDC_4, IDC_4_, IDS_4},\r
+ {{0x06, 0x00}, IDC_5, IDC_5_, IDS_5},\r
+ {{0x07, 0x00}, IDC_6, IDC_6_, IDS_6},\r
+ {{0x08, 0x00}, IDC_7, IDC_7_, IDS_7},\r
+ {{0x09, 0x00}, IDC_8, IDC_8_, IDS_8},\r
+ {{0x0a, 0x00}, IDC_9, IDC_9_, IDS_9},\r
+ {{0x0b, 0x00}, IDC_0, IDC_0_, IDS_0_},\r
+ {{0x0c, 0x00}, IDC_MINUS, IDC_MINUS_, IDS_MINUS},\r
+ {{0x0d, 0x00}, IDC_EQUAL, IDC_EQUAL_, IDS_EQUAL}, // = /// ^\r
+ {{0x0e, 0x00}, IDC_BACKSPACE, IDC_BACKSPACE_, IDS_BACKSPACE},\r
+ {{0x0f, 0x00}, IDC_TAB, IDC_TAB_, IDS_TAB},\r
+ {{0x10, 0x00}, IDC_Q, IDC_Q_, IDS_Q},\r
+ {{0x11, 0x00}, IDC_W, IDC_W_, IDS_W},\r
+ {{0x12, 0x00}, IDC_E, IDC_E_, IDS_E},\r
+ {{0x13, 0x00}, IDC_R, IDC_R_, IDS_R},\r
+ {{0x14, 0x00}, IDC_T, IDC_T_, IDS_T},\r
+ {{0x15, 0x00}, IDC_Y, IDC_Y_, IDS_Y},\r
+ {{0x16, 0x00}, IDC_U, IDC_U_, IDS_U},\r
+ {{0x17, 0x00}, IDC_I, IDC_I_, IDS_I},\r
+ {{0x18, 0x00}, IDC_O, IDC_O_, IDS_O},\r
+ {{0x19, 0x00}, IDC_P, IDC_P_, IDS_P},\r
+ {{0x1a, 0x00}, IDC_SQUARE_BRA, IDC_SQUARE_BRA_, IDS_SQUARE_BRA}, // 101/104: [, 106/109: @\r
+ {{0x1b, 0x00}, IDC_SQUARE_CKET, IDC_SQUARE_CKET_, IDS_SQUARE_CKET}, // 101/104: ], 106/109: [\r
+ {{0x1c, 0x00}, IDC_ENTER, IDC_ENTER_, IDS_ENTER},\r
+ {{0x1c, 0xe0}, IDC_NUMPADENTER, IDC_NUMPADENTER_, IDS_NUMPADENTER},\r
+ {{0x1d, 0x00}, IDC_LEFT_CTRL, IDC_LEFT_CTRL_, IDS_LEFT_CTRL},\r
+ {{0x1d, 0xe0}, IDC_RIGHT_CTRL, IDC_RIGHT_CTRL_, IDS_RIGHT_CTRL},\r
+ {{0x1d, 0xe1}, IDC_PAUSE, IDC_PAUSE_, IDS_PAUSE},\r
+ {{0x1e, 0x00}, IDC_A, IDC_A_, IDS_A},\r
+ {{0x1f, 0x00}, IDC_S, IDC_S_, IDS_S},\r
+ {{0x20, 0x00}, IDC_D, IDC_D_, IDS_D},\r
+ {{0x21, 0x00}, IDC_F, IDC_F_, IDS_F},\r
+ {{0x22, 0x00}, IDC_G, IDC_G_, IDS_G},\r
+ {{0x23, 0x00}, IDC_H, IDC_H_, IDS_H},\r
+ {{0x24, 0x00}, IDC_J, IDC_J_, IDS_J},\r
+ {{0x25, 0x00}, IDC_K, IDC_K_, IDS_K},\r
+ {{0x26, 0x00}, IDC_L, IDC_L_, IDS_L},\r
+ {{0x27, 0x00}, IDC_SEMICOLON, IDC_SEMICOLON_, IDS_SEMICOLON},\r
+ {{0x28, 0x00}, IDC_QUOTE, IDC_QUOTE_, IDS_QUOTE}, // 101/104: ', 106/109: :\r
+ {{0x29, 0x00}, IDC_BACK_QUOTE, IDC_BACK_QUOTE_, IDS_BACK_QUOTE}, // 101/104: `, 106/109: hankaku/zenkaku\r
+ {{0x2a, 0x00}, IDC_LEFT_SHIFT, IDC_LEFT_SHIFT_, IDS_LEFT_SHIFT},\r
+ {{0x2b, 0x00}, IDC_BACKSLASH, IDC_BACKSLASH_, IDS_BACKSLASH}, // 101/104: \, 106/109: ]\r
+ {{0x2c, 0x00}, IDC_Z, IDC_Z_, IDS_Z},\r
+ {{0x2d, 0x00}, IDC_X, IDC_X_, IDS_X},\r
+ {{0x2e, 0x00}, IDC_C, IDC_C_, IDS_C},\r
+ {{0x2f, 0x00}, IDC_V, IDC_V_, IDS_V},\r
+ {{0x30, 0x00}, IDC_B, IDC_B_, IDS_B},\r
+ {{0x31, 0x00}, IDC_N, IDC_N_, IDS_N},\r
+ {{0x32, 0x00}, IDC_M, IDC_M_, IDS_M},\r
+ {{0x33, 0x00}, IDC_COMMA, IDC_COMMA_, IDS_COMMA},\r
+ {{0x34, 0x00}, IDC_PERIOD, IDC_PERIOD_, IDS_PERIOD},\r
+ {{0x35, 0x00}, IDC_SLASH, IDC_SLASH_, IDS_SLASH},\r
+ {{0x35, 0xe0}, IDC_DIVIDE, IDC_DIVIDE_, IDS_DIVIDE},\r
+ {{0x36, 0x00}, IDC_RIGHT_SHIFT, IDC_RIGHT_SHIFT_, IDS_RIGHT_SHIFT},\r
+ {{0x37, 0x00}, IDC_MULTIPLY, IDC_MULTIPLY_, IDS_MULTIPLY},\r
+ {{0x37, 0xe0}, IDC_PRINT_SCREEN, IDC_PRINT_SCREEN_, IDS_PRINT_SCREEN},\r
+ {{0x38, 0x00}, IDC_LEFT_ALT, IDC_LEFT_ALT_, IDS_LEFT_ALT},\r
+ {{0x38, 0xe0}, IDC_RIGHT_ALT, IDC_RIGHT_ALT_, IDS_RIGHT_ALT},\r
+ {{0x39, 0x00}, IDC_SPACE, IDC_SPACE_, IDS_SPACE},\r
+ {{0x3a, 0x00}, IDC_CAPS_LOCK, IDC_CAPS_LOCK_, IDS_CAPS_LOCK},\r
+ {{0x3b, 0x00}, IDC_F1, IDC_F1_, IDS_F1},\r
+ {{0x3c, 0x00}, IDC_F2, IDC_F2_, IDS_F2},\r
+ {{0x3d, 0x00}, IDC_F3, IDC_F3_, IDS_F3},\r
+ {{0x3e, 0x00}, IDC_F4, IDC_F4_, IDS_F4},\r
+ {{0x3f, 0x00}, IDC_F5, IDC_F5_, IDS_F5},\r
+ {{0x40, 0x00}, IDC_F6, IDC_F6_, IDS_F6},\r
+ {{0x41, 0x00}, IDC_F7, IDC_F7_, IDS_F7},\r
+ {{0x42, 0x00}, IDC_F8, IDC_F8_, IDS_F8},\r
+ {{0x43, 0x00}, IDC_F9, IDC_F9_, IDS_F9},\r
+ {{0x44, 0x00}, IDC_F10, IDC_F10_, IDS_F10},\r
+ {{0x45, 0xe0}, IDC_NUM_LOCK, IDC_NUM_LOCK_, IDS_NUM_LOCK},\r
+ {{0x46, 0x00}, IDC_SCROLL_LOCK, IDC_SCROLL_LOCK_, IDS_SCROLL_LOCK},\r
+ {{0x47, 0x00}, IDC_NUMPAD7, IDC_NUMPAD7_, IDS_NUMPAD7},\r
+ {{0x47, 0xe0}, IDC_HOME, IDC_HOME_, IDS_HOME},\r
+ {{0x48, 0x00}, IDC_NUMPAD8, IDC_NUMPAD8_, IDS_NUMPAD8},\r
+ {{0x48, 0xe0}, IDC_UP, IDC_UP_, IDS_UP},\r
+ {{0x49, 0x00}, IDC_NUMPAD9, IDC_NUMPAD9_, IDS_NUMPAD9},\r
+ {{0x49, 0xe0}, IDC_PAGE_UP, IDC_PAGE_UP_, IDS_PAGE_UP},\r
+ {{0x4a, 0x00}, IDC_SUBTRACT, IDC_SUBTRACT_, IDS_SUBTRACT},\r
+ {{0x4b, 0x00}, IDC_NUMPAD4, IDC_NUMPAD4_, IDS_NUMPAD4},\r
+ {{0x4b, 0xe0}, IDC_LEFT, IDC_LEFT_, IDS_LEFT},\r
+ {{0x4c, 0x00}, IDC_NUMPAD5, IDC_NUMPAD5_, IDS_NUMPAD5},\r
+ {{0x4d, 0x00}, IDC_NUMPAD6, IDC_NUMPAD6_, IDS_NUMPAD6},\r
+ {{0x4d, 0xe0}, IDC_RIGHT, IDC_RIGHT_, IDS_RIGHT},\r
+ {{0x4e, 0x00}, IDC_ADD, IDC_ADD_, IDS_ADD},\r
+ {{0x4f, 0x00}, IDC_NUMPAD1, IDC_NUMPAD1_, IDS_NUMPAD1},\r
+ {{0x4f, 0xe0}, IDC_END, IDC_END_, IDS_END},\r
+ {{0x50, 0x00}, IDC_NUMPAD2, IDC_NUMPAD2_, IDS_NUMPAD2},\r
+ {{0x50, 0xe0}, IDC_DOWN, IDC_DOWN_, IDS_DOWN},\r
+ {{0x51, 0x00}, IDC_NUMPAD3, IDC_NUMPAD3_, IDS_NUMPAD3},\r
+ {{0x51, 0xe0}, IDC_PAGE_DOWN, IDC_PAGE_DOWN_, IDS_PAGE_DOWN},\r
+ {{0x52, 0x00}, IDC_NUMPAD0, IDC_NUMPAD0_, IDS_NUMPAD0},\r
+ {{0x52, 0xe0}, IDC_INSERT, IDC_INSERT_, IDS_INSERT},\r
+ {{0x53, 0x00}, IDC_NUMPADDELETE, IDC_NUMPADDELETE_, IDS_NUMPADDELETE},\r
+ {{0x53, 0xe0}, IDC_DELETE, IDC_DELETE_, IDS_DELETE},\r
+ {{0x57, 0x00}, IDC_F11, IDC_F11_, IDS_F11},\r
+ {{0x58, 0x00}, IDC_F12, IDC_F12_, IDS_F12},\r
+ {{0x5b, 0xe0}, IDC_LEFT_WINDOWS, IDC_LEFT_WINDOWS_, IDS_LEFT_WINDOWS},\r
+ {{0x5c, 0xe0}, IDC_RIGHT_WINDOWS, IDC_RIGHT_WINDOWS_, IDS_RIGHT_WINDOWS},\r
+ {{0x5d, 0xe0}, IDC_APPLICATION, IDC_APPLICATION_, IDS_APPLICATION},\r
+ {{0x5e, 0xe0}, IDC_ACPI_POWER, IDC_ACPI_POWER_, IDS_ACPI_POWER},\r
+ {{0x5f, 0xe0}, IDC_ACPI_SLEEP, IDC_ACPI_SLEEP_, IDS_ACPI_SLEEP},\r
+ {{0x63, 0xe0}, IDC_ACPI_WAKE, IDC_ACPI_WAKE_, IDS_ACPI_WAKE},\r
+ {{0x70, 0x00}, IDC_KANA, IDC_KANA_, IDS_KANA},\r
+ {{0x73, 0x00}, IDC_BACKSLASH2, IDC_BACKSLASH2_, IDS_BACKSLASH2}, // \ ,./\ \r
+ {{0x79, 0x00}, IDC_CONVERT, IDC_CONVERT_, IDS_CONVERT},\r
+ {{0x7b, 0x00}, IDC_NONCONVERT, IDC_NONCONVERT_, IDS_NONCONVERT},\r
+ {{0x7d, 0x00}, IDC_BACKSLASH1, IDC_BACKSLASH1_, IDS_BACKSLASH1}, // \ -^\ \r
+};\r
+\r
+class CProfile\r
+{\r
+public:\r
+ static int GetKeyboardSpeed(void);\r
+ static int LostKeyWarning(HKEY_TYPE hkeyType);\r
+ static CString GetWindowText(int nApplicationID);\r
+ static void SetWindowText(int nApplicationID, CString szWindowText);\r
+ static void SetEnableCUA(int nApplicationID, BOOL bEnableCUA);\r
+ static BOOL GetEnableCUA(int nApplicationID);\r
+ static void ImportProperties();\r
+ static void ExportProperties();\r
+ static KeyboardLayout_t* GetKeyboardLayouts(int nKey);\r
+ static int GetToolTipID(int nToolTipID);\r
+ static void SetNoCursor();\r
+ static void SetNormalCursor();\r
+ static void SetDraggingCursor();\r
+ static void SetScanCodeMap(HKEY_TYPE hkeyType, ScanCodeMapping_t ScanCodeMappeing);\r
+ static int GetCurrentControlID(ScanCode_t scancode);\r
+ static int GetBaseControlID(ScanCode_t scancode);\r
+ static BOOL GetScanCodeMap(HKEY_TYPE hkeyType, ScanCode_t original, ScanCode_t *current);\r
+ static void RestartComputer();\r
+ static BOOL IsVistaOrLater();\r
+ static BOOL IsNT();\r
+ static BOOL Is9x();\r
+ static void SaveScanCodeMap(HKEY_TYPE hkeyType);\r
+ static void LoadScanCodeMap(HKEY_TYPE hkeyType);\r
+ static BOOL Is106Keyboard();\r
+ static BOOL IsDialog(CString sz);\r
+ static BOOL GetUseDialogSetting(int nApplicationID);\r
+ static void SetUseDialogSetting(int nApplicationID, BOOL bUseDialogSetting);\r
+ static int GetApplicationIndex(CString szApplicationName);\r
+ static void CopyData(CString szDestinationApplication, CString szSourceApplication);\r
+ static void ReadKeyBind(int *pnCommandType, int *pnKey, LPCTSTR szKeyBind);\r
+ static LPCTSTR Key2String(int nKey);\r
+ static LPCTSTR CommandType2String(int nCommandType);\r
+ static int GetCurrentApplicationID(CComboBox *cApplicationList, CString szCurrentApplication);\r
+ static int GetKillRingMax(int nApplicationID);\r
+ static void SetKillRingMax(int nApplicationID, int nKillRingMax);\r
+ static int GetCommandID(int nApplicationID, int nCommandType, int nKey);\r
+ static void SetCommandID(int nApplicationID, int nCommandType, int nKey, int nCommandID);\r
+ static void UpdateApplicationTitle(CComboBox *cApplicationList, CString szCurrentApplication, int nApplicationID, BOOL bSaveAndValidate);\r
+ static void GetApplicationTitle(CComboBox *cApplicationList, CString &rList, int nIndex = -1);\r
+ static BOOL IsDefault(CString sz);\r
+ static int GetApplicationIndex(CString szApplicationName, BOOL bSaveAndValidate, int *nSettingStyle);\r
+ static TASK_LIST m_TaskList[MAX_TASKS];\r
+ static DWORD m_dwTasks;\r
+ static void InitApplicationList(CComboBox *cApplicationList);\r
+ static int GetSavedSettingCount();\r
+ static void ClearData(CString szCurrentApplication);\r
+ static void InitDllData();\r
+ static void SaveRegistryData();\r
+ static void LoadRegistryData();\r
+ CProfile();\r
+ virtual ~CProfile();\r
+\r
+private:\r
+ static void SaveKeyBind(CString szApplicationName, CString szCommandName, int nCommandType, int nKey);\r
+ static BOOL DiableTokenPrivileges();\r
+ static BOOL AdjustTokenPrivileges(LPCTSTR lpName);\r
+ static void SaveCommand(CString szApplicationName, int nCommandID);\r
+ static void SaveKeyBind(CString szApplicationName, int nCommandID, int nCommandType, int nKey);\r
+ static void AddKeyBind2C_(CString szApplicationName, BYTE bVk);\r
+ static void LevelUp();\r
+ static BOOL ChangedKeyboardLayout(HKEY_TYPE hkeyType);\r
+ static BYTE PrefixedScanCodeID2Code(int nPrefixedScanCodeID);\r
+ static DWORD GetScanCodeLength(HKEY_TYPE hkeyType);\r
+ static int PrefixedScanCode2ID(BYTE nPrefixedScanCode);\r
+ static ScanCode_t m_CurrentScanCodeMap[MAX_HKEY_TYPE][4][256];\r
+ static ScanCode_t m_ScanCodeMap[MAX_HKEY_TYPE][4][256];\r
+ static int GetControlID(ScanCode_t scancode, BOOL bBase);\r
+ static void Item2AppName(CString *sz);\r
+ static int IsNotSameString(CComboBox *pApplication, CString szListItem);\r
+ static int CountSeparator(CString szMainString, CString szSeparator);\r
+ static void GetNthString(CString *szAppName, CString szWindowName, CString szSeparator, int n);\r
+ static void GetAppName(CString *szAppName, LPCTSTR pWindowName);\r
+ static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);\r
+ static BOOL IsTheString(CString sz, UINT nID);\r
+ static PPERF_DATA_BLOCK GetPerformanceData(CString szProcessName);\r
+ static BOOL GetProcessInfo(CString *szProcessName, DWORD *dwProcessId);\r
+ static LPBYTE GetCounters();\r
+ static void SetDllData();\r
+ static CXkeymacsData m_XkeymacsData[MAX_APP];\r
+ static void DeleteAllRegistryData();\r
+ static DWORD GetTaskListNT(PTASK_LIST pTask, DWORD dwNumTasks);\r
+ static DWORD GetTaskList(PTASK_LIST pTask, DWORD dwNumTasks);\r
+ static BOOL IsCommandType(int nCommandType, LPCTSTR szKeyBind);\r
+ static int KeyBind2Key(LPCTSTR szKey);\r
+ static int KeyBind2CommandType(LPCTSTR szKeyBind);\r
+ static CString WriteKeyBind(int nCommandType, int nKey);\r
+ static void UpdateRegistryData(BOOL bSaveAndValidate);\r
+};\r
+\r
+typedef struct CommandTypeName\r
+{\r
+ int nCommandType;\r
+ LPCTSTR szCommandTypeName;\r
+} CommandTypeName_t;\r
+\r
+static const CommandTypeName_t CommandTypes[] = {\r
+ {NONE, _T("")},\r
+ {SHIFT, _T("Shift+")},\r
+ {CONTROL, _T("Ctrl+")},\r
+ {CONTROL+SHIFT, _T("Ctrl+Shift+")},\r
+ {META, _T("Meta+")},\r
+ {META+SHIFT, _T("Meta+Shift+")},\r
+ {CONTROL+META, _T("Ctrl+Meta+")},\r
+ {CONTROL+META+SHIFT, _T("Ctrl+Meta+Shift+")},\r
+ {CONTROLX+NONE, _T("Ctrl+X ")},\r
+ {CONTROLX+SHIFT, _T("Ctrl+X Shift+")},\r
+ {CONTROLX+CONTROL, _T("Ctrl+X Ctrl+")},\r
+ {CONTROLX+CONTROL+SHIFT, _T("Ctrl+X Ctrl+Shift+")},\r
+ {CONTROLX+META, _T("Ctrl+X Meta+")},\r
+ {CONTROLX+META+SHIFT, _T("Ctrl+X Meta+Shift+")},\r
+ {CONTROLX+CONTROL+META, _T("Ctrl+X Ctrl+Meta+")},\r
+ {CONTROLX+CONTROL+META+SHIFT, _T("Ctrl+X Ctrl+Meta+Shift+")},\r
+};\r
+\r
+\r
+#endif // !defined(AFX_PROFILE_H__9415254D_4656_484B_A730_E02580D8A221__INCLUDED_)\r
--- /dev/null
+// Properties.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "Profile.h"\r
+#include "Properties.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CProperties dialog\r
+\r
+\r
+CProperties::CProperties(CWnd* pParent /*=NULL*/)\r
+ : CDialog(CProperties::IDD, pParent)\r
+{\r
+ m_nApplicationID = 0;\r
+ //{{AFX_DATA_INIT(CProperties)\r
+ m_nSettingStyle = -1;\r
+ m_nKillRingMax = 0;\r
+ //}}AFX_DATA_INIT\r
+}\r
+\r
+\r
+void CProperties::DoDataExchange(CDataExchange* pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(CProperties)\r
+ DDX_Control(pDX, IDC_WINDOW_TEXT, m_cWindowText);\r
+ DDX_Control(pDX, IDC_KILL_RING_MAX, m_cKillRingMax);\r
+ DDX_Control(pDX, IDC_USE_DIALOG_SETTING, m_cUseDialogSetting);\r
+ DDX_Control(pDX, IDC_SELECT_ALL, m_cSelectAll);\r
+ DDX_Control(pDX, IDC_CLEAR_ALL, m_cClearAll);\r
+ DDX_Control(pDX, IDC_LOAD_DEFAULT, m_cLoadDefault);\r
+ DDX_Control(pDX, IDC_APPLICATION, m_cApplication);\r
+ DDX_Radio(pDX, IDC_SETTING_DEFAULT, m_nSettingStyle);\r
+ DDX_Text(pDX, IDC_KILL_RING_MAX, m_nKillRingMax);\r
+ DDV_MinMaxInt(pDX, m_nKillRingMax, 0, 2147483647);\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CProperties, CDialog)\r
+ //{{AFX_MSG_MAP(CProperties)\r
+ ON_CBN_DROPDOWN(IDC_APPLICATION, OnDropdownApplication)\r
+ ON_CBN_SELCHANGE(IDC_APPLICATION, OnSelchangeApplication)\r
+ ON_BN_CLICKED(IDC_APPLY, OnApply)\r
+ ON_BN_CLICKED(IDC_LOAD_DEFAULT, OnLoadDefault)\r
+ ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)\r
+ ON_BN_CLICKED(IDC_CLEAR_ALL, OnClearAll)\r
+ ON_BN_CLICKED(IDC_SETTING_DEFAULT, OnSettingDefault)\r
+ ON_BN_CLICKED(IDC_SETTING_DISABLE, OnSettingDisable)\r
+ ON_BN_CLICKED(IDC_SETTING_SPECIFIC, OnSettingSpecific)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CProperties message handlers\r
+\r
+BOOL CProperties::OnInitDialog() \r
+{\r
+ CDialog::OnInitDialog();\r
+ \r
+ // TODO: Add extra initialization here\r
+ while (m_sheet.GetPageCount()) {\r
+ m_sheet.RemovePage(0);\r
+ }\r
+\r
+ m_sheet.AddPage(&m_basic);\r
+ m_sheet.AddPage(&m_advanced);\r
+ m_sheet.AddPage(&m_list);\r
+\r
+ m_sheet.Create(this, WS_CHILD | WS_VISIBLE, 0);\r
+ m_sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT);\r
+ m_sheet.ModifyStyle( 0, WS_TABSTOP );\r
+\r
+ CRect rcSheet;\r
+ GetDlgItem(IDC_TAB)->GetWindowRect(&rcSheet);\r
+ ScreenToClient(&rcSheet);\r
+ m_sheet.SetWindowPos(NULL, rcSheet.left - 11, rcSheet.top - 8, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);\r
+\r
+\r
+ SetForegroundWindow();\r
+\r
+ InitApplicationList();\r
+\r
+ CProfile::LoadRegistryData();\r
+ m_szCurrentApplication.LoadString(IDS_DEFAULT);\r
+ SetDialogData(m_szCurrentApplication);\r
+ EnableUseDefaultButton(FALSE);\r
+ EnableLoadDefaultButton(FALSE);\r
+\r
+ EnableControl(BASIC_TAB);\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void CProperties::OnDropdownApplication() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ InitApplicationList();\r
+\r
+ int nID = GetCurrentApplicationID();\r
+ if (nID != CB_ERR) {\r
+ m_cApplication.SetCurSel(nID);\r
+ } else {\r
+ GetDialogData();\r
+ m_szCurrentApplication.LoadString(IDS_DEFAULT_TITLE);\r
+ m_cApplication.SelectString(-1, m_szCurrentApplication);\r
+ SetDialogData(m_szCurrentApplication);\r
+ }\r
+}\r
+\r
+void CProperties::OnSelchangeApplication() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ GetDialogData();\r
+\r
+ CProfile::GetApplicationTitle(&m_cApplication, m_szCurrentApplication, m_cApplication.GetCurSel());\r
+ int nStart;\r
+ if ((nStart = m_szCurrentApplication.ReverseFind(_T('('))) != -1) {\r
+ ++nStart;\r
+ m_szCurrentApplication =\r
+ m_szCurrentApplication.Mid(nStart, m_szCurrentApplication.GetLength() - nStart - 1);\r
+ }\r
+\r
+ SetDialogData(m_szCurrentApplication);\r
+ EnableControl(ACTIVE_TAB);\r
+}\r
+\r
+void CProperties::InitApplicationList()\r
+{\r
+ CProfile::InitApplicationList(&m_cApplication);\r
+}\r
+\r
+int CProperties::GetCurrentApplicationID()\r
+{\r
+ return CProfile::GetCurrentApplicationID(&m_cApplication, m_szCurrentApplication);\r
+}\r
+\r
+void CProperties::GetDialogData()\r
+{\r
+ if (m_nSettingStyle == SETTING_DEFAULT) {\r
+ CProfile::ClearData(m_szCurrentApplication);\r
+ } else {\r
+ UpdateDialogData(m_szCurrentApplication, TRUE);\r
+\r
+ if (m_sheet.GetActivePage() == &m_basic) { // FIXME\r
+ m_basic.GetDialogData();\r
+ } else if (m_sheet.GetActivePage() == &m_advanced) {\r
+ m_advanced.GetDialogData();\r
+ } else if (m_sheet.GetActivePage() == &m_list) {\r
+ m_list.GetDialogData();\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+ }\r
+}\r
+\r
+void CProperties::SetDialogData(CString szApplicationName)\r
+{\r
+ UpdateDialogData(szApplicationName, FALSE);\r
+\r
+ if (m_sheet.GetActivePage() == &m_basic) { // FIXME\r
+ m_basic.SetDialogData(szApplicationName);\r
+ } else if (m_sheet.GetActivePage() == &m_advanced) {\r
+ m_advanced.SetDialogData(szApplicationName);\r
+ } else if (m_sheet.GetActivePage() == &m_list) {\r
+ m_list.SetDialogData(szApplicationName);\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+}\r
+\r
+void CProperties::UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate)\r
+{\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ UpdateData();\r
+ }\r
+\r
+ m_nApplicationID = CProfile::GetApplicationIndex(szApplicationName, bSaveAndValidate, &m_nSettingStyle);\r
+\r
+ if (CProfile::IsDefault(szApplicationName)\r
+ || CProfile::IsDialog(szApplicationName)) {\r
+ EnableUseDefaultButton(FALSE);\r
+ } else {\r
+ EnableUseDefaultButton(TRUE);\r
+ }\r
+\r
+ // application title\r
+ CProfile::UpdateApplicationTitle(&m_cApplication, m_szCurrentApplication, m_nApplicationID, bSaveAndValidate);\r
+\r
+ // kill-ring-max\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ CProfile::SetKillRingMax(m_nApplicationID, m_nKillRingMax);\r
+ } else { // SetDialogData\r
+ m_nKillRingMax = CProfile::GetKillRingMax(m_nApplicationID);\r
+ }\r
+\r
+ // Use Dialog Setting\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ CProfile::SetUseDialogSetting(m_nApplicationID, m_cUseDialogSetting.GetCheck() == BST_CHECKED);\r
+ } else { // SetDialogData\r
+ m_cUseDialogSetting.SetCheck(CProfile::GetUseDialogSetting(m_nApplicationID) ? BST_CHECKED : BST_UNCHECKED);\r
+ }\r
+\r
+ // Check Window Title\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ CString szWindowText;\r
+ m_cWindowText.GetWindowText(szWindowText);\r
+ CProfile::SetWindowText(m_nApplicationID, szWindowText);\r
+ } else { // SetDialogData\r
+ m_cWindowText.SetWindowText(CProfile::GetWindowText(m_nApplicationID));\r
+ }\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ UpdateData(FALSE);\r
+ }\r
+}\r
+\r
+void CProperties::EnableControl(TAB_NAME tab)\r
+{\r
+ if (tab & ACTIVE_TAB) {\r
+ if (m_sheet.GetActivePage() == &m_basic) { // FIXME\r
+ tab = BASIC_TAB;\r
+ } else if (m_sheet.GetActivePage() == &m_advanced) {\r
+ tab = ADVANCED_TAB;\r
+ } else if (m_sheet.GetActivePage() == &m_list) {\r
+ tab = LIST_TAB;\r
+ }\r
+ }\r
+\r
+ BOOL bEnable = (m_nSettingStyle == SETTING_SPECIFIC);\r
+\r
+ m_cKillRingMax.EnableWindow(bEnable);\r
+ EnableLoadDefaultButton(bEnable);\r
+\r
+ m_cSelectAll.EnableWindow(bEnable && tab & BASIC_TAB);\r
+ m_cClearAll.EnableWindow(bEnable && tab & BASIC_TAB);\r
+\r
+ EnableUseDialogSettingButton(bEnable);\r
+\r
+ m_cWindowText.EnableWindow(bEnable);\r
+\r
+ if (tab & BASIC_TAB) {\r
+ m_basic.EnableControl();\r
+ }\r
+ if (tab & ADVANCED_TAB) {\r
+ m_advanced.EnableControl();\r
+ }\r
+ if (tab & LIST_TAB) {\r
+ m_list.EnableControl();\r
+ }\r
+}\r
+\r
+void CProperties::EnableUseDialogSettingButton(BOOL bEnable)\r
+{\r
+ m_cUseDialogSetting.EnableWindow(bEnable);\r
+ if (CProfile::IsDialog(m_szCurrentApplication)) {\r
+ m_cUseDialogSetting.EnableWindow(FALSE);\r
+ }\r
+}\r
+\r
+void CProperties::EnableLoadDefaultButton(BOOL bEnable)\r
+{\r
+ m_cLoadDefault.EnableWindow(bEnable);\r
+ if (CProfile::IsDefault(m_szCurrentApplication)) {\r
+ m_cLoadDefault.EnableWindow(FALSE);\r
+ }\r
+}\r
+\r
+void CProperties::EnableUseDefaultButton(BOOL bEnable)\r
+{\r
+ if (GetDlgItem(IDC_SETTING_DEFAULT)) {\r
+ GetDlgItem(IDC_SETTING_DEFAULT)->EnableWindow(bEnable);\r
+ }\r
+}\r
+\r
+void CProperties::OnOK() \r
+{\r
+ // TODO: Add extra validation here\r
+ OnApply();\r
+\r
+ CDialog::OnOK();\r
+}\r
+\r
+void CProperties::OnCancel() \r
+{\r
+ // TODO: Add extra cleanup here\r
+ CProfile::LoadRegistryData();\r
+\r
+ CDialog::OnCancel();\r
+}\r
+\r
+void CProperties::OnApply() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ GetDialogData();\r
+ CProfile::SaveRegistryData();\r
+}\r
+\r
+void CProperties::OnLoadDefault() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ CProfile::CopyData(m_szCurrentApplication, CString(MAKEINTRESOURCE(IDS_DEFAULT)));\r
+ SetDialogData(m_szCurrentApplication);\r
+}\r
+\r
+void CProperties::OnSelectAll() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ m_basic.SetAllDialogData(1, TRUE);\r
+}\r
+\r
+void CProperties::OnClearAll() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ m_basic.SetAllDialogData(0, TRUE);\r
+}\r
+\r
+int CProperties::GetApplicationID()\r
+{\r
+ return m_nApplicationID;\r
+}\r
+\r
+CString CProperties::GetCurrentApplication()\r
+{\r
+ return m_szCurrentApplication;\r
+}\r
+\r
+void CProperties::OnSettingDefault() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData(); // get data\r
+ EnableControl(ACTIVE_TAB);\r
+}\r
+\r
+void CProperties::OnSettingDisable() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData();\r
+ EnableControl(ACTIVE_TAB);\r
+}\r
+\r
+void CProperties::OnSettingSpecific() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData();\r
+ EnableControl(ACTIVE_TAB);\r
+\r
+ if (CProfile::GetApplicationIndex(m_szCurrentApplication) == MAX_APP) {\r
+ CProfile::CopyData(m_szCurrentApplication, CString(MAKEINTRESOURCE(IDS_DEFAULT)));\r
+ SetDialogData(m_szCurrentApplication);\r
+ }\r
+}\r
+\r
+BOOL CProperties::IsEnableControl()\r
+{\r
+ return m_nSettingStyle == SETTING_SPECIFIC;\r
+}\r
--- /dev/null
+#if !defined(AFX_PROPERTIES_H__13ABBD97_6862_4CDA_86ED_4863B4845A1B__INCLUDED_)\r
+#define AFX_PROPERTIES_H__13ABBD97_6862_4CDA_86ED_4863B4845A1B__INCLUDED_\r
+\r
+#include "PropertiesBasic.h" // Added by ClassView\r
+#include "PropertiesAdvanced.h" // Added by ClassView\r
+#include "PropertiesList.h" // Added by ClassView\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+enum TAB_NAME { BASIC_TAB = 1, ADVANCED_TAB = 2, LIST_TAB = 4, ACTIVE_TAB = 8 };\r
+\r
+// Properties.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CProperties dialog\r
+\r
+class CProperties : public CDialog\r
+{\r
+// Construction\r
+public:\r
+ CProperties(CWnd* pParent = NULL); // standard constructor\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(CProperties)\r
+ enum { IDD = IDD_PROPERTIES };\r
+ CEdit m_cWindowText;\r
+ CEdit m_cKillRingMax;\r
+ CButton m_cUseDialogSetting;\r
+ CButton m_cSelectAll;\r
+ CButton m_cClearAll;\r
+ CButton m_cLoadDefault;\r
+ CComboBox m_cApplication;\r
+ int m_nSettingStyle;\r
+ int m_nKillRingMax;\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(CProperties)\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+public:\r
+ BOOL IsEnableControl();\r
+ CString GetCurrentApplication();\r
+ int GetApplicationID();\r
+ void EnableControl(TAB_NAME tab = BASIC_TAB);\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(CProperties)\r
+ virtual BOOL OnInitDialog();\r
+ afx_msg void OnDropdownApplication();\r
+ afx_msg void OnSelchangeApplication();\r
+ virtual void OnOK();\r
+ virtual void OnCancel();\r
+ afx_msg void OnApply();\r
+ afx_msg void OnLoadDefault();\r
+ afx_msg void OnSelectAll();\r
+ afx_msg void OnClearAll();\r
+ afx_msg void OnSettingDefault();\r
+ afx_msg void OnSettingDisable();\r
+ afx_msg void OnSettingSpecific();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ int m_nApplicationID;\r
+ CPropertiesList m_list;\r
+ CPropertiesAdvanced m_advanced;\r
+ CPropertiesBasic m_basic;\r
+ CPropertySheet m_sheet;\r
+ CString m_szCurrentApplication;\r
+ void EnableLoadDefaultButton(BOOL bEnable);\r
+ void EnableUseDefaultButton(BOOL bEnable);\r
+ void EnableUseDialogSettingButton(BOOL bEnable);\r
+ int GetCurrentApplicationID();\r
+ void GetDialogData();\r
+ void InitApplicationList();\r
+ void SetDialogData(CString szApplicationName);\r
+ void UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate = TRUE);\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_PROPERTIES_H__13ABBD97_6862_4CDA_86ED_4863B4845A1B__INCLUDED_)\r
--- /dev/null
+// PropertiesAdvanced.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "DotXkeymacs.h"\r
+#include "Profile.h"\r
+#include "Properties.h"\r
+#include "PropertiesAdvanced.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+#pragma data_seg(".xkmcs")\r
+ int CPropertiesAdvanced::m_nApplicationID = 0;\r
+#pragma data_seg()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesAdvanced property page\r
+\r
+int CPropertiesAdvanced::m_nCommandID = 0;\r
+CEdit * CPropertiesAdvanced::m_pNewKey = NULL;\r
+CButton * CPropertiesAdvanced::m_pAssign = NULL;\r
+CStatic * CPropertiesAdvanced::m_pCurrentlyAssigned = NULL;\r
+CListBox * CPropertiesAdvanced::m_pCurrentKeys = NULL;\r
+HHOOK CPropertiesAdvanced::m_hKeyboardHook = NULL;\r
+BOOL CPropertiesAdvanced::m_bC_x = FALSE;\r
+BOOL CPropertiesAdvanced::m_bC = TRUE;\r
+BOOL CPropertiesAdvanced::m_bM = TRUE;\r
+BOOL CPropertiesAdvanced::m_bShift = TRUE;\r
+int CPropertiesAdvanced::m_nAssignCommandType = 0;\r
+int CPropertiesAdvanced::m_nAssignKey = 0;\r
+int CPropertiesAdvanced::m_nCommandIDs[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+\r
+IMPLEMENT_DYNCREATE(CPropertiesAdvanced, CPropertyPage)\r
+\r
+CPropertiesAdvanced::CPropertiesAdvanced() : CPropertyPage(CPropertiesAdvanced::IDD)\r
+{\r
+ //{{AFX_DATA_INIT(CPropertiesAdvanced)\r
+ m_bEnableCUA = FALSE;\r
+ //}}AFX_DATA_INIT\r
+}\r
+\r
+CPropertiesAdvanced::~CPropertiesAdvanced()\r
+{\r
+}\r
+\r
+void CPropertiesAdvanced::DoDataExchange(CDataExchange* pDX)\r
+{\r
+ CPropertyPage::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(CPropertiesAdvanced)\r
+ DDX_Control(pDX, IDC_CURRENTLY_ASSIGNED, m_cCurrentlyAssigned);\r
+ DDX_Control(pDX, IDC_RESET_ALL, m_cResetAll);\r
+ DDX_Control(pDX, IDC_REMOVE, m_cRemove);\r
+ DDX_Control(pDX, IDC_NEW_KEY, m_cNewKey);\r
+ DDX_Control(pDX, IDC_DESCRIPTION, m_cDescription);\r
+ DDX_Control(pDX, IDC_CURRENT_KEYS, m_cCurrentKeys);\r
+ DDX_Control(pDX, IDC_COMMANDS, m_cCommands);\r
+ DDX_Control(pDX, IDC_CATEGORY, m_cCategory);\r
+ DDX_Control(pDX, IDC_ASSIGN, m_cAssign);\r
+ DDX_Check(pDX, IDC_ENABLE_CUA, m_bEnableCUA);\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CPropertiesAdvanced, CPropertyPage)\r
+ //{{AFX_MSG_MAP(CPropertiesAdvanced)\r
+ ON_WM_CREATE()\r
+ ON_CBN_SELCHANGE(IDC_CATEGORY, OnSelchangeCategory)\r
+ ON_LBN_SELCHANGE(IDC_COMMANDS, OnSelchangeCommands)\r
+ ON_LBN_SELCHANGE(IDC_CURRENT_KEYS, OnSelchangeCurrentKeys)\r
+ ON_EN_SETFOCUS(IDC_NEW_KEY, OnSetfocusNewKey)\r
+ ON_BN_CLICKED(IDC_ASSIGN, OnAssign)\r
+ ON_BN_CLICKED(IDC_REMOVE, OnRemove)\r
+ ON_BN_CLICKED(IDC_RESET_ALL, OnResetAll)\r
+ ON_BN_CLICKED(IDC_C_X, OnCX)\r
+ ON_EN_KILLFOCUS(IDC_NEW_KEY, OnKillfocusNewKey)\r
+ ON_BN_CLICKED(IDC_ENABLE_CUA, OnEnableCua)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesAdvanced message handlers\r
+\r
+BOOL CPropertiesAdvanced::OnSetActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ m_pProperties->EnableControl(ADVANCED_TAB);\r
+ SetDialogData(m_pProperties->GetCurrentApplication());\r
+\r
+ return CPropertyPage::OnSetActive();\r
+}\r
+\r
+void CPropertiesAdvanced::SetDialogData(CString szApplicationName)\r
+{\r
+ UpdateDialogData(szApplicationName, FALSE);\r
+}\r
+\r
+void CPropertiesAdvanced::UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate)\r
+{\r
+ m_nApplicationID = m_pProperties->GetApplicationID();\r
+\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ UpdateData();\r
+ }\r
+\r
+ if (m_nApplicationID == MAX_APP) { // FIXME\r
+ return;\r
+ }\r
+\r
+ InitCommandIDs();\r
+ m_bEnableCUA = CProfile::GetEnableCUA(m_nApplicationID);\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ SetCurrentKeys();\r
+ }\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ UpdateData(FALSE);\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::GetDialogData()\r
+{\r
+ UpdateDialogData(m_pProperties->GetCurrentApplication(), TRUE);\r
+}\r
+\r
+int CPropertiesAdvanced::OnCreate(LPCREATESTRUCT lpCreateStruct) \r
+{\r
+ if (CPropertyPage::OnCreate(lpCreateStruct) == -1)\r
+ return -1;\r
+\r
+ // TODO: Add your specialized creation code here\r
+ m_pProperties = (CProperties *)GetParent()->GetParent();\r
+\r
+ return 0;\r
+}\r
+\r
+BOOL CPropertiesAdvanced::OnKillActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ GetDialogData();\r
+\r
+ return CPropertyPage::OnKillActive();\r
+}\r
+\r
+void CPropertiesAdvanced::EnableControl()\r
+{\r
+ BOOL bEnable = m_pProperties->IsEnableControl();\r
+\r
+ m_cCategory.EnableWindow(bEnable);\r
+ m_cCommands.EnableWindow(bEnable);\r
+ m_cCurrentKeys.EnableWindow(bEnable);\r
+ m_cNewKey.EnableWindow(bEnable);\r
+\r
+ m_cAssign.EnableWindow(FALSE);\r
+ m_cRemove.EnableWindow(FALSE);\r
+ m_cResetAll.EnableWindow(bEnable);\r
+}\r
+\r
+BOOL CPropertiesAdvanced::OnInitDialog() \r
+{\r
+ CPropertyPage::OnInitDialog();\r
+\r
+ // TODO: Add extra initialization here\r
+ m_nApplicationID = m_pProperties->GetApplicationID();\r
+ InitCategoryList();\r
+ SetCommands();\r
+\r
+ SetDialogData(m_pProperties->GetCurrentApplication());\r
+\r
+ m_cAssign.EnableWindow(FALSE);\r
+ m_cRemove.EnableWindow(FALSE);\r
+\r
+ m_cCurrentlyAssigned.SetWindowText(_T(""));\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void CPropertiesAdvanced::InitCategoryList()\r
+{\r
+ int nCategoryIDs[128] = {'\0'};\r
+\r
+ // get all category type\r
+ m_cCategory.ResetContent();\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+ int nCategoryID = CXkeymacsData::GetCategoryID(nCommandID);\r
+ if (!nCategoryID) {\r
+ continue;\r
+ }\r
+\r
+ BOOL bExist = FALSE;\r
+ for (int i = 0; nCategoryIDs[i]; ++i) {\r
+ if (nCategoryIDs[i] == nCategoryID) {\r
+ bExist = TRUE;\r
+ }\r
+ }\r
+ if (!bExist) {\r
+ nCategoryIDs[i] = nCategoryID;\r
+ }\r
+ }\r
+\r
+ // sort category type in combo box\r
+ int nMinimumID = 0;\r
+ for (int i = 0; nCategoryIDs[i]; ++i) {\r
+ int nID = 0;\r
+ for (int j = 0; nCategoryIDs[j]; ++j) {\r
+ if (nMinimumID < nCategoryIDs[j]\r
+ && (nID == 0 || nCategoryIDs[j] < nID)) {\r
+ nID = nCategoryIDs[j];\r
+ }\r
+ }\r
+ m_cCategory.InsertString(-1, CString(MAKEINTRESOURCE(nID)));\r
+ nMinimumID = nID;\r
+ }\r
+\r
+ if (CDotXkeymacs::GetFunctionNumber()) {\r
+ m_cCategory.InsertString(-1, CString(MAKEINTRESOURCE(IDS_ORIGINAL)));\r
+ }\r
+\r
+ m_cCategory.SetCurSel(0);\r
+}\r
+\r
+void CPropertiesAdvanced::SetCommands()\r
+{\r
+ m_cCommands.ResetContent();\r
+\r
+ CString szCategory;\r
+ m_cCategory.GetLBText(m_cCategory.GetCurSel(), szCategory);\r
+ if (szCategory.Compare(CString(MAKEINTRESOURCE(IDS_ORIGINAL)))) {\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ if (szCategory == CString(MAKEINTRESOURCE(CXkeymacsData::GetCategoryID(nCommandID)))) {\r
+ m_cCommands.AddString(szCommandName);\r
+ }\r
+ }\r
+ } else {\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ BOOL bOriginal = TRUE;\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ if (szCommandName == CDotXkeymacs::GetFunctionSymbol(nFunctionID)) {\r
+ bOriginal = FALSE; // overwriting build-in keybindings\r
+ break;\r
+ }\r
+ }\r
+ if (bOriginal) {\r
+ m_cCommands.AddString(CDotXkeymacs::GetFunctionSymbol(nFunctionID));\r
+ }\r
+ }\r
+ }\r
+\r
+ m_cCommands.SetCurSel(0);\r
+ SetCurrentKeys();\r
+}\r
+\r
+void CPropertiesAdvanced::SetCurrentKeys()\r
+{\r
+ m_cCurrentKeys.ResetContent();\r
+ m_cRemove.EnableWindow(FALSE);\r
+\r
+ CString szCategory;\r
+ m_cCategory.GetLBText(m_cCategory.GetCurSel(), szCategory);\r
+\r
+ CString szCurrentCommandName;\r
+ m_cCommands.GetText(m_cCommands.GetCurSel(), szCurrentCommandName);\r
+\r
+ if (szCategory.Compare(CString(MAKEINTRESOURCE(IDS_ORIGINAL)))) {\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ if (CXkeymacsData::GetCommandName(CProfile::GetCommandID(m_nApplicationID, nCommandType, nKey)) == szCurrentCommandName) {\r
+ CString sz;\r
+ sz.Format(_T("%s%s"), CProfile::CommandType2String(nCommandType), CProfile::Key2String(nKey));\r
+ m_cCurrentKeys.AddString(sz);\r
+ }\r
+ }\r
+ }\r
+\r
+ CString szCommandName;\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+ if (szCommandName == szCurrentCommandName) {\r
+ m_nCommandID = nCommandID;\r
+ break;\r
+ }\r
+ }\r
+\r
+ m_cDescription.SetWindowText(CString(MAKEINTRESOURCE(CXkeymacsData::GetDescriptionID(m_nCommandID))));\r
+\r
+ // overwrite by original command's description if needed\r
+ for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
+ if (szCommandName == CDotXkeymacs::GetFunctionSymbol(nFunctionID)) {\r
+ m_cDescription.SetWindowText(CDotXkeymacs::GetFunctionDefinition(szCurrentCommandName));\r
+ break;\r
+ }\r
+ }\r
+ } else {\r
+ const int nIndex = CDotXkeymacs::GetIndex(szCurrentCommandName);\r
+ for (int nKeyID = 0; nKeyID < CDotXkeymacs::GetKeyNumber(nIndex, m_nApplicationID); ++nKeyID) {\r
+ int nCommandType = 0;\r
+ int nKey = 0;\r
+ CDotXkeymacs::GetKey(nIndex, m_nApplicationID, nKeyID, &nCommandType, &nKey);\r
+\r
+ CString sz;\r
+ sz.Format(_T("%s%s"), CProfile::CommandType2String(nCommandType), CProfile::Key2String(nKey));\r
+ m_cCurrentKeys.AddString(sz);\r
+ }\r
+\r
+ m_cDescription.SetWindowText(CDotXkeymacs::GetFunctionDefinition(szCurrentCommandName));\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::OnSelchangeCategory() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ SetCommands();\r
+ ClearNewKey();\r
+}\r
+\r
+void CPropertiesAdvanced::OnSelchangeCommands() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ BOOL bEnableWindow = FALSE;\r
+ CString szCurrentCommandName;\r
+ m_cCommands.GetText(m_cCommands.GetCurSel(), szCurrentCommandName);\r
+ if (szCurrentCommandName.CompareNoCase(_T("C-"))\r
+ && szCurrentCommandName.CompareNoCase(_T("Meta for Alt"))\r
+ && szCurrentCommandName.CompareNoCase(_T("Pass Through"))) {\r
+ bEnableWindow = TRUE;\r
+ }\r
+ GetDlgItem(IDC_C_X)->EnableWindow(bEnableWindow);\r
+ m_bC = bEnableWindow;\r
+ m_bM = bEnableWindow;\r
+ m_bShift = bEnableWindow;\r
+\r
+ SetCurrentKeys();\r
+ ClearNewKey();\r
+}\r
+\r
+void CPropertiesAdvanced::OnSelchangeCurrentKeys() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ TCHAR szKeyBind[128] = {'\0'};\r
+ m_cCurrentKeys.GetText(m_cCurrentKeys.GetCurSel(), szKeyBind);\r
+ CProfile::ReadKeyBind(&m_nRemoveCommandType, &m_nRemoveKey, szKeyBind);\r
+ m_cRemove.EnableWindow();\r
+}\r
+\r
+void CPropertiesAdvanced::OnSetfocusNewKey() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ m_pNewKey = &m_cNewKey;\r
+ m_pAssign = &m_cAssign;\r
+ m_pCurrentlyAssigned = &m_cCurrentlyAssigned;\r
+ m_pCurrentKeys = &m_cCurrentKeys;\r
+ m_hKeyboardHook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)CPropertiesAdvanced::KeyboardProc, NULL, AfxGetApp()->m_nThreadID);\r
+\r
+ m_bC_x = IsDlgButtonChecked(IDC_C_X) && GetDlgItem(IDC_C_X)->IsWindowEnabled();\r
+}\r
+\r
+void CPropertiesAdvanced::OnAssign() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ // Remove Current Setting\r
+ CProfile::SetCommandID(m_nApplicationID, m_nAssignCommandType, m_nAssignKey, 0);\r
+ SetCommandID(m_nAssignCommandType, m_nAssignKey, 0);\r
+ CDotXkeymacs::RemoveKey(m_nApplicationID, m_nAssignCommandType, m_nAssignKey);\r
+\r
+ // Assign New Setting\r
+ CString szItem;\r
+ szItem.Format(_T("%s%s"), CProfile::CommandType2String(m_nAssignCommandType), CProfile::Key2String(m_nAssignKey));\r
+ if (m_cCurrentKeys.FindString(-1, szItem) == LB_ERR) { // This key bind has not assignd to the same command yet.\r
+ CString szCategory;\r
+ m_cCategory.GetLBText(m_cCategory.GetCurSel(), szCategory);\r
+\r
+ if (szCategory.Compare(CString(MAKEINTRESOURCE(IDS_ORIGINAL)))) {\r
+ CProfile::SetCommandID(m_nApplicationID, m_nAssignCommandType, m_nAssignKey, m_nCommandID);\r
+ SetCommandID(m_nAssignCommandType, m_nAssignKey, m_nCommandID);\r
+ } else {\r
+ CString szCurrentCommandName;\r
+ m_cCommands.GetText(m_cCommands.GetCurSel(), szCurrentCommandName);\r
+ CDotXkeymacs::SetKey(CDotXkeymacs::GetIndex(szCurrentCommandName), m_nApplicationID, m_nAssignCommandType, m_nAssignKey);\r
+ }\r
+ m_cCurrentKeys.AddString(szItem);\r
+ }\r
+\r
+ ClearNewKey();\r
+}\r
+\r
+void CPropertiesAdvanced::OnRemove() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ CString szCategory;\r
+ m_cCategory.GetLBText(m_cCategory.GetCurSel(), szCategory);\r
+\r
+ if (szCategory.Compare(CString(MAKEINTRESOURCE(IDS_ORIGINAL)))) {\r
+ CProfile::SetCommandID(m_nApplicationID, m_nRemoveCommandType, m_nRemoveKey, 0);\r
+ SetCommandID(m_nRemoveCommandType, m_nRemoveKey, 0);\r
+ } else {\r
+ CString szCurrentCommandName;\r
+ m_cCommands.GetText(m_cCommands.GetCurSel(), szCurrentCommandName);\r
+ CDotXkeymacs::RemoveKey(CDotXkeymacs::GetIndex(szCurrentCommandName), m_nApplicationID, m_nRemoveCommandType, m_nRemoveKey);\r
+ }\r
+\r
+ m_cCurrentKeys.DeleteString(m_cCurrentKeys.GetCurSel());\r
+ m_cRemove.EnableWindow(FALSE);\r
+ m_nRemoveCommandType = 0;\r
+ m_nRemoveKey = 0;\r
+}\r
+\r
+void CPropertiesAdvanced::OnResetAll() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ CProfile::LoadRegistryData();\r
+ InitCommandIDs();\r
+ SetCurrentKeys();\r
+}\r
+\r
+void CPropertiesAdvanced::ClearNewKey()\r
+{\r
+ m_cNewKey.SetWindowText(_T(""));\r
+ m_cAssign.EnableWindow(FALSE);\r
+ m_nAssignCommandType = 0;\r
+ m_nAssignKey = 0;\r
+ m_cCurrentlyAssigned.SetWindowText(_T(""));\r
+}\r
+\r
+LRESULT CALLBACK CPropertiesAdvanced::KeyboardProc(int code, WPARAM wParam, LPARAM lParam)\r
+{\r
+ if (code < 0 || code == HC_NOREMOVE) {\r
+ return ::CallNextHookEx(m_hKeyboardHook, code, wParam, lParam);\r
+ }\r
+\r
+ if (lParam & BEING_RELEASED) { // Key Up\r
+ } else { // Key Down\r
+ if (CProfile::IsNT()) {\r
+ switch (wParam) {\r
+ case VK_CONTROL:\r
+ if (lParam & EXTENDED_KEY) {\r
+ wParam = VK_RCONTROL;\r
+ } else {\r
+ wParam = VK_LCONTROL;\r
+ }\r
+ break;\r
+ case VK_MENU:\r
+ if (lParam & EXTENDED_KEY) {\r
+ wParam = VK_RMENU;\r
+ } else {\r
+ wParam = VK_LMENU;\r
+ }\r
+ break;\r
+ case VK_SHIFT:\r
+ if (lParam & EXTENDED_KEY) {\r
+ wParam = VK_RSHIFT;\r
+ } else {\r
+ wParam = VK_LSHIFT;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ m_nAssignKey = wParam;\r
+ SetNewKey();\r
+ }\r
+\r
+ return TRUE;\r
+}\r
+\r
+void CPropertiesAdvanced::SetNewKey()\r
+{\r
+ CString szNewKey;\r
+ int nCommandType = NONE;\r
+\r
+ if (m_bC_x) {\r
+ szNewKey += _T("Ctrl+X ");\r
+ nCommandType += CONTROLX;\r
+ }\r
+ if (IsCtrlDown()) {\r
+ szNewKey += _T("Ctrl+");\r
+ nCommandType += CONTROL;\r
+ }\r
+ if (IsMetaDown()) {\r
+ szNewKey += _T("Meta+");\r
+ nCommandType += META;\r
+ }\r
+ if (IsShiftDown()) {\r
+ szNewKey += _T("Shift+");\r
+ nCommandType += SHIFT;\r
+ }\r
+\r
+ m_nAssignCommandType = nCommandType;\r
+\r
+ szNewKey += CProfile::Key2String(m_nAssignKey);\r
+ if (m_pNewKey) {\r
+ m_pNewKey->SetWindowText(szNewKey);\r
+ }\r
+\r
+ if (m_pAssign) {\r
+ BOOL bEnable = TRUE;\r
+ if (m_pCurrentKeys\r
+ && m_pCurrentKeys->FindString(-1, szNewKey) != LB_ERR) { // This key bind is already assigned.\r
+ bEnable = FALSE;\r
+ }\r
+ m_pAssign->EnableWindow(bEnable);\r
+ }\r
+\r
+ if (m_pCurrentlyAssigned) {\r
+ CString szCurrentlyAssigned(_T("Currently assigned to:\n"));\r
+\r
+ if (m_nCommandIDs[m_nAssignCommandType][m_nAssignKey] || CDotXkeymacs::GetIndex(m_nApplicationID, m_nAssignCommandType, m_nAssignKey) == -1) {\r
+ szCurrentlyAssigned += CXkeymacsData::GetCommandName(m_nCommandIDs[m_nAssignCommandType][m_nAssignKey]);\r
+ } else {\r
+ szCurrentlyAssigned += CDotXkeymacs::GetFunctionSymbol(CDotXkeymacs::GetIndex(m_nApplicationID, m_nAssignCommandType, m_nAssignKey));\r
+ }\r
+ m_pCurrentlyAssigned->SetWindowText(szCurrentlyAssigned);\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::SetCommandID(int nCommandType, int nKey, int nCommandID)\r
+{\r
+ m_nCommandIDs[nCommandType][nKey] = nCommandID;\r
+\r
+ // Set C-x if it is needed.\r
+ if ((nCommandType & CONTROLX)) {\r
+ // Get CommandID of C-x.\r
+ for (int nCommandIDofC_x = 0; nCommandIDofC_x < sizeof(Commands) / sizeof(Commands[0]); ++nCommandIDofC_x) {\r
+ if (!_tcsicmp(CXkeymacsData::GetCommandName(nCommandIDofC_x), _T("C-x"))) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (nCommandID) {\r
+ m_nCommandIDs[CONTROL]['X'] = nCommandIDofC_x;\r
+ } else {\r
+ for (int i = 0; i < MAX_COMMAND_TYPE; ++i) { // i is command-type.\r
+ if (!(i & CONTROLX)) {\r
+ continue;\r
+ }\r
+ for (int j = 0; j < MAX_KEY; ++j) { // j is key.\r
+ if (m_nCommandIDs[i][j]) {\r
+ m_nCommandIDs[CONTROL]['X'] = nCommandIDofC_x; // needless\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ m_nCommandIDs[CONTROL]['X'] = 0;\r
+ }\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::InitCommandIDs()\r
+{\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ SetCommandID(nCommandType, nKey, CProfile::GetCommandID(m_nApplicationID, nCommandType, nKey));\r
+ }\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::OnCX() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ if (m_nAssignKey) {\r
+ OnSetfocusNewKey();\r
+ SetNewKey();\r
+ }\r
+}\r
+\r
+void CPropertiesAdvanced::OnKillfocusNewKey() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ if (m_hKeyboardHook) {\r
+ ::UnhookWindowsHookEx(m_hKeyboardHook);\r
+ }\r
+ m_hKeyboardHook = NULL;\r
+}\r
+\r
+void CPropertiesAdvanced::OnEnableCua() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData();\r
+ CProfile::SetEnableCUA(m_nApplicationID, m_bEnableCUA);\r
+}\r
+\r
+BOOL CPropertiesAdvanced::IsCtrlDown()\r
+{\r
+ return m_bC && IsFooDown(CString(_T("C-")));\r
+}\r
+\r
+BOOL CPropertiesAdvanced::IsMetaDown()\r
+{\r
+ return m_bM && IsFooDown(CString(_T("Meta for Alt")));\r
+}\r
+\r
+BOOL CPropertiesAdvanced::IsShiftDown()\r
+{\r
+ // temporary code\r
+ return m_bShift\r
+ && (GetKeyState(VK_SHIFT ) < 0\r
+ || GetKeyState(VK_LSHIFT) < 0\r
+ || GetKeyState(VK_RSHIFT) < 0);\r
+\r
+// return m_bShift && IsFooDown(CString("Foo"));\r
+}\r
+\r
+BOOL CPropertiesAdvanced::IsFooDown(CString szCommandName)\r
+{\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ if (CXkeymacsData::GetCommandName(CProfile::GetCommandID(0, NONE, nKey)) == szCommandName) { // FIXME\r
+ if (GetKeyState(nKey) < 0) {\r
+ return TRUE;\r
+ }\r
+ }\r
+ }\r
+ return FALSE;\r
+}\r
--- /dev/null
+#if !defined(AFX_PROPERTIESADVANCED_H__41C61B2B_97BA_4015_8F1E_CA65AC628E42__INCLUDED_)\r
+#define AFX_PROPERTIESADVANCED_H__41C61B2B_97BA_4015_8F1E_CA65AC628E42__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// PropertiesAdvanced.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesAdvanced dialog\r
+\r
+class CPropertiesAdvanced : public CPropertyPage\r
+{\r
+ DECLARE_DYNCREATE(CPropertiesAdvanced)\r
+\r
+// Construction\r
+public:\r
+ void EnableControl();\r
+ void GetDialogData();\r
+ void SetDialogData(CString szApplicationName);\r
+ CPropertiesAdvanced();\r
+ ~CPropertiesAdvanced();\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(CPropertiesAdvanced)\r
+ enum { IDD = IDD_PROPERTIES_ADVANCED };\r
+ CStatic m_cCurrentlyAssigned;\r
+ CButton m_cResetAll;\r
+ CButton m_cRemove;\r
+ CEdit m_cNewKey;\r
+ CStatic m_cDescription;\r
+ CListBox m_cCurrentKeys;\r
+ CListBox m_cCommands;\r
+ CComboBox m_cCategory;\r
+ CButton m_cAssign;\r
+ BOOL m_bEnableCUA;\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generate virtual function overrides\r
+ //{{AFX_VIRTUAL(CPropertiesAdvanced)\r
+ public:\r
+ virtual BOOL OnSetActive();\r
+ virtual BOOL OnKillActive();\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(CPropertiesAdvanced)\r
+ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\r
+ virtual BOOL OnInitDialog();\r
+ afx_msg void OnSelchangeCategory();\r
+ afx_msg void OnSelchangeCommands();\r
+ afx_msg void OnSelchangeCurrentKeys();\r
+ afx_msg void OnSetfocusNewKey();\r
+ afx_msg void OnAssign();\r
+ afx_msg void OnRemove();\r
+ afx_msg void OnResetAll();\r
+ afx_msg void OnCX();\r
+ afx_msg void OnKillfocusNewKey();\r
+ afx_msg void OnEnableCua();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ static int m_nApplicationID;\r
+ static BOOL IsFooDown(CString szCommandName);\r
+ static BOOL IsShiftDown();\r
+ static BOOL IsMetaDown();\r
+ static BOOL IsCtrlDown();\r
+ void InitCommandIDs();\r
+ static void SetCommandID(int nCommandType, int nKey, int nCommandID);\r
+ static int m_nCommandIDs[MAX_COMMAND_TYPE][MAX_KEY];\r
+ static void SetNewKey();\r
+ static int m_nAssignKey;\r
+ static int m_nAssignCommandType;\r
+ static BOOL m_bShift;\r
+ static BOOL m_bM;\r
+ static BOOL m_bC;\r
+ static BOOL m_bC_x;\r
+ static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);\r
+ static HHOOK m_hKeyboardHook;\r
+ static CListBox * m_pCurrentKeys;\r
+ static CStatic * m_pCurrentlyAssigned;\r
+ static CButton * m_pAssign;\r
+ static CEdit * m_pNewKey;\r
+ int m_nRemoveKey;\r
+ int m_nRemoveCommandType;\r
+ void ClearNewKey();\r
+ static int m_nCommandID;\r
+ void SetCurrentKeys();\r
+ void SetCommands();\r
+ void InitCategoryList();\r
+ CProperties* m_pProperties;\r
+ void UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate = TRUE);\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_PROPERTIESADVANCED_H__41C61B2B_97BA_4015_8F1E_CA65AC628E42__INCLUDED_)\r
--- /dev/null
+// PropertiesBasic.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "DotXkeymacs.h"\r
+#include "Profile.h"\r
+#include "Properties.h"\r
+#include "PropertiesBasic.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesBasic property page\r
+\r
+IMPLEMENT_DYNCREATE(CPropertiesBasic, CPropertyPage)\r
+\r
+CPropertiesBasic::CPropertiesBasic() : CPropertyPage(CPropertiesBasic::IDD)\r
+{\r
+ //{{AFX_DATA_INIT(CPropertiesBasic)\r
+ //}}AFX_DATA_INIT\r
+}\r
+\r
+CPropertiesBasic::~CPropertiesBasic()\r
+{\r
+}\r
+\r
+void CPropertiesBasic::DoDataExchange(CDataExchange* pDX)\r
+{\r
+ CPropertyPage::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(CPropertiesBasic)\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CPropertiesBasic, CPropertyPage)\r
+ //{{AFX_MSG_MAP(CPropertiesBasic)\r
+ ON_WM_CREATE()\r
+ ON_BN_CLICKED(IDC_ALT, OnAlt)\r
+ ON_BN_CLICKED(IDC_C_, OnC_)\r
+ ON_BN_CLICKED(IDC_CA, OnCa)\r
+ ON_BN_CLICKED(IDC_CB, OnCb)\r
+ ON_BN_CLICKED(IDC_CBACKSLASH, OnCbackslash)\r
+ ON_BN_CLICKED(IDC_CBACKSLASH_106, OnCbackslash106)\r
+ ON_BN_CLICKED(IDC_CD, OnCd)\r
+ ON_BN_CLICKED(IDC_CDIGIT, OnCdigit)\r
+ ON_BN_CLICKED(IDC_CE, OnCe)\r
+ ON_BN_CLICKED(IDC_CF, OnCf)\r
+ ON_BN_CLICKED(IDC_CG, OnCg)\r
+ ON_BN_CLICKED(IDC_CH, OnCh)\r
+ ON_BN_CLICKED(IDC_CI, OnCi)\r
+ ON_BN_CLICKED(IDC_CK, OnCk)\r
+ ON_BN_CLICKED(IDC_CL, OnCl)\r
+ ON_BN_CLICKED(IDC_CM, OnCm)\r
+ ON_BN_CLICKED(IDC_CMS5, OnCms5)\r
+ ON_BN_CLICKED(IDC_CN, OnCn)\r
+ ON_BN_CLICKED(IDC_CO, OnCo)\r
+ ON_BN_CLICKED(IDC_CO2, OnCo2)\r
+ ON_BN_CLICKED(IDC_CP, OnCp)\r
+ ON_BN_CLICKED(IDC_CQ, OnCq)\r
+ ON_BN_CLICKED(IDC_CR, OnCr)\r
+ ON_BN_CLICKED(IDC_CS, OnCs)\r
+ ON_BN_CLICKED(IDC_CSLASH, OnCslash)\r
+ ON_BN_CLICKED(IDC_CSPACE, OnCspace)\r
+ ON_BN_CLICKED(IDC_CT, OnCt)\r
+ ON_BN_CLICKED(IDC_CU, OnCu)\r
+ ON_BN_CLICKED(IDC_CV, OnCv)\r
+ ON_BN_CLICKED(IDC_CW, OnCw)\r
+ ON_BN_CLICKED(IDC_CXB, OnCxb)\r
+ ON_BN_CLICKED(IDC_CXCC, OnCxcc)\r
+ ON_BN_CLICKED(IDC_CXCF, OnCxcf)\r
+ ON_BN_CLICKED(IDC_CXCJ, OnCxcj)\r
+ ON_BN_CLICKED(IDC_CXCP, OnCxcp)\r
+ ON_BN_CLICKED(IDC_CXCS, OnCxcs)\r
+ ON_BN_CLICKED(IDC_CXCT, OnCxct)\r
+ ON_BN_CLICKED(IDC_CXCW, OnCxcw)\r
+ ON_BN_CLICKED(IDC_CXE, OnCxe)\r
+ ON_BN_CLICKED(IDC_CXH, OnCxh)\r
+ ON_BN_CLICKED(IDC_CXK, OnCxk)\r
+ ON_BN_CLICKED(IDC_CXS0, OnCxs0)\r
+ ON_BN_CLICKED(IDC_CXS9, OnCxs9)\r
+ ON_BN_CLICKED(IDC_CXU, OnCxu)\r
+ ON_BN_CLICKED(IDC_CY, OnCy)\r
+ ON_BN_CLICKED(IDC_CZ, OnCz)\r
+ ON_BN_CLICKED(IDC_LEFT_ALT, OnLeftAlt)\r
+ ON_BN_CLICKED(IDC_MB, OnMb)\r
+ ON_BN_CLICKED(IDC_MD, OnMd)\r
+ ON_BN_CLICKED(IDC_MF, OnMf)\r
+ ON_BN_CLICKED(IDC_MI, OnMi)\r
+ ON_BN_CLICKED(IDC_MS1, OnMs1)\r
+ ON_BN_CLICKED(IDC_MS5, OnMs5)\r
+ ON_BN_CLICKED(IDC_MSCOMMA, OnMscomma)\r
+ ON_BN_CLICKED(IDC_MSPERIOD, OnMsperiod)\r
+ ON_BN_CLICKED(IDC_MV, OnMv)\r
+ ON_BN_CLICKED(IDC_MW, OnMw)\r
+ ON_BN_CLICKED(IDC_MY, OnMy)\r
+ ON_BN_CLICKED(IDC_RIGHT_ALT, OnRightAlt)\r
+ ON_BN_CLICKED(IDC_ESCAPE, OnEscape)\r
+ ON_BN_CLICKED(IDC_SQUARE_BRA, OnSquareBra)\r
+ ON_BN_CLICKED(IDC_MDEL, OnMdel)\r
+ ON_BN_CLICKED(IDC_MF12, OnMf12)\r
+ ON_BN_CLICKED(IDC_MT, OnMt)\r
+ ON_BN_CLICKED(IDC_MC, OnMc)\r
+ ON_BN_CLICKED(IDC_ML, OnMl)\r
+ ON_BN_CLICKED(IDC_MU, OnMu)\r
+ ON_BN_CLICKED(IDC_MX, OnMx)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesBasic message handlers\r
+\r
+BOOL CPropertiesBasic::OnSetActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ m_pProperties->EnableControl(BASIC_TAB);\r
+ SetDialogData(m_pProperties->GetCurrentApplication());\r
+\r
+ return CPropertyPage::OnSetActive();\r
+}\r
+\r
+void CPropertiesBasic::SetAllDialogData(UINT nCheck, BOOL bChanged)\r
+{\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ for (int i = 0; ; ++i) {\r
+ int nKey = CXkeymacsData::GetDefaultCommandKey(nCommandID, i);\r
+ int nControlID = CXkeymacsData::GetDefaultControlID(nCommandID, i);\r
+ if (nKey == 0) {\r
+ break;\r
+ }\r
+ CheckDlgButton(nControlID, nCheck);\r
+ }\r
+ }\r
+ CheckDlgButton(IDC_CO2, BST_UNCHECKED);\r
+\r
+ InitChanged(bChanged);\r
+}\r
+\r
+void CPropertiesBasic::SetDialogData(CString szApplicationName)\r
+{\r
+ UpdateDialogData(szApplicationName, FALSE);\r
+}\r
+\r
+void CPropertiesBasic::UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate)\r
+{\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ UpdateData();\r
+ }\r
+\r
+ if (m_pProperties->GetApplicationID() == MAX_APP) {\r
+ if (!bSaveAndValidate) {\r
+ SetAllDialogData(1, FALSE); // FIXME\r
+ }\r
+ return;\r
+ }\r
+\r
+ // on/off\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ SetAllDialogData(1, FALSE);\r
+ CheckDlgButton(IDC_CO2, BST_CHECKED);\r
+ }\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ for (int i = 0; ; ++i) {\r
+ int nCommandType = CXkeymacsData::GetDefaultCommandType(nCommandID, i);\r
+ int nKey = CXkeymacsData::GetDefaultCommandKey(nCommandID, i);\r
+ int nControlID = CXkeymacsData::GetDefaultControlID(nCommandID, i);\r
+ if (nKey == 0) {\r
+ break;\r
+ }\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ if (nControlID == IDC_CO2) {\r
+ continue;\r
+ }\r
+ if (!m_bChanged[nCommandID]) {\r
+ continue;\r
+ }\r
+ if (IsDlgButtonChecked(nControlID)) {\r
+ CProfile::SetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey, nCommandID);\r
+ CDotXkeymacs::RemoveKey(m_pProperties->GetApplicationID(), nCommandType, nKey);\r
+ } else {\r
+ CProfile::SetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey, 0);\r
+ }\r
+ } else { // SetDialogData\r
+ if (nCommandID != CProfile::GetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey)) {\r
+ CheckDlgButton(nControlID, BST_UNCHECKED);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ // only for Toggle Imput Method Editor C-o: Canna mode\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ int nCommandType = CONTROL;\r
+ int nKey = 'O';\r
+ if (CProfile::GetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey) == 0) {\r
+ if (IsDlgButtonChecked(IDC_CO2)) {\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+ if (!szCommandName.CompareNoCase(_T("toggle-input-method"))) {\r
+ CProfile::SetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey, nCommandID);\r
+ CProfile::SetCommandID(m_pProperties->GetApplicationID(), CONTROL+SHIFT, nKey, nCommandID);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ UpdateData(FALSE);\r
+ }\r
+}\r
+\r
+void CPropertiesBasic::InitChanged(BOOL bChanged)\r
+{\r
+ for (int i = 0; i < sizeof(m_bChanged)/sizeof(m_bChanged[0]); ++i) {\r
+ if (CXkeymacsData::GetDefaultControlID(i, 0) || !bChanged) {\r
+ m_bChanged[i] = bChanged;\r
+ }\r
+ }\r
+}\r
+\r
+int CPropertiesBasic::OnCreate(LPCREATESTRUCT lpCreateStruct) \r
+{\r
+ if (CPropertyPage::OnCreate(lpCreateStruct) == -1)\r
+ return -1;\r
+ \r
+ // TODO: Add your specialized creation code here\r
+ m_pProperties = (CProperties *)GetParent()->GetParent();\r
+\r
+ return 0;\r
+}\r
+\r
+void CPropertiesBasic::GetDialogData()\r
+{\r
+ UpdateDialogData(m_pProperties->GetCurrentApplication(), TRUE);\r
+}\r
+\r
+void CPropertiesBasic::OnAlt() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_ALT);\r
+}\r
+\r
+void CPropertiesBasic::OnC_() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_C_);\r
+}\r
+\r
+void CPropertiesBasic::OnCa() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CA);\r
+}\r
+\r
+void CPropertiesBasic::OnCb() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CB);\r
+}\r
+\r
+void CPropertiesBasic::OnCbackslash() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CBACKSLASH);\r
+}\r
+\r
+void CPropertiesBasic::OnCbackslash106() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CBACKSLASH_106);\r
+}\r
+\r
+void CPropertiesBasic::OnCd() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CD);\r
+}\r
+\r
+void CPropertiesBasic::OnCdigit() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CDIGIT);\r
+}\r
+\r
+void CPropertiesBasic::OnCe() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CE);\r
+}\r
+\r
+void CPropertiesBasic::OnCf() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CF);\r
+}\r
+\r
+void CPropertiesBasic::OnCg() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CG);\r
+}\r
+\r
+void CPropertiesBasic::OnCh() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CH);\r
+}\r
+\r
+void CPropertiesBasic::OnCi() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CI);\r
+}\r
+\r
+void CPropertiesBasic::OnCk() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CK);\r
+}\r
+\r
+void CPropertiesBasic::OnCl() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CL);\r
+}\r
+\r
+void CPropertiesBasic::OnCm() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CM);\r
+}\r
+\r
+void CPropertiesBasic::OnCms5() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CMS5);\r
+}\r
+\r
+void CPropertiesBasic::OnCn() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CN);\r
+}\r
+\r
+void CPropertiesBasic::OnCo() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CO);\r
+ if (IsDlgButtonChecked(IDC_CO) == BST_CHECKED) {\r
+ CheckDlgButton(IDC_CO2, BST_UNCHECKED);\r
+ Changed(IDC_CO2);\r
+ }\r
+}\r
+\r
+void CPropertiesBasic::OnCo2() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CO2);\r
+ if (IsDlgButtonChecked(IDC_CO2) == BST_CHECKED) {\r
+ CheckDlgButton(IDC_CO, BST_UNCHECKED);\r
+ Changed(IDC_CO);\r
+ }\r
+}\r
+\r
+void CPropertiesBasic::OnCp() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CP);\r
+}\r
+\r
+void CPropertiesBasic::OnCq() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CQ);\r
+}\r
+\r
+void CPropertiesBasic::OnCr() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CR);\r
+}\r
+\r
+void CPropertiesBasic::OnCs() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CS);\r
+}\r
+\r
+void CPropertiesBasic::OnCslash() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CSLASH);\r
+}\r
+\r
+void CPropertiesBasic::OnCspace() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CSPACE);\r
+}\r
+\r
+void CPropertiesBasic::OnCt() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CT);\r
+}\r
+\r
+void CPropertiesBasic::OnCu() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CU);\r
+}\r
+\r
+void CPropertiesBasic::OnCv() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CV);\r
+}\r
+\r
+void CPropertiesBasic::OnCw() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CW);\r
+}\r
+\r
+void CPropertiesBasic::OnCxb() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXB);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcc() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCC);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcf() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCF);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcj() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCJ);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcp() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCP);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcs() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCS);\r
+}\r
+\r
+void CPropertiesBasic::OnCxct() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCT);\r
+}\r
+\r
+void CPropertiesBasic::OnCxcw() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXCW);\r
+}\r
+\r
+void CPropertiesBasic::OnCxe() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXE);\r
+}\r
+\r
+void CPropertiesBasic::OnCxh() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXH);\r
+}\r
+\r
+void CPropertiesBasic::OnCxk() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXK);\r
+}\r
+\r
+void CPropertiesBasic::OnCxs0() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXS0);\r
+}\r
+\r
+void CPropertiesBasic::OnCxs9() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXS9);\r
+}\r
+\r
+void CPropertiesBasic::OnCxu() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CXU);\r
+}\r
+\r
+void CPropertiesBasic::OnCy() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CY);\r
+}\r
+\r
+void CPropertiesBasic::OnCz() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_CZ);\r
+}\r
+\r
+void CPropertiesBasic::OnEscape() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_ESCAPE);\r
+}\r
+\r
+void CPropertiesBasic::OnLeftAlt() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_LEFT_ALT);\r
+}\r
+\r
+void CPropertiesBasic::OnMb() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MB);\r
+}\r
+\r
+void CPropertiesBasic::OnMd() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MD);\r
+}\r
+\r
+void CPropertiesBasic::OnMf() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MF);\r
+}\r
+\r
+void CPropertiesBasic::OnMi() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MI);\r
+}\r
+\r
+void CPropertiesBasic::OnMs1() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MS1);\r
+}\r
+\r
+void CPropertiesBasic::OnMs5() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MS5);\r
+}\r
+\r
+void CPropertiesBasic::OnMscomma() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MSCOMMA);\r
+}\r
+\r
+void CPropertiesBasic::OnMsperiod() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MSPERIOD);\r
+}\r
+\r
+void CPropertiesBasic::OnMv() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MV);\r
+}\r
+\r
+void CPropertiesBasic::OnMw() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MW);\r
+}\r
+\r
+void CPropertiesBasic::OnMy() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MY);\r
+}\r
+\r
+void CPropertiesBasic::OnRightAlt() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_RIGHT_ALT);\r
+}\r
+\r
+void CPropertiesBasic::OnSquareBra() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_SQUARE_BRA);\r
+}\r
+\r
+void CPropertiesBasic::Changed(int nObjectID)\r
+{\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ for (int i = 0; ; ++i) {\r
+ if (CXkeymacsData::GetDefaultCommandKey(nCommandID, i) == 0) {\r
+ break;\r
+ }\r
+\r
+ int nControlID = CXkeymacsData::GetDefaultControlID(nCommandID, i);\r
+ if ((nControlID == nObjectID)\r
+ || ((nObjectID == IDC_CO) && (nControlID == IDC_CO2))\r
+ || ((nObjectID == IDC_CO2) && (nControlID == IDC_CO))) {\r
+ m_bChanged[nCommandID] = TRUE;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+BOOL CPropertiesBasic::OnKillActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ GetDialogData();\r
+\r
+ return CPropertyPage::OnKillActive();\r
+}\r
+\r
+void CPropertiesBasic::EnableControl()\r
+{\r
+ BOOL bEnable = m_pProperties->IsEnableControl();\r
+\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ for (int i = 0; ; ++i) {\r
+ int nKey = CXkeymacsData::GetDefaultCommandKey(nCommandID, i);\r
+ int nControlID = CXkeymacsData::GetDefaultControlID(nCommandID, i);\r
+ if (nKey == 0) {\r
+ break;\r
+ }\r
+ if (GetDlgItem(nControlID)) {\r
+ GetDlgItem(nControlID)->EnableWindow(bEnable);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+BOOL CPropertiesBasic::PreTranslateMessage(MSG* pMsg) \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ m_ToolTip.RelayEvent(pMsg);\r
+\r
+ return CPropertyPage::PreTranslateMessage(pMsg);\r
+}\r
+\r
+BOOL CPropertiesBasic::OnInitDialog() \r
+{\r
+ CPropertyPage::OnInitDialog();\r
+\r
+ // TODO: Add extra initialization here\r
+ if (m_ToolTip.Create(this)) {\r
+ for (int nCommandID = 0; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ for (int i = 0; ; ++i) {\r
+ int nKey = CXkeymacsData::GetDefaultCommandKey(nCommandID, i);\r
+ int nControlID = CXkeymacsData::GetDefaultControlID(nCommandID, i);\r
+ if (nKey == 0) {\r
+ break;\r
+ }\r
+ if (GetDlgItem(nControlID)) {\r
+ m_ToolTip.AddTool(GetDlgItem(nControlID), CString(MAKEINTRESOURCE(CXkeymacsData::GetToolTipID(nCommandID))));\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+void CPropertiesBasic::OnMdel() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MDEL);\r
+}\r
+\r
+void CPropertiesBasic::OnMf12() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MF12);\r
+}\r
+\r
+void CPropertiesBasic::OnMt() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MT);\r
+}\r
+\r
+void CPropertiesBasic::OnMc() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MC);\r
+}\r
+\r
+void CPropertiesBasic::OnMl() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_ML);\r
+}\r
+\r
+void CPropertiesBasic::OnMu() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MU);\r
+}\r
+\r
+void CPropertiesBasic::OnMx() \r
+{\r
+ // TODO: Add your control notification handler code here\r
+ Changed(IDC_MX);\r
+}\r
--- /dev/null
+#if !defined(AFX_PROPERTIESBASIC_H__04D80B48_2913_4D7C_86A4_3049877B6996__INCLUDED_)\r
+#define AFX_PROPERTIESBASIC_H__04D80B48_2913_4D7C_86A4_3049877B6996__INCLUDED_\r
+\r
+class CProperties;\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+// PropertiesBasic.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesBasic dialog\r
+\r
+class CPropertiesBasic : public CPropertyPage\r
+{\r
+ DECLARE_DYNCREATE(CPropertiesBasic)\r
+\r
+// Construction\r
+public:\r
+ void EnableControl();\r
+ void GetDialogData();\r
+ void InitChanged(BOOL bChanged);\r
+ void SetDialogData(CString szApplicationName);\r
+ void SetAllDialogData(UINT nCheck, BOOL bChanged);\r
+ CPropertiesBasic();\r
+ ~CPropertiesBasic();\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(CPropertiesBasic)\r
+ enum { IDD = IDD_PROPERTIES_BASIC };\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generate virtual function overrides\r
+ //{{AFX_VIRTUAL(CPropertiesBasic)\r
+ public:\r
+ virtual BOOL OnSetActive();\r
+ virtual BOOL OnKillActive();\r
+ virtual BOOL PreTranslateMessage(MSG* pMsg);\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(CPropertiesBasic)\r
+ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\r
+ afx_msg void OnAlt();\r
+ afx_msg void OnC_();\r
+ afx_msg void OnCa();\r
+ afx_msg void OnCb();\r
+ afx_msg void OnCbackslash();\r
+ afx_msg void OnCbackslash106();\r
+ afx_msg void OnCd();\r
+ afx_msg void OnCdigit();\r
+ afx_msg void OnCe();\r
+ afx_msg void OnCf();\r
+ afx_msg void OnCg();\r
+ afx_msg void OnCh();\r
+ afx_msg void OnCi();\r
+ afx_msg void OnCk();\r
+ afx_msg void OnCl();\r
+ afx_msg void OnCm();\r
+ afx_msg void OnCms5();\r
+ afx_msg void OnCn();\r
+ afx_msg void OnCo();\r
+ afx_msg void OnCo2();\r
+ afx_msg void OnCp();\r
+ afx_msg void OnCq();\r
+ afx_msg void OnCr();\r
+ afx_msg void OnCs();\r
+ afx_msg void OnCslash();\r
+ afx_msg void OnCspace();\r
+ afx_msg void OnCt();\r
+ afx_msg void OnCu();\r
+ afx_msg void OnCv();\r
+ afx_msg void OnCw();\r
+ afx_msg void OnCxb();\r
+ afx_msg void OnCxcc();\r
+ afx_msg void OnCxcf();\r
+ afx_msg void OnCxcj();\r
+ afx_msg void OnCxcp();\r
+ afx_msg void OnCxcs();\r
+ afx_msg void OnCxct();\r
+ afx_msg void OnCxcw();\r
+ afx_msg void OnCxe();\r
+ afx_msg void OnCxh();\r
+ afx_msg void OnCxk();\r
+ afx_msg void OnCxs0();\r
+ afx_msg void OnCxs9();\r
+ afx_msg void OnCxu();\r
+ afx_msg void OnCy();\r
+ afx_msg void OnCz();\r
+ afx_msg void OnLeftAlt();\r
+ afx_msg void OnMb();\r
+ afx_msg void OnMd();\r
+ afx_msg void OnMf();\r
+ afx_msg void OnMi();\r
+ afx_msg void OnMs1();\r
+ afx_msg void OnMs5();\r
+ afx_msg void OnMscomma();\r
+ afx_msg void OnMsperiod();\r
+ afx_msg void OnMv();\r
+ afx_msg void OnMw();\r
+ afx_msg void OnMy();\r
+ afx_msg void OnRightAlt();\r
+ afx_msg void OnEscape();\r
+ afx_msg void OnSquareBra();\r
+ virtual BOOL OnInitDialog();\r
+ afx_msg void OnMdel();\r
+ afx_msg void OnMf12();\r
+ afx_msg void OnMt();\r
+ afx_msg void OnMc();\r
+ afx_msg void OnMl();\r
+ afx_msg void OnMu();\r
+ afx_msg void OnMx();\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ CToolTipCtrl m_ToolTip;\r
+ void Changed(int nObjectID);\r
+ CProperties* m_pProperties;\r
+ BOOL m_bChanged[sizeof(Commands)/sizeof(Commands[0])];\r
+ void UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate = TRUE);\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_PROPERTIESBASIC_H__04D80B48_2913_4D7C_86A4_3049877B6996__INCLUDED_)\r
--- /dev/null
+// PropertiesList.cpp : implementation file\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "Profile.h"\r
+#include "Properties.h"\r
+#include "PropertiesList.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesList property page\r
+\r
+BOOL CPropertiesList::m_bSortAscending = TRUE;\r
+\r
+IMPLEMENT_DYNCREATE(CPropertiesList, CPropertyPage)\r
+\r
+CPropertiesList::CPropertiesList() : CPropertyPage(CPropertiesList::IDD)\r
+{\r
+ //{{AFX_DATA_INIT(CPropertiesList)\r
+ // NOTE: the ClassWizard will add member initialization here\r
+ //}}AFX_DATA_INIT\r
+}\r
+\r
+CPropertiesList::~CPropertiesList()\r
+{\r
+}\r
+\r
+void CPropertiesList::DoDataExchange(CDataExchange* pDX)\r
+{\r
+ CPropertyPage::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(CPropertiesList)\r
+ DDX_Control(pDX, IDC_PROPERTIES_LIST, m_cPropertiesList);\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CPropertiesList, CPropertyPage)\r
+ //{{AFX_MSG_MAP(CPropertiesList)\r
+ ON_WM_CREATE()\r
+ ON_NOTIFY(LVN_COLUMNCLICK, IDC_PROPERTIES_LIST, OnColumnclickPropertiesList)\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesList message handlers\r
+\r
+BOOL CPropertiesList::OnSetActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ m_pProperties->EnableControl(LIST_TAB);\r
+ SetDialogData(m_pProperties->GetCurrentApplication());\r
+\r
+ return CPropertyPage::OnSetActive();\r
+}\r
+\r
+void CPropertiesList::SetDialogData(CString szApplicationName)\r
+{\r
+ UpdateDialogData(szApplicationName, FALSE);\r
+}\r
+\r
+void CPropertiesList::UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate)\r
+{\r
+ if (bSaveAndValidate) { // GetDialogData\r
+ UpdateData();\r
+ }\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ m_cPropertiesList.DeleteAllItems();\r
+ m_nCategoryWidth = 0;\r
+ m_nCommandWidth = 0;\r
+ m_nKeyWidth = 0;\r
+\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ CString szCommandName = CXkeymacsData::GetCommandName(nCommandID);\r
+ if (szCommandName.IsEmpty()) {\r
+ break;\r
+ }\r
+\r
+ CString szCategory(MAKEINTRESOURCE(CXkeymacsData::GetCategoryID(nCommandID)));\r
+ if (szCategory.IsEmpty()) {\r
+ continue;\r
+ }\r
+\r
+ BOOL bInserted = FALSE;\r
+ for (int nCommandType = 0; nCommandType < MAX_COMMAND_TYPE; ++nCommandType) {\r
+ for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
+ if (nCommandID == CProfile::GetCommandID(m_pProperties->GetApplicationID(), nCommandType, nKey)) {\r
+ CString szKey;\r
+ szKey.Format(_T("%s%s"), CProfile::CommandType2String(nCommandType), CProfile::Key2String(nKey));\r
+\r
+ InsertItem(szCategory, szCommandName, szKey);\r
+\r
+ bInserted = TRUE;\r
+ }\r
+ }\r
+ }\r
+ if (!bInserted) {\r
+ InsertItem(szCategory, szCommandName, _T(""));\r
+ }\r
+ }\r
+\r
+ SortItem(m_nSelectedColumn);\r
+ m_cPropertiesList.SetColumnWidth(0, m_nCategoryWidth + 0x20);\r
+ m_cPropertiesList.SetColumnWidth(1, m_nCommandWidth + 0x20);\r
+ m_cPropertiesList.SetColumnWidth(2, m_nKeyWidth + 0x20);\r
+ }\r
+\r
+ if (!bSaveAndValidate) { // SetDialogData\r
+ UpdateData(FALSE);\r
+ }\r
+}\r
+\r
+void CPropertiesList::GetDialogData()\r
+{\r
+ UpdateDialogData(m_pProperties->GetCurrentApplication(), TRUE);\r
+}\r
+\r
+int CPropertiesList::OnCreate(LPCREATESTRUCT lpCreateStruct) \r
+{\r
+ if (CPropertyPage::OnCreate(lpCreateStruct) == -1)\r
+ return -1;\r
+\r
+ // TODO: Add your specialized creation code here\r
+ m_pProperties = (CProperties *)GetParent()->GetParent();\r
+\r
+ return 0;\r
+}\r
+\r
+BOOL CPropertiesList::OnKillActive() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+ GetDialogData();\r
+\r
+ return CPropertyPage::OnKillActive();\r
+}\r
+\r
+void CPropertiesList::EnableControl()\r
+{\r
+ BOOL bEnable = m_pProperties->IsEnableControl();\r
+\r
+ m_cPropertiesList.EnableWindow(bEnable);\r
+}\r
+\r
+BOOL CPropertiesList::OnInitDialog() \r
+{\r
+ CPropertyPage::OnInitDialog();\r
+\r
+ // TODO: Add extra initialization here\r
+ DWORD dwStyle = m_cPropertiesList.GetExtendedStyle();\r
+ dwStyle |= LVS_EX_FULLROWSELECT;\r
+ m_cPropertiesList.SetExtendedStyle(dwStyle);\r
+\r
+ m_nSelectedColumn = 0;\r
+ m_bSortAscending = TRUE;\r
+\r
+ m_cPropertiesList.InsertColumn(0, CString(MAKEINTRESOURCE(IDS_CATEGORY)), LVCFMT_LEFT);\r
+ m_cPropertiesList.InsertColumn(1, CString(MAKEINTRESOURCE(IDS_COMMAND)), LVCFMT_LEFT);\r
+ m_cPropertiesList.InsertColumn(2, CString(MAKEINTRESOURCE(IDS_KEY)), LVCFMT_LEFT);\r
+\r
+ return TRUE; // return TRUE unless you set the focus to a control\r
+ // EXCEPTION: OCX Property Pages should return FALSE\r
+}\r
+\r
+int CALLBACK CPropertiesList::SortCategory(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)\r
+{\r
+ return Sort(lParam1, lParam2, lParamSort, SORT_CATEGORY);\r
+}\r
+\r
+int CALLBACK CPropertiesList::SortCommand(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)\r
+{\r
+ return Sort(lParam1, lParam2, lParamSort, SORT_COMMAND);\r
+}\r
+\r
+int CALLBACK CPropertiesList::SortKey(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)\r
+{\r
+ return Sort(lParam1, lParam2, lParamSort, SORT_KEY);\r
+}\r
+\r
+void CPropertiesList::OnColumnclickPropertiesList(NMHDR* pNMHDR, LRESULT* pResult) \r
+{\r
+ NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;\r
+ // TODO: Add your control notification handler code here\r
+ if (m_nSelectedColumn == pNMListView->iSubItem) {\r
+ m_bSortAscending = !m_bSortAscending;\r
+ } else {\r
+ m_nSelectedColumn = pNMListView->iSubItem;\r
+ m_bSortAscending = TRUE;\r
+ }\r
+\r
+ for (int nItem = 0; nItem < m_cPropertiesList.GetItemCount(); ++nItem) {\r
+ m_cPropertiesList.SetItemData(nItem, nItem);\r
+ }\r
+\r
+ SortItem(pNMListView->iSubItem);\r
+\r
+ *pResult = 0;\r
+}\r
+\r
+void CPropertiesList::DisplayIndicator()\r
+{\r
+ CHeaderCtrl *pHeaderCtrl = m_cPropertiesList.GetHeaderCtrl();\r
+\r
+ for (int nItemCount = 0; nItemCount < pHeaderCtrl->GetItemCount(); ++nItemCount) {\r
+ HDITEM hditem;\r
+ pHeaderCtrl->GetItem(nItemCount, &hditem);\r
+\r
+ if (nItemCount == m_nSelectedColumn) {\r
+ hditem.mask = HDI_FORMAT | HDI_BITMAP;\r
+ hditem.fmt |= HDF_BITMAP | HDF_BITMAP_ON_RIGHT;\r
+ const int IDB_SORT = m_bSortAscending ? IDB_SORT_ASCENDING : IDB_SORT_DESCENDING;\r
+ hditem.hbm = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_SORT), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS);\r
+ pHeaderCtrl->SetItem(nItemCount, &hditem);\r
+ } else {\r
+ hditem.mask = HDI_FORMAT;\r
+ hditem.fmt = HDF_STRING;\r
+ hditem.hbm = NULL;\r
+ pHeaderCtrl->SetItem(nItemCount, &hditem);\r
+ }\r
+ }\r
+}\r
+\r
+void CPropertiesList::SortItem(int nColumn)\r
+{\r
+ switch (nColumn) {\r
+ case 0:\r
+ m_cPropertiesList.SortItems(CPropertiesList::SortCategory, (LPARAM) &m_cPropertiesList);\r
+ break;\r
+ case 1:\r
+ m_cPropertiesList.SortItems(CPropertiesList::SortCommand, (LPARAM) &m_cPropertiesList);\r
+ break;\r
+ case 2:\r
+ m_cPropertiesList.SortItems(CPropertiesList::SortKey, (LPARAM) &m_cPropertiesList);\r
+ break;\r
+ default:\r
+ m_cPropertiesList.SortItems(CPropertiesList::SortCategory, (LPARAM) &m_cPropertiesList);\r
+ break;\r
+ }\r
+\r
+ DisplayIndicator();\r
+}\r
+\r
+void CPropertiesList::InsertItem(LPCTSTR szCategory, LPCTSTR szCommandName, LPCTSTR szKey)\r
+{\r
+ int nItem = m_cPropertiesList.InsertItem(m_cPropertiesList.GetItemCount(), szCategory);\r
+ m_cPropertiesList.SetItemData(nItem, nItem);\r
+ m_cPropertiesList.SetItemText(nItem, 1, szCommandName);\r
+ m_cPropertiesList.SetItemText(nItem, 2, szKey);\r
+\r
+ m_nCategoryWidth = __max(m_nCategoryWidth, m_cPropertiesList.GetStringWidth(szCategory));\r
+ m_nCommandWidth = __max(m_nCommandWidth, m_cPropertiesList.GetStringWidth(szCommandName));\r
+ m_nKeyWidth = __max(m_nKeyWidth, m_cPropertiesList.GetStringWidth(szKey));\r
+}\r
+\r
+int CPropertiesList::Sort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort, SORT_TYPE sortType)\r
+{\r
+ CListCtrl *pListCtrl = (CListCtrl *) lParamSort;\r
+\r
+ CString szCategory1 = pListCtrl->GetItemText(lParam1, 0);\r
+ CString szCommand1 = pListCtrl->GetItemText(lParam1, 1);\r
+ CString szKey1 = pListCtrl->GetItemText(lParam1, 2);\r
+\r
+ CString szCategory2 = pListCtrl->GetItemText(lParam2, 0);\r
+ CString szCommand2 = pListCtrl->GetItemText(lParam2, 1);\r
+ CString szKey2 = pListCtrl->GetItemText(lParam2, 2);\r
+\r
+ int rc = 0;\r
+ switch (sortType) {\r
+ case SORT_CATEGORY:\r
+ rc = rc ? rc : _tcscmp(szCategory1, szCategory2);\r
+ // Do NOT write break; here.\r
+ case SORT_COMMAND:\r
+ rc = rc ? rc : _tcscmp(szCommand1, szCommand2);\r
+ // Do NOT write break; here.\r
+ case SORT_KEY:\r
+ if (!rc) {\r
+ rc = rc ? rc : _tcscmp(szKey1, szKey2);\r
+ if (szKey1.IsEmpty() && !szKey2.IsEmpty()) {\r
+ rc = 1;\r
+ } else if (!szKey1.IsEmpty() && szKey2.IsEmpty()) {\r
+ rc = -1;\r
+ }\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ return m_bSortAscending ? rc : rc * -1;\r
+}\r
--- /dev/null
+#if !defined(AFX_PROPERTIESLIST_H__0BC352B3_8869_46D9_873B_D65D705F1228__INCLUDED_)\r
+#define AFX_PROPERTIESLIST_H__0BC352B3_8869_46D9_873B_D65D705F1228__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+enum SORT_TYPE { SORT_CATEGORY, SORT_COMMAND, SORT_KEY };\r
+\r
+// PropertiesList.h : header file\r
+//\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CPropertiesList dialog\r
+\r
+class CPropertiesList : public CPropertyPage\r
+{\r
+ DECLARE_DYNCREATE(CPropertiesList)\r
+\r
+// Construction\r
+public:\r
+ void EnableControl();\r
+ void GetDialogData();\r
+ void SetDialogData(CString szApplicationName);\r
+ CPropertiesList();\r
+ ~CPropertiesList();\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(CPropertiesList)\r
+ enum { IDD = IDD_PROPERTIES_LIST };\r
+ CListCtrl m_cPropertiesList;\r
+ //}}AFX_DATA\r
+\r
+\r
+// Overrides\r
+ // ClassWizard generate virtual function overrides\r
+ //{{AFX_VIRTUAL(CPropertiesList)\r
+ public:\r
+ virtual BOOL OnSetActive();\r
+ virtual BOOL OnKillActive();\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ // Generated message map functions\r
+ //{{AFX_MSG(CPropertiesList)\r
+ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\r
+ virtual BOOL OnInitDialog();\r
+ afx_msg void OnColumnclickPropertiesList(NMHDR* pNMHDR, LRESULT* pResult);\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ int m_nKeyWidth;\r
+ int m_nCommandWidth;\r
+ int m_nCategoryWidth;\r
+ static int Sort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort, SORT_TYPE sortType);\r
+ void InsertItem(LPCTSTR szCategory, LPCTSTR szCommandName, LPCTSTR szKey);\r
+ void SortItem(int nColumn);\r
+ void DisplayIndicator();\r
+ static BOOL m_bSortAscending;\r
+ int m_nSelectedColumn;\r
+ static int CALLBACK SortKey(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);\r
+ static int CALLBACK SortCommand(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);\r
+ static int CALLBACK SortCategory(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);\r
+ CProperties* m_pProperties;\r
+ void UpdateDialogData(CString szApplicationName, BOOL bSaveAndValidate = TRUE);\r
+};\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_PROPERTIESLIST_H__0BC352B3_8869_46D9_873B_D65D705F1228__INCLUDED_)\r
--- /dev/null
+//\r
+// XKEYMACS.RC2 - resources Microsoft Visual C++ does not edit directly\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+ #error this file is not editable by Microsoft Visual C++\r
+#endif //APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Add manually edited resources here...\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
--- /dev/null
+//{{NO_DEPENDENCIES}}\r
+// Microsoft Developer Studio generated include file.\r
+// Used by xkeymacs.rc\r
+//\r
+#define IDS_DEFAULT 1\r
+#define IDS_DEFAULT_TITLE 2\r
+#define IDS_DIALOG 3\r
+#define IDS_DIALOG_TITLE 4\r
+#define IDS_KEYBOARD 5\r
+#define IDS_REG_ENTRY_USE_DIALOG_SETTING 10\r
+#define IDS_REGISTRY_KEY 11\r
+#define IDS_REG_SECTION_APPLICATION 12\r
+#define IDS_REG_ENTRY_APPLICATION 13\r
+#define IDS_REG_ENTRY_NONE 14\r
+#define IDS_REG_ENTRY_CONTROL 15\r
+#define IDS_REG_ENTRY_CONTROLX 16\r
+#define IDS_REG_ENTRY_META 17\r
+#define IDS_REG_SUB_KEY 18\r
+#define IDS_REGSUBKEY_DATA 18\r
+#define IDS_REG_ENTRY_APPLICATOIN_TITLE 19\r
+#define IDS_REGSUBKEY_AUTORUN 20\r
+#define IDS_APPLICATION_LIST_ITEM 21\r
+#define IDS_SEPARATE_CLASS_WINDOW 22\r
+#define IDS_SEPARATE_WINDOWTITLE 23\r
+#define IDS_REG_ENTRY_CONTROL_META 24\r
+#define IDS_REG_ENTRY_CONTROL_META_SHIFT 24\r
+#define IDS_REG_ENTRY_KILL_RING_MAX 25\r
+#define IDS_REG_ENTRY_CONTROL_SHIFT 26\r
+#define IDS_REG_ENTRY_META_SHIFT 27\r
+#define IDS_REG_ENTRY_DISABLE_XKEYMACS 28\r
+#define IDC_REG_ENTRY_IGNORE_META_CTRL 29\r
+#define IDC_REG_ENTRY_IGNORE_C_X 30\r
+#define IDS_ERR_SAVE_DATA 31\r
+#define IDS_ERR_WINDOWS_VERSION 32\r
+#define IDS_ERR_IMPORT 33\r
+#define IDS_ERR_EXPORT 34\r
+#define IDC_REG_ENTRY_ENABLE_CUA 35\r
+#define IDS_REG_SECTION_ORIGINAL 36\r
+#define IDS_REG_ORIGINAL_PREFIX 37\r
+#define IDS_REG_ENTRY_WINDOW_TEXT 38\r
+#define IDS_REG_ENTRY_WINDOW_TEXT_TYPE 39\r
+#define IDS_REG_ENTRY_326_COMPATIBLE 40\r
+#define IDS_PROCESS 41\r
+#define IDS_PROCESSID 42\r
+#define IDS_REGSUBKEY_PERF 43\r
+#define IDS_REGSUBKEY_COUNTERS 44\r
+#define IDS_UNKNOWN_TASK 45\r
+#define IDS_IME_FILE_NAME 46\r
+#define IDS_ERR_LOST_KEY 47\r
+#define IDS_FOR_LOGGED_ON_USER 48\r
+#define IDS_FOR_ANY_USER 49\r
+#define IDS_FOR 50\r
+#define IDS_EXPLORER 51\r
+#define IDS_PROJECT 52\r
+#define IDS_EXCEL 53\r
+#define IDS_MSDN 54\r
+#define IDS_B2 55\r
+#define IDS_MSIMN 56\r
+#define IDS_UNKNOWN_APPLICATION 61\r
+#define IDS_PROGRAM_MANAGER 62\r
+#define IDS_EXTENSION_EXECUTABLE 63\r
+#define IDS_BECKY 64\r
+#define IDS_OUTLOOK_EXPRESS 65\r
+#define IDS_VISUAL_SOURCESAFE_EXPLORER 66\r
+#define IDS_DISABLE 71\r
+#define IDS_ENABLE 72\r
+#define IDS_IMPORT 73\r
+#define IDS_EXPORT 74\r
+#define IDS_TIP_CX 75\r
+#define IDS_TIP_CTRL 76\r
+#define IDS_TIP_SHIFT 77\r
+#define IDS_TIP_ALT 78\r
+#define IDS_TIP_META 79\r
+#define IDS_REGISTRATION_FILTER 80\r
+#define IDS_REGSUBKEY_KEYBOARD_LAYOUT 81\r
+#define IDS_SCANCODE_MAP 82\r
+#define IDS_REGSUBKEY_KEY_REMAP 83\r
+#define IDS_0 84\r
+#define IDS_RESTART_OR_NOT 85\r
+#define IDS_RESTART_CAPTION 86\r
+#define IDS_REGSUBKEY_FILE_COMPLETION 87\r
+#define IDS_COMPLETION_CHAR 88\r
+#define IDS_REGSUBKEY_KEYBOARD_LAYOUT_ANY_USER 89\r
+#define IDS_URL 91\r
+#define IDS_WINDOW_TEXT_IGNORE 91\r
+#define IDS_WINDOW_TEXT_MATCH 92\r
+#define IDS_WINDOW_TEXT_MATCH_FORWARD 93\r
+#define IDS_WINDOW_TEXT_MATCH_BACKWARD 94\r
+#define IDS_WINDOW_TEXT_MATCH_FULL 95\r
+#define IDS_TIP_MX 96\r
+#define IDD_ABOUTBOX 100\r
+#define IDS_VER_SUB_BLOCK 101\r
+#define IDR_MAINFRAME 128\r
+#define IDR_XKEYMATYPE 129\r
+#define IDR_RIGHT_MENU 130\r
+#define IDR_STOP 130\r
+#define IDR_MAIN_DISABLE_WOCQ 130\r
+#define IDD_XKEYMACS 131\r
+#define IDD_OPTIONS 132\r
+#define IDI_CTRL_ON 133\r
+#define IDI_CTRL_OFF 134\r
+#define IDI_CX_ON 135\r
+#define IDI_CX_OFF 136\r
+#define IDC_HAND_CURSOR 137\r
+#define IDI_SHIFT_ON 138\r
+#define IDI_SHIFT_OFF 139\r
+#define IDI_ALT_ON 140\r
+#define IDI_ALT_OFF 141\r
+#define IDD_CUSTOMIZE 142\r
+#define IDI_META_ON 143\r
+#define IDI_META_OFF 144\r
+#define IDR_MAIN_DISABLE 145\r
+#define IDD_104KEYBOARD 145\r
+#define IDD_109KEYBOARD 146\r
+#define IDC_DRAG_CURSOR 146\r
+#define IDR_MAIN_DISABLE_TMP 147\r
+#define IDD_PROPERTIES 148\r
+#define IDI_MX_ON 148\r
+#define IDD_PROPERTIES_BASIC 149\r
+#define IDI_MX_OFF 149\r
+#define IDD_PROPERTIES_ADVANCED 150\r
+#define IDB_SORT_ASCENDING 150\r
+#define IDD_PROPERTIES_LIST 151\r
+#define IDB_SORT_DESCENDING 151\r
+#define IDD_MACRO 152\r
+#define IDC_DISABLE_CURSOR 154\r
+#define IDC_DISABLE_WOCQ_CURSOR 155\r
+#define IDC_DISABLE_TMP_CURSOR 156\r
+#define IDS_REG_ENTRY_ICON_META 255\r
+#define IDS_REG_ENTRY_NONE_FOO 256\r
+#define IDS_REG_ENTRY_NONE_SHIFT_FOO 257\r
+#define IDS_REG_ENTRY_CONTROL_FOO 258\r
+#define IDS_REG_ENTRY_CONTROL_SHIFT_FOO 259\r
+#define IDS_REG_ENTRY_CONTROLX_FOO 260\r
+#define IDS_REG_ENTRY_CONTROLX_SHIFT_FOO 261\r
+#define IDS_REG_ENTRY_CONTROLX_CONTROL_FOO 262\r
+#define IDS_REG_ENTRY_CONTROLX_CONTROL_SHIFT_FOO 263\r
+#define IDS_REG_ENTRY_META_FOO 264\r
+#define IDS_REG_ENTRY_META_SHIFT_FOO 265\r
+#define IDS_DISABLED 266\r
+#define IDS_REG_ENTRY_CTRL 267\r
+#define IDS_REG_ENTRY_CX 268\r
+#define IDS_REG_ENTRY_MAIN 269\r
+#define IDS_REG_ENTRY_SHIFT 270\r
+#define IDS_REG_ENTRY_ALT 271\r
+#define IDS_REG_ENTRY_ACCELERATE 272\r
+#define IDS_REGSUBKEY_KEYBOARD 273\r
+#define IDS_KEYBOARD_SPEED 274\r
+#define IDS_REG_ENTRY_CHANGE_CURSOR 275\r
+#define IDS_REG_ENTRY_AT_IBEAM_CURSOR_ONLY 276\r
+#define IDS_REG_ENTRY_MX 277\r
+#define IDS_FILES 401\r
+#define IDS_SEARCH 402\r
+#define IDS_WINDOW 403\r
+#define IDS_RECOVERY 404\r
+#define IDS_MOTION 405\r
+#define IDS_IME 406\r
+#define IDS_KILL 407\r
+#define IDS_OTHER 408\r
+#define IDS_ORIGINAL 409\r
+#define IDS_CATEGORY 411\r
+#define IDS_COMMAND 412\r
+#define IDS_KEY 413\r
+#define IDS_MODIFIER 414\r
+#define IDS_FSET 451\r
+#define IDS_README 461\r
+#define IDS_SET_MARK_COMMAND_D 500\r
+#define IDS_BEGINNING_OF_LINE_D 501\r
+#define IDS_BACKWARD_CHAR_D 502\r
+#define IDS_DELETE_CHAR_D 503\r
+#define IDS_END_OF_LINE_D 504\r
+#define IDS_FORWARD_CHAR_D 505\r
+#define IDS_KEYBOARD_QUIT_D 506\r
+#define IDS_HELP_COMMAND_D 507\r
+#define IDS_KILL_LINE_D 508\r
+#define IDS_RECENTER_D 509\r
+#define IDS_NEWLINE_D 510\r
+#define IDS_NEXT_LINE_D 511\r
+#define IDS_OPEN_LINE_D 512\r
+#define IDS_PREVIOUS_LINE_D 513\r
+#define IDS_QUOTED_INSERT_D 514\r
+#define IDS_ISEARCH_BACKWARD_D 515\r
+#define IDS_ISEARCH_FORWARD_D 516\r
+#define IDS_TRANSPOSE_CHARS_D 517\r
+#define IDS_UNIVERSAL_ARGUMENT_D 518\r
+#define IDS_SCROLL_UP_D 519\r
+#define IDS_KILL_REGION_D 520\r
+#define IDS_CONTROL_X_PREFIX_D 521\r
+#define IDS_YANK_D 522\r
+#define IDS_ICONIFY_OR_DEICONIFY_FRAME_D 523\r
+#define IDS_QUAIL_MODE_D 524\r
+#define IDS_UNDO_D 525\r
+#define IDS_TOGGLE_WIN32IME_MODE_D 526\r
+#define IDS_BACKWARD_WORD_D 527\r
+#define IDS_FORWARD_WORD_D 528\r
+#define IDS_DIGIT_ARGUMENT_D 529\r
+#define IDS_NEGATIVE_ARGUMENT_D 530\r
+#define IDS_SAVE_BUFFERS_KILL_EMACS_D 531\r
+#define IDS_FIND_FILE_D 532\r
+#define IDS_MARK_PAGE_D 533\r
+#define IDS_SAVE_BUFFER_D 534\r
+#define IDS_WRITE_FILE_D 535\r
+#define IDS_SHELL_COMMAND_D 536\r
+#define IDS_BEGINNING_OF_BUFFER_D 537\r
+#define IDS_END_OF_BUFFER_D 538\r
+#define IDS_SCROLL_DOWN_D 539\r
+#define IDS_KILL_RING_SAVE_D 540\r
+#define IDS_BACKWARD_DELETE_CHAR_D 541\r
+#define IDS_TAB_D 542\r
+#define IDS_META_PREFIX_D 543\r
+#define IDS_META_D 544\r
+#define IDS_DIGIT_ARGUMENT0_D 545\r
+#define IDS_DIGIT_ARGUMENT1_D 546\r
+#define IDS_DIGIT_ARGUMENT2_D 547\r
+#define IDS_DIGIT_ARGUMENT3_D 548\r
+#define IDS_DIGIT_ARGUMENT4_D 549\r
+#define IDS_DIGIT_ARGUMENT5_D 550\r
+#define IDS_DIGIT_ARGUMENT6_D 551\r
+#define IDS_DIGIT_ARGUMENT7_D 552\r
+#define IDS_DIGIT_ARGUMENT8_D 553\r
+#define IDS_DIGIT_ARGUMENT9_D 554\r
+#define IDS_META_PREFIX_AND_ORIGINAL_D 555\r
+#define IDS_KILL_BUFFER_D 556\r
+#define IDS_KILL_WORD_D 557\r
+#define IDS_MARK_WHOLE_BUFFER_D 558\r
+#define IDS_DELETE_BACKWARD_CHAR_D 559\r
+#define IDS_QUERY_REPLACE_D 560\r
+#define IDS_QUERY_REPLACE_REGEXP_D 561\r
+#define IDS_YANK_POP_D 562\r
+#define IDS_CLOSE_INPUT_METHOD_D 563\r
+#define IDS_ENABLE_OR_DISABLE_XKEYMACS_D 564\r
+#define IDS_ENTER_D 565\r
+#define IDS_IGNORE_D 566\r
+#define IDS_OPEN_INPUT_METHOD_D 567\r
+#define IDS_SELECT_ALL_D 568\r
+#define IDS_CALL_LAST_KBD_MACRO_D 569\r
+#define IDS_END_KBD_MACRO_D 570\r
+#define IDS_START_KBD_MACRO_D 571\r
+#define IDS_SWITCH_BETWEEN_INPUT_LOCALES_D 572\r
+#define IDS_SWITCH_TO_BUFFER_D 573\r
+#define IDS_CONTROL_D 574\r
+#define IDS_CONTROL_PREFIX_D 575\r
+#define IDS_ESCAPE_D 576\r
+#define IDS_TILDE_D 577\r
+#define IDS_BACK_QUOTE_D 578\r
+#define IDS_RESTORE_D 579\r
+#define IDS_MOVE_D 580\r
+#define IDS_SIZE_D 581\r
+#define IDS_MINIMIZE_D 582\r
+#define IDS_MAXIMIZE_D 583\r
+#define IDS_MAXIMIZE_VERTICALLY_D 584\r
+#define IDS_MAXIMIZE_HORIZONTALLY_D 585\r
+#define IDS_PASS_THROUGH_D 586\r
+#define IDS_REDO_D 587\r
+#define IDS_TEMPORARILY_DISABLE_XKEYMACS_D 588\r
+#define IDS_COPY_D 589\r
+#define IDS_PASTE_D 590\r
+#define IDS_CUT_D 591\r
+#define IDS_NEW_D 592\r
+#define IDS_PRINT_D 593\r
+#define IDS_FIND_D 594\r
+#define IDS_FIND_NEXT_D 595\r
+#define IDS_TRANSPOSE_LINES_D 596\r
+#define IDS_KILL_LINE_FOR_ALL_FORMAT_D 597\r
+#define IDS_BACKWARD_KILL_WORD_D 598\r
+#define IDS_ENABLE_XKEYMACS_D 599\r
+#define IDS_DISABLE_XKEYMACS_D 600\r
+#define IDS_CAPS_LOCK_D 601\r
+#define IDS_COMPLETE_CLOSE_INPUT_METHOD_D 602\r
+#define IDS_COMPLETE_TOGGLE_INPUT_METHOD_D 603\r
+#define IDS_UNDERSCORE_D 604\r
+#define IDS_ROLL_UP_UNROLL_D 605\r
+#define IDS_RETOP_D 606\r
+#define IDS_OSMODIFIER_SHIFT_D 607\r
+#define IDS_OSMODIFIER_SHIFT_REPEAT_D 608\r
+#define IDS_OSMODIFIER_CTRL_D 609\r
+#define IDS_OSMODIFIER_CTRL_REPEAT_D 610\r
+#define IDS_OSMODIFIER_ALT_D 611\r
+#define IDS_OSMODIFIER_ALT_REPEAT_D 612\r
+#define IDS_CYCLE_ITEMS_D 613\r
+#define IDS_CYCLE_ITEMS_INVERSELY_D 614\r
+#define IDS_TRANSPOSE_WORDS_D 615\r
+#define IDS_FILL_PARAGRAPH_D 616\r
+#define IDS_DOWNCASE_WORD_D 617\r
+#define IDS_UPCASE_WORD_D 618\r
+#define IDS_CAPITALIZE_WORD_D 619\r
+#define IDS_EXECUTE_EXTENDED_COMMAND_D 620\r
+#define IDS_ESC 701\r
+#define IDS_1 702\r
+#define IDS_2 703\r
+#define IDS_3 704\r
+#define IDS_4 705\r
+#define IDS_5 706\r
+#define IDS_6 707\r
+#define IDS_7 708\r
+#define IDS_8 709\r
+#define IDS_9 710\r
+#define IDS_0_ 711\r
+#define IDS_MINUS 712\r
+#define IDS_EQUAL 713\r
+#define IDS_BACKSPACE 714\r
+#define IDS_TAB 715\r
+#define IDS_Q 716\r
+#define IDS_W 717\r
+#define IDS_E 718\r
+#define IDS_R 719\r
+#define IDS_T 720\r
+#define IDS_Y 721\r
+#define IDS_U 722\r
+#define IDS_I 723\r
+#define IDS_O 724\r
+#define IDS_P 725\r
+#define IDS_SQUARE_BRA 726\r
+#define IDS_SQUARE_CKET 727\r
+#define IDS_ENTER 728\r
+#define IDS_NUMPADENTER 729\r
+#define IDS_LEFT_CTRL 730\r
+#define IDS_RIGHT_CTRL 731\r
+#define IDS_PAUSE 732\r
+#define IDS_A 733\r
+#define IDS_S 734\r
+#define IDS_D 735\r
+#define IDS_F 736\r
+#define IDS_G 737\r
+#define IDS_H 738\r
+#define IDS_J 739\r
+#define IDS_K 740\r
+#define IDS_L 741\r
+#define IDS_SEMICOLON 742\r
+#define IDS_QUOTE 743\r
+#define IDS_BACK_QUOTE 744\r
+#define IDS_LEFT_SHIFT 745\r
+#define IDS_BACKSLASH 746\r
+#define IDS_Z 747\r
+#define IDS_X 748\r
+#define IDS_C 749\r
+#define IDS_V 750\r
+#define IDS_B 751\r
+#define IDS_N 752\r
+#define IDS_M 753\r
+#define IDS_COMMA 754\r
+#define IDS_PERIOD 755\r
+#define IDS_SLASH 756\r
+#define IDS_DIVIDE 757\r
+#define IDS_RIGHT_SHIFT 758\r
+#define IDS_MULTIPLY 759\r
+#define IDS_PRINT_SCREEN 760\r
+#define IDS_LEFT_ALT 761\r
+#define IDS_RIGHT_ALT 762\r
+#define IDS_SPACE 763\r
+#define IDS_CAPS_LOCK 764\r
+#define IDS_F1 765\r
+#define IDS_F2 766\r
+#define IDS_F3 767\r
+#define IDS_F4 768\r
+#define IDS_F5 769\r
+#define IDS_F6 770\r
+#define IDS_F7 771\r
+#define IDS_F8 772\r
+#define IDS_F9 773\r
+#define IDS_F10 774\r
+#define IDS_NUM_LOCK 775\r
+#define IDS_SCROLL_LOCK 776\r
+#define IDS_NUMPAD7 777\r
+#define IDS_HOME 778\r
+#define IDS_NUMPAD8 779\r
+#define IDS_UP 780\r
+#define IDS_NUMPAD9 781\r
+#define IDS_PAGE_UP 782\r
+#define IDS_SUBTRACT 783\r
+#define IDS_NUMPAD4 784\r
+#define IDS_LEFT 785\r
+#define IDS_NUMPAD5 786\r
+#define IDS_NUMPAD6 787\r
+#define IDS_RIGHT 788\r
+#define IDS_ADD 789\r
+#define IDS_NUMPAD1 790\r
+#define IDS_END 791\r
+#define IDS_NUMPAD2 792\r
+#define IDS_DOWN 793\r
+#define IDS_NUMPAD3 794\r
+#define IDS_PAGE_DOWN 795\r
+#define IDS_NUMPAD0 796\r
+#define IDS_INSERT 797\r
+#define IDS_NUMPADDELETE 798\r
+#define IDS_DELETE 799\r
+#define IDS_F11 800\r
+#define IDS_F12 801\r
+#define IDS_LEFT_WINDOWS 802\r
+#define IDS_RIGHT_WINDOWS 803\r
+#define IDS_APPLICATION 804\r
+#define IDS_KANA 805\r
+#define IDS_BACKSLASH2 806\r
+#define IDS_CONVERT 807\r
+#define IDS_NONCONVERT 808\r
+#define IDS_BACKSLASH1 809\r
+#define IDS_CARET 810\r
+#define IDS_AT_MARK 811\r
+#define IDS_COLON 812\r
+#define IDS_HANKAKU 813\r
+#define IDS_ACPI_POWER 814\r
+#define IDS_ACPI_SLEEP 815\r
+#define IDS_ACPI_WAKE 816\r
+#define IDS_CONTROL_X_PREFIX_T 900\r
+#define IDS_CONTROL_T 901\r
+#define IDS_CONTROL_PREFIX_T 902\r
+#define IDS_CLOSE_INPUT_METHOD_T 903\r
+#define IDS_COPY_T 904\r
+#define IDS_CUT_T 905\r
+#define IDS_ENABLE_OR_DISABLE_XKEYMACS_T 906\r
+#define IDS_ENTER_T 907\r
+#define IDS_NEWLINE_T 907\r
+#define IDS_ESCAPE_T 908\r
+#define IDS_FIND_T 909\r
+#define IDS_FIND_NEXT_T 910\r
+#define IDS_IGNORE_T 911\r
+#define IDS_KILL_LINE_FOR_ALL_FORMAT_T 912\r
+#define IDS_MAXIMIZE_T 913\r
+#define IDS_MAXIMIZE_HORIZONTALLY_T 914\r
+#define IDS_MAXIMIZE_VERTICALLY_T 915\r
+#define IDS_META_PREFIX_T 916\r
+#define IDS_META_T 917\r
+#define IDS_META_PREFIX_AND_ORIGINAL_T 918\r
+#define IDS_MINIMIZE_T 919\r
+#define IDS_MOVE_T 920\r
+#define IDS_NEW_T 921\r
+#define IDS_OPEN_INPUT_METHOD_T 922\r
+#define IDS_PASS_THROUGH_T 923\r
+#define IDS_PASTE_T 924\r
+#define IDS_PRINT_T 925\r
+#define IDS_REDO_T 926\r
+#define IDS_RESTORE_T 927\r
+#define IDS_SELECT_ALL_T 928\r
+#define IDS_SIZE_T 929\r
+#define IDS_SWITCH_BETWEEN_INPUT_LOCALES_T 930\r
+#define IDS_TEMPORARILY_DISABLE_XKEYMACS_T 931\r
+#define IDS_TILDE_T 932\r
+#define IDS_BACK_QUOTE_T 933\r
+#define IDS_BACKWARD_CHAR_T 934\r
+#define IDS_BACKWARD_WORD_T 935\r
+#define IDS_BEGINNING_OF_BUFFER_T 936\r
+#define IDS_BEGINNING_OF_LINE_T 937\r
+#define IDS_CALL_LAST_KBD_MACRO_T 938\r
+#define IDS_DELETE_BACKWARD_CHAR_T 939\r
+#define IDS_DELETE_CHAR_T 940\r
+#define IDS_END_KBD_MACRO_T 941\r
+#define IDS_END_OF_BUFFER_T 942\r
+#define IDS_END_OF_LINE_T 943\r
+#define IDS_FIND_FILE_T 944\r
+#define IDS_FORWARD_CHAR_T 945\r
+#define IDS_FORWARD_WORD_T 946\r
+#define IDS_ICONIFY_OR_DEICONIFY_FRAME_T 947\r
+#define IDS_ISEARCH_BACKWARD_T 948\r
+#define IDS_ISEARCH_FORWARD_T 949\r
+#define IDS_KEYBOARD_QUIT_T 950\r
+#define IDS_KILL_BUFFER_T 951\r
+#define IDS_KILL_LINE_T 952\r
+#define IDS_KILL_REGION_T 953\r
+#define IDS_KILL_RING_SAVE_T 954\r
+#define IDS_KILL_WORD_T 955\r
+#define IDS_MARK_PAGE_T 956\r
+#define IDS_MARK_WHOLE_BUFFER_T 957\r
+#define IDS_NEXT_LINE_T 958\r
+#define IDS_DIGIT_ARGUMENT0_T 959\r
+#define IDS_DIGIT_ARGUMENT1_T 960\r
+#define IDS_DIGIT_ARGUMENT2_T 961\r
+#define IDS_DIGIT_ARGUMENT3_T 962\r
+#define IDS_DIGIT_ARGUMENT4_T 963\r
+#define IDS_DIGIT_ARGUMENT5_T 964\r
+#define IDS_DIGIT_ARGUMENT6_T 965\r
+#define IDS_DIGIT_ARGUMENT7_T 966\r
+#define IDS_DIGIT_ARGUMENT8_T 967\r
+#define IDS_DIGIT_ARGUMENT9_T 968\r
+#define IDS_NEGATIVE_ARGUMENT_T 969\r
+#define IDS_OPEN_LINE_T 970\r
+#define IDS_PREVIOUS_LINE_T 971\r
+#define IDS_QUERY_REPLACE_T 972\r
+#define IDS_QUERY_REPLACE_REGEXP_T 973\r
+#define IDS_RECENTER_T 974\r
+#define IDS_SAVE_BUFFER_T 975\r
+#define IDS_SAVE_BUFFERS_KILL_EMACS_T 976\r
+#define IDS_SCROLL_DOWN_T 977\r
+#define IDS_SCROLL_UP_T 978\r
+#define IDS_SET_MARK_COMMAND_T 979\r
+#define IDS_SHELL_COMMAND_T 980\r
+#define IDS_START_KBD_MACRO_T 981\r
+#define IDS_SWITCH_TO_BUFFER_T 982\r
+#define IDS_TAB_T 983\r
+#define IDS_TOGGLE_WIN32IME_MODE_T 984\r
+#define IDS_TRANSPOSE_CHARS_T 985\r
+#define IDS_TRANSPOSE_LINES_T 986\r
+#define IDS_UNDO_T 987\r
+#define IDS_UNIVERSAL_ARGUMENT_T 988\r
+#define IDS_WRITE_FILE_T 989\r
+#define IDS_YANK_T 990\r
+#define IDS_YANK_POP_T 991\r
+#define IDS_BACKWARD_KILL_WORD_T 992\r
+#define IDS_ENABLE_XKEYMACS_T 993\r
+#define IDS_DISABLE_XKEYMACS_T 994\r
+#define IDS_CAPS_LOCK_T 995\r
+#define IDS_COMPLETE_CLOSE_INPUT_METHOD_T 996\r
+#define IDS_COMPLETE_TOGGLE_INPUT_METHOD_T 997\r
+#define IDS_UNDERSCORE_T 998\r
+#define IDS_ROLL_UP_UNROLL_T 999\r
+#define IDC_APPLY 1000\r
+#define IDS_RETOP_T 1000\r
+#define IDC_LOAD_DEFAULT 1001\r
+#define IDS_OSMODIFIER_SHIFT_T 1001\r
+#define IDC_SELECT_ALL 1002\r
+#define IDS_OSMODIFIER_SHIFT_REPEAT_T 1002\r
+#define IDC_CLEAR_ALL 1003\r
+#define IDS_OSMODIFIER_CTRL_T 1003\r
+#define IDC_APPLICATION 1004\r
+#define IDS_OSMODIFIER_CTRL_REPEAT_T 1004\r
+#define IDC_CP 1005\r
+#define IDC_APPLICATION_ 1005\r
+#define IDS_OSMODIFIER_ALT_T 1005\r
+#define IDC_CN 1006\r
+#define IDS_OSMODIFIER_ALT_REPEAT_T 1006\r
+#define IDC_CF 1007\r
+#define IDS_CYCLE_ITEMS_T 1007\r
+#define IDC_CB 1008\r
+#define IDS_CYCLE_ITEMS_INVERSELY_T 1008\r
+#define IDC_CA 1009\r
+#define IDS_TRANSPOSE_WORDS_T 1009\r
+#define IDC_CE 1010\r
+#define IDS_FILL_PARAGRAPH_T 1010\r
+#define IDC_CV 1011\r
+#define IDS_DOWNCASE_WORD_T 1011\r
+#define IDC_MV 1012\r
+#define IDS_UPCASE_WORD_T 1012\r
+#define IDC_CD 1013\r
+#define IDS_CAPITALIZE_WORD_T 1013\r
+#define IDC_CH 1014\r
+#define IDS_EXECUTE_EXTENDED_COMMAND_T 1014\r
+#define IDC_CW 1015\r
+#define IDC_MW 1016\r
+#define IDC_CY 1017\r
+#define IDC_CT 1018\r
+#define IDC_CK 1019\r
+#define IDC_CSPACE 1020\r
+#define IDC_CI 1021\r
+#define IDC_CM 1022\r
+#define IDC_CG 1023\r
+#define IDC_CDIGIT 1024\r
+#define IDC_CSLASH 1025\r
+#define IDC_CS 1026\r
+#define IDC_CXCJ 1027\r
+#define IDC_CXCC 1028\r
+#define IDC_CXCF 1029\r
+#define IDC_CXCS 1030\r
+#define IDC_CXCW 1031\r
+#define IDC_CXU 1032\r
+#define IDC_CZ 1033\r
+#define IDC_USE_DEFAULT 1034\r
+#define IDC_MT 1034\r
+#define IDC_CO 1035\r
+#define IDC_CBACKSLASH 1036\r
+#define IDC_CBACKSLASH_106 1038\r
+#define IDC_AUTO_RUN 1039\r
+#define IDC_CL 1040\r
+#define IDC_CR 1042\r
+#define IDC_MS1 1043\r
+#define IDC_SQUARE_BRA 1046\r
+#define IDC_ESCAPE 1047\r
+#define IDC_SQUARE_BRA_ 1047\r
+#define IDC_MSPERIOD 1048\r
+#define IDC_MSCOMMA 1049\r
+#define IDC_CXCP 1052\r
+#define IDC_MB 1053\r
+#define IDC_MF 1054\r
+#define IDC_REMAP_CAPSLOCK_LEFTCTRL 1058\r
+#define IDC_REMAP_LEFTCTRL_CAPSLOCK 1059\r
+#define IDC_SWAP_ESC_BACKQUOTE 1060\r
+#define IDC_USAGE 1061\r
+#define IDC_FILE_COMPLETION 1063\r
+#define IDC_VERSION_INFORMATION 1064\r
+#define IDC_LEFT_ALT 1065\r
+#define IDC_RIGHT_ALT 1066\r
+#define IDC_SPACE 1067\r
+#define IDC_LEFT_ALT_ 1068\r
+#define IDC_ALT 1069\r
+#define IDC_SPACE_ 1069\r
+#define IDC_RIGHT_ALT_ 1070\r
+#define IDC_URL 1071\r
+#define IDC_CQ 1073\r
+#define IDC_C_X_ 1075\r
+#define IDC_CTRL 1076\r
+#define IDC_SHIFT 1077\r
+#define IDC_M_X 1078\r
+#define IDC_CU 1081\r
+#define IDC_MS5 1085\r
+#define IDC_CMS5 1086\r
+#define IDC_MY 1088\r
+#define IDC_EDIT1 1091\r
+#define IDC_KILL_RING_MAX 1091\r
+#define IDC_NEW_KEY 1091\r
+#define IDC_MACRO_NAME 1091\r
+#define IDC_REMAP_LWINDOWS_LALT 1092\r
+#define IDC_REMAP_LEFTWINDOWS_LEFTALT 1092\r
+#define IDC_REMAP_LALT_LWINDOWS 1093\r
+#define IDC_REMAP_LEFTALT_LEFTWINDOWS 1093\r
+#define IDC_REMAP_RWINDOWS_RALT 1094\r
+#define IDC_REMAP_RIGHTWINDOWS_RIGHTALT 1094\r
+#define IDC_REMAP_RALT_RWINDOWS 1095\r
+#define IDC_REMAP_RIGHTALT_RIGHTWINDOWS 1095\r
+#define IDC_REMAP_NONCONVERT_LALT 1096\r
+#define IDC_REMAP_NONCONVERT_LEFTALT 1096\r
+#define IDC_REMAP_CONVERT_LALT 1097\r
+#define IDC_REMAP_CONVERT_LEFTALT 1097\r
+#define IDC_RCTRL_LALT 1098\r
+#define IDC_REMAP_RIGHTCTRL_LEFTALT 1098\r
+#define IDC_CENTER 1099\r
+#define IDC_C_ 1100\r
+#define IDC_CO2 1102\r
+#define IDC_MI 1106\r
+#define IDC_CATEGORY 1108\r
+#define IDC_DESCRIPTION 1111\r
+#define IDC_COMMANDS 1113\r
+#define IDC_CURRENT_KEYS 1114\r
+#define IDC_ASSIGN 1115\r
+#define IDC_REMOVE 1116\r
+#define IDC_RESET_ALL 1117\r
+#define IDC_SETTING_DEFAULT 1118\r
+#define IDC_SETTING_SPECIFIC 1119\r
+#define IDC_SETTING_DISABLE 1120\r
+#define IDC_FILES 1128\r
+#define IDC_SEARCH 1129\r
+#define IDC_WINDOW 1130\r
+#define IDC_RECOVERY 1131\r
+#define IDC_MOTION 1132\r
+#define IDC_IME 1133\r
+#define IDC_KILL 1134\r
+#define IDC_OTHER 1135\r
+#define IDC_CURRENTLY_ASSIGNED 1136\r
+#define IDC_M_ 1137\r
+#define IDC_KANA_ 1138\r
+#define IDC_CXK 1139\r
+#define IDC_CONVERT_ 1139\r
+#define IDC_MD 1141\r
+#define IDC_CXH 1143\r
+#define IDC_USE_DIALOG_SETTING 1148\r
+#define IDC_CHECK1 1149\r
+#define IDC_CXS9 1149\r
+#define IDC_C_X 1149\r
+#define IDC_EXTENDED_KEY 1149\r
+#define IDC_CHECK2 1150\r
+#define IDC_CXS0 1150\r
+#define IDC_REPEATED_KEY 1150\r
+#define IDC_ENABLE_CUA 1150\r
+#define IDC_CXE 1151\r
+#define IDC_CXB 1152\r
+#define IDC_BACK_QUOTE 1154\r
+#define IDC_1 1155\r
+#define IDC_2 1156\r
+#define IDC_3 1157\r
+#define IDC_4 1158\r
+#define IDC_5 1159\r
+#define IDC_6 1160\r
+#define IDC_7 1161\r
+#define IDC_8 1162\r
+#define IDC_9 1163\r
+#define IDC_0 1164\r
+#define IDC_MINUS 1165\r
+#define IDC_EQUAL 1166\r
+#define IDC_BACKSPACE 1167\r
+#define IDC_TAB 1168\r
+#define IDC_LEFT_CTRL 1169\r
+#define IDC_ESC 1170\r
+#define IDC_CAPS_LOCK 1171\r
+#define IDC_F1 1172\r
+#define IDC_F2 1173\r
+#define IDC_LEFT_SHIFT 1174\r
+#define IDC_F3 1175\r
+#define IDC_Q 1176\r
+#define IDC_W 1177\r
+#define IDC_E 1178\r
+#define IDC_R 1179\r
+#define IDC_T 1180\r
+#define IDC_Y 1181\r
+#define IDC_U 1182\r
+#define IDC_I 1183\r
+#define IDC_O 1184\r
+#define IDC_P 1185\r
+#define IDC_CAPS_LOCK_ 1186\r
+#define IDC_SQUARE_CKET 1187\r
+#define IDC_BACKSLASH 1188\r
+#define IDC_A 1189\r
+#define IDC_S 1190\r
+#define IDC_D 1191\r
+#define IDC_F 1192\r
+#define IDC_G 1193\r
+#define IDC_H 1194\r
+#define IDC_J 1195\r
+#define IDC_K 1196\r
+#define IDC_L 1197\r
+#define IDC_SEMICOLON 1198\r
+#define IDC_QUOTE 1199\r
+#define IDC_ENTER 1200\r
+#define IDC_Z 1201\r
+#define IDC_X 1202\r
+#define IDC_C 1203\r
+#define IDC_V 1204\r
+#define IDC_B 1205\r
+#define IDC_N 1206\r
+#define IDC_M 1207\r
+#define IDC_COMMA 1208\r
+#define IDC_PERIOD 1209\r
+#define IDC_SLASH 1210\r
+#define IDC_RIGHT_SHIFT 1211\r
+#define IDC_RIGHT_CTRL 1212\r
+#define IDC_LEFT_WINDOWS 1213\r
+#define IDC_F4 1214\r
+#define IDC_F5 1215\r
+#define IDC_RIGHT_WINDOWS 1216\r
+#define IDC_F6 1217\r
+#define IDC_F7 1218\r
+#define IDC_F8 1219\r
+#define IDC_F9 1220\r
+#define IDC_F10 1221\r
+#define IDC_F11 1222\r
+#define IDC_F12 1223\r
+#define IDC_INSERT 1224\r
+#define IDC_HOME 1225\r
+#define IDC_PAGE_UP 1226\r
+#define IDC_DELETE 1227\r
+#define IDC_END 1228\r
+#define IDC_PAGE_DOWN 1229\r
+#define IDC_UP 1230\r
+#define IDC_LEFT 1231\r
+#define IDC_DOWN 1232\r
+#define IDC_RIGHT 1233\r
+#define IDC_PRINT_SCREEN 1234\r
+#define IDC_SCROLL_LOCK 1235\r
+#define IDC_PAUSE 1236\r
+#define IDC_NUM_LOCK 1237\r
+#define IDC_DIVIDE 1238\r
+#define IDC_MULTIPLY 1239\r
+#define IDC_SUBTRACT 1240\r
+#define IDC_NUMPAD7 1241\r
+#define IDC_NUMPAD8 1242\r
+#define IDC_NUMPAD9 1243\r
+#define IDC_NUMPAD4 1244\r
+#define IDC_NUMPAD5 1245\r
+#define IDC_NUMPAD6 1246\r
+#define IDC_NUMPAD1 1247\r
+#define IDC_NUMPAD2 1248\r
+#define IDC_NUMPAD3 1249\r
+#define IDC_NUMPAD0 1250\r
+#define IDC_ADD 1251\r
+#define IDC_NUMPADDELETE 1252\r
+#define IDC_NUMPADENTER 1253\r
+#define IDC_ESC_ 1254\r
+#define IDC_F1_ 1255\r
+#define IDC_F2_ 1256\r
+#define IDC_F3_ 1257\r
+#define IDC_F4_ 1258\r
+#define IDC_F5_ 1259\r
+#define IDC_F6_ 1260\r
+#define IDC_F7_ 1261\r
+#define IDC_F8_ 1262\r
+#define IDC_F9_ 1263\r
+#define IDC_F10_ 1264\r
+#define IDC_F11_ 1265\r
+#define IDC_F12_ 1266\r
+#define IDC_PRINT_SCREEN_ 1267\r
+#define IDC_SCROLL_LOCK_ 1268\r
+#define IDC_PAUSE_ 1269\r
+#define IDC_BACK_QUOTE_ 1270\r
+#define IDC_1_ 1271\r
+#define IDC_2_ 1272\r
+#define IDC_3_ 1273\r
+#define IDC_4_ 1274\r
+#define IDC_5_ 1275\r
+#define IDC_6_ 1276\r
+#define IDC_7_ 1277\r
+#define IDC_8_ 1278\r
+#define IDC_9_ 1279\r
+#define IDC_0_ 1280\r
+#define IDC_MINUS_ 1281\r
+#define IDC_EQUAL_ 1282\r
+#define IDC_BACKSPACE_ 1283\r
+#define IDC_TAB_ 1284\r
+#define IDC_Q_ 1285\r
+#define IDC_W_ 1286\r
+#define IDC_E_ 1287\r
+#define IDC_R_ 1288\r
+#define IDC_T_ 1289\r
+#define IDC_Y_ 1290\r
+#define IDC_U_ 1291\r
+#define IDC_I_ 1292\r
+#define IDC_O_ 1293\r
+#define IDC_P_ 1294\r
+#define IDC_SQUARE_CKET_ 1295\r
+#define IDC_BACKSLASH_ 1296\r
+#define IDC_A_ 1297\r
+#define IDC_S_ 1298\r
+#define IDC_D_ 1299\r
+#define IDC_F_ 1300\r
+#define IDC_G_ 1301\r
+#define IDC_H_ 1302\r
+#define IDC_J_ 1303\r
+#define IDC_K_ 1304\r
+#define IDC_L_ 1305\r
+#define IDC_SEMICOLON_ 1306\r
+#define IDC_QUOTE_ 1307\r
+#define IDC_ENTER_ 1308\r
+#define IDC_LEFT_SHIFT_ 1309\r
+#define IDC_Z_ 1310\r
+#define IDC_X_ 1311\r
+#define IDC_NONCONVERT 1312\r
+#define IDC_V_ 1313\r
+#define IDC_B_ 1314\r
+#define IDC_N_ 1315\r
+#define IDC_CXCT 1315\r
+#define IDC_BACKSLASH1 1316\r
+#define IDC_COMMA_ 1317\r
+#define IDC_PROPERTIES_LIST 1317\r
+#define IDC_PERIOD_ 1318\r
+#define IDC_SUBSEQUENT_KEYBOARD_INPUT 1318\r
+#define IDC_SLASH_ 1319\r
+#define IDC_RIGHT_SHIFT_ 1320\r
+#define IDC_NCODE 1320\r
+#define IDC_LEFT_CTRL_ 1321\r
+#define IDC_WPARAM 1321\r
+#define IDC_LEFT_WINDOWS_ 1322\r
+#define IDC_LPARAM 1322\r
+#define IDC_RIGHT_WINDOWS_ 1323\r
+#define IDC_RIGHT_CTRL_ 1324\r
+#define IDC_EDIT 1324\r
+#define IDC_INSERT_ 1325\r
+#define IDC_HOME_ 1326\r
+#define IDC_PAGE_UP_ 1327\r
+#define IDC_MACRO_NAMES 1327\r
+#define IDC_DELETE_ 1328\r
+#define IDC_SAVE 1328\r
+#define IDC_END_ 1329\r
+#define IDC_KEY 1329\r
+#define IDC_PAGE_DOWN_ 1330\r
+#define IDC_STATE 1330\r
+#define IDC_UP_ 1331\r
+#define IDC_RADIO1 1331\r
+#define IDC_LEFT_ 1332\r
+#define IDC_DOWN_ 1333\r
+#define IDC_MDEL 1333\r
+#define IDC_RIGHT_ 1334\r
+#define IDC_MF12 1334\r
+#define IDC_NUM_LOCK_ 1335\r
+#define IDC_WINDOW_TEXT 1335\r
+#define IDC_DIVIDE_ 1336\r
+#define IDC_MULTIPLY_ 1337\r
+#define IDC_LEGAL_COPYRIGHT 1337\r
+#define IDC_SUBTRACT_ 1338\r
+#define IDC_ML 1338\r
+#define IDC_NUMPAD7_ 1339\r
+#define IDC_MU 1339\r
+#define IDC_NUMPAD8_ 1340\r
+#define IDC_MC 1340\r
+#define IDC_NUMPAD9_ 1341\r
+#define IDC_MX 1341\r
+#define IDC_NUMPAD4_ 1342\r
+#define IDC_NUMPAD5_ 1343\r
+#define IDC_NUMPAD6_ 1344\r
+#define IDC_ADD_ 1345\r
+#define IDC_NUMPAD1_ 1346\r
+#define IDC_NUMPAD2_ 1347\r
+#define IDC_NUMPAD3_ 1348\r
+#define IDC_NUMPAD0_ 1349\r
+#define IDC_NUMPADDELETE_ 1350\r
+#define IDC_NUMPADENTER_ 1351\r
+#define IDC_BACKSLASH1_ 1352\r
+#define IDC_BACKSLASH2 1353\r
+#define IDC_BACKSLASH2_ 1354\r
+#define IDC_KANA 1355\r
+#define IDC_CONVERT 1356\r
+#define IDC_NONCONVERT_ 1357\r
+#define IDC_ACPI_POWER 1358\r
+#define IDC_ACPI_POWER_ 1359\r
+#define IDC_ACPI_SLEEP 1360\r
+#define IDC_ACPI_SLEEP_ 1361\r
+#define IDC_ACPI_WAKE 1362\r
+#define IDC_ACPI_WAKE_ 1363\r
+#define IDC_ABOUT 32771\r
+#define IDC_QUIT 32772\r
+#define IDC_STOP 32773\r
+#define IDC_DISABLE 32773\r
+#define IDC_PROPERTIES 32774\r
+#define IDC_OPTIONS 32775\r
+#define IDC_CUSTOMIZE 32776\r
+#define IDC_KEYBOARD 32777\r
+#define IDC_EXPORT 32778\r
+#define IDC_IMPORT 32779\r
+#define IDC_MACRO 32780\r
+#define IDC_RESET 32781\r
+#define IDC_KEYBOARD_ANY_USER 32784\r
+\r
+// Next default values for new objects\r
+// \r
+#ifdef APSTUDIO_INVOKED\r
+#ifndef APSTUDIO_READONLY_SYMBOLS\r
+#define _APS_3D_CONTROLS 1\r
+#define _APS_NEXT_RESOURCE_VALUE 157\r
+#define _APS_NEXT_COMMAND_VALUE 32785\r
+#define _APS_NEXT_CONTROL_VALUE 1342\r
+#define _APS_NEXT_SYMED_VALUE 101\r
+#endif\r
+#endif\r
--- /dev/null
+// stdafx.cpp : source file that includes just the standard includes\r
+// xkeymacs.pch will be the pre-compiled header\r
+// stdafx.obj will contain the pre-compiled type information\r
+\r
+#include "stdafx.h"\r
+\r
+\r
+\r
--- /dev/null
+// stdafx.h : include file for standard system include files,\r
+// or project specific include files that are used frequently, but\r
+// are changed infrequently\r
+//\r
+\r
+#if !defined(AFX_STDAFX_H__C7A72283_D846_468F_B48D_3C5A11DBAED2__INCLUDED_)\r
+#define AFX_STDAFX_H__C7A72283_D846_468F_B48D_3C5A11DBAED2__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers\r
+\r
+#include <afxwin.h> // MFC core and standard components\r
+#include <afxext.h> // MFC extensions\r
+// #include <afxdisp.h> // MFC Automation classes\r
+#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls\r
+#ifndef _AFX_NO_AFXCMN_SUPPORT\r
+#include <afxcmn.h> // MFC support for Windows Common Controls\r
+#endif // _AFX_NO_AFXCMN_SUPPORT\r
+\r
+#pragma comment(lib, "xkeymacs.lib")\r
+#include "../xkeymacsdll/xkeymacsdll.h"\r
+#include "../xkeymacsdll/Commands.h"\r
+#include "../xkeymacsdll/Utils.h"\r
+#include "../xkeymacsdll/FunctionDefinition.h"\r
+\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_STDAFX_H__C7A72283_D846_468F_B48D_3C5A11DBAED2__INCLUDED_)\r
--- /dev/null
+// xkeymacs.cpp : Defines the class behaviors for the application.\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "xkeymacs.h"\r
+#include "Profile.h"\r
+#include "MainFrm.h"\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CXkeymacsApp\r
+\r
+BEGIN_MESSAGE_MAP(CXkeymacsApp, CWinApp)\r
+ //{{AFX_MSG_MAP(CXkeymacsApp)\r
+ ON_COMMAND(ID_APP_ABOUT, OnAppAbout)\r
+ // NOTE - the ClassWizard will add and remove mapping macros here.\r
+ // DO NOT EDIT what you see in these blocks of generated code!\r
+ //}}AFX_MSG_MAP\r
+ // Standard file based document commands\r
+ ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)\r
+ ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)\r
+END_MESSAGE_MAP()\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CXkeymacsApp construction\r
+\r
+CXkeymacsApp::CXkeymacsApp()\r
+{\r
+ // TODO: add construction code here,\r
+ // Place all significant initialization in InitInstance\r
+\r
+ m_Instance = FirstInstance;\r
+}\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// The one and only CXkeymacsApp object\r
+\r
+CXkeymacsApp theApp;\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CXkeymacsApp initialization\r
+\r
+BOOL CXkeymacsApp::InitInstance()\r
+{\r
+// AfxEnableControlContainer();\r
+\r
+ // Standard initialization\r
+ // If you are not using these features and wish to reduce the size\r
+ // of your final executable, you should remove from the following\r
+ // the specific initialization routines you do not need.\r
+\r
+ m_hMutex = CreateMutex(FALSE, 0, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)));\r
+\r
+ if (::GetLastError() == ERROR_ALREADY_EXISTS) {\r
+ m_Instance = SecondInstance;\r
+ CloseHandle( m_hMutex );\r
+ return FALSE;\r
+ }\r
+\r
+#ifdef _AFXDLL\r
+ Enable3dControls(); // Call this when using MFC in a shared DLL\r
+#else\r
+ Enable3dControlsStatic(); // Call this when linking to MFC statically\r
+#endif\r
+\r
+ // Change the registry key under which our settings are stored.\r
+ // TODO: You should modify this string to be something appropriate\r
+ // such as the name of your company or organization.\r
+// SetRegistryKey(_T("Local AppWizard-Generated Applications"));\r
+ SetRegistryKey(IDS_REGISTRY_KEY);\r
+ free((void*)m_pszProfileName);\r
+ m_pszProfileName=_tcsdup(_T("XKeymacs2"));\r
+//\r
+// LoadStdProfileSettings(); // Load standard INI file options (including MRU)\r
+\r
+ // Parse command line for standard shell commands, DDE, file open\r
+// CCommandLineInfo cmdInfo;\r
+// ParseCommandLine(cmdInfo);\r
+\r
+ // Dispatch commands specified on the command line\r
+// if (!ProcessShellCommand(cmdInfo))\r
+// return FALSE;\r
+\r
+ // The one and only window has been initialized, so show and update it.\r
+ m_pMainWnd = new CMainFrame;\r
+ m_pMainWnd->ShowWindow(SW_HIDE);\r
+ m_pMainWnd->UpdateWindow();\r
+ SetClassLong(m_pMainWnd->m_hWnd, GCL_HICON, (LONG)LoadIcon(IDR_MAINFRAME));\r
+\r
+ // set registry key\r
+// CMainFrame *pMainWnd = (CMainFrame*)m_pMainWnd;\r
+ CProfile::InitDllData();\r
+\r
+ return TRUE;\r
+}\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CAboutDlg dialog used for App About\r
+\r
+CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)\r
+{\r
+ //{{AFX_DATA_INIT(CAboutDlg)\r
+ m_szVersionInformation = _T("");\r
+ m_szLegalCopyright = _T("");\r
+ //}}AFX_DATA_INIT\r
+\r
+ m_szLegalCopyright.Format(_T("Copyright (C) 2001-2006")); // rough\r
+\r
+ WORD wMajorVersion = 0;\r
+ WORD wMinorVersion = 0;\r
+ WORD wBuildVersion = 0;\r
+ WORD wRevisionVersion = 0;\r
+\r
+ TCHAR szFileName[MAX_PATH] = {'\0'};\r
+ GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
+ DWORD dwHandle = 0;\r
+\r
+ DWORD dwLen = GetFileVersionInfoSize(szFileName, &dwHandle);\r
+ if (dwLen) {\r
+ LPVOID lpData = new BYTE[dwLen];\r
+ if (GetFileVersionInfo(szFileName, dwHandle, dwLen, lpData)) {\r
+ VS_FIXEDFILEINFO *pInfo;\r
+ UINT uLen;\r
+ if (VerQueryValue(lpData, _T("\\"), (LPVOID *)&pInfo, &uLen)) {\r
+ wMajorVersion = (WORD)((pInfo->dwProductVersionMS >> 16) & 0xffff);\r
+ wMinorVersion = (WORD)((pInfo->dwProductVersionMS ) & 0xffff);\r
+ wBuildVersion = (WORD)((pInfo->dwProductVersionLS >> 16) & 0xffff);\r
+ wRevisionVersion = (WORD)((pInfo->dwProductVersionLS ) & 0xffff);\r
+ }\r
+\r
+ Translate_t *lpTranslate = NULL;\r
+ UINT cbTranslate = 0;\r
+ if (VerQueryValue(lpData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &cbTranslate) && sizeof(Translate_t) <= cbTranslate) {\r
+ LPVOID lpLegalCopyright = NULL;\r
+ UINT uLen = 0;\r
+ CString SubBlock;\r
+\r
+ SubBlock.Format(_T("\\StringFileInfo\\%04x%04x\\LegalCopyright"), lpTranslate->wLanguage, lpTranslate->wCodePage);\r
+ if (VerQueryValue(lpData, SubBlock.GetBuffer(SubBlock.GetLength()), (LPVOID *)&lpLegalCopyright, &uLen) && uLen) {\r
+ m_szLegalCopyright.Format(_T("%s"), lpLegalCopyright);\r
+ }\r
+ }\r
+ }\r
+ delete[] lpData;\r
+ lpData = NULL;\r
+ }\r
+\r
+ m_szVersionInformation.Format(_T("%s Version %d.%d"), CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), wMajorVersion, wMinorVersion);\r
+\r
+ if (wBuildVersion) {\r
+ CString sz;\r
+ sz.Format(_T(".%d"), wBuildVersion);\r
+ m_szVersionInformation += sz;\r
+\r
+ if (wRevisionVersion) {\r
+ CString sz;\r
+ sz.Format(_T(".%d"), wRevisionVersion);\r
+ m_szVersionInformation += sz;\r
+ }\r
+ }\r
+}\r
+\r
+void CAboutDlg::DoDataExchange(CDataExchange *pDX)\r
+{\r
+ CDialog::DoDataExchange(pDX);\r
+ //{{AFX_DATA_MAP(CAboutDlg)\r
+ DDX_Control(pDX, IDC_URL, m_cURL);\r
+ DDX_Text(pDX, IDC_VERSION_INFORMATION, m_szVersionInformation);\r
+ DDX_Text(pDX, IDC_LEGAL_COPYRIGHT, m_szLegalCopyright);\r
+ //}}AFX_DATA_MAP\r
+}\r
+\r
+BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)\r
+ //{{AFX_MSG_MAP(CAboutDlg)\r
+ ON_WM_CLOSE()\r
+ ON_BN_CLICKED(IDC_URL, OnUrl)\r
+ ON_WM_CTLCOLOR()\r
+ ON_WM_SETCURSOR()\r
+ //}}AFX_MSG_MAP\r
+END_MESSAGE_MAP()\r
+\r
+// App command to run the dialog\r
+void CXkeymacsApp::OnAppAbout()\r
+{\r
+ CAboutDlg aboutDlg;\r
+ aboutDlg.DoModal();\r
+}\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CXkeymacsApp message handlers\r
+\r
+\r
+int CXkeymacsApp::ExitInstance() \r
+{\r
+ // TODO: Add your specialized code here and/or call the base class\r
+\r
+ if (m_Instance == FirstInstance) {\r
+ ReleaseMutex( m_hMutex );\r
+ CloseHandle( m_hMutex );\r
+\r
+ m_pMainWnd->DestroyWindow();\r
+ delete m_pMainWnd;\r
+ m_pMainWnd = NULL;\r
+ }\r
+\r
+ return CWinApp::ExitInstance();\r
+}\r
+\r
+void CAboutDlg::OnOK() \r
+{\r
+ // TODO: Add extra validation here\r
+ CDialog::OnOK();\r
+}\r
+\r
+\r
+void CAboutDlg::OnClose() \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ CDialog::OnClose();\r
+}\r
+\r
+void CAboutDlg::OnUrl() \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ CString szURL;\r
+ m_cURL.GetWindowText(szURL);\r
+\r
+ ShellExecute(m_hWnd, NULL, szURL, NULL, NULL, SW_SHOWNORMAL);\r
+}\r
+\r
+HBRUSH CAboutDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) \r
+{\r
+ HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);\r
+ \r
+ // TODO: Change any attributes of the DC here\r
+ COLORREF crBlue = RGB(0, 0, 0xff);\r
+\r
+ if (pWnd == &m_cURL) {\r
+ pDC->SetTextColor(crBlue);\r
+ }\r
+\r
+ // TODO: Return a different brush if the default is not desired\r
+ return hbr;\r
+}\r
+\r
+BOOL CAboutDlg::OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message) \r
+{\r
+ // TODO: Add your message handler code here and/or call default\r
+ CRect rect;\r
+ m_cURL.GetWindowRect(rect);\r
+\r
+ POINT p;\r
+ ::GetCursorPos(&p);\r
+\r
+ if (rect.PtInRect(p)) {\r
+ HCURSOR hCursor = (HCURSOR)LoadImage(theApp.m_hInstance, MAKEINTRESOURCE(IDC_HAND_CURSOR),\r
+ IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
+ SetCursor(hCursor);\r
+ return TRUE; \r
+ }\r
+\r
+ return CDialog::OnSetCursor(pWnd, nHitTest, message);\r
+}\r
--- /dev/null
+# Microsoft Developer Studio Project File - Name="xkeymacs" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Application" 0x0101\r
+\r
+CFG=xkeymacs - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B \82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "xkeymacs.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄÞ ×²Ý\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "xkeymacs.mak" CFG="xkeymacs - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "xkeymacs - Win32 Release" ("Win32 (x86) Application" \97p)\r
+!MESSAGE "xkeymacs - Win32 Debug" ("Win32 (x86) Application" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""$/xkeymacs", WBAAAAAA"\r
+# PROP Scc_LocalPath "."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "xkeymacs - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 6\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 6\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c\r
+# ADD CPP /nologo /MD /W4 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR /Yu"stdafx.h" /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"\r
+# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386\r
+# ADD LINK32 Version.lib imm32.lib Shlwapi.lib /nologo /subsystem:windows /machine:I386\r
+\r
+!ELSEIF "$(CFG)" == "xkeymacs - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 6\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 6\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\xkeymacs\Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W4 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 Version.lib imm32.lib Shlwapi.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "xkeymacs - Win32 Release"\r
+# Name "xkeymacs - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\104Keyboard.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\109Keyboard.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\DotXkeymacs.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Key.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\MainFrm.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\OptionsDlg.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Profile.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Properties.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesAdvanced.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesBasic.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesList.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\StdAfx.cpp\r
+# ADD CPP /Yc"stdafx.h"\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacs.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacs.rc\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=.\104Keyboard.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\109Keyboard.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\DotXkeymacs.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Key.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\MainFrm.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\OptionsDlg.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Profile.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Properties.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesAdvanced.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesBasic.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\PropertiesList.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Resource.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\StdAfx.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacs.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# Begin Source File\r
+\r
+SOURCE=.\res\alt_off.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\alt_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\ctrl_off.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\ctrl_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\cx_off.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\cx_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disable.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disable_.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disable_tmp.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disable_wocq.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disableTMP.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\disableWOCQ.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\drag.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\hand.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\meta_off.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\meta_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\mx_off.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\mx_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\shift_of.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\shift_on.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\sort_asc.bmp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\sort_des.bmp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\xkeymacs.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\xkeymacs.rc2\r
+# End Source File\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=.\ReadMe.txt\r
+# End Source File\r
+# End Target\r
+# End Project\r
--- /dev/null
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90: \82±\82ÌÜ°¸½Íß°½ ̧²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "xkeymacs"=.\xkeymacs.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+ begin source code control\r
+ "$/xkeymacs", WBAAAAAA\r
+ .\r
+ end source code control\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+ Begin Project Dependency\r
+ Project_Dep_Name xkeymacsdll\r
+ End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "xkeymacsdll"=..\xkeymacsdll\xkeymacsdll.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+ begin source code control\r
+ "$/xkeymacsdll", KDAAAAAA\r
+ ..\xkeymacsdll\r
+ end source code control\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+ begin source code control\r
+ "$/xkeymacs", WBAAAAAA\r
+ .\r
+ end source code control\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
--- /dev/null
+// xkeymacs.h : main header file for the XKEYMACS application\r
+//\r
+\r
+#if !defined(AFX_XKEYMACS_H__2E65B9CB_5ADB_4C3B_891F_8EFE395FBB2D__INCLUDED_)\r
+#define AFX_XKEYMACS_H__2E65B9CB_5ADB_4C3B_891F_8EFE395FBB2D__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#ifndef __AFXWIN_H__\r
+ #error include 'stdafx.h' before including this file for PCH\r
+#endif\r
+\r
+#include "resource.h" // main symbols\r
+\r
+enum Instance\r
+{\r
+ FirstInstance,\r
+ SecondInstance,\r
+};\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CXkeymacsApp:\r
+// See xkeymacs.cpp for the implementation of this class\r
+//\r
+\r
+class CXkeymacsApp : public CWinApp\r
+{\r
+public:\r
+ CXkeymacsApp();\r
+\r
+// Overrides\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(CXkeymacsApp)\r
+ public:\r
+ virtual BOOL InitInstance();\r
+ virtual int ExitInstance();\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+ //{{AFX_MSG(CXkeymacsApp)\r
+ afx_msg void OnAppAbout();\r
+ // NOTE - the ClassWizard will add and remove member functions here.\r
+ // DO NOT EDIT what you see in these blocks of generated code !\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+private:\r
+ Instance m_Instance;\r
+ HANDLE m_hMutex;\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// CAboutDlg dialog used for App About\r
+\r
+class CAboutDlg : public CDialog\r
+{\r
+public:\r
+ CAboutDlg();\r
+\r
+// Dialog Data\r
+ //{{AFX_DATA(CAboutDlg)\r
+ enum { IDD = IDD_ABOUTBOX };\r
+ CStatic m_cURL;\r
+ CString m_szVersionInformation;\r
+ CString m_szLegalCopyright;\r
+ //}}AFX_DATA\r
+\r
+ // ClassWizard generated virtual function overrides\r
+ //{{AFX_VIRTUAL(CAboutDlg)\r
+ protected:\r
+ virtual void DoDataExchange(CDataExchange *pDX); // DDX/DDV support\r
+ //}}AFX_VIRTUAL\r
+\r
+// Implementation\r
+protected:\r
+ //{{AFX_MSG(CAboutDlg)\r
+ virtual void OnOK();\r
+ afx_msg void OnClose();\r
+ afx_msg void OnUrl();\r
+ afx_msg HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor);\r
+ afx_msg BOOL OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message);\r
+ //}}AFX_MSG\r
+ DECLARE_MESSAGE_MAP()\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+static const KeyName_t KeyNames[] = {\r
+ {0, _T("")},\r
+ {VK_LBUTTON, _T("Left mouse button")},\r
+ {VK_RBUTTON, _T("Right mouse button")},\r
+ {VK_CANCEL, _T("Break")},\r
+ {VK_MBUTTON, _T("Middle mouse button")},\r
+ {0x05, _T("X1 mouse button")}, // VK_XBUTTON1\r
+ {0x06, _T("X2 mouse button")}, // VK_XBUTTON2\r
+ {0x07, _T("Undefined")},\r
+ {VK_BACK, _T("Backspace")},\r
+ {VK_TAB, _T("Tab")},\r
+ {0x0a, _T("Reserved")},\r
+ {0x0b, _T("Reserved")},\r
+ {VK_CLEAR, _T("Clear")},\r
+ {VK_RETURN, _T("Enter")},\r
+ {0x0e, _T("Undefined")},\r
+ {0x0f, _T("Undefined")},\r
+ {VK_SHIFT, _T("Shift")},\r
+ {VK_CONTROL, _T("Ctrl")},\r
+ {VK_MENU, _T("Alt")},\r
+ {VK_PAUSE, _T("Pause")},\r
+ {VK_CAPITAL, _T("Caps Lock")},\r
+ {VK_KANA, _T("Kana")}, // {VK_HANGUEL, "Hanguel"}, {VK_HANGUL, "Hangul"},\r
+ {0x16, _T("Undefined")},\r
+ {VK_JUNJA, _T("Junja")},\r
+ {VK_FINAL, _T("Final")},\r
+ {VK_KANJI, _T("Kanji")}, // {VK_HANJA, "Hanja"},\r
+ {0x1a, _T("Undefined")},\r
+ {VK_ESCAPE, _T("Esc")},\r
+ {VK_CONVERT, _T("Convert")}, // \95Ï\8a·\r
+ {VK_NONCONVERT, _T("Nonconvert")}, // \96³\95Ï\8a·\r
+ {VK_ACCEPT, _T("Accept")},\r
+ {VK_MODECHANGE, _T("Mode change")},\r
+ {VK_SPACE, _T("Space")},\r
+ {VK_PRIOR, _T("Page Up")},\r
+ {VK_NEXT, _T("Page Down")},\r
+ {VK_END, _T("End")},\r
+ {VK_HOME, _T("Home")},\r
+ {VK_LEFT, _T("Left")},\r
+ {VK_UP, _T("Up")},\r
+ {VK_RIGHT, _T("Right")},\r
+ {VK_DOWN, _T("Down")},\r
+ {VK_SELECT, _T("Select")},\r
+ {VK_PRINT, _T("Print")},\r
+ {VK_EXECUTE, _T("Execute")},\r
+ {VK_SNAPSHOT, _T("Print Screen")},\r
+ {VK_INSERT, _T("Ins")},\r
+ {VK_DELETE, _T("Del")},\r
+ {VK_HELP, _T("Help")},\r
+ {'0', _T("0")},\r
+ {'1', _T("1")},\r
+ {'2', _T("2")},\r
+ {'3', _T("3")},\r
+ {'4', _T("4")},\r
+ {'5', _T("5")},\r
+ {'6', _T("6")},\r
+ {'7', _T("7")},\r
+ {'8', _T("8")},\r
+ {'9', _T("9")},\r
+ {0x3a, _T("Undefined")},\r
+ {0x3b, _T("Undefined")},\r
+ {0x3c, _T("Undefined")},\r
+ {0x3d, _T("Undefined")},\r
+ {0x3e, _T("Undefined")},\r
+ {0x3f, _T("Undefined")},\r
+ {0x40, _T("Undefined")},\r
+ {'A', _T("A")},\r
+ {'B', _T("B")},\r
+ {'C', _T("C")},\r
+ {'D', _T("D")},\r
+ {'E', _T("E")},\r
+ {'F', _T("F")},\r
+ {'G', _T("G")},\r
+ {'H', _T("H")},\r
+ {'I', _T("I")},\r
+ {'J', _T("J")},\r
+ {'K', _T("K")},\r
+ {'L', _T("L")},\r
+ {'M', _T("M")},\r
+ {'N', _T("N")},\r
+ {'O', _T("O")},\r
+ {'P', _T("P")},\r
+ {'Q', _T("Q")},\r
+ {'R', _T("R")},\r
+ {'S', _T("S")},\r
+ {'T', _T("T")},\r
+ {'U', _T("U")},\r
+ {'V', _T("V")},\r
+ {'W', _T("W")},\r
+ {'X', _T("X")},\r
+ {'Y', _T("Y")},\r
+ {'Z', _T("Z")},\r
+ {VK_LWIN, _T("Left Windows")},\r
+ {VK_RWIN, _T("Right Windows")},\r
+ {VK_APPS, _T("Application")},\r
+ {0x5e, _T("Reserved")},\r
+ {0x5f, _T("Sleep")}, // VK_SLEEP\r
+ {VK_NUMPAD0, _T("Num 0")},\r
+ {VK_NUMPAD1, _T("Num 1")},\r
+ {VK_NUMPAD2, _T("Num 2")},\r
+ {VK_NUMPAD3, _T("Num 3")},\r
+ {VK_NUMPAD4, _T("Num 4")},\r
+ {VK_NUMPAD5, _T("Num 5")},\r
+ {VK_NUMPAD6, _T("Num 6")},\r
+ {VK_NUMPAD7, _T("Num 7")},\r
+ {VK_NUMPAD8, _T("Num 8")},\r
+ {VK_NUMPAD9, _T("Num 9")},\r
+ {VK_MULTIPLY, _T("Num *")},\r
+ {VK_ADD, _T("Num +")},\r
+ {VK_SEPARATOR, _T("Separator")},\r
+ {VK_SUBTRACT, _T("Num -")},\r
+ {VK_DECIMAL, _T("Num .")},\r
+ {VK_DIVIDE, _T("Num /")},\r
+ {VK_F1, _T("F1")},\r
+ {VK_F2, _T("F2")},\r
+ {VK_F3, _T("F3")},\r
+ {VK_F4, _T("F4")},\r
+ {VK_F5, _T("F5")},\r
+ {VK_F6, _T("F6")},\r
+ {VK_F7, _T("F7")},\r
+ {VK_F8, _T("F8")},\r
+ {VK_F9, _T("F9")},\r
+ {VK_F10, _T("F10")},\r
+ {VK_F11, _T("F11")},\r
+ {VK_F12, _T("F12")},\r
+ {VK_F13, _T("F13")},\r
+ {VK_F14, _T("F14")},\r
+ {VK_F15, _T("F15")},\r
+ {VK_F16, _T("F16")},\r
+ {VK_F17, _T("F17")},\r
+ {VK_F18, _T("F18")},\r
+ {VK_F19, _T("F19")},\r
+ {VK_F20, _T("F20")},\r
+ {VK_F21, _T("F21")},\r
+ {VK_F22, _T("F22")},\r
+ {VK_F23, _T("F23")},\r
+ {VK_F24, _T("F24")},\r
+ {0x88, _T("Unassigned")},\r
+ {0x89, _T("Unassigned")},\r
+ {0x8a, _T("Unassigned")},\r
+ {0x8b, _T("Unassigned")},\r
+ {0x8c, _T("Unassigned")},\r
+ {0x8d, _T("Unassigned")},\r
+ {0x8e, _T("Unassigned")},\r
+ {0x8f, _T("Unassigned")},\r
+ {VK_NUMLOCK, _T("Num Lock")},\r
+ {VK_SCROLL, _T("Scroll Lock")},\r
+ {0x92, _T("OEM specific")},\r
+ {0x93, _T("OEM specific")},\r
+ {0x94, _T("OEM specific")},\r
+ {0x95, _T("OEM specific")},\r
+ {0x96, _T("OEM specific")},\r
+ {0x97, _T("Unassigned")},\r
+ {0x98, _T("Unassigned")},\r
+ {0x99, _T("Unassigned")},\r
+ {0x9a, _T("Unassigned")},\r
+ {0x9b, _T("Unassigned")},\r
+ {0x9c, _T("Unassigned")},\r
+ {0x9d, _T("Unassigned")},\r
+ {0x9e, _T("Unassigned")},\r
+ {0x9f, _T("Unassigned")},\r
+ {VK_LSHIFT, _T("Left Shift")},\r
+ {VK_RSHIFT, _T("Right Shift")},\r
+ {VK_LCONTROL, _T("Left Ctrl")},\r
+ {VK_RCONTROL, _T("Right Ctrl")},\r
+ {VK_LMENU, _T("Left Alt")},\r
+ {VK_RMENU, _T("Right Alt")},\r
+ {0xa6, _T("Browser Back")}, // VK_BROWSER_BACK\r
+ {0xa7, _T("Browser Forward")}, // VK_BROWSER_FORWARD\r
+ {0xa8, _T("Browser Refresh")}, // VK_BROWSER_REFRESH\r
+ {0xa9, _T("Browser Stop")}, // VK_BROWSER_STOP\r
+ {0xaa, _T("Browser Search")}, // VK_BROWSER_SEARCH\r
+ {0xab, _T("Browser Favorites")}, // VK_BROWSER_FAVORITES\r
+ {0xac, _T("Browser Start")}, // VK_BROWSER_HOME\r
+ {0xad, _T("Volume Mute")}, // VK_VOLUME_MUTE\r
+ {0xae, _T("Volume Down")}, // VK_VOLUME_DOWN\r
+ {0xaf, _T("Volume Up")}, // VK_VOLUME_UP\r
+ {0xb0, _T("Next Track")}, // VK_MEDIA_NEXT_TRACK\r
+ {0xb1, _T("Previous Track")}, // VK_MEDIA_PREV_TRACK\r
+ {0xb2, _T("Stop Media")}, // VK_MEDIA_STOP\r
+ {0xb3, _T("Play/Pause Media")}, // VK_MEDIA_PLAY_PAUSE\r
+ {0xb4, _T("Start Mail")}, // VK_LAUNCH_MAIL\r
+ {0xb5, _T("Select Media")}, // VK_LAUNCH_MEDIA_SELECT\r
+ {0xb6, _T("Start Application 1")}, // VK_LAUNCH_APP1\r
+ {0xb7, _T("Start Application 2")}, // VK_LAUNCH_APP2\r
+ {0xb8, _T("Reserved")},\r
+ {0xb9, _T("Reserved")},\r
+ {0xba, _T(";")}, // VK_OEM_1\r
+// {0xba, _T(":")}, // VK_OEM_1 // for Japanese keyboard\r
+ {0xbb, _T("+")}, // VK_OEM_PLUS\r
+// {0xbb, _T(";")}, // VK_OEM_PLUS // for Japanese keyboard\r
+ {0xbc, _T(",")}, // VK_OEM_COMMA\r
+ {0xbd, _T("-")}, // VK_OEM_MINUS\r
+ {0xbe, _T(".")}, // VK_OEM_PERIOD\r
+ {0xbf, _T("/")}, // VK_OEM_2\r
+ {0xc0, _T("`")}, // VK_OEM_3\r
+// {0xc0, _T("@")}, // VK_OEM_3 // for Japanese keyboard\r
+ {0xc1, _T("Reserved")},\r
+ {0xc2, _T("Reserved")},\r
+ {0xc3, _T("Reserved")},\r
+ {0xc4, _T("Reserved")},\r
+ {0xc5, _T("Reserved")},\r
+ {0xc6, _T("Reserved")},\r
+ {0xc7, _T("Reserved")},\r
+ {0xc8, _T("Reserved")},\r
+ {0xc9, _T("Reserved")},\r
+ {0xca, _T("Reserved")},\r
+ {0xcb, _T("Reserved")},\r
+ {0xcc, _T("Reserved")},\r
+ {0xcd, _T("Reserved")},\r
+ {0xce, _T("Reserved")},\r
+ {0xcf, _T("Reserved")},\r
+ {0xd0, _T("Reserved")},\r
+ {0xd1, _T("Reserved")},\r
+ {0xd2, _T("Reserved")},\r
+ {0xd3, _T("Reserved")},\r
+ {0xd4, _T("Reserved")},\r
+ {0xd5, _T("Reserved")},\r
+ {0xd6, _T("Reserved")},\r
+ {0xd7, _T("Reserved")},\r
+ {0xd8, _T("Unassigned")},\r
+ {0xd9, _T("Unassigned")},\r
+ {0xda, _T("Unassigned")},\r
+ {0xdb, _T("[")}, // VK_OEM_4\r
+ {0xdc, _T("Backslash")}, // VK_OEM_5\r
+ {0xdd, _T("]")}, // VK_OEM_6\r
+ {0xde, _T("'")}, // VK_OEM_7\r
+ {0xdf, _T("OEM specific")}, // VK_OEM_8\r
+ {0xe0, _T("Reserved")},\r
+ {0xe1, _T("OEM specific")},\r
+ {0xe2, _T("Backslash for 106 keyboard")}, // VK_OEM_102\r
+ {0xe3, _T("OEM specific")},\r
+ {0xe4, _T("OEM specific")},\r
+ {0xe5, _T("Process")}, // VK_PROCESSKEY\r
+ {0xe6, _T("OEM specific")},\r
+ {0xe7, _T("Packet")}, // VK_PACKET\r
+ {0xe8, _T("Unassigned")},\r
+ {0xe9, _T("OEM specific")},\r
+ {0xea, _T("OEM specific")},\r
+ {0xeb, _T("OEM specific")},\r
+ {0xec, _T("OEM specific")},\r
+ {0xed, _T("OEM specific")},\r
+ {0xee, _T("OEM specific")},\r
+ {0xef, _T("OEM specific")},\r
+ {0xf0, _T("Eisu")}, // \89p\90\94\r
+ {0xf1, _T("OEM specific")},\r
+ {0xf2, _T("Hiragana")}, // \82Ð\82ç\82ª\82È\r
+ {0xf3, _T("Hankaku/Zenkaku 0xf3")}, // "\94¼\8ap/\91S\8ap"\r
+ {0xf4, _T("Hankaku/Zenkaku 0xf4")}, // "\94¼\8ap/\91S\8ap"\r
+ {0xf5, _T("OEM specific")},\r
+ {VK_ATTN, _T("Attn")},\r
+ {VK_CRSEL, _T("CrSel")},\r
+ {VK_EXSEL, _T("ExSel")},\r
+ {VK_EREOF, _T("Erace EOF")},\r
+ {VK_PLAY, _T("Play")},\r
+ {VK_ZOOM, _T("Zoom")},\r
+ {VK_NONAME, _T("Noname")},\r
+ {VK_PA1, _T("PA1")},\r
+ {VK_OEM_CLEAR, _T("OEM Clear")},\r
+ {0xff, _T("")},\r
+};\r
+\r
+typedef struct Translate {\r
+ WORD wLanguage;\r
+ WORD wCodePage;\r
+} Translate_t;\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_XKEYMACS_H__2E65B9CB_5ADB_4C3B_891F_8EFE395FBB2D__INCLUDED_)\r
--- /dev/null
+//Microsoft Developer Studio generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "afxres.h"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// \93ú\96{\8cê resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT\r
+#pragma code_page(932)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 123, 178\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\83I\83v\83V\83\87\83\93"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ GROUPBOX "XKeymacs",IDC_STATIC,7,7,109,25\r
+ CONTROL "\83\8d\83O\83I\83\93\8e\9e\82É\8eÀ\8ds",IDC_AUTO_RUN,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,15,17,65,10\r
+ GROUPBOX "\83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g",IDC_STATIC,7,33,109,25\r
+ CONTROL "\83t\83@\83C\83\8b\96¼\8e©\93®\95â\8a®",IDC_FILE_COMPLETION,"Button",\r
+ BS_AUTOCHECKBOX | WS_TABSTOP,15,43,79,10\r
+ GROUPBOX "\83^\83X\83N\83o\81[\82Ì\83X\83e\81[\83^\83X\97Ì\88æ",IDC_STATIC,7,59,109,90\r
+ CONTROL "C-x-",IDC_C_X_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 69,28,10\r
+ CONTROL "M-x",IDC_M_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 82,28,10\r
+ CONTROL "Meta",IDC_M_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 95,32,10\r
+ CONTROL "Shift",IDC_SHIFT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,108,31,10\r
+ CONTROL "Ctrl",IDC_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 121,26,10\r
+ CONTROL "Alt",IDC_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 134,25,10\r
+ DEFPUSHBUTTON "OK",IDOK,7,157,50,14\r
+ PUSHBUTTON "\83L\83\83\83\93\83Z\83\8b",IDCANCEL,66,157,50,14\r
+END\r
+\r
+IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 55\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "XKeymacs \82Ì\83o\81[\83W\83\87\83\93\8fî\95ñ"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20\r
+ LTEXT "XKeymacs Version x.xx",IDC_VERSION_INFORMATION,40,10,\r
+ 119,8,SS_NOPREFIX\r
+ LTEXT "Copyright (C) 2001-200x",IDC_LEGAL_COPYRIGHT,40,25,119,\r
+ 8\r
+ DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP\r
+ LTEXT "http://www.cam.hi-ho.ne.jp/oishi/",IDC_URL,40,40,108,8,\r
+ SS_NOTIFY\r
+END\r
+\r
+IDD_104KEYBOARD DIALOG DISCARDABLE 0, 0, 362, 303\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\83L\81[\83{\81[\83h\83\8c\83C\83A\83E\83g"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,248,281,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,306,281,50,14\r
+ CONTROL "Esc",IDC_ESC,"Button",BS_OWNERDRAW,13,21,14,16\r
+ CONTROL "F1",IDC_F1,"Button",BS_OWNERDRAW,43,21,14,16\r
+ CONTROL "F2",IDC_F2,"Button",BS_OWNERDRAW,58,21,14,16\r
+ CONTROL "F3",IDC_F3,"Button",BS_OWNERDRAW,73,21,14,16\r
+ CONTROL "F4",IDC_F4,"Button",BS_OWNERDRAW,88,21,14,16\r
+ CONTROL "F5",IDC_F5,"Button",BS_OWNERDRAW,110,21,14,16\r
+ CONTROL "F6",IDC_F6,"Button",BS_OWNERDRAW,125,21,14,16\r
+ CONTROL "F7",IDC_F7,"Button",BS_OWNERDRAW,140,21,14,16\r
+ CONTROL "F8",IDC_F8,"Button",BS_OWNERDRAW,155,21,14,16\r
+ CONTROL "F9",IDC_F9,"Button",BS_OWNERDRAW,178,21,14,16\r
+ CONTROL "F10",IDC_F10,"Button",BS_OWNERDRAW,193,21,14,16\r
+ CONTROL "F11",IDC_F11,"Button",BS_OWNERDRAW,208,21,14,16\r
+ CONTROL "F12",IDC_F12,"Button",BS_OWNERDRAW,223,21,14,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN,"Button",BS_OWNERDRAW,242,21,14,16\r
+ CONTROL "SL",IDC_SCROLL_LOCK,"Button",BS_OWNERDRAW,257,21,14,16\r
+ CONTROL "Pau",IDC_PAUSE,"Button",BS_OWNERDRAW,272,21,14,16\r
+ CONTROL "`",IDC_BACK_QUOTE,"Button",BS_OWNERDRAW,13,43,14,16\r
+ CONTROL "1",IDC_1,"Button",BS_OWNERDRAW,28,43,14,16\r
+ CONTROL "2",IDC_2,"Button",BS_OWNERDRAW,43,43,14,16\r
+ CONTROL "3",IDC_3,"Button",BS_OWNERDRAW,58,43,14,16\r
+ CONTROL "4",IDC_4,"Button",BS_OWNERDRAW,73,43,14,16\r
+ CONTROL "5",IDC_5,"Button",BS_OWNERDRAW,88,43,14,16\r
+ CONTROL "6",IDC_6,"Button",BS_OWNERDRAW,103,43,14,16\r
+ CONTROL "7",IDC_7,"Button",BS_OWNERDRAW,118,43,14,16\r
+ CONTROL "8",IDC_8,"Button",BS_OWNERDRAW,133,43,14,16\r
+ CONTROL "9",IDC_9,"Button",BS_OWNERDRAW,148,43,14,16\r
+ CONTROL "0",IDC_0,"Button",BS_OWNERDRAW,163,43,14,16\r
+ CONTROL "-",IDC_MINUS,"Button",BS_OWNERDRAW,178,43,14,16\r
+ CONTROL "=",IDC_EQUAL,"Button",BS_OWNERDRAW,193,43,14,16\r
+ CONTROL "\\",IDC_BACKSLASH1,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,7,279,14,16\r
+ CONTROL "BS",IDC_BACKSPACE,"Button",BS_OWNERDRAW,208,43,29,16\r
+ CONTROL "Tab",IDC_TAB,"Button",BS_OWNERDRAW,13,60,22,16\r
+ CONTROL "Q",IDC_Q,"Button",BS_OWNERDRAW,36,60,14,16\r
+ CONTROL "W",IDC_W,"Button",BS_OWNERDRAW,51,60,14,16\r
+ CONTROL "E",IDC_E,"Button",BS_OWNERDRAW,66,60,14,16\r
+ CONTROL "R",IDC_R,"Button",BS_OWNERDRAW,81,60,14,16\r
+ CONTROL "T",IDC_T,"Button",BS_OWNERDRAW,96,60,14,16\r
+ CONTROL "Y",IDC_Y,"Button",BS_OWNERDRAW,111,60,14,16\r
+ CONTROL "U",IDC_U,"Button",BS_OWNERDRAW,126,60,14,16\r
+ CONTROL "I",IDC_I,"Button",BS_OWNERDRAW,141,60,14,16\r
+ CONTROL "O",IDC_O,"Button",BS_OWNERDRAW,156,60,14,16\r
+ CONTROL "P",IDC_P,"Button",BS_OWNERDRAW,171,60,14,16\r
+ CONTROL "[",IDC_SQUARE_BRA,"Button",BS_OWNERDRAW,186,60,14,16\r
+ CONTROL "]",IDC_SQUARE_CKET,"Button",BS_OWNERDRAW,201,60,14,16\r
+ CONTROL "\\",IDC_BACKSLASH,"Button",BS_OWNERDRAW,216,60,21,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK,"Button",BS_OWNERDRAW,13,77,25,16\r
+ CONTROL "A",IDC_A,"Button",BS_OWNERDRAW,39,77,14,16\r
+ CONTROL "S",IDC_S,"Button",BS_OWNERDRAW,54,77,14,16\r
+ CONTROL "D",IDC_D,"Button",BS_OWNERDRAW,69,77,14,16\r
+ CONTROL "F",IDC_F,"Button",BS_OWNERDRAW,84,77,14,16\r
+ CONTROL "G",IDC_G,"Button",BS_OWNERDRAW,99,77,14,16\r
+ CONTROL "H",IDC_H,"Button",BS_OWNERDRAW,114,77,14,16\r
+ CONTROL "J",IDC_J,"Button",BS_OWNERDRAW,129,77,14,16\r
+ CONTROL "K",IDC_K,"Button",BS_OWNERDRAW,144,77,14,16\r
+ CONTROL "L",IDC_L,"Button",BS_OWNERDRAW,159,77,14,16\r
+ CONTROL ";",IDC_SEMICOLON,"Button",BS_OWNERDRAW,174,77,14,16\r
+ CONTROL "'",IDC_QUOTE,"Button",BS_OWNERDRAW,189,77,14,16\r
+ CONTROL "Enter",IDC_ENTER,"Button",BS_OWNERDRAW,204,77,33,16\r
+ CONTROL "Shift",IDC_LEFT_SHIFT,"Button",BS_OWNERDRAW,13,94,33,16\r
+ CONTROL "Z",IDC_Z,"Button",BS_OWNERDRAW,47,94,14,16\r
+ CONTROL "X",IDC_X,"Button",BS_OWNERDRAW,62,94,14,16\r
+ CONTROL "C",IDC_C,"Button",BS_OWNERDRAW,77,94,14,16\r
+ CONTROL "V",IDC_V,"Button",BS_OWNERDRAW,92,94,14,16\r
+ CONTROL "B",IDC_B,"Button",BS_OWNERDRAW,107,94,14,16\r
+ CONTROL "N",IDC_N,"Button",BS_OWNERDRAW,121,94,14,16\r
+ CONTROL "M",IDC_M,"Button",BS_OWNERDRAW,136,94,14,16\r
+ CONTROL ",",IDC_COMMA,"Button",BS_OWNERDRAW,151,94,14,16\r
+ CONTROL ".",IDC_PERIOD,"Button",BS_OWNERDRAW,166,94,14,16\r
+ CONTROL "/",IDC_SLASH,"Button",BS_OWNERDRAW,181,94,14,16\r
+ CONTROL "\81_",IDC_BACKSLASH2,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,26,279,14,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT,"Button",BS_OWNERDRAW,196,94,41,\r
+ 16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL,"Button",BS_OWNERDRAW,13,111,22,16\r
+ CONTROL "\83~\93c",IDC_LEFT_WINDOWS,"Button",BS_OWNERDRAW,36,111,22,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT,"Button",BS_OWNERDRAW,59,111,22,16\r
+ CONTROL "\96³",IDC_NONCONVERT,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,83,279,14,16\r
+ CONTROL "Space",IDC_SPACE,"Button",BS_OWNERDRAW,82,111,63,16\r
+ CONTROL "\95Ï",IDC_CONVERT,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,\r
+ 44,279,14,16\r
+ CONTROL "\82Ð",IDC_KANA,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,63,\r
+ 279,14,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT,"Button",BS_OWNERDRAW,146,111,22,16\r
+ CONTROL "R\83~\93c",IDC_RIGHT_WINDOWS,"Button",BS_OWNERDRAW,169,111,\r
+ 22,16\r
+ CONTROL "\96Ú\81A",IDC_APPLICATION,"Button",BS_OWNERDRAW,192,111,22,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL,"Button",BS_OWNERDRAW,215,111,22,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT,"Button",BS_OWNERDRAW,242,43,14,16\r
+ CONTROL "Hm",IDC_HOME,"Button",BS_OWNERDRAW,257,43,14,16\r
+ CONTROL "PU",IDC_PAGE_UP,"Button",BS_OWNERDRAW,272,43,14,16\r
+ CONTROL "Del",IDC_DELETE,"Button",BS_OWNERDRAW,242,60,14,16\r
+ CONTROL "End",IDC_END,"Button",BS_OWNERDRAW,257,60,14,16\r
+ CONTROL "PD",IDC_PAGE_DOWN,"Button",BS_OWNERDRAW,272,60,14,16\r
+ CONTROL "Up",IDC_UP,"Button",BS_OWNERDRAW,257,94,14,16\r
+ CONTROL "<-",IDC_LEFT,"Button",BS_OWNERDRAW,242,111,14,16\r
+ CONTROL "Dn",IDC_DOWN,"Button",BS_OWNERDRAW,257,111,14,16\r
+ CONTROL "->",IDC_RIGHT,"Button",BS_OWNERDRAW,272,111,14,16\r
+ CONTROL "NL",IDC_NUM_LOCK,"Button",BS_OWNERDRAW,290,43,14,16\r
+ CONTROL "(/)",IDC_DIVIDE,"Button",BS_OWNERDRAW,305,43,14,16\r
+ CONTROL "*",IDC_MULTIPLY,"Button",BS_OWNERDRAW,320,43,14,16\r
+ CONTROL "(-)",IDC_SUBTRACT,"Button",BS_OWNERDRAW,335,43,14,16\r
+ CONTROL "(7)",IDC_NUMPAD7,"Button",BS_OWNERDRAW,290,60,14,16\r
+ CONTROL "(8)",IDC_NUMPAD8,"Button",BS_OWNERDRAW,305,60,14,16\r
+ CONTROL "(9)",IDC_NUMPAD9,"Button",BS_OWNERDRAW,320,60,14,16\r
+ CONTROL "(4)",IDC_NUMPAD4,"Button",BS_OWNERDRAW,290,77,14,16\r
+ CONTROL "(5)",IDC_NUMPAD5,"Button",BS_OWNERDRAW,305,77,14,16\r
+ CONTROL "(6)",IDC_NUMPAD6,"Button",BS_OWNERDRAW,320,77,14,16\r
+ CONTROL "+",IDC_ADD,"Button",BS_OWNERDRAW,335,60,14,33\r
+ CONTROL "(1)",IDC_NUMPAD1,"Button",BS_OWNERDRAW,290,94,14,16\r
+ CONTROL "(2)",IDC_NUMPAD2,"Button",BS_OWNERDRAW,305,94,14,16\r
+ CONTROL "(3)",IDC_NUMPAD3,"Button",BS_OWNERDRAW,320,94,14,16\r
+ CONTROL "(0)",IDC_NUMPAD0,"Button",BS_OWNERDRAW,290,111,29,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE,"Button",BS_OWNERDRAW,320,111,14,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER,"Button",BS_OWNERDRAW,335,94,14,33\r
+ CONTROL "Esc",IDC_ESC_,"Button",BS_OWNERDRAW,13,158,14,16\r
+ CONTROL "F1",IDC_F1_,"Button",BS_OWNERDRAW,43,158,14,16\r
+ CONTROL "F2",IDC_F2_,"Button",BS_OWNERDRAW,58,158,14,16\r
+ CONTROL "F3",IDC_F3_,"Button",BS_OWNERDRAW,73,158,14,16\r
+ CONTROL "F4",IDC_F4_,"Button",BS_OWNERDRAW,88,158,14,16\r
+ CONTROL "F5",IDC_F5_,"Button",BS_OWNERDRAW,110,158,14,16\r
+ CONTROL "F6",IDC_F6_,"Button",BS_OWNERDRAW,125,158,14,16\r
+ CONTROL "F7",IDC_F7_,"Button",BS_OWNERDRAW,140,158,14,16\r
+ CONTROL "F8",IDC_F8_,"Button",BS_OWNERDRAW,155,158,14,16\r
+ CONTROL "F9",IDC_F9_,"Button",BS_OWNERDRAW,178,158,14,16\r
+ CONTROL "F10",IDC_F10_,"Button",BS_OWNERDRAW,193,158,14,16\r
+ CONTROL "F11",IDC_F11_,"Button",BS_OWNERDRAW,208,158,14,16\r
+ CONTROL "F12",IDC_F12_,"Button",BS_OWNERDRAW,223,158,14,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN_,"Button",BS_OWNERDRAW,242,158,14,\r
+ 16\r
+ CONTROL "SL",IDC_SCROLL_LOCK_,"Button",BS_OWNERDRAW,257,158,14,\r
+ 16\r
+ CONTROL "Pau",IDC_PAUSE_,"Button",BS_OWNERDRAW,272,158,14,16\r
+ CONTROL "`",IDC_BACK_QUOTE_,"Button",BS_OWNERDRAW,13,180,14,16\r
+ CONTROL "1",IDC_1_,"Button",BS_OWNERDRAW,28,180,14,16\r
+ CONTROL "2",IDC_2_,"Button",BS_OWNERDRAW,43,180,14,16\r
+ CONTROL "3",IDC_3_,"Button",BS_OWNERDRAW,58,180,14,16\r
+ CONTROL "4",IDC_4_,"Button",BS_OWNERDRAW,73,180,14,16\r
+ CONTROL "5",IDC_5_,"Button",BS_OWNERDRAW,88,180,14,16\r
+ CONTROL "6",IDC_6_,"Button",BS_OWNERDRAW,103,180,14,16\r
+ CONTROL "7",IDC_7_,"Button",BS_OWNERDRAW,118,180,14,16\r
+ CONTROL "8",IDC_8_,"Button",BS_OWNERDRAW,133,180,14,16\r
+ CONTROL "9",IDC_9_,"Button",BS_OWNERDRAW,148,180,14,16\r
+ CONTROL "0",IDC_0_,"Button",BS_OWNERDRAW,163,180,14,16\r
+ CONTROL "-",IDC_MINUS_,"Button",BS_OWNERDRAW,178,180,14,16\r
+ CONTROL "=",IDC_EQUAL_,"Button",BS_OWNERDRAW,193,180,14,16\r
+ CONTROL "\\",IDC_BACKSLASH1_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,151,279,14,16\r
+ CONTROL "BS",IDC_BACKSPACE_,"Button",BS_OWNERDRAW,208,180,29,16\r
+ CONTROL "Tab",IDC_TAB_,"Button",BS_OWNERDRAW,13,197,22,16\r
+ CONTROL "Q",IDC_Q_,"Button",BS_OWNERDRAW,36,197,14,16\r
+ CONTROL "W",IDC_W_,"Button",BS_OWNERDRAW,51,197,14,16\r
+ CONTROL "E",IDC_E_,"Button",BS_OWNERDRAW,66,197,14,16\r
+ CONTROL "R",IDC_R_,"Button",BS_OWNERDRAW,81,197,14,16\r
+ CONTROL "T",IDC_T_,"Button",BS_OWNERDRAW,96,197,14,16\r
+ CONTROL "Y",IDC_Y_,"Button",BS_OWNERDRAW,111,197,14,16\r
+ CONTROL "U",IDC_U_,"Button",BS_OWNERDRAW,126,197,14,16\r
+ CONTROL "I",IDC_I_,"Button",BS_OWNERDRAW,141,197,14,16\r
+ CONTROL "O",IDC_O_,"Button",BS_OWNERDRAW,156,197,14,16\r
+ CONTROL "P",IDC_P_,"Button",BS_OWNERDRAW,171,197,14,16\r
+ CONTROL "[",IDC_SQUARE_BRA_,"Button",BS_OWNERDRAW,186,197,14,16\r
+ CONTROL "]",IDC_SQUARE_CKET_,"Button",BS_OWNERDRAW,201,197,14,16\r
+ CONTROL "\\",IDC_BACKSLASH_,"Button",BS_OWNERDRAW,216,197,21,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK_,"Button",BS_OWNERDRAW,13,214,25,16\r
+ CONTROL "A",IDC_A_,"Button",BS_OWNERDRAW,39,214,14,16\r
+ CONTROL "S",IDC_S_,"Button",BS_OWNERDRAW,54,214,14,16\r
+ CONTROL "D",IDC_D_,"Button",BS_OWNERDRAW,69,214,14,16\r
+ CONTROL "F",IDC_F_,"Button",BS_OWNERDRAW,84,214,14,16\r
+ CONTROL "G",IDC_G_,"Button",BS_OWNERDRAW,99,214,14,16\r
+ CONTROL "H",IDC_H_,"Button",BS_OWNERDRAW,114,214,14,16\r
+ CONTROL "J",IDC_J_,"Button",BS_OWNERDRAW,129,214,14,16\r
+ CONTROL "K",IDC_K_,"Button",BS_OWNERDRAW,144,214,14,16\r
+ CONTROL "L",IDC_L_,"Button",BS_OWNERDRAW,159,214,14,16\r
+ CONTROL ";",IDC_SEMICOLON_,"Button",BS_OWNERDRAW,174,214,14,16\r
+ CONTROL "'",IDC_QUOTE_,"Button",BS_OWNERDRAW,189,214,14,16\r
+ CONTROL "Enter",IDC_ENTER_,"Button",BS_OWNERDRAW,204,214,33,16\r
+ CONTROL "Shift",IDC_LEFT_SHIFT_,"Button",BS_OWNERDRAW,13,231,33,\r
+ 16\r
+ CONTROL "Z",IDC_Z_,"Button",BS_OWNERDRAW,47,231,14,16\r
+ CONTROL "X",IDC_X_,"Button",BS_OWNERDRAW,62,231,14,16\r
+ CONTROL "C",IDC_C_,"Button",BS_OWNERDRAW,77,231,14,16\r
+ CONTROL "V",IDC_V_,"Button",BS_OWNERDRAW,92,231,14,16\r
+ CONTROL "B",IDC_B_,"Button",BS_OWNERDRAW,107,231,14,16\r
+ CONTROL "N",IDC_N_,"Button",BS_OWNERDRAW,121,231,14,16\r
+ CONTROL "M",IDC_M_,"Button",BS_OWNERDRAW,136,231,14,16\r
+ CONTROL ",",IDC_COMMA_,"Button",BS_OWNERDRAW,151,231,14,16\r
+ CONTROL ".",IDC_PERIOD_,"Button",BS_OWNERDRAW,166,231,14,16\r
+ CONTROL "/",IDC_SLASH_,"Button",BS_OWNERDRAW,181,231,14,16\r
+ CONTROL "\81_",IDC_BACKSLASH2_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,168,279,14,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT_,"Button",BS_OWNERDRAW,196,231,\r
+ 41,16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL_,"Button",BS_OWNERDRAW,13,248,22,16\r
+ CONTROL "\83~\93c",IDC_LEFT_WINDOWS_,"Button",BS_OWNERDRAW,36,248,22,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT_,"Button",BS_OWNERDRAW,59,248,22,16\r
+ CONTROL "\96³",IDC_NONCONVERT_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,226,279,14,16\r
+ CONTROL "Space",IDC_SPACE_,"Button",BS_OWNERDRAW,82,248,63,16\r
+ CONTROL "\95Ï",IDC_CONVERT_,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,\r
+ 187,279,14,16\r
+ CONTROL "\82Ð",IDC_KANA_,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,\r
+ 207,279,14,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT_,"Button",BS_OWNERDRAW,146,248,22,\r
+ 16\r
+ CONTROL "R\83~\93c",IDC_RIGHT_WINDOWS_,"Button",BS_OWNERDRAW,169,248,\r
+ 22,16\r
+ CONTROL "\96Ú\81A",IDC_APPLICATION_,"Button",BS_OWNERDRAW,192,248,22,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL_,"Button",BS_OWNERDRAW,215,248,22,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT_,"Button",BS_OWNERDRAW,242,180,14,16\r
+ CONTROL "Hm",IDC_HOME_,"Button",BS_OWNERDRAW,257,180,14,16\r
+ CONTROL "PU",IDC_PAGE_UP_,"Button",BS_OWNERDRAW,272,180,14,16\r
+ CONTROL "Del",IDC_DELETE_,"Button",BS_OWNERDRAW,242,197,14,16\r
+ CONTROL "End",IDC_END_,"Button",BS_OWNERDRAW,257,197,14,16\r
+ CONTROL "PD",IDC_PAGE_DOWN_,"Button",BS_OWNERDRAW,272,197,14,16\r
+ CONTROL "Up",IDC_UP_,"Button",BS_OWNERDRAW,257,231,14,16\r
+ CONTROL "<-",IDC_LEFT_,"Button",BS_OWNERDRAW,242,248,14,16\r
+ CONTROL "Dn",IDC_DOWN_,"Button",BS_OWNERDRAW,257,248,14,16\r
+ CONTROL "->",IDC_RIGHT_,"Button",BS_OWNERDRAW,272,248,14,16\r
+ CONTROL "NL",IDC_NUM_LOCK_,"Button",BS_OWNERDRAW,290,180,14,16\r
+ CONTROL "(/)",IDC_DIVIDE_,"Button",BS_OWNERDRAW,305,180,14,16\r
+ CONTROL "*",IDC_MULTIPLY_,"Button",BS_OWNERDRAW,320,180,14,16\r
+ CONTROL "(-)",IDC_SUBTRACT_,"Button",BS_OWNERDRAW,335,180,14,16\r
+ CONTROL "(7)",IDC_NUMPAD7_,"Button",BS_OWNERDRAW,290,197,14,16\r
+ CONTROL "(8)",IDC_NUMPAD8_,"Button",BS_OWNERDRAW,305,197,14,16\r
+ CONTROL "(9)",IDC_NUMPAD9_,"Button",BS_OWNERDRAW,320,197,14,16\r
+ CONTROL "(4)",IDC_NUMPAD4_,"Button",BS_OWNERDRAW,290,214,14,16\r
+ CONTROL "(5)",IDC_NUMPAD5_,"Button",BS_OWNERDRAW,305,214,14,16\r
+ CONTROL "(6)",IDC_NUMPAD6_,"Button",BS_OWNERDRAW,320,214,14,16\r
+ CONTROL "+",IDC_ADD_,"Button",BS_OWNERDRAW,335,197,14,33\r
+ CONTROL "(1)",IDC_NUMPAD1_,"Button",BS_OWNERDRAW,290,231,14,16\r
+ CONTROL "(2)",IDC_NUMPAD2_,"Button",BS_OWNERDRAW,305,231,14,16\r
+ CONTROL "(3)",IDC_NUMPAD3_,"Button",BS_OWNERDRAW,320,231,14,16\r
+ CONTROL "(0)",IDC_NUMPAD0_,"Button",BS_OWNERDRAW,290,248,29,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE_,"Button",BS_OWNERDRAW,320,248,14,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER_,"Button",BS_OWNERDRAW,335,231,14,\r
+ 33\r
+ GROUPBOX "\83x\81[\83X\83L\81[\83{\81[\83h",IDC_STATIC,7,7,349,130\r
+ GROUPBOX "\83\8a\83}\83b\83v\83L\81[\83{\81[\83h",IDC_STATIC,7,144,349,130\r
+ CONTROL "Pw",IDC_ACPI_POWER,"Button",BS_OWNERDRAW,335,21,14,16\r
+ CONTROL "Pw",IDC_ACPI_POWER_,"Button",BS_OWNERDRAW,335,158,14,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP,"Button",BS_OWNERDRAW,320,21,14,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP_,"Button",BS_OWNERDRAW,320,158,14,\r
+ 16\r
+ CONTROL "Wk",IDC_ACPI_WAKE,"Button",BS_OWNERDRAW,305,21,14,16\r
+ CONTROL "Wk",IDC_ACPI_WAKE_,"Button",BS_OWNERDRAW,305,158,14,16\r
+END\r
+\r
+IDD_109KEYBOARD DIALOG DISCARDABLE 0, 0, 362, 303\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\83L\81[\83{\81[\83h\83\8c\83C\83A\83E\83g"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,248,281,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,306,281,50,14\r
+ CONTROL "Esc",IDC_ESC,"Button",BS_OWNERDRAW,13,21,14,16\r
+ CONTROL "F1",IDC_F1,"Button",BS_OWNERDRAW,43,21,14,16\r
+ CONTROL "F2",IDC_F2,"Button",BS_OWNERDRAW,58,21,14,16\r
+ CONTROL "F3",IDC_F3,"Button",BS_OWNERDRAW,73,21,14,16\r
+ CONTROL "F4",IDC_F4,"Button",BS_OWNERDRAW,88,21,14,16\r
+ CONTROL "F5",IDC_F5,"Button",BS_OWNERDRAW,110,21,14,16\r
+ CONTROL "F6",IDC_F6,"Button",BS_OWNERDRAW,125,21,14,16\r
+ CONTROL "F7",IDC_F7,"Button",BS_OWNERDRAW,140,21,14,16\r
+ CONTROL "F8",IDC_F8,"Button",BS_OWNERDRAW,155,21,14,16\r
+ CONTROL "F9",IDC_F9,"Button",BS_OWNERDRAW,178,21,14,16\r
+ CONTROL "F10",IDC_F10,"Button",BS_OWNERDRAW,193,21,14,16\r
+ CONTROL "F11",IDC_F11,"Button",BS_OWNERDRAW,208,21,14,16\r
+ CONTROL "F12",IDC_F12,"Button",BS_OWNERDRAW,223,21,14,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN,"Button",BS_OWNERDRAW,242,21,14,16\r
+ CONTROL "SL",IDC_SCROLL_LOCK,"Button",BS_OWNERDRAW,257,21,14,16\r
+ CONTROL "Pau",IDC_PAUSE,"Button",BS_OWNERDRAW,272,21,14,16\r
+ CONTROL "\94¼",IDC_BACK_QUOTE,"Button",BS_OWNERDRAW,13,43,14,16\r
+ CONTROL "1",IDC_1,"Button",BS_OWNERDRAW,28,43,14,16\r
+ CONTROL "2",IDC_2,"Button",BS_OWNERDRAW,43,43,14,16\r
+ CONTROL "3",IDC_3,"Button",BS_OWNERDRAW,58,43,14,16\r
+ CONTROL "4",IDC_4,"Button",BS_OWNERDRAW,73,43,14,16\r
+ CONTROL "5",IDC_5,"Button",BS_OWNERDRAW,88,43,14,16\r
+ CONTROL "6",IDC_6,"Button",BS_OWNERDRAW,103,43,14,16\r
+ CONTROL "7",IDC_7,"Button",BS_OWNERDRAW,118,43,14,16\r
+ CONTROL "8",IDC_8,"Button",BS_OWNERDRAW,133,43,14,16\r
+ CONTROL "9",IDC_9,"Button",BS_OWNERDRAW,148,43,14,16\r
+ CONTROL "0",IDC_0,"Button",BS_OWNERDRAW,163,43,14,16\r
+ CONTROL "-",IDC_MINUS,"Button",BS_OWNERDRAW,178,43,14,16\r
+ CONTROL "^",IDC_EQUAL,"Button",BS_OWNERDRAW,193,43,14,16\r
+ CONTROL "\\",IDC_BACKSLASH1,"Button",BS_OWNERDRAW,208,43,14,16\r
+ CONTROL "BS",IDC_BACKSPACE,"Button",BS_OWNERDRAW,223,43,14,16\r
+ CONTROL "Tab",IDC_TAB,"Button",BS_OWNERDRAW,13,60,22,16\r
+ CONTROL "Q",IDC_Q,"Button",BS_OWNERDRAW,36,60,14,16\r
+ CONTROL "W",IDC_W,"Button",BS_OWNERDRAW,51,60,14,16\r
+ CONTROL "E",IDC_E,"Button",BS_OWNERDRAW,66,60,14,16\r
+ CONTROL "R",IDC_R,"Button",BS_OWNERDRAW,81,60,14,16\r
+ CONTROL "T",IDC_T,"Button",BS_OWNERDRAW,96,60,14,16\r
+ CONTROL "Y",IDC_Y,"Button",BS_OWNERDRAW,111,60,14,16\r
+ CONTROL "U",IDC_U,"Button",BS_OWNERDRAW,126,60,14,16\r
+ CONTROL "I",IDC_I,"Button",BS_OWNERDRAW,141,60,14,16\r
+ CONTROL "O",IDC_O,"Button",BS_OWNERDRAW,156,60,14,16\r
+ CONTROL "P",IDC_P,"Button",BS_OWNERDRAW,171,60,14,16\r
+ CONTROL "@",IDC_SQUARE_BRA,"Button",BS_OWNERDRAW,186,60,14,16\r
+ CONTROL "[",IDC_SQUARE_CKET,"Button",BS_OWNERDRAW,201,60,16,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK,"Button",BS_OWNERDRAW,13,77,25,16\r
+ CONTROL "A",IDC_A,"Button",BS_OWNERDRAW,39,77,14,16\r
+ CONTROL "S",IDC_S,"Button",BS_OWNERDRAW,54,77,14,16\r
+ CONTROL "D",IDC_D,"Button",BS_OWNERDRAW,69,77,14,16\r
+ CONTROL "F",IDC_F,"Button",BS_OWNERDRAW,84,77,14,16\r
+ CONTROL "G",IDC_G,"Button",BS_OWNERDRAW,99,77,14,16\r
+ CONTROL "H",IDC_H,"Button",BS_OWNERDRAW,114,77,14,16\r
+ CONTROL "J",IDC_J,"Button",BS_OWNERDRAW,129,77,14,16\r
+ CONTROL "K",IDC_K,"Button",BS_OWNERDRAW,144,77,14,16\r
+ CONTROL "L",IDC_L,"Button",BS_OWNERDRAW,159,77,14,16\r
+ CONTROL ";",IDC_SEMICOLON,"Button",BS_OWNERDRAW,174,77,14,16\r
+ CONTROL ":",IDC_QUOTE,"Button",BS_OWNERDRAW,189,77,14,16\r
+ CONTROL "]",IDC_BACKSLASH,"Button",BS_OWNERDRAW,204,77,14,16\r
+ CONTROL "Enter",IDC_ENTER,"Button",BS_OWNERDRAW,219,60,18,33\r
+ CONTROL "Shift",IDC_LEFT_SHIFT,"Button",BS_OWNERDRAW,13,94,33,16\r
+ CONTROL "Z",IDC_Z,"Button",BS_OWNERDRAW,47,94,14,16\r
+ CONTROL "X",IDC_X,"Button",BS_OWNERDRAW,62,94,14,16\r
+ CONTROL "C",IDC_C,"Button",BS_OWNERDRAW,77,94,14,16\r
+ CONTROL "V",IDC_V,"Button",BS_OWNERDRAW,92,94,14,16\r
+ CONTROL "B",IDC_B,"Button",BS_OWNERDRAW,107,94,14,16\r
+ CONTROL "N",IDC_N,"Button",BS_OWNERDRAW,121,94,14,16\r
+ CONTROL "M",IDC_M,"Button",BS_OWNERDRAW,136,94,14,16\r
+ CONTROL ",",IDC_COMMA,"Button",BS_OWNERDRAW,151,94,14,16\r
+ CONTROL ".",IDC_PERIOD,"Button",BS_OWNERDRAW,166,94,14,16\r
+ CONTROL "/",IDC_SLASH,"Button",BS_OWNERDRAW,181,94,14,16\r
+ CONTROL "\81_",IDC_BACKSLASH2,"Button",BS_OWNERDRAW,196,94,14,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT,"Button",BS_OWNERDRAW,211,94,26,\r
+ 16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL,"Button",BS_OWNERDRAW,13,111,18,16\r
+ CONTROL "\83~\93c",IDC_LEFT_WINDOWS,"Button",BS_OWNERDRAW,32,111,14,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT,"Button",BS_OWNERDRAW,47,111,18,16\r
+ CONTROL "\96³",IDC_NONCONVERT,"Button",BS_OWNERDRAW,66,111,14,16\r
+ CONTROL "Space",IDC_SPACE,"Button",BS_OWNERDRAW,81,111,57,16\r
+ CONTROL "\95Ï",IDC_CONVERT,"Button",BS_OWNERDRAW,139,111,14,16\r
+ CONTROL "\82Ð",IDC_KANA,"Button",BS_OWNERDRAW,154,111,14,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT,"Button",BS_OWNERDRAW,170,111,18,16\r
+ CONTROL "R\93c",IDC_RIGHT_WINDOWS,"Button",BS_OWNERDRAW,189,111,14,\r
+ 16\r
+ CONTROL "\96Ú\81A",IDC_APPLICATION,"Button",BS_OWNERDRAW,204,111,14,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL,"Button",BS_OWNERDRAW,219,111,18,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT,"Button",BS_OWNERDRAW,242,43,14,16\r
+ CONTROL "Hm",IDC_HOME,"Button",BS_OWNERDRAW,257,43,14,16\r
+ CONTROL "PU",IDC_PAGE_UP,"Button",BS_OWNERDRAW,272,43,14,16\r
+ CONTROL "Del",IDC_DELETE,"Button",BS_OWNERDRAW,242,60,14,16\r
+ CONTROL "End",IDC_END,"Button",BS_OWNERDRAW,257,60,14,16\r
+ CONTROL "PD",IDC_PAGE_DOWN,"Button",BS_OWNERDRAW,272,60,14,16\r
+ CONTROL "Up",IDC_UP,"Button",BS_OWNERDRAW,257,94,14,16\r
+ CONTROL "<-",IDC_LEFT,"Button",BS_OWNERDRAW,242,111,14,16\r
+ CONTROL "Dn",IDC_DOWN,"Button",BS_OWNERDRAW,257,111,14,16\r
+ CONTROL "->",IDC_RIGHT,"Button",BS_OWNERDRAW,272,111,14,16\r
+ CONTROL "NL",IDC_NUM_LOCK,"Button",BS_OWNERDRAW,290,43,14,16\r
+ CONTROL "(/)",IDC_DIVIDE,"Button",BS_OWNERDRAW,305,43,14,16\r
+ CONTROL "*",IDC_MULTIPLY,"Button",BS_OWNERDRAW,320,43,14,16\r
+ CONTROL "(-)",IDC_SUBTRACT,"Button",BS_OWNERDRAW,335,43,14,16\r
+ CONTROL "(7)",IDC_NUMPAD7,"Button",BS_OWNERDRAW,290,60,14,16\r
+ CONTROL "(8)",IDC_NUMPAD8,"Button",BS_OWNERDRAW,305,60,14,16\r
+ CONTROL "(9)",IDC_NUMPAD9,"Button",BS_OWNERDRAW,320,60,14,16\r
+ CONTROL "(4)",IDC_NUMPAD4,"Button",BS_OWNERDRAW,290,77,14,16\r
+ CONTROL "(5)",IDC_NUMPAD5,"Button",BS_OWNERDRAW,305,77,14,16\r
+ CONTROL "(6)",IDC_NUMPAD6,"Button",BS_OWNERDRAW,320,77,14,16\r
+ CONTROL "+",IDC_ADD,"Button",BS_OWNERDRAW,335,60,14,33\r
+ CONTROL "(1)",IDC_NUMPAD1,"Button",BS_OWNERDRAW,290,94,14,16\r
+ CONTROL "(2)",IDC_NUMPAD2,"Button",BS_OWNERDRAW,305,94,14,16\r
+ CONTROL "(3)",IDC_NUMPAD3,"Button",BS_OWNERDRAW,320,94,14,16\r
+ CONTROL "(0)",IDC_NUMPAD0,"Button",BS_OWNERDRAW,290,111,29,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE,"Button",BS_OWNERDRAW,320,111,14,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER,"Button",BS_OWNERDRAW,335,94,14,33\r
+ CONTROL "Esc",IDC_ESC_,"Button",BS_OWNERDRAW,13,158,14,16\r
+ CONTROL "F1",IDC_F1_,"Button",BS_OWNERDRAW,43,158,14,16\r
+ CONTROL "F2",IDC_F2_,"Button",BS_OWNERDRAW,58,158,14,16\r
+ CONTROL "F3",IDC_F3_,"Button",BS_OWNERDRAW,73,158,14,16\r
+ CONTROL "F4",IDC_F4_,"Button",BS_OWNERDRAW,88,158,14,16\r
+ CONTROL "F5",IDC_F5_,"Button",BS_OWNERDRAW,110,158,14,16\r
+ CONTROL "F6",IDC_F6_,"Button",BS_OWNERDRAW,125,158,14,16\r
+ CONTROL "F7",IDC_F7_,"Button",BS_OWNERDRAW,140,158,14,16\r
+ CONTROL "F8",IDC_F8_,"Button",BS_OWNERDRAW,155,158,14,16\r
+ CONTROL "F9",IDC_F9_,"Button",BS_OWNERDRAW,178,158,14,16\r
+ CONTROL "F10",IDC_F10_,"Button",BS_OWNERDRAW,193,158,14,16\r
+ CONTROL "F11",IDC_F11_,"Button",BS_OWNERDRAW,208,158,14,16\r
+ CONTROL "F12",IDC_F12_,"Button",BS_OWNERDRAW,223,158,14,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN_,"Button",BS_OWNERDRAW,242,158,14,\r
+ 16\r
+ CONTROL "SL",IDC_SCROLL_LOCK_,"Button",BS_OWNERDRAW,257,158,14,\r
+ 16\r
+ CONTROL "Pau",IDC_PAUSE_,"Button",BS_OWNERDRAW,272,158,14,16\r
+ CONTROL "\94¼",IDC_BACK_QUOTE_,"Button",BS_OWNERDRAW,13,180,14,16\r
+ CONTROL "1",IDC_1_,"Button",BS_OWNERDRAW,28,180,14,16\r
+ CONTROL "2",IDC_2_,"Button",BS_OWNERDRAW,43,180,14,16\r
+ CONTROL "3",IDC_3_,"Button",BS_OWNERDRAW,58,180,14,16\r
+ CONTROL "4",IDC_4_,"Button",BS_OWNERDRAW,73,180,14,16\r
+ CONTROL "5",IDC_5_,"Button",BS_OWNERDRAW,88,180,14,16\r
+ CONTROL "6",IDC_6_,"Button",BS_OWNERDRAW,103,180,14,16\r
+ CONTROL "7",IDC_7_,"Button",BS_OWNERDRAW,118,180,14,16\r
+ CONTROL "8",IDC_8_,"Button",BS_OWNERDRAW,133,180,14,16\r
+ CONTROL "9",IDC_9_,"Button",BS_OWNERDRAW,148,180,14,16\r
+ CONTROL "0",IDC_0_,"Button",BS_OWNERDRAW,163,180,14,16\r
+ CONTROL "-",IDC_MINUS_,"Button",BS_OWNERDRAW,178,180,14,16\r
+ CONTROL "^",IDC_EQUAL_,"Button",BS_OWNERDRAW,193,180,14,16\r
+ CONTROL "\\",IDC_BACKSLASH1_,"Button",BS_OWNERDRAW,208,180,14,16\r
+ CONTROL "BS",IDC_BACKSPACE_,"Button",BS_OWNERDRAW,223,180,14,16\r
+ CONTROL "Tab",IDC_TAB_,"Button",BS_OWNERDRAW,13,197,22,16\r
+ CONTROL "Q",IDC_Q_,"Button",BS_OWNERDRAW,36,197,14,16\r
+ CONTROL "W",IDC_W_,"Button",BS_OWNERDRAW,51,197,14,16\r
+ CONTROL "E",IDC_E_,"Button",BS_OWNERDRAW,66,197,14,16\r
+ CONTROL "R",IDC_R_,"Button",BS_OWNERDRAW,81,197,14,16\r
+ CONTROL "T",IDC_T_,"Button",BS_OWNERDRAW,96,197,14,16\r
+ CONTROL "Y",IDC_Y_,"Button",BS_OWNERDRAW,111,197,14,16\r
+ CONTROL "U",IDC_U_,"Button",BS_OWNERDRAW,126,197,14,16\r
+ CONTROL "I",IDC_I_,"Button",BS_OWNERDRAW,141,197,14,16\r
+ CONTROL "O",IDC_O_,"Button",BS_OWNERDRAW,156,197,14,16\r
+ CONTROL "P",IDC_P_,"Button",BS_OWNERDRAW,171,197,14,16\r
+ CONTROL "@",IDC_SQUARE_BRA_,"Button",BS_OWNERDRAW,186,197,14,16\r
+ CONTROL "[",IDC_SQUARE_CKET_,"Button",BS_OWNERDRAW,201,197,16,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK_,"Button",BS_OWNERDRAW,13,214,25,16\r
+ CONTROL "A",IDC_A_,"Button",BS_OWNERDRAW,39,214,14,16\r
+ CONTROL "S",IDC_S_,"Button",BS_OWNERDRAW,54,214,14,16\r
+ CONTROL "D",IDC_D_,"Button",BS_OWNERDRAW,69,214,14,16\r
+ CONTROL "F",IDC_F_,"Button",BS_OWNERDRAW,84,214,14,16\r
+ CONTROL "G",IDC_G_,"Button",BS_OWNERDRAW,99,214,14,16\r
+ CONTROL "H",IDC_H_,"Button",BS_OWNERDRAW,114,214,14,16\r
+ CONTROL "J",IDC_J_,"Button",BS_OWNERDRAW,129,214,14,16\r
+ CONTROL "K",IDC_K_,"Button",BS_OWNERDRAW,144,214,14,16\r
+ CONTROL "L",IDC_L_,"Button",BS_OWNERDRAW,159,214,14,16\r
+ CONTROL ";",IDC_SEMICOLON_,"Button",BS_OWNERDRAW,174,214,14,16\r
+ CONTROL ":",IDC_QUOTE_,"Button",BS_OWNERDRAW,189,214,14,16\r
+ CONTROL "]",IDC_BACKSLASH_,"Button",BS_OWNERDRAW,204,214,14,16\r
+ CONTROL "Enter",IDC_ENTER_,"Button",BS_OWNERDRAW,219,197,18,33\r
+ CONTROL "Shift",IDC_LEFT_SHIFT_,"Button",BS_OWNERDRAW,13,231,33,\r
+ 16\r
+ CONTROL "Z",IDC_Z_,"Button",BS_OWNERDRAW,47,231,14,16\r
+ CONTROL "X",IDC_X_,"Button",BS_OWNERDRAW,62,231,14,16\r
+ CONTROL "C",IDC_C_,"Button",BS_OWNERDRAW,77,231,14,16\r
+ CONTROL "V",IDC_V_,"Button",BS_OWNERDRAW,92,231,14,16\r
+ CONTROL "B",IDC_B_,"Button",BS_OWNERDRAW,107,231,14,16\r
+ CONTROL "N",IDC_N_,"Button",BS_OWNERDRAW,121,231,14,16\r
+ CONTROL "M",IDC_M_,"Button",BS_OWNERDRAW,136,231,14,16\r
+ CONTROL ",",IDC_COMMA_,"Button",BS_OWNERDRAW,151,231,14,16\r
+ CONTROL ".",IDC_PERIOD_,"Button",BS_OWNERDRAW,166,231,14,16\r
+ CONTROL "/",IDC_SLASH_,"Button",BS_OWNERDRAW,181,231,14,16\r
+ CONTROL "\81_",IDC_BACKSLASH2_,"Button",BS_OWNERDRAW,196,231,14,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT_,"Button",BS_OWNERDRAW,211,231,\r
+ 26,16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL_,"Button",BS_OWNERDRAW,13,248,18,16\r
+ CONTROL "\83~\93c",IDC_LEFT_WINDOWS_,"Button",BS_OWNERDRAW,32,248,14,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT_,"Button",BS_OWNERDRAW,47,248,18,16\r
+ CONTROL "\96³",IDC_NONCONVERT_,"Button",BS_OWNERDRAW,66,248,14,16\r
+ CONTROL "Space",IDC_SPACE_,"Button",BS_OWNERDRAW,81,248,57,16\r
+ CONTROL "\95Ï",IDC_CONVERT_,"Button",BS_OWNERDRAW,139,248,14,16\r
+ CONTROL "\82Ð",IDC_KANA_,"Button",BS_OWNERDRAW,154,248,14,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT_,"Button",BS_OWNERDRAW,170,248,18,\r
+ 16\r
+ CONTROL "R\93c",IDC_RIGHT_WINDOWS_,"Button",BS_OWNERDRAW,189,248,\r
+ 14,16\r
+ CONTROL "\96Ú\81A",IDC_APPLICATION_,"Button",BS_OWNERDRAW,204,248,14,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL_,"Button",BS_OWNERDRAW,219,248,18,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT_,"Button",BS_OWNERDRAW,242,180,14,16\r
+ CONTROL "Hm",IDC_HOME_,"Button",BS_OWNERDRAW,257,180,14,16\r
+ CONTROL "PU",IDC_PAGE_UP_,"Button",BS_OWNERDRAW,272,180,14,16\r
+ CONTROL "Del",IDC_DELETE_,"Button",BS_OWNERDRAW,242,197,14,16\r
+ CONTROL "End",IDC_END_,"Button",BS_OWNERDRAW,257,197,14,16\r
+ CONTROL "PD",IDC_PAGE_DOWN_,"Button",BS_OWNERDRAW,272,197,14,16\r
+ CONTROL "Up",IDC_UP_,"Button",BS_OWNERDRAW,257,231,14,16\r
+ CONTROL "<-",IDC_LEFT_,"Button",BS_OWNERDRAW,242,248,14,16\r
+ CONTROL "Dn",IDC_DOWN_,"Button",BS_OWNERDRAW,257,248,14,16\r
+ CONTROL "->",IDC_RIGHT_,"Button",BS_OWNERDRAW,272,248,14,16\r
+ CONTROL "NL",IDC_NUM_LOCK_,"Button",BS_OWNERDRAW,290,180,14,16\r
+ CONTROL "(/)",IDC_DIVIDE_,"Button",BS_OWNERDRAW,305,180,14,16\r
+ CONTROL "*",IDC_MULTIPLY_,"Button",BS_OWNERDRAW,320,180,14,16\r
+ CONTROL "(-)",IDC_SUBTRACT_,"Button",BS_OWNERDRAW,335,180,14,16\r
+ CONTROL "(7)",IDC_NUMPAD7_,"Button",BS_OWNERDRAW,290,197,14,16\r
+ CONTROL "(8)",IDC_NUMPAD8_,"Button",BS_OWNERDRAW,305,197,14,16\r
+ CONTROL "(9)",IDC_NUMPAD9_,"Button",BS_OWNERDRAW,320,197,14,16\r
+ CONTROL "(4)",IDC_NUMPAD4_,"Button",BS_OWNERDRAW,290,214,14,16\r
+ CONTROL "(5)",IDC_NUMPAD5_,"Button",BS_OWNERDRAW,305,214,14,16\r
+ CONTROL "(6)",IDC_NUMPAD6_,"Button",BS_OWNERDRAW,320,214,14,16\r
+ CONTROL "+",IDC_ADD_,"Button",BS_OWNERDRAW,335,197,14,33\r
+ CONTROL "(1)",IDC_NUMPAD1_,"Button",BS_OWNERDRAW,290,231,14,16\r
+ CONTROL "(2)",IDC_NUMPAD2_,"Button",BS_OWNERDRAW,305,231,14,16\r
+ CONTROL "(3)",IDC_NUMPAD3_,"Button",BS_OWNERDRAW,320,231,14,16\r
+ CONTROL "(0)",IDC_NUMPAD0_,"Button",BS_OWNERDRAW,290,248,29,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE_,"Button",BS_OWNERDRAW,320,248,14,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER_,"Button",BS_OWNERDRAW,335,231,14,\r
+ 33\r
+ GROUPBOX "\83x\81[\83X\83L\81[\83{\81[\83h",IDC_STATIC,7,7,349,130\r
+ GROUPBOX "\83\8a\83}\83b\83v\83L\81[\83{\81[\83h",IDC_STATIC,7,144,349,130\r
+ CONTROL "Pw",IDC_ACPI_POWER,"Button",BS_OWNERDRAW,335,21,14,16\r
+ CONTROL "Pw",IDC_ACPI_POWER_,"Button",BS_OWNERDRAW,335,158,14,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP,"Button",BS_OWNERDRAW,320,21,14,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP_,"Button",BS_OWNERDRAW,320,158,14,\r
+ 16\r
+ CONTROL "Wk",IDC_ACPI_WAKE,"Button",BS_OWNERDRAW,305,21,14,16\r
+ CONTROL "Wk",IDC_ACPI_WAKE_,"Button",BS_OWNERDRAW,305,158,14,16\r
+END\r
+\r
+IDD_PROPERTIES DIALOGEX 0, 0, 362, 304\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\83v\83\8d\83p\83e\83B"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+ COMBOBOX IDC_APPLICATION,7,7,253,246,CBS_DROPDOWNLIST | CBS_SORT | \r
+ WS_VSCROLL | WS_TABSTOP\r
+ CONTROL "\95W\8f\80\82Ì\90Ý\92è\82ð\8eg\97p\82·\82é",IDC_SETTING_DEFAULT,"Button",\r
+ BS_AUTORADIOBUTTON | WS_GROUP,267,7,83,10\r
+ CONTROL "\93Æ\8e©\82Ì\90Ý\92è\82ð\8eg\97p\82·\82é",IDC_SETTING_SPECIFIC,"Button",\r
+ BS_AUTORADIOBUTTON,267,17,80,10\r
+ CONTROL "XKeymacs \82ð\96³\8cø\82É\82·\82é",IDC_SETTING_DISABLE,"Button",\r
+ BS_AUTORADIOBUTTON,267,27,80,10\r
+ CONTROL "",IDC_TAB,"Static",SS_BLACKFRAME | WS_GROUP,9,45,342,\r
+ 233\r
+ CONTROL "\83_\83C\83A\83\8d\83O\82É\82Í\83_\83C\83A\83\8d\83O\90ê\97p\82Ì\90Ý\92è\82ð\97\98\97p\82·\82é",\r
+ IDC_USE_DIALOG_SETTING,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,15,27,148,10\r
+ PUSHBUTTON "Load Default",IDC_LOAD_DEFAULT,7,283,50,14\r
+ PUSHBUTTON "Select All",IDC_SELECT_ALL,63,283,50,14\r
+ PUSHBUTTON "Clear All",IDC_CLEAR_ALL,120,283,50,14\r
+ DEFPUSHBUTTON "OK",IDOK,193,283,50,14\r
+ PUSHBUTTON "\83L\83\83\83\93\83Z\83\8b",IDCANCEL,249,283,50,14\r
+ PUSHBUTTON "\93K\97p(&A)",IDC_APPLY,305,283,50,14\r
+ LTEXT "kill-ring-max: ",IDC_STATIC,196,28,41,8\r
+ EDITTEXT IDC_KILL_RING_MAX,240,26,20,12,ES_AUTOHSCROLL | \r
+ ES_NUMBER,WS_EX_RIGHT\r
+ EDITTEXT IDC_WINDOW_TEXT,109,33,40,14,ES_AUTOHSCROLL | NOT \r
+ WS_VISIBLE\r
+ LTEXT "\82Ì\82Æ\82«\82Ì\82Ý\93K\97p",IDC_STATIC,157,38,44,8,NOT WS_VISIBLE\r
+ LTEXT "\83^\83C\83g\83\8b\82ª",IDC_STATIC,63,39,29,8,NOT WS_VISIBLE\r
+END\r
+\r
+IDD_PROPERTIES_BASIC DIALOG DISCARDABLE 0, 0, 344, 215\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\8aî\96{"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ GROUPBOX "\8fÁ\8b\8e\81A\95Ò\8fW",IDC_KILL,140,7,91,84\r
+ GROUPBOX "\83G\83\89\81[\83\8a\83J\83o\83\8a\81[",IDC_RECOVERY,140,92,91,69\r
+ CONTROL "C-x C-f",IDC_CXCF,"Button",BS_AUTOCHECKBOX | WS_GROUP | \r
+ WS_TABSTOP,15,17,37,10\r
+ CONTROL "C-x k",IDC_CXK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 29,34,10\r
+ CONTROL "C-x C-s",IDC_CXCS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,41,38,10\r
+ CONTROL "C-x C-w",IDC_CXCW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,53,40,10\r
+ GROUPBOX "\83t\83@\83C\83\8b",IDC_FILES,7,7,54,71\r
+ CONTROL "C-s",IDC_CS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,89,\r
+ 26,10\r
+ CONTROL "C-r",IDC_CR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 101,25,10\r
+ CONTROL "M-%",IDC_MS5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 113,29,10\r
+ CONTROL "C-M-%",IDC_CMS5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,125,36,10\r
+ GROUPBOX "\8c\9f\8dõ\81A\92u\8a·",IDC_SEARCH,7,79,54,82\r
+ CONTROL "C-z",IDC_CZ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 173,26,10\r
+ CONTROL "C-x C-c",IDC_CXCC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 73,173,39,10\r
+ CONTROL "M-F12",IDC_MF12,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,185,37,10\r
+ GROUPBOX "\83A\83N\83e\83B\83u\83E\83B\83\93\83h\83E\82©\82ç\97£\82ê\82é",IDC_WINDOW,7,163,128,45\r
+ CONTROL "C-b",IDC_CB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,17,\r
+ 27,10\r
+ CONTROL "C-f",IDC_CF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,\r
+ 17,25,10\r
+ CONTROL "M-b",IDC_MB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,29,\r
+ 26,10\r
+ CONTROL "M-f",IDC_MF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,\r
+ 29,26,10\r
+ CONTROL "C-p",IDC_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,41,\r
+ 27,10\r
+ CONTROL "C-n",IDC_CN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,\r
+ 41,27,10\r
+ CONTROL "C-a",IDC_CA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,53,\r
+ 27,10\r
+ CONTROL "C-e",IDC_CE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,\r
+ 53,27,10\r
+ CONTROL "M-<",IDC_MSCOMMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 73,65,28,10\r
+ CONTROL "M->",IDC_MSPERIOD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 73,77,28,10\r
+ CONTROL "M-v",IDC_MV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,89,\r
+ 28,10\r
+ CONTROL "C-v",IDC_CV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,106,\r
+ 89,27,10\r
+ CONTROL "C-l",IDC_CL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,73,\r
+ 101,24,10\r
+ GROUPBOX "\88Ú\93®",IDC_MOTION,65,7,70,154\r
+ CONTROL "C-d",IDC_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 17,27,10\r
+ CONTROL "C-h",IDC_CH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 17,26,10\r
+ CONTROL "C-w",IDC_CW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 29,28,10\r
+ CONTROL "M-w",IDC_MW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 29,29,10\r
+ CONTROL "C-k",IDC_CK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 41,27,10\r
+ CONTROL "M-t",IDC_MT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 41,29,10\r
+ CONTROL "M-DEL",IDC_MDEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 148,53,35,10\r
+ CONTROL "M-d",IDC_MD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 53,28,10\r
+ CONTROL "C-y",IDC_CY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 65,26,10\r
+ CONTROL "M-y",IDC_MY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 65,27,10\r
+ CONTROL "C-t",IDC_CT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 77,24,10\r
+ CONTROL "C-x C-t",IDC_CXCT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 188,77,35,10\r
+ CONTROL "C-x u",IDC_CXU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 148,101,32,10\r
+ CONTROL "C-/",IDC_CSLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 148,113,26,10\r
+ CONTROL "C-_",IDC_C_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 125,46,10\r
+ CONTROL "C-g",IDC_CG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,148,\r
+ 137,27,10\r
+ CONTROL "C-x C-j",IDC_CXCJ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 148,173,36,10\r
+ CONTROL "C-o",IDC_CO2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,\r
+ 173,25,10\r
+ CONTROL "C-\\",IDC_CBACKSLASH,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,188,185,24,10\r
+ CONTROL "C-\81_",IDC_CBACKSLASH_106,"Button",BS_AUTOCHECKBOX | \r
+ BS_MULTILINE | WS_TABSTOP,148,185,32,9\r
+ GROUPBOX "IME \82Ì\90Ø\91Ö\82¦",IDC_IME,140,163,90,45\r
+ CONTROL "C-Space",IDC_CSPACE,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,243,17,43,10\r
+ CONTROL "C-x h",IDC_CXH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,29,32,10\r
+ CONTROL "C-x C-p",IDC_CXCP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 289,30,39,10\r
+ CONTROL "C-u",IDC_CU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 41,26,10\r
+ CONTROL "C-0 ... C-9",IDC_CDIGIT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,289,41,45,10\r
+ CONTROL "Left Alt",IDC_LEFT_ALT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,243,53,38,10\r
+ CONTROL "Right Alt",IDC_RIGHT_ALT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,289,53,41,10\r
+ CONTROL "Alt",IDC_ALT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | \r
+ WS_TABSTOP,243,53,37,10\r
+ CONTROL "Esc",IDC_ESCAPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,65,28,10\r
+ CONTROL "C-[",IDC_SQUARE_BRA,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,289,65,25,10\r
+ CONTROL "C-m",IDC_CM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 77,28,10\r
+ CONTROL "C-o",IDC_CO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,289,\r
+ 77,27,10\r
+ CONTROL "C-i",IDC_CI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 89,24,10\r
+ CONTROL "M-i",IDC_MI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,289,\r
+ 89,25,10\r
+ CONTROL "M-!",IDC_MS1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 101,26,10\r
+ CONTROL "M-x",IDC_MX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,289,\r
+ 101,29,10\r
+ CONTROL "C-q",IDC_CQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 113,28,10\r
+ CONTROL "C-x (",IDC_CXS9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,125,30,10\r
+ CONTROL "C-x )",IDC_CXS0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,137,31,10\r
+ CONTROL "C-x e",IDC_CXE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,149,32,10\r
+ GROUPBOX "\82»\82Ì\91¼",IDC_OTHER,235,7,102,201\r
+ CONTROL "C-x b",IDC_CXB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 243,161,33,10\r
+ CONTROL "M-l",IDC_ML,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 173,27,10\r
+ CONTROL "M-u",IDC_MU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,289,\r
+ 173,29,10\r
+ CONTROL "M-c",IDC_MC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,\r
+ 185,29,10\r
+END\r
+\r
+IDD_PROPERTIES_ADVANCED DIALOG DISCARDABLE 0, 0, 344, 215\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\8fÚ\8d×"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ LTEXT "\83J\83e\83S\83\8a(&C):",IDC_STATIC,7,7,31,8\r
+ COMBOBOX IDC_CATEGORY,7,17,106,132,CBS_DROPDOWNLIST | CBS_SORT | \r
+ WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "\83R\83}\83\93\83h(&O):",IDC_STATIC,7,31,38,8\r
+ LISTBOX IDC_COMMANDS,7,41,180,116,LBS_SORT | \r
+ LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "\90à\96¾:",IDC_STATIC,7,160,17,8\r
+ LTEXT "brank",IDC_DESCRIPTION,7,169,180,39\r
+ LTEXT "\8c»\8dÝ\82Ì\83L\81[(&U):",IDC_STATIC,194,31,45,8\r
+ LISTBOX IDC_CURRENT_KEYS,194,41,143,32,LBS_SORT | \r
+ LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "\90V\82µ\82¢\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82Ì\93ü\97Í(&N):",IDC_STATIC,194,100,\r
+ 99,8\r
+ CONTROL "Ctrl+X",IDC_C_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 194,111,31,10\r
+ EDITTEXT IDC_NEW_KEY,194,123,142,14,ES_AUTOHSCROLL\r
+ LTEXT "Currently assigned to:\n[unassigned]",\r
+ IDC_CURRENTLY_ASSIGNED,194,158,142,32\r
+ PUSHBUTTON "\8a\84\82è\93\96\82Ä(&A)",IDC_ASSIGN,287,142,50,14\r
+ PUSHBUTTON "\8dí\8f\9c(&R)",IDC_REMOVE,287,78,50,14\r
+ PUSHBUTTON "\82·\82×\82Ä\83\8a\83Z\83b\83g(&S)",IDC_RESET_ALL,197,142,50,14,NOT \r
+ WS_VISIBLE\r
+ CONTROL "CUA-mode \82ð\97L\8cø\82É\82·\82é",IDC_ENABLE_CUA,"Button",\r
+ BS_AUTOCHECKBOX | WS_TABSTOP,255,17,82,10\r
+END\r
+\r
+IDD_PROPERTIES_LIST DIALOG DISCARDABLE 0, 0, 344, 215\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "\88ê\97\97"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ CONTROL "List1",IDC_PROPERTIES_LIST,"SysListView32",LVS_REPORT | \r
+ LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,330,201\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO DISCARDABLE \r
+BEGIN\r
+ IDD_OPTIONS, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 116\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 171\r
+ END\r
+\r
+ IDD_ABOUTBOX, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 228\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 48\r
+ END\r
+\r
+ IDD_104KEYBOARD, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 356\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 295\r
+ END\r
+\r
+ IDD_109KEYBOARD, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 356\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 295\r
+ END\r
+\r
+ IDD_PROPERTIES, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 355\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 297\r
+ END\r
+\r
+ IDD_PROPERTIES_BASIC, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 337\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 208\r
+ END\r
+\r
+ IDD_PROPERTIES_ADVANCED, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 337\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 208\r
+ END\r
+\r
+ IDD_PROPERTIES_LIST, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 337\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 208\r
+ END\r
+END\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDR_RIGHT_MENU MENU DISCARDABLE \r
+BEGIN\r
+ POPUP "Right Menu"\r
+ BEGIN\r
+ MENUITEM "\83v\83\8d\83p\83e\83B(&P)...", IDC_PROPERTIES\r
+ MENUITEM "\90Ý\92è\82Ì\8eæ\82è\8d\9e\82Ý(&I)...", IDC_IMPORT\r
+ MENUITEM "\90Ý\92è\82Ì\8f\91\82«\8fo\82µ(&E)...", IDC_EXPORT\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "\83I\83v\83V\83\87\83\93(&O)...", IDC_OPTIONS\r
+ POPUP "\83L\81[\83{\81[\83h\83\8c\83C\83A\83E\83g(&K)"\r
+ BEGIN\r
+ MENUITEM "\83\8d\83O\83I\83\93\83\86\81[\83U\81[\97p(&L)...", IDC_KEYBOARD\r
+ MENUITEM "\82·\82×\82Ä\82Ì\83\86\81[\83U\81[\97p(&A)...", IDC_KEYBOARD_ANY_USER\r
+ END\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&Disable", IDC_DISABLE\r
+ MENUITEM "\83\8a\83Z\83b\83g(&R)", IDC_RESET\r
+ MENUITEM "\8fI\97¹(&X)", IDC_QUIT\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "\83w\83\8b\83v(&H)", ID_HELP_FINDER\r
+ MENUITEM "\83o\81[\83W\83\87\83\93\8fî\95ñ(&A)", IDC_ABOUT\r
+ END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE PRELOAD DISCARDABLE \r
+BEGIN\r
+ IDR_MAINFRAME "xkeymacs\n\nXkeyma\n\n\nXkeymacs.Document\nXkeyma Document"\r
+END\r
+\r
+STRINGTABLE PRELOAD DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_APP_TITLE "XKeymacs"\r
+ AFX_IDS_IDLEMESSAGE "Ready"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_INDICATOR_EXT "EXT"\r
+ ID_INDICATOR_CAPS "CAP"\r
+ ID_INDICATOR_NUM "NUM"\r
+ ID_INDICATOR_SCRL "SCRL"\r
+ ID_INDICATOR_OVR "OVR"\r
+ ID_INDICATOR_REC "REC"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_FILE_NEW "Create a new document\nNew"\r
+ ID_FILE_OPEN "Open an existing document\nOpen"\r
+ ID_FILE_CLOSE "Close the active document\nClose"\r
+ ID_FILE_SAVE "Save the active document\nSave"\r
+ ID_FILE_SAVE_AS "Save the active document with a new name\nSave As"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_APP_ABOUT "Display program information, version number and copyright\nAbout"\r
+ ID_APP_EXIT "Quit the application; prompts to save documents\nExit"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_FILE_MRU_FILE1 "Open this document"\r
+ ID_FILE_MRU_FILE2 "Open this document"\r
+ ID_FILE_MRU_FILE3 "Open this document"\r
+ ID_FILE_MRU_FILE4 "Open this document"\r
+ ID_FILE_MRU_FILE5 "Open this document"\r
+ ID_FILE_MRU_FILE6 "Open this document"\r
+ ID_FILE_MRU_FILE7 "Open this document"\r
+ ID_FILE_MRU_FILE8 "Open this document"\r
+ ID_FILE_MRU_FILE9 "Open this document"\r
+ ID_FILE_MRU_FILE10 "Open this document"\r
+ ID_FILE_MRU_FILE11 "Open this document"\r
+ ID_FILE_MRU_FILE12 "Open this document"\r
+ ID_FILE_MRU_FILE13 "Open this document"\r
+ ID_FILE_MRU_FILE14 "Open this document"\r
+ ID_FILE_MRU_FILE15 "Open this document"\r
+ ID_FILE_MRU_FILE16 "Open this document"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_NEXT_PANE "Switch to the next window pane\nNext Pane"\r
+ ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_WINDOW_SPLIT "Split the active window into panes\nSplit"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_EDIT_CLEAR "Erase the selection\nErase"\r
+ ID_EDIT_CLEAR_ALL "Erase everything\nErase All"\r
+ ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy"\r
+ ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut"\r
+ ID_EDIT_FIND "Find the specified text\nFind"\r
+ ID_EDIT_PASTE "Insert Clipboard contents\nPaste"\r
+ ID_EDIT_REPEAT "Repeat the last action\nRepeat"\r
+ ID_EDIT_REPLACE "Replace specific text with different text\nReplace"\r
+ ID_EDIT_SELECT_ALL "Select the entire document\nSelect All"\r
+ ID_EDIT_UNDO "Undo the last action\nUndo"\r
+ ID_EDIT_REDO "Redo the previously undone action\nRedo"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_SCSIZE "Change the window size"\r
+ AFX_IDS_SCMOVE "Change the window position"\r
+ AFX_IDS_SCMINIMIZE "Reduce the window to an icon"\r
+ AFX_IDS_SCMAXIMIZE "Enlarge the window to full size"\r
+ AFX_IDS_SCNEXTWINDOW "Switch to the next document window"\r
+ AFX_IDS_SCPREVWINDOW "Switch to the previous document window"\r
+ AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_SCRESTORE "Restore the window to normal size"\r
+ AFX_IDS_SCTASKLIST "Activate Task List"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_DEFAULT "Default"\r
+ IDS_DEFAULT_TITLE "\95W\8f\80"\r
+ IDS_DIALOG "Dialog"\r
+ IDS_DIALOG_TITLE "\83_\83C\83A\83\8d\83O"\r
+ IDS_KEYBOARD "%s \97p(&L)..."\r
+ IDS_REG_ENTRY_USE_DIALOG_SETTING "Use Dialog Setting"\r
+ IDS_REGISTRY_KEY "Oishi"\r
+ IDS_REG_SECTION_APPLICATION "ApplicationName"\r
+ IDS_REG_ENTRY_APPLICATION "%02d"\r
+ IDS_REG_ENTRY_NONE "C-X %c"\r
+ IDS_REG_ENTRY_CONTROL "C-%c"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_CONTROLX "C-X C-%c"\r
+ IDS_REG_ENTRY_META "M-%c"\r
+ IDS_REGSUBKEY_DATA "Software\\Oishi\\XKeymacs2"\r
+ IDS_REG_ENTRY_APPLICATOIN_TITLE "ApplicationTitle"\r
+ IDS_REGSUBKEY_AUTORUN "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"\r
+ IDS_APPLICATION_LIST_ITEM "%s (%s)"\r
+ IDS_SEPARATE_CLASS_WINDOW " ("\r
+ IDS_SEPARATE_WINDOWTITLE " - "\r
+ IDS_REG_ENTRY_CONTROL_META_SHIFT "C-M-%c"\r
+ IDS_REG_ENTRY_KILL_RING_MAX "kill-ring-max"\r
+ IDS_REG_ENTRY_CONTROL_SHIFT "C-S-%c"\r
+ IDS_REG_ENTRY_META_SHIFT "M-S-%c"\r
+ IDS_REG_ENTRY_DISABLE_XKEYMACS "Disable XKeymacs"\r
+ IDC_REG_ENTRY_IGNORE_META_CTRL "Ignore undefined Meta Ctrl+?"\r
+ IDC_REG_ENTRY_IGNORE_C_X "Ignore undefined C-x ?"\r
+ IDS_ERR_SAVE_DATA "XKeymacs \82Í %d \8eí\97Þ\82µ\82©\90Ý\92è\82ð\95Û\91¶\82Å\82«\82Ü\82¹\82ñ\81B\95s\97v\82È\90Ý\92è\82ð\91I\91ð\82µ ""Use Default Setting""\82ð\83`\83F\83b\83N\82·\82é\82±\82Æ\82É\82æ\82è\81A\90V\82½\82É\95Û\91¶\82Å\82«\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ERR_WINDOWS_VERSION "XKeymacs \82Í\82±\82Ì\83o\81[\83W\83\87\83\93\82Ì Windows \82ð\83T\83|\81[\83g\82µ\82Ä\82¨\82è\82Ü\82¹\82ñ\81B"\r
+ IDS_ERR_IMPORT "%s\n\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B\n\8ew\92è\82µ\82½\83t\83@\83C\83\8b\96¼\82ª\90³\82µ\82¢\82©\82Ç\82¤\82©\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B"\r
+ IDS_ERR_EXPORT "\90Ý\92è\82Ì\8f\91\82«\8fo\82µ\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B"\r
+ IDC_REG_ENTRY_ENABLE_CUA "Enable CUA"\r
+ IDS_REG_SECTION_ORIGINAL "OriginalCommand"\r
+ IDS_REG_ORIGINAL_PREFIX "zzz-"\r
+ IDS_REG_ENTRY_WINDOW_TEXT "WindowText"\r
+ IDS_REG_ENTRY_WINDOW_TEXT_TYPE "WindowTextType"\r
+ IDS_REG_ENTRY_326_COMPATIBLE "3.26 compatible"\r
+ IDS_PROCESS "process"\r
+ IDS_PROCESSID "id process"\r
+ IDS_REGSUBKEY_PERF "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\%03x"\r
+ IDS_REGSUBKEY_COUNTERS "Counters"\r
+ IDS_UNKNOWN_TASK "unknown"\r
+ IDS_IME_FILE_NAME "IME"\r
+ IDS_ERR_LOST_KEY "[%s] \83L\81[\82Í\97\98\97p\82Å\82«\82È\82\82È\82è\82Ü\82·\81B\n"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FOR_LOGGED_ON_USER " (\83\8d\83O\83I\83\93\83\86\81[\83U\81[\97p)"\r
+ IDS_FOR_ANY_USER " (\82·\82×\82Ä\82Ì\83\86\81[\83U\81[\97p)"\r
+ IDS_FOR " (%s \97p)"\r
+ IDS_EXPLORER "explorer.exe"\r
+ IDS_PROJECT "winproj.exe"\r
+ IDS_EXCEL "excel.exe"\r
+ IDS_MSDN "hh.exe"\r
+ IDS_B2 "b2.exe"\r
+ IDS_MSIMN "msimn.exe"\r
+ IDS_UNKNOWN_APPLICATION "\95s\96¾\82È\83A\83v\83\8a\83P\81[\83V\83\87\83\93"\r
+ IDS_PROGRAM_MANAGER "Program Manager"\r
+ IDS_EXTENSION_EXECUTABLE ".exe"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_BECKY "Becky!"\r
+ IDS_OUTLOOK_EXPRESS "Outlook Express"\r
+ IDS_VISUAL_SOURCESAFE_EXPLORER "Visual SourceSafe \83G\83N\83X\83v\83\8d\81[\83\89"\r
+ IDS_DISABLE "\96³\8cø\82É\82·\82é(&D)"\r
+ IDS_ENABLE "\97L\8cø\82É\82·\82é(&E)"\r
+ IDS_IMPORT "\90Ý\92è\82Ì\8eæ\82è\8d\9e\82Ý"\r
+ IDS_EXPORT "\90Ý\92è\82Ì\8f\91\82«\8fo\82µ"\r
+ IDS_TIP_CX "C-x- LED"\r
+ IDS_TIP_CTRL "Ctrl LED"\r
+ IDS_TIP_SHIFT "Shift LED"\r
+ IDS_TIP_ALT "Alt LED"\r
+ IDS_TIP_META "Meta LED"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REGISTRATION_FILTER "\83\8c\83W\83X\83g\83\8a \83t\83@\83C\83\8b|*.reg|\82·\82×\82Ä\82Ì\83t\83@\83C\83\8b (*.*)|*.*||"\r
+ IDS_REGSUBKEY_KEYBOARD_LAYOUT "Keyboard Layout"\r
+ IDS_SCANCODE_MAP "Scancode Map"\r
+ IDS_REGSUBKEY_KEY_REMAP "Software\\Microsoft\\Windows\\CurrentVersion\\Controls Folder\\Keyboard\\shellex\\PropertySheetHandlers\\Key Remap"\r
+ IDS_0 "0"\r
+ IDS_RESTART_OR_NOT "\90V\82µ\82¢\90Ý\92è\82ð\97L\8cø\82É\82·\82é\82É\82Í\81A\83R\83\93\83s\83\85\81[\83^\82ð\8dÄ\8bN\93®\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\n\n\8d¡\82·\82®\8dÄ\8bN\93®\82µ\82Ü\82·\82©\81H"\r
+ IDS_RESTART_CAPTION "\83V\83X\83e\83\80\90Ý\92è\82Ì\95Ï\8dX"\r
+ IDS_REGSUBKEY_FILE_COMPLETION "Software\\Microsoft\\Command Processor"\r
+ IDS_COMPLETION_CHAR "CompletionChar"\r
+ IDS_REGSUBKEY_KEYBOARD_LAYOUT_ANY_USER \r
+ "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout"\r
+ IDS_WINDOW_TEXT_IGNORE "Ignore"\r
+ IDS_WINDOW_TEXT_MATCH "Match"\r
+ IDS_WINDOW_TEXT_MATCH_FORWARD "Forward Match"\r
+ IDS_WINDOW_TEXT_MATCH_BACKWARD "Backward Match"\r
+ IDS_WINDOW_TEXT_MATCH_FULL "Macth Full"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_TIP_MX "M-x LED"\r
+ IDS_VER_SUB_BLOCK "\\"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_NONE_FOO "N-0x%02x (%c)"\r
+ IDS_REG_ENTRY_NONE_SHIFT_FOO "N-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROL_FOO "C-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROL_SHIFT_FOO "C-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_FOO "C-X N-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_SHIFT_FOO "C-X N-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_CONTROL_FOO "C-X C-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_CONTROL_SHIFT_FOO "C-X C-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_META_FOO "M-0x%02x (%c)"\r
+ IDS_REG_ENTRY_META_SHIFT_FOO "M-S-0x%02x (%c)"\r
+ IDS_DISABLED "disabled"\r
+ IDS_REG_ENTRY_CTRL "ctrl_icon"\r
+ IDS_REG_ENTRY_CX "cx_icon"\r
+ IDS_REG_ENTRY_MAIN "main_icon"\r
+ IDS_REG_ENTRY_SHIFT "shift_icon"\r
+ IDS_REG_ENTRY_ALT "alt_icon"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FILES "\83t\83@\83C\83\8b"\r
+ IDS_SEARCH "\8c\9f\8dõ\81A\92u\8a·"\r
+ IDS_WINDOW "\83A\83N\83e\83B\83u\83E\83B\83\93\83h\83E\82©\82ç\97£\82ê\82é"\r
+ IDS_RECOVERY "\83G\83\89\81[\83\8a\83J\83o\83\8a\81["\r
+ IDS_MOTION "\88Ú\93®"\r
+ IDS_IME "IME \82Ì\90Ø\91Ö\82¦"\r
+ IDS_KILL "\8fÁ\8b\8e\81A\95Ò\8fW"\r
+ IDS_OTHER "\82»\82Ì\91¼"\r
+ IDS_ORIGINAL "\83I\83\8a\83W\83i\83\8b\83R\83}\83\93\83h"\r
+ IDS_CATEGORY "\83J\83e\83S\83\8a"\r
+ IDS_COMMAND "\83R\83}\83\93\83h"\r
+ IDS_KEY "\83L\81["\r
+ IDS_MODIFIER "One Shot \83\82\83f\83B\83t\83@\83C\83\84"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_ICON_META "meta_icon"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SET_MARK_COMMAND_D "\83}\81[\83N\82ð\83L\83\83\83\8c\83b\83g\82Ì\88Ê\92u\82É\92u\82\81B"\r
+ IDS_BEGINNING_OF_LINE_D "\8ds\93ª\82É\88Ú\93®\82·\82é\81B"\r
+ IDS_BACKWARD_CHAR_D "1 \95¶\8e\9a\8d¶\82Ö\88Ú\93®\82·\82é\81B"\r
+ IDS_DELETE_CHAR_D "\83L\83\83\83\8c\83b\83g\82Ì\89E\91¤\82Ì\95¶\8e\9a\82ð\8dí\8f\9c\82·\82é\81B"\r
+ IDS_END_OF_LINE_D "\8ds\96\96\82É\88Ú\93®\82·\82é\81B"\r
+ IDS_FORWARD_CHAR_D "1 \95¶\8e\9a\89E\82Ö\88Ú\93®\82·\82é\81B"\r
+ IDS_KEYBOARD_QUIT_D "\93ü\97Í\92\86\82Ì\83R\83}\83\93\83h\82ð\83L\83\83\83\93\83Z\83\8b\82·\82é\81B"\r
+ IDS_HELP_COMMAND_D "Prefix command (definition is a keymap associating keystrokes with commands)."\r
+ IDS_KILL_LINE_D "\8ds\96\96\82Ü\82Å\82ð\83L\83\8b\82·\82é\81B"\r
+ IDS_RECENTER_D "\89æ\96Ê\82ð\83N\83\8a\83A\82µ\82Ä\8dÄ\95\\8e¦\82µ\81A\91I\91ð\82³\82ê\82½\83E\83B\83\93\83h\83E\82Å\82Í\83|\83C\83\93\83g\82ª\8fc\95û\8cü\82Ì\92\86\89\9b\82É\88Ê\92u\82·\82é\82æ\82¤\82É\83X\83N\83\8d\81[\83\8b\82·\82é\81B"\r
+ IDS_NEWLINE_D "\83J\81[\83\\83\8b\82Ì\92¼\91O\82É 1 \8ds\88È\8fã\82Ì\8bó\8ds\82ð\91}\93ü\82·\82é\81B"\r
+ IDS_NEXT_LINE_D "\90\82\92¼\82É 1 \8ds\89º\82Ö\88Ú\93®\82·\82é\81B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_OPEN_LINE_D "1 \8ds\88È\8fã\82Ì\8bó\8ds\82ð\83L\83\83\83\8c\83b\83g\82Ì\89E\91¤\82É\91}\93ü\82·\82é\81B"\r
+ IDS_PREVIOUS_LINE_D "\90\82\92¼\82É 1 \8ds\8fã\82Ö\88Ú\93®\82·\82é\81B"\r
+ IDS_QUOTED_INSERT_D "Read next input character and insert it."\r
+ IDS_ISEARCH_BACKWARD_D "\8cã\8cü\82«\82É\83C\83\93\83N\83\8a\83\81\83\93\83^\83\8b\83T\81[\83`\82·\82é\81B"\r
+ IDS_ISEARCH_FORWARD_D "\91O\8cü\82«\82É\83C\83\93\83N\83\8a\83\81\83\93\83^\83\8b\83T\81[\83`\82·\82é\81B"\r
+ IDS_TRANSPOSE_CHARS_D "2 \82Â\82Ì\95¶\8e\9a\82ð\93ü\82ê\91Ö\82¦\82é\81B"\r
+ IDS_UNIVERSAL_ARGUMENT_D "\88ø\90\94\82ð\8ew\92è\82·\82é\81B"\r
+ IDS_SCROLL_UP_D "(\83E\83B\83\93\83h\83E 1 \96Ê\95ª\82©\8ew\92è\82µ\82½\8ds\90\94\82¾\82¯) \91O\8cü\82«\82É\83X\83N\83\8d\81[\83\8b\82·\82é\81B"\r
+ IDS_KILL_REGION_D "\83\8a\81[\83W\83\87\83\93 (\83|\83C\83\93\83g\82©\82ç\83}\81[\83N\82Ü\82Å) \82ð\83L\83\8b\82·\82é\81B"\r
+ IDS_CONTROL_X_PREFIX_D "foo"\r
+ IDS_YANK_D "\8dÅ\8cã\82É\83L\83\8b\82µ\82½\83e\83L\83X\83g\82ð\83\84\83\93\83N\82·\82é\81B"\r
+ IDS_ICONIFY_OR_DEICONIFY_FRAME_D "\83E\83B\83\93\83h\83E\82ð\8dÅ\8f¬\89»\82·\82é\81B"\r
+ IDS_QUAIL_MODE_D "foo"\r
+ IDS_UNDO_D "\8c³\82É\96ß\82·\81B"\r
+ IDS_TOGGLE_WIN32IME_MODE_D \r
+ "\83C\83\93\83v\83b\83g\83\81\83\\83b\83h\82ª\97L\8cø\82È\82ç\82Î\96³\8cø\82É\81A\96³\8cø\82È\82ç\82Î\97L\8cø\82É\82·\82é\81B"\r
+ IDS_BACKWARD_WORD_D "1 \8cê\8d¶\82Ö\88Ú\93®\82·\82é\81B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FORWARD_WORD_D "1 \8cê\89E\82Ö\88Ú\93®\82·\82é\81B"\r
+ IDS_DIGIT_ARGUMENT_D "Part of the numeric argument for the next command."\r
+ IDS_NEGATIVE_ARGUMENT_D "\88ø\90\94\82Ì\95\84\8d\87\82ð\95Ï\8dX\82·\82é\81B"\r
+ IDS_SAVE_BUFFERS_KILL_EMACS_D "\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8fI\97¹\82·\82é\81B"\r
+ IDS_FIND_FILE_D "\83t\83@\83C\83\8b\82ð\8aJ\82\81B"\r
+ IDS_MARK_PAGE_D "\83t\83@\83C\83\8b\91S\91Ì\82ð\83\8a\81[\83W\83\87\83\93\82Æ\82·\82é\81B"\r
+ IDS_SAVE_BUFFER_D "\83t\83@\83C\83\8b\82ð\8fã\8f\91\82«\95Û\91¶\82·\82é\81B"\r
+ IDS_WRITE_FILE_D "\83t\83@\83C\83\8b\82ð\96¼\91O\82ð\95t\82¯\82Ä\95Û\91¶\82·\82é\81B"\r
+ IDS_SHELL_COMMAND_D "\83R\83}\83\93\83h\83v\83\8d\83\93\83v\83g/MS-DOS \83v\83\8d\83\93\83v\83g\82ð\8bN\93®\82·\82é\81B"\r
+ IDS_BEGINNING_OF_BUFFER_D "\83o\83b\83t\83@\82Ì\90æ\93ª\82É\88Ú\93®\82·\82é\81B"\r
+ IDS_END_OF_BUFFER_D "\83o\83b\83t\83@\82Ì\96\96\94ö\82É\88Ú\93®\82·\82é\81B"\r
+ IDS_SCROLL_DOWN_D "(\83E\83B\83\93\83h\83E 1 \96Ê\95ª\82©\8ew\92è\82µ\82½\8ds\90\94\82¾\82¯) \8cã\8cü\82«\82É\83X\83N\83\8d\81[\83\8b\82·\82é\81B"\r
+ IDS_KILL_RING_SAVE_D "\83\8a\81[\83W\83\87\83\93\82ð\8eÀ\8dÛ\82É\82Í\83L\83\8b\82¹\82¸\82É\81A\8dÅ\8cã\82É\83L\83\8b\82µ\82½\83e\83L\83X\83g\82Æ\82µ\82Ä\95Û\91¶\82·\82é\81B"\r
+ IDS_BACKWARD_DELETE_CHAR_D \r
+ "Delete the previous N characters (following if N is negative)."\r
+ IDS_TAB_D "\83|\83C\83\93\83g\88Ê\92u\82©\82ç\82 \82ç\82©\82¶\82ß\90Ý\92è\82µ\82½\82Â\82¬\82Ì\83^\83u\83X\83g\83b\83v\88Ê\92u\82Ü\82Å\8e\9a\89º\82°\82·\82é\81B"\r
+ IDS_META_PREFIX_D "Meta \82Ì\83v\83\8c\83t\83B\83b\83N\83X\83L\81[\81B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_META_D "Meta"\r
+ IDS_DIGIT_ARGUMENT0_D "\88ø\90\94\82ð 10 \94{\82µ 0 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT1_D "\88ø\90\94\82ð 10 \94{\82µ 1 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT2_D "\88ø\90\94\82ð 10 \94{\82µ 2 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT3_D "\88ø\90\94\82ð 10 \94{\82µ 3 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT4_D "\88ø\90\94\82ð 10 \94{\82µ 4 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT5_D "\88ø\90\94\82ð 10 \94{\82µ 5 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT6_D "\88ø\90\94\82ð 10 \94{\82µ 6 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT7_D "\88ø\90\94\82ð 10 \94{\82µ 7 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT8_D "\88ø\90\94\82ð 10 \94{\82µ 8 \82ð\89Á\82¦\82é\81B"\r
+ IDS_DIGIT_ARGUMENT9_D "\88ø\90\94\82ð 10 \94{\82µ 9 \82ð\89Á\82¦\82é\81B"\r
+ IDS_META_PREFIX_AND_ORIGINAL_D \r
+ "\96{\97\88\82Ì\8b@\94\\82ð\90¶\82©\82µ\82½\82Ü\82Ü Meta \82Ì\83v\83\8c\83t\83B\83b\83N\83X\83L\81[\82Æ\82µ\82Ä\82à\8b@\94\\82·\82é\81B"\r
+ IDS_KILL_BUFFER_D "\83t\83@\83C\83\8b\82ð\95Â\82¶\82é\81B"\r
+ IDS_KILL_WORD_D "\92P\8cê\82Ì\96\96\94ö\82Ü\82Å\83L\83\8b\82·\82é\81B"\r
+ IDS_MARK_WHOLE_BUFFER_D "\83t\83@\83C\83\8b\91S\91Ì\82ð\83\8a\81[\83W\83\87\83\93\82Æ\82·\82é\81B"\r
+ IDS_DELETE_BACKWARD_CHAR_D "\83L\83\83\83\8c\83b\83g\82Ì\8d¶\91¤\82Ì\95¶\8e\9a\82ð\8dí\8f\9c\82·\82é\81B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_QUERY_REPLACE_D "\92u\8a·\83_\83C\83A\83\8d\83O\82ð\8aJ\82\81B"\r
+ IDS_QUERY_REPLACE_REGEXP_D "\92u\8a·\83_\83C\83A\83\8d\83O\82ð\8aJ\82\81B"\r
+ IDS_YANK_POP_D "\83\84\83\93\83N\82µ\82½\83e\83L\83X\83g\82ð\81A\82»\82ê\82æ\82è\91O\82É\83L\83\8b\82µ\82½\83e\83L\83X\83g\82Å\92u\82«\8a·\82¦\82é\81B"\r
+ IDS_CLOSE_INPUT_METHOD_D "\83C\83\93\83v\83b\83g\83\81\83\\83b\83h\82ð\96³\8cø\82É\82·\82é\81B"\r
+ IDS_ENABLE_OR_DISABLE_XKEYMACS_D \r
+ "XKeymacs \82ª\97L\8cø\82È\82ç\82Î\96³\8cø\82É\81A\96³\8cø\82È\82ç\82Î\97L\8cø\82É\82·\82é\81B"\r
+ IDS_ENTER_D "Enter"\r
+ IDS_IGNORE_D "\83L\81[\82ð\96³\8e\8b\82·\82é\81B"\r
+ IDS_OPEN_INPUT_METHOD_D "\83C\83\93\83v\83b\83g\83\81\83\\83b\83h\82ð\97L\8cø\82É\82·\82é\81B"\r
+ IDS_SELECT_ALL_D "\82·\82×\82Ä\91I\91ð"\r
+ IDS_CALL_LAST_KBD_MACRO_D "\82à\82Á\82Æ\82à\8dÅ\8bß\82Ì\83L\81[\83{\81[\83h\83}\83N\83\8d\82ð\8eÀ\8ds\82·\82é\81B"\r
+ IDS_END_KBD_MACRO_D "\83L\81[\83{\81[\83h\83}\83N\83\8d\82Ì\92è\8b`\82ð\8fI\97¹\82·\82é\81B"\r
+ IDS_START_KBD_MACRO_D "\83L\81[\83{\81[\83h\83}\83N\83\8d\82Ì\92è\8b`\82ð\8aJ\8en\82·\82é\81B"\r
+ IDS_SWITCH_BETWEEN_INPUT_LOCALES_D "\93ü\97Í\83\8d\83P\81[\83\8b\82ð\90Ø\82è\91Ö\82¦\82é\81B"\r
+ IDS_SWITCH_TO_BUFFER_D "\8e\9f\82Ì\83^\83u\81A\82Ü\82½\82Í\81A\8eq\83E\83B\83\93\83h\83E (MDI) \82ð\95\\8e¦\82·\82é\81B"\r
+ IDS_CONTROL_D "C-"\r
+ IDS_CONTROL_PREFIX_D "C-"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ESCAPE_D "Esc"\r
+ IDS_TILDE_D "~"\r
+ IDS_BACK_QUOTE_D "`"\r
+ IDS_RESTORE_D "\83E\83B\83\93\83h\83E\82ð\8c³\82Ì\83T\83C\83Y\82É\96ß\82·\81B"\r
+ IDS_MOVE_D "\83E\83B\83\93\83h\83E\82ð\88Ú\93®\82·\82é\81B"\r
+ IDS_SIZE_D "\83E\83B\83\93\83h\83E\82Ì\83T\83C\83Y\82ð\95Ï\8dX\82·\82é\81B"\r
+ IDS_MINIMIZE_D "\83E\83B\83\93\83h\83E\82ð\8dÅ\8f¬\89»\82·\82é\81B"\r
+ IDS_MAXIMIZE_D "\83E\83B\83\93\83h\83E\82ð\8dÅ\91å\89»\82·\82é\81B"\r
+ IDS_MAXIMIZE_VERTICALLY_D "\83E\83B\83\93\83h\83E\82ð\8fc\8cü\82«\82É\8dÅ\91å\89»\82·\82é\81B"\r
+ IDS_MAXIMIZE_HORIZONTALLY_D "\83E\83B\83\93\83h\83E\82ð\89¡\8cü\82«\82É\8dÅ\91å\89»\82·\82é\81B"\r
+ IDS_PASS_THROUGH_D "\82±\82Ì\83R\83}\83\93\83h\82É\8a\84\82è\93\96\82Ä\82ç\82ê\82Ä\82¢\82é\83L\81[\82ª\89\9f\82³\82ê\82Ä\82¢\82é\8aÔ\81AXKeymacs \82Í\91S\82Ä\82Ì\93ü\97Í\82ð\82»\82Ì\82Ü\82Ü\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ö\93n\82·\81B"\r
+ IDS_REDO_D "Redo"\r
+ IDS_TEMPORARILY_DISABLE_XKEYMACS_D \r
+ "\8e\9f\82Ì\83R\83}\83\93\83h\82ð\81A\92¼\90Ú\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ö\93n\82·\81B"\r
+ IDS_COPY_D "\83R\83s\81["\r
+ IDS_PASTE_D "\93\\82è\95t\82¯"\r
+ IDS_CUT_D "\90Ø\82è\8eæ\82è"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ESC "Esc"\r
+ IDS_1 "1"\r
+ IDS_2 "2"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_3 "3"\r
+ IDS_4 "4"\r
+ IDS_5 "5"\r
+ IDS_6 "6"\r
+ IDS_7 "7"\r
+ IDS_8 "8"\r
+ IDS_9 "9"\r
+ IDS_0_ "0"\r
+ IDS_MINUS "-"\r
+ IDS_EQUAL "="\r
+ IDS_BACKSPACE "Backspace"\r
+ IDS_TAB "Tab"\r
+ IDS_Q "Q"\r
+ IDS_W "W"\r
+ IDS_E "E"\r
+ IDS_R "R"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_T "T"\r
+ IDS_Y "Y"\r
+ IDS_U "U"\r
+ IDS_I "I"\r
+ IDS_O "O"\r
+ IDS_P "P"\r
+ IDS_SQUARE_BRA "["\r
+ IDS_SQUARE_CKET "]"\r
+ IDS_ENTER "Enter"\r
+ IDS_NUMPADENTER "Numeric Enter"\r
+ IDS_LEFT_CTRL "Ctrl"\r
+ IDS_RIGHT_CTRL "Right Ctrl"\r
+ IDS_PAUSE "Pause"\r
+ IDS_A "A"\r
+ IDS_S "S"\r
+ IDS_D "D"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F "F"\r
+ IDS_G "G"\r
+ IDS_H "H"\r
+ IDS_J "J"\r
+ IDS_K "K"\r
+ IDS_L "L"\r
+ IDS_SEMICOLON ";"\r
+ IDS_QUOTE "'"\r
+ IDS_BACK_QUOTE "`"\r
+ IDS_LEFT_SHIFT "Shift"\r
+ IDS_BACKSLASH "\\"\r
+ IDS_Z "Z"\r
+ IDS_X "X"\r
+ IDS_C "C"\r
+ IDS_V "V"\r
+ IDS_B "B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_N "N"\r
+ IDS_M "M"\r
+ IDS_COMMA ","\r
+ IDS_PERIOD "."\r
+ IDS_SLASH "/"\r
+ IDS_DIVIDE "Numeric /"\r
+ IDS_RIGHT_SHIFT "Right Shift"\r
+ IDS_MULTIPLY "Numeric *"\r
+ IDS_PRINT_SCREEN "Print\nScreen"\r
+ IDS_LEFT_ALT "Alt"\r
+ IDS_RIGHT_ALT "Right Alt"\r
+ IDS_SPACE "Space"\r
+ IDS_CAPS_LOCK "Caps Lock\n\89p\90\94"\r
+ IDS_F1 "F1"\r
+ IDS_F2 "F2"\r
+ IDS_F3 "F3"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F4 "F4"\r
+ IDS_F5 "F5"\r
+ IDS_F6 "F6"\r
+ IDS_F7 "F7"\r
+ IDS_F8 "F8"\r
+ IDS_F9 "F9"\r
+ IDS_F10 "F10"\r
+ IDS_NUM_LOCK "Num\nLock"\r
+ IDS_SCROLL_LOCK "Scroll\nLock"\r
+ IDS_NUMPAD7 "Numeric 7"\r
+ IDS_HOME "Home"\r
+ IDS_NUMPAD8 "Numeric 8"\r
+ IDS_UP "Up Arrow"\r
+ IDS_NUMPAD9 "Numeric 9"\r
+ IDS_PAGE_UP "Page\nUp"\r
+ IDS_SUBTRACT "Numeric -"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_NUMPAD4 "Numeric 4"\r
+ IDS_LEFT "Left Arrow"\r
+ IDS_NUMPAD5 "Numeric 5"\r
+ IDS_NUMPAD6 "Numeric 6"\r
+ IDS_RIGHT "Right Arrow"\r
+ IDS_ADD "Numeric +"\r
+ IDS_NUMPAD1 "Numeric 1"\r
+ IDS_END "End"\r
+ IDS_NUMPAD2 "Numeric 2"\r
+ IDS_DOWN "Down Arrow"\r
+ IDS_NUMPAD3 "Numeric 3"\r
+ IDS_PAGE_DOWN "Page\nDown"\r
+ IDS_NUMPAD0 "Numeric 0"\r
+ IDS_INSERT "Insert"\r
+ IDS_NUMPADDELETE "Numeric Delete"\r
+ IDS_DELETE "Delete"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F11 "F11"\r
+ IDS_F12 "F12"\r
+ IDS_LEFT_WINDOWS "Windows"\r
+ IDS_RIGHT_WINDOWS "Right Windows"\r
+ IDS_APPLICATION "Application"\r
+ IDS_KANA "\83J\83^\83J\83i\n\82Ð\82ç\82ª\82È"\r
+ IDS_BACKSLASH2 "\81_"\r
+ IDS_CONVERT "\95Ï\8a·"\r
+ IDS_NONCONVERT "\96³\95Ï\8a·"\r
+ IDS_BACKSLASH1 "\\"\r
+ IDS_CARET "^"\r
+ IDS_AT_MARK "@"\r
+ IDS_COLON ":"\r
+ IDS_HANKAKU "\94¼\8ap/\91S\8ap"\r
+ IDS_ACPI_POWER "Power off"\r
+ IDS_ACPI_SLEEP "Sleep"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ACPI_WAKE "Wake up"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_NEW_D "\90V\8bK"\r
+ IDS_PRINT_D "\88ó\8dü..."\r
+ IDS_FIND_D "\8c\9f\8dõ..."\r
+ IDS_FIND_NEXT_D "\8e\9f\82ð\8c\9f\8dõ"\r
+ IDS_TRANSPOSE_LINES_D "2 \82Â\82Ì\8ds\82ð\93ü\82ê\91Ö\82¦\82é\81B"\r
+ IDS_KILL_LINE_FOR_ALL_FORMAT_D "\8ds\96\96\82Ü\82Å\82ð\83L\83\8b\82·\82é\81B"\r
+ IDS_BACKWARD_KILL_WORD_D "\83|\83C\83\93\83g\82Ì\92¼\91O\82Ì\92P\8cê\82ð\83L\83\8b\82·\82é\81B"\r
+ IDS_ENABLE_XKEYMACS_D "XKeymacs \82ð\97L\8cø\82É\82·\82é\81B"\r
+ IDS_DISABLE_XKEYMACS_D "XKeymacs \82ð\96³\8cø\82É\82·\82é\81B"\r
+ IDS_CAPS_LOCK_D "Caps Lock"\r
+ IDS_COMPLETE_CLOSE_INPUT_METHOD_D \r
+ "\8c»\8dÝ\82Ì\95¶\8e\9a\97ñ\82ð\95Ï\8a·\8c\8b\89Ê\82Æ\82µ\82Ä\8am\92è\82µ\81A\83C\83\93\83v\83b\83g\83\81\83\\83b\83h\82ð\96³\8cø\82É\82·\82é\81B"\r
+ IDS_COMPLETE_TOGGLE_INPUT_METHOD_D \r
+ "\8c»\8dÝ\82Ì\95¶\8e\9a\97ñ\82ð\95Ï\8a·\8c\8b\89Ê\82Æ\82µ\82Ä\8am\92è\82µ\81A\83C\83\93\83v\83b\83g\83\81\83\\83b\83h\82ª\97L\8cø\82È\82ç\82Î\96³\8cø\82É\81A\96³\8cø\82È\82ç\82Î\97L\8cø\82É\82·\82é\81B"\r
+ IDS_UNDERSCORE_D "_"\r
+ IDS_ROLL_UP_UNROLL_D "\82 \82½\82©\82à\8aª\82«\8fã\82°\82½\82©\82Ì\82æ\82¤\82É\81A\83E\83B\83\93\83h\83E\82Ì\83^\83C\83g\83\8b\83o\81[\82¾\82¯\95\\8e¦\82·\82é\81B"\r
+ IDS_RETOP_D "\89æ\96Ê\82ð\83N\83\8a\83A\82µ\82Ä\8dÄ\95\\8e¦\82µ\81A\91I\91ð\82³\82ê\82½\83E\83B\83\93\83h\83E\82Å\82Í\83|\83C\83\93\83g\82ª\96`\93ª\82É\88Ê\92u\82·\82é\82æ\82¤\82É\83X\83N\83\8d\81[\83\8b\82·\82é\81B"\r
+ IDS_OSMODIFIER_SHIFT_D "One Shot Modifier Shift"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FSET "(fset "\r
+ IDS_README "Readme_J"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_CONTROL_X_PREFIX_T " "\r
+ IDS_CONTROL_T " "\r
+ IDS_CONTROL_PREFIX_T " "\r
+ IDS_CLOSE_INPUT_METHOD_T " "\r
+ IDS_COPY_T " "\r
+ IDS_CUT_T " "\r
+ IDS_ENABLE_OR_DISABLE_XKEYMACS_T "Enable/Disable XKeymacs"\r
+ IDS_NEWLINE_T "newline"\r
+ IDS_ESCAPE_T " "\r
+ IDS_FIND_T " "\r
+ IDS_FIND_NEXT_T " "\r
+ IDS_IGNORE_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_KILL_LINE_FOR_ALL_FORMAT_T " "\r
+ IDS_MAXIMIZE_T " "\r
+ IDS_MAXIMIZE_HORIZONTALLY_T " "\r
+ IDS_MAXIMIZE_VERTICALLY_T " "\r
+ IDS_META_PREFIX_T "Meta"\r
+ IDS_META_T "Meta"\r
+ IDS_META_PREFIX_AND_ORIGINAL_T "Meta"\r
+ IDS_MINIMIZE_T " "\r
+ IDS_MOVE_T " "\r
+ IDS_NEW_T " "\r
+ IDS_OPEN_INPUT_METHOD_T " "\r
+ IDS_PASS_THROUGH_T " "\r
+ IDS_PASTE_T " "\r
+ IDS_PRINT_T " "\r
+ IDS_REDO_T " "\r
+ IDS_RESTORE_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SELECT_ALL_T " "\r
+ IDS_SIZE_T " "\r
+ IDS_SWITCH_BETWEEN_INPUT_LOCALES_T " "\r
+ IDS_TEMPORARILY_DISABLE_XKEYMACS_T " "\r
+ IDS_TILDE_T " "\r
+ IDS_BACK_QUOTE_T " "\r
+ IDS_BACKWARD_CHAR_T "backward-char"\r
+ IDS_BACKWARD_WORD_T "backward-word"\r
+ IDS_BEGINNING_OF_BUFFER_T "beginning-of-buffer"\r
+ IDS_BEGINNING_OF_LINE_T "beginning-of-line"\r
+ IDS_CALL_LAST_KBD_MACRO_T "call-last-kbd-macro"\r
+ IDS_DELETE_BACKWARD_CHAR_T "delete-backward-char"\r
+ IDS_DELETE_CHAR_T "delete-char"\r
+ IDS_END_KBD_MACRO_T "end-kbd-macro"\r
+ IDS_END_OF_BUFFER_T "end-of-buffer"\r
+ IDS_END_OF_LINE_T "end-of-line"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FIND_FILE_T "find-file"\r
+ IDS_FORWARD_CHAR_T "forward-char"\r
+ IDS_FORWARD_WORD_T "forward-word"\r
+ IDS_ICONIFY_OR_DEICONIFY_FRAME_T "iconify-or-deiconify-frame"\r
+ IDS_ISEARCH_BACKWARD_T "isearch-backward"\r
+ IDS_ISEARCH_FORWARD_T "isearch-forward"\r
+ IDS_KEYBOARD_QUIT_T "keyboard-quit"\r
+ IDS_KILL_BUFFER_T "kill-buffer"\r
+ IDS_KILL_LINE_T "kill-line"\r
+ IDS_KILL_REGION_T "kill-region"\r
+ IDS_KILL_RING_SAVE_T "kill-ring-save"\r
+ IDS_KILL_WORD_T "kill-word"\r
+ IDS_MARK_PAGE_T "mark-page"\r
+ IDS_MARK_WHOLE_BUFFER_T "mark-whole-buffer"\r
+ IDS_NEXT_LINE_T "next-line"\r
+ IDS_DIGIT_ARGUMENT0_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_DIGIT_ARGUMENT1_T " "\r
+ IDS_DIGIT_ARGUMENT2_T " "\r
+ IDS_DIGIT_ARGUMENT3_T " "\r
+ IDS_DIGIT_ARGUMENT4_T " "\r
+ IDS_DIGIT_ARGUMENT5_T " "\r
+ IDS_DIGIT_ARGUMENT6_T " "\r
+ IDS_DIGIT_ARGUMENT7_T " "\r
+ IDS_DIGIT_ARGUMENT8_T " "\r
+ IDS_DIGIT_ARGUMENT9_T " "\r
+ IDS_NEGATIVE_ARGUMENT_T "digit-argument"\r
+ IDS_OPEN_LINE_T "open-line"\r
+ IDS_PREVIOUS_LINE_T "previous-line"\r
+ IDS_QUERY_REPLACE_T "query-replace"\r
+ IDS_QUERY_REPLACE_REGEXP_T "query-replace-regexp"\r
+ IDS_RECENTER_T "recenter"\r
+ IDS_SAVE_BUFFER_T "save-buffer"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SAVE_BUFFERS_KILL_EMACS_T "save-buffers-kill-emacs"\r
+ IDS_SCROLL_DOWN_T "scroll-down"\r
+ IDS_SCROLL_UP_T "scroll-up"\r
+ IDS_SET_MARK_COMMAND_T "set-mark-command"\r
+ IDS_SHELL_COMMAND_T "shell-command"\r
+ IDS_START_KBD_MACRO_T "start-kbd-macro"\r
+ IDS_SWITCH_TO_BUFFER_T "switch-to-buffer"\r
+ IDS_TAB_T "tab-to-tab-stop"\r
+ IDS_TOGGLE_WIN32IME_MODE_T "toggle-input-method"\r
+ IDS_TRANSPOSE_CHARS_T "transpose-chars"\r
+ IDS_TRANSPOSE_LINES_T "transpose-lines"\r
+ IDS_UNDO_T "undo"\r
+ IDS_UNIVERSAL_ARGUMENT_T "universal-argument"\r
+ IDS_WRITE_FILE_T "write-file"\r
+ IDS_YANK_T "yank"\r
+ IDS_YANK_POP_T "yank-pop"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_BACKWARD_KILL_WORD_T "backward-kill-word"\r
+ IDS_ENABLE_XKEYMACS_T "Enable XKeymacs"\r
+ IDS_DISABLE_XKEYMACS_T "Disable XKeymacs"\r
+ IDS_CAPS_LOCK_T "Caps Lock"\r
+ IDS_COMPLETE_CLOSE_INPUT_METHOD_T " "\r
+ IDS_COMPLETE_TOGGLE_INPUT_METHOD_T " "\r
+ IDS_UNDERSCORE_T " "\r
+ IDS_ROLL_UP_UNROLL_T "Roll-up/Unroll"\r
+ IDS_RETOP_T "Retop"\r
+ IDS_OSMODIFIER_SHIFT_T "One Shot Modifier Shift"\r
+ IDS_OSMODIFIER_SHIFT_REPEAT_T "One Shot Modifier Shift with Repeat"\r
+ IDS_OSMODIFIER_CTRL_T "One Shot Modifier Ctrl"\r
+ IDS_OSMODIFIER_CTRL_REPEAT_T "One Shot Modifier Ctrl with Repeat"\r
+ IDS_OSMODIFIER_ALT_T "One Shot Modifier Alt"\r
+ IDS_OSMODIFIER_ALT_REPEAT_T "One Shot Modifier Alt with Repeat"\r
+ IDS_CYCLE_ITEMS_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_OSMODIFIER_SHIFT_REPEAT_D "One Shot Modifier Shift with Repeat"\r
+ IDS_OSMODIFIER_CTRL_D "One Shot Modifier Ctrl"\r
+ IDS_OSMODIFIER_CTRL_REPEAT_D "One Shot Modifier Ctrl with Repeat"\r
+ IDS_OSMODIFIER_ALT_D "One Shot Modifier Alt"\r
+ IDS_OSMODIFIER_ALT_REPEAT_D "One Shot Modifier Alt with Repeat"\r
+ IDS_CYCLE_ITEMS_D "\83I\81[\83v\83\93\82µ\82½\8f\87\94Ô\82É\81A\8d\80\96Ú\82ð\8fz\8aÂ"\r
+ IDS_CYCLE_ITEMS_INVERSELY_D "\83I\81[\83v\83\93\82µ\82½\8f\87\94Ô\82Æ\82Í\8bt\82Ì\8f\87\94Ô\82É\81A\8d\80\96Ú\82ð\8fz\8aÂ"\r
+ IDS_TRANSPOSE_WORDS_D "2 \82Â\82Ì\92P\8cê\82ð\93ü\82ê\91Ö\82¦\82é"\r
+ IDS_FILL_PARAGRAPH_D "\8c»\8dÝ\82Ì\92i\97\8e\82ð\8bl\82ß\82é"\r
+ IDS_DOWNCASE_WORD_D "\8cã\91±\82Ì\92P\8cê\82ð\8f¬\95¶\8e\9a\82É\95Ï\8a·\82·\82é"\r
+ IDS_UPCASE_WORD_D "\8cã\91±\82Ì\92P\8cê\82ð\91å\95¶\8e\9a\82É\95Ï\8a·\82·\82é"\r
+ IDS_CAPITALIZE_WORD_D "\8cã\91±\82Ì\92P\8cê\82Ì 1 \95¶\8e\9a\96Ú\82¾\82¯\82ð\91å\95¶\8e\9a\82É\82·\82é"\r
+ IDS_EXECUTE_EXTENDED_COMMAND_D "\83R\83}\83\93\83h\96¼\82ð\93Ç\82Ý\8d\9e\82Ý\81A\82»\82ê\82ð\8eÀ\8ds\82·\82é"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_CYCLE_ITEMS_INVERSELY_T " "\r
+ IDS_TRANSPOSE_WORDS_T "transpose-words"\r
+ IDS_FILL_PARAGRAPH_T "fill-paragraph"\r
+ IDS_DOWNCASE_WORD_T "downcase-word"\r
+ IDS_UPCASE_WORD_T "upcase-word"\r
+ IDS_CAPITALIZE_WORD_T "capitalize-word"\r
+ IDS_EXECUTE_EXTENDED_COMMAND_T "execute-extended-command"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_ACCELERATE "accelerate"\r
+ IDS_REGSUBKEY_KEYBOARD "Control Panel\\Keyboard"\r
+ IDS_KEYBOARD_SPEED "KeyboardSpeed"\r
+ IDS_REG_ENTRY_CHANGE_CURSOR "change_cursor"\r
+ IDS_REG_ENTRY_AT_IBEAM_CURSOR_ONLY "at ibeam cursor only"\r
+ IDS_REG_ENTRY_MX "mx_icon"\r
+END\r
+\r
+#endif // \93ú\96{\8cê resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// \89p\8cê (±Òض) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 55\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "About XKeymacs"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20\r
+ LTEXT "XKeymacs Version x.xx",IDC_VERSION_INFORMATION,40,10,\r
+ 119,8,SS_NOPREFIX\r
+ LTEXT "Copyright (C) 2001-200x",IDC_LEGAL_COPYRIGHT,40,25,119,\r
+ 8\r
+ DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP\r
+ LTEXT "http://www.cam.hi-ho.ne.jp/oishi/indexen.html",IDC_URL,\r
+ 40,40,148,8,SS_NOTIFY\r
+END\r
+\r
+IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 152, 251\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Options"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ GROUPBOX "XKeymacs",IDC_STATIC,7,7,138,33\r
+ CONTROL "Auto Run",IDC_AUTO_RUN,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,17,22,46,10\r
+ GROUPBOX "Command Prompt",IDC_STATIC,7,47,138,33\r
+ CONTROL "File and Directory Name Completion",IDC_FILE_COMPLETION,\r
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,62,126,10\r
+ GROUPBOX "Taskbar's Status Area",IDC_STATIC,7,87,138,133\r
+ CONTROL "C-x-",IDC_C_X_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,\r
+ 102,28,10\r
+ CONTROL "M-x",IDC_M_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,\r
+ 122,28,10\r
+ CONTROL "Meta",IDC_M_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,\r
+ 142,32,10\r
+ CONTROL "Shift",IDC_SHIFT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 17,162,30,10\r
+ CONTROL "Ctrl",IDC_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,\r
+ 182,26,10\r
+ CONTROL "Alt",IDC_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,\r
+ 202,24,10\r
+ DEFPUSHBUTTON "OK",IDOK,7,230,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,95,230,50,14\r
+END\r
+\r
+IDD_104KEYBOARD DIALOG DISCARDABLE 0, 0, 422, 280\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Keyboard Layout"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,311,258,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,366,258,50,14\r
+ CONTROL "Esc",IDC_ESC,"Button",BS_OWNERDRAW,12,16,17,16\r
+ CONTROL "F1",IDC_F1,"Button",BS_OWNERDRAW,48,16,17,16\r
+ CONTROL "F2",IDC_F2,"Button",BS_OWNERDRAW,66,16,17,16\r
+ CONTROL "F3",IDC_F3,"Button",BS_OWNERDRAW,84,16,17,16\r
+ CONTROL "F4",IDC_F4,"Button",BS_OWNERDRAW,102,16,17,16\r
+ CONTROL "F5",IDC_F5,"Button",BS_OWNERDRAW,128,16,17,16\r
+ CONTROL "F6",IDC_F6,"Button",BS_OWNERDRAW,146,16,17,16\r
+ CONTROL "F7",IDC_F7,"Button",BS_OWNERDRAW,164,16,17,16\r
+ CONTROL "F8",IDC_F8,"Button",BS_OWNERDRAW,182,16,17,16\r
+ CONTROL "F9",IDC_F9,"Button",BS_OWNERDRAW,210,16,17,16\r
+ CONTROL "F10",IDC_F10,"Button",BS_OWNERDRAW,228,16,17,16\r
+ CONTROL "F11",IDC_F11,"Button",BS_OWNERDRAW,246,16,17,16\r
+ CONTROL "F12",IDC_F12,"Button",BS_OWNERDRAW,264,16,17,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN,"Button",BS_OWNERDRAW,284,16,17,16\r
+ CONTROL "SL",IDC_SCROLL_LOCK,"Button",BS_OWNERDRAW,302,16,17,16\r
+ CONTROL "Pau",IDC_PAUSE,"Button",BS_OWNERDRAW,320,16,17,16\r
+ CONTROL "`",IDC_BACK_QUOTE,"Button",BS_OWNERDRAW,12,36,17,16\r
+ CONTROL "1",IDC_1,"Button",BS_OWNERDRAW,30,36,17,16\r
+ CONTROL "2",IDC_2,"Button",BS_OWNERDRAW,48,36,17,16\r
+ CONTROL "3",IDC_3,"Button",BS_OWNERDRAW,66,36,17,16\r
+ CONTROL "4",IDC_4,"Button",BS_OWNERDRAW,84,36,17,16\r
+ CONTROL "5",IDC_5,"Button",BS_OWNERDRAW,102,36,17,16\r
+ CONTROL "6",IDC_6,"Button",BS_OWNERDRAW,120,36,17,16\r
+ CONTROL "7",IDC_7,"Button",BS_OWNERDRAW,138,36,17,16\r
+ CONTROL "8",IDC_8,"Button",BS_OWNERDRAW,156,36,17,16\r
+ CONTROL "9",IDC_9,"Button",BS_OWNERDRAW,174,36,17,16\r
+ CONTROL "0",IDC_0,"Button",BS_OWNERDRAW,192,36,17,16\r
+ CONTROL "-",IDC_MINUS,"Button",BS_OWNERDRAW,210,36,17,16\r
+ CONTROL "=",IDC_EQUAL,"Button",BS_OWNERDRAW,228,36,17,16\r
+ CONTROL "(\\)",IDC_BACKSLASH1,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,7,256,17,16\r
+ CONTROL "BS",IDC_BACKSPACE,"Button",BS_OWNERDRAW,246,36,35,16\r
+ CONTROL "Tab",IDC_TAB,"Button",BS_OWNERDRAW,12,53,26,16\r
+ CONTROL "Q",IDC_Q,"Button",BS_OWNERDRAW,39,53,17,16\r
+ CONTROL "W",IDC_W,"Button",BS_OWNERDRAW,57,53,17,16\r
+ CONTROL "E",IDC_E,"Button",BS_OWNERDRAW,75,53,17,16\r
+ CONTROL "R",IDC_R,"Button",BS_OWNERDRAW,93,53,17,16\r
+ CONTROL "T",IDC_T,"Button",BS_OWNERDRAW,111,53,17,16\r
+ CONTROL "Y",IDC_Y,"Button",BS_OWNERDRAW,129,53,17,16\r
+ CONTROL "U",IDC_U,"Button",BS_OWNERDRAW,147,53,17,16\r
+ CONTROL "I",IDC_I,"Button",BS_OWNERDRAW,165,53,17,16\r
+ CONTROL "O",IDC_O,"Button",BS_OWNERDRAW,183,53,17,16\r
+ CONTROL "P",IDC_P,"Button",BS_OWNERDRAW,201,53,17,16\r
+ CONTROL "[",IDC_SQUARE_BRA,"Button",BS_OWNERDRAW,219,53,17,16\r
+ CONTROL "]",IDC_SQUARE_CKET,"Button",BS_OWNERDRAW,237,53,17,16\r
+ CONTROL "\\",IDC_BACKSLASH,"Button",BS_OWNERDRAW,255,53,26,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK,"Button",BS_OWNERDRAW,12,70,30,16\r
+ CONTROL "A",IDC_A,"Button",BS_OWNERDRAW,43,70,17,16\r
+ CONTROL "S",IDC_S,"Button",BS_OWNERDRAW,61,70,17,16\r
+ CONTROL "D",IDC_D,"Button",BS_OWNERDRAW,79,70,17,16\r
+ CONTROL "F",IDC_F,"Button",BS_OWNERDRAW,97,70,17,16\r
+ CONTROL "G",IDC_G,"Button",BS_OWNERDRAW,115,70,17,16\r
+ CONTROL "H",IDC_H,"Button",BS_OWNERDRAW,133,70,17,16\r
+ CONTROL "J",IDC_J,"Button",BS_OWNERDRAW,151,70,17,16\r
+ CONTROL "K",IDC_K,"Button",BS_OWNERDRAW,169,70,17,16\r
+ CONTROL "L",IDC_L,"Button",BS_OWNERDRAW,187,70,17,16\r
+ CONTROL ";",IDC_SEMICOLON,"Button",BS_OWNERDRAW,205,70,17,16\r
+ CONTROL "'",IDC_QUOTE,"Button",BS_OWNERDRAW,223,70,17,16\r
+ CONTROL "Enter",IDC_ENTER,"Button",BS_OWNERDRAW,241,70,40,16\r
+ CONTROL "Shift",IDC_LEFT_SHIFT,"Button",BS_OWNERDRAW,12,87,39,16\r
+ CONTROL "Z",IDC_Z,"Button",BS_OWNERDRAW,52,87,17,16\r
+ CONTROL "X",IDC_X,"Button",BS_OWNERDRAW,70,87,17,16\r
+ CONTROL "C",IDC_C,"Button",BS_OWNERDRAW,88,87,17,16\r
+ CONTROL "V",IDC_V,"Button",BS_OWNERDRAW,106,87,17,16\r
+ CONTROL "B",IDC_B,"Button",BS_OWNERDRAW,124,87,17,16\r
+ CONTROL "N",IDC_N,"Button",BS_OWNERDRAW,142,87,17,16\r
+ CONTROL "M",IDC_M,"Button",BS_OWNERDRAW,160,87,17,16\r
+ CONTROL ",",IDC_COMMA,"Button",BS_OWNERDRAW,178,87,17,16\r
+ CONTROL ".",IDC_PERIOD,"Button",BS_OWNERDRAW,196,87,17,16\r
+ CONTROL "/",IDC_SLASH,"Button",BS_OWNERDRAW,214,87,17,16\r
+ CONTROL "\\",IDC_BACKSLASH2,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,29,256,17,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT,"Button",BS_OWNERDRAW,232,87,49,\r
+ 16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL,"Button",BS_OWNERDRAW,12,104,27,16\r
+ CONTROL "Win",IDC_LEFT_WINDOWS,"Button",BS_OWNERDRAW,40,104,27,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT,"Button",BS_OWNERDRAW,68,104,27,16\r
+ CONTROL "NCn",IDC_NONCONVERT,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,97,256,17,16\r
+ CONTROL "Space",IDC_SPACE,"Button",BS_OWNERDRAW,96,104,73,16\r
+ CONTROL "Cnv",IDC_CONVERT,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,\r
+ 52,256,17,16\r
+ CONTROL "Kna",IDC_KANA,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,75,\r
+ 256,17,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT,"Button",BS_OWNERDRAW,170,104,27,16\r
+ CONTROL "RWin",IDC_RIGHT_WINDOWS,"Button",BS_OWNERDRAW,198,104,\r
+ 27,16\r
+ CONTROL "App",IDC_APPLICATION,"Button",BS_OWNERDRAW,226,104,27,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL,"Button",BS_OWNERDRAW,254,104,27,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT,"Button",BS_OWNERDRAW,284,36,17,16\r
+ CONTROL "Hm",IDC_HOME,"Button",BS_OWNERDRAW,302,36,17,16\r
+ CONTROL "PU",IDC_PAGE_UP,"Button",BS_OWNERDRAW,320,36,17,16\r
+ CONTROL "Del",IDC_DELETE,"Button",BS_OWNERDRAW,284,53,17,16\r
+ CONTROL "End",IDC_END,"Button",BS_OWNERDRAW,302,53,17,16\r
+ CONTROL "PD",IDC_PAGE_DOWN,"Button",BS_OWNERDRAW,320,53,17,16\r
+ CONTROL "Up",IDC_UP,"Button",BS_OWNERDRAW,302,87,17,16\r
+ CONTROL "<-",IDC_LEFT,"Button",BS_OWNERDRAW,284,104,17,16\r
+ CONTROL "Dn",IDC_DOWN,"Button",BS_OWNERDRAW,302,104,17,16\r
+ CONTROL "->",IDC_RIGHT,"Button",BS_OWNERDRAW,320,104,17,16\r
+ CONTROL "NL",IDC_NUM_LOCK,"Button",BS_OWNERDRAW,340,36,17,16\r
+ CONTROL "(/)",IDC_DIVIDE,"Button",BS_OWNERDRAW,358,36,17,16\r
+ CONTROL "*",IDC_MULTIPLY,"Button",BS_OWNERDRAW,376,36,17,16\r
+ CONTROL "(-)",IDC_SUBTRACT,"Button",BS_OWNERDRAW,394,36,17,16\r
+ CONTROL "(7)",IDC_NUMPAD7,"Button",BS_OWNERDRAW,340,53,17,16\r
+ CONTROL "(8)",IDC_NUMPAD8,"Button",BS_OWNERDRAW,358,53,17,16\r
+ CONTROL "(9)",IDC_NUMPAD9,"Button",BS_OWNERDRAW,376,53,17,16\r
+ CONTROL "(4)",IDC_NUMPAD4,"Button",BS_OWNERDRAW,340,70,17,16\r
+ CONTROL "(5)",IDC_NUMPAD5,"Button",BS_OWNERDRAW,358,70,17,16\r
+ CONTROL "(6)",IDC_NUMPAD6,"Button",BS_OWNERDRAW,376,70,17,16\r
+ CONTROL "+",IDC_ADD,"Button",BS_OWNERDRAW,394,53,17,33\r
+ CONTROL "(1)",IDC_NUMPAD1,"Button",BS_OWNERDRAW,340,87,17,16\r
+ CONTROL "(2)",IDC_NUMPAD2,"Button",BS_OWNERDRAW,358,87,17,16\r
+ CONTROL "(3)",IDC_NUMPAD3,"Button",BS_OWNERDRAW,376,87,17,16\r
+ CONTROL "(0)",IDC_NUMPAD0,"Button",BS_OWNERDRAW,340,104,35,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE,"Button",BS_OWNERDRAW,376,104,17,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER,"Button",BS_OWNERDRAW,394,87,17,33\r
+ CONTROL "Esc",IDC_ESC_,"Button",BS_OWNERDRAW,12,142,17,16\r
+ CONTROL "F1",IDC_F1_,"Button",BS_OWNERDRAW,48,142,17,16\r
+ CONTROL "F2",IDC_F2_,"Button",BS_OWNERDRAW,66,142,17,16\r
+ CONTROL "F3",IDC_F3_,"Button",BS_OWNERDRAW,84,142,17,16\r
+ CONTROL "F4",IDC_F4_,"Button",BS_OWNERDRAW,102,142,17,16\r
+ CONTROL "F5",IDC_F5_,"Button",BS_OWNERDRAW,128,142,17,16\r
+ CONTROL "F6",IDC_F6_,"Button",BS_OWNERDRAW,146,142,17,16\r
+ CONTROL "F7",IDC_F7_,"Button",BS_OWNERDRAW,164,142,17,16\r
+ CONTROL "F8",IDC_F8_,"Button",BS_OWNERDRAW,182,142,17,16\r
+ CONTROL "F9",IDC_F9_,"Button",BS_OWNERDRAW,210,142,17,16\r
+ CONTROL "F10",IDC_F10_,"Button",BS_OWNERDRAW,228,142,17,16\r
+ CONTROL "F11",IDC_F11_,"Button",BS_OWNERDRAW,246,142,17,16\r
+ CONTROL "F12",IDC_F12_,"Button",BS_OWNERDRAW,264,142,17,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN_,"Button",BS_OWNERDRAW,284,142,17,\r
+ 16\r
+ CONTROL "SL",IDC_SCROLL_LOCK_,"Button",BS_OWNERDRAW,302,142,17,\r
+ 16\r
+ CONTROL "Pau",IDC_PAUSE_,"Button",BS_OWNERDRAW,320,142,17,16\r
+ CONTROL "`",IDC_BACK_QUOTE_,"Button",BS_OWNERDRAW,12,162,17,16\r
+ CONTROL "1",IDC_1_,"Button",BS_OWNERDRAW,30,162,17,16\r
+ CONTROL "2",IDC_2_,"Button",BS_OWNERDRAW,48,162,17,16\r
+ CONTROL "3",IDC_3_,"Button",BS_OWNERDRAW,66,162,17,16\r
+ CONTROL "4",IDC_4_,"Button",BS_OWNERDRAW,84,162,17,16\r
+ CONTROL "5",IDC_5_,"Button",BS_OWNERDRAW,102,162,17,16\r
+ CONTROL "6",IDC_6_,"Button",BS_OWNERDRAW,120,162,17,16\r
+ CONTROL "7",IDC_7_,"Button",BS_OWNERDRAW,138,162,17,16\r
+ CONTROL "8",IDC_8_,"Button",BS_OWNERDRAW,156,162,17,16\r
+ CONTROL "9",IDC_9_,"Button",BS_OWNERDRAW,174,162,17,16\r
+ CONTROL "0",IDC_0_,"Button",BS_OWNERDRAW,192,162,17,16\r
+ CONTROL "-",IDC_MINUS_,"Button",BS_OWNERDRAW,210,162,17,16\r
+ CONTROL "=",IDC_EQUAL_,"Button",BS_OWNERDRAW,228,162,17,16\r
+ CONTROL "(\\)",IDC_BACKSLASH1_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,205,256,17,16\r
+ CONTROL "BS",IDC_BACKSPACE_,"Button",BS_OWNERDRAW,246,162,35,16\r
+ CONTROL "Tab",IDC_TAB_,"Button",BS_OWNERDRAW,12,179,26,16\r
+ CONTROL "Q",IDC_Q_,"Button",BS_OWNERDRAW,39,179,17,16\r
+ CONTROL "W",IDC_W_,"Button",BS_OWNERDRAW,57,179,17,16\r
+ CONTROL "E",IDC_E_,"Button",BS_OWNERDRAW,75,179,17,16\r
+ CONTROL "R",IDC_R_,"Button",BS_OWNERDRAW,93,179,17,16\r
+ CONTROL "T",IDC_T_,"Button",BS_OWNERDRAW,111,179,17,16\r
+ CONTROL "Y",IDC_Y_,"Button",BS_OWNERDRAW,129,179,17,16\r
+ CONTROL "U",IDC_U_,"Button",BS_OWNERDRAW,147,179,17,16\r
+ CONTROL "I",IDC_I_,"Button",BS_OWNERDRAW,165,179,17,16\r
+ CONTROL "O",IDC_O_,"Button",BS_OWNERDRAW,183,179,17,16\r
+ CONTROL "P",IDC_P_,"Button",BS_OWNERDRAW,201,179,17,16\r
+ CONTROL "[",IDC_SQUARE_BRA_,"Button",BS_OWNERDRAW,219,179,17,16\r
+ CONTROL "]",IDC_SQUARE_CKET_,"Button",BS_OWNERDRAW,237,179,17,16\r
+ CONTROL "\\",IDC_BACKSLASH_,"Button",BS_OWNERDRAW,255,179,26,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK_,"Button",BS_OWNERDRAW,12,196,30,16\r
+ CONTROL "A",IDC_A_,"Button",BS_OWNERDRAW,43,196,17,16\r
+ CONTROL "S",IDC_S_,"Button",BS_OWNERDRAW,61,196,17,16\r
+ CONTROL "D",IDC_D_,"Button",BS_OWNERDRAW,79,196,17,16\r
+ CONTROL "F",IDC_F_,"Button",BS_OWNERDRAW,97,196,17,16\r
+ CONTROL "G",IDC_G_,"Button",BS_OWNERDRAW,115,196,17,16\r
+ CONTROL "H",IDC_H_,"Button",BS_OWNERDRAW,133,196,17,16\r
+ CONTROL "J",IDC_J_,"Button",BS_OWNERDRAW,151,196,17,16\r
+ CONTROL "K",IDC_K_,"Button",BS_OWNERDRAW,169,196,17,16\r
+ CONTROL "L",IDC_L_,"Button",BS_OWNERDRAW,187,196,17,16\r
+ CONTROL ";",IDC_SEMICOLON_,"Button",BS_OWNERDRAW,205,196,17,16\r
+ CONTROL "'",IDC_QUOTE_,"Button",BS_OWNERDRAW,223,196,17,16\r
+ CONTROL "Enter",IDC_ENTER_,"Button",BS_OWNERDRAW,241,196,40,16\r
+ CONTROL "Shift",IDC_LEFT_SHIFT_,"Button",BS_OWNERDRAW,12,213,39,\r
+ 16\r
+ CONTROL "Z",IDC_Z_,"Button",BS_OWNERDRAW,52,213,17,16\r
+ CONTROL "X",IDC_X_,"Button",BS_OWNERDRAW,70,213,17,16\r
+ CONTROL "C",IDC_C_,"Button",BS_OWNERDRAW,88,213,17,16\r
+ CONTROL "V",IDC_V_,"Button",BS_OWNERDRAW,106,213,17,16\r
+ CONTROL "B",IDC_B_,"Button",BS_OWNERDRAW,124,213,17,16\r
+ CONTROL "N",IDC_N_,"Button",BS_OWNERDRAW,142,213,17,16\r
+ CONTROL "M",IDC_M_,"Button",BS_OWNERDRAW,160,213,17,16\r
+ CONTROL ",",IDC_COMMA_,"Button",BS_OWNERDRAW,178,213,17,16\r
+ CONTROL ".",IDC_PERIOD_,"Button",BS_OWNERDRAW,196,213,17,16\r
+ CONTROL "/",IDC_SLASH_,"Button",BS_OWNERDRAW,214,213,17,16\r
+ CONTROL "\\",IDC_BACKSLASH2_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,225,256,17,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT_,"Button",BS_OWNERDRAW,232,213,\r
+ 49,16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL_,"Button",BS_OWNERDRAW,12,230,27,16\r
+ CONTROL "Win",IDC_LEFT_WINDOWS_,"Button",BS_OWNERDRAW,40,230,27,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT_,"Button",BS_OWNERDRAW,68,230,27,16\r
+ CONTROL "NCn",IDC_NONCONVERT_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,287,256,17,16\r
+ CONTROL "Space",IDC_SPACE_,"Button",BS_OWNERDRAW,96,230,73,16\r
+ CONTROL "Cnv",IDC_CONVERT_,"Button",BS_OWNERDRAW | NOT \r
+ WS_VISIBLE,245,256,17,16\r
+ CONTROL "Kna",IDC_KANA_,"Button",BS_OWNERDRAW | NOT WS_VISIBLE,\r
+ 266,256,17,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT_,"Button",BS_OWNERDRAW,170,230,27,\r
+ 16\r
+ CONTROL "RWin",IDC_RIGHT_WINDOWS_,"Button",BS_OWNERDRAW,198,230,\r
+ 27,16\r
+ CONTROL "App",IDC_APPLICATION_,"Button",BS_OWNERDRAW,226,230,27,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL_,"Button",BS_OWNERDRAW,254,230,27,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT_,"Button",BS_OWNERDRAW,284,162,17,16\r
+ CONTROL "Hm",IDC_HOME_,"Button",BS_OWNERDRAW,302,162,17,16\r
+ CONTROL "PU",IDC_PAGE_UP_,"Button",BS_OWNERDRAW,320,162,17,16\r
+ CONTROL "Del",IDC_DELETE_,"Button",BS_OWNERDRAW,284,179,17,16\r
+ CONTROL "End",IDC_END_,"Button",BS_OWNERDRAW,302,179,17,16\r
+ CONTROL "PD",IDC_PAGE_DOWN_,"Button",BS_OWNERDRAW,320,179,17,16\r
+ CONTROL "Up",IDC_UP_,"Button",BS_OWNERDRAW,302,213,17,16\r
+ CONTROL "<-",IDC_LEFT_,"Button",BS_OWNERDRAW,284,230,17,16\r
+ CONTROL "Dn",IDC_DOWN_,"Button",BS_OWNERDRAW,302,230,17,16\r
+ CONTROL "->",IDC_RIGHT_,"Button",BS_OWNERDRAW,320,230,17,16\r
+ CONTROL "NL",IDC_NUM_LOCK_,"Button",BS_OWNERDRAW,340,162,17,16\r
+ CONTROL "(/)",IDC_DIVIDE_,"Button",BS_OWNERDRAW,358,162,17,16\r
+ CONTROL "*",IDC_MULTIPLY_,"Button",BS_OWNERDRAW,376,162,17,16\r
+ CONTROL "(-)",IDC_SUBTRACT_,"Button",BS_OWNERDRAW,394,162,17,16\r
+ CONTROL "(7)",IDC_NUMPAD7_,"Button",BS_OWNERDRAW,340,179,17,16\r
+ CONTROL "(8)",IDC_NUMPAD8_,"Button",BS_OWNERDRAW,358,179,17,16\r
+ CONTROL "(9)",IDC_NUMPAD9_,"Button",BS_OWNERDRAW,376,179,17,16\r
+ CONTROL "(4)",IDC_NUMPAD4_,"Button",BS_OWNERDRAW,340,196,17,16\r
+ CONTROL "(5)",IDC_NUMPAD5_,"Button",BS_OWNERDRAW,358,196,17,16\r
+ CONTROL "(6)",IDC_NUMPAD6_,"Button",BS_OWNERDRAW,376,196,17,16\r
+ CONTROL "+",IDC_ADD_,"Button",BS_OWNERDRAW,394,179,17,33\r
+ CONTROL "(1)",IDC_NUMPAD1_,"Button",BS_OWNERDRAW,340,213,17,16\r
+ CONTROL "(2)",IDC_NUMPAD2_,"Button",BS_OWNERDRAW,358,213,17,16\r
+ CONTROL "(3)",IDC_NUMPAD3_,"Button",BS_OWNERDRAW,376,213,17,16\r
+ CONTROL "(0)",IDC_NUMPAD0_,"Button",BS_OWNERDRAW,340,230,35,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE_,"Button",BS_OWNERDRAW,376,230,17,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER_,"Button",BS_OWNERDRAW,394,213,17,\r
+ 33\r
+ GROUPBOX "Base keyboard",IDC_STATIC,7,7,409,120\r
+ GROUPBOX "Remapped keyboard",IDC_STATIC,7,132,409,120\r
+ CONTROL "Wk",IDC_ACPI_WAKE,"Button",BS_OWNERDRAW,358,16,17,16\r
+ CONTROL "Wk",IDC_ACPI_WAKE_,"Button",BS_OWNERDRAW,358,142,17,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP,"Button",BS_OWNERDRAW,376,16,17,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP_,"Button",BS_OWNERDRAW,376,142,17,\r
+ 16\r
+ CONTROL "Pw",IDC_ACPI_POWER,"Button",BS_OWNERDRAW,394,16,17,16\r
+ CONTROL "Pw",IDC_ACPI_POWER_,"Button",BS_OWNERDRAW,394,142,17,16\r
+END\r
+\r
+IDD_109KEYBOARD DIALOG DISCARDABLE 0, 0, 422, 280\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Keyboard Layout"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ DEFPUSHBUTTON "OK",IDOK,311,258,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,366,258,50,14\r
+ CONTROL "Esc",IDC_ESC,"Button",BS_OWNERDRAW,12,16,17,16\r
+ CONTROL "F1",IDC_F1,"Button",BS_OWNERDRAW,48,16,17,16\r
+ CONTROL "F2",IDC_F2,"Button",BS_OWNERDRAW,66,16,17,16\r
+ CONTROL "F3",IDC_F3,"Button",BS_OWNERDRAW,84,16,17,16\r
+ CONTROL "F4",IDC_F4,"Button",BS_OWNERDRAW,102,16,17,16\r
+ CONTROL "F5",IDC_F5,"Button",BS_OWNERDRAW,128,16,17,16\r
+ CONTROL "F6",IDC_F6,"Button",BS_OWNERDRAW,146,16,17,16\r
+ CONTROL "F7",IDC_F7,"Button",BS_OWNERDRAW,164,16,17,16\r
+ CONTROL "F8",IDC_F8,"Button",BS_OWNERDRAW,182,16,17,16\r
+ CONTROL "F9",IDC_F9,"Button",BS_OWNERDRAW,210,16,17,16\r
+ CONTROL "F10",IDC_F10,"Button",BS_OWNERDRAW,228,16,17,16\r
+ CONTROL "F11",IDC_F11,"Button",BS_OWNERDRAW,246,16,17,16\r
+ CONTROL "F12",IDC_F12,"Button",BS_OWNERDRAW,264,16,17,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN,"Button",BS_OWNERDRAW,284,16,17,16\r
+ CONTROL "SL",IDC_SCROLL_LOCK,"Button",BS_OWNERDRAW,302,16,17,16\r
+ CONTROL "Pau",IDC_PAUSE,"Button",BS_OWNERDRAW,320,16,17,16\r
+ CONTROL "H/Z",IDC_BACK_QUOTE,"Button",BS_OWNERDRAW,12,36,17,16\r
+ CONTROL "1",IDC_1,"Button",BS_OWNERDRAW,30,36,17,16\r
+ CONTROL "2",IDC_2,"Button",BS_OWNERDRAW,48,36,17,16\r
+ CONTROL "3",IDC_3,"Button",BS_OWNERDRAW,66,36,17,16\r
+ CONTROL "4",IDC_4,"Button",BS_OWNERDRAW,84,36,17,16\r
+ CONTROL "5",IDC_5,"Button",BS_OWNERDRAW,102,36,17,16\r
+ CONTROL "6",IDC_6,"Button",BS_OWNERDRAW,120,36,17,16\r
+ CONTROL "7",IDC_7,"Button",BS_OWNERDRAW,138,36,17,16\r
+ CONTROL "8",IDC_8,"Button",BS_OWNERDRAW,156,36,17,16\r
+ CONTROL "9",IDC_9,"Button",BS_OWNERDRAW,174,36,17,16\r
+ CONTROL "0",IDC_0,"Button",BS_OWNERDRAW,192,36,17,16\r
+ CONTROL "-",IDC_MINUS,"Button",BS_OWNERDRAW,210,36,17,16\r
+ CONTROL "^",IDC_EQUAL,"Button",BS_OWNERDRAW,228,36,17,16\r
+ CONTROL "(\\)",IDC_BACKSLASH1,"Button",BS_OWNERDRAW,246,36,17,16\r
+ CONTROL "BS",IDC_BACKSPACE,"Button",BS_OWNERDRAW,264,36,17,16\r
+ CONTROL "Tab",IDC_TAB,"Button",BS_OWNERDRAW,12,53,26,16\r
+ CONTROL "Q",IDC_Q,"Button",BS_OWNERDRAW,39,53,17,16\r
+ CONTROL "W",IDC_W,"Button",BS_OWNERDRAW,57,53,17,16\r
+ CONTROL "E",IDC_E,"Button",BS_OWNERDRAW,75,53,17,16\r
+ CONTROL "R",IDC_R,"Button",BS_OWNERDRAW,93,53,17,16\r
+ CONTROL "T",IDC_T,"Button",BS_OWNERDRAW,111,53,17,16\r
+ CONTROL "Y",IDC_Y,"Button",BS_OWNERDRAW,129,53,17,16\r
+ CONTROL "U",IDC_U,"Button",BS_OWNERDRAW,147,53,17,16\r
+ CONTROL "I",IDC_I,"Button",BS_OWNERDRAW,165,53,17,16\r
+ CONTROL "O",IDC_O,"Button",BS_OWNERDRAW,183,53,17,16\r
+ CONTROL "P",IDC_P,"Button",BS_OWNERDRAW,201,53,17,16\r
+ CONTROL "@",IDC_SQUARE_BRA,"Button",BS_OWNERDRAW,219,53,17,16\r
+ CONTROL "[",IDC_SQUARE_CKET,"Button",BS_OWNERDRAW,237,53,21,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK,"Button",BS_OWNERDRAW,12,70,30,16\r
+ CONTROL "A",IDC_A,"Button",BS_OWNERDRAW,43,70,17,16\r
+ CONTROL "S",IDC_S,"Button",BS_OWNERDRAW,61,70,17,16\r
+ CONTROL "D",IDC_D,"Button",BS_OWNERDRAW,79,70,17,16\r
+ CONTROL "F",IDC_F,"Button",BS_OWNERDRAW,97,70,17,16\r
+ CONTROL "G",IDC_G,"Button",BS_OWNERDRAW,115,70,17,16\r
+ CONTROL "H",IDC_H,"Button",BS_OWNERDRAW,133,70,17,16\r
+ CONTROL "J",IDC_J,"Button",BS_OWNERDRAW,151,70,17,16\r
+ CONTROL "K",IDC_K,"Button",BS_OWNERDRAW,169,70,17,16\r
+ CONTROL "L",IDC_L,"Button",BS_OWNERDRAW,187,70,17,16\r
+ CONTROL ";",IDC_SEMICOLON,"Button",BS_OWNERDRAW,205,70,17,16\r
+ CONTROL ":",IDC_QUOTE,"Button",BS_OWNERDRAW,223,70,17,16\r
+ CONTROL "]",IDC_BACKSLASH,"Button",BS_OWNERDRAW,241,70,17,16\r
+ CONTROL "Enter",IDC_ENTER,"Button",BS_OWNERDRAW,259,53,22,33\r
+ CONTROL "Shift",IDC_LEFT_SHIFT,"Button",BS_OWNERDRAW,12,87,39,16\r
+ CONTROL "Z",IDC_Z,"Button",BS_OWNERDRAW,52,87,17,16\r
+ CONTROL "X",IDC_X,"Button",BS_OWNERDRAW,70,87,17,16\r
+ CONTROL "C",IDC_C,"Button",BS_OWNERDRAW,88,87,17,16\r
+ CONTROL "V",IDC_V,"Button",BS_OWNERDRAW,106,87,17,16\r
+ CONTROL "B",IDC_B,"Button",BS_OWNERDRAW,124,87,17,16\r
+ CONTROL "N",IDC_N,"Button",BS_OWNERDRAW,142,87,17,16\r
+ CONTROL "M",IDC_M,"Button",BS_OWNERDRAW,160,87,17,16\r
+ CONTROL ",",IDC_COMMA,"Button",BS_OWNERDRAW,178,87,17,16\r
+ CONTROL ".",IDC_PERIOD,"Button",BS_OWNERDRAW,196,87,17,16\r
+ CONTROL "/",IDC_SLASH,"Button",BS_OWNERDRAW,214,87,17,16\r
+ CONTROL "\\",IDC_BACKSLASH2,"Button",BS_OWNERDRAW,232,87,17,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT,"Button",BS_OWNERDRAW,250,87,31,\r
+ 16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL,"Button",BS_OWNERDRAW,12,104,23,16\r
+ CONTROL "Win",IDC_LEFT_WINDOWS,"Button",BS_OWNERDRAW,36,104,17,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT,"Button",BS_OWNERDRAW,54,104,23,16\r
+ CONTROL "NCn",IDC_NONCONVERT,"Button",BS_OWNERDRAW,78,104,17,16\r
+ CONTROL "Space",IDC_SPACE,"Button",BS_OWNERDRAW,96,104,65,16\r
+ CONTROL "Cnv",IDC_CONVERT,"Button",BS_OWNERDRAW,162,104,17,16\r
+ CONTROL "Kna",IDC_KANA,"Button",BS_OWNERDRAW,180,104,17,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT,"Button",BS_OWNERDRAW,198,104,23,16\r
+ CONTROL "RW",IDC_RIGHT_WINDOWS,"Button",BS_OWNERDRAW,222,104,17,\r
+ 16\r
+ CONTROL "App",IDC_APPLICATION,"Button",BS_OWNERDRAW,240,104,17,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL,"Button",BS_OWNERDRAW,258,104,23,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT,"Button",BS_OWNERDRAW,284,36,17,16\r
+ CONTROL "Hm",IDC_HOME,"Button",BS_OWNERDRAW,302,36,17,16\r
+ CONTROL "PU",IDC_PAGE_UP,"Button",BS_OWNERDRAW,320,36,17,16\r
+ CONTROL "Del",IDC_DELETE,"Button",BS_OWNERDRAW,284,53,17,16\r
+ CONTROL "End",IDC_END,"Button",BS_OWNERDRAW,302,53,17,16\r
+ CONTROL "PD",IDC_PAGE_DOWN,"Button",BS_OWNERDRAW,320,53,17,16\r
+ CONTROL "Up",IDC_UP,"Button",BS_OWNERDRAW,302,87,17,16\r
+ CONTROL "<-",IDC_LEFT,"Button",BS_OWNERDRAW,284,104,17,16\r
+ CONTROL "Dn",IDC_DOWN,"Button",BS_OWNERDRAW,302,104,17,16\r
+ CONTROL "->",IDC_RIGHT,"Button",BS_OWNERDRAW,320,104,17,16\r
+ CONTROL "NL",IDC_NUM_LOCK,"Button",BS_OWNERDRAW,340,36,17,16\r
+ CONTROL "(/)",IDC_DIVIDE,"Button",BS_OWNERDRAW,358,36,17,16\r
+ CONTROL "*",IDC_MULTIPLY,"Button",BS_OWNERDRAW,376,36,17,16\r
+ CONTROL "(-)",IDC_SUBTRACT,"Button",BS_OWNERDRAW,394,36,17,16\r
+ CONTROL "(7)",IDC_NUMPAD7,"Button",BS_OWNERDRAW,340,53,17,16\r
+ CONTROL "(8)",IDC_NUMPAD8,"Button",BS_OWNERDRAW,358,53,17,16\r
+ CONTROL "(9)",IDC_NUMPAD9,"Button",BS_OWNERDRAW,376,53,17,16\r
+ CONTROL "(4)",IDC_NUMPAD4,"Button",BS_OWNERDRAW,340,70,17,16\r
+ CONTROL "(5)",IDC_NUMPAD5,"Button",BS_OWNERDRAW,358,70,17,16\r
+ CONTROL "(6)",IDC_NUMPAD6,"Button",BS_OWNERDRAW,376,70,17,16\r
+ CONTROL "+",IDC_ADD,"Button",BS_OWNERDRAW,394,53,17,33\r
+ CONTROL "(1)",IDC_NUMPAD1,"Button",BS_OWNERDRAW,340,87,17,16\r
+ CONTROL "(2)",IDC_NUMPAD2,"Button",BS_OWNERDRAW,358,87,17,16\r
+ CONTROL "(3)",IDC_NUMPAD3,"Button",BS_OWNERDRAW,376,87,17,16\r
+ CONTROL "(0)",IDC_NUMPAD0,"Button",BS_OWNERDRAW,340,104,35,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE,"Button",BS_OWNERDRAW,376,104,17,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER,"Button",BS_OWNERDRAW,394,87,17,33\r
+ CONTROL "Esc",IDC_ESC_,"Button",BS_OWNERDRAW,12,142,17,16\r
+ CONTROL "F1",IDC_F1_,"Button",BS_OWNERDRAW,48,142,17,16\r
+ CONTROL "F2",IDC_F2_,"Button",BS_OWNERDRAW,66,142,17,16\r
+ CONTROL "F3",IDC_F3_,"Button",BS_OWNERDRAW,84,142,17,16\r
+ CONTROL "F4",IDC_F4_,"Button",BS_OWNERDRAW,102,142,17,16\r
+ CONTROL "F5",IDC_F5_,"Button",BS_OWNERDRAW,128,142,17,16\r
+ CONTROL "F6",IDC_F6_,"Button",BS_OWNERDRAW,146,142,17,16\r
+ CONTROL "F7",IDC_F7_,"Button",BS_OWNERDRAW,164,142,17,16\r
+ CONTROL "F8",IDC_F8_,"Button",BS_OWNERDRAW,182,142,17,16\r
+ CONTROL "F9",IDC_F9_,"Button",BS_OWNERDRAW,210,142,17,16\r
+ CONTROL "F10",IDC_F10_,"Button",BS_OWNERDRAW,228,142,17,16\r
+ CONTROL "F11",IDC_F11_,"Button",BS_OWNERDRAW,246,142,17,16\r
+ CONTROL "F12",IDC_F12_,"Button",BS_OWNERDRAW,264,142,17,16\r
+ CONTROL "PS",IDC_PRINT_SCREEN_,"Button",BS_OWNERDRAW,284,142,17,\r
+ 16\r
+ CONTROL "SL",IDC_SCROLL_LOCK_,"Button",BS_OWNERDRAW,302,142,17,\r
+ 16\r
+ CONTROL "Pau",IDC_PAUSE_,"Button",BS_OWNERDRAW,320,142,17,16\r
+ CONTROL "H/Z",IDC_BACK_QUOTE_,"Button",BS_OWNERDRAW,12,162,17,16\r
+ CONTROL "1",IDC_1_,"Button",BS_OWNERDRAW,30,162,17,16\r
+ CONTROL "2",IDC_2_,"Button",BS_OWNERDRAW,48,162,17,16\r
+ CONTROL "3",IDC_3_,"Button",BS_OWNERDRAW,66,162,17,16\r
+ CONTROL "4",IDC_4_,"Button",BS_OWNERDRAW,84,162,17,16\r
+ CONTROL "5",IDC_5_,"Button",BS_OWNERDRAW,102,162,17,16\r
+ CONTROL "6",IDC_6_,"Button",BS_OWNERDRAW,120,162,17,16\r
+ CONTROL "7",IDC_7_,"Button",BS_OWNERDRAW,138,162,17,16\r
+ CONTROL "8",IDC_8_,"Button",BS_OWNERDRAW,156,162,17,16\r
+ CONTROL "9",IDC_9_,"Button",BS_OWNERDRAW,174,162,17,16\r
+ CONTROL "0",IDC_0_,"Button",BS_OWNERDRAW,192,162,17,16\r
+ CONTROL "-",IDC_MINUS_,"Button",BS_OWNERDRAW,210,162,17,16\r
+ CONTROL "^",IDC_EQUAL_,"Button",BS_OWNERDRAW,228,162,17,16\r
+ CONTROL "(\\)",IDC_BACKSLASH1_,"Button",BS_OWNERDRAW,246,162,17,\r
+ 16\r
+ CONTROL "BS",IDC_BACKSPACE_,"Button",BS_OWNERDRAW,264,162,17,16\r
+ CONTROL "Tab",IDC_TAB_,"Button",BS_OWNERDRAW,12,179,26,16\r
+ CONTROL "Q",IDC_Q_,"Button",BS_OWNERDRAW,39,179,17,16\r
+ CONTROL "W",IDC_W_,"Button",BS_OWNERDRAW,57,179,17,16\r
+ CONTROL "E",IDC_E_,"Button",BS_OWNERDRAW,75,179,17,16\r
+ CONTROL "R",IDC_R_,"Button",BS_OWNERDRAW,93,179,17,16\r
+ CONTROL "T",IDC_T_,"Button",BS_OWNERDRAW,111,179,17,16\r
+ CONTROL "Y",IDC_Y_,"Button",BS_OWNERDRAW,129,179,17,16\r
+ CONTROL "U",IDC_U_,"Button",BS_OWNERDRAW,147,179,17,16\r
+ CONTROL "I",IDC_I_,"Button",BS_OWNERDRAW,165,179,17,16\r
+ CONTROL "O",IDC_O_,"Button",BS_OWNERDRAW,183,179,17,16\r
+ CONTROL "P",IDC_P_,"Button",BS_OWNERDRAW,201,179,17,16\r
+ CONTROL "@",IDC_SQUARE_BRA_,"Button",BS_OWNERDRAW,219,179,17,16\r
+ CONTROL "[",IDC_SQUARE_CKET_,"Button",BS_OWNERDRAW,237,179,21,16\r
+ CONTROL "Caps",IDC_CAPS_LOCK_,"Button",BS_OWNERDRAW,12,196,30,16\r
+ CONTROL "A",IDC_A_,"Button",BS_OWNERDRAW,43,196,17,16\r
+ CONTROL "S",IDC_S_,"Button",BS_OWNERDRAW,61,196,17,16\r
+ CONTROL "D",IDC_D_,"Button",BS_OWNERDRAW,79,196,17,16\r
+ CONTROL "F",IDC_F_,"Button",BS_OWNERDRAW,97,196,17,16\r
+ CONTROL "G",IDC_G_,"Button",BS_OWNERDRAW,115,196,17,16\r
+ CONTROL "H",IDC_H_,"Button",BS_OWNERDRAW,133,196,17,16\r
+ CONTROL "J",IDC_J_,"Button",BS_OWNERDRAW,151,196,17,16\r
+ CONTROL "K",IDC_K_,"Button",BS_OWNERDRAW,169,196,17,16\r
+ CONTROL "L",IDC_L_,"Button",BS_OWNERDRAW,187,196,17,16\r
+ CONTROL ";",IDC_SEMICOLON_,"Button",BS_OWNERDRAW,205,196,17,16\r
+ CONTROL ":",IDC_QUOTE_,"Button",BS_OWNERDRAW,223,196,17,16\r
+ CONTROL "]",IDC_BACKSLASH_,"Button",BS_OWNERDRAW,241,196,17,16\r
+ CONTROL "Enter",IDC_ENTER_,"Button",BS_OWNERDRAW,259,179,22,33\r
+ CONTROL "Shift",IDC_LEFT_SHIFT_,"Button",BS_OWNERDRAW,12,213,39,\r
+ 16\r
+ CONTROL "Z",IDC_Z_,"Button",BS_OWNERDRAW,52,213,17,16\r
+ CONTROL "X",IDC_X_,"Button",BS_OWNERDRAW,70,213,17,16\r
+ CONTROL "C",IDC_C_,"Button",BS_OWNERDRAW,88,213,17,16\r
+ CONTROL "V",IDC_V_,"Button",BS_OWNERDRAW,106,213,17,16\r
+ CONTROL "B",IDC_B_,"Button",BS_OWNERDRAW,124,213,17,16\r
+ CONTROL "N",IDC_N_,"Button",BS_OWNERDRAW,142,213,17,16\r
+ CONTROL "M",IDC_M_,"Button",BS_OWNERDRAW,160,213,17,16\r
+ CONTROL ",",IDC_COMMA_,"Button",BS_OWNERDRAW,178,213,17,16\r
+ CONTROL ".",IDC_PERIOD_,"Button",BS_OWNERDRAW,196,213,17,16\r
+ CONTROL "/",IDC_SLASH_,"Button",BS_OWNERDRAW,214,213,17,16\r
+ CONTROL "\\",IDC_BACKSLASH2_,"Button",BS_OWNERDRAW,232,213,17,16\r
+ CONTROL "RShift",IDC_RIGHT_SHIFT_,"Button",BS_OWNERDRAW,250,213,\r
+ 31,16\r
+ CONTROL "Ctrl",IDC_LEFT_CTRL_,"Button",BS_OWNERDRAW,12,230,23,16\r
+ CONTROL "Win",IDC_LEFT_WINDOWS_,"Button",BS_OWNERDRAW,36,230,17,\r
+ 16\r
+ CONTROL "Alt",IDC_LEFT_ALT_,"Button",BS_OWNERDRAW,54,230,23,16\r
+ CONTROL "NCn",IDC_NONCONVERT_,"Button",BS_OWNERDRAW,78,230,17,16\r
+ CONTROL "Space",IDC_SPACE_,"Button",BS_OWNERDRAW,96,230,65,16\r
+ CONTROL "Cnv",IDC_CONVERT_,"Button",BS_OWNERDRAW,162,230,17,16\r
+ CONTROL "Kna",IDC_KANA_,"Button",BS_OWNERDRAW,180,230,17,16\r
+ CONTROL "RAlt",IDC_RIGHT_ALT_,"Button",BS_OWNERDRAW,198,230,23,\r
+ 16\r
+ CONTROL "RW",IDC_RIGHT_WINDOWS_,"Button",BS_OWNERDRAW,222,230,17,\r
+ 16\r
+ CONTROL "App",IDC_APPLICATION_,"Button",BS_OWNERDRAW,240,230,17,\r
+ 16\r
+ CONTROL "RCtrl",IDC_RIGHT_CTRL_,"Button",BS_OWNERDRAW,258,230,23,\r
+ 16\r
+ CONTROL "Ins",IDC_INSERT_,"Button",BS_OWNERDRAW,284,162,17,16\r
+ CONTROL "Hm",IDC_HOME_,"Button",BS_OWNERDRAW,302,162,17,16\r
+ CONTROL "PU",IDC_PAGE_UP_,"Button",BS_OWNERDRAW,320,162,17,16\r
+ CONTROL "Del",IDC_DELETE_,"Button",BS_OWNERDRAW,284,179,17,16\r
+ CONTROL "End",IDC_END_,"Button",BS_OWNERDRAW,302,179,17,16\r
+ CONTROL "PD",IDC_PAGE_DOWN_,"Button",BS_OWNERDRAW,320,179,17,16\r
+ CONTROL "Up",IDC_UP_,"Button",BS_OWNERDRAW,302,213,17,16\r
+ CONTROL "<-",IDC_LEFT_,"Button",BS_OWNERDRAW,284,230,17,16\r
+ CONTROL "Dn",IDC_DOWN_,"Button",BS_OWNERDRAW,302,230,17,16\r
+ CONTROL "->",IDC_RIGHT_,"Button",BS_OWNERDRAW,320,230,17,16\r
+ CONTROL "NL",IDC_NUM_LOCK_,"Button",BS_OWNERDRAW,340,162,17,16\r
+ CONTROL "(/)",IDC_DIVIDE_,"Button",BS_OWNERDRAW,358,162,17,16\r
+ CONTROL "*",IDC_MULTIPLY_,"Button",BS_OWNERDRAW,376,162,17,16\r
+ CONTROL "(-)",IDC_SUBTRACT_,"Button",BS_OWNERDRAW,394,162,17,16\r
+ CONTROL "(7)",IDC_NUMPAD7_,"Button",BS_OWNERDRAW,340,179,17,16\r
+ CONTROL "(8)",IDC_NUMPAD8_,"Button",BS_OWNERDRAW,358,179,17,16\r
+ CONTROL "(9)",IDC_NUMPAD9_,"Button",BS_OWNERDRAW,376,179,17,16\r
+ CONTROL "(4)",IDC_NUMPAD4_,"Button",BS_OWNERDRAW,340,196,17,16\r
+ CONTROL "(5)",IDC_NUMPAD5_,"Button",BS_OWNERDRAW,358,196,17,16\r
+ CONTROL "(6)",IDC_NUMPAD6_,"Button",BS_OWNERDRAW,376,196,17,16\r
+ CONTROL "+",IDC_ADD_,"Button",BS_OWNERDRAW,394,179,17,33\r
+ CONTROL "(1)",IDC_NUMPAD1_,"Button",BS_OWNERDRAW,340,213,17,16\r
+ CONTROL "(2)",IDC_NUMPAD2_,"Button",BS_OWNERDRAW,358,213,17,16\r
+ CONTROL "(3)",IDC_NUMPAD3_,"Button",BS_OWNERDRAW,376,213,17,16\r
+ CONTROL "(0)",IDC_NUMPAD0_,"Button",BS_OWNERDRAW,340,230,35,16\r
+ CONTROL "Dl",IDC_NUMPADDELETE_,"Button",BS_OWNERDRAW,376,230,17,\r
+ 16\r
+ CONTROL "Ent",IDC_NUMPADENTER_,"Button",BS_OWNERDRAW,394,213,17,\r
+ 33\r
+ GROUPBOX "Base keyboard",IDC_STATIC,7,7,409,120\r
+ GROUPBOX "Remapped keyboard",IDC_STATIC,7,132,409,120\r
+ CONTROL "Pw",IDC_ACPI_POWER,"Button",BS_OWNERDRAW,394,16,17,16\r
+ CONTROL "Pw",IDC_ACPI_POWER_,"Button",BS_OWNERDRAW,394,142,17,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP,"Button",BS_OWNERDRAW,376,16,17,16\r
+ CONTROL "Slp",IDC_ACPI_SLEEP_,"Button",BS_OWNERDRAW,376,142,17,\r
+ 16\r
+ CONTROL "Wk",IDC_ACPI_WAKE,"Button",BS_OWNERDRAW,358,16,17,16\r
+ CONTROL "Wk",IDC_ACPI_WAKE_,"Button",BS_OWNERDRAW,358,142,17,16\r
+END\r
+\r
+IDD_PROPERTIES DIALOGEX 0, 0, 422, 279\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Properties"\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+ COMBOBOX IDC_APPLICATION,7,7,320,246,CBS_DROPDOWNLIST | CBS_SORT | \r
+ WS_VSCROLL | WS_TABSTOP\r
+ CONTROL "Use Default Setting",IDC_SETTING_DEFAULT,"Button",\r
+ BS_AUTORADIOBUTTON | WS_GROUP,338,7,77,10\r
+ CONTROL "Use Specific Setting",IDC_SETTING_SPECIFIC,"Button",\r
+ BS_AUTORADIOBUTTON,338,16,80,10\r
+ CONTROL "Disable XKeymacs",IDC_SETTING_DISABLE,"Button",\r
+ BS_AUTORADIOBUTTON,338,25,75,10\r
+ CONTROL "",IDC_TAB,"Static",SS_BLACKFRAME | WS_GROUP,7,39,411,\r
+ 213\r
+ CONTROL "Use Dialog setting for all dialogs",\r
+ IDC_USE_DIALOG_SETTING,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,15,25,112,10\r
+ PUSHBUTTON "Load Default",IDC_LOAD_DEFAULT,3,260,50,14\r
+ PUSHBUTTON "Select All",IDC_SELECT_ALL,59,260,50,14\r
+ PUSHBUTTON "Clear All",IDC_CLEAR_ALL,116,260,50,14\r
+ DEFPUSHBUTTON "OK",IDOK,254,260,50,14\r
+ PUSHBUTTON "Cancel",IDCANCEL,311,260,50,14\r
+ PUSHBUTTON "&Apply",IDC_APPLY,368,260,50,14\r
+ LTEXT "kill-ring-max: ",IDC_STATIC,262,26,41,8\r
+ EDITTEXT IDC_KILL_RING_MAX,306,24,20,12,ES_AUTOHSCROLL | \r
+ ES_NUMBER,WS_EX_RIGHT\r
+ EDITTEXT IDC_WINDOW_TEXT,150,25,40,14,ES_AUTOHSCROLL | NOT \r
+ WS_VISIBLE\r
+ LTEXT "Use if the window title is ",IDC_STATIC,67,32,78,8,NOT \r
+ WS_VISIBLE\r
+END\r
+\r
+IDD_PROPERTIES_BASIC DIALOG DISCARDABLE 0, 0, 408, 202\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Basic"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ CONTROL "C-x C-f",IDC_CXCF,"Button",BS_AUTOCHECKBOX | WS_GROUP | \r
+ WS_TABSTOP,15,17,37,10\r
+ CONTROL "C-x k",IDC_CXK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 29,34,10\r
+ CONTROL "C-x C-s",IDC_CXCS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,41,38,10\r
+ CONTROL "C-x C-w",IDC_CXCW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,53,40,10\r
+ GROUPBOX "Files",IDC_FILES,7,7,88,59\r
+ CONTROL "C-s",IDC_CS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,77,\r
+ 26,10\r
+ CONTROL "C-r",IDC_CR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,89,\r
+ 25,10\r
+ CONTROL "M-%",IDC_MS5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 101,29,10\r
+ CONTROL "C-M-%",IDC_CMS5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,113,36,10\r
+ GROUPBOX "Search",IDC_SEARCH,7,67,88,59\r
+ CONTROL "C-z",IDC_CZ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,\r
+ 137,26,10\r
+ CONTROL "C-x C-c",IDC_CXCC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,149,39,10\r
+ CONTROL "M-F12",IDC_MF12,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 15,161,37,10\r
+ GROUPBOX "Leaving Active Window",IDC_WINDOW,7,127,88,68\r
+ CONTROL "C-b",IDC_CB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 17,27,10\r
+ CONTROL "C-f",IDC_CF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,\r
+ 17,25,10\r
+ CONTROL "M-b",IDC_MB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 29,26,10\r
+ CONTROL "M-f",IDC_MF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,\r
+ 29,26,10\r
+ CONTROL "C-p",IDC_CP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 41,27,10\r
+ CONTROL "C-n",IDC_CN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,\r
+ 41,27,10\r
+ CONTROL "C-a",IDC_CA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 53,27,10\r
+ CONTROL "C-e",IDC_CE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,\r
+ 53,27,10\r
+ CONTROL "M-<",IDC_MSCOMMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 110,65,28,10\r
+ CONTROL "M->",IDC_MSPERIOD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 110,77,28,10\r
+ CONTROL "M-v",IDC_MV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 89,28,10\r
+ CONTROL "C-v",IDC_CV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,\r
+ 89,27,10\r
+ CONTROL "C-l",IDC_CL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,\r
+ 101,24,10\r
+ GROUPBOX "Motion",IDC_MOTION,102,7,83,141\r
+ CONTROL "C-d",IDC_CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 17,27,10\r
+ CONTROL "C-h",IDC_CH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,240,\r
+ 17,26,10\r
+ CONTROL "C-w",IDC_CW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 29,28,10\r
+ CONTROL "M-w",IDC_MW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,240,\r
+ 29,29,10\r
+ CONTROL "C-k",IDC_CK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 41,27,10\r
+ CONTROL "M-t",IDC_MT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,240,\r
+ 41,29,10\r
+ CONTROL "M-DEL",IDC_MDEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 200,53,35,10\r
+ CONTROL "M-d",IDC_MD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,240,\r
+ 53,28,10\r
+ CONTROL "C-y",IDC_CY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 65,26,10\r
+ CONTROL "M-y",IDC_MY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,240,\r
+ 65,27,10\r
+ CONTROL "C-t",IDC_CT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 77,24,10\r
+ CONTROL "C-x C-t",IDC_CXCT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 240,77,35,10\r
+ GROUPBOX "Killing and Deleting",IDC_KILL,192,7,91,84\r
+ CONTROL "C-x u",IDC_CXU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 200,101,32,10\r
+ CONTROL "C-/",IDC_CSLASH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 200,113,26,10\r
+ CONTROL "C-_",IDC_C_,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 125,46,10\r
+ CONTROL "C-g",IDC_CG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,\r
+ 137,27,10\r
+ GROUPBOX "Error Recovery",IDC_RECOVERY,192,92,91,56\r
+ CONTROL "C-x C-j",IDC_CXCJ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 109,161,36,10\r
+ CONTROL "C-o",IDC_CO2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,\r
+ 161,25,10\r
+ CONTROL "C-\\",IDC_CBACKSLASH,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,216,161,24,10\r
+ CONTROL "C-BACKSLASH of 106/109 keyboard",IDC_CBACKSLASH_106,\r
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,109,\r
+ 173,132,9\r
+ GROUPBOX "Toggle Input Method Editor",IDC_IME,102,150,181,45\r
+ CONTROL "C-Space",IDC_CSPACE,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,298,17,43,10\r
+ CONTROL "C-x h",IDC_CXH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 298,29,32,10\r
+ CONTROL "C-x C-p",IDC_CXCP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 350,30,39,10\r
+ CONTROL "C-u",IDC_CU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 41,26,10\r
+ CONTROL "C-0 ... C-9",IDC_CDIGIT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,350,41,45,10\r
+ CONTROL "Left Alt",IDC_LEFT_ALT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,298,53,38,10\r
+ CONTROL "Right Alt",IDC_RIGHT_ALT,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,350,53,41,10\r
+ CONTROL "Alt",IDC_ALT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | \r
+ WS_TABSTOP,298,53,37,10\r
+ CONTROL "Esc",IDC_ESCAPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 298,65,28,10\r
+ CONTROL "C-[",IDC_SQUARE_BRA,"Button",BS_AUTOCHECKBOX | \r
+ WS_TABSTOP,350,65,25,10\r
+ CONTROL "C-m",IDC_CM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 77,28,10\r
+ CONTROL "C-o",IDC_CO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,350,\r
+ 77,27,10\r
+ CONTROL "C-i",IDC_CI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 89,24,10\r
+ CONTROL "M-i",IDC_MI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,350,\r
+ 89,25,10\r
+ CONTROL "M-!",IDC_MS1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 101,26,10\r
+ CONTROL "M-x",IDC_MX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,350,\r
+ 101,29,10\r
+ CONTROL "C-q",IDC_CQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 113,28,10\r
+ CONTROL "C-x (",IDC_CXS9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 298,125,30,10\r
+ CONTROL "C-x )",IDC_CXS0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 350,125,31,10\r
+ CONTROL "C-x e",IDC_CXE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 298,137,32,10\r
+ GROUPBOX "Other",IDC_OTHER,290,7,111,188\r
+ CONTROL "C-x b",IDC_CXB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 298,149,33,10\r
+ CONTROL "M-l",IDC_ML,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 161,27,10\r
+ CONTROL "M-u",IDC_MU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,350,\r
+ 161,29,10\r
+ CONTROL "M-c",IDC_MC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,298,\r
+ 173,29,10\r
+END\r
+\r
+IDD_PROPERTIES_ADVANCED DIALOG DISCARDABLE 0, 0, 408, 202\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Advanced"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ LTEXT "&Category:",IDC_STATIC,7,7,31,8\r
+ COMBOBOX IDC_CATEGORY,7,17,106,132,CBS_DROPDOWNLIST | CBS_SORT | \r
+ WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "C&ommands:",IDC_STATIC,7,31,38,8\r
+ LISTBOX IDC_COMMANDS,7,41,242,116,LBS_SORT | \r
+ LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "Description:",IDC_STATIC,7,160,38,8\r
+ LTEXT "brank",IDC_DESCRIPTION,7,169,242,26\r
+ LTEXT "C&urrent keys:",IDC_STATIC,258,31,42,8\r
+ LISTBOX IDC_CURRENT_KEYS,258,41,143,32,LBS_SORT | \r
+ LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP\r
+ LTEXT "Press &new shortcut key:",IDC_STATIC,258,100,76,8\r
+ CONTROL "Ctrl+X",IDC_C_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+ 258,111,31,10\r
+ EDITTEXT IDC_NEW_KEY,258,123,142,14,ES_AUTOHSCROLL\r
+ LTEXT "Currently assigned to:\n[unassigned]",\r
+ IDC_CURRENTLY_ASSIGNED,258,158,142,32\r
+ PUSHBUTTON "&Assign",IDC_ASSIGN,351,142,50,14\r
+ PUSHBUTTON "&Remove",IDC_REMOVE,351,79,50,14\r
+ PUSHBUTTON "Re&set All",IDC_RESET_ALL,263,142,50,14,NOT WS_VISIBLE\r
+ CONTROL "Enable CUA-mode",IDC_ENABLE_CUA,"Button",\r
+ BS_AUTOCHECKBOX | WS_TABSTOP,327,17,74,10\r
+END\r
+\r
+IDD_PROPERTIES_LIST DIALOG DISCARDABLE 0, 0, 408, 202\r
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "List"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+ CONTROL "List1",IDC_PROPERTIES_LIST,"SysListView32",LVS_REPORT | \r
+ LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,394,188\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO DISCARDABLE \r
+BEGIN\r
+ IDD_ABOUTBOX, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 228\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 48\r
+ END\r
+\r
+ IDD_OPTIONS, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 145\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 244\r
+ END\r
+\r
+ IDD_104KEYBOARD, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 416\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 272\r
+ END\r
+\r
+ IDD_109KEYBOARD, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 416\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 272\r
+ END\r
+\r
+ IDD_PROPERTIES, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 418\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 274\r
+ END\r
+\r
+ IDD_PROPERTIES_BASIC, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 401\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 195\r
+ END\r
+\r
+ IDD_PROPERTIES_ADVANCED, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 401\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 195\r
+ END\r
+\r
+ IDD_PROPERTIES_LIST, DIALOG\r
+ BEGIN\r
+ LEFTMARGIN, 7\r
+ RIGHTMARGIN, 401\r
+ TOPMARGIN, 7\r
+ BOTTOMMARGIN, 195\r
+ END\r
+END\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDR_MAINFRAME MENU PRELOAD DISCARDABLE \r
+BEGIN\r
+ POPUP "&File"\r
+ BEGIN\r
+ MENUITEM "&New\tCtrl+N", ID_FILE_NEW\r
+ MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN\r
+ MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE\r
+ MENUITEM "Save &As...", ID_FILE_SAVE_AS\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "E&xit", ID_APP_EXIT\r
+ END\r
+ POPUP "&Edit"\r
+ BEGIN\r
+ MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT\r
+ MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY\r
+ MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE\r
+ END\r
+ POPUP "&Help"\r
+ BEGIN\r
+ MENUITEM "&About Xkeymacs...", ID_APP_ABOUT\r
+ END\r
+END\r
+\r
+IDR_RIGHT_MENU MENU DISCARDABLE \r
+BEGIN\r
+ POPUP "Right Menu"\r
+ BEGIN\r
+ MENUITEM "&Properties...", IDC_PROPERTIES\r
+ MENUITEM "&Import Properties...", IDC_IMPORT\r
+ MENUITEM "&Export Properties...", IDC_EXPORT\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&Options...", IDC_OPTIONS\r
+ POPUP "&Keyboard Layout"\r
+ BEGIN\r
+ MENUITEM "for the &Logged on User...", IDC_KEYBOARD\r
+ MENUITEM "for &Any User...", IDC_KEYBOARD_ANY_USER\r
+ END\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&Disable", IDC_DISABLE\r
+ MENUITEM "&Reset", IDC_RESET\r
+ MENUITEM "E&xit", IDC_QUIT\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "&Help", ID_HELP_FINDER\r
+ MENUITEM "&About XKeymacs", IDC_ABOUT\r
+ END\r
+END\r
+\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "#include ""afxres.h""\r\n"\r
+ "\0"\r
+END\r
+\r
+3 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "#define _AFX_NO_SPLITTER_RESOURCES\r\n"\r
+ "#define _AFX_NO_OLE_RESOURCES\r\n"\r
+ "#define _AFX_NO_TRACKER_RESOURCES\r\n"\r
+ "#define _AFX_NO_PROPERTY_RESOURCES\r\n"\r
+ "\r\n"\r
+ "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"\r
+ "#ifdef _WIN32\r\n"\r
+ "LANGUAGE 9, 1\r\n"\r
+ "#pragma code_page(1252)\r\n"\r
+ "#endif //_WIN32\r\n"\r
+ "#include ""res\\xkeymacs.rc2"" // non-Microsoft Visual C++ edited resources\r\n"\r
+ "#include ""afxres.rc"" // Standard components\r\n"\r
+ "#endif\r\n"\r
+ "\0"\r
+END\r
+\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDR_MAINFRAME ICON DISCARDABLE "res\\xkeymacs.ico"\r
+IDR_MAIN_DISABLE_WOCQ ICON DISCARDABLE "res\\disableWOCQ.ico"\r
+IDI_CTRL_ON ICON DISCARDABLE "res\\ctrl_on.ico"\r
+IDI_CTRL_OFF ICON DISCARDABLE "res\\ctrl_off.ico"\r
+IDI_CX_ON ICON DISCARDABLE "res\\cx_on.ico"\r
+IDI_CX_OFF ICON DISCARDABLE "res\\cx_off.ico"\r
+IDI_SHIFT_ON ICON DISCARDABLE "res\\shift_on.ico"\r
+IDI_SHIFT_OFF ICON DISCARDABLE "res\\shift_of.ico"\r
+IDI_ALT_ON ICON DISCARDABLE "res\\alt_on.ico"\r
+IDI_ALT_OFF ICON DISCARDABLE "res\\alt_off.ico"\r
+IDI_META_ON ICON DISCARDABLE "res\\meta_on.ico"\r
+IDI_META_OFF ICON DISCARDABLE "res\\meta_off.ico"\r
+IDR_MAIN_DISABLE ICON DISCARDABLE "res\\disable.ico"\r
+IDR_MAIN_DISABLE_TMP ICON DISCARDABLE "res\\disableTMP.ico"\r
+IDI_MX_ON ICON DISCARDABLE "res\\mx_on.ico"\r
+IDI_MX_OFF ICON DISCARDABLE "res\\mx_off.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE \r
+BEGIN\r
+ "N", ID_FILE_NEW, VIRTKEY, CONTROL\r
+ "O", ID_FILE_OPEN, VIRTKEY, CONTROL\r
+ "S", ID_FILE_SAVE, VIRTKEY, CONTROL\r
+ "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL\r
+ "X", ID_EDIT_CUT, VIRTKEY, CONTROL\r
+ "C", ID_EDIT_COPY, VIRTKEY, CONTROL\r
+ "V", ID_EDIT_PASTE, VIRTKEY, CONTROL\r
+ VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT\r
+ VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT\r
+ VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL\r
+ VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT\r
+ VK_F6, ID_NEXT_PANE, VIRTKEY \r
+ VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT\r
+END\r
+\r
+\r
+#ifndef _MAC\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 3,47,0,0\r
+ PRODUCTVERSION 3,47,0,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x4L\r
+ FILETYPE 0x1L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+ BLOCK "StringFileInfo"\r
+ BEGIN\r
+ BLOCK "040904b0"\r
+ BEGIN\r
+ VALUE "Comments", "\0"\r
+ VALUE "CompanyName", "\0"\r
+ VALUE "FileDescription", "XKeymacs MFC Application\0"\r
+ VALUE "FileVersion", "3, 47, 0, 0\0"\r
+ VALUE "InternalName", "xkeymacs\0"\r
+ VALUE "LegalCopyright", "Copyright (C) 2001-2008\0"\r
+ VALUE "LegalTrademarks", "\0"\r
+ VALUE "OriginalFilename", "xkeymacs.exe\0"\r
+ VALUE "PrivateBuild", "\0"\r
+ VALUE "ProductName", "XKeymacs Application\0"\r
+ VALUE "ProductVersion", "3, 47, 0, 0\0"\r
+ VALUE "SpecialBuild", "\0"\r
+ END\r
+ END\r
+ BLOCK "VarFileInfo"\r
+ BEGIN\r
+ VALUE "Translation", 0x409, 1200\r
+ END\r
+END\r
+\r
+#endif // !_MAC\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Cursor\r
+//\r
+\r
+IDC_HAND_CURSOR CURSOR DISCARDABLE "res\\hand.cur"\r
+IDC_DRAG_CURSOR CURSOR DISCARDABLE "res\\drag.cur"\r
+IDC_DISABLE_CURSOR CURSOR DISCARDABLE "res\\disable_.cur"\r
+IDC_DISABLE_WOCQ_CURSOR CURSOR DISCARDABLE "res\\disable_wocq.cur"\r
+IDC_DISABLE_TMP_CURSOR CURSOR DISCARDABLE "res\\disable_tmp.cur"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+IDB_SORT_ASCENDING BITMAP DISCARDABLE "res\\sort_asc.bmp"\r
+IDB_SORT_DESCENDING BITMAP DISCARDABLE "res\\sort_des.bmp"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE PRELOAD DISCARDABLE \r
+BEGIN\r
+ IDR_MAINFRAME "xkeymacs\n\nXkeyma\n\n\nXkeymacs.Document\nXkeyma Document"\r
+END\r
+\r
+STRINGTABLE PRELOAD DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_APP_TITLE "XKeymacs"\r
+ AFX_IDS_IDLEMESSAGE "Ready"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_INDICATOR_EXT "EXT"\r
+ ID_INDICATOR_CAPS "CAP"\r
+ ID_INDICATOR_NUM "NUM"\r
+ ID_INDICATOR_SCRL "SCRL"\r
+ ID_INDICATOR_OVR "OVR"\r
+ ID_INDICATOR_REC "REC"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_FILE_NEW "Create a new document\nNew"\r
+ ID_FILE_OPEN "Open an existing document\nOpen"\r
+ ID_FILE_CLOSE "Close the active document\nClose"\r
+ ID_FILE_SAVE "Save the active document\nSave"\r
+ ID_FILE_SAVE_AS "Save the active document with a new name\nSave As"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_APP_ABOUT "Display program information, version number and copyright\nAbout"\r
+ ID_APP_EXIT "Quit the application; prompts to save documents\nExit"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_FILE_MRU_FILE1 "Open this document"\r
+ ID_FILE_MRU_FILE2 "Open this document"\r
+ ID_FILE_MRU_FILE3 "Open this document"\r
+ ID_FILE_MRU_FILE4 "Open this document"\r
+ ID_FILE_MRU_FILE5 "Open this document"\r
+ ID_FILE_MRU_FILE6 "Open this document"\r
+ ID_FILE_MRU_FILE7 "Open this document"\r
+ ID_FILE_MRU_FILE8 "Open this document"\r
+ ID_FILE_MRU_FILE9 "Open this document"\r
+ ID_FILE_MRU_FILE10 "Open this document"\r
+ ID_FILE_MRU_FILE11 "Open this document"\r
+ ID_FILE_MRU_FILE12 "Open this document"\r
+ ID_FILE_MRU_FILE13 "Open this document"\r
+ ID_FILE_MRU_FILE14 "Open this document"\r
+ ID_FILE_MRU_FILE15 "Open this document"\r
+ ID_FILE_MRU_FILE16 "Open this document"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_NEXT_PANE "Switch to the next window pane\nNext Pane"\r
+ ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_WINDOW_SPLIT "Split the active window into panes\nSplit"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ ID_EDIT_CLEAR "Erase the selection\nErase"\r
+ ID_EDIT_CLEAR_ALL "Erase everything\nErase All"\r
+ ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy"\r
+ ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut"\r
+ ID_EDIT_FIND "Find the specified text\nFind"\r
+ ID_EDIT_PASTE "Insert Clipboard contents\nPaste"\r
+ ID_EDIT_REPEAT "Repeat the last action\nRepeat"\r
+ ID_EDIT_REPLACE "Replace specific text with different text\nReplace"\r
+ ID_EDIT_SELECT_ALL "Select the entire document\nSelect All"\r
+ ID_EDIT_UNDO "Undo the last action\nUndo"\r
+ ID_EDIT_REDO "Redo the previously undone action\nRedo"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_SCSIZE "Change the window size"\r
+ AFX_IDS_SCMOVE "Change the window position"\r
+ AFX_IDS_SCMINIMIZE "Reduce the window to an icon"\r
+ AFX_IDS_SCMAXIMIZE "Enlarge the window to full size"\r
+ AFX_IDS_SCNEXTWINDOW "Switch to the next document window"\r
+ AFX_IDS_SCPREVWINDOW "Switch to the previous document window"\r
+ AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ AFX_IDS_SCRESTORE "Restore the window to normal size"\r
+ AFX_IDS_SCTASKLIST "Activate Task List"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_DEFAULT "Default"\r
+ IDS_DEFAULT_TITLE "Default"\r
+ IDS_DIALOG "Dialog"\r
+ IDS_DIALOG_TITLE "Dialog"\r
+ IDS_KEYBOARD "for %s (&L)..."\r
+ IDS_REG_ENTRY_USE_DIALOG_SETTING "Use Dialog Setting"\r
+ IDS_REGISTRY_KEY "Oishi"\r
+ IDS_REG_SECTION_APPLICATION "ApplicationName"\r
+ IDS_REG_ENTRY_APPLICATION "%02d"\r
+ IDS_REG_ENTRY_NONE "C-X %c"\r
+ IDS_REG_ENTRY_CONTROL "C-%c"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_CONTROLX "C-X C-%c"\r
+ IDS_REG_ENTRY_META "M-%c"\r
+ IDS_REGSUBKEY_DATA "Software\\Oishi\\XKeymacs2"\r
+ IDS_REG_ENTRY_APPLICATOIN_TITLE "ApplicationTitle"\r
+ IDS_REGSUBKEY_AUTORUN "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"\r
+ IDS_APPLICATION_LIST_ITEM "%s (%s)"\r
+ IDS_SEPARATE_CLASS_WINDOW " ("\r
+ IDS_SEPARATE_WINDOWTITLE " - "\r
+ IDS_REG_ENTRY_CONTROL_META_SHIFT "C-M-%c"\r
+ IDS_REG_ENTRY_KILL_RING_MAX "kill-ring-max"\r
+ IDS_REG_ENTRY_CONTROL_SHIFT "C-S-%c"\r
+ IDS_REG_ENTRY_META_SHIFT "M-S-%c"\r
+ IDS_REG_ENTRY_DISABLE_XKEYMACS "Disable XKeymacs"\r
+ IDC_REG_ENTRY_IGNORE_META_CTRL "Ignore undefined Meta Ctrl+?"\r
+ IDC_REG_ENTRY_IGNORE_C_X "Ignore undefined C-x ?"\r
+ IDS_ERR_SAVE_DATA "XKeymacs can save only %d settings. You have to delete a setting to select an application and check ""Use Default Setting""."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ERR_WINDOWS_VERSION "XKeymacs does not support the Windows of this version."\r
+ IDS_ERR_IMPORT "%s\nFile not found.\nPlease verify the correct file name was given."\r
+ IDS_ERR_EXPORT "Failed to export properties."\r
+ IDC_REG_ENTRY_ENABLE_CUA "Enable CUA"\r
+ IDS_REG_SECTION_ORIGINAL "OriginalCommand"\r
+ IDS_REG_ORIGINAL_PREFIX "zzz-"\r
+ IDS_REG_ENTRY_WINDOW_TEXT "WindowText"\r
+ IDS_REG_ENTRY_WINDOW_TEXT_TYPE "WindowTextType"\r
+ IDS_REG_ENTRY_326_COMPATIBLE "3.26 compatible"\r
+ IDS_PROCESS "process"\r
+ IDS_PROCESSID "id process"\r
+ IDS_REGSUBKEY_PERF "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\%03x"\r
+ IDS_REGSUBKEY_COUNTERS "Counters"\r
+ IDS_UNKNOWN_TASK "unknown"\r
+ IDS_IME_FILE_NAME "IME"\r
+ IDS_ERR_LOST_KEY "[%s] key will be turned off.\n"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FOR_LOGGED_ON_USER " for the Logged on User"\r
+ IDS_FOR_ANY_USER " for Any User"\r
+ IDS_FOR " for %s"\r
+ IDS_EXPLORER "explorer.exe"\r
+ IDS_PROJECT "winproj.exe"\r
+ IDS_EXCEL "excel.exe"\r
+ IDS_MSDN "hh.exe"\r
+ IDS_B2 "b2.exe"\r
+ IDS_MSIMN "msimn.exe"\r
+ IDS_UNKNOWN_APPLICATION "Unknown Application"\r
+ IDS_PROGRAM_MANAGER "Program Manager"\r
+ IDS_EXTENSION_EXECUTABLE ".exe"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_BECKY "Becky!"\r
+ IDS_OUTLOOK_EXPRESS "Outlook Express"\r
+ IDS_VISUAL_SOURCESAFE_EXPLORER "Visual SourceSafe Explorer"\r
+ IDS_DISABLE "&Disable"\r
+ IDS_ENABLE "&Enable"\r
+ IDS_IMPORT "Import Properties"\r
+ IDS_EXPORT "Export Properties"\r
+ IDS_TIP_CX "C-x- LED"\r
+ IDS_TIP_CTRL "Ctrl LED"\r
+ IDS_TIP_SHIFT "Shift LED"\r
+ IDS_TIP_ALT "Alt LED"\r
+ IDS_TIP_META "Meta LED"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REGISTRATION_FILTER "Registration Files|*.reg|All Files (*.*)|*.*||"\r
+ IDS_REGSUBKEY_KEYBOARD_LAYOUT "Keyboard Layout"\r
+ IDS_SCANCODE_MAP "Scancode Map"\r
+ IDS_REGSUBKEY_KEY_REMAP "Software\\Microsoft\\Windows\\CurrentVersion\\Controls Folder\\Keyboard\\shellex\\PropertySheetHandlers\\Key Remap"\r
+ IDS_0 "0"\r
+ IDS_RESTART_OR_NOT "You must restart your computer before the new settings will take effect.\n\nDo you want to restart your computer now?"\r
+ IDS_RESTART_CAPTION "System Settings Change"\r
+ IDS_REGSUBKEY_FILE_COMPLETION "Software\\Microsoft\\Command Processor"\r
+ IDS_COMPLETION_CHAR "CompletionChar"\r
+ IDS_REGSUBKEY_KEYBOARD_LAYOUT_ANY_USER \r
+ "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout"\r
+ IDS_WINDOW_TEXT_IGNORE "Ignore"\r
+ IDS_WINDOW_TEXT_MATCH "Match"\r
+ IDS_WINDOW_TEXT_MATCH_FORWARD "Forward Match"\r
+ IDS_WINDOW_TEXT_MATCH_BACKWARD "Backward Match"\r
+ IDS_WINDOW_TEXT_MATCH_FULL "Macth Full"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_TIP_MX "M-x LED"\r
+ IDS_VER_SUB_BLOCK "\\"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_NONE_FOO "N-0x%02x (%c)"\r
+ IDS_REG_ENTRY_NONE_SHIFT_FOO "N-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROL_FOO "C-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROL_SHIFT_FOO "C-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_FOO "C-X N-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_SHIFT_FOO "C-X N-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_CONTROL_FOO "C-X C-0x%02x (%c)"\r
+ IDS_REG_ENTRY_CONTROLX_CONTROL_SHIFT_FOO "C-X C-S-0x%02x (%c)"\r
+ IDS_REG_ENTRY_META_FOO "M-0x%02x (%c)"\r
+ IDS_REG_ENTRY_META_SHIFT_FOO "M-S-0x%02x (%c)"\r
+ IDS_DISABLED "disabled"\r
+ IDS_REG_ENTRY_CTRL "ctrl_icon"\r
+ IDS_REG_ENTRY_CX "cx_icon"\r
+ IDS_REG_ENTRY_MAIN "main_icon"\r
+ IDS_REG_ENTRY_SHIFT "shift_icon"\r
+ IDS_REG_ENTRY_ALT "alt_icon"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FILES "Files"\r
+ IDS_SEARCH "Search"\r
+ IDS_WINDOW "Leaving Active Window"\r
+ IDS_RECOVERY "Error Recovery"\r
+ IDS_MOTION "Motion"\r
+ IDS_IME "Toggle Input Method Editor"\r
+ IDS_KILL "Killing and Deleting"\r
+ IDS_OTHER "Other"\r
+ IDS_ORIGINAL "Original Command"\r
+ IDS_CATEGORY "Category"\r
+ IDS_COMMAND "Command"\r
+ IDS_KEY "Key"\r
+ IDS_MODIFIER "One Shot Modifier"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_ICON_META "meta_icon"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SET_MARK_COMMAND_D "Set mark at where point is, or jump to mark."\r
+ IDS_BEGINNING_OF_LINE_D "Move point to beginning of current line."\r
+ IDS_BACKWARD_CHAR_D "Move point left N characters (right if N is negative)."\r
+ IDS_DELETE_CHAR_D "Delete the following N characters (previous if N is negative)."\r
+ IDS_END_OF_LINE_D "Move point to end of current line."\r
+ IDS_FORWARD_CHAR_D "Move point right N characters (left if N is negative)."\r
+ IDS_KEYBOARD_QUIT_D "Cancel the inputting command."\r
+ IDS_HELP_COMMAND_D "Prefix command (definition is a keymap associating keystrokes with commands)."\r
+ IDS_KILL_LINE_D "Kill the rest of the current line; if no nonblanks there, kill thru newline."\r
+ IDS_RECENTER_D "Center point in window and redisplay frame."\r
+ IDS_NEWLINE_D "Insert a newline, and move to left margin of the new line if it's blank."\r
+ IDS_NEXT_LINE_D "Move cursor vertically down ARG lines."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_OPEN_LINE_D "Insert a newline and leave point before it."\r
+ IDS_PREVIOUS_LINE_D "Move cursor vertically up ARG lines."\r
+ IDS_QUOTED_INSERT_D "Read next input character and insert it."\r
+ IDS_ISEARCH_BACKWARD_D "Do incremental search backward."\r
+ IDS_ISEARCH_FORWARD_D "Do incremental search forward."\r
+ IDS_TRANSPOSE_CHARS_D "Interchange characters around point, moving forward one character."\r
+ IDS_UNIVERSAL_ARGUMENT_D \r
+ "Begin a numeric argument for the following command."\r
+ IDS_SCROLL_UP_D "Scroll text of current window upward ARG lines; or near full screen if no ARG."\r
+ IDS_KILL_REGION_D "Kill between point and mark."\r
+ IDS_CONTROL_X_PREFIX_D "foo"\r
+ IDS_YANK_D "Reinsert the last stretch of killed text."\r
+ IDS_ICONIFY_OR_DEICONIFY_FRAME_D "Minimize the selected window."\r
+ IDS_QUAIL_MODE_D "foo"\r
+ IDS_UNDO_D "Undo some previous changes."\r
+ IDS_TOGGLE_WIN32IME_MODE_D \r
+ "Turn on or off a multilingual text input method for the current buffer."\r
+ IDS_BACKWARD_WORD_D "Move backward until encountering the end of a word."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FORWARD_WORD_D "Move point forward ARG words (backward if ARG is negative)."\r
+ IDS_DIGIT_ARGUMENT_D "Part of the numeric argument for the next command."\r
+ IDS_NEGATIVE_ARGUMENT_D "Begin a negative numeric argument for the next command."\r
+ IDS_SAVE_BUFFERS_KILL_EMACS_D "Exit the application."\r
+ IDS_FIND_FILE_D "Open a file."\r
+ IDS_MARK_PAGE_D "Put mark at end of page, point at beginning."\r
+ IDS_SAVE_BUFFER_D "Save current file if modified."\r
+ IDS_WRITE_FILE_D "Save current buffer into file FILENAME."\r
+ IDS_SHELL_COMMAND_D "Execute string COMMAND in inferior shell; display output, if any."\r
+ IDS_BEGINNING_OF_BUFFER_D \r
+ "Move point to the beginning of the buffer; leave mark at previous position."\r
+ IDS_END_OF_BUFFER_D "Move point to the end of the buffer; leave mark at previous position."\r
+ IDS_SCROLL_DOWN_D "Scroll text of current window down ARG lines; or near full screen if no ARG."\r
+ IDS_KILL_RING_SAVE_D "Save the region as if killed, but don't kill it."\r
+ IDS_BACKWARD_DELETE_CHAR_D \r
+ "Delete the previous N characters (following if N is negative)."\r
+ IDS_TAB_D "Insert spaces or tabs to next defined tab-stop column."\r
+ IDS_META_PREFIX_D "Prefix for typing Meta."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_META_D "Meta"\r
+ IDS_DIGIT_ARGUMENT0_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT1_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT2_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT3_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT4_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT5_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT6_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT7_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT8_D "Part of the numeric argument for the next command."\r
+ IDS_DIGIT_ARGUMENT9_D "Part of the numeric argument for the next command."\r
+ IDS_META_PREFIX_AND_ORIGINAL_D \r
+ "Assigned key works as not only original key but also prefix for typing Meta."\r
+ IDS_KILL_BUFFER_D "Close the current file."\r
+ IDS_KILL_WORD_D "Kill characters forward until encountering the end of a word."\r
+ IDS_MARK_WHOLE_BUFFER_D "Put point at beginning and mark at end of buffer."\r
+ IDS_DELETE_BACKWARD_CHAR_D \r
+ "Delete the previous N characters (following if N is negative)."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_QUERY_REPLACE_D "Replace some occurrences of FROM-STRING with TO-STRING."\r
+ IDS_QUERY_REPLACE_REGEXP_D \r
+ "Replace some things after point matching REGEXP with TO-STRING."\r
+ IDS_YANK_POP_D "Replace just-yanked stretch of killed text with a different stretch."\r
+ IDS_CLOSE_INPUT_METHOD_D "Close input method"\r
+ IDS_ENABLE_OR_DISABLE_XKEYMACS_D "Enable or disable XKeymacs"\r
+ IDS_ENTER_D "Enter"\r
+ IDS_IGNORE_D "Ignore"\r
+ IDS_OPEN_INPUT_METHOD_D "Open Input Method"\r
+ IDS_SELECT_ALL_D "Select All"\r
+ IDS_CALL_LAST_KBD_MACRO_D \r
+ "Call the last keyboard macro that you defined with C-x (."\r
+ IDS_END_KBD_MACRO_D "Finish defining a keyboard macro."\r
+ IDS_START_KBD_MACRO_D "Record subsequent keyboard input, defining a keyboard macro."\r
+ IDS_SWITCH_BETWEEN_INPUT_LOCALES_D "Switch Between Input Locales."\r
+ IDS_SWITCH_TO_BUFFER_D "Display next tabbed page or child window (MDI)."\r
+ IDS_CONTROL_D "C-"\r
+ IDS_CONTROL_PREFIX_D "C-"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ESCAPE_D "Esc"\r
+ IDS_TILDE_D "~"\r
+ IDS_BACK_QUOTE_D "`"\r
+ IDS_RESTORE_D "Restore the window."\r
+ IDS_MOVE_D "Move the window."\r
+ IDS_SIZE_D "Change the size the window."\r
+ IDS_MINIMIZE_D "Minimize the window."\r
+ IDS_MAXIMIZE_D "Maximize the window."\r
+ IDS_MAXIMIZE_VERTICALLY_D "Maximize the window vertically."\r
+ IDS_MAXIMIZE_HORIZONTALLY_D "Maximize the window horizontally."\r
+ IDS_PASS_THROUGH_D "If the key assigned this command is depressed, XKeymacs does nothing for any input."\r
+ IDS_REDO_D "Redo"\r
+ IDS_TEMPORARILY_DISABLE_XKEYMACS_D \r
+ "XKeymacs does nothing for the next command."\r
+ IDS_COPY_D "Copy"\r
+ IDS_PASTE_D "Paste"\r
+ IDS_CUT_D "Cut"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ESC "Esc"\r
+ IDS_1 "1"\r
+ IDS_2 "2"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_3 "3"\r
+ IDS_4 "4"\r
+ IDS_5 "5"\r
+ IDS_6 "6"\r
+ IDS_7 "7"\r
+ IDS_8 "8"\r
+ IDS_9 "9"\r
+ IDS_0_ "0"\r
+ IDS_MINUS "-"\r
+ IDS_EQUAL "="\r
+ IDS_BACKSPACE "Backspace"\r
+ IDS_TAB "Tab"\r
+ IDS_Q "Q"\r
+ IDS_W "W"\r
+ IDS_E "E"\r
+ IDS_R "R"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_T "T"\r
+ IDS_Y "Y"\r
+ IDS_U "U"\r
+ IDS_I "I"\r
+ IDS_O "O"\r
+ IDS_P "P"\r
+ IDS_SQUARE_BRA "["\r
+ IDS_SQUARE_CKET "]"\r
+ IDS_ENTER "Enter"\r
+ IDS_NUMPADENTER "Numeric Enter"\r
+ IDS_LEFT_CTRL "Ctrl"\r
+ IDS_RIGHT_CTRL "Right Ctrl"\r
+ IDS_PAUSE "Pause"\r
+ IDS_A "A"\r
+ IDS_S "S"\r
+ IDS_D "D"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F "F"\r
+ IDS_G "G"\r
+ IDS_H "H"\r
+ IDS_J "J"\r
+ IDS_K "K"\r
+ IDS_L "L"\r
+ IDS_SEMICOLON ";"\r
+ IDS_QUOTE "'"\r
+ IDS_BACK_QUOTE "`"\r
+ IDS_LEFT_SHIFT "Shift"\r
+ IDS_BACKSLASH "\\"\r
+ IDS_Z "Z"\r
+ IDS_X "X"\r
+ IDS_C "C"\r
+ IDS_V "V"\r
+ IDS_B "B"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_N "N"\r
+ IDS_M "M"\r
+ IDS_COMMA ","\r
+ IDS_PERIOD "."\r
+ IDS_SLASH "/"\r
+ IDS_DIVIDE "Numeric /"\r
+ IDS_RIGHT_SHIFT "Right Shift"\r
+ IDS_MULTIPLY "Numeric *"\r
+ IDS_PRINT_SCREEN "Print\nScreen"\r
+ IDS_LEFT_ALT "Alt"\r
+ IDS_RIGHT_ALT "Right Alt"\r
+ IDS_SPACE "Space"\r
+ IDS_CAPS_LOCK "Caps Lock"\r
+ IDS_F1 "F1"\r
+ IDS_F2 "F2"\r
+ IDS_F3 "F3"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F4 "F4"\r
+ IDS_F5 "F5"\r
+ IDS_F6 "F6"\r
+ IDS_F7 "F7"\r
+ IDS_F8 "F8"\r
+ IDS_F9 "F9"\r
+ IDS_F10 "F10"\r
+ IDS_NUM_LOCK "Num\nLock"\r
+ IDS_SCROLL_LOCK "Scroll\nLock"\r
+ IDS_NUMPAD7 "Numeric 7"\r
+ IDS_HOME "Home"\r
+ IDS_NUMPAD8 "Numeric 8"\r
+ IDS_UP "Up Arrow"\r
+ IDS_NUMPAD9 "Numeric 9"\r
+ IDS_PAGE_UP "Page\nUp"\r
+ IDS_SUBTRACT "Numeric -"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_NUMPAD4 "Numeric 4"\r
+ IDS_LEFT "Left Arrow"\r
+ IDS_NUMPAD5 "Numeric 5"\r
+ IDS_NUMPAD6 "Numeric 6"\r
+ IDS_RIGHT "Right Arrow"\r
+ IDS_ADD "Numeric +"\r
+ IDS_NUMPAD1 "Numeric 1"\r
+ IDS_END "End"\r
+ IDS_NUMPAD2 "Numeric 2"\r
+ IDS_DOWN "Down Arrow"\r
+ IDS_NUMPAD3 "Numeric 3"\r
+ IDS_PAGE_DOWN "Page\nDown"\r
+ IDS_NUMPAD0 "Numeric 0"\r
+ IDS_INSERT "Insert"\r
+ IDS_NUMPADDELETE "Numeric Delete"\r
+ IDS_DELETE "Delete"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_F11 "F11"\r
+ IDS_F12 "F12"\r
+ IDS_LEFT_WINDOWS "Windows"\r
+ IDS_RIGHT_WINDOWS "Right Windows"\r
+ IDS_APPLICATION "Application"\r
+ IDS_KANA "Kana"\r
+ IDS_BACKSLASH2 "\\"\r
+ IDS_CONVERT "Convert"\r
+ IDS_NONCONVERT "Nonconvert"\r
+ IDS_BACKSLASH1 "(\\)"\r
+ IDS_CARET "^"\r
+ IDS_AT_MARK "@"\r
+ IDS_COLON ":"\r
+ IDS_HANKAKU "Hankaku/Zenkaku"\r
+ IDS_ACPI_POWER "Power off"\r
+ IDS_ACPI_SLEEP "Sleep"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_ACPI_WAKE "Wake up"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_NEW_D "New"\r
+ IDS_PRINT_D "Print..."\r
+ IDS_FIND_D "Find..."\r
+ IDS_FIND_NEXT_D "Find Next"\r
+ IDS_TRANSPOSE_LINES_D "Exchange current line and previous line, leaving point after both."\r
+ IDS_KILL_LINE_FOR_ALL_FORMAT_D \r
+ "Kill the rest of the current line; if no nonblanks there, kill thru newline."\r
+ IDS_BACKWARD_KILL_WORD_D \r
+ "Kill characters backward until encountering the end of a word."\r
+ IDS_ENABLE_XKEYMACS_D "Enable XKeymacs"\r
+ IDS_DISABLE_XKEYMACS_D "Disable XKeymacs"\r
+ IDS_CAPS_LOCK_D "Caps Lock"\r
+ IDS_COMPLETE_CLOSE_INPUT_METHOD_D \r
+ "Set the composition string as the result string and close input method."\r
+ IDS_COMPLETE_TOGGLE_INPUT_METHOD_D \r
+ "Set the composition string as the result string and turn on or off a multilingual text input method for the current buffer."\r
+ IDS_UNDERSCORE_D "_"\r
+ IDS_ROLL_UP_UNROLL_D "Shows only the title bar of the window, as if it has been ""rolled up""."\r
+ IDS_RETOP_D "Top point in window and redisplay frame."\r
+ IDS_OSMODIFIER_SHIFT_D "One Shot Modifier Shift"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_CONTROL_X_PREFIX_T " "\r
+ IDS_CONTROL_T " "\r
+ IDS_CONTROL_PREFIX_T " "\r
+ IDS_CLOSE_INPUT_METHOD_T " "\r
+ IDS_COPY_T " "\r
+ IDS_CUT_T " "\r
+ IDS_ENABLE_OR_DISABLE_XKEYMACS_T "Enable/Disable XKeymacs"\r
+ IDS_NEWLINE_T "newline"\r
+ IDS_ESCAPE_T " "\r
+ IDS_FIND_T " "\r
+ IDS_FIND_NEXT_T " "\r
+ IDS_IGNORE_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_KILL_LINE_FOR_ALL_FORMAT_T " "\r
+ IDS_MAXIMIZE_T " "\r
+ IDS_MAXIMIZE_HORIZONTALLY_T " "\r
+ IDS_MAXIMIZE_VERTICALLY_T " "\r
+ IDS_META_PREFIX_T "Meta"\r
+ IDS_META_T "Meta"\r
+ IDS_META_PREFIX_AND_ORIGINAL_T "Meta"\r
+ IDS_MINIMIZE_T " "\r
+ IDS_MOVE_T " "\r
+ IDS_NEW_T " "\r
+ IDS_OPEN_INPUT_METHOD_T " "\r
+ IDS_PASS_THROUGH_T " "\r
+ IDS_PASTE_T " "\r
+ IDS_PRINT_T " "\r
+ IDS_REDO_T " "\r
+ IDS_RESTORE_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SELECT_ALL_T " "\r
+ IDS_SIZE_T " "\r
+ IDS_SWITCH_BETWEEN_INPUT_LOCALES_T " "\r
+ IDS_TEMPORARILY_DISABLE_XKEYMACS_T " "\r
+ IDS_TILDE_T " "\r
+ IDS_BACK_QUOTE_T " "\r
+ IDS_BACKWARD_CHAR_T "backward-char"\r
+ IDS_BACKWARD_WORD_T "backward-word"\r
+ IDS_BEGINNING_OF_BUFFER_T "beginning-of-buffer"\r
+ IDS_BEGINNING_OF_LINE_T "beginning-of-line"\r
+ IDS_CALL_LAST_KBD_MACRO_T "call-last-kbd-macro"\r
+ IDS_DELETE_BACKWARD_CHAR_T "delete-backward-char"\r
+ IDS_DELETE_CHAR_T "delete-char"\r
+ IDS_END_KBD_MACRO_T "end-kbd-macro"\r
+ IDS_END_OF_BUFFER_T "end-of-buffer"\r
+ IDS_END_OF_LINE_T "end-of-line"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FIND_FILE_T "find-file"\r
+ IDS_FORWARD_CHAR_T "forward-char"\r
+ IDS_FORWARD_WORD_T "forward-word"\r
+ IDS_ICONIFY_OR_DEICONIFY_FRAME_T "iconify-or-deiconify-frame"\r
+ IDS_ISEARCH_BACKWARD_T "isearch-backward"\r
+ IDS_ISEARCH_FORWARD_T "isearch-forward"\r
+ IDS_KEYBOARD_QUIT_T "keyboard-quit"\r
+ IDS_KILL_BUFFER_T "kill-buffer"\r
+ IDS_KILL_LINE_T "kill-line"\r
+ IDS_KILL_REGION_T "kill-region"\r
+ IDS_KILL_RING_SAVE_T "kill-ring-save"\r
+ IDS_KILL_WORD_T "kill-word"\r
+ IDS_MARK_PAGE_T "mark-page"\r
+ IDS_MARK_WHOLE_BUFFER_T "mark-whole-buffer"\r
+ IDS_NEXT_LINE_T "next-line"\r
+ IDS_DIGIT_ARGUMENT0_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_DIGIT_ARGUMENT1_T " "\r
+ IDS_DIGIT_ARGUMENT2_T " "\r
+ IDS_DIGIT_ARGUMENT3_T " "\r
+ IDS_DIGIT_ARGUMENT4_T " "\r
+ IDS_DIGIT_ARGUMENT5_T " "\r
+ IDS_DIGIT_ARGUMENT6_T " "\r
+ IDS_DIGIT_ARGUMENT7_T " "\r
+ IDS_DIGIT_ARGUMENT8_T " "\r
+ IDS_DIGIT_ARGUMENT9_T " "\r
+ IDS_NEGATIVE_ARGUMENT_T "digit-argument"\r
+ IDS_OPEN_LINE_T "open-line"\r
+ IDS_PREVIOUS_LINE_T "previous-line"\r
+ IDS_QUERY_REPLACE_T "query-replace"\r
+ IDS_QUERY_REPLACE_REGEXP_T "query-replace-regexp"\r
+ IDS_RECENTER_T "recenter"\r
+ IDS_SAVE_BUFFER_T "save-buffer"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_SAVE_BUFFERS_KILL_EMACS_T "save-buffers-kill-emacs"\r
+ IDS_SCROLL_DOWN_T "scroll-down"\r
+ IDS_SCROLL_UP_T "scroll-up"\r
+ IDS_SET_MARK_COMMAND_T "set-mark-command"\r
+ IDS_SHELL_COMMAND_T "shell-command"\r
+ IDS_START_KBD_MACRO_T "start-kbd-macro"\r
+ IDS_SWITCH_TO_BUFFER_T "switch-to-buffer"\r
+ IDS_TAB_T "tab-to-tab-stop"\r
+ IDS_TOGGLE_WIN32IME_MODE_T "toggle-input-method"\r
+ IDS_TRANSPOSE_CHARS_T "transpose-chars"\r
+ IDS_TRANSPOSE_LINES_T "transpose-lines"\r
+ IDS_UNDO_T "undo"\r
+ IDS_UNIVERSAL_ARGUMENT_T "universal-argument"\r
+ IDS_WRITE_FILE_T "write-file"\r
+ IDS_YANK_T "yank"\r
+ IDS_YANK_POP_T "yank-pop"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_BACKWARD_KILL_WORD_T "backward-kill-word"\r
+ IDS_ENABLE_XKEYMACS_T "Enable XKeymacs"\r
+ IDS_DISABLE_XKEYMACS_T "Disable XKeymacs"\r
+ IDS_CAPS_LOCK_T "Caps Lock"\r
+ IDS_COMPLETE_CLOSE_INPUT_METHOD_T " "\r
+ IDS_COMPLETE_TOGGLE_INPUT_METHOD_T " "\r
+ IDS_UNDERSCORE_T " "\r
+ IDS_ROLL_UP_UNROLL_T "Roll-up/Unroll"\r
+ IDS_RETOP_T "Retop"\r
+ IDS_OSMODIFIER_SHIFT_T "One Shot Modifier Shift"\r
+ IDS_OSMODIFIER_SHIFT_REPEAT_T "One Shot Modifier Shift with Repeat"\r
+ IDS_OSMODIFIER_CTRL_T "One Shot Modifier Ctrl"\r
+ IDS_OSMODIFIER_CTRL_REPEAT_T "One Shot Modifier Ctrl with Repeat"\r
+ IDS_OSMODIFIER_ALT_T "One Shot Modifier Alt"\r
+ IDS_OSMODIFIER_ALT_REPEAT_T "One Shot Modifier Alt with Repeat"\r
+ IDS_CYCLE_ITEMS_T " "\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_FSET "(fset "\r
+ IDS_README "Readme"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_OSMODIFIER_SHIFT_REPEAT_D "One Shot Modifier Shift with Repeat"\r
+ IDS_OSMODIFIER_CTRL_D "One Shot Modifier Ctrl"\r
+ IDS_OSMODIFIER_CTRL_REPEAT_D "One Shot Modifier Ctrl with Repeat"\r
+ IDS_OSMODIFIER_ALT_D "One Shot Modifier Alt"\r
+ IDS_OSMODIFIER_ALT_REPEAT_D "One Shot Modifier Alt with Repeat"\r
+ IDS_CYCLE_ITEMS_D "Cycle through items in the order they were opened."\r
+ IDS_CYCLE_ITEMS_INVERSELY_D \r
+ "Cycle through items in the inverse order they were opened."\r
+ IDS_TRANSPOSE_WORDS_D "Interchange words around point, leaving point after both words."\r
+ IDS_FILL_PARAGRAPH_D "Fill current paragraph"\r
+ IDS_DOWNCASE_WORD_D "Convert following word to lower case."\r
+ IDS_UPCASE_WORD_D "Convert following word to upper case."\r
+ IDS_CAPITALIZE_WORD_D "Capitalize the following word."\r
+ IDS_EXECUTE_EXTENDED_COMMAND_D \r
+ "Read the name of another command and invoke it."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_CYCLE_ITEMS_INVERSELY_T " "\r
+ IDS_TRANSPOSE_WORDS_T "transpose-words"\r
+ IDS_FILL_PARAGRAPH_T "fill-paragraph"\r
+ IDS_DOWNCASE_WORD_T "downcase-word"\r
+ IDS_UPCASE_WORD_T "upcase-word"\r
+ IDS_CAPITALIZE_WORD_T "capitalize-word"\r
+ IDS_EXECUTE_EXTENDED_COMMAND_T "execute-extended-command"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+ IDS_REG_ENTRY_ACCELERATE "accelerate"\r
+ IDS_REGSUBKEY_KEYBOARD "Control Panel\\Keyboard"\r
+ IDS_KEYBOARD_SPEED "KeyboardSpeed"\r
+ IDS_REG_ENTRY_CHANGE_CURSOR "change_cursor"\r
+ IDS_REG_ENTRY_AT_IBEAM_CURSOR_ONLY "at ibeam cursor only"\r
+ IDS_REG_ENTRY_MX "mx_icon"\r
+END\r
+\r
+#endif // \89p\8cê (±Òض) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+#define _AFX_NO_SPLITTER_RESOURCES\r
+#define _AFX_NO_OLE_RESOURCES\r
+#define _AFX_NO_TRACKER_RESOURCES\r
+#define _AFX_NO_PROPERTY_RESOURCES\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE 9, 1\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+#include "res\xkeymacs.rc2" // non-Microsoft Visual C++ edited resources\r
+#include "afxres.rc" // Standard components\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif // not APSTUDIO_INVOKED\r
+\r
--- /dev/null
+// ClipboardFormatSnap.cpp: CClipboardFormatSnap \83N\83\89\83X\82Ì\83C\83\93\83v\83\8a\83\81\83\93\83e\81[\83V\83\87\83\93\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "ClipboardFormatSnap.h"\r
+#include "Utils.h"\r
+\r
+#ifdef _DEBUG\r
+#undef THIS_FILE\r
+static char THIS_FILE[]=__FILE__;\r
+#define new DEBUG_NEW\r
+#endif\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \8d\\92z/\8fÁ\96Å\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CClipboardFormatSnap::CClipboardFormatSnap() :\r
+m_nFormat( 0 ), m_oData()\r
+{\r
+}\r
+\r
+CClipboardFormatSnap::~CClipboardFormatSnap()\r
+{\r
+}\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \83R\83s\81[\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CClipboardFormatSnap::CClipboardFormatSnap( const CClipboardFormatSnap& rhs ) :\r
+m_nFormat( 0 ), m_oData()\r
+{\r
+ m_nFormat = rhs.m_nFormat;\r
+\r
+ int nLen = rhs.m_oData.GetSize();\r
+ m_oData.RemoveAll();\r
+ m_oData.SetSize( nLen );\r
+\r
+ for( int i = 0; i < nLen; i++ )\r
+ {\r
+ m_oData[ i ] = rhs.m_oData[ i ];\r
+ }\r
+}\r
+\r
+const BOOL CClipboardFormatSnap::operator==( const CClipboardFormatSnap& rhs )\r
+{\r
+ if( m_nFormat != rhs.m_nFormat ) return FALSE;\r
+\r
+ if( m_oData.GetSize() != rhs.m_oData.GetSize() ) return FALSE;\r
+\r
+ for( int i = 0; i < m_oData.GetSize(); ++i )\r
+ {\r
+ if( m_oData[ i ] != rhs.m_oData[ i ] ) return FALSE;\r
+ }\r
+\r
+ return TRUE;\r
+}\r
+\r
+const BOOL CClipboardFormatSnap::operator!=( const CClipboardFormatSnap& rhs )\r
+{\r
+ return !( *this == rhs );\r
+}\r
+\r
+const CClipboardFormatSnap& CClipboardFormatSnap::operator=( const CClipboardFormatSnap& rhs )\r
+{\r
+ m_nFormat = rhs.m_nFormat;\r
+\r
+ int nLen = rhs.m_oData.GetSize();\r
+ m_oData.RemoveAll();\r
+ m_oData.SetSize( nLen );\r
+\r
+ for( int i = 0; i < nLen; i++ )\r
+ {\r
+ m_oData[ i ] = rhs.m_oData[ i ];\r
+ }\r
+\r
+ return *this;\r
+}\r
+\r
+void CClipboardFormatSnap::MergeText( const CClipboardFormatSnap &rhs, const int nSizeOfNullTerminator )\r
+{\r
+ const int nOriginalTextLength = GetTextLength( nSizeOfNullTerminator );\r
+ if( 0 < nOriginalTextLength )\r
+ {\r
+ m_oData.SetSize( nOriginalTextLength + rhs.m_oData.GetSize() );\r
+ for( int i = 0; i < rhs.m_oData.GetSize(); ++i )\r
+ {\r
+ m_oData[ nOriginalTextLength + i ] = rhs.m_oData[ i ];\r
+ }\r
+ }\r
+ else\r
+ {\r
+ *this = rhs;\r
+ }\r
+}\r
+\r
+void CClipboardFormatSnap::MergeRTF( const CClipboardFormatSnap& rhs )\r
+{\r
+ const int nOriginalHead = GetRTFBodyHead();\r
+ const int nOriginalLength = GetRTFBodyLength();\r
+ const int nRHSHead = rhs.GetRTFBodyHead();\r
+ const int nRHSLength = rhs.GetRTFBodyLength();\r
+\r
+ if( nRHSLength )\r
+ {\r
+ m_oData.SetSize( m_oData.GetSize() + nRHSLength );\r
+ for( int i = m_oData.GetSize() - 1; nOriginalHead + nOriginalLength <= i ; --i )\r
+ {\r
+ m_oData[ i ] = m_oData[ i - nRHSLength ];\r
+ }\r
+ for( int j = 0; j < nRHSLength; ++j )\r
+ {\r
+ m_oData[ nOriginalHead + nOriginalLength + j ] = rhs.m_oData[ nRHSHead + j ];\r
+ }\r
+ }\r
+}\r
+\r
+const CClipboardFormatSnap& CClipboardFormatSnap::operator+( const CClipboardFormatSnap& rhs )\r
+{\r
+ if( !rhs.m_oData.GetSize() ) return *this;\r
+\r
+ ASSERT( m_nFormat == rhs.m_nFormat );\r
+ m_nFormat = rhs.m_nFormat;\r
+\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ MergeText( rhs, 1 );\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ MergeText( rhs, 2 );\r
+ break;\r
+ case CF_LOCALE:\r
+ *this = rhs;\r
+ break;\r
+ case 49310: // Rich Text Format\r
+ MergeRTF( rhs );\r
+ break;\r
+ default:\r
+ ASSERT( 0 );\r
+ *this = rhs;\r
+ break;\r
+ }\r
+\r
+ return *this;\r
+}\r
+\r
+/*\r
+const CClipboardFormatSnap& CClipboardFormatSnap::Merge( CClipboardFormatSnap& lhs, CClipboardFormatSnap& rhs )\r
+{\r
+ ASSERT( m_nFormat == rhs.m_nFormat );\r
+ m_nFormat = lhs.m_nFormat;\r
+ m_oData.RemoveAll();\r
+\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ {\r
+ const int nSizeOfNullTerminator = 1;\r
+ if( lhs.m_oData.GetSize() && rhs.m_oData.GetSize() )\r
+ {\r
+ m_oData.SetSize( lhs.m_oData.GetSize() - nSizeOfNullTerminator + rhs.m_oData.GetSize() );\r
+\r
+ int nLHS = 0;\r
+ for( nLHS = 0; nLHS < lhs.m_oData.GetSize() - nSizeOfNullTerminator; ++nLHS )\r
+ {\r
+ m_oData[ nLHS ] = lhs.m_oData[ nLHS ];\r
+ }\r
+ for( int nRHS = 0; nRHS < rhs.m_oData.GetSize(); ++nRHS )\r
+ {\r
+ m_oData[ nLHS + nRHS ] = rhs.m_oData[ nRHS ];\r
+ }\r
+ }\r
+ else if( lhs.m_oData.GetSize() )\r
+ {\r
+ *this = lhs;\r
+ }\r
+ else if( rhs.m_oData.GetSize() )\r
+ {\r
+ *this = rhs;\r
+ }\r
+ else\r
+ {\r
+ ASSERT( 0 );\r
+ }\r
+ }\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ {\r
+ const int nSizeOfNullTerminator = 2;\r
+ if( lhs.m_oData.GetSize() && rhs.m_oData.GetSize() )\r
+ {\r
+ m_oData.SetSize( lhs.m_oData.GetSize() - nSizeOfNullTerminator + rhs.m_oData.GetSize() );\r
+\r
+ int nLHS = 0;\r
+ for( nLHS = 0; nLHS < lhs.m_oData.GetSize() - nSizeOfNullTerminator; ++nLHS )\r
+ {\r
+ m_oData[ nLHS ] = lhs.m_oData[ nLHS ];\r
+ }\r
+ for( int nRHS = 0; nRHS < rhs.m_oData.GetSize(); ++nRHS )\r
+ {\r
+ m_oData[ nLHS + nRHS ] = rhs.m_oData[ nRHS ];\r
+ }\r
+ }\r
+ else if( lhs.m_oData.GetSize() )\r
+ {\r
+ *this = lhs;\r
+ }\r
+ else if( rhs.m_oData.GetSize() )\r
+ {\r
+ *this = rhs;\r
+ }\r
+ else\r
+ {\r
+ ASSERT( 0 );\r
+ }\r
+ }\r
+ break;\r
+ case CF_LOCALE:\r
+ *this = lhs;\r
+ break;\r
+ default:\r
+ ASSERT( 0 );\r
+ *this = lhs;\r
+ break;\r
+ }\r
+\r
+ return *this;\r
+}\r
+*/\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \91\80\8dì\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+BOOL CClipboardFormatSnap::Capture( int nFormat )\r
+{\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 0");\r
+ m_nFormat = nFormat;\r
+\r
+ //\r
+ // (0) DataObject\82Í\8eæ\82è\8f\9c\82(4byte\82Ì\83|\83C\83\93\83^\82µ\82©\93¾\82ç\82ê\82È\82¢\82½\82ß)\r
+ //\r
+ if( GetFormatName( nFormat ) == _T("DataObject") ) return FALSE;\r
+\r
+ //\r
+ // (0.5) Excel \8fã\82Å CF_METAFILEPICT/CF_ENHMETAFILE \82É GetClipboardData \82·\82é\82Æ "\90}\82ª\91å\82«\82·\82¬\82Ü\82·\81B" \82Æ\82¢\82¤\83G\83\89\81[\82ª\95\\8e¦\82³\82ê\82é\81B\r
+ //\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 0.5");\r
+ if( CUtils::IsExcel() && ( nFormat == CF_METAFILEPICT || nFormat == CF_ENHMETAFILE ) ) return FALSE;\r
+\r
+ //\r
+ // (1) Clipboard\93à\82Ì\83\81\83\82\83\8a\83u\83\8d\83b\83N\8eæ\93¾\r
+ //\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 1");\r
+ HANDLE hData = GetClipboardData( nFormat ); if( hData == NULL ) return FALSE;\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 1.1");\r
+ void *pData = GlobalLock( hData ); if( pData == NULL ) return FALSE;\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 1.2");\r
+ size_t nLenData = GlobalSize( hData ); if( nLenData == 0 ) return FALSE;\r
+\r
+ //\r
+ // (2) \83\8d\81[\83J\83\8b\83I\83u\83W\83F\83N\83g\82Ö\83f\81[\83^\83R\83s\81[\r
+ //\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 2");\r
+ m_oData.RemoveAll();\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 2.1");\r
+ m_oData.SetSize( nLenData );\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 2.2");\r
+ CopyMemory( &m_oData[ 0 ], pData, nLenData );\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 2.3");\r
+ GlobalUnlock( hData );\r
+\r
+ // for debug\r
+// CUtils::Log( "nFormat: %d (%s)", nFormat, GetFormatName( nFormat ) );\r
+/// if( nFormat == CF_OEMTEXT )\r
+// if( nFormat == 49310 ) // Rich Text Format\r
+/// if( nFormat == 49360 ) // HTML Format\r
+/// if( nFormat == 49669 ) // Notes Editor Internal\r
+/// if( nFormat == 49742 ) // HPB HTML Format\r
+// {\r
+/// for( int i = 0; i < m_oData.GetSize(); ++i )\r
+/// {\r
+/// CUtils::Log( "%02x (%c)", m_oData[i], m_oData[ i ] );\r
+/// }\r
+///\r
+/// CUtils::Log( "size = %d", m_oData.GetSize() );\r
+// char *sz = new char[ m_oData.GetSize() + 1 ];\r
+// memset( sz, 0, m_oData.GetSize() + 1 );\r
+// for( int i = 0; i < m_oData.GetSize(); ++i )\r
+// {\r
+// *(sz + i) = m_oData[ i ];\r
+// }\r
+// CUtils::Log( "%s", sz );\r
+// CUtils::Log( "length = %d", GetRTFBodyLength());\r
+// delete[] sz;\r
+// }\r
+\r
+// CUtils::Log("CClipboardFormatSnap::Capture: 3");\r
+ return TRUE;\r
+}\r
+\r
+BOOL CClipboardFormatSnap::Restore()\r
+{\r
+ int nLenData = m_oData.GetSize() * sizeof(BYTE);\r
+ HANDLE hClip = GlobalAlloc( GMEM_MOVEABLE, nLenData );\r
+ void *pClip = GlobalLock( hClip );\r
+ CopyMemory( pClip, &m_oData[ 0 ], nLenData );\r
+\r
+ GlobalUnlock( hClip );\r
+ SetClipboardData( m_nFormat, hClip );\r
+ return TRUE;\r
+}\r
+\r
+BOOL CClipboardFormatSnap::IsSameFormat( const CClipboardFormatSnap *const pFormatSnap )\r
+{\r
+ return m_nFormat == pFormatSnap->m_nFormat;\r
+}\r
+\r
+BOOL CClipboardFormatSnap::IsMergeableFormat()\r
+{\r
+ return IsMergeableFormat( m_nFormat );\r
+}\r
+\r
+BOOL CClipboardFormatSnap::IsMergeableFormat( const int nFormat )\r
+{\r
+ switch( nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ case CF_UNICODETEXT:\r
+ case CF_LOCALE:\r
+// case 49310: // Rich Text Format\r
+ return TRUE;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+int CClipboardFormatSnap::FindReturn()\r
+{\r
+// CUtils::Log( "%s", GetFormatName( m_nFormat ) );\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ {\r
+ for( int i = 0; i < m_oData.GetSize(); ++i )\r
+ {\r
+// CUtils::Log( "%#02x (%c)", m_oData[ i ], m_oData[ i ] );\r
+ if( m_oData[ i ] == VK_RETURN ) return i; // CR\r
+ if( !m_oData[ i ] ) break; // NULL Terminator\r
+ }\r
+ }\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ {\r
+// for( int i = 0; i < m_oData.GetSize(); ++i )\r
+// {\r
+// CUtils::Log( "%#02x (%c)", m_oData[ i ], m_oData[ i ] );\r
+// }\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return -1;\r
+}\r
+\r
+const int CClipboardFormatSnap::GetTextLength( const int nSizeOfNullTerminator )\r
+{\r
+ try {\r
+ char *pNullTerminator = new char[ nSizeOfNullTerminator ];\r
+\r
+ if( !pNullTerminator ) return -1;\r
+ memset( pNullTerminator, 0, nSizeOfNullTerminator );\r
+\r
+ char *pCurrentCharactor = new char[ nSizeOfNullTerminator ];\r
+ if( !pCurrentCharactor )\r
+ {\r
+ delete [] pNullTerminator;\r
+ pNullTerminator = NULL;\r
+ return -1;\r
+ }\r
+\r
+ for( int i = 0; i < m_oData.GetSize() - nSizeOfNullTerminator + 1; i += nSizeOfNullTerminator )\r
+ {\r
+ for( int j = 0; j < nSizeOfNullTerminator; ++j ) pCurrentCharactor[ j ] = m_oData[ i + j ];\r
+\r
+ if( !memcmp( pCurrentCharactor, pNullTerminator, nSizeOfNullTerminator ) )\r
+ {\r
+ delete [] pNullTerminator;\r
+ pNullTerminator = NULL;\r
+ delete [] pCurrentCharactor;\r
+ pCurrentCharactor = NULL;\r
+ return i;\r
+ }\r
+ }\r
+\r
+ delete [] pNullTerminator;\r
+ pNullTerminator = NULL;\r
+ delete [] pCurrentCharactor;\r
+ pCurrentCharactor = NULL;\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardFormatSnap::GetTextLength: 'new' threw an exception");\r
+ }\r
+\r
+ return -1;\r
+}\r
+\r
+const int CClipboardFormatSnap::GetRTFBodyHead() const\r
+{\r
+ int nBra = 0;\r
+\r
+ for( int i = 0; i < m_oData.GetSize(); ++i )\r
+ {\r
+ BOOL bBody = FALSE;\r
+\r
+ switch( m_oData[ i ] )\r
+ {\r
+ case '{':\r
+ if( nBra++ )\r
+ {\r
+ for( ++i ; i < m_oData.GetSize(); ++i )\r
+ {\r
+ switch( m_oData[ i ] )\r
+ {\r
+ case '{':\r
+ ++nBra;\r
+ break;\r
+ case '}':\r
+ --nBra;\r
+ break;\r
+ case '\\':\r
+// // for Microsoft Word\r
+// if( i < m_oData.GetSize() + 7 &&\r
+// m_oData[ i + 1 ] == 'i' &&\r
+// m_oData[ i + 2 ] == 'n' &&\r
+// m_oData[ i + 3 ] == 's' &&\r
+// m_oData[ i + 4 ] == 'r' &&\r
+// m_oData[ i + 5 ] == 's' &&\r
+// m_oData[ i + 6 ] == 'i' &&\r
+// m_oData[ i + 7 ] == 'd' )\r
+// {\r
+// --i;\r
+// nBra = 1;\r
+// }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ if( nBra == 1 ) break;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case '}':\r
+ if( --nBra == 0 ) {\r
+ i = m_oData.GetSize();\r
+ bBody = TRUE;\r
+ }\r
+ break;\r
+\r
+ case '\\': // tag\r
+ for( ; i < m_oData.GetSize(); ++i )\r
+ {\r
+ BOOL bTagEnd = FALSE;\r
+ switch( m_oData[ i ] )\r
+ {\r
+ case '{':\r
+ case '}':\r
+ --i;\r
+ bTagEnd = TRUE;\r
+ break;\r
+ case ' ':\r
+ bTagEnd = TRUE;\r
+ break;\r
+ case '\\':\r
+ if( i < m_oData.GetSize() + 5 &&\r
+ m_oData[ i + 1 ] == 'p' &&\r
+ m_oData[ i + 2 ] == 'a' &&\r
+ m_oData[ i + 3 ] == 'r' &&\r
+ m_oData[ i + 4 ] == 0x0d &&\r
+ m_oData[ i + 5 ] == 0x0a )\r
+ {\r
+ bTagEnd = TRUE;\r
+ bBody = TRUE;\r
+ }\r
+ if( i < m_oData.GetSize() + 1 &&\r
+ ( m_oData[ i + 1 ] == '\\' ||\r
+ m_oData[ i + 1 ] == '{' ||\r
+ m_oData[ i + 1 ] == '}' ) )\r
+ {\r
+ bTagEnd = TRUE;\r
+ bBody = TRUE;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ if( bTagEnd ) break;\r
+ }\r
+ break;\r
+\r
+ case 0x0d:\r
+ if( i < m_oData.GetSize() + 5 &&\r
+ m_oData[ i + 1 ] == 0x0a &&\r
+ m_oData[ i + 2 ] == '\\' &&\r
+ m_oData[ i + 3 ] == 'p' &&\r
+ m_oData[ i + 4 ] == 'a' &&\r
+ m_oData[ i + 5 ] == 'r' )\r
+ {\r
+ bBody = TRUE;\r
+ }\r
+ break;\r
+ case 0x0a:\r
+ break;\r
+\r
+ default: // body\r
+ bBody = TRUE;\r
+ break;\r
+ }\r
+\r
+ if( bBody ) break;\r
+ }\r
+\r
+ return i;\r
+}\r
+\r
+const int CClipboardFormatSnap::GetRTFBodyLength() const\r
+{\r
+// CUtils::Log("const int CClipboardFormatSnap::GetRTFBodyLength() const: GetRTFBodyHead() = %d, m_oData.GetSize() = %d", GetRTFBodyHead(), m_oData.GetSize());\r
+ int nLength = 0;\r
+\r
+ for( int i = GetRTFBodyHead(); i < m_oData.GetSize(); ++i )\r
+ {\r
+ if( m_oData[ i ] == '}' ) break;\r
+ else if( m_oData[ i ] == '\\' )\r
+ {\r
+// CUtils::Log( "Body: %#04x (%c)", m_oData[ i ], m_oData[ i ] );\r
+// CUtils::Log( "Body: %#04x (%c)", m_oData[ i + 1 ], m_oData[ i + 1 ] );\r
+ nLength += 2;\r
+ ++i;\r
+ }\r
+ else\r
+ {\r
+// CUtils::Log( "Body: %#04x (%c)", m_oData[ i ], m_oData[ i ] );\r
+ ++nLength;\r
+ }\r
+ }\r
+\r
+ return nLength;\r
+}\r
+\r
+BOOL CClipboardFormatSnap::IsEmpty()\r
+{\r
+ BOOL rc = TRUE;\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ if( ( 1 < m_oData.GetSize() ) && m_oData[ 0 ] ) rc = FALSE;\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ if( ( 2 < m_oData.GetSize() ) && m_oData[ 0 ] && m_oData[ 1 ] ) rc = FALSE;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ return rc;\r
+}\r
+\r
+void CClipboardFormatSnap::Add( const char *const pAddedString, const BOOL bTop )\r
+{\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ Add( pAddedString, bTop, 1 );\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ Add( pAddedString, bTop, 2 );\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void CClipboardFormatSnap::Add( const char *const pAddedString, const BOOL bTop, const int nSizeOfNullTerminator )\r
+{\r
+ int nOffset = GetTextLength( nSizeOfNullTerminator );\r
+ if( nOffset < 0 ) nOffset = 0;\r
+\r
+ if( m_oData.GetSize() < ( nOffset + nSizeOfNullTerminator * ( (int)strlen( pAddedString ) + 1 ) ) )\r
+ {\r
+ m_oData.SetSize( nOffset + nSizeOfNullTerminator * ( strlen( pAddedString ) + 1 ) );\r
+ }\r
+\r
+ if( bTop )\r
+ {\r
+ for( int i = nOffset + nSizeOfNullTerminator - 1; 0 <= i ; --i )\r
+ {\r
+ m_oData[ nSizeOfNullTerminator * strlen(pAddedString) + i ] = m_oData[ i ];\r
+ }\r
+ for( i = 0; i < ( int )strlen( pAddedString ); ++i )\r
+ {\r
+ for ( int j = 0; j < nSizeOfNullTerminator; ++j ) {\r
+ if( j ) m_oData[ i * nSizeOfNullTerminator + j ] = 0;\r
+ else m_oData[ i * nSizeOfNullTerminator + j ] = *( pAddedString + i );\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for( unsigned int i = 0; i < strlen( pAddedString ); ++i )\r
+ {\r
+ for( int j = 0; j < nSizeOfNullTerminator; ++j )\r
+ {\r
+ if( j ) m_oData[ nOffset + i * nSizeOfNullTerminator + j ] = 0;\r
+ else m_oData[ nOffset + i * nSizeOfNullTerminator + j ] = *( pAddedString + i );\r
+ }\r
+ }\r
+\r
+ for( int j = 0; j < nSizeOfNullTerminator; ++j )\r
+ {\r
+ m_oData[ nOffset + i * nSizeOfNullTerminator + j ] = 0;\r
+ }\r
+ }\r
+}\r
+\r
+void CClipboardFormatSnap::DeleteLastReturn()\r
+{\r
+ switch( m_nFormat )\r
+ {\r
+ case CF_TEXT:\r
+ case CF_OEMTEXT:\r
+ DeleteLastReturn( 1 );\r
+ break;\r
+ case CF_UNICODETEXT:\r
+ DeleteLastReturn( 2 );\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void CClipboardFormatSnap::DeleteLastReturn(const int nSizeOfNullTerminator)\r
+{\r
+ if( GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 < 0 ) return;\r
+\r
+ try {\r
+ char *pCRLF = new char[ nSizeOfNullTerminator * 2 ];\r
+ if( !pCRLF ) return;\r
+ memset( pCRLF, 0, nSizeOfNullTerminator * 2 );\r
+ *pCRLF = '\r';\r
+ *(pCRLF + nSizeOfNullTerminator) = '\n';\r
+\r
+ BOOL bDelete = TRUE;\r
+ for( int i = 0; i < nSizeOfNullTerminator * 2; ++i )\r
+ {\r
+// CUtils::Log( "%#02x (%c) AA _%#02x_", m_oData[ GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 + i ], m_oData[ GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 + i ], *( pCRLF + i ) );\r
+ if( m_oData[ GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 + i ] != *( pCRLF + i ) )\r
+ {\r
+ bDelete = FALSE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if( bDelete )\r
+ {\r
+ const int nOffset = GetTextLength( nSizeOfNullTerminator );\r
+ for( int i = 0; i < nSizeOfNullTerminator * 2; ++i )\r
+ {\r
+// CUtils::Log( "%#02x (%c) BB", m_oData[ GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 + i ], m_oData[ GetTextLength( nSizeOfNullTerminator ) - nSizeOfNullTerminator * 2 + i ] );\r
+ m_oData[ nOffset - nSizeOfNullTerminator * 2 + i ] = 0;\r
+ }\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardFormatSnap::DeleteLastReturn: 'new' threw an exception");\r
+ }\r
+}\r
--- /dev/null
+// ClipboardFormatSnap.h: CClipboardFormatSnap \83N\83\89\83X\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_CLIPBOARDFORMATSNAP_H__75207F92_15D2_4D59_B413_730D8875976D__INCLUDED_)\r
+#define AFX_CLIPBOARDFORMATSNAP_H__75207F92_15D2_4D59_B413_730D8875976D__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include <afxtempl.h>\r
+\r
+\r
+// \83\86\81[\83e\83B\83\8a\83e\83B\8aÖ\90\94\r
+\r
+inline CString GetFormatName( int nFormat )\r
+{\r
+ // \83t\83H\81[\83}\83b\83g\96¼\82ð\95Ô\82·\8aÖ\90\94\r
+ // \83f\83o\83b\83O\97p\82Å\82 \82è\81Awin2k\88È\8d~\82ð\91O\92ñ\82Æ\82µ\82Ä\82¢\82é\r
+ // \8cÃ\82¢OS\82Å\93\96\8aÖ\90\94\82ð\8eg\82¤\82Æ\82¤\82»\82Ì\96¼\91O\82ð\95Ô\82·\8fê\8d\87\82ª\82 \82é\r
+ // OWNEDDISPLAY\82È\82Ç\82ÌCF\82à\83t\83H\83\8d\81[\82µ\82Ä\82È\82¢\82Ì\82Åwin2k\82Å\82à\82¤\82»\82Â\82\r
+\r
+ // 01-17\r
+ CString sDefaultName[] = {\r
+ _T("CF_TEXT"),\r
+ _T("CF_BITMAP"),\r
+ _T("CF_METAFILEPICT"),\r
+ _T("CF_SYLK"),\r
+ _T("CF_DIF"),\r
+ _T("CF_TIFF"),\r
+ _T("CF_OEMTEXT"),\r
+ _T("CF_DIB"),\r
+ _T("CF_PALETTE"),\r
+ _T("CF_PENDATA"),\r
+ _T("CF_RIFF"),\r
+ _T("CF_WAVE"),\r
+ _T("CF_UNICODETEXT"),\r
+ _T("CF_ENHMETAFILE"),\r
+ _T("CF_HDROP"),\r
+ _T("CF_LOCALE"),\r
+ _T("CF_DIBV5")\r
+ };\r
+\r
+ if( nFormat <= 0 ) return _T("");\r
+ if( nFormat <= 17 ) return sDefaultName[ nFormat - 1 ];\r
+\r
+ TCHAR sFormatName[ 10000 ];\r
+ if( !GetClipboardFormatName( nFormat, sFormatName, 10000 ) ) return _T("");\r
+ return sFormatName;\r
+}\r
+\r
+class CClipboardFormatSnap \r
+{\r
+ //\r
+ // * Constructors\r
+ //\r
+public:\r
+ CClipboardFormatSnap();\r
+ virtual ~CClipboardFormatSnap();\r
+\r
+ //\r
+ // * Copy\r
+ //\r
+public:\r
+ CClipboardFormatSnap( const CClipboardFormatSnap& rhs );\r
+ const CClipboardFormatSnap& operator=( const CClipboardFormatSnap& rhs );\r
+ const BOOL operator==( const CClipboardFormatSnap& rhs );\r
+ const BOOL operator!=( const CClipboardFormatSnap& rhs );\r
+\r
+ //\r
+ // * Operations\r
+ //\r
+public:\r
+ BOOL Capture( int nFormat );\r
+ BOOL Restore();\r
+ BOOL IsSameFormat( const CClipboardFormatSnap* const pFormatSnap );\r
+ BOOL IsMergeableFormat();\r
+ static BOOL IsMergeableFormat( const int nFormat );\r
+ int FindReturn();\r
+ void DeleteLastReturn();\r
+ void Add( const char* const pAddedString, const BOOL bTop );\r
+ BOOL IsEmpty();\r
+ const CClipboardFormatSnap& operator+( const CClipboardFormatSnap& rhs );\r
+/// const CClipboardFormatSnap& Merge( CClipboardFormatSnap& lhs, CClipboardFormatSnap& rhs );\r
+protected:\r
+ void DeleteLastReturn( const int nSizeOfNullTerminator );\r
+ void Add( const char* const pAddedString, const BOOL bTop, const int nSizeOfNullTerminator );\r
+ const int GetTextLength( const int nSizeOfNullTerminator );\r
+ const int GetRTFBodyLength() const;\r
+ const int GetRTFBodyHead() const;\r
+ void MergeText( const CClipboardFormatSnap& rhs, const int nSizeOfNullTerminator );\r
+ void MergeRTF( const CClipboardFormatSnap& rhs );\r
+\r
+ //\r
+ // * Attributes\r
+ //\r
+private:\r
+ int m_nFormat;\r
+ CArray<BYTE, BYTE> m_oData;\r
+};\r
+\r
+#endif // !defined(AFX_CLIPBOARDFORMATSNAP_H__75207F92_15D2_4D59_B413_730D8875976D__INCLUDED_)\r
--- /dev/null
+// ClipboardSnap.cpp: CClipboardSnap \83N\83\89\83X\82Ì\83C\83\93\83v\83\8a\83\81\83\93\83e\81[\83V\83\87\83\93\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "ClipboardSnap.h"\r
+#include "Utils.h"\r
+\r
+#ifdef _DEBUG\r
+#undef THIS_FILE\r
+static char THIS_FILE[]=__FILE__;\r
+#define new DEBUG_NEW\r
+#endif\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \8d\\92z/\8fÁ\96Å\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CClipboardSnap::CClipboardSnap() : m_oFormatSnaps()\r
+{\r
+ m_pNext = NULL;\r
+}\r
+\r
+CClipboardSnap::~CClipboardSnap()\r
+{\r
+ ClearFormatSnaps();\r
+}\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \83R\83s\81[\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CClipboardSnap::CClipboardSnap( const CClipboardSnap& rhs ) : m_oFormatSnaps()\r
+{\r
+ m_pNext = NULL;\r
+ int nLen = rhs.m_oFormatSnaps.GetSize();\r
+ ClearFormatSnaps();\r
+ m_oFormatSnaps.SetSize( nLen );\r
+\r
+ for( int i = 0; i < nLen; i++ )\r
+ {\r
+ try {\r
+ m_oFormatSnaps[ i ] = new CClipboardFormatSnap;\r
+ if( m_oFormatSnaps[ i ] ) *m_oFormatSnaps[ i ] = *rhs.m_oFormatSnaps[ i ];\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardSnap::CClipboardSnap: 'new' threw an exception");\r
+ }\r
+ }\r
+\r
+ if( m_pNext ) m_pNext->ClearFormatSnaps();\r
+ m_pNext = rhs.m_pNext;\r
+}\r
+\r
+const BOOL CClipboardSnap::operator==( const CClipboardSnap& rhs )\r
+{\r
+ if( m_oFormatSnaps.GetSize() != rhs.m_oFormatSnaps.GetSize() ) return FALSE;\r
+\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ if ( *m_oFormatSnaps[ i ] != *rhs.m_oFormatSnaps[ i ] ) return FALSE;\r
+ }\r
+\r
+ return TRUE;\r
+}\r
+\r
+const BOOL CClipboardSnap::operator!=( const CClipboardSnap& rhs )\r
+{\r
+ return !( *this == rhs );\r
+}\r
+\r
+const CClipboardSnap& CClipboardSnap::operator=( const CClipboardSnap& rhs )\r
+{\r
+ int nLen = rhs.m_oFormatSnaps.GetSize();\r
+ ClearFormatSnaps();\r
+ m_oFormatSnaps.SetSize( nLen );\r
+\r
+ for( int i = 0; i < nLen; i++ )\r
+ {\r
+ try {\r
+ m_oFormatSnaps[ i ] = new CClipboardFormatSnap;\r
+ if( m_oFormatSnaps[ i ] ) *m_oFormatSnaps[ i ] = *rhs.m_oFormatSnaps[ i ];\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardSnap::operator=: 'new' threw an exception");\r
+ }\r
+ }\r
+\r
+ if( m_pNext ) m_pNext->ClearFormatSnaps();\r
+ m_pNext = rhs.m_pNext;\r
+\r
+ return *this;\r
+}\r
+\r
+const CClipboardSnap& CClipboardSnap::operator+=( const CClipboardSnap& rhs )\r
+{\r
+ const CClipboardSnap lhs = *this;\r
+\r
+ // count the number of mergeable clipboard format\r
+ int nMergeableClipboardFormatNumber = 0;\r
+ struct MergeableClipboardFormatPosition\r
+ {\r
+ int m_nLHS;\r
+ int m_nRHS;\r
+ };\r
+\r
+ const int nMergeableClipboardFormatPosition = lhs.m_oFormatSnaps.GetSize() + rhs.m_oFormatSnaps.GetSize();\r
+ try {\r
+ MergeableClipboardFormatPosition *const pMergeableClipboardFormatPosition = new MergeableClipboardFormatPosition[ nMergeableClipboardFormatPosition ];\r
+ if( !pMergeableClipboardFormatPosition ) return *this;\r
+\r
+ memset( pMergeableClipboardFormatPosition, -1, sizeof(MergeableClipboardFormatPosition) * nMergeableClipboardFormatPosition );\r
+\r
+ for( int nLHS = 0; nLHS < lhs.m_oFormatSnaps.GetSize(); ++nLHS ) // LHS: Left Hand Side\r
+ {\r
+ if( lhs.m_oFormatSnaps[ nLHS ]->IsMergeableFormat() )\r
+ {\r
+ ( pMergeableClipboardFormatPosition + nMergeableClipboardFormatNumber )->m_nLHS = nLHS;\r
+ ++nMergeableClipboardFormatNumber;\r
+ }\r
+ }\r
+ for( int nRHS = 0; nRHS < rhs.m_oFormatSnaps.GetSize(); ++nRHS ) // RHS: Right Hand Side\r
+ {\r
+ if( rhs.m_oFormatSnaps[ nRHS ]->IsMergeableFormat() )\r
+ {\r
+ for( int i = 0; i < nMergeableClipboardFormatNumber; ++i )\r
+ {\r
+ if( ( pMergeableClipboardFormatPosition + i )->m_nLHS < 0 ) continue;\r
+ if( rhs.m_oFormatSnaps[ nRHS ]->IsSameFormat( lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ] ) ) break;\r
+ }\r
+\r
+ ( pMergeableClipboardFormatPosition + i )->m_nRHS = nRHS;\r
+ if( i == nMergeableClipboardFormatNumber )\r
+ {\r
+ ++nMergeableClipboardFormatNumber;\r
+ }\r
+ }\r
+ }\r
+\r
+ // clear current data\r
+ m_oFormatSnaps.RemoveAll();\r
+ m_oFormatSnaps.SetSize( nMergeableClipboardFormatNumber );\r
+\r
+ // set data\r
+ for( int i = 0; i < nMergeableClipboardFormatNumber; ++i )\r
+ {\r
+ CClipboardFormatSnap *pFormatSnap = new CClipboardFormatSnap;\r
+ if( pFormatSnap )\r
+ {\r
+ m_oFormatSnaps[ i ] = pFormatSnap;\r
+ if( ( ( pMergeableClipboardFormatPosition + i )->m_nLHS < 0 ) &&\r
+ ( ( pMergeableClipboardFormatPosition + i )->m_nRHS < 0 ) )\r
+ {\r
+ ASSERT( 0 );\r
+ }\r
+ else if( ( pMergeableClipboardFormatPosition + i )->m_nLHS < 0 )\r
+ {\r
+ *m_oFormatSnaps[ i ] = *rhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nRHS ];\r
+ }\r
+ else if( ( pMergeableClipboardFormatPosition + i )->m_nRHS < 0 )\r
+ {\r
+ *m_oFormatSnaps[ i ] = *lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ];\r
+ }\r
+ else\r
+ {\r
+// *lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ] += *rhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nRHS ];\r
+// *m_oFormatSnaps[ i ] = *lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ];\r
+ *m_oFormatSnaps[ i ] = *lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ] +\r
+ *rhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nRHS ];\r
+// m_oFormatSnaps[ i ]->Merge( *lhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nLHS ],\r
+// *rhs.m_oFormatSnaps[ ( pMergeableClipboardFormatPosition + i )->m_nRHS ] );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardSnap::operator+=: 'new' threw an exception");\r
+ }\r
+\r
+ return *this;\r
+}\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \91\80\8dì\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+BOOL CClipboardSnap::Capture( const BOOL bTextOnly )\r
+{\r
+// CUtils::Log( "CClipboardSnap::Capture(): start" );\r
+\r
+ ClearFormatSnaps();\r
+ if( !CUtils::OpenClipboard() ) return FALSE;\r
+\r
+ int nFormat = 0;\r
+ int nFormatCount = CountClipboardFormats();\r
+\r
+ for( int i = 0; i < nFormatCount; i++ )\r
+ {\r
+ nFormat = EnumClipboardFormats( nFormat );\r
+ if( nFormat == 0 ) break;\r
+// CUtils::Log("CClipboardSnap::Capture(): i = %d, nFormat = %d (%s)", i, nFormat, GetFormatName(nFormat));\r
+\r
+ if( bTextOnly && !CClipboardFormatSnap::IsMergeableFormat( nFormat ) ) continue;\r
+\r
+ // for Microsoft Word\r
+ if( i && nFormat == 49163 ) continue;\r
+ if( i && nFormat == 49156 ) continue;\r
+\r
+ try {\r
+ CClipboardFormatSnap *pFormatSnap = new CClipboardFormatSnap;\r
+\r
+ if( pFormatSnap && !pFormatSnap->Capture( nFormat ) ) {\r
+// AfxMessageBox( _T("Capture Ignored or Failed:\n") + GetFormatName(nFormat) );\r
+// CUtils::Log( "CClipboardSnap::Capture(): Capture Ignored or Failed" );\r
+ } else {\r
+// CUtils::Log( "CClipboardSnap::Capture(): add start" );\r
+ m_oFormatSnaps.Add( pFormatSnap );\r
+// CUtils::Log( "CClipboardSnap::Capture(): add end" );\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CClipboardSnap::Capture: 'new' threw an exception");\r
+ }\r
+ }\r
+\r
+ CloseClipboard();\r
+// CUtils::Log( "CClipboardSnap::Capture(): end" );\r
+ return TRUE;\r
+}\r
+\r
+BOOL CClipboardSnap::Restore()\r
+{\r
+ if( !CUtils::OpenClipboard() ) return FALSE;\r
+ EmptyClipboard();\r
+\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); i++ )\r
+ {\r
+ m_oFormatSnaps[ i ]->Restore();\r
+ }\r
+\r
+ CloseClipboard();\r
+ return TRUE;\r
+}\r
+\r
+void CClipboardSnap::ClearFormatSnaps()\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); i++ )\r
+ {\r
+ delete m_oFormatSnaps[ i ];\r
+ }\r
+ m_oFormatSnaps.RemoveAll();\r
+\r
+ if( m_pNext ) m_pNext->ClearFormatSnaps();\r
+ m_pNext = NULL;\r
+}\r
+\r
+int CClipboardSnap::FindReturn()\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ int rc = m_oFormatSnaps[ i ]->FindReturn();\r
+ if( rc != -1 ) return rc;\r
+ }\r
+ return -1;\r
+}\r
+\r
+BOOL CClipboardSnap::IsEmpty()\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ if( !m_oFormatSnaps[ i ]->IsEmpty() ) return FALSE;\r
+ }\r
+ return TRUE;\r
+}\r
+\r
+void CClipboardSnap::Add( const char *const pAddedString, const BOOL bTop )\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ m_oFormatSnaps[ i ]->Add( pAddedString, bTop );\r
+ }\r
+}\r
+\r
+void CClipboardSnap::DeleteLastReturn()\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ m_oFormatSnaps[ i ]->DeleteLastReturn();\r
+ }\r
+}\r
+\r
+void CClipboardSnap::SetNext( CClipboardSnap* pNext )\r
+{\r
+ if( m_pNext ) m_pNext->ClearFormatSnaps();\r
+ m_pNext = pNext;\r
+}\r
+\r
+CClipboardSnap* CClipboardSnap::GetNext()\r
+{\r
+ return m_pNext;\r
+}\r
+\r
+BOOL CClipboardSnap::IsAllMergeableFormat()\r
+{\r
+ for( int i = 0; i < m_oFormatSnaps.GetSize(); ++i )\r
+ {\r
+ if( !m_oFormatSnaps[ i ]->IsMergeableFormat() ) return FALSE;\r
+ }\r
+ return TRUE;\r
+}\r
+\r
+int CClipboardSnap::GetCount()\r
+{\r
+ int nCount = 1;\r
+ for( CClipboardSnap* pSnap = this; pSnap->GetNext(); pSnap = pSnap->GetNext() ) ++nCount;\r
+ return ++nCount;\r
+}\r
--- /dev/null
+// ClipboardSnap.h: CClipboardSnap \83N\83\89\83X\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_CLIPBOARDSNAP_H__1FAE18B5_B0B4_4431_B3C4_BE6B26447AF2__INCLUDED_)\r
+#define AFX_CLIPBOARDSNAP_H__1FAE18B5_B0B4_4431_B3C4_BE6B26447AF2__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include <afxtempl.h>\r
+#include "clipboardformatsnap.h"\r
+\r
+class CClipboardSnap \r
+{\r
+ //\r
+ // * Constructors\r
+ //\r
+public:\r
+ CClipboardSnap();\r
+ virtual ~CClipboardSnap();\r
+\r
+ //\r
+ // * Copy\r
+ //\r
+public:\r
+ CClipboardSnap( const CClipboardSnap& rhs );\r
+ const BOOL operator==( const CClipboardSnap& rhs );\r
+ const BOOL operator!=( const CClipboardSnap& rhs );\r
+ const CClipboardSnap& operator=( const CClipboardSnap& rhs );\r
+ const CClipboardSnap& operator+=( const CClipboardSnap& rhs );\r
+\r
+ //\r
+ // * Operations\r
+ //\r
+public:\r
+ BOOL Restore();\r
+ BOOL Capture( const BOOL bTextOnly = FALSE );\r
+ int FindReturn();\r
+ void DeleteLastReturn();\r
+ void Add( const char* const pAddedString, const BOOL bTop );\r
+ BOOL IsEmpty();\r
+ void SetNext( CClipboardSnap* pNext );\r
+ CClipboardSnap* GetNext();\r
+ BOOL IsAllMergeableFormat();\r
+ int GetCount();\r
+private:\r
+ void ClearFormatSnaps();\r
+\r
+ //\r
+ // * Attributes\r
+ //\r
+private:\r
+ CArray<CClipboardFormatSnap *, CClipboardFormatSnap *> m_oFormatSnaps;\r
+ CClipboardSnap* m_pNext;\r
+};\r
+\r
+#endif // !defined(AFX_CLIPBOARDSNAP_H__1FAE18B5_B0B4_4431_B3C4_BE6B26447AF2__INCLUDED_)\r
--- /dev/null
+// Commands.cpp: implementation of the CCommands class\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "Commands.h"\r
+#include "xkeymacsdll.h"\r
+#include "Utils.h"\r
+#include <math.h>\r
+#include <Imm.h>\r
+#pragma data_seg(".xkmcs")\r
+DWORD CCommands::m_nNumericArgument = 1;\r
+BOOL CCommands::m_bSetMark = FALSE;\r
+BOOL CCommands::m_bC_ = FALSE;\r
+BOOL CCommands::m_bC_x = FALSE;\r
+BOOL CCommands::m_bM_ = FALSE;\r
+BOOL CCommands::m_bM_x = FALSE;\r
+BOOL CCommands::m_bDefaultNumericArgument = TRUE;\r
+BOOL CCommands::m_bNegativeNumericArgument = FALSE;\r
+BOOL CCommands::m_bC_u = FALSE;\r
+SEARCH_DIRECTION CCommands::m_SearchDirection = NA;\r
+int (*CCommands::m_LastKillCommand)() = NULL;\r
+int (*CCommands::m_LastCommand)() = NULL;\r
+CPtrList CCommands::m_CaretPos;\r
+CPtrList CCommands::m_ScrollInfo;\r
+CPtrList CCommands::m_FindText;\r
+BOOL CCommands::m_bFirstFindDialog = FALSE;\r
+BOOL CCommands::m_bTemporarilyDisableXKeymacs = FALSE;\r
+CArray<CClipboardSnap *, CClipboardSnap *> CCommands::m_oClipboardData;\r
+OriginalWindowPosition_t CCommands::m_OriginalWindowPosition[MAX_WINDOW] = {'\0'};\r
+BOOL CCommands::m_bIsSu = FALSE;\r
+#pragma data_seg()\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CCommands::CCommands()\r
+{\r
+\r
+}\r
+\r
+CCommands::~CCommands()\r
+{\r
+\r
+}\r
+\r
+void CCommands::DepressKey(BYTE bVk)\r
+{\r
+ CXkeymacsDll::DepressKey(bVk);\r
+}\r
+\r
+void CCommands::ReleaseKey(BYTE bVk)\r
+{\r
+ CXkeymacsDll::ReleaseKey(bVk);\r
+}\r
+\r
+void CCommands::Kdu(BYTE bVk1, BYTE bVk2, BYTE bVk3, BYTE bVk4)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (CXkeymacsDll::Get326Compatible() || CUtils::IsAtok()) {\r
+ bIsShiftDown = FALSE;\r
+ }\r
+\r
+ if (bIsCtrlDown) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ if (bVk1) {\r
+ CXkeymacsDll::Kdu(bVk1, m_nNumericArgument);\r
+ }\r
+ if (bVk2) {\r
+ CXkeymacsDll::Kdu(bVk2, m_nNumericArgument);\r
+ }\r
+ if (bVk3) {\r
+ CXkeymacsDll::Kdu(bVk3, m_nNumericArgument);\r
+ }\r
+ if (bVk4) {\r
+ CXkeymacsDll::Kdu(bVk4, m_nNumericArgument);\r
+ }\r
+\r
+ if (bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ }\r
+}\r
+\r
+void CCommands::SdKduSu(BYTE bVk1, BYTE bVk2, BYTE bVk3, BYTE bVk4)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (!bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ CXkeymacsDll::Kdu(bVk1, m_nNumericArgument);\r
+ if (bVk2) {\r
+ CXkeymacsDll::Kdu(bVk2, m_nNumericArgument);\r
+ }\r
+ if (bVk3) {\r
+ CXkeymacsDll::Kdu(bVk3, m_nNumericArgument);\r
+ }\r
+ if (bVk4) {\r
+ CXkeymacsDll::Kdu(bVk4, m_nNumericArgument);\r
+ }\r
+\r
+ if (!bIsShiftDown) {\r
+ if (CUtils::IsShuriken()) {\r
+ m_bIsSu = TRUE;\r
+ } else {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+}\r
+\r
+void CCommands::Su()\r
+{\r
+ if (m_bIsSu) {\r
+ ReleaseKey(VK_SHIFT);\r
+ m_bIsSu = FALSE;\r
+ }\r
+}\r
+\r
+void CCommands::CdKduCu(BYTE bVk1, BYTE bVk2)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+// if (!bVk1) {\r
+// CUtils::Log("%d, %d, %d", CXkeymacsDll::IsDown(VK_MENU, FALSE), CXkeymacsDll::IsDown(VK_LMENU, FALSE), CXkeymacsDll::IsDown(VK_RMENU, FALSE));\r
+// }\r
+ if (!bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (bIsShiftDown && !m_bSetMark) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ if (bVk1) {\r
+ CXkeymacsDll::Kdu(bVk1, m_nNumericArgument);\r
+ }\r
+ if (bVk2) {\r
+ CXkeymacsDll::Kdu(bVk2, m_nNumericArgument);\r
+ }\r
+\r
+ if (bIsShiftDown && !m_bSetMark) {\r
+ if (!CUtils::IsXPorLater()) { // FIXME Windows XP said VK_SHIFT was pressed physically after a user press VK_RSHIFT, so...\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (!bIsCtrlDown) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+}\r
+\r
+void CCommands::CdSdKduSuCu(BYTE bVk)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (!bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (!bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ CXkeymacsDll::Kdu(bVk, m_nNumericArgument);\r
+\r
+ if (!bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (!bIsCtrlDown) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+}\r
+\r
+void CCommands::AdKduAu(BYTE bVk1, BYTE bVk2, BYTE bVk3)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ if (!bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ CXkeymacsDll::Kdu(bVk1, m_nNumericArgument);\r
+ if (bVk2) {\r
+ CXkeymacsDll::Kdu(bVk2, m_nNumericArgument);\r
+ }\r
+ if (bVk3) {\r
+ CXkeymacsDll::Kdu(bVk3, m_nNumericArgument);\r
+ }\r
+\r
+ if (bIsShiftDown) {\r
+ if (!CUtils::IsXPorLater()) { // FIXME Windows XP said VK_SHIFT was pressed physically after a user press VK_RSHIFT, so...\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+ }\r
+\r
+ if (!bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+}\r
+\r
+void CCommands::AdSdKduSuAu(BYTE bVk1)\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ if (!bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+\r
+ if (!bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ CXkeymacsDll::Kdu(bVk1, m_nNumericArgument);\r
+\r
+ if (!bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ if (!bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+}\r
+\r
+// C-a: Home\r
+int CCommands::BeginningOfLine()\r
+{\r
+ int nNumericArgument = 1;\r
+ if (!m_bDefaultNumericArgument || m_bNegativeNumericArgument) {\r
+ nNumericArgument = m_nNumericArgument;\r
+ if (m_bNegativeNumericArgument) {\r
+ if (nNumericArgument) {\r
+ nNumericArgument *= -1;\r
+ } else {\r
+ nNumericArgument = -1;\r
+ }\r
+ }\r
+ }\r
+ ClearNumericArgument();\r
+\r
+ if (nNumericArgument <= 0) {\r
+ nNumericArgument = -1 * nNumericArgument + 1;\r
+ while (nNumericArgument--) {\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_UP) != GOTO_HOOK);\r
+ }\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_HOME) != GOTO_HOOK);\r
+ DepressKey(VK_CONTROL); // why?\r
+ } else if (nNumericArgument == 1) {\r
+ return Reset(MoveCaret(VK_HOME));\r
+ } else if (2 <= nNumericArgument) {\r
+ nNumericArgument -= 2;\r
+ while (nNumericArgument--) {\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_DOWN) != GOTO_HOOK);\r
+ }\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_END) != GOTO_HOOK);\r
+ while (MoveCaret(VK_RIGHT) != GOTO_HOOK);\r
+ DepressKey(VK_CONTROL); // why?\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-b: Left\r
+int CCommands::BackwardChar()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return ForwardChar();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_LEFT));\r
+}\r
+\r
+// M-b: backward-word\r
+int CCommands::BackwardWord()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return ForwardWord();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_LEFT, TRUE));\r
+}\r
+\r
+// C-e: End\r
+int CCommands::EndOfLine()\r
+{\r
+ int nNumericArgument = 1;\r
+ if (!m_bDefaultNumericArgument || m_bNegativeNumericArgument) {\r
+ nNumericArgument = m_nNumericArgument;\r
+ if (m_bNegativeNumericArgument) {\r
+ if (nNumericArgument) {\r
+ nNumericArgument *= -1;\r
+ } else {\r
+ nNumericArgument = -1;\r
+ }\r
+ }\r
+ }\r
+ ClearNumericArgument();\r
+ if (nNumericArgument <= 0) {\r
+ nNumericArgument *= -1;\r
+ while (nNumericArgument--) {\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_UP) != GOTO_HOOK);\r
+ }\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_HOME) != GOTO_HOOK);\r
+ while (MoveCaret(VK_LEFT) != GOTO_HOOK);\r
+ DepressKey(VK_CONTROL); // why?\r
+ } else if (nNumericArgument == 1) {\r
+ return (MoveCaret(VK_END));\r
+ } else if (2 <= nNumericArgument) {\r
+ --nNumericArgument;\r
+ while (nNumericArgument--) {\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_DOWN) != GOTO_HOOK);\r
+ }\r
+ ReleaseKey(VK_CONTROL); // why?\r
+ while (MoveCaret(VK_END) != GOTO_HOOK);\r
+ DepressKey(VK_CONTROL); // why?\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-f: Right\r
+int CCommands::ForwardChar()\r
+{\r
+// TCHAR szWindowText[0x100] = {'\0'};\r
+// GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+// CUtils::Log("C-f: %s", szWindowText);\r
+\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return BackwardChar();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_RIGHT));\r
+}\r
+\r
+// M-f: forward-word\r
+int CCommands::ForwardWord()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return BackwardWord();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_RIGHT, TRUE));\r
+}\r
+\r
+// C-n: Down\r
+int CCommands::NextLine()\r
+{\r
+// CUtils::Log(_T("C-n"));\r
+\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return PreviousLine();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_DOWN));\r
+}\r
+\r
+// C-o: open-line\r
+int CCommands::OpenLine()\r
+{\r
+ static const int DEFAULT_NUMERIC_ARGUMENT = -1;\r
+ static int nNumericArgument = DEFAULT_NUMERIC_ARGUMENT;\r
+\r
+ if (nNumericArgument == DEFAULT_NUMERIC_ARGUMENT) {\r
+ nNumericArgument = m_nNumericArgument;\r
+ ClearNumericArgument();\r
+ }\r
+\r
+ if (CUtils::IsHidemaru()\r
+ || CUtils::IsTuruKameMail()) {\r
+ static int nStep = 0;\r
+\r
+ switch (nStep) {\r
+ case 0:\r
+ CdKduCu('M');\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ nStep = 0;\r
+ Kdu(VK_UP, VK_END);\r
+ if (--nNumericArgument) {\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ break;\r
+ }\r
+ } else {\r
+ while (nNumericArgument--) {\r
+ Kdu(VK_RETURN, VK_UP, VK_END);\r
+ }\r
+ }\r
+\r
+ nNumericArgument = DEFAULT_NUMERIC_ARGUMENT;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-p: Up\r
+int CCommands::PreviousLine()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return NextLine();\r
+ }\r
+\r
+ return Reset(MoveCaret(VK_UP));\r
+}\r
+\r
+// M-%\r
+int CCommands::QueryReplace()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsBecky()) {\r
+ CdKduCu('Q', 'A');\r
+ } else if (CUtils::IsEclipse()\r
+ || CUtils::IsInternetExplorer()\r
+ || CUtils::IsLotusNotes()\r
+ || CUtils::IsSleipnir()) {\r
+ CdKduCu('F');\r
+ } else if (CUtils::IsAutla()\r
+ || CUtils::IsBorlandCppBuilder()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsNami2000()\r
+ || CUtils::IsStoryEditor()) {\r
+ CdKduCu('R');\r
+ } else if (CUtils::IsEdLeaf()) {\r
+ AdKduAu('E', 'E');\r
+ } else if (CUtils::IsPHPEditor()) {\r
+ AdKduAu('S', 'F');\r
+ } else {\r
+ CdKduCu('H');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-M-%\r
+int CCommands::QueryReplaceRegexp()\r
+{\r
+ return QueryReplace();\r
+}\r
+\r
+// M-<:\r
+int CCommands::BeginningOfBuffer()\r
+{\r
+ ClearNumericArgument();\r
+ return Reset(MoveCaret(VK_HOME, TRUE));\r
+}\r
+\r
+// M->:\r
+int CCommands::EndOfBuffer()\r
+{\r
+ ClearNumericArgument();\r
+ return Reset(MoveCaret(VK_END, TRUE));\r
+}\r
+\r
+// C-h: Back space\r
+int CCommands::DeleteBackwardChar()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return DeleteChar();\r
+ }\r
+\r
+ Kdu(VK_BACK);\r
+ m_bSetMark = FALSE;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-d: Delete\r
+int CCommands::DeleteChar()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return DeleteBackwardChar();\r
+ }\r
+\r
+ m_bSetMark = FALSE;\r
+ Kdu(VK_DELETE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::KillLineForAllFormat()\r
+{\r
+ return KillLine(TRUE, KillLineForAllFormat);\r
+}\r
+\r
+// C-k: Shift-End, Shift-Delete, if the cursor is not at EOL (is End Of Line)\r
+// Shift-Right, Cut, if the cursor is at EOL\r
+int CCommands::KillLine()\r
+{\r
+ return KillLine(FALSE);\r
+}\r
+\r
+int CCommands::KillLine(BOOL bAllFormat, int (*pCommand)())\r
+{\r
+ static BOOL bKeepAllFormat = FALSE;\r
+\r
+ // Do not try to do these command at once.\r
+ // Clipboard has old data till you go out this function.\r
+ static int nStep = 0;\r
+ static int nPrevStep = 0;\r
+ static int nRepeat = 0;\r
+ static CString szClipboardText;\r
+ static BOOL bContinuous = FALSE;\r
+ static BOOL bTopOfFile = FALSE;\r
+\r
+ if (nStep == nPrevStep) {\r
+ ++nRepeat;\r
+ } else {\r
+ nRepeat = 0;\r
+ nPrevStep = nStep;\r
+ }\r
+\r
+ switch (nStep) {\r
+ case 0: // Clear Selection and get next character to confirm the cursor is at the EOF or not.\r
+// CUtils::Log(_T("C-k: 0"));\r
+ bTopOfFile = FALSE;\r
+\r
+ if (!m_bDefaultNumericArgument || m_bNegativeNumericArgument) {\r
+ if (m_bNegativeNumericArgument || m_nNumericArgument == 0) {\r
+ // Shift+Up x -n Shift+Home Ctrl+X\r
+ SdKduSu(VK_UP);\r
+ ClearNumericArgument();\r
+ SdKduSu(VK_HOME);\r
+ } else {\r
+ // Shift+Down x (n - 1) Shift+End Shift+Right Ctrl+X\r
+ --m_nNumericArgument;\r
+ SdKduSu(VK_DOWN);\r
+ ClearNumericArgument();\r
+ SdKduSu(VK_END, VK_RIGHT);\r
+ }\r
+ CdKduCu('X');\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ if (m_LastCommand == pCommand) {\r
+ bContinuous = TRUE;\r
+ } else {\r
+ bContinuous = FALSE;\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ DeactivateMark();\r
+ }\r
+ }\r
+\r
+ if (CUtils::IsDirector()\r
+ || CUtils::IsEudora()) {\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ if (CUtils::IsLotus123()) {\r
+ // C-k: Shift-End, Control-x\r
+ SdKduSu(VK_END);\r
+ CdKduCu('X');\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ CaptureClipboardData(0, CUtils::IsLotusNotes());\r
+\r
+ if (!CopyNextCharacter()) {\r
+// CUtils::Log(_T("Error: CopyNextCharacter"));\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1: // Get back character to confirm the cursor is at the TOF or not only for Macromedia Director.\r
+// CUtils::Log(_T("C-k: 1"));\r
+ nStep = 0;\r
+ CaptureClipboardData();\r
+\r
+ if (!CopyBackCharacter()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2: // Confirm the cursor is at the TOF or not only for Macromedia Director.\r
+ {\r
+// CUtils::Log(_T("C-k: 2"));\r
+ nStep = 0;\r
+ Su();\r
+\r
+ if (CUtils::IsTOF()) {\r
+ bTopOfFile = TRUE;\r
+ }\r
+\r
+ // CopyBackCharacter move cursor right\r
+ Kdu(VK_LEFT);\r
+ RestoreClipboardData();\r
+\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 3: // Get next character to confirm the cursor is at the EOF or not.\r
+// CUtils::Log(_T("C-k: 3"));\r
+ nStep = 0;\r
+\r
+ if (CUtils::IsLotus123()) {\r
+ // C-k: Shift-End, Control-x\r
+ SdKduSu(VK_END);\r
+ CdKduCu('X');\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ CaptureClipboardData();\r
+\r
+ if (!CopyNextCharacter()) {\r
+// CUtils::Log(_T("Error: CopyNextCharacter"));\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 4: // Cut line\r
+// CUtils::Log(_T("C-k: 4"));\r
+ nStep = 0;\r
+ Su();\r
+\r
+ if ((CUtils::IsDirector()\r
+ || CUtils::IsEudora())\r
+ && !bTopOfFile) {\r
+ // CopyNextCharacter move cursor left\r
+ Kdu(VK_RIGHT);\r
+ }\r
+\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+// CUtils::Log(_T("%x, %s"), szClipboardText.GetAt(0), szClipboardText);\r
+\r
+ if (szClipboardText.IsEmpty()) { // EOF\r
+// CUtils::Log(_T("C-k: EOF"));\r
+ if (CUtils::IsLotusWordPro()\r
+ || CUtils::IsMicrosoftFrontPage()\r
+ || CUtils::IsMicrosoftWord()) {\r
+ SdKduSu(VK_RIGHT);\r
+ Cut_();\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else if (CUtils::IsLotusNotes()) {\r
+ Kdu(VK_END);\r
+ ReleaseKey(VK_CONTROL); // Why is it needed?\r
+ SdKduSu(VK_DOWN, VK_HOME);\r
+ Copy_();\r
+ DepressKey(VK_CONTROL); // Why is it needed?\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+ // default\r
+ Kdu(VK_RIGHT);\r
+ RestoreClipboardData();\r
+// CUtils::Log(_T("C-k: 4-1"));\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ }\r
+\r
+ if (szClipboardText.GetAt(0) != VK_RETURN) {\r
+// CUtils::Log(_T("C-k: szClipboardText.GetAt(0) != VK_RETURN"));\r
+ if (CUtils::IsDirector()) {\r
+ ReleaseKey(VK_CONTROL);\r
+ SdKduSu(VK_END);\r
+ Copy_();\r
+ DepressKey(VK_CONTROL);\r
+ } else if (CUtils::IseMemoPad()\r
+ || CUtils::IsHidemaru() // Hidemaru clears mark after copy.\r
+ || CUtils::IsOpenOffice()\r
+ || CUtils::IsTuruKameMail()) {\r
+ SdKduSu(VK_END);\r
+ Cut_();\r
+ } else if (CUtils::IsLotusWordPro()\r
+ || CUtils::IsMicrosoftWord()) {\r
+ SdKduSu(VK_END, VK_LEFT);\r
+ Cut_();\r
+ } else {\r
+ SdKduSu(VK_END);\r
+ Copy_();\r
+ }\r
+ } else { // EOL\r
+// CUtils::Log(_T("C-k: EOL"));\r
+ if (CUtils::IsDirector()) {\r
+ ReleaseKey(VK_CONTROL);\r
+ SdKduSu(VK_RIGHT);\r
+ Copy_();\r
+ DepressKey(VK_CONTROL);\r
+ } else if (CUtils::IsEclipse()\r
+ || CUtils::IsStoryEditor()) {\r
+ SdKduSu(VK_RIGHT);\r
+ Copy_();\r
+ } else if (CUtils::IseMemoPad()\r
+ || CUtils::IsHidemaru() // Hidemaru clears mark after copy.\r
+ || CUtils::IsOpenOffice()\r
+ || CUtils::IsTuruKameMail()) {\r
+ SdKduSu(VK_RIGHT);\r
+ Cut_();\r
+ } else {\r
+ SdKduSu(VK_RIGHT);\r
+ Copy_();\r
+ }\r
+ }\r
+\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 5: // input return if XKeymacs not only line but also line feed code and set the kill-line data on the clipboard.\r
+// CUtils::Log(_T("C-k: 5"));\r
+ nStep = 0;\r
+\r
+ if (1000 < nRepeat) {\r
+// CUtils::Log(_T("C-k: 5-1"));\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+// CUtils::Log(_T("C-k: 5-1-1"));\r
+ Su();\r
+// CUtils::Log(_T("C-k: 5-1-2"));\r
+ CaptureClipboardData(1, CUtils::IsLotusNotes());\r
+// CUtils::Log(_T("C-k: 5-1-3"));\r
+\r
+// if (m_oClipboardData.GetSize() < 1 || m_oClipboardData[0] == NULL) {\r
+//// CUtils::Log(_T("C-k: 5-2"));\r
+// nStep = 6;\r
+// return Reset(GOTO_RECURSIVE);\r
+// } else if (m_oClipboardData.GetSize() < 2 || m_oClipboardData[1] == NULL) {\r
+//// CUtils::Log(_T("C-k: 5-3"));\r
+// nStep = 5;\r
+// return Reset(GOTO_RECURSIVE);\r
+// }\r
+\r
+ if (CUtils::IseMemoPad()\r
+ || CUtils::IsHidemaru() // Hidemaru clears mark after copy.\r
+ || CUtils::IsLotusWordPro()\r
+ || CUtils::IsMicrosoftWord ()\r
+ || CUtils::IsOpenOffice()\r
+ || CUtils::IsTuruKameMail()) {\r
+ // do nothing\r
+// CUtils::Log(_T("C-k: 5-4"));\r
+ } else {\r
+ // This changed will be required to avoid Thunderbird bug.\r
+ // if (0 < FindReturnFromClipboardData(1) && !CUtils::IsExcel() && !CUtils::IsThunderbird()) {\r
+ if (0 < FindReturnFromClipboardData(1) && !CUtils::IsExcel()) {\r
+// CUtils::Log(_T("C-k: 5-5"));\r
+ SdKduSu(VK_LEFT);\r
+ Copy_();\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+ Kdu(VK_DELETE);\r
+// CUtils::Log(_T("C-k: 5-6"));\r
+ }\r
+ }\r
+\r
+ bKeepAllFormat = bAllFormat;\r
+ if (!bKeepAllFormat\r
+ && !m_oClipboardData[1]->IsAllMergeableFormat()) {\r
+// CUtils::Log(_T("C-k: 5-7"));\r
+ bKeepAllFormat = TRUE;\r
+ }\r
+\r
+ if (bContinuous && !bKeepAllFormat) {\r
+// CUtils::Log(_T("C-k: 5-8"));\r
+ *m_oClipboardData[0] += *m_oClipboardData[1];\r
+ } else {\r
+// CUtils::Log(_T("C-k: 5-9"));\r
+ *m_oClipboardData[0] = *m_oClipboardData[1];\r
+ }\r
+ RestoreClipboardData(0);\r
+\r
+// CUtils::Log(_T("C-k: 5-10"));\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 6: // add data into kill-ring\r
+// CUtils::Log(_T("C-k: 6"));\r
+ nStep = 0;\r
+ Su();\r
+\r
+ if (bContinuous && bKeepAllFormat) {\r
+ CXkeymacsDll::AddKillRing(FALSE);\r
+ } else {\r
+ CXkeymacsDll::AddKillRing();\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ break;\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x u: C-/: C-_: Ctrl-Z\r
+int CCommands::Undo()\r
+{\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ static BOOL bIsCtrlDown;\r
+ static BOOL bIsAltDown;\r
+ static BOOL bIsShiftDown;\r
+\r
+ bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (!bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ PostMessage(GetFocus(), WM_KEYDOWN, 'Z', 0);\r
+\r
+ if (bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (!bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ } else {\r
+ CdKduCu('Z');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x C-c: Alt-Space, Alt-C\r
+int CCommands::SaveBuffersKillEmacs()\r
+{\r
+ ClearNumericArgument();\r
+\r
+ HWND hWnd = GetForegroundWindow();\r
+ if (hWnd) {\r
+ OriginalWindowPosition_t *pOriginalWindowPosition = GetOriginalWindowPosition(hWnd);\r
+ if (pOriginalWindowPosition && pOriginalWindowPosition->bMax[ROLL_UP_UNROLL]) {\r
+ RollUpUnroll();\r
+ }\r
+ }\r
+\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenu(CMD_CLOSE);\r
+ } else if (CUtils::IsExplorer()) {\r
+ if (!CUtils::IsXPorLater()) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ AdKduAu(VK_F4);\r
+ } else if (CUtils::IsInternetExplorer()\r
+ || CUtils::IsJavaW()) {\r
+ AdKduAu(VK_F4);\r
+ } else {\r
+ AdKduAu(VK_SPACE, 'C');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-z: Alt-Space, Alt-N\r
+int CCommands::IconifyOrDeiconifyFrame()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenu(CMD_MINIMIZE);\r
+ } else {\r
+ AdKduAu(VK_SPACE, 'N');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Restore()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenu(CMD_RESTORE);\r
+ } else {\r
+ AdKduAu(VK_SPACE, 'R');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Move()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenu(CMD_MOVE);\r
+ } else {\r
+ AdKduAu(VK_SPACE, 'M');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Size()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenu(CMD_SIZE);\r
+ } else {\r
+ AdKduAu(VK_SPACE, 'S');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Minimize()\r
+{\r
+ return IconifyOrDeiconifyFrame();\r
+}\r
+\r
+int CCommands::Maximize()\r
+{\r
+ ClearNumericArgument();\r
+\r
+ HWND hWnd = GetForegroundWindow();\r
+ if (!hWnd) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ WINDOWPLACEMENT wndpl = {sizeof(WINDOWPLACEMENT)};\r
+ if (!GetWindowPlacement(hWnd, &wndpl)) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ if (wndpl.showCmd == SW_SHOWMAXIMIZED) {\r
+ wndpl.showCmd = SW_RESTORE;\r
+ } else {\r
+ wndpl.showCmd = SW_SHOWMAXIMIZED;\r
+ }\r
+\r
+ SetWindowPlacement(hWnd, &wndpl);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+OriginalWindowPosition_t* CCommands::GetOriginalWindowPosition(HWND hWnd)\r
+{\r
+ const int nOriginalWindowPosition = sizeof(m_OriginalWindowPosition) / sizeof(m_OriginalWindowPosition[0]);\r
+\r
+ for (int i = 0; i < nOriginalWindowPosition; ++i) {\r
+ if (m_OriginalWindowPosition[i].hWnd == hWnd) {\r
+ return &m_OriginalWindowPosition[i];\r
+ }\r
+ }\r
+\r
+ for (int j = 0; j < nOriginalWindowPosition; ++j) {\r
+ if (m_OriginalWindowPosition[j].hWnd == 0) {\r
+ m_OriginalWindowPosition[j].hWnd = hWnd;\r
+ memset(&m_OriginalWindowPosition[(j + 1) % nOriginalWindowPosition], 0, sizeof(m_OriginalWindowPosition[0]));\r
+ return &m_OriginalWindowPosition[j];\r
+ }\r
+ }\r
+\r
+ ASSERT(0);\r
+ return NULL;\r
+}\r
+\r
+int CCommands::Maximize(MAXIMIZE_DIRECTION direction)\r
+{\r
+ ClearNumericArgument();\r
+\r
+ HWND hWnd = GetForegroundWindow();\r
+ if (!hWnd) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ RECT workarea = {'\0'};\r
+ if (!SystemParametersInfo(SPI_GETWORKAREA, 0, &workarea, 0)) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ RECT window = {'\0'};\r
+ if (!GetWindowRect(hWnd, &window)) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ OriginalWindowPosition_t *pOriginalWindowPosition = GetOriginalWindowPosition(hWnd);\r
+ if (!pOriginalWindowPosition) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ int X = window.left;\r
+ int Y = window.top;\r
+ int nWidth = window.right - window.left;\r
+ int nHeight = window.bottom - window.top;\r
+\r
+ switch (direction) {\r
+ case VERTICAL:\r
+ if (pOriginalWindowPosition->bMax[direction]) {\r
+ Y = pOriginalWindowPosition->nOriginalY;\r
+ nHeight = pOriginalWindowPosition->nOriginalHeight;\r
+ } else {\r
+ pOriginalWindowPosition->nOriginalY = Y;\r
+ pOriginalWindowPosition->nOriginalHeight = nHeight;\r
+\r
+ Y = workarea.top;\r
+ nHeight = workarea.bottom - workarea.top;\r
+ }\r
+ break;\r
+ case HORIZONTAL:\r
+ if (pOriginalWindowPosition->bMax[direction]) {\r
+ X = pOriginalWindowPosition->nOriginalX;\r
+ nWidth = pOriginalWindowPosition->nOriginalWidth;\r
+ } else {\r
+ pOriginalWindowPosition->nOriginalX = X;\r
+ pOriginalWindowPosition->nOriginalWidth = nWidth;\r
+\r
+ X = workarea.left;\r
+ nWidth = workarea.right - workarea.left;\r
+ }\r
+ break;\r
+ case ROLL_UP_UNROLL:\r
+ if (pOriginalWindowPosition->bMax[direction]) {\r
+ nHeight = pOriginalWindowPosition->nOriginalHeight;\r
+ } else {\r
+ pOriginalWindowPosition->nOriginalHeight = nHeight;\r
+\r
+ nHeight = 0x15;\r
+ }\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ MoveWindow(hWnd, X, Y, nWidth, nHeight, TRUE);\r
+ pOriginalWindowPosition->bMax[direction] = !pOriginalWindowPosition->bMax[direction];\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::MaximizeVertically()\r
+{\r
+ return Maximize(VERTICAL);\r
+}\r
+\r
+int CCommands::MaximizeHorizontally()\r
+{\r
+ return Maximize(HORIZONTAL);\r
+}\r
+\r
+// C-Space: \r
+int CCommands::SetMarkCommand()\r
+{\r
+ ClearNumericArgument();\r
+ if (m_bSetMark) {\r
+ DeactivateMark();\r
+ }\r
+ m_bSetMark = TRUE;\r
+\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_MARK);\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-g: Keyboard quit\r
+int CCommands::KeyboardQuit()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsFindDialog()) {\r
+ Kdu(VK_ESCAPE);\r
+ }\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ DeactivateMark();\r
+ }\r
+ SetTemporarilyDisableXKeymacs(FALSE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+DWORD CCommands::ClickCaret()\r
+{\r
+ HWND hWnd = GetFocus();\r
+\r
+ POINT CaretPos = {'\0'};\r
+ if (!GetCaretPos(&CaretPos)) {\r
+ return GetLastError();\r
+ }\r
+// CUtils::Log(_T("client: x = %d, y = %d"), CaretPos.x, CaretPos.y);\r
+\r
+ if (!ClientToScreen(hWnd, &CaretPos)) {\r
+ return GetLastError();\r
+ }\r
+// CUtils::Log(_T("screen: x = %d, y = %d"), CaretPos.x, CaretPos.y);\r
+\r
+ POINT Delta = {0, 1};\r
+ if (CUtils::IsSakuraEditor()) {\r
+ Delta.x = 1;\r
+ Delta.y = 29; // OK: 29-42 NG: 28, 43\r
+ }\r
+\r
+ const POINT clickPoint = {CaretPos.x + Delta.x, CaretPos.y + Delta.y};\r
+ return Click(&clickPoint);\r
+}\r
+\r
+DWORD CCommands::DeactivateMark()\r
+{\r
+ if (CUtils::IsOpenOffice()\r
+ || CUtils::IsVisualBasicEditor()) {\r
+ // GetCaretPos always returen (x,y) = (0,0) on OpenOffice, so ...\r
+ // GetCaretPos always returen (x,y) = (-2199,*) on M$ Excel VBE, so ...\r
+ Kdu(VK_ESCAPE);\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+ }\r
+ if (CUtils::IsFlash()\r
+ || CUtils::IsInternetExplorer()\r
+ || CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsMicrosoftWord()\r
+ || CUtils::IsSleipnir()\r
+ || CUtils::IsThunderbird()) {\r
+ // GetCaretPos always returen (x,y) = (0,0) on M$ Word and Thunderbird, so ...\r
+ // GetCaretPos always returen start point on IE (and Sleipnir that uses IE), so ...\r
+ Kdu(VK_RIGHT);\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+ }\r
+ if (CUtils::IsDirector()) {\r
+ // GetCaretPos always returen (x,y) = (0,0) on Macromedia Director, so ...\r
+ Kdu(VK_RIGHT, VK_LEFT);\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+ }\r
+ if (CUtils::IsExplorer()) {\r
+ AdKduAu('E', 'A');\r
+ AdKduAu('E', 'I');\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+ }\r
+ if (CUtils::IsVisualStudioDotNet()) { // Ctrl + Click select a word on Visual Studio .NET\r
+ ReleaseKey(VK_CONTROL);\r
+ return ClickCaret();\r
+ }\r
+\r
+ return ClickCaret();\r
+}\r
+\r
+// C-x C-f: Alt-F, Alt-O\r
+int CCommands::FindFile()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsFlash()\r
+ || CUtils::IsSleipnir()) {\r
+ CdKduCu('O');\r
+ } else if (CUtils::IsVisualStudioDotNet()) {\r
+ AdKduAu('F', 'O', 'F');\r
+ } else {\r
+ AdKduAu('F', 'O');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-i: Tab\r
+int CCommands::TabToTabStop()\r
+{\r
+ ClearNumericArgument();\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ }\r
+ Kdu(VK_TAB);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-m: Enter\r
+int CCommands::Newline()\r
+{\r
+ Kdu(VK_RETURN);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x h: Ctrl-End, Ctrl-Shift-Home\r
+int CCommands::MarkWholeBuffer()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_SELECT_ALL);\r
+ } else if (CUtils::IsDreamweaver()\r
+ || CUtils::IsFireworks()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsIllustrator()\r
+ || CUtils::IsPaint()\r
+ || CUtils::IsPhotoshop()) {\r
+ CdKduCu('A');\r
+ } else if (CUtils::IsExplorer()\r
+ || CUtils::IsReget()) {\r
+ Kdu(VK_END);\r
+ m_bSetMark = TRUE;\r
+ return Reset(MoveCaret(VK_HOME));\r
+ } else {\r
+ CdKduCu(VK_END);\r
+ m_bSetMark = TRUE;\r
+ return Reset(MoveCaret(VK_HOME, TRUE));\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x C-p:\r
+int CCommands::MarkPage()\r
+{\r
+ return MarkWholeBuffer();\r
+}\r
+\r
+// C-x C-s: Alt-F, Alt-S\r
+int CCommands::SaveBuffer()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsFlash()\r
+ || CUtils::IsSleipnir()\r
+ || CUtils::IsThunderbird()) {\r
+ CdKduCu('S');\r
+ return Reset(GOTO_HOOK);\r
+ } else {\r
+ // default\r
+ AdKduAu('F', 'S');\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+}\r
+\r
+// C-v: Page Down\r
+int CCommands::ScrollUp()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return ScrollDown();\r
+ }\r
+\r
+ if (m_bDefaultNumericArgument) {\r
+ return Reset(MoveCaret(VK_NEXT));\r
+ } else {\r
+ while (m_nNumericArgument--) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEDOWN, NULL);\r
+ }\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-v: Page Up\r
+int CCommands::ScrollDown()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ m_bNegativeNumericArgument = FALSE;\r
+ return ScrollUp();\r
+ }\r
+\r
+ if (m_bDefaultNumericArgument) {\r
+ if (CUtils::IsFirefox()\r
+ || CUtils::IsVisualCpp()) {\r
+ CdKduCu(0); // dummy to clear Alt effect.\r
+ }\r
+ return Reset(MoveCaret(VK_PRIOR));\r
+ } else {\r
+ while (m_nNumericArgument--) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEUP, NULL);\r
+ }\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::bC_()\r
+{\r
+ return m_bC_;\r
+}\r
+\r
+void CCommands::bC_(BOOL b)\r
+{\r
+ m_bC_ = b;\r
+ CXkeymacsDll::ModifyShell_NotifyIcon(CTRL_ICON, m_bC_);\r
+}\r
+\r
+BOOL CCommands::bC_x()\r
+{\r
+ return m_bC_x;\r
+}\r
+\r
+void CCommands::bC_x(BOOL b)\r
+{\r
+ m_bC_x = b;\r
+ CXkeymacsDll::ModifyShell_NotifyIcon(CX_ICON, m_bC_x);\r
+}\r
+\r
+BOOL CCommands::bM_x()\r
+{\r
+ return m_bM_x;\r
+}\r
+\r
+void CCommands::bM_x(const BOOL b)\r
+{\r
+ m_bM_x = b;\r
+\r
+ if (b) {\r
+ CXkeymacsDll::ModifyM_xTip("");\r
+ } else {\r
+ CXkeymacsDll::ModifyM_xTip(NULL);\r
+ }\r
+}\r
+\r
+// C-x: only set flag\r
+int CCommands::C_x()\r
+{\r
+ if (CXkeymacsDll::GetEnableCUA() && m_bSetMark) {\r
+ Cut();\r
+ } else {\r
+ bC_x(TRUE);\r
+ }\r
+ return Reset(GOTO_HOOKX);\r
+}\r
+\r
+// C-x C-w: Alt-F, Alt-A\r
+int CCommands::WriteFile()\r
+{\r
+ ClearNumericArgument();\r
+ if (CUtils::IsSleipnir()) {\r
+ CdKduCu('S');\r
+ } else if (CUtils::IsFlash()) {\r
+ CdSdKduSuCu('S');\r
+ } else {\r
+ AdKduAu('F', 'A');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Paste()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_PASTE);\r
+ } else {\r
+ CdKduCu('V');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-w: Ctrl-X\r
+int CCommands::KillRegion()\r
+{\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+ m_bSetMark = FALSE;\r
+ ClearNumericArgument();\r
+ CdKduCu('X');\r
+ if (CUtils::IsExplorer()) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ nStep = 0;\r
+ CXkeymacsDll::AddKillRing();\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ // dummy\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-w: Ctrl-C\r
+int CCommands::KillRingSave()\r
+{\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_COPY);\r
+ return Reset(GOTO_HOOK);\r
+ } else if (CUtils::IsMicrosoftPowerPoint()) { // PowerPoint did not want to deactivate-mark. Temporary code?\r
+ CdKduCu('X');\r
+ } else {\r
+ CdKduCu('C');\r
+ }\r
+ if (CUtils::IsExplorer()) {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ nStep = 0;\r
+ CXkeymacsDll::AddKillRing();\r
+ if (CUtils::IsMicrosoftPowerPoint()) { // Because DeactivateMark move object like graph.\r
+ CdKduCu('V');\r
+ } else {\r
+ DeactivateMark();\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ // dummy\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-y: Ctrl-V\r
+int CCommands::Yank()\r
+{\r
+ m_bSetMark = FALSE;\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_PASTE);\r
+ } else {\r
+ static CClipboardSnap* pSnap = NULL;\r
+ if (!m_bDefaultNumericArgument) {\r
+ DecreaseNumericArgument();\r
+ CXkeymacsDll::IncreaseKillRingIndex(m_nNumericArgument);\r
+ pSnap = CXkeymacsDll::GetKillRing(pSnap);\r
+ } else if (pSnap) {\r
+ pSnap = CXkeymacsDll::GetKillRing(pSnap);\r
+ } else {\r
+ if (CUtils::IsExcel() && m_LastKillCommand == KillRegion) {\r
+ // do nothing to work C-w not Copy but Cut\r
+ } else if (CUtils::IsLotusNotes() && (m_LastKillCommand == KillRegion || m_LastKillCommand == KillRingSave)) {\r
+ // do nothing\r
+ } else {\r
+ pSnap = CXkeymacsDll::GetKillRing(pSnap, FALSE);\r
+ }\r
+ }\r
+ CdKduCu('V');\r
+ if (pSnap) {\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-y: yank-pop\r
+int CCommands::YankPop()\r
+{\r
+ ClearNumericArgument();\r
+\r
+ if (m_LastCommand == YankPop\r
+ || m_LastCommand == Yank) {\r
+ static CClipboardSnap* pSnap = NULL;\r
+ if (!pSnap) {\r
+ CClipboardSnap* pOldSnap = NULL;\r
+ pOldSnap = CXkeymacsDll::GetKillRing(pOldSnap);\r
+ if (pOldSnap) {\r
+ for (int i = 0; i < pOldSnap->GetCount(); ++i) {\r
+ CdKduCu('Z');\r
+ }\r
+ } else {\r
+ CdKduCu('Z');\r
+ }\r
+ CXkeymacsDll::IncreaseKillRingIndex();\r
+ }\r
+ pSnap = CXkeymacsDll::GetKillRing(pSnap);\r
+ CdKduCu('V');\r
+ if (pSnap) {\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-!: cmd.exe/command.com\r
+int CCommands::ShellCommand()\r
+{\r
+ if (!CUtils::Run(_tgetenv(_T("XKEYMACS_SHELL")))) {\r
+ CUtils::Run(_tgetenv(_T("COMSPEC")));\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Ignore()\r
+{\r
+ Reset(); // If you delete this line, Ignore() works as Enable/Disable XKeymacs only on Release build. Why?\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::bM_(BOOL b)\r
+{\r
+ m_bM_ = b;\r
+ CXkeymacsDll::ModifyShell_NotifyIcon(META_ICON, m_bM_);\r
+}\r
+\r
+BOOL CCommands::bM_()\r
+{\r
+ return m_bM_;\r
+}\r
+\r
+// C-[\r
+int CCommands::Meta()\r
+{\r
+ bM_(TRUE);\r
+ return Reset(GOTO_HOOKX);\r
+}\r
+\r
+// Esc\r
+int CCommands::MetaEscape()\r
+{\r
+ Meta();\r
+ return Reset(GOTO_DO_NOTHING);\r
+}\r
+\r
+// Alt\r
+int CCommands::MetaAlt()\r
+{\r
+ return Reset(GOTO_DO_NOTHING);\r
+}\r
+\r
+// C-0\r
+int CCommands::NumericArgument0()\r
+{\r
+ return NumericArgument(0);\r
+}\r
+\r
+// C-1\r
+int CCommands::NumericArgument1()\r
+{\r
+ return NumericArgument(1);\r
+}\r
+\r
+// C-2\r
+int CCommands::NumericArgument2()\r
+{\r
+ return NumericArgument(2);\r
+}\r
+\r
+// C-3\r
+int CCommands::NumericArgument3()\r
+{\r
+ return NumericArgument(3);\r
+}\r
+\r
+// C-4\r
+int CCommands::NumericArgument4()\r
+{\r
+ return NumericArgument(4);\r
+}\r
+\r
+// C-5\r
+int CCommands::NumericArgument5()\r
+{\r
+ return NumericArgument(5);\r
+}\r
+\r
+// C-6\r
+int CCommands::NumericArgument6()\r
+{\r
+ return NumericArgument(6);\r
+}\r
+\r
+// C-7\r
+int CCommands::NumericArgument7()\r
+{\r
+ return NumericArgument(7);\r
+}\r
+\r
+// C-8\r
+int CCommands::NumericArgument8()\r
+{\r
+ return NumericArgument(8);\r
+}\r
+\r
+// C-9\r
+int CCommands::NumericArgument9()\r
+{\r
+ return NumericArgument(9);\r
+}\r
+\r
+// C-#\r
+int CCommands::NumericArgument(int n)\r
+{\r
+ if (m_bDefaultNumericArgument) {\r
+ m_nNumericArgument = n;\r
+ m_bDefaultNumericArgument = FALSE;\r
+ } else {\r
+ m_nNumericArgument = m_nNumericArgument * 10 + n;\r
+ }\r
+ return Reset(GOTO_HOOK0_9);\r
+}\r
+\r
+// C--, M--\r
+int CCommands::NumericArgumentMinus()\r
+{\r
+ m_bNegativeNumericArgument = !m_bNegativeNumericArgument;\r
+ return Reset(GOTO_HOOK0_9);\r
+}\r
+\r
+// C-u\r
+int CCommands::UniversalArgument()\r
+{\r
+ if (m_bC_u) {\r
+ m_nNumericArgument *= 4;\r
+ } else {\r
+ m_nNumericArgument = 4;\r
+ m_bC_u = TRUE;\r
+ }\r
+ return Reset(GOTO_HOOKX);\r
+}\r
+\r
+// change function name and member variable name like bUniversalArgument()\r
+BOOL CCommands::bC_u()\r
+{\r
+ return m_bC_u;\r
+}\r
+\r
+void CCommands::bC_u(BOOL b)\r
+{\r
+ m_bC_u = b;\r
+}\r
+\r
+int CCommands::Repeat(BYTE bVk)\r
+{\r
+ if (m_bDefaultNumericArgument) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ } else {\r
+ CXkeymacsDll::Kdu(bVk, m_nNumericArgument);\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+}\r
+\r
+// C-l: Recenter\r
+int CCommands::Recenter()\r
+{\r
+ if (CUtils::IsBecky()) {\r
+ static int nStep = 0;\r
+ RECT ClientRect = {'\0'};\r
+ GetClientRect(GetFocus(), &ClientRect);\r
+ static int gap = INT_MAX;\r
+\r
+ static POINT CaretPos = {'\0'};\r
+ GetCaretPos(&CaretPos);\r
+\r
+ switch (nStep) {\r
+ case 0:\r
+ nStep = 0; // omaginai\r
+ if (CaretPos.y < ClientRect.bottom / 2) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEUP, NULL);\r
+ } else if (ClientRect.bottom / 2 < CaretPos.y) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEDOWN, NULL);\r
+ } else {\r
+ gap = INT_MAX;\r
+ return Reset(GOTO_HOOK);\r
+ break;\r
+ }\r
+\r
+ Kdu(VK_DOWN);\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+\r
+ case 1:\r
+ nStep = 0;\r
+ // When a client screen can display 2n lines, the center line is (n + 1)th line.\r
+ int newgap = CaretPos.y - ClientRect.bottom / 2;\r
+ if (fabs((double)gap) <= fabs((double)newgap)) {\r
+ if ((fabs((double)gap) == fabs((double)newgap)) && (gap != newgap) && newgap < 0) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEUP, NULL);\r
+ }\r
+ gap = INT_MAX;\r
+ return Reset(GOTO_HOOK);\r
+ break;\r
+ }\r
+\r
+ gap = newgap;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ } else if (CUtils::IsMicrosoftWord()\r
+ || CUtils::IsThunderbird()) {\r
+ RECT ClientRect = {'\0'};\r
+ GetClientRect(GetFocus(), &ClientRect);\r
+// CUtils::Log(_T("top = %d, bottom = %d, left = %d, right = %d"), ClientRect.top, ClientRect.bottom, ClientRect.left, ClientRect.right);\r
+\r
+ POINT CaretPos = {'\0'};\r
+ GetCaretPos(&CaretPos);\r
+\r
+ static const int LENGTH_PER_SCROLL = 32;\r
+\r
+ if (CaretPos.y < ClientRect.bottom / 2) {\r
+ VScroll(SB_LINEUP, (ClientRect.bottom / 2 - CaretPos.y) / (LENGTH_PER_SCROLL / 2) + 1);\r
+ } else if (ClientRect.bottom / 2 < CaretPos.y) {\r
+ VScroll(SB_LINEDOWN, (CaretPos.y - ClientRect.bottom / 2) / (LENGTH_PER_SCROLL / 2));\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+ } else {\r
+ RECT ClientRect = {'\0'};\r
+ GetClientRect(GetFocus(), &ClientRect);\r
+ int gap = INT_MAX;\r
+\r
+// CUtils::Log(_T("top = %d, bottom = %d, left = %d, right = %d"), ClientRect.top, ClientRect.bottom, ClientRect.left, ClientRect.right);\r
+\r
+ for (;;) {\r
+ POINT CaretPos = {'\0'};\r
+ GetCaretPos(&CaretPos);\r
+\r
+ if (CaretPos.y < ClientRect.bottom / 2) {\r
+ VScroll(SB_LINEUP);\r
+ } else if (ClientRect.bottom / 2 < CaretPos.y) {\r
+ VScroll(SB_LINEDOWN);\r
+ } else {\r
+ break;\r
+ }\r
+\r
+ // When a client screen can display 2n lines, the center line is (n + 1)th line.\r
+ int newgap = CaretPos.y - ClientRect.bottom / 2;\r
+ if (fabs((double)gap) <= fabs((double)newgap)) {\r
+ if ((fabs((double)gap) == fabs((double)newgap)) && (gap != newgap) && newgap < 0) {\r
+ VScroll(SB_LINEUP);\r
+ }\r
+ break;\r
+ }\r
+ gap = newgap;\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-t: Shift-Left, Shift-Delete, Right Shift-Insert, if the cursor is not at EOL (is End Of Line)\r
+// Left, Shift-Right, Shift-Delete, Left, Shift-Insert, Right, if the cursor is at EOL\r
+int CCommands::TransposeChars()\r
+{\r
+ ClearNumericArgument(); // tmp\r
+\r
+ // Do not try to do these command at once.\r
+ // Clipboard has old data till you go out this function.\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0: // Clear Selection\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ Kdu(VK_RIGHT, VK_LEFT);\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+ // Do nothing. Go to case 1:\r
+ }\r
+ case 1: // Get back character to confirm the cursor is at TOF or not.\r
+ nStep = 0;\r
+ CaptureClipboardData();\r
+\r
+ // simple version\r
+ if (CUtils::IsLotus123()) {\r
+ // C-t: Left, Shift-Right, Shift-Delete, Left, Shift-Insert, Right\r
+ Kdu(VK_LEFT);\r
+ SdKduSu(VK_RIGHT, VK_DELETE);\r
+ Kdu(VK_LEFT);\r
+ SdKduSu(VK_INSERT);\r
+ Kdu(VK_RIGHT);\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ if (!CopyBackCharacter()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2: // Get next character to confirm the cursor is at the EOF or not.\r
+ {\r
+ nStep = 0;\r
+ Su();\r
+\r
+ if (CUtils::IsTOF()) {\r
+ Kdu(VK_LEFT);\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ if (CUtils::IsDirector()) {\r
+ // CopyBackCharacter move cursor right\r
+ Kdu(VK_LEFT);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ if (CUtils::IsEudora()) {\r
+ // CopyBackCharacter move cursor right\r
+ Kdu(VK_LEFT);\r
+ }\r
+\r
+ if (!CopyNextCharacter()) {\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ if (CUtils::IsDirector()) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 3: // Cut Left Character\r
+ {\r
+ nStep = 0;\r
+ Su();\r
+\r
+ CString szClipboardText;\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+// CUtils::Log(_T("%x, %d, %s"), szClipboardText.GetAt(0), szClipboardText.GetLength(), szClipboardText);\r
+\r
+ if (CUtils::IsDirector()\r
+ || CUtils::IsEudora()) {\r
+ // CopyNextCharacter move cursor left\r
+ Kdu(VK_RIGHT);\r
+ }\r
+\r
+ if (!szClipboardText.IsEmpty()\r
+ && szClipboardText.GetAt(0) != VK_RETURN) {\r
+ if (CUtils::IseMemoPad()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsShuriken()) {\r
+ SdKduSu(VK_LEFT);\r
+ CdKduCu('X');\r
+ } else if (CUtils::IsDirector()) {\r
+ ReleaseKey(VK_CONTROL);\r
+ SdKduSu(VK_LEFT);\r
+ CdKduCu('X');\r
+ Kdu(VK_RIGHT);\r
+ DepressKey(VK_CONTROL);\r
+ } else {\r
+ SdKduSu(VK_LEFT, VK_DELETE);\r
+ }\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+ if (szClipboardText.IsEmpty()) { // EOF\r
+ if (CUtils::IsLotusNotes()\r
+ || CUtils::IsLotusWordPro()\r
+ || CUtils::IsMicrosoftFrontPage()\r
+ || CUtils::IsMicrosoftWord()) {\r
+ // These applications say "EOL is EOF".\r
+ Kdu(VK_END);\r
+ } else {\r
+ // default\r
+ Kdu(VK_RIGHT);\r
+ }\r
+ }\r
+\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 4: // Paste the cut character\r
+ nStep = 0;\r
+ Su();\r
+ Kdu(VK_RIGHT);\r
+ if (CUtils::IsDirector()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsShuriken()) {\r
+ CdKduCu('V');\r
+ } else {\r
+ SdKduSu(VK_INSERT);\r
+ }\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 5: // Cut character at the EOF.\r
+ nStep = 0;\r
+ if (CUtils::IsDirector()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsShuriken()) {\r
+ SdKduSu(VK_LEFT);\r
+ CdKduCu('X');\r
+ } else {\r
+ SdKduSu(VK_LEFT, VK_DELETE);\r
+ }\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 6: // Paste the cut character near the EOF.\r
+ nStep = 0;\r
+ Su();\r
+ Kdu(VK_LEFT);\r
+ if (CUtils::IsDirector()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsShuriken()) {\r
+ DepressKey(VK_CONTROL); // Why is this code needed?\r
+ CdKduCu('V');\r
+ } else {\r
+ SdKduSu(VK_INSERT);\r
+ }\r
+ Kdu(VK_RIGHT);\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 7: // Set the original data on the clipboard.\r
+ nStep = 0;\r
+ Su();\r
+ RestoreClipboardData();\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::Cut_()\r
+{\r
+ CdKduCu('X');\r
+}\r
+\r
+int CCommands::Cut()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ Cut_();\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::Copy_()\r
+{\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_COPY);\r
+ } else if (CUtils::IsEclipse()\r
+ || CUtils::IsStoryEditor()) {\r
+ CdKduCu(VK_INSERT);\r
+ } else {\r
+ CdKduCu('C');\r
+ }\r
+}\r
+\r
+int CCommands::Copy()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ Copy_();\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// Copy next character of the cursor if the caret is NOT at end of the file\r
+// Move the caret to left if caret is at end of the file\r
+BOOL CCommands::CopyNextCharacter()\r
+{\r
+ if (!CUtils::OpenClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!EmptyClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!CloseClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+\r
+ SdKduSu(VK_RIGHT);\r
+ Copy_();\r
+ Kdu(VK_LEFT);\r
+\r
+ return TRUE;\r
+}\r
+\r
+BOOL CCommands::CopyBackCharacter()\r
+{\r
+ if (!CUtils::OpenClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!EmptyClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!CloseClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+\r
+ SdKduSu(VK_LEFT);\r
+ Copy_();\r
+ Kdu(VK_RIGHT);\r
+\r
+ return TRUE;\r
+}\r
+\r
+BOOL CCommands::CopyPreviousLine()\r
+{\r
+ if (!CUtils::OpenClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!EmptyClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!CloseClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+\r
+ SdKduSu(VK_UP);\r
+ Copy_();\r
+\r
+ return TRUE;\r
+}\r
+\r
+BOOL CCommands::CopyCurrentLine()\r
+{\r
+ if (!CUtils::OpenClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!EmptyClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!CloseClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+\r
+ SdKduSu(VK_HOME);\r
+ Copy_();\r
+\r
+ return TRUE;\r
+}\r
+\r
+void CCommands::DecreaseNumericArgument()\r
+{\r
+ if (m_bNegativeNumericArgument) {\r
+ ++m_nNumericArgument;\r
+ } else {\r
+ if (m_nNumericArgument == 0) {\r
+ ++m_nNumericArgument;\r
+ m_bNegativeNumericArgument = TRUE;\r
+ } else {\r
+ --m_nNumericArgument;\r
+ }\r
+ }\r
+}\r
+\r
+void CCommands::ClearNumericArgument()\r
+{\r
+ m_bDefaultNumericArgument = TRUE;\r
+ m_nNumericArgument = 1;\r
+ m_bNegativeNumericArgument = FALSE;\r
+}\r
+\r
+void CCommands::Reset()\r
+{\r
+ Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Reset(int rc)\r
+{\r
+ switch(rc) {\r
+ case GOTO_HOOK:\r
+ ClearNumericArgument();\r
+ m_bC_u = FALSE;\r
+ case GOTO_HOOK0_9:\r
+ bC_(FALSE);\r
+ bC_x(FALSE);\r
+ bM_(FALSE);\r
+ bM_x(FALSE);\r
+ case GOTO_HOOKX:\r
+ break;\r
+\r
+ case GOTO_RECURSIVE:\r
+ break;\r
+\r
+ case GOTO_DO_NOTHING:\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+ return rc;\r
+}\r
+\r
+// C-q\r
+int CCommands::EnableOrDisableXKeymacs()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0; // If there is not this 2 line, EnableOrDisableXKeymacs, EnableXKeymacs and DisableXKeymacs has same function pointer.\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::EnableXKeymacs()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::DisableXKeymacs()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::GetNumericArgument()\r
+{\r
+ return m_nNumericArgument;\r
+}\r
+\r
+// C-r\r
+int CCommands::IsearchBackward()\r
+{\r
+ return Search(BACKWARD);\r
+}\r
+\r
+// C-s\r
+int CCommands::IsearchForward()\r
+{\r
+ return Search(FORWARD);\r
+}\r
+\r
+void CCommands::OpenFindDialog()\r
+{\r
+ if (CUtils::IsAutla()\r
+ || CUtils::IsBorlandCppBuilder()\r
+ || CUtils::IsCodeWarrior()\r
+ || CUtils::IsDana()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsJmEditor()\r
+ || CUtils::IsK2Editor()\r
+ || (CUtils::IsNotepad() && CUtils::IsNTor9x())\r
+ || CUtils::IsOedit()\r
+ || CUtils::IsOpenJane()\r
+ || CUtils::IsPHPEditor()\r
+ || CUtils::IsStoryEditor()\r
+ || CUtils::IsTeraPad()) {\r
+ AdKduAu('S', 'F');\r
+ } else if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_FIND);\r
+ } else if (CUtils::IsSakuraEditor()) {\r
+ AdKduAu('S', VK_RETURN);\r
+ } else if (CUtils::IsNami2000()) {\r
+ AdKduAu('D', 'F');\r
+ } else if (CUtils::IsVisualStudioDotNet()) {\r
+ AdKduAu('E', 'F', 'F');\r
+ } else if (CUtils::IsDirector()) {\r
+ AdKduAu('E', 'F', 'T');\r
+ } else if (CUtils::IsAdobeReader()) {\r
+ AdKduAu('E', 'S');\r
+ } else if (CUtils::IsDWFM()\r
+ || CUtils::IsEggExplorer()\r
+ || CUtils::IsExplorer()\r
+ || CUtils::IsOutlookExpress()) {\r
+ Kdu(VK_F3);\r
+ } else if (CUtils::IsHidemaru()\r
+ || CUtils::IsLunascape()\r
+ || CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsMozilla()\r
+ || CUtils::IsNetscape()\r
+ || CUtils::IsOpera()\r
+ || CUtils::IsSleipnir()) {\r
+ CdKduCu('F');\r
+ } else if (CUtils::IsDreamweaver()\r
+ || CUtils::IsezHTML()\r
+ || CUtils::IsFlash()) {\r
+ DepressKey(VK_CONTROL); // Why is this coad needed?\r
+ CdKduCu('F');\r
+ } else if (CUtils::IsIPMessenger()) {\r
+ DepressKey(VK_CONTROL);\r
+ PostMessage(GetFocus(), WM_KEYDOWN, 'F', 0);\r
+ PostMessage(GetFocus(), WM_KEYUP, 'F', 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ } else {\r
+ // default\r
+ AdKduAu('E', 'F');\r
+ }\r
+\r
+ // Set Direction if Find dialog already exist\r
+ if (CUtils::IsDWFM()\r
+ || CUtils::IsEggExplorer()\r
+ || CUtils::IsExplorer()\r
+ || CUtils::IsFirefox()\r
+ || CUtils::IsHidemaru()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsLotusWordPro()\r
+ || CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsMozilla()\r
+ || CUtils::IsMSDN()\r
+ || CUtils::IsNetscape()\r
+ || CUtils::IsOpera()\r
+ || CUtils::IsSakuraEditor()) {\r
+ } else if (CUtils::IsInternetExplorer()\r
+ || CUtils::IsSleipnir()) {\r
+ // I want to set direction but IE does not allow me.\r
+ } else {\r
+ SetSearchDirection();\r
+ }\r
+}\r
+\r
+int CCommands::Search(SEARCH_DIRECTION direction)\r
+{\r
+// CUtils::Log(_T("%s"), CUtils::GetApplicationName());\r
+\r
+ if (CUtils::IsIllustrator()\r
+ || CUtils::IsPaint()\r
+ || CUtils::IsPhotoshop()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ ClearNumericArgument();\r
+\r
+ if ((direction != FORWARD) && (direction != BACKWARD)) {\r
+ ASSERT(0);\r
+ }\r
+\r
+ if (CUtils::IsVisualCpp()\r
+ || CUtils::IsVisualStudioDotNet()) {\r
+ switch (direction) {\r
+ case FORWARD:\r
+ CdKduCu('I');\r
+ break;\r
+ case BACKWARD:\r
+ CdSdKduSuCu('I');\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ if (!CUtils::IsFindDialog()) {\r
+// CUtils::Log(_T("Find Dialog is not."));\r
+\r
+ // F3 or Shift+F3\r
+ if (m_LastCommand == IsearchForward\r
+ || m_LastCommand == IsearchBackward) {\r
+ if (CUtils::IsBecky()\r
+ || CUtils::IsFirefox()\r
+ || CUtils::IsHidemaru()\r
+ || CUtils::IsPHPEditor()) {\r
+ if (m_LastCommand == IsearchForward && direction != FORWARD\r
+ || m_LastCommand == IsearchBackward && direction != BACKWARD) {\r
+ // do nothing\r
+ } else if (direction == FORWARD) {\r
+ Kdu(VK_F3);\r
+ } else if (direction == BACKWARD) {\r
+ SdKduSu(VK_F3);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ } else if (CUtils::IsBorlandCppBuilder()) {\r
+ if (m_LastCommand == IsearchForward && direction != FORWARD\r
+ || m_LastCommand == IsearchBackward && direction != BACKWARD) {\r
+ AdKduAu('S', 'F');\r
+ SetSearchDirection(direction);\r
+ Kdu(VK_RETURN);\r
+ } else {\r
+ Kdu(VK_F3);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ }\r
+\r
+ m_SearchDirection = direction;\r
+ OpenFindDialog();\r
+ } else {\r
+// CUtils::Log(_T("Find Dialog is opened."));\r
+\r
+ if (CUtils::IsHidemaru()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsOedit()\r
+ || CUtils::IsSakuraEditor()) {\r
+ BYTE bDirection = 0;\r
+\r
+ if (direction == FORWARD) {\r
+ bDirection = GetDirectionForwardKey();\r
+ } else if (direction == BACKWARD) {\r
+ bDirection = GetDirectionBackwardKey();\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+ AdKduAu(bDirection);\r
+ } else if (CUtils::IsBorlandCppBuilder()) {\r
+ if (m_SearchDirection != direction) {\r
+ SetSearchDirection(direction);\r
+ } else {\r
+ Kdu(VK_RETURN);\r
+ }\r
+ } else if (CUtils::IsJmEditor()\r
+ || CUtils::IsPHPEditor()) {\r
+ Kdu(VK_RETURN);\r
+ } else if (CUtils::IsAutla()) {\r
+ if (direction == FORWARD) {\r
+ Kdu(VK_F3);\r
+ } else if (direction == BACKWARD) {\r
+ SdKduSu(VK_F3);\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+ } else {\r
+ if (m_SearchDirection != direction) {\r
+ // Set Direction if Find dialog already exist\r
+ if (CUtils::IsConsole()) {\r
+ SetSearchDirection(BACKWARD); // bad style\r
+ m_SearchDirection = direction;\r
+ } else {\r
+ SetSearchDirection(direction);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ // "Find Next(F)" if Find dialog already exist\r
+ if (CUtils::IsStoryEditor()) {\r
+ AdKduAu('F');\r
+ } else {\r
+ Kdu(VK_RETURN);\r
+ }\r
+\r
+ // open Find dialog again\r
+ CString szDialogTitle;\r
+ CUtils::GetFindDialogTitle(&szDialogTitle);\r
+ if (CUtils::IsNami2000()) {\r
+ AdKduAu('D', 'F');\r
+ SetSearchDirection();\r
+ } else if (CUtils::IsOutlook()\r
+ && szDialogTitle.Compare(_T("\8c\9f\8dõ"))) {\r
+ // Outlook (w/o Japanese version)\r
+ AdKduAu('E', 'F');\r
+ } else if (CUtils::IsVisualCpp()) {\r
+ CdKduCu('F');\r
+ DepressKey(VK_CONTROL); // Why is this need???\r
+ } else if (CUtils::IsCodeWarrior()\r
+ || CUtils::IsDana()\r
+ || CUtils::IsStoryEditor()\r
+ || CUtils::IsTeraPad()) {\r
+ AdKduAu('S', 'F');\r
+ } else if (CUtils::IsezHTML()) {\r
+ CdKduCu('F');\r
+ }\r
+\r
+ // set cursor at end of FindWhat\r
+ if (CUtils::IsMozilla()\r
+ || CUtils::IsNetscape()) {\r
+ // do nothing\r
+ } else if (CUtils::IsMicrosoftWord()) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+\r
+ AdKduAu('N');\r
+ Kdu(VK_ESCAPE);\r
+ Kdu(VK_END);\r
+\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ } else {\r
+ AdKduAu(GetFindWhatKey());\r
+ }\r
+ Kdu(VK_END);\r
+ }\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::SetSearchDirection(SEARCH_DIRECTION direction)\r
+{\r
+// CUtils::Log(_T("SetSearchDirection: %d"), direction);\r
+ if ((direction != FORWARD) && (direction != BACKWARD)) {\r
+ return;\r
+ }\r
+\r
+ m_SearchDirection = direction;\r
+\r
+ if (GetDirectionForwardKey() == 0 && GetDirectionBackwardKey() == 0) {\r
+ Kdu(VK_END);\r
+ return;\r
+ } else if (CUtils::IsConsole()) {\r
+ if (direction == BACKWARD) { // bad style\r
+ Kdu(VK_TAB, VK_TAB);\r
+ Kdu(VK_RIGHT);\r
+ SdKduSu(VK_TAB, VK_TAB);\r
+ }\r
+ } else if (CUtils::IsMicrosoftWord()) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+\r
+ AdKduAu('M');\r
+ AdKduAu(0xBA); // VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key\r
+ Kdu(VK_UP, VK_UP);\r
+ if (direction == BACKWARD) {\r
+ Kdu(VK_DOWN);\r
+ }\r
+ AdKduAu('N');\r
+ Kdu(VK_ESCAPE);\r
+ Kdu(VK_END);\r
+\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ } else if (CUtils::IsLotusNotes()) {\r
+ BYTE bDirection = 0;\r
+\r
+ if (direction == FORWARD) {\r
+ bDirection = GetDirectionForwardKey();\r
+ } else if (direction == BACKWARD) {\r
+ bDirection = GetDirectionBackwardKey();\r
+ }\r
+\r
+ AdKduAu(GetSearchOptionKey(), bDirection, GetSearchOptionKey());\r
+ {\r
+ CString szDialogTitle;\r
+ CUtils::GetFindDialogTitle(&szDialogTitle);\r
+\r
+ if (!szDialogTitle.Compare(_T("\8c\9f\8dõ"))\r
+ || !szDialogTitle.Compare(_T("Find"))) {\r
+ SdKduSu(VK_TAB);\r
+ } else {\r
+ SdKduSu(VK_TAB, VK_TAB);\r
+ }\r
+ }\r
+ Kdu(VK_END);\r
+ } else if (CUtils::IsBecky()) {\r
+ AdKduAu(GetDirectionForwardKey());\r
+ if (direction == BACKWARD) {\r
+ Kdu(VK_UP);\r
+ }\r
+ Kdu(VK_TAB, VK_TAB, VK_TAB, VK_TAB);\r
+ Kdu(VK_END);\r
+ } else if (CUtils::IsMozilla()\r
+ || CUtils::IsNetscape()) {\r
+ Kdu(VK_TAB, VK_TAB, VK_TAB, VK_SPACE);\r
+ SdKduSu(VK_TAB, VK_TAB, VK_TAB);\r
+ } else if (CUtils::IsezHTML()) {\r
+ BYTE bDirection = 0;\r
+\r
+ if (direction == FORWARD) {\r
+ bDirection = GetDirectionForwardKey();\r
+ } else if (direction == BACKWARD) {\r
+ bDirection = GetDirectionBackwardKey();\r
+ }\r
+\r
+ AdKduAu(bDirection);\r
+ SdKduSu(VK_TAB, VK_TAB, VK_TAB, VK_TAB);\r
+ } else {\r
+ // default\r
+ BYTE bDirection = 0;\r
+\r
+ if (direction == FORWARD) {\r
+ bDirection = GetDirectionForwardKey();\r
+ } else if (direction == BACKWARD) {\r
+ bDirection = GetDirectionBackwardKey();\r
+ }\r
+\r
+// CUtils::Log(_T("aSetSearchDirection: Direction = %c, FindWhatKey = %c"), bDirection, GetFindWhatKey());\r
+ AdKduAu(bDirection, GetFindWhatKey());\r
+ }\r
+}\r
+\r
+// C-x C-j, C-o, C-\, C-BACKSLASH\r
+int CCommands::ToggleInputMethod()\r
+{\r
+ SetInputMethodOpenStatus(TOGGLE_INPUT_METHOD);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::CompleteToggleInputMethod()\r
+{\r
+ SetInputMethodOpenStatus(TOGGLE_INPUT_METHOD, TRUE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OpenInputMethod()\r
+{\r
+ SetInputMethodOpenStatus(OPEN_INPUT_METHOD);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::CloseInputMethod()\r
+{\r
+ SetInputMethodOpenStatus(CLOSE_INPUT_METHOD);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::CompleteCloseInputMethod()\r
+{\r
+ SetInputMethodOpenStatus(CLOSE_INPUT_METHOD, TRUE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::SetInputMethodOpenStatus(INPUT_METHOD_OPEN_STATUS status, BOOL isComplete)\r
+{\r
+ ClearNumericArgument();\r
+ HKL hKL = GetKeyboardLayout(0);\r
+ if (CUtils::IsConsole()) {\r
+ Kdu(VK_KANJI);\r
+ } else if (ImmIsIME(hKL)) {\r
+ // default\r
+ HWND hWnd = GetFocus();\r
+ HIMC hIMC = ImmGetContext(hWnd);\r
+\r
+ if (isComplete && ImmGetOpenStatus(hIMC)) {\r
+ ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_COMPLETE, 0);\r
+ }\r
+\r
+ switch (status) {\r
+ case CLOSE_INPUT_METHOD:\r
+ ImmSetOpenStatus(hIMC, FALSE);\r
+ break;\r
+ case OPEN_INPUT_METHOD:\r
+ ImmSetOpenStatus(hIMC, TRUE);\r
+ break;\r
+ case TOGGLE_INPUT_METHOD:\r
+ ImmSetOpenStatus(hIMC, !ImmGetOpenStatus(hIMC));\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ ImmReleaseContext(hWnd, hIMC);\r
+ } else {\r
+ Kdu(VK_KANJI);\r
+ }\r
+}\r
+\r
+// C-x k: Ctrl+F4\r
+int CCommands::KillBuffer()\r
+{\r
+ CdKduCu(VK_F4);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::IsKillCommand(int (*nFunctionPointer)())\r
+{\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ if (Commands[nCommandID].fCommand == nFunctionPointer) {\r
+ return !_tcsncmp(Commands[nCommandID].szCommandName, _T("kill-"), 5);\r
+ }\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+void CCommands::SetLastCommand(int (__cdecl *LastCommand)(void))\r
+{\r
+ m_LastCommand = LastCommand;\r
+\r
+ if (IsKillCommand(LastCommand)) {\r
+ m_LastKillCommand = LastCommand;\r
+ }\r
+}\r
+\r
+// M-d: \r
+int CCommands::KillWord()\r
+{\r
+ if (CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsThunderbird()) {\r
+ CdKduCu(VK_DELETE);\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+\r
+ static int nStep = 0;\r
+ static CString szClipboardText;\r
+ static int nWhiteSpace = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+// CUtils::Log(_T("M-d: 0"));\r
+ ClearNumericArgument();\r
+ szClipboardText.Empty();\r
+ nWhiteSpace = 0;\r
+ CdSdKduSuCu(VK_RIGHT);\r
+ CdKduCu('X');\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ {\r
+// CUtils::Log(_T("M-d: 1"));\r
+ nStep = 0;\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+ int nWordEnd = szClipboardText.GetLength();\r
+ int nFirstSpace = szClipboardText.Find(_T(' '));\r
+// CUtils::Log(_T("M-d: 1-1 _%s_%c"), szClipboardText, szClipboardText.GetAt(szClipboardText.GetLength() - 1));\r
+ if (nFirstSpace == 0) {\r
+// CUtils::Log(_T("M-d: 1-1-1"));\r
+ nStep = 0;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else if (0 < nFirstSpace) {\r
+// CUtils::Log(_T("M-d: 1-1-2"));\r
+ nWordEnd = nFirstSpace; // (nFirstSpace + 1) - 1\r
+ }\r
+ int nFirstTab = szClipboardText.Find(_T('\t'));\r
+ if (nFirstTab == 0) {\r
+// CUtils::Log(_T("M-d: 1-2-1"));\r
+ nStep = 0;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else if (0 < nFirstTab && nFirstTab < nWordEnd) {\r
+// CUtils::Log(_T("M-d: 1-2-2"));\r
+ nWordEnd = nFirstTab; // (nFirstTab + 1) - 1\r
+ }\r
+ if (nWordEnd == szClipboardText.GetLength()) {\r
+// CUtils::Log(_T("M-d: 1-3-1"));\r
+ nStep = 4;\r
+ } else {\r
+// CUtils::Log(_T("M-d: 1-3-2"));\r
+ CString szEndWhiteSpace;\r
+ nWhiteSpace = szClipboardText.GetLength() - nWordEnd;\r
+ szEndWhiteSpace = szClipboardText.Right(nWhiteSpace);\r
+ CUtils::SetClipboardText(&szEndWhiteSpace);\r
+ szClipboardText = szClipboardText.Left(nWordEnd);\r
+ nStep = 2;\r
+ }\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 2:\r
+// CUtils::Log(_T("M-d: 2"));\r
+ nStep = 0;\r
+ CdKduCu('V');\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 3:\r
+// CUtils::Log(_T("M-d: 3"));\r
+ nStep = 0;\r
+ m_bDefaultNumericArgument = FALSE;\r
+ m_nNumericArgument = nWhiteSpace;\r
+ Kdu(VK_LEFT);\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 4:\r
+// CUtils::Log(_T("M-d: 4"));\r
+ nStep = 0;\r
+ CUtils::SetClipboardText(&szClipboardText);\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 5:\r
+// CUtils::Log(_T("M-d: 5"));\r
+ nStep = 0;\r
+ CXkeymacsDll::AddKillRing();\r
+ m_bSetMark = FALSE;\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ // dummy\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-DEL\r
+int CCommands::BackwardKillWord()\r
+{\r
+ CdSdKduSuCu(VK_LEFT);\r
+ Cut_();\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// Select All\r
+int CCommands::SelectAll()\r
+{\r
+ if (CUtils::IsConsole()) {\r
+ SystemMenuEdit(CMD_SELECT_ALL);\r
+ } else {\r
+ CdKduCu('A');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x (\r
+int CCommands::StartKbdMacro()\r
+{\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ AdKduAu('T', 'M', 'R');\r
+ } else if (CUtils::IsHidemaru()) {\r
+ SdKduSu(VK_F1);\r
+ } else {\r
+ CXkeymacsDll::DefiningMacro(TRUE);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x )\r
+int CCommands::EndKbdMacro()\r
+{\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ AdKduAu('T', 'M', 'R');\r
+ } else if (CUtils::IsHidemaru()) {\r
+ SdKduSu(VK_F1);\r
+ } else {\r
+ CXkeymacsDll::DefiningMacro(FALSE);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x e\r
+int CCommands::CallLastKbdMacro()\r
+{\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ AdKduAu('T', 'M', 'M');\r
+ } else if (CUtils::IsHidemaru()) {\r
+ int n = 1;\r
+ if (!m_bDefaultNumericArgument) {\r
+ n = m_nNumericArgument;\r
+ }\r
+ ClearNumericArgument();\r
+ while (n--) {\r
+ AdKduAu('M', 'P');\r
+ }\r
+ } else {\r
+ while (m_nNumericArgument--) {\r
+ CXkeymacsDll::CallMacro();\r
+ }\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::SwitchBetweenInputLocales()\r
+{\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+\r
+ // Alt+Shift\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ DepressKey(VK_MENU); // why?\r
+ ReleaseKey(VK_MENU);\r
+ DepressKey(VK_MENU);\r
+ DepressKey(VK_SHIFT);\r
+ ReleaseKey(VK_SHIFT);\r
+ if (!bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// C-x b\r
+int CCommands::SwitchToBuffer()\r
+{\r
+ ClearNumericArgument();\r
+ // GetWindowInfo does not get information to find out if the window is MDI or SDI.\r
+ CdKduCu(VK_TAB);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::C_()\r
+{\r
+ return Reset(GOTO_HOOKX);\r
+}\r
+\r
+int CCommands::C_Eisu()\r
+{\r
+ bC_(TRUE);\r
+ return Reset(GOTO_HOOKX);\r
+}\r
+\r
+int CCommands::Escape()\r
+{\r
+ ClearNumericArgument();\r
+ Kdu(VK_ESCAPE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Tilde()\r
+{\r
+ ClearNumericArgument();\r
+ if (CXkeymacsData::Is106Keyboard()) {\r
+ SdKduSu(0xDE); // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ Su(); // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ } else {\r
+ SdKduSu(0xC0); // VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. \r
+ Su(); // Windows 2000/XP: For the US standard keyboard, the '`~' key\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::BackQuote()\r
+{\r
+ ClearNumericArgument();\r
+ if (CXkeymacsData::Is106Keyboard()) {\r
+ SdKduSu(0xC0);\r
+ Su();\r
+ } else {\r
+ ReleaseKey(VK_SHIFT);\r
+ Kdu(0xC0); // VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the '`~' key\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::IsSetMark()\r
+{\r
+ return m_bSetMark;\r
+}\r
+\r
+BYTE CCommands::GetFindWhatKey()\r
+{\r
+ BYTE bFindWhat = 'N';\r
+\r
+ if (CUtils::IsBecky()\r
+ || CUtils::IsDana()\r
+ || CUtils::IsEclipse()\r
+ || CUtils::IsezHTML()\r
+ || CUtils::IsLotusNotes()\r
+ || CUtils::IsVisualBasicEditor()) {\r
+ bFindWhat = 'F';\r
+ } else if (CUtils::IseMemoPad()) {\r
+ bFindWhat = 'K';\r
+ } else if (CUtils::IsHidemaru()\r
+ || CUtils::IsJmEditor()) {\r
+ bFindWhat = 'S';\r
+ } else if (CUtils::IsBorlandCppBuilder()\r
+ || CUtils::IsNami2000()\r
+ || CUtils::IsStoryEditor()\r
+ || CUtils::IsTeraPad()) {\r
+ bFindWhat = 'T';\r
+ } else if (CUtils::IsAdobeReader()\r
+ || CUtils::IsAutla()\r
+ || CUtils::IsCodeWarrior()\r
+ || CUtils::IsFirefox()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsIPMessenger()\r
+ || CUtils::IsK2Editor()\r
+ || CUtils::IsOedit()\r
+ || CUtils::IsOpera()\r
+ || CUtils::IsOpenJane()\r
+ || CUtils::IsPHPEditor()\r
+ || CUtils::IsSakuraEditor()) {\r
+ bFindWhat = 0;\r
+ }\r
+\r
+ return bFindWhat;\r
+}\r
+\r
+BYTE CCommands::GetSearchOptionKey()\r
+{\r
+ BYTE bSearchOption = 0;\r
+\r
+ if (CUtils::IsLotusNotes()) {\r
+ bSearchOption = 'O';\r
+ }\r
+\r
+ return bSearchOption;\r
+}\r
+\r
+BYTE CCommands::GetDirectionForwardKey()\r
+{\r
+ BYTE bDirectionForward = 'D';\r
+ CString szDialogTitle;\r
+ CUtils::GetFindDialogTitle(&szDialogTitle);\r
+\r
+ if (CUtils::IsAdobeReader()\r
+ || CUtils::IsAutla()\r
+ || CUtils::IsCodeWarrior()\r
+ || CUtils::IsDirector()\r
+ || CUtils::IsDreamweaver()\r
+ || CUtils::IsExcel()\r
+ || CUtils::IsFirefox()\r
+ || CUtils::IsFireworks()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsIPMessenger()\r
+ || CUtils::IsJmEditor()\r
+ || CUtils::IsLotus123()\r
+ || CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsOpera()\r
+ || CUtils::IsOpenJane()\r
+ || CUtils::IsStoryEditor()\r
+ || CUtils::IsVisualBasicEditor()\r
+ || CUtils::IsVisualStudioDotNet()\r
+ || CUtils::IsWordpad()) {\r
+ bDirectionForward = 0;\r
+ } else if (CUtils::IsLotusNotes()\r
+ || CUtils::IsNami2000()\r
+ || CUtils::IsSakuraEditor()) {\r
+ bDirectionForward = 'D';\r
+ } else if (CUtils::IsOedit()) {\r
+ bDirectionForward = 'F';\r
+ } else if (CUtils::IsBecky()) {\r
+ if (!szDialogTitle.Compare(_T("\96{\95¶\93à\8c\9f\8dõ"))) {\r
+ bDirectionForward = 'O';\r
+ } else {\r
+ bDirectionForward = 0;\r
+ }\r
+ } else if (CUtils::IsK2Editor()) {\r
+ bDirectionForward = 'L';\r
+ } else if (CUtils::IseMemoPad()\r
+ || CUtils::IsHidemaru()) {\r
+ bDirectionForward = 'N';\r
+ } else if (CUtils::IsEclipse()) {\r
+ bDirectionForward = 'O';\r
+ }\r
+\r
+ if (CUtils::IsOutlook()\r
+ && !szDialogTitle.Compare(_T("Find"))) {\r
+ // Outlook (English version)\r
+ bDirectionForward = 0;\r
+ }\r
+\r
+ return bDirectionForward;\r
+}\r
+\r
+BYTE CCommands::GetDirectionBackwardKey()\r
+{\r
+ BYTE bDirectionBackward = 'U';\r
+ CString szDialogTitle;\r
+ CUtils::GetFindDialogTitle(&szDialogTitle);\r
+\r
+ if (CUtils::IsAdobeReader()\r
+ || CUtils::IsAutla()\r
+ || CUtils::IsCodeWarrior()\r
+ || CUtils::IsDirector()\r
+ || CUtils::IsDreamweaver()\r
+ || CUtils::IsExcel()\r
+ || CUtils::IsFirefox()\r
+ || CUtils::IsFireworks()\r
+ || CUtils::IsFlash()\r
+ || CUtils::IsIPMessenger()\r
+ || CUtils::IsJmEditor()\r
+ || CUtils::IsLotus123()\r
+ || CUtils::IsMicrosoftPowerPoint()\r
+ || CUtils::IsOpera()\r
+ || CUtils::IsOpenJane()\r
+ || CUtils::IsStoryEditor()\r
+ || CUtils::IsVisualBasicEditor()\r
+ || CUtils::IsWordpad()) {\r
+ bDirectionBackward = 0;\r
+ } else if (CUtils::IsBorlandCppBuilder()\r
+ || CUtils::IsEclipse()\r
+ || CUtils::IseMemoPad()\r
+ || CUtils::IsLotusNotes()\r
+ || CUtils::IsNami2000()) {\r
+ bDirectionBackward = 'B';\r
+ } else if (CUtils::IsBecky()) {\r
+ if (!szDialogTitle.Compare(_T("\96{\95¶\93à\8c\9f\8dõ"))) {\r
+ bDirectionBackward = 'B';\r
+ } else {\r
+ bDirectionBackward = 0;\r
+ }\r
+ } else if (CUtils::IsHidemaru()\r
+ || CUtils::IsOedit()) {\r
+ bDirectionBackward = 'P';\r
+ } else if (CUtils::IsK2Editor()\r
+ || CUtils::IsSakuraEditor()) {\r
+ bDirectionBackward = 'U';\r
+ }\r
+\r
+ if (CUtils::IsOutlook()\r
+ && !szDialogTitle.Compare(_T("Find"))) {\r
+ // Outlook (English version)\r
+ bDirectionBackward = 0;\r
+ }\r
+\r
+ return bDirectionBackward;\r
+}\r
+\r
+void CCommands::GetCaretPosition()\r
+{\r
+// CUtils::Log(_T("GetClipboardTextLength = %d"), CUtils::GetClipboardTextLength());\r
+\r
+ try {\r
+ POINT *pCaretPos = new POINT;\r
+ if (pCaretPos && GetCaretPos(pCaretPos)) {\r
+// CUtils::Log(_T("x = %d, y = %d"), pCaretPos->x, pCaretPos->y);\r
+ m_CaretPos.AddTail(pCaretPos);\r
+ } else {\r
+ delete pCaretPos;\r
+ pCaretPos = NULL;\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("GetCaretPosition: pCaretPos: 'new' threw an exception");\r
+ }\r
+\r
+ try {\r
+ SCROLLINFO *pScrollInfo = new SCROLLINFO;\r
+ if (pScrollInfo) {\r
+ memset(pScrollInfo, 0, sizeof(SCROLLINFO));\r
+ pScrollInfo->cbSize = sizeof(SCROLLINFO);\r
+ pScrollInfo->fMask = SIF_ALL;\r
+ if (GetScrollInfo(GetFocus(), SB_VERT, pScrollInfo)) {\r
+// CUtils::Log(_T("page = %d, pos = %d, max = %d, min = %d, trackpos = %d"), pScrollInfo->nPage, pScrollInfo->nPos, pScrollInfo->nMax, pScrollInfo->nMin, pScrollInfo->nTrackPos);\r
+ m_ScrollInfo.AddTail(pScrollInfo);\r
+ } else {\r
+// CUtils::Log(_T("GetScrollInfo Error: %d"), GetLastError());\r
+ delete pScrollInfo;\r
+ pScrollInfo = NULL;\r
+ }\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("GetCaretPosition: pScrollInfo: 'new' threw an exception");\r
+ }\r
+\r
+ try {\r
+ CString* pClipboardText = new CString;\r
+ if (pClipboardText) {\r
+ CUtils::GetClipboardText(pClipboardText);\r
+ CUtils::SetClipboardText(pClipboardText);\r
+ m_FindText.AddTail(pClipboardText);\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("GetCaretPosition: pClipboardText: 'new' threw an exception");\r
+ }\r
+}\r
+\r
+BOOL CCommands::SetCaretPosition()\r
+{\r
+ {\r
+// TCHAR buf[0x100] = {'\0'};\r
+// GetWindowText(GetForegroundWindow(), buf, sizeof(buf));\r
+// CUtils::Log(buf);\r
+ }\r
+\r
+ if (!m_ScrollInfo.IsEmpty()) {\r
+ SCROLLINFO* pScrollInfo = (SCROLLINFO*)m_ScrollInfo.GetTail();\r
+ delete pScrollInfo;\r
+ pScrollInfo = NULL;\r
+ m_ScrollInfo.RemoveTail();\r
+ }\r
+ if (!m_ScrollInfo.IsEmpty()) {\r
+ SCROLLINFO* pScrollInfo = (SCROLLINFO*)m_ScrollInfo.GetTail();\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_THUMBPOSITION | (pScrollInfo->nPos << 0x10), NULL);\r
+ }\r
+\r
+ BOOL bMoveCaret = FALSE;\r
+ if (!m_CaretPos.IsEmpty()) {\r
+ POINT* pCaretPos = (POINT*)m_CaretPos.GetTail();\r
+ delete pCaretPos;\r
+ pCaretPos = NULL;\r
+ m_CaretPos.RemoveTail();\r
+ }\r
+ if (!m_CaretPos.IsEmpty()) {\r
+ POINT* pCaretPos = (POINT*)m_CaretPos.GetTail();\r
+ SetCaretPos(pCaretPos->x, pCaretPos->y);\r
+\r
+// CUtils::Log(_T("set x = %d), y = %d", p->x, p->y);\r
+\r
+ DeactivateMark();\r
+\r
+ const int nPreviousFindTextLength = CUtils::GetClipboardTextLength();\r
+ if (0 < nPreviousFindTextLength) {\r
+ if (CUtils::IsWordpad()) {\r
+ POSITION position = m_FindText.GetTailPosition();\r
+ CString* pPreviousFindText = (CString*)m_FindText.GetPrev(position);\r
+ CString* pNextFindText = (CString*)m_FindText.GetPrev(position);\r
+ if (*pPreviousFindText == *pNextFindText) {\r
+ for (int i = 0; i <= nPreviousFindTextLength; ++i) {\r
+ Kdu(VK_LEFT);\r
+ }\r
+ } else {\r
+ Kdu(VK_LEFT);\r
+ }\r
+ }\r
+ bMoveCaret = TRUE;\r
+ }\r
+ } else {\r
+ Kdu(VK_LEFT);\r
+ }\r
+\r
+// CUtils::Log(_T("scrollInfo.GetCount() = %d, szFindText.GetLength() = %d"), scrollInfo.GetCount(), szFindText.GetLength());\r
+\r
+ if (!m_FindText.IsEmpty()) {\r
+ CString *pFindText = (CString *)m_FindText.GetTail();\r
+ delete pFindText;\r
+ pFindText = NULL;\r
+ m_FindText.RemoveTail();\r
+ }\r
+ if (!m_FindText.IsEmpty()) {\r
+ CString *pFindText = (CString *)m_FindText.GetTail();\r
+ CUtils::SetClipboardText(pFindText);\r
+ }\r
+\r
+ return bMoveCaret;\r
+}\r
+\r
+void CCommands::SetMark(BOOL bSetMark)\r
+{\r
+ m_bSetMark = bSetMark;\r
+}\r
+\r
+GOTO CCommands::MoveCaret(BYTE bVk, BOOL bCtrl)\r
+{\r
+ switch (bVk) {\r
+ case VK_PRIOR:\r
+ case VK_NEXT:\r
+ case VK_END:\r
+ case VK_HOME:\r
+ case VK_LEFT:\r
+ case VK_UP:\r
+ case VK_RIGHT:\r
+ case VK_DOWN:\r
+ break;\r
+ default:\r
+ return CONTINUE;\r
+ }\r
+\r
+ struct {\r
+ BYTE bVk;\r
+ BOOL bCtrl;\r
+ DWORD time;\r
+ } static last;\r
+\r
+ const DWORD time = GetTickCount();\r
+// CUtils::Log(_T("%d - %d = %d, %d, %d"), time, last.time, time - last.time, CXkeymacsDll::GetMaxKeyInterval(), CXkeymacsDll::GetAccelerate());\r
+ if (CXkeymacsDll::GetAccelerate() && bVk == last.bVk && bCtrl == last.bCtrl && time - last.time < CXkeymacsDll::GetMaxKeyInterval()) {\r
+ NumericArgument(CXkeymacsDll::GetAccelerate());\r
+ }\r
+ last.bVk = bVk;\r
+ last.bCtrl = bCtrl;\r
+ last.time = time;\r
+\r
+ if (bCtrl) {\r
+ if (m_bSetMark) {\r
+ CdSdKduSuCu(bVk);\r
+ } else {\r
+ CdKduCu(bVk);\r
+ }\r
+ } else {\r
+ if (m_bSetMark) {\r
+ if (CUtils::IsShuriken()) {\r
+ static BOOL bIsShiftDown = FALSE;\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+ {\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL, FALSE);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+ bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT, FALSE);\r
+\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (!bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ CXkeymacsDll::Kdu(bVk, m_nNumericArgument);\r
+\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+ nStep = 1;\r
+ return GOTO_RECURSIVE;\r
+ }\r
+ case 1:\r
+ nStep = 0;\r
+ if (!bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+ return GOTO_HOOK;\r
+ }\r
+ } else {\r
+ SdKduSu(bVk);\r
+ }\r
+ } else {\r
+ Kdu(bVk);\r
+ }\r
+ }\r
+ return GOTO_HOOK;\r
+}\r
+\r
+int CCommands::PassThrough()\r
+{\r
+ Reset(); // Why?\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Redo()\r
+{\r
+ if (CUtils::IsCorelDRAW()) {\r
+ CdSdKduSuCu('Z');\r
+ } else {\r
+ CdKduCu('Y');\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::TemporarilyDisableXKeymacs()\r
+{\r
+// CUtils::Log(_T("SetTemporarilyDisableXKeymacs"));\r
+ SetTemporarilyDisableXKeymacs(TRUE);\r
+ Reset(); // Why?\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::IsTemporarilyDisableXKeymacs()\r
+{\r
+ return m_bTemporarilyDisableXKeymacs;\r
+}\r
+\r
+void CCommands::SetTemporarilyDisableXKeymacs(BOOL bTemporarilyDisableXKeymacs)\r
+{\r
+ m_bTemporarilyDisableXKeymacs = bTemporarilyDisableXKeymacs;\r
+ CXkeymacsDll::SetKeyboardHookFlag();\r
+}\r
+\r
+int CCommands::New()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ CdKduCu('N');\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Print()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ CdKduCu('P');\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Find()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ CdKduCu('F');\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::FindNext()\r
+{\r
+ ClearNumericArgument();\r
+ m_bSetMark = FALSE;\r
+ Kdu(VK_F3);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::SystemMenu(const CONSOLE_MENU nDown)\r
+{\r
+// CUtils::Log(_T("SystemMenu"));\r
+ if (!CUtils::IsConsole()) {\r
+ return ERROR_SUCCESS;\r
+ }\r
+\r
+ RECT consoleWindowRect = {'\0'};\r
+ if (!GetWindowRect(GetForegroundWindow(), &consoleWindowRect)) {\r
+ return GetLastError();\r
+ }\r
+// CUtils::Log(_T("t = %d, l = %d"), consoleWindowRect.top, consoleWindowRect.left);\r
+\r
+ const POINT clickPoint = {consoleWindowRect.left + 5, consoleWindowRect.top + 5};\r
+ int rc = Click(&clickPoint);\r
+ if (rc != ERROR_SUCCESS) {\r
+ return rc;\r
+ }\r
+\r
+ if (nDown != CMD_EDIT) {\r
+ for (int i = 0; i <= nDown; ++i) {\r
+ Kdu(VK_DOWN);\r
+ }\r
+ Kdu(VK_UP);\r
+ Kdu(VK_RETURN);\r
+ }\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+}\r
+\r
+int CCommands::SystemMenuEdit(const CONSOLE_MENU_EDIT nDown)\r
+{\r
+ if (!CUtils::IsConsole()) {\r
+ return ERROR_SUCCESS;\r
+ }\r
+\r
+ SystemMenu(CMD_EDIT);\r
+ RECT consoleWindowRect = {'\0'};\r
+ if (!GetWindowRect(GetForegroundWindow(), &consoleWindowRect)) {\r
+ return GetLastError();\r
+ }\r
+\r
+ const y = GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYMENU) * 6 + 20; // y = A + B * 6 + 20\r
+ const POINT clickPoint = {consoleWindowRect.left + 50, consoleWindowRect.top + y}; // 146 <= y <= 161 on W2K (146 + 161 + 1) / 2 = 154 = 19 + 19 x 6 + 21\r
+ int rc = Click(&clickPoint); // 157 <= y <= 172 on WXP (157 + 172 + 1) / 2 = 165 = 26 + 20 x 6 + 19\r
+ if (rc != ERROR_SUCCESS) {\r
+ return rc;\r
+ }\r
+\r
+ for (int i = 0; i <= nDown; ++i) {\r
+ Kdu(VK_DOWN);\r
+ }\r
+ Kdu(VK_UP); // Why? Because Mark did not work well only one VK_DOWN (or seven VK_DOWNs).\r
+\r
+ Kdu(VK_RETURN);\r
+ return ERROR_SUCCESS; // i.e. return 0;\r
+}\r
+\r
+int CCommands::Click(const POINT *const pClickPoint)\r
+{\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU, FALSE);\r
+\r
+ POINT CursorPos = {'\0'};\r
+ if (!GetCursorPos(&CursorPos)) {\r
+ return GetLastError();\r
+ }\r
+\r
+ if (!SetCursorPos(pClickPoint->x, pClickPoint->y)) {\r
+ return GetLastError();\r
+ }\r
+ if (CUtils::IsConsole()\r
+ && bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo());\r
+ mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo());\r
+ if (!SetCursorPos(CursorPos.x, CursorPos.y)) {\r
+ return GetLastError();\r
+ }\r
+ return ERROR_SUCCESS;\r
+}\r
+\r
+// C-x C-t\r
+int CCommands::TransposeLines()\r
+{\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 0"));\r
+ Kdu(VK_END);\r
+ CaptureClipboardData();\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 1"));\r
+ if (!CopyNextCharacter()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 2"));\r
+ Su();\r
+ if (CUtils::IsEOF()) {\r
+ Kdu(VK_END, VK_RETURN, VK_UP, VK_END);\r
+ }\r
+ Kdu(VK_HOME);\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 3:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 3"));\r
+ if (!CopyBackCharacter()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 4:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 4"));\r
+ Su();\r
+ if (CUtils::IsTOF()) { // TOF\r
+ Kdu(VK_DOWN, VK_END);\r
+// CUtils::Log(_T("C-x C-t: TOF"));\r
+ nStep = 5;\r
+ } else {\r
+ nStep = 7;\r
+ }\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 5:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 5"));\r
+ if (!CopyNextCharacter()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 6:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 6"));\r
+ Su();\r
+ if (CUtils::IsEOF()) {\r
+ Kdu(VK_END, VK_RETURN, VK_UP, VK_END);\r
+// CUtils::Log(_T("C-x C-t: EOF2"));\r
+ }\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 7:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 7"));\r
+ Kdu(VK_UP, VK_HOME);\r
+ SdKduSu(VK_DOWN);\r
+ CdKduCu('X');\r
+ nStep = 8;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 8:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 8"));\r
+ Su();\r
+ Kdu(VK_DOWN);\r
+ CdKduCu('V');\r
+ nStep = 9;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 9:\r
+ nStep = 0;\r
+// CUtils::Log(_T("C-x C-t: 9"));\r
+ RestoreClipboardData();\r
+ break;\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+void CCommands::CaptureClipboardData(const int nID, const BOOL bTextOnly)\r
+{\r
+// CUtils::Log("CaptureClipboardData: 1");\r
+ {\r
+ int nSize = nID + 1;\r
+ if (m_oClipboardData.GetSize() < nSize) {\r
+// CUtils::Log("CaptureClipboardData: 2");\r
+ try {\r
+ m_oClipboardData.SetSize(nSize);\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CaptureClipboardData: SetSize() threw an exception");\r
+ }\r
+ }\r
+ }\r
+\r
+// CUtils::Log("CaptureClipboardData: 3");\r
+ if (!m_oClipboardData[nID]) {\r
+// CUtils::Log("CaptureClipboardData: 4");\r
+ try {\r
+ CClipboardSnap *pSnap = new CClipboardSnap;\r
+ if (!pSnap) {\r
+// CUtils::Log("CaptureClipboardData: 5");\r
+ return;\r
+ }\r
+ m_oClipboardData.SetAt(nID, pSnap);\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CaptureClipboardData: 'new' threw an exception");\r
+ }\r
+ }\r
+\r
+// CUtils::Log("CaptureClipboardData: 6: nID=%d, size=%d", nID, m_oClipboardData.GetSize());\r
+ BOOL bCapture = m_oClipboardData[nID]->Capture(bTextOnly);\r
+// CUtils::Log("CaptureClipboardData: 7");\r
+ Sleep(0); // for OpenOffice\r
+ bCapture = m_oClipboardData[nID]->Capture(bTextOnly); // for "office drawing shape format". Can CClipboardSnap care this problem?\r
+\r
+// CUtils::Log("CaptureClipboardData: 8");\r
+ if (!bCapture) {\r
+// CUtils::Log(_T("Can not Capture in CaptureClipboardData"));\r
+ delete m_oClipboardData[nID];\r
+// CUtils::Log("CaptureClipboardData: 9");\r
+ m_oClipboardData.SetAt(nID, NULL);\r
+// CUtils::Log("CaptureClipboardData: 10");\r
+ }\r
+}\r
+\r
+void CCommands::RestoreClipboardData(const int nID)\r
+{\r
+ if (nID + 1 <= m_oClipboardData.GetSize() && m_oClipboardData[nID]) {\r
+ m_oClipboardData[nID]->Restore();\r
+ }\r
+}\r
+\r
+int CCommands::FindReturnFromClipboardData(const int nID)\r
+{\r
+ if (nID + 1 <= m_oClipboardData.GetSize() && m_oClipboardData[nID]) {\r
+ return m_oClipboardData[nID]->FindReturn();\r
+ }\r
+ return -1;\r
+}\r
+\r
+BOOL CCommands::IsEmptyClipboardData(const int nID)\r
+{\r
+ if (nID + 1 <= m_oClipboardData.GetSize() && m_oClipboardData[nID]) {\r
+ return m_oClipboardData[nID]->IsEmpty();\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+void CCommands::PrintFunctionName(int (*nFunctionPointer)())\r
+{\r
+ for (int nCommandID = 1; nCommandID < sizeof(Commands) / sizeof(Commands[0]); ++nCommandID) {\r
+ if (Commands[nCommandID].fCommand == nFunctionPointer) {\r
+ CUtils::Log(_T("m_LastCommand: %s"), Commands[nCommandID].szCommandName);\r
+ }\r
+ }\r
+}\r
+\r
+int CCommands::CapsLock()\r
+{\r
+ ClearNumericArgument();\r
+ Kdu(VK_CAPITAL);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::Underscore()\r
+{\r
+ ClearNumericArgument();\r
+ if (CXkeymacsData::Is106Keyboard()) {\r
+ SdKduSu(0xE2); // VK_OEM_102 Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard\r
+ Su();\r
+ } else {\r
+ SdKduSu(0xBD); // VK_OEM_MINUS Windows 2000/XP: For any country/region, the '-' key\r
+ Su();\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::RollUpUnroll()\r
+{\r
+ return Maximize(ROLL_UP_UNROLL);\r
+}\r
+\r
+int CCommands::Retop()\r
+{\r
+ RECT ClientRect = {'\0'};\r
+ GetClientRect(GetFocus(), &ClientRect);\r
+\r
+ for (int i = 0; i < 0x10000; ++i) {\r
+ POINT CaretPos = {'\0'};\r
+ GetCaretPos(&CaretPos);\r
+ if (ClientRect.top + 10 < CaretPos.y) {\r
+ SendMessage(GetFocus(), WM_VSCROLL, SB_LINEDOWN, NULL);\r
+ } else {\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ }\r
+\r
+ Kdu(VK_UP, VK_DOWN);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierShift()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierShiftRepeat()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierCtrl()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierCtrlRepeat()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierAlt()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::OneShotModifierAltRepeat()\r
+{\r
+ // dummy\r
+ ASSERT(0);\r
+ static int i = 0;\r
+ ++i;\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::CycleItems()\r
+{\r
+ ClearNumericArgument();\r
+ AdKduAu(VK_ESCAPE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+int CCommands::CycleItemsInversely()\r
+{\r
+ ClearNumericArgument();\r
+ AdSdKduSuAu(VK_ESCAPE);\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-t\r
+int CCommands::TransposeWords()\r
+{\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0:\r
+ nStep = 0;\r
+// CUtils::Log(_T("M-t: 0"));\r
+ CdKduCu(VK_LEFT);\r
+ CaptureClipboardData();\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1:\r
+ nStep = 0;\r
+// CUtils::Log(_T("M-t: 1"));\r
+ CdSdKduSuCu(VK_RIGHT);\r
+ CdKduCu('X');\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2:\r
+ nStep = 0;\r
+// CUtils::Log(_T("M-t: 2"));\r
+ Su();\r
+ CdKduCu(VK_RIGHT);\r
+ CdKduCu('V');\r
+ Kdu(VK_LEFT);\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 3:\r
+ nStep = 0;\r
+// CUtils::Log(_T("M-t: 3"));\r
+ RestoreClipboardData();\r
+ break;\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::GetCaretPos(LPPOINT lpPoint)\r
+{\r
+ if (CUtils::IsMicrosoftWord()\r
+ || CUtils::IsThunderbird()) {\r
+ IMECHARPOSITION ImeCharPosition = {sizeof(IMECHARPOSITION)};\r
+\r
+ CallWindowProc((WNDPROC)GetWindowLong(GetFocus(), GWL_WNDPROC), GetFocus(), WM_IME_REQUEST, IMR_QUERYCHARPOSITION, (LPARAM)&ImeCharPosition);\r
+// CUtils::Log(_T("ImeCharPosition: rc = %d, x = %d, y = %d"), 0, ImeCharPosition.pt.x, ImeCharPosition.pt.y);\r
+\r
+ ScreenToClient(GetFocus(), &ImeCharPosition.pt);\r
+// CUtils::Log(_T("ScreenToClient: rc = %d, x = %d, y = %d"), 0, ImeCharPosition.pt.x, ImeCharPosition.pt.y);\r
+\r
+ *lpPoint = ImeCharPosition.pt;\r
+// CUtils::Log(_T("x = %d, y = %d"), lpPoint->x, lpPoint->y);\r
+\r
+ return TRUE;\r
+ }\r
+\r
+ return ::GetCaretPos(lpPoint);\r
+}\r
+\r
+LRESULT CCommands::VScroll(UINT nSBCode, const int nTimes)\r
+{\r
+ if (CUtils::IsMicrosoftWord()\r
+ || CUtils::IsThunderbird()) {\r
+ RECT ClientRect = {'\0'};\r
+ GetClientRect(GetFocus(), &ClientRect);\r
+\r
+ POINT righttop = {ClientRect.right, ClientRect.top};\r
+ ClientToScreen(GetFocus(), &righttop);\r
+// CUtils::Log(_T("righttop: x = %d, y = %d"), righttop.x, righttop.y);\r
+\r
+ POINT rightbottom = {ClientRect.right, ClientRect.bottom};\r
+ ClientToScreen(GetFocus(), &rightbottom);\r
+// CUtils::Log(_T("rightbottom: x = %d, y = %d"), rightbottom.x, rightbottom.y);\r
+\r
+// POINT CursorPos = {'\0'};\r
+// GetCursorPos(&CursorPos);\r
+// CUtils::Log(_T("VScroll: x = %d, y = %d"), CursorPos.x, CursorPos.y);\r
+\r
+ POINT scrollpos = {'\0'};\r
+\r
+ switch (nSBCode) {\r
+ case SB_LINEUP:\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ scrollpos.x = righttop.x + 8; // 0 to 16\r
+ scrollpos.y = righttop.y - 9; // 1 to 17\r
+ } else if (CUtils::IsThunderbird()) {\r
+ scrollpos.x = righttop.x - 10; // 2 to 18\r
+ scrollpos.y = righttop.y + 8; // 0 to 16\r
+ }\r
+ break;\r
+ case SB_LINEDOWN:\r
+ if (CUtils::IsMicrosoftWord()) {\r
+ scrollpos.x = rightbottom.x + 8; // 0 to 16\r
+ scrollpos.y = rightbottom.y - 60; // 52 to 68\r
+ } else if (CUtils::IsThunderbird()) {\r
+ scrollpos.x = rightbottom.x - 10; // 2 to 18\r
+ scrollpos.y = rightbottom.y - 9; // 1 to 17\r
+ }\r
+ break;\r
+ default:\r
+ return 1;\r
+ }\r
+\r
+ int i = 0;\r
+ for (i = 0; i < nTimes; ++i) {\r
+ Click(&scrollpos);\r
+ }\r
+\r
+ return 0;\r
+ }\r
+\r
+ return SendMessage(GetFocus(), WM_VSCROLL, nSBCode, NULL);\r
+}\r
+\r
+// M-q\r
+int CCommands::FillParagraph()\r
+{\r
+ static const int nFillColumn = 70; // tmp\r
+ static CString szClipboardText;\r
+ static int nOldLineLength = 0;\r
+\r
+ ClearNumericArgument(); // tmp\r
+\r
+ static int nStep = 0;\r
+ switch (nStep) {\r
+ case 0: // Clear Selection\r
+// CUtils::Log(_T("M-q: 0"));\r
+ nStep = 0;\r
+\r
+ CaptureClipboardData();\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ }\r
+ Kdu(VK_HOME);\r
+ nOldLineLength = 0;\r
+\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 1: // Copy previous line\r
+// CUtils::Log(_T("M-q: 1"));\r
+ nStep = 0;\r
+\r
+ if (!CopyPreviousLine()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2: // Check previous line to find TOP (top of paragraph)\r
+// CUtils::Log(_T("M-q: 2"));\r
+ nStep = 0;\r
+\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+// CUtils::Log(_T("M-q: 2-1: _%s_"), szClipboardText);\r
+ if (szClipboardText.IsEmpty()) {\r
+ // TOF\r
+// CUtils::Log(_T("M-q: 2: TOF"));\r
+ Kdu(VK_HOME);\r
+ nStep = 3;\r
+ } else if (szClipboardText == _T("\r\n")\r
+ || szClipboardText == _T("\r")\r
+ || szClipboardText == _T("\n")) {\r
+ // blank line i.e. top of paragraph\r
+ // UNIX: LF "\n"\r
+ // WINDOWS: CR LF "\r\n"\r
+ // MAC: CR "\r"\r
+// CUtils::Log(_T("M-q: 2: TOP"));\r
+ Kdu(VK_DOWN);\r
+ nStep = 3;\r
+ } else {\r
+ // middle of paragraph\r
+// CUtils::Log(_T("M-q: 2: MOP_%d_"), szClipboardText.GetLength());\r
+// CUtils::Log(_T("M-q: 2: MOP_%c(%d)%c(%d)"), szClipboardText.GetAt(0), szClipboardText.GetAt(0), szClipboardText.GetAt(1), szClipboardText.GetAt(1));\r
+ Kdu(VK_HOME);\r
+ nStep = 1;\r
+ }\r
+\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 3: // Go to EOL to copy a current line at the next step\r
+// CUtils::Log(_T("M-q: 3"));\r
+ nStep = 0;\r
+\r
+ Kdu(VK_END);\r
+\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 4: // Copy a current line\r
+// CUtils::Log(_T("M-q: 4"));\r
+ nStep = 0;\r
+\r
+ if (!CopyCurrentLine()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 5;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 5: // Just release shift\r
+// CUtils::Log(_T("M-q: 5"));\r
+ nStep = 0;\r
+\r
+ ReleaseKey(VK_SHIFT);\r
+\r
+ nStep = 6;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 6: // Check current line and fill paragraph\r
+// CUtils::Log(_T("M-q: 6"));\r
+ nStep = 0;\r
+\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+ if (szClipboardText.GetLength() == nOldLineLength + 1) {\r
+// CUtils::Log(_T("M-q: 6-1 Finished"));\r
+ Kdu(VK_END, VK_BACK, VK_RETURN);\r
+ nStep = 8;\r
+ } else if (szClipboardText.GetLength() < nFillColumn) {\r
+// CUtils::Log(_T("M-q: 6-2 This line is too small"));\r
+ Kdu(VK_END, VK_SPACE, VK_DELETE, VK_HOME);\r
+ nStep = 3;\r
+ } else {\r
+// CUtils::Log(_T("M-q: 6-3 %d_%s_%d"), szClipboardText.Left(nFillColumn).GetLength(), szClipboardText.Left(nFillColumn), szClipboardText.Left(nFillColumn).ReverseFind(_T(' ')));\r
+ const int offset = szClipboardText.Left(nFillColumn).ReverseFind(_T(' '));\r
+ if (offset == 0) {\r
+// CUtils::Log(_T("M-q: 6-3-1 TOL is space"));\r
+ Kdu(VK_DELETE);\r
+ } else if (0 < offset) {\r
+// CUtils::Log(_T("M-q: 6-3-2"));\r
+ ReleaseKey(VK_MENU); // FIXME\r
+ for (int i = 0; i < offset; ++i) {\r
+ Kdu(VK_RIGHT);\r
+ }\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+// CUtils::Log(_T("M-q: 6-3-3 No space in first fill-column"));\r
+ const int offset = szClipboardText.Find(_T(' '));\r
+ if (offset < 0) {\r
+ Kdu(VK_HOME, VK_DOWN);\r
+ } else {\r
+ ReleaseKey(VK_MENU); // FIXME\r
+ for (int i = 0; i < offset; ++i) {\r
+ Kdu(VK_RIGHT);\r
+ }\r
+ nStep = 7;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ }\r
+ nStep = 3;\r
+ }\r
+ nOldLineLength = szClipboardText.GetLength();\r
+\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 7: // Linefeed\r
+// CUtils::Log(_T("M-q: 7"));\r
+ nStep = 0;\r
+\r
+ Kdu(VK_RETURN, VK_DELETE);\r
+\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 8: // Restore clipboard data\r
+// CUtils::Log(_T("M-q: 8"));\r
+ nStep = 0;\r
+\r
+ RestoreClipboardData();\r
+\r
+ return Reset(GOTO_HOOK);\r
+ }\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+// M-l\r
+int CCommands::DowncaseWord()\r
+{\r
+ return CaseWord(DOWNCASE);\r
+}\r
+\r
+// M-u\r
+int CCommands::UpcaseWord()\r
+{\r
+ return CaseWord(UPCASE);\r
+}\r
+\r
+// M-c\r
+int CCommands::CapitalizeWord()\r
+{\r
+ return CaseWord(CAPITALIZE);\r
+}\r
+\r
+int CCommands::CaseWord(CASE_WORD nCase)\r
+{\r
+ ClearNumericArgument(); // tmp\r
+\r
+ // Do not try to do these command at once.\r
+ // Clipboard has old data till you go out this function.\r
+ static GOTO nNext = GOTO_HOOK;\r
+ static int nStep = 0;\r
+ static int nLastWhiteSpace = 0;\r
+ static BOOL bFirstCharacter = TRUE;\r
+ switch (nStep) {\r
+ case 0: // Clear Selection\r
+ nLastWhiteSpace = 0;\r
+\r
+ if (m_bSetMark) {\r
+ m_bSetMark = FALSE;\r
+ Kdu(VK_RIGHT, VK_LEFT);\r
+ nStep = 1;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else {\r
+ // Do nothing. Go to case 1:\r
+ }\r
+ case 1: // Get back character to confirm the cursor is at TOF or not.\r
+ nStep = 0;\r
+\r
+ CaptureClipboardData();\r
+\r
+ if (!CutFollowingWord()) {\r
+ return Reset(GOTO_DO_NOTHING);\r
+ }\r
+\r
+ nStep = 2;\r
+ return Reset(GOTO_RECURSIVE);\r
+ case 2:\r
+ {\r
+ nStep = 0;\r
+\r
+ CString szClipboardText;\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+\r
+ CString szTrimmed = szClipboardText;\r
+ szTrimmed.TrimLeft();\r
+ if (szClipboardText.IsEmpty()) {\r
+ nNext = GOTO_HOOK;\r
+ RestoreClipboardData();\r
+ return Reset(GOTO_HOOK);\r
+ } else if (szTrimmed.IsEmpty()) {\r
+ if (nNext == GOTO_HOOK) {\r
+ nNext = GOTO_RECURSIVE;\r
+ } else {\r
+ if (CUtils::IsHidemaru()) {\r
+ nLastWhiteSpace = 1;\r
+ }\r
+ nNext = GOTO_HOOK;\r
+ }\r
+ CUtils::SetClipboardText(&szClipboardText);\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ } else if (CUtils::IsHidemaru()) {\r
+ nNext = GOTO_RECURSIVE;\r
+ } else {\r
+ nNext = GOTO_HOOK;\r
+ }\r
+\r
+ switch (nCase) {\r
+ case DOWNCASE:\r
+ szClipboardText.MakeLower();\r
+ break;\r
+ case UPCASE:\r
+ szClipboardText.MakeUpper();\r
+ break;\r
+ case CAPITALIZE:\r
+ {\r
+ for (int i = 0; i < szClipboardText.GetLength(); ++i) {\r
+ if (_istspace(szClipboardText.GetAt(i))) {\r
+ continue;\r
+ } else if (bFirstCharacter) {\r
+ bFirstCharacter = FALSE;\r
+ if (_istlower(szClipboardText.GetAt(i))) {\r
+ szClipboardText.SetAt(i, (TCHAR) toupper(szClipboardText.GetAt(i)));\r
+ }\r
+ } else {\r
+ if (_istupper(szClipboardText.GetAt(i))) {\r
+ szClipboardText.SetAt(i, (TCHAR) tolower(szClipboardText.GetAt(i)));\r
+ }\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ default:\r
+ ASSERT(0);\r
+ }\r
+\r
+ CUtils::SetClipboardText(&szClipboardText);\r
+\r
+ nLastWhiteSpace = 0;\r
+ for (int j = szClipboardText.GetLength() - 1; !szClipboardText.IsEmpty() && 0 <= j; --j) {\r
+ if (_istspace(szClipboardText.GetAt(j))) {\r
+ ++nLastWhiteSpace;\r
+ } else {\r
+ break;\r
+ }\r
+ }\r
+\r
+ nStep = 3;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 3:\r
+ {\r
+ nStep = 0;\r
+\r
+ Paste();\r
+\r
+ for (int i = 0; i < nLastWhiteSpace; ++i) {\r
+ Kdu(VK_LEFT);\r
+ }\r
+\r
+ nStep = 4;\r
+ return Reset(GOTO_RECURSIVE);\r
+ }\r
+ case 4:\r
+ nStep = 0;\r
+\r
+ RestoreClipboardData();\r
+\r
+ if (nNext == GOTO_HOOK) {\r
+ bFirstCharacter = TRUE;\r
+ }\r
+ return Reset(nNext);\r
+ }\r
+\r
+ return Reset(GOTO_HOOK);\r
+}\r
+\r
+BOOL CCommands::CutFollowingWord()\r
+{\r
+ if (!CUtils::OpenClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!EmptyClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+ if (!CloseClipboard()) {\r
+ ASSERT(0);\r
+ return FALSE;\r
+ }\r
+\r
+ if (CUtils::IsHidemaru()) {\r
+ // On Hidemaru, Cut_() does not work well after CdSdKduSuCu(). I do not know why.\r
+ SdKduSu(VK_RIGHT);\r
+ } else {\r
+ CdSdKduSuCu(VK_RIGHT);\r
+ }\r
+ Cut_();\r
+\r
+ return TRUE;\r
+}\r
+\r
+// M-x: execute-extended-command\r
+int CCommands::ExecuteExtendedCommand()\r
+{\r
+// CUtils::Log(_T("ExecuteExtendedCommand"));\r
+ bM_x(TRUE);\r
+ return Reset(GOTO_HOOKX);\r
+}\r
--- /dev/null
+// Commands.h: interface of the CCommands class\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "xkeymacsdll.h"\r
+\r
+#if !defined(AFX_COMMANDS_H__3AD9D537_AB40_40BB_9697_35F1BB0CA431__INCLUDED_)\r
+#define AFX_COMMANDS_H__3AD9D537_AB40_40BB_9697_35F1BB0CA431__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+enum SEARCH_DIRECTION { NA, FORWARD, BACKWARD, AGAIN };\r
+enum MAXIMIZE_DIRECTION { VERTICAL, HORIZONTAL, ROLL_UP_UNROLL, MAX_MAXIMIZE_DIRECTION };\r
+enum INPUT_METHOD_OPEN_STATUS {CLOSE_INPUT_METHOD, OPEN_INPUT_METHOD, TOGGLE_INPUT_METHOD};\r
+enum CONSOLE_MENU_EDIT { CMD_MARK = 1, CMD_COPY, CMD_PASTE, CMD_SELECT_ALL, CMD_SCROLL, CMD_FIND };\r
+enum CONSOLE_MENU { CMD_RESTORE = 1, CMD_MOVE, CMD_SIZE, CMD_MINIMIZE, CMD_MAXIMIZE, CMD_CLOSE, CMD_EDIT, CMD_DEFAULTS, CMD_PROPERTIES };\r
+enum { MAX_WINDOW = 64 };\r
+enum CASE_WORD { DOWNCASE, UPCASE, CAPITALIZE };\r
+\r
+typedef struct OriginalWindowPosition\r
+{\r
+ HWND hWnd;\r
+ BOOL bMax[MAX_MAXIMIZE_DIRECTION];\r
+ int nOriginalX; // for HORIZONTAL\r
+ int nOriginalY; // for VERTICAL\r
+ int nOriginalWidth; // for HORIZONTAL\r
+ int nOriginalHeight; // for VERTICAL\r
+} OriginalWindowPosition_t;\r
+\r
+class AFX_EXT_CLASS CCommands \r
+{\r
+public:\r
+ static int ExecuteExtendedCommand();\r
+ static int CapitalizeWord();\r
+ static int UpcaseWord();\r
+ static int DowncaseWord();\r
+ static int FillParagraph();\r
+ static int TransposeWords();\r
+ static int CycleItemsInversely();\r
+ static int CycleItems();\r
+ static int OneShotModifierAltRepeat();\r
+ static int OneShotModifierAlt();\r
+ static int OneShotModifierCtrlRepeat();\r
+ static int OneShotModifierCtrl();\r
+ static int OneShotModifierShiftRepeat();\r
+ static int OneShotModifierShift();\r
+ static int Retop();\r
+ static int RollUpUnroll();\r
+ static int Underscore();\r
+ static int CapsLock();\r
+ static int DisableXKeymacs();\r
+ static int EnableXKeymacs();\r
+ static int BackwardKillWord();\r
+ static int KillLineForAllFormat();\r
+ static int TransposeLines();\r
+ static int FindNext();\r
+ static int Find();\r
+ static int Print();\r
+ static int New();\r
+ static int Cut();\r
+ static int Paste();\r
+ static int Copy();\r
+ static void SetTemporarilyDisableXKeymacs(BOOL bTemporarilyDisableXKeymacs);\r
+ static BOOL IsTemporarilyDisableXKeymacs();\r
+ static int TemporarilyDisableXKeymacs();\r
+ static int Redo();\r
+ static int PassThrough();\r
+ static GOTO MoveCaret(BYTE bVk, BOOL bCtrl = FALSE);\r
+ static int MaximizeHorizontally();\r
+ static int MaximizeVertically();\r
+ static int Maximize();\r
+ static int Minimize();\r
+ static int Size();\r
+ static int Move();\r
+ static int Restore();\r
+ static void SetMark(BOOL bSetMark);\r
+ static BOOL IsSetMark();\r
+ static int BackQuote();\r
+ static int Tilde();\r
+ static int Escape();\r
+ static int C_Eisu();\r
+ static int C_();\r
+ static int SwitchToBuffer();\r
+ static int SwitchBetweenInputLocales();\r
+ static int CallLastKbdMacro();\r
+ static int EndKbdMacro();\r
+ static int StartKbdMacro();\r
+ static int SelectAll();\r
+ static int MarkWholeBuffer();\r
+ static int KillWord();\r
+ static void SetLastCommand(int (*LastCommand)());\r
+ static int KillBuffer();\r
+ static int Reset(int rc);\r
+ static int CloseInputMethod();\r
+ static int CompleteCloseInputMethod();\r
+ static int OpenInputMethod();\r
+ static int NumericArgument(int n);\r
+ static void ClearNumericArgument();\r
+ static int GetNumericArgument();\r
+ static int EnableOrDisableXKeymacs();\r
+ static int IsearchForward();\r
+ static int IsearchBackward();\r
+ static int TransposeChars();\r
+ static int Recenter();\r
+ static int Repeat(BYTE bVk);\r
+ static void bC_u(BOOL b);\r
+ static BOOL bC_u();\r
+ static int UniversalArgument();\r
+ static int NumericArgumentMinus();\r
+ static int NumericArgument9();\r
+ static int NumericArgument8();\r
+ static int NumericArgument7();\r
+ static int NumericArgument6();\r
+ static int NumericArgument5();\r
+ static int NumericArgument4();\r
+ static int NumericArgument3();\r
+ static int NumericArgument2();\r
+ static int NumericArgument1();\r
+ static int NumericArgument0();\r
+ static int MetaAlt();\r
+ static int MetaEscape();\r
+ static int Meta();\r
+ static void bM_(BOOL b);\r
+ static BOOL bM_();\r
+ static int Ignore();\r
+ static int ShellCommand();\r
+ static int YankPop();\r
+ static int Yank();\r
+ static int KillRingSave();\r
+ static int KillRegion();\r
+ static int WriteFile();\r
+ static int C_x();\r
+ static void Reset();\r
+ static void bC_(BOOL b);\r
+ static BOOL bC_();\r
+ static void bC_x(BOOL b);\r
+ static BOOL bC_x();\r
+ static void bM_x(BOOL b);\r
+ static BOOL bM_x();\r
+ static int ScrollDown();\r
+ static int ScrollUp();\r
+ static int SaveBuffer();\r
+ static int MarkPage();\r
+ static int Newline();\r
+ static int TabToTabStop();\r
+ static int FindFile();\r
+ static int KeyboardQuit();\r
+ static int SetMarkCommand();\r
+ static int IconifyOrDeiconifyFrame();\r
+ static int SaveBuffersKillEmacs();\r
+ static int Undo();\r
+ static int KillLine();\r
+ static int DeleteChar();\r
+ static int DeleteBackwardChar();\r
+ static int EndOfBuffer();\r
+ static int BeginningOfBuffer();\r
+ static int QueryReplaceRegexp();\r
+ static int QueryReplace();\r
+ static int ToggleInputMethod();\r
+ static int CompleteToggleInputMethod();\r
+ static int OpenLine();\r
+ static int PreviousLine();\r
+ static int NextLine();\r
+ static int BackwardWord();\r
+ static int ForwardWord();\r
+ static int EndOfLine();\r
+ static int BackwardChar();\r
+ static int BeginningOfLine();\r
+ static int ForwardChar();\r
+ CCommands();\r
+ virtual ~CCommands();\r
+\r
+private:\r
+ static BOOL CutFollowingWord();\r
+ static int CaseWord(CASE_WORD nCase);\r
+ static BOOL CopyCurrentLine();\r
+ static BOOL CopyPreviousLine();\r
+ static LRESULT VScroll(UINT nSBCode, int nTimes = 1);\r
+ static BOOL GetCaretPos(LPPOINT lpPoint);\r
+ static BOOL IsKillCommand(int (*nFunctionPointer)());\r
+ static void PrintFunctionName(int (*nFunctionPointer)());\r
+ static OriginalWindowPosition_t* GetOriginalWindowPosition(HWND hWnd);\r
+ static OriginalWindowPosition_t m_OriginalWindowPosition[MAX_WINDOW];\r
+ static int KillLine(BOOL bAllFormat, int (*pCommand)() = KillLine);\r
+ static BOOL IsEmptyClipboardData(const int nID = 0);\r
+ static int FindReturnFromClipboardData(const int nID = 0);\r
+ static void Cut_();\r
+ static void RestoreClipboardData(const int nID = 0);\r
+ static void CaptureClipboardData(const int nID = 0, const BOOL bTextOnly = FALSE);\r
+ static CArray<CClipboardSnap *, CClipboardSnap *> m_oClipboardData;\r
+ static int SystemMenuEdit(const CONSOLE_MENU_EDIT nDown);\r
+ static int Click(const POINT* const pClickPoint);\r
+ static int SystemMenu(const CONSOLE_MENU nDown);\r
+ static BOOL m_bTemporarilyDisableXKeymacs;\r
+ static int Maximize(MAXIMIZE_DIRECTION direction);\r
+ static DWORD DeactivateMark();\r
+ static BOOL m_bFirstFindDialog;\r
+ static BOOL SetCaretPosition();\r
+ static void GetCaretPosition();\r
+ static CPtrList m_FindText;\r
+ static CPtrList m_ScrollInfo;\r
+ static CPtrList m_CaretPos;\r
+ static void Copy_();\r
+ static BYTE GetDirectionBackwardKey();\r
+ static BYTE GetDirectionForwardKey();\r
+ static BYTE GetSearchOptionKey();\r
+ static BYTE GetFindWhatKey();\r
+ static void OpenFindDialog();\r
+ static BOOL m_bC_;\r
+ static void CdSdKduSuCu(BYTE bVk);\r
+ static int (*m_LastKillCommand)();\r
+ static int (*m_LastCommand)();\r
+ static void SetInputMethodOpenStatus(INPUT_METHOD_OPEN_STATUS status, BOOL isComplete = FALSE);\r
+ static void SetSearchDirection(SEARCH_DIRECTION direction = m_SearchDirection);\r
+ static SEARCH_DIRECTION m_SearchDirection;\r
+ static int Search(SEARCH_DIRECTION direction);\r
+ static void DecreaseNumericArgument();\r
+ static BOOL CopyBackCharacter();\r
+ static BOOL CopyNextCharacter();\r
+ static BOOL m_bC_u;\r
+ static BOOL m_bNegativeNumericArgument;\r
+ static BOOL m_bDefaultNumericArgument;\r
+ static BOOL m_bM_x;\r
+ static BOOL m_bM_;\r
+ static BOOL m_bC_x;\r
+ static DWORD ClickCaret();\r
+ static BOOL m_bSetMark;\r
+ static void ReleaseKey(BYTE bVk);\r
+ static void DepressKey(BYTE bVk);\r
+ static void SdKduSu(BYTE bVk1, BYTE bVk2 = 0, BYTE bVk3 = 0, BYTE bVk4 = 0);\r
+ static void AdSdKduSuAu(BYTE bVk1);\r
+ static void AdKduAu(BYTE bVk1, BYTE bVk2 = 0, BYTE bVk3 = 0);\r
+ static void CdKduCu(BYTE bVk1, BYTE bVk2 = 0);\r
+ static void Kdu(BYTE bVk1 = 0, BYTE bVk2 = 0, BYTE bVk3 = 0, BYTE bVk4 = 0);\r
+ static DWORD m_nNumericArgument;\r
+ static void Su();\r
+ static BOOL m_bIsSu;\r
+};\r
+\r
+enum { MAX_KEY_BIND = 8 };\r
+\r
+typedef struct Command\r
+{\r
+ LPCTSTR szCommandName;\r
+ int nCategoryID;\r
+ int nDescriptionID;\r
+ int nToolTipID;\r
+ int (*fCommand)();\r
+ KeyBind_t keybind[MAX_KEY_BIND];\r
+} Command_t;\r
+\r
+#include "../xkeymacs/resource.h"\r
+\r
+static const Command_t Commands[] = {\r
+ {_T("[unassigned]"), 0, 0, 0, NULL, {'\0'}},\r
+ {_T("C-x"), 0, IDS_CONTROL_X_PREFIX_D, IDS_CONTROL_X_PREFIX_T, CCommands::C_x, {'\0'}},\r
+ {_T("C-"), IDS_OTHER, IDS_CONTROL_D, IDS_CONTROL_T, CCommands::C_, {{NONE, VK_CONTROL, 0},\r
+ {NONE, VK_LCONTROL, 0},\r
+ {NONE, VK_RCONTROL, 0},\r
+ {'\0'}}},\r
+ {_T("C- for Eisu"), 0, IDS_CONTROL_PREFIX_D, IDS_CONTROL_PREFIX_T, CCommands::C_Eisu, {'\0'}},\r
+ {_T("Caps Lock"), IDS_OTHER, IDS_CAPS_LOCK_D, IDS_CAPS_LOCK_T, CCommands::CapsLock, {'\0'}},\r
+ {_T("Close Input Method"), IDS_IME, IDS_CLOSE_INPUT_METHOD_D, IDS_CLOSE_INPUT_METHOD_T, CCommands::CloseInputMethod, {'\0'}},\r
+ {_T("Complete & Close Input Method"), IDS_IME, IDS_COMPLETE_CLOSE_INPUT_METHOD_D, IDS_COMPLETE_CLOSE_INPUT_METHOD_T, CCommands::CompleteCloseInputMethod,{'\0'}},\r
+ {_T("Complete & Toggle Input Method"), IDS_IME, IDS_COMPLETE_TOGGLE_INPUT_METHOD_D, IDS_COMPLETE_TOGGLE_INPUT_METHOD_T, CCommands::CompleteToggleInputMethod, {'\0'}},\r
+ {_T("Copy"), IDS_OTHER, IDS_COPY_D, IDS_COPY_T, CCommands::Copy, {'\0'}},\r
+ {_T("Cut"), IDS_OTHER, IDS_CUT_D, IDS_CUT_T, CCommands::Cut, {'\0'}},\r
+ {_T("Cycle items"), IDS_OTHER, IDS_CYCLE_ITEMS_D, IDS_CYCLE_ITEMS_T, CCommands::CycleItems, {'\0'}},\r
+ {_T("Cycle items inversely"), IDS_OTHER, IDS_CYCLE_ITEMS_INVERSELY_D, IDS_CYCLE_ITEMS_INVERSELY_T, CCommands::CycleItemsInversely, {'\0'}},\r
+ {_T("Disable XKeymacs"), IDS_OTHER, IDS_DISABLE_XKEYMACS_D, IDS_DISABLE_XKEYMACS_T, CCommands::DisableXKeymacs, {'\0'}},\r
+ {_T("Enable or Disable XKeymacs"), IDS_OTHER, IDS_ENABLE_OR_DISABLE_XKEYMACS_D, IDS_ENABLE_OR_DISABLE_XKEYMACS_T, CCommands::EnableOrDisableXKeymacs, {{CONTROL, 'Q', IDC_CQ},\r
+ {CONTROL+SHIFT, 'Q', IDC_CQ},\r
+ {'\0'}}},\r
+ {_T("Enable XKeymacs"), IDS_OTHER, IDS_ENABLE_XKEYMACS_D, IDS_ENABLE_XKEYMACS_T, CCommands::EnableXKeymacs, {'\0'}},\r
+ {_T("newline"), IDS_OTHER, IDS_NEWLINE_D, IDS_NEWLINE_T, CCommands::Newline, {{CONTROL, 'M', IDC_CM},\r
+ {CONTROL+SHIFT, 'M', IDC_CM},\r
+ {'\0'}}},\r
+ {_T("Esc"), IDS_OTHER, IDS_ESCAPE_D, IDS_ESCAPE_T, CCommands::Escape, {'\0'}},\r
+ {_T("Find"), IDS_OTHER, IDS_FIND_D, IDS_FIND_T, CCommands::Find, {'\0'}},\r
+ {_T("Find Next"), IDS_OTHER, IDS_FIND_NEXT_D, IDS_FIND_NEXT_T, CCommands::FindNext, {'\0'}},\r
+ {_T("Ignore"), IDS_OTHER, IDS_IGNORE_D, IDS_IGNORE_T, CCommands::Ignore, {'\0'}},\r
+ {_T("Kill Line for All Format"), IDS_OTHER, IDS_KILL_LINE_FOR_ALL_FORMAT_D, IDS_KILL_LINE_FOR_ALL_FORMAT_T, CCommands::KillLineForAllFormat, {'\0'}},\r
+ {_T("Maximize"), IDS_OTHER, IDS_MAXIMIZE_D, IDS_MAXIMIZE_T, CCommands::Maximize, {'\0'}},\r
+ {_T("Maximize Horizontally"), IDS_OTHER, IDS_MAXIMIZE_HORIZONTALLY_D, IDS_MAXIMIZE_HORIZONTALLY_T, CCommands::MaximizeHorizontally, {'\0'}},\r
+ {_T("Maximize Vertically"), IDS_OTHER, IDS_MAXIMIZE_VERTICALLY_D, IDS_MAXIMIZE_VERTICALLY_T, CCommands::MaximizeVertically, {'\0'}},\r
+ {_T("Meta"), IDS_OTHER, IDS_META_PREFIX_D, IDS_META_PREFIX_T, CCommands::Meta, {{CONTROL, 0xDB, IDC_SQUARE_BRA},\r
+ {'\0'}}}, // VK_OEM_4\r
+ {_T("Meta for Alt"), IDS_OTHER, IDS_META_D, IDS_META_T, CCommands::MetaAlt, {{NONE, VK_MENU, IDC_ALT},\r
+ {NONE, VK_LMENU, IDC_LEFT_ALT},\r
+ {NONE, VK_RMENU, IDC_RIGHT_ALT},\r
+ {'\0'}}},\r
+ {_T("Meta for Escape"), IDS_OTHER, IDS_META_PREFIX_AND_ORIGINAL_D, IDS_META_PREFIX_AND_ORIGINAL_T, CCommands::MetaEscape, {{NONE, VK_ESCAPE, IDC_ESCAPE},\r
+ {NONE+SHIFT, VK_ESCAPE, IDC_ESCAPE},\r
+ {'\0'}}}, // add SHIFT\r
+ {_T("Minimize"), IDS_OTHER, IDS_MINIMIZE_D, IDS_MINIMIZE_T, CCommands::Minimize, {'\0'}},\r
+ {_T("Move"), IDS_OTHER, IDS_MOVE_D, IDS_MOVE_T, CCommands::Move, {'\0'}},\r
+ {_T("New"), IDS_OTHER, IDS_NEW_D, IDS_NEW_T, CCommands::New, {'\0'}},\r
+ {_T("One Shot Modifier Alt"), IDS_MODIFIER, IDS_OSMODIFIER_ALT_D, IDS_OSMODIFIER_ALT_T, CCommands::OneShotModifierAlt, {'\0'}},\r
+ {_T("One Shot Modifier Alt with Repeat"), IDS_MODIFIER, IDS_OSMODIFIER_ALT_REPEAT_D, IDS_OSMODIFIER_ALT_REPEAT_T, CCommands::OneShotModifierAltRepeat, {'\0'}},\r
+ {_T("One Shot Modifier Ctrl"), IDS_MODIFIER, IDS_OSMODIFIER_CTRL_D, IDS_OSMODIFIER_CTRL_T, CCommands::OneShotModifierCtrl, {'\0'}},\r
+ {_T("One Shot Modifier Ctrl with Repeat"), IDS_MODIFIER, IDS_OSMODIFIER_CTRL_REPEAT_D, IDS_OSMODIFIER_CTRL_REPEAT_T, CCommands::OneShotModifierCtrlRepeat, {'\0'}},\r
+ {_T("One Shot Modifier Shift"), IDS_MODIFIER, IDS_OSMODIFIER_SHIFT_D, IDS_OSMODIFIER_SHIFT_T, CCommands::OneShotModifierShift, {'\0'}},\r
+ {_T("One Shot Modifier Shift with Repeat"), IDS_MODIFIER, IDS_OSMODIFIER_SHIFT_REPEAT_D, IDS_OSMODIFIER_SHIFT_REPEAT_T, CCommands::OneShotModifierShiftRepeat, {'\0'}},\r
+ {_T("Open Input Method"), IDS_IME, IDS_OPEN_INPUT_METHOD_D, IDS_OPEN_INPUT_METHOD_T, CCommands::OpenInputMethod, {'\0'}},\r
+ {_T("Pass Through"), IDS_OTHER, IDS_PASS_THROUGH_D, IDS_PASS_THROUGH_T, CCommands::PassThrough, {'\0'}},\r
+ {_T("Paste"), IDS_OTHER, IDS_PASTE_D, IDS_PASTE_T, CCommands::Paste, {'\0'}},\r
+ {_T("Print"), IDS_OTHER, IDS_PRINT_D, IDS_PRINT_T, CCommands::Print, {'\0'}},\r
+ {_T("Redo"), IDS_OTHER, IDS_REDO_D, IDS_REDO_T, CCommands::Redo, {'\0'}},\r
+ {_T("Restore"), IDS_OTHER, IDS_RESTORE_D, IDS_RESTORE_T, CCommands::Restore, {'\0'}},\r
+ {_T("Retop"), IDS_OTHER, IDS_RETOP_D, IDS_RETOP_T, CCommands::Retop, {'\0'}},\r
+ {_T("Roll-up/Unroll"), IDS_WINDOW, IDS_ROLL_UP_UNROLL_D, IDS_ROLL_UP_UNROLL_T, CCommands::RollUpUnroll, {{META, VK_F12, IDC_MF12},\r
+ {'\0'}}},\r
+ {_T("Select All"), IDS_OTHER, IDS_SELECT_ALL_D, IDS_SELECT_ALL_T, CCommands::SelectAll, {'\0'}},\r
+ {_T("Size"), IDS_OTHER, IDS_SIZE_D, IDS_SIZE_T, CCommands::Size, {'\0'}},\r
+ {_T("Switch Between Input Locales"),IDS_IME, IDS_SWITCH_BETWEEN_INPUT_LOCALES_D, IDS_SWITCH_BETWEEN_INPUT_LOCALES_T, CCommands::SwitchBetweenInputLocales, {'\0'}},\r
+ {_T("Temporarily Disable XKeymacs"),IDS_OTHER, IDS_TEMPORARILY_DISABLE_XKEYMACS_D, IDS_TEMPORARILY_DISABLE_XKEYMACS_T, CCommands::TemporarilyDisableXKeymacs, {'\0'}},\r
+ {_T("~"), IDS_OTHER, IDS_TILDE_D, IDS_TILDE_T, CCommands::Tilde, {'\0'}},\r
+ {_T("`"), IDS_OTHER, IDS_BACK_QUOTE_D, IDS_BACK_QUOTE_T, CCommands::BackQuote, {'\0'}},\r
+ {_T("_"), IDS_OTHER, IDS_UNDERSCORE_D, IDS_UNDERSCORE_T, CCommands::Underscore, {'\0'}},\r
+ {_T("backward-char"), IDS_MOTION, IDS_BACKWARD_CHAR_D, IDS_BACKWARD_CHAR_T, CCommands::BackwardChar, {{CONTROL, 'B', IDC_CB},\r
+ {CONTROL+SHIFT, 'B', IDC_CB},\r
+ {'\0'}}},\r
+ {_T("backward-kill-word"), IDS_KILL, IDS_BACKWARD_KILL_WORD_D, IDS_BACKWARD_KILL_WORD_T, CCommands::BackwardKillWord, {{META, VK_BACK, IDC_MDEL},\r
+ {META+SHIFT, VK_BACK, IDC_MDEL},\r
+ {'\0'}}},\r
+ {_T("backward-word"), IDS_MOTION, IDS_BACKWARD_WORD_D, IDS_BACKWARD_WORD_T, CCommands::BackwardWord, {{META, 'B', IDC_MB},\r
+ {META+SHIFT, 'B', IDC_MB},\r
+ {'\0'}}},\r
+ {_T("beginning-of-buffer"), IDS_MOTION, IDS_BEGINNING_OF_BUFFER_D, IDS_BEGINNING_OF_BUFFER_T, CCommands::BeginningOfBuffer, {{META+SHIFT, 0xBC, IDC_MSCOMMA},\r
+ {'\0'}}}, // VK_OEM_COMMA\r
+ {_T("beginning-of-line"), IDS_MOTION, IDS_BEGINNING_OF_LINE_D, IDS_BEGINNING_OF_LINE_T, CCommands::BeginningOfLine, {{CONTROL, 'A', IDC_CA},\r
+ {CONTROL+SHIFT, 'A', IDC_CA},\r
+ {'\0'}}},\r
+ {_T("call-last-kbd-macro"), IDS_OTHER, IDS_CALL_LAST_KBD_MACRO_D, IDS_CALL_LAST_KBD_MACRO_T, CCommands::CallLastKbdMacro, {{CONTROLX, 'E', IDC_CXE},\r
+ {CONTROLX+SHIFT, 'E', IDC_CXE},\r
+ {'\0'}}},\r
+ {_T("capitalize-word"), IDS_OTHER, IDS_CAPITALIZE_WORD_D, IDS_CAPITALIZE_WORD_T, CCommands::CapitalizeWord, {{META, 'C', IDC_MC},\r
+ {META+SHIFT, 'C', IDC_MC},\r
+ {'\0'}}},\r
+ {_T("delete-backward-char"), IDS_KILL, IDS_DELETE_BACKWARD_CHAR_D, IDS_DELETE_BACKWARD_CHAR_T, CCommands::DeleteBackwardChar, {{CONTROL, 'H', IDC_CH},\r
+ {CONTROL+SHIFT, 'H', IDC_CH},\r
+ {'\0'}}},\r
+ {_T("delete-char"), IDS_KILL, IDS_DELETE_CHAR_D, IDS_DELETE_CHAR_T, CCommands::DeleteChar, {{CONTROL, 'D', IDC_CD},\r
+ {CONTROL+SHIFT, 'D', IDC_CD},\r
+ {'\0'}}},\r
+ {_T("downcase-word"), IDS_OTHER, IDS_DOWNCASE_WORD_D, IDS_DOWNCASE_WORD_T, CCommands::DowncaseWord, {{META, 'L', IDC_ML},\r
+ {META+SHIFT, 'L', IDC_ML},\r
+ {'\0'}}},\r
+ {_T("end-kbd-macro"), IDS_OTHER, IDS_END_KBD_MACRO_D, IDS_END_KBD_MACRO_T, CCommands::EndKbdMacro, {{CONTROLX+SHIFT, '0', IDC_CXS0},\r
+ {'\0'}}},\r
+ {_T("end-of-buffer"), IDS_MOTION, IDS_END_OF_BUFFER_D, IDS_END_OF_BUFFER_T, CCommands::EndOfBuffer, {{META+SHIFT, 0xBE, IDC_MSPERIOD},\r
+ {'\0'}}}, // VK_OEM_PERIOD\r
+ {_T("end-of-line"), IDS_MOTION, IDS_END_OF_LINE_D, IDS_END_OF_LINE_T, CCommands::EndOfLine, {{CONTROL, 'E', IDC_CE},\r
+ {CONTROL+SHIFT, 'E', IDC_CE},\r
+ {'\0'}}},\r
+ {_T("execute-extended-command"), IDS_OTHER, IDS_EXECUTE_EXTENDED_COMMAND_D, IDS_EXECUTE_EXTENDED_COMMAND_T, CCommands::ExecuteExtendedCommand, {{META, 'X', IDC_MX},\r
+ {META+SHIFT, 'X', IDC_MX},\r
+ {'\0'}}},\r
+// {_T("fill-paragraph"), IDS_OTHER, IDS_FILL_PARAGRAPH_D, IDS_FILL_PARAGRAPH_T, CCommands::FillParagraph, {'\0'}},\r
+ {_T("find-file"), IDS_FILES, IDS_FIND_FILE_D, IDS_FIND_FILE_T, CCommands::FindFile, {{CONTROL+CONTROLX, 'F', IDC_CXCF},\r
+ {CONTROL+SHIFT+CONTROLX, 'F', IDC_CXCF},\r
+ {'\0'}}},\r
+ {_T("forward-char"), IDS_MOTION, IDS_FORWARD_CHAR_D, IDS_FORWARD_CHAR_T, CCommands::ForwardChar, {{CONTROL, 'F', IDC_CF},\r
+ {CONTROL+SHIFT, 'F', IDC_CF},\r
+ {'\0'}}},\r
+ {_T("forward-word"), IDS_MOTION, IDS_FORWARD_WORD_D, IDS_FORWARD_WORD_T, CCommands::ForwardWord, {{META, 'F', IDC_MF},\r
+ {META+SHIFT, 'F', IDC_MF},\r
+ {'\0'}}},\r
+ {_T("iconify-or-deiconify-frame"), IDS_WINDOW, IDS_ICONIFY_OR_DEICONIFY_FRAME_D, IDS_ICONIFY_OR_DEICONIFY_FRAME_T, CCommands::IconifyOrDeiconifyFrame, {{CONTROL, 'Z', IDC_CZ},\r
+ {CONTROL+SHIFT, 'Z', IDC_CZ},\r
+ {'\0'}}},\r
+ {_T("isearch-backward"), IDS_SEARCH, IDS_ISEARCH_BACKWARD_D, IDS_ISEARCH_BACKWARD_T, CCommands::IsearchBackward, {{CONTROL, 'R', IDC_CR},\r
+ {CONTROL+SHIFT, 'R', IDC_CR},\r
+ {'\0'}}},\r
+ {_T("isearch-forward"), IDS_SEARCH, IDS_ISEARCH_FORWARD_D, IDS_ISEARCH_FORWARD_T, CCommands::IsearchForward, {{CONTROL, 'S', IDC_CS},\r
+ {CONTROL+SHIFT, 'S', IDC_CS},\r
+ {'\0'}}},\r
+ {_T("keyboard-quit"), IDS_RECOVERY, IDS_KEYBOARD_QUIT_D, IDS_KEYBOARD_QUIT_T, CCommands::KeyboardQuit, {{CONTROL, 'G', IDC_CG},\r
+ {CONTROL+SHIFT, 'G', IDC_CG},\r
+ {'\0'}}},\r
+ {_T("kill-buffer"), IDS_FILES, IDS_KILL_BUFFER_D, IDS_KILL_BUFFER_T, CCommands::KillBuffer, {{CONTROLX, 'K', IDC_CXK},\r
+ {SHIFT+CONTROLX, 'K', IDC_CXK},\r
+ {'\0'}}},\r
+ {_T("kill-line"), IDS_KILL, IDS_KILL_LINE_D, IDS_KILL_LINE_T, CCommands::KillLine, {{CONTROL, 'K', IDC_CK},\r
+ {CONTROL+SHIFT, 'K', IDC_CK},\r
+ {'\0'}}},\r
+ {_T("kill-region"), IDS_KILL, IDS_KILL_REGION_D, IDS_KILL_REGION_T, CCommands::KillRegion, {{CONTROL, 'W', IDC_CW},\r
+ {CONTROL+SHIFT, 'W', IDC_CW},\r
+ {'\0'}}},\r
+ {_T("kill-ring-save"), IDS_KILL, IDS_KILL_RING_SAVE_D, IDS_KILL_RING_SAVE_T, CCommands::KillRingSave, {{META, 'W', IDC_MW},\r
+ {META+SHIFT, 'W', IDC_MW},\r
+ {'\0'}}},\r
+ {_T("kill-word"), IDS_KILL, IDS_KILL_WORD_D, IDS_KILL_WORD_T, CCommands::KillWord, {{META, 'D', IDC_MD},\r
+ {META+SHIFT, 'D', IDC_MD},\r
+ {'\0'}}},\r
+ {_T("mark-page"), IDS_OTHER, IDS_MARK_PAGE_D, IDS_MARK_PAGE_T, CCommands::MarkPage, {{CONTROL+CONTROLX, 'P', IDC_CXCP},\r
+ {CONTROL+SHIFT+CONTROLX, 'P', IDC_CXCP},\r
+ {'\0'}}},\r
+ {_T("mark-whole-buffer"), IDS_OTHER, IDS_MARK_WHOLE_BUFFER_D, IDS_MARK_WHOLE_BUFFER_T, CCommands::MarkWholeBuffer, {{CONTROLX, 'H', IDC_CXH},\r
+ {CONTROLX+SHIFT, 'H', IDC_CXH},\r
+ {'\0'}}},\r
+ {_T("next-line"), IDS_MOTION, IDS_NEXT_LINE_D, IDS_NEXT_LINE_T, CCommands::NextLine, {{CONTROL, 'N', IDC_CN},\r
+ {CONTROL+SHIFT, 'N', IDC_CN},\r
+ {'\0'}}},\r
+ {_T("numeric argument 0"), IDS_OTHER, IDS_DIGIT_ARGUMENT0_D, IDS_DIGIT_ARGUMENT0_T, CCommands::NumericArgument0, {{CONTROL, '0', IDC_CDIGIT},\r
+ {META, '0', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 1"), IDS_OTHER, IDS_DIGIT_ARGUMENT1_D, IDS_DIGIT_ARGUMENT1_T, CCommands::NumericArgument1, {{CONTROL, '1', IDC_CDIGIT},\r
+ {META, '1', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 2"), IDS_OTHER, IDS_DIGIT_ARGUMENT2_D, IDS_DIGIT_ARGUMENT2_T, CCommands::NumericArgument2, {{CONTROL, '2', IDC_CDIGIT},\r
+ {META, '2', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 3"), IDS_OTHER, IDS_DIGIT_ARGUMENT3_D, IDS_DIGIT_ARGUMENT3_T, CCommands::NumericArgument3, {{CONTROL, '3', IDC_CDIGIT},\r
+ {META, '3', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 4"), IDS_OTHER, IDS_DIGIT_ARGUMENT4_D, IDS_DIGIT_ARGUMENT4_T, CCommands::NumericArgument4, {{CONTROL, '4', IDC_CDIGIT},\r
+ {META, '4', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 5"), IDS_OTHER, IDS_DIGIT_ARGUMENT5_D, IDS_DIGIT_ARGUMENT5_T, CCommands::NumericArgument5, {{CONTROL, '5', IDC_CDIGIT},\r
+ {META, '5', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 6"), IDS_OTHER, IDS_DIGIT_ARGUMENT6_D, IDS_DIGIT_ARGUMENT6_T, CCommands::NumericArgument6, {{CONTROL, '6', IDC_CDIGIT},\r
+ {META, '6', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 7"), IDS_OTHER, IDS_DIGIT_ARGUMENT7_D, IDS_DIGIT_ARGUMENT7_T, CCommands::NumericArgument7, {{CONTROL, '7', IDC_CDIGIT},\r
+ {META, '7', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 8"), IDS_OTHER, IDS_DIGIT_ARGUMENT8_D, IDS_DIGIT_ARGUMENT8_T, CCommands::NumericArgument8, {{CONTROL, '8', IDC_CDIGIT},\r
+ {META, '8', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument 9"), IDS_OTHER, IDS_DIGIT_ARGUMENT9_D, IDS_DIGIT_ARGUMENT9_T, CCommands::NumericArgument9, {{CONTROL, '9', IDC_CDIGIT},\r
+ {META, '9', IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("numeric argument -"), IDS_OTHER, IDS_NEGATIVE_ARGUMENT_D, IDS_NEGATIVE_ARGUMENT_T, CCommands::NumericArgumentMinus, {{CONTROL, 0xBD, IDC_CDIGIT},\r
+ {META, 0xBD, IDC_CDIGIT},\r
+ {'\0'}}},\r
+ {_T("open-line"), IDS_OTHER, IDS_OPEN_LINE_D, IDS_OPEN_LINE_T, CCommands::OpenLine, {{CONTROL, 'O', IDC_CO},\r
+ {CONTROL+SHIFT, 'O', IDC_CO},\r
+ {'\0'}}},\r
+ {_T("previous-line"), IDS_MOTION, IDS_PREVIOUS_LINE_D, IDS_PREVIOUS_LINE_T, CCommands::PreviousLine, {{CONTROL, 'P', IDC_CP},\r
+ {CONTROL+SHIFT, 'P', IDC_CP},\r
+ {'\0'}}},\r
+ {_T("query-replace"), IDS_SEARCH, IDS_QUERY_REPLACE_D, IDS_QUERY_REPLACE_T, CCommands::QueryReplace, {{META+SHIFT, '5', IDC_MS5},\r
+ {'\0'}}},\r
+ {_T("query-replace-regexp"), IDS_SEARCH, IDS_QUERY_REPLACE_REGEXP_D, IDS_QUERY_REPLACE_REGEXP_T, CCommands::QueryReplaceRegexp, {{CONTROL+META+SHIFT, '5', IDC_CMS5},\r
+ {'\0'}}},\r
+ {_T("recenter"), IDS_MOTION, IDS_RECENTER_D, IDS_RECENTER_T, CCommands::Recenter, {{CONTROL, 'L', IDC_CL},\r
+ {CONTROL+SHIFT, 'L', IDC_CL},\r
+ {'\0'}}},\r
+ {_T("save-buffer"), IDS_FILES, IDS_SAVE_BUFFER_D, IDS_SAVE_BUFFER_T, CCommands::SaveBuffer, {{CONTROL+CONTROLX, 'S', IDC_CXCS},\r
+ {CONTROL+SHIFT+CONTROLX, 'S', IDC_CXCS},\r
+ {'\0'}}},\r
+ {_T("save-buffers-kill-emacs"), IDS_WINDOW, IDS_SAVE_BUFFERS_KILL_EMACS_D, IDS_SAVE_BUFFERS_KILL_EMACS_T, CCommands::SaveBuffersKillEmacs, {{CONTROL+CONTROLX, 'C', IDC_CXCC},\r
+ {CONTROL+SHIFT+CONTROLX, 'C', IDC_CXCC},\r
+ {'\0'}}},\r
+ {_T("scroll-down"), IDS_MOTION, IDS_SCROLL_DOWN_D, IDS_SCROLL_DOWN_T, CCommands::ScrollDown, {{META, 'V', IDC_MV},\r
+ {META+SHIFT, 'V', IDC_MV},\r
+ {'\0'}}},\r
+ {_T("scroll-up"), IDS_MOTION, IDS_SCROLL_UP_D, IDS_SCROLL_UP_T, CCommands::ScrollUp, {{CONTROL, 'V', IDC_CV},\r
+ {CONTROL+SHIFT, 'V', IDC_CV},\r
+ {'\0'}}},\r
+ {_T("set-mark-command"), IDS_OTHER, IDS_SET_MARK_COMMAND_D, IDS_SET_MARK_COMMAND_T, CCommands::SetMarkCommand, {{CONTROL, VK_SPACE, IDC_CSPACE},\r
+ {CONTROL+SHIFT, VK_SPACE, IDC_CSPACE},\r
+ {'\0'}}},\r
+ {_T("shell-command"), IDS_OTHER, IDS_SHELL_COMMAND_D, IDS_SHELL_COMMAND_T, CCommands::ShellCommand, {{META+SHIFT, '1', IDC_MS1},\r
+ {'\0'}}},\r
+ {_T("start-kbd-macro"), IDS_OTHER, IDS_START_KBD_MACRO_D, IDS_START_KBD_MACRO_T, CCommands::StartKbdMacro, {{CONTROLX+SHIFT, '9', IDC_CXS9},\r
+ {'\0'}}},\r
+ {_T("switch-to-buffer"), IDS_OTHER, IDS_SWITCH_TO_BUFFER_D, IDS_SWITCH_TO_BUFFER_T, CCommands::SwitchToBuffer, {{CONTROLX, 'B', IDC_CXB},\r
+ {CONTROLX+SHIFT, 'B', IDC_CXB},\r
+ {'\0'}}},\r
+ {_T("tab-to-tab-stop"), IDS_OTHER, IDS_TAB_D, IDS_TAB_T, CCommands::TabToTabStop, {{CONTROL, 'I', IDC_CI},\r
+ {CONTROL+SHIFT, 'I', IDC_CI},\r
+ {META, 'I', IDC_MI},\r
+ {META+SHIFT, 'I', IDC_MI},\r
+ {'\0'}}},\r
+ {_T("toggle-input-method"), IDS_IME, IDS_TOGGLE_WIN32IME_MODE_D, IDS_TOGGLE_WIN32IME_MODE_T, CCommands::ToggleInputMethod, {{CONTROL+CONTROLX, 'J', IDC_CXCJ},\r
+ {CONTROL+SHIFT+CONTROLX, 'J', IDC_CXCJ},\r
+ {CONTROL, 'O', IDC_CO2},\r
+ {CONTROL+SHIFT, 'O', IDC_CO2},\r
+ {CONTROL, 0xDC, IDC_CBACKSLASH},\r
+ {CONTROL, 0xE2, IDC_CBACKSLASH_106},\r
+ {'\0'}}},\r
+ {_T("transpose-chars"), IDS_KILL, IDS_TRANSPOSE_CHARS_D, IDS_TRANSPOSE_CHARS_T, CCommands::TransposeChars, {{CONTROL, 'T', IDC_CT},\r
+ {CONTROL+SHIFT, 'T', IDC_CT},\r
+ {'\0'}}},\r
+ {_T("transpose-lines"), IDS_KILL, IDS_TRANSPOSE_LINES_D, IDS_TRANSPOSE_LINES_T, CCommands::TransposeLines, {{CONTROL+CONTROLX, 'T', IDC_CXCT},\r
+ {CONTROL+SHIFT+CONTROLX, 'T', IDC_CXCT},\r
+ {'\0'}}},\r
+ {_T("transpose-words"), IDS_KILL, IDS_TRANSPOSE_WORDS_D, IDS_TRANSPOSE_WORDS_T, CCommands::TransposeWords, {{META, 'T', IDC_MT},\r
+ {META+SHIFT, 'T', IDC_MT},\r
+ {'\0'}}},\r
+ {_T("undo"), IDS_RECOVERY, IDS_UNDO_D, IDS_UNDO_T, CCommands::Undo, {{CONTROLX, 'U', IDC_CXU},\r
+ {CONTROL+SHIFT, 0xBD, IDC_C_},\r
+ {CONTROL, 0xBF, IDC_CSLASH},\r
+ {'\0'}}},\r
+ {_T("universal-argument"), IDS_OTHER, IDS_UNIVERSAL_ARGUMENT_D, IDS_UNIVERSAL_ARGUMENT_T, CCommands::UniversalArgument, {{CONTROL, 'U', IDC_CU},\r
+ {CONTROL+SHIFT, 'U', IDC_CU},\r
+ {'\0'}}},\r
+ {_T("upcase-word"), IDS_OTHER, IDS_UPCASE_WORD_D, IDS_UPCASE_WORD_T, CCommands::UpcaseWord, {{META, 'U', IDC_MU},\r
+ {META+SHIFT, 'U', IDC_MU},\r
+ {'\0'}}},\r
+ {_T("write-file"), IDS_FILES, IDS_WRITE_FILE_D, IDS_WRITE_FILE_T, CCommands::WriteFile, {{CONTROL+CONTROLX, 'W', IDC_CXCW},\r
+ {CONTROL+SHIFT+CONTROLX, 'W', IDC_CXCW},\r
+ {'\0'}}},\r
+ {_T("yank"), IDS_KILL, IDS_YANK_D, IDS_YANK_T, CCommands::Yank, {{CONTROL, 'Y', IDC_CY},\r
+ {CONTROL+SHIFT, 'Y', IDC_CY},\r
+ {'\0'}}},\r
+ {_T("yank-pop"), IDS_KILL, IDS_YANK_POP_D, IDS_YANK_POP_T, CCommands::YankPop, {{META, 'Y', IDC_MY},\r
+ {META+SHIFT, 'Y', IDC_MY},\r
+ {'\0'}}},\r
+};\r
+\r
+#endif // !defined(AFX_COMMANDS_H__3AD9D537_AB40_40BB_9697_35F1BB0CA431__INCLUDED_)\r
--- /dev/null
+// FunctionDefinition.cpp: implementation of the CFunctionDefinition class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "FunctionDefinition.h"\r
+#include "Commands.h"\r
+#include "Utils.h"\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CFunctionDefinition::CFunctionDefinition()\r
+{\r
+\r
+}\r
+\r
+CFunctionDefinition::CFunctionDefinition(CString szSymbol, CString szDefinition)\r
+{\r
+ SetSymbol(szSymbol);\r
+ SetDefinition(szDefinition);\r
+}\r
+\r
+CFunctionDefinition::~CFunctionDefinition()\r
+{\r
+\r
+}\r
+\r
+void CFunctionDefinition::SetSymbol(CString szSymbol)\r
+{\r
+ m_szSymbol = szSymbol;\r
+}\r
+\r
+void CFunctionDefinition::SetDefinition(CString szDefinition)\r
+{\r
+ m_szDefinition = szDefinition;\r
+}\r
+\r
+CString CFunctionDefinition::GetSymbol()\r
+{\r
+ return m_szSymbol;\r
+}\r
+\r
+CString CFunctionDefinition::GetDefinition()\r
+{\r
+ return m_szDefinition;\r
+}\r
+\r
+void CFunctionDefinition::ClearKey(int nApplicationID)\r
+{\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID) {\r
+ return;\r
+ }\r
+\r
+ while (!m_oKey[nApplicationID].IsEmpty()) {\r
+ KeyBind *pKeyBind = (KeyBind *)m_oKey[nApplicationID].GetHead();\r
+ delete pKeyBind;\r
+ pKeyBind = NULL;\r
+ m_oKey[nApplicationID].RemoveHead();\r
+ }\r
+}\r
+\r
+void CFunctionDefinition::SetKey(int nApplicationID, int nCommandType, int nKey)\r
+{\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID) {\r
+ return;\r
+ }\r
+\r
+ try {\r
+ KeyBind *pKeyBind = new KeyBind;\r
+\r
+ if (pKeyBind) {\r
+ pKeyBind->nCommandType = nCommandType;\r
+ pKeyBind->bVk = (BYTE)nKey;\r
+ pKeyBind->nControlID = 0;\r
+\r
+ m_oKey[nApplicationID].AddTail((CObject *)pKeyBind);\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("CFunctionDefinition::SetKey: 'new' threw an exception");\r
+ }\r
+}\r
+\r
+int CFunctionDefinition::GetKeyNumber(int nApplicationID)\r
+{\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID) {\r
+ return 0;\r
+ }\r
+\r
+ return m_oKey[nApplicationID].GetCount();\r
+}\r
+\r
+void CFunctionDefinition::GetKey(int nApplicationID, int nKeyID, int *pCommandType, int *pKey)\r
+{\r
+ *pCommandType = 0;\r
+ *pKey = 0;\r
+\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID) {\r
+ return;\r
+ }\r
+ if (nKeyID < 0 || m_oKey[nApplicationID].GetCount() <= nKeyID) {\r
+ return;\r
+ }\r
+\r
+ KeyBind *pKeyBind = (KeyBind *)m_oKey[nApplicationID].GetAt(m_oKey[nApplicationID].FindIndex(nKeyID));\r
+ *pCommandType = pKeyBind->nCommandType;\r
+ *pKey = pKeyBind->bVk;\r
+}\r
+\r
+void CFunctionDefinition::RemoveKey(int nApplicationID, int nCommandType, int nKey)\r
+{\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID) {\r
+ return;\r
+ }\r
+\r
+ for (POSITION pos = m_oKey[nApplicationID].GetHeadPosition(); pos; ) {\r
+ POSITION currentPos = pos;\r
+ KeyBind *pKeyBind = (KeyBind *)m_oKey[nApplicationID].GetNext(pos);\r
+ if (pKeyBind->nCommandType == nCommandType && pKeyBind->bVk == nKey) {\r
+ delete pKeyBind;\r
+ pKeyBind = NULL;\r
+ m_oKey[nApplicationID].RemoveAt(currentPos);\r
+ break;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+// FunctionDefinition.h: interface for the CFunctionDefinition class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_FUNCTIONDEFINITION_H__22E7286C_E86F_4964_896F_28A66E94A7A2__INCLUDED_)\r
+#define AFX_FUNCTIONDEFINITION_H__22E7286C_E86F_4964_896F_28A66E94A7A2__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#include "xkeymacsdll.h"\r
+\r
+class AFX_EXT_CLASS CFunctionDefinition\r
+{\r
+public:\r
+ void RemoveKey(int nApplicationID, int nCommandType, int nKey);\r
+ void GetKey(int nApplicationID, int nKeyID, int *pCommandType, int *pKey);\r
+ int GetKeyNumber(int nApplicationID);\r
+ void SetKey(int nApplicationID, int nCommandType, int nKey);\r
+ void ClearKey(int nApplicationID);\r
+ CString GetDefinition();\r
+ CString GetSymbol();\r
+ void SetDefinition(CString szDefinition);\r
+ void SetSymbol(CString szSymbol);\r
+ CFunctionDefinition();\r
+ CFunctionDefinition(CString szSymbol, CString szDefinition);\r
+ virtual ~CFunctionDefinition();\r
+\r
+private:\r
+ CObList m_oKey[MAX_APP];\r
+ CString m_szDefinition;\r
+ CString m_szSymbol;\r
+};\r
+\r
+#endif // !defined(AFX_FUNCTIONDEFINITION_H__22E7286C_E86F_4964_896F_28A66E94A7A2__INCLUDED_)\r
--- /dev/null
+// stdafx.cpp : source file that includes just the standard includes\r
+// xkeymacsdll.pch will be the pre-compiled header\r
+// stdafx.obj will contain the pre-compiled type information\r
+\r
+#include "stdafx.h"\r
+\r
+\r
+\r
--- /dev/null
+// stdafx.h : include file for standard system include files,\r
+// or project specific include files that are used frequently, but\r
+// are changed infrequently\r
+//\r
+\r
+#if !defined(AFX_STDAFX_H__AA2B17FB_4840_41A9_896C_D69FA3B6D6FB__INCLUDED_)\r
+#define AFX_STDAFX_H__AA2B17FB_4840_41A9_896C_D69FA3B6D6FB__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers\r
+\r
+#include <afxwin.h> // MFC core and standard components\r
+#include <afxext.h> // MFC extensions\r
+\r
+#ifndef _AFX_NO_OLE_SUPPORT\r
+#include <afxole.h> // MFC OLE classes\r
+#include <afxodlgs.h> // MFC OLE dialog classes\r
+#include <afxdisp.h> // MFC Automation classes\r
+#endif // _AFX_NO_OLE_SUPPORT\r
+\r
+\r
+#ifndef _AFX_NO_DB_SUPPORT\r
+#include <afxdb.h> // MFC ODBC database classes\r
+#endif // _AFX_NO_DB_SUPPORT\r
+\r
+#ifndef _AFX_NO_DAO_SUPPORT\r
+#include <afxdao.h> // MFC DAO database classes\r
+#endif // _AFX_NO_DAO_SUPPORT\r
+\r
+#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls\r
+#ifndef _AFX_NO_AFXCMN_SUPPORT\r
+#include <afxcmn.h> // MFC support for Windows Common Controls\r
+#endif // _AFX_NO_AFXCMN_SUPPORT\r
+\r
+\r
+//{{AFX_INSERT_LOCATION}}\r
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
+\r
+#endif // !defined(AFX_STDAFX_H__AA2B17FB_4840_41A9_896C_D69FA3B6D6FB__INCLUDED_)\r
--- /dev/null
+// Utils.cpp: implementation of the CUtils class\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "stdafx.h"\r
+#include "Utils.h"\r
+#include "../xkeymacs/resource.h"\r
+#include <Imm.h>\r
+#pragma data_seg(".xkmcs")\r
+TCHAR CUtils::m_szApplicationName[MAX_PATH] = {'\0'};\r
+TCHAR CUtils::m_szIMEName[MAX_PATH] = _T("IME"); // IDS_IME_FILE_NAME\r
+OSVERSIONINFO CUtils::m_OsVersionInfo = {sizeof(OSVERSIONINFO)};\r
+#pragma data_seg()\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CUtils::CUtils()\r
+{\r
+\r
+}\r
+\r
+CUtils::~CUtils()\r
+{\r
+\r
+}\r
+\r
+BOOL CUtils::GetFindDialogTitle(CString *szDialogTitle)\r
+{\r
+ {\r
+ TCHAR buf[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), buf, sizeof(buf));\r
+// CUtils::Log(_T("Window Text --%s--"), buf);\r
+ szDialogTitle->Format(_T("%s"), buf);\r
+ }\r
+\r
+ if (!szDialogTitle->Compare(_T("\8c\9f\8dõ")) // notepad, wordpad, IE, regedit, \r
+ // Excel, Front Page, PowerPoint, Acrobat Reader, IBM HPB\r
+ || !szDialogTitle->Compare(_T("Find")) // notepad, Outlook, Outlook Express, Opera\r
+ || !szDialogTitle->Compare(_T("Find in this Page")) // Mozilla\r
+ || !szDialogTitle->Compare(_T("Find/Replace")) // Eclipse\r
+ || !szDialogTitle->Compare(_T("\96{\95¶\93à\8c\9f\8dõ")) // Becky!\r
+ || !szDialogTitle->Compare(_T("\83\81\81[\83\8b\8c\9f\8dõ")) // Becky!\r
+ || !szDialogTitle->Compare(_T("\95¶\8e\9a\97ñ\82Ì\8c\9f\8dõ")) // M$ VC++\r
+ || !szDialogTitle->Compare(_T("\8c\9f\8dõ\82Æ\92u\8a·")) // M$ Word, 123\r
+ || !szDialogTitle->Compare(_T("\95¶\8f\91\82Ì\83e\83L\83X\83g\82Ì\8c\9f\8dõ")) // Lotus Notes\r
+ || !szDialogTitle->Compare(_T("\82±\82Ì\83y\81[\83W\82ð\8c\9f\8dõ")) // Netscape 6\r
+ || !szDialogTitle->Compare(_T("\95¶\8e\9a\97ñ\8c\9f\8dõ")) // Dana\r
+ || !szDialogTitle->Compare(_T("\8c\9f\8dõ/\92u\8a·")) // PHP Editor\r
+ || !szDialogTitle->Compare(_T("\92u\8a·"))\r
+ || !szDialogTitle->Compare(_T("Replace"))) {\r
+ return TRUE;\r
+ }\r
+\r
+ szDialogTitle->Empty();\r
+ return FALSE;\r
+}\r
+\r
+BOOL CUtils::IsFindDialog()\r
+{\r
+ CString szDialogTitle;\r
+ return GetFindDialogTitle(&szDialogTitle);\r
+}\r
+\r
+BOOL CUtils::IsAstecX()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("astecx.exe"));\r
+}\r
+\r
+BOOL CUtils::IsBecky()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("b2.exe"));\r
+}\r
+\r
+BOOL CUtils::IsEmacs()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Emacs.exe"));\r
+}\r
+\r
+BOOL CUtils::IsExplorer()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("explorer.exe"));\r
+}\r
+\r
+BOOL CUtils::IsHidemaru()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("hidemaru.exe"));\r
+}\r
+\r
+BOOL CUtils::IsInternetExplorer()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("iexplore.exe"));\r
+}\r
+\r
+BOOL CUtils::IsLotus123()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("123w.exe"));\r
+}\r
+\r
+BOOL CUtils::IsLotusNotes()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("nlnotes.exe"));\r
+}\r
+\r
+BOOL CUtils::IsLotusWordPro()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("wordpro.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMeadow()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Meadow.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("Meadow95.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("MeadowNT.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMicrosoftFrontPage()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("frontpg.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMicrosoftWord()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("winword.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMozilla()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("mozilla.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMuleForWin32()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("mule.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("mulent.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("mulecd.exe"));\r
+}\r
+\r
+BOOL CUtils::IsNetscape()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("netscp6.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("netscp.exe"));\r
+}\r
+\r
+BOOL CUtils::IsNotepad()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("notepad.exe"));\r
+}\r
+\r
+BOOL CUtils::IsOpera()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("opera.exe"));\r
+}\r
+\r
+BOOL CUtils::IsOutlook()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("outlook.exe"));\r
+}\r
+\r
+BOOL CUtils::IsOutlookExpress()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("msimn.exe"));\r
+}\r
+\r
+BOOL CUtils::IsSakuraEditor()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("sakura.exe"));\r
+}\r
+\r
+BOOL CUtils::IsTeraTermPro()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("ttermpro.exe"));\r
+}\r
+\r
+BOOL CUtils::IsVisualCpp()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("msdev.exe"));\r
+}\r
+\r
+BOOL CUtils::IsWordpad()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("wordpad.exe"));\r
+}\r
+\r
+BOOL CUtils::IsXWin()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("XWin.exe"));\r
+}\r
+\r
+BOOL CUtils::IsXyzzy()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("xyzzy.exe"));\r
+}\r
+\r
+LPCTSTR const CUtils::GetApplicationName()\r
+{\r
+ return m_szApplicationName;\r
+}\r
+\r
+void CUtils::FairConsoleApplicationName(LPTSTR szApplicationName, int nApplicationNameLength, LPTSTR szWindowText, int nWindowTextLength)\r
+{\r
+ if (IsFindDialog()) {\r
+ return;\r
+ }\r
+\r
+ if (*szWindowText == '"' && _tcschr(szWindowText+1, _T('"'))) { // "foo bar" -> foo bar\r
+ int nApplicationName = _tcschr(szWindowText+1, _T('"')) - szWindowText - 1; // length of "foo bar"\r
+ _tcsncpy(szWindowText, szWindowText + 1, nApplicationName);\r
+ memset(szWindowText + nApplicationName, 0, nWindowTextLength - nApplicationName);\r
+ } else if (_tcschr(szWindowText, _T(' '))) { // foo bar -> foo\r
+ LPTSTR pFirstSpace = _tcschr(szWindowText, _T(' '));\r
+ memset(pFirstSpace, 0, nWindowTextLength - (pFirstSpace - szWindowText));\r
+ }\r
+\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("%s"), szWindowText);\r
+\r
+ static LPCTSTR const szExe = _T(".exe");\r
+ if (_tcsnicmp(szApplicationName + _tcslen(szApplicationName) - _tcslen(szExe), szExe, _tcslen(szExe))) {\r
+ _tcscat(szApplicationName, szExe);\r
+ }\r
+}\r
+\r
+// Set real application name in the szApplicationName.\r
+void CUtils::SetCorrectApplicationName(LPTSTR szApplicationName, const int nApplicationNameLength, LPTSTR szWindowText, const int nWindowTextLength)\r
+{\r
+ if (IsConsole(szApplicationName, nApplicationNameLength)) {\r
+ int i = 0;\r
+ static LPCTSTR const szPromptName[] = {_T("Command Prompt"), _T("Mark Command Prompt"), _T("Select Command Prompt"), _T("MS-DOS Prompt"),\r
+ _T("Visual Studio .NET Command Prompt"), _T("Visual Studio .NET 2003 Command Prompt"),\r
+ _T("\83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g"), _T("\94Í\88Í\8ew\92è \83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g"), _T("\91I\91ð \83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g"), _T("MS-DOS \83v\83\8d\83\93\83v\83g"),\r
+ _T("Visual Studio .NET \83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g"), _T("Visual Studio .NET 2003 \83R\83}\83\93\83h \83v\83\8d\83\93\83v\83g")};\r
+ static LPCTSTR const szPromptPath[] = {_T("system32\\cmd.exe")}; // WindowText of Command Prompt is sometimes this style. But MS-DOS Prompt's is always MS-DOS Prompt.\r
+ static LPCTSTR const szSeparator = _T(" - ");\r
+\r
+ for (i = 0; i < sizeof(szPromptName) / sizeof(szPromptName[0]); ++i) {\r
+ if (!_tcsicmp(szWindowText, szPromptName[i])) { // "Command Prompt"\r
+ return;\r
+ }\r
+\r
+ TCHAR sz[0x100] = {'\0'};\r
+ _stprintf(sz, _T("%s%s"), szPromptName[i], szSeparator);\r
+\r
+ if (!_tcsnicmp(szWindowText, sz, _tcslen(sz))) { // "Command Promp - foo"\r
+ _tcscpy(szWindowText, szWindowText + _tcslen(sz));\r
+ FairConsoleApplicationName(szApplicationName, nApplicationNameLength, szWindowText, nWindowTextLength);\r
+ return;\r
+ }\r
+ }\r
+\r
+ for (i = 0; i < sizeof(szPromptPath) / sizeof(szPromptPath[0]); ++i) {\r
+ TCHAR szWindowTextLower[0x100] = {'\0'};\r
+ _tcscpy(szWindowTextLower, szWindowText);\r
+ _tcslwr(szWindowTextLower);\r
+\r
+ if (_tcsstr(szWindowTextLower, szPromptPath[i])) {\r
+ TCHAR sz[0x100] = {'\0'};\r
+ _stprintf(sz, _T("%s%s"), szPromptPath[i], szSeparator);\r
+\r
+ if (_tcsstr(szWindowTextLower, sz)) { // "X:\WINNT\system32\cmd.exe - foo"\r
+ _tcscpy(szWindowText, _tcsstr(szWindowTextLower, sz) + _tcslen(sz));\r
+ FairConsoleApplicationName(szApplicationName, nApplicationNameLength, szWindowText, nWindowTextLength);\r
+ return;\r
+ } else { // "X:\WINNT\system32\cmd.exe"\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (!_tcsicmp(szWindowText, _T("Cygwin Bash Shell"))\r
+ || (*szWindowText == _T('~'))\r
+ || (*szWindowText == _T('/'))) { // Bash\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("bash.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("bash"));\r
+ } else if (!_tcsicmp(szWindowText + _tcslen(szWindowText) - 8, _T(" - pdksh"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("pdksh.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("pdksh"));\r
+ } else if (!_tcsicmp(szWindowText + _tcslen(szWindowText) - 7, _T(" - tcsh"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("tcsh.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("tcsh"));\r
+ } else if (!_tcsicmp(szWindowText + _tcslen(szWindowText) - 6, _T(" - zsh"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("zsh.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("zsh"));\r
+ } else if (!_tcsnicmp(szWindowText, _T("MKS Korn Shell"), 14)\r
+ || !_tcsnicmp(szWindowText, _T("cat"), 3)) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("sh.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("MKS Korn Shell"));\r
+ } else if (!_tcsnicmp(szWindowText + 1, _T(":/"), 2)\r
+ || !_tcsnicmp(szWindowText + 1, _T(":\\"), 2)) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("csh.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("C Shell"));\r
+ } else if (_tcsstr(szWindowText, _T(" - VIM"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("vim.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("VIM"));\r
+ } else if (_tcsstr(szWindowText, _T(" - Poderosa"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("Poderosa.exe"));\r
+ memset(szWindowText, 0, nWindowTextLength);\r
+ _stprintf(szWindowText, _T("Poderosa"));\r
+ } else { // unknown console application\r
+ FairConsoleApplicationName(szApplicationName, nApplicationNameLength, szWindowText, nWindowTextLength);\r
+ }\r
+ } else if (IsJavaW(szApplicationName, nApplicationNameLength)) {\r
+ if (!_tcsicmp(szWindowText + _tcslen(szWindowText) - 19, _T(" - Eclipse Platform"))) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("eclipse.exe"));\r
+ } else if (!_tcsicmp(szWindowText, _T("BlueJ"))\r
+ || !_tcsnicmp(szWindowText, _T("BlueJ: "), 7)) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("bluej.exe"));\r
+ } else if (!_tcsicmp(szWindowText, _T("JUDE"))\r
+ || !_tcsnicmp(szWindowText, _T("JUDE - "), 7)) {\r
+ memset(szApplicationName, 0, nApplicationNameLength);\r
+ _stprintf(szApplicationName, _T("jude.exe"));\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+void CUtils::SetApplicationName(BOOL bImeComposition)\r
+{\r
+// CUtils::Log(_T("SetApplicationName: start"));\r
+\r
+ memset(m_szApplicationName, 0, sizeof(m_szApplicationName));\r
+\r
+ if (_tcscmp(m_szIMEName, _T("IME")) == 0) { // IDS_IME_FILE_NAME\r
+ HKL hKL = GetKeyboardLayout(0);\r
+ if (ImmIsIME(hKL)) {\r
+ if (!ImmGetIMEFileName(hKL, m_szIMEName, sizeof(m_szIMEName))) {\r
+ _tcsncpy(m_szIMEName, _T("IME"), sizeof(m_szIMEName)); // IDS_IME_FILE_NAME\r
+ }\r
+// CUtils::Log(_T("SetApplicationName: m_szIMEName == %s"), m_szIMEName);\r
+ }\r
+ }\r
+\r
+ if (bImeComposition) {\r
+// CUtils::Log(_T("SetApplicationName: bImeComposition"));\r
+\r
+ HKL hKL = GetKeyboardLayout(0);\r
+ if (ImmIsIME(hKL)) {\r
+ if (!ImmGetIMEFileName(hKL, m_szApplicationName, sizeof(m_szApplicationName))) {\r
+ _tcsncpy(m_szApplicationName, m_szIMEName, sizeof(m_szApplicationName));\r
+ }\r
+ _tcsncpy(m_szIMEName, m_szApplicationName, sizeof(m_szIMEName));\r
+ } else {\r
+ // ImmIsIME return 0 on Word2002, Excel2002, etc. with IME2002, so...\r
+ // _tcsncpy(m_szApplicationName, _T("imjp81.ime"), sizeof(m_szApplicationName));\r
+ _tcsncpy(m_szApplicationName, m_szIMEName, sizeof(m_szApplicationName));\r
+ }\r
+ } else {\r
+// CUtils::Log(_T("SetApplicationName: appication (%s)"), m_szApplicationName);\r
+\r
+ GetModuleFileName(NULL, m_szApplicationName, sizeof(m_szApplicationName));\r
+ CString szFn(m_szApplicationName);\r
+ szFn.Delete(0, szFn.ReverseFind(_T('\\')) + 1);\r
+ ZeroMemory(m_szApplicationName, sizeof(m_szApplicationName));\r
+ _tcsncpy(m_szApplicationName, szFn, szFn.GetLength());\r
+\r
+// CUtils::Log(_T("SetApplicationName: appication [%s]"), m_szApplicationName);\r
+\r
+ if (IsConsole()) {\r
+// CUtils::Log(_T("SetApplicationName: console"));\r
+\r
+ memset(m_szApplicationName, 0, sizeof(m_szApplicationName));\r
+ if (IsNT()) {\r
+ _tcscpy(m_szApplicationName, _T("CMD.exe"));\r
+ } else {\r
+ _tcscpy(m_szApplicationName, _T("WINOA386.MOD"));\r
+ }\r
+ TCHAR szWindowText[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+ SetCorrectApplicationName(m_szApplicationName, sizeof(m_szApplicationName), szWindowText, sizeof(szWindowText));\r
+ } else if (IsJavaW()) {\r
+ TCHAR szWindowText[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+ SetCorrectApplicationName(m_szApplicationName, sizeof(m_szApplicationName), szWindowText, sizeof(szWindowText));\r
+ }\r
+ if (!_tcsicmp(m_szApplicationName, _T("Cygwin.exe"))) {\r
+// CUtils::Log(_T("SetApplicationName: cygwin"));\r
+\r
+ memset(m_szApplicationName, 0, sizeof(m_szApplicationName));\r
+ _tcscpy(m_szApplicationName, _T("bash.exe"));\r
+ }\r
+// CUtils::Log(_T("name: %s"), m_szApplicationName);\r
+ }\r
+}\r
+\r
+void CUtils::SetIMEName()\r
+{\r
+ HKL hKL = GetKeyboardLayout(0);\r
+ if (ImmIsIME(hKL)) {\r
+ ImmGetIMEFileName(hKL, m_szIMEName, sizeof(m_szIMEName));\r
+ }\r
+}\r
+\r
+void CUtils::InitCUtils()\r
+{\r
+ GetVersionEx(&m_OsVersionInfo);\r
+ SetIMEName();\r
+}\r
+\r
+BOOL CUtils::IsNTor9x()\r
+{\r
+ return ((m_OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) && (m_OsVersionInfo.dwMajorVersion <= 4))\r
+ || (m_OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);\r
+}\r
+\r
+BOOL CUtils::IsXPorLater()\r
+{\r
+ return 5 < m_OsVersionInfo.dwMajorVersion\r
+ || 5 == m_OsVersionInfo.dwMajorVersion && 1 <= m_OsVersionInfo.dwMinorVersion;\r
+}\r
+\r
+BOOL CUtils::IsNT()\r
+{\r
+ return m_OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;\r
+}\r
+\r
+BOOL CUtils::OpenClipboard()\r
+{\r
+ const int RETRY_COUNT = 0x10;\r
+\r
+ BOOL bOpened = FALSE;\r
+ for (int i = 0; i <= RETRY_COUNT; ++i) {\r
+ if (::OpenClipboard(NULL)) {\r
+// Log(_T("ok (%d)"), i);\r
+ bOpened = TRUE;\r
+ break;\r
+ } else {\r
+ Sleep(1); // for OpenOffice\r
+// Log(_T("CUtils::OpenClipboard: %d (%d)"), GetLastError(), i);\r
+ }\r
+ }\r
+ ASSERT(bOpened);\r
+ return bOpened;\r
+}\r
+\r
+BOOL CUtils::GetClipboardText(CString *szClipboardText)\r
+{\r
+ if (!szClipboardText) {\r
+ return FALSE;\r
+ }\r
+\r
+ szClipboardText->Empty();\r
+\r
+ if (!OpenClipboard()) {\r
+// CUtils::Log(_T("Cannot open the Clipboard"));\r
+ return FALSE;\r
+ }\r
+\r
+/*\r
+ {\r
+ Log(_T("GetClipboardText"));\r
+ UINT uFormat = 0;\r
+ for (;;) {\r
+ uFormat = EnumClipboardFormats(uFormat);\r
+ if (uFormat) {\r
+ Log(_T("uFormat = %d"), uFormat);\r
+ } else {\r
+ break;\r
+ }\r
+ }\r
+// winuser.h\r
+//#define CF_TEXT 1\r
+//#define CF_METAFILEPICT 3\r
+//#define CF_OEMTEXT 7\r
+//#define CF_UNICODETEXT 13\r
+//#define CF_ENHMETAFILE 14\r
+//#define CF_LOCALE 16\r
+//#define CF_DSPTEXT 0x0081\r
+// OwnerLink 49155\r
+// Native 49156\r
+// DataObject 49161\r
+// Embed Source 49163\r
+// Object Descriptor 49166\r
+// Ole Private Data 49171\r
+// Rich Text Format 49311\r
+// Rich Text Format 49312\r
+// HTML Format 49360\r
+// HTML Format 49361\r
+// Link 49408\r
+// RTF As Text 49595\r
+// Rich Text Format Without Objects 49618\r
+// Star Object Descriptor (XML) 49681\r
+// Star Embed Source (XML) 49708\r
+// HPB HTML Format 49742\r
+ }\r
+*/\r
+\r
+ UINT uFormat = CF_OEMTEXT;\r
+ if (IsSakuraEditor()) {\r
+ uFormat = CF_TEXT;\r
+ }\r
+\r
+ HANDLE hClipboardText;\r
+ if ((hClipboardText = ::GetClipboardData(uFormat)) == NULL) {\r
+// DWORD dw = GetLastError();\r
+// CUtils::Log(_T("Unable to get Clipboard data: %d"), dw);\r
+ CloseClipboard();\r
+ return FALSE;\r
+ }\r
+\r
+ szClipboardText->Format(_T("%s"), hClipboardText);\r
+ EmptyClipboard();\r
+ CloseClipboard();\r
+ return TRUE;\r
+}\r
+\r
+BOOL CUtils::SetClipboardText(CString *szClipboardText)\r
+{\r
+ if (!OpenClipboard()) {\r
+// CUtils::Log(_T("Cannot open the Clipboard in SetClipboardText"));\r
+ return FALSE;\r
+ }\r
+\r
+ int nLength = szClipboardText->GetLength() + 1;\r
+ HGLOBAL hClipboardText = GlobalAlloc(GHND, nLength);\r
+ if (hClipboardText == NULL) {\r
+// CUtils::Log(_T("Failed: GlobalAlloc in SetClipboardText"));\r
+ return FALSE;\r
+ }\r
+\r
+ LPTSTR lpStr = (LPTSTR)GlobalLock(hClipboardText);\r
+ lstrcpyn(lpStr, *szClipboardText, nLength);\r
+ GlobalUnlock(hClipboardText);\r
+ EmptyClipboard();\r
+\r
+ UINT uFormat = CF_OEMTEXT;\r
+ if (IsSakuraEditor()) {\r
+ uFormat = CF_TEXT;\r
+ }\r
+\r
+ if ((hClipboardText = ::SetClipboardData(uFormat, hClipboardText)) == NULL) {\r
+// DWORD dw = GetLastError();\r
+// CUtils::Log(_T("Unable to set Clipboard data: %d"), dw);\r
+ CloseClipboard();\r
+ return FALSE;\r
+ }\r
+\r
+ CloseClipboard();\r
+ return TRUE;\r
+}\r
+\r
+BOOL CUtils::IsDefaultIgnoreApplication()\r
+{\r
+ if (IsAstecX()\r
+ || IsBash()\r
+ || IsCsh()\r
+ || IsEmacs()\r
+ || IsLispWorksPersonalEdition()\r
+ || IsMeadow()\r
+ || IsMuleForWin32()\r
+ || IsPdksh()\r
+ || IsSh()\r
+ || IsTcsh()\r
+ || IsTeraTermPro() && !IsDialog()\r
+ || IsVisualSlickEdit() && !IsDialog()\r
+ || IsXWin()\r
+ || IsXyzzy() && !IsDialog()\r
+ || IsZsh()) {\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+BOOL CUtils::IsDWFM()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("dwfm.exe"));\r
+}\r
+\r
+BOOL CUtils::IsK2Editor()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("K2Editor.exe"));\r
+}\r
+\r
+BOOL CUtils::IsEggExplorer()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("EggExp.exe"));\r
+}\r
+\r
+BOOL CUtils::IsDirector()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Director.exe"));\r
+}\r
+\r
+BOOL CUtils::IsExcel()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Excel.exe"));\r
+}\r
+\r
+BOOL CUtils::IsFireworks()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Fireworks 4.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("Fireworks.exe"));\r
+}\r
+\r
+BOOL CUtils::IsDreamweaver()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Dreamweaver.exe"));\r
+}\r
+\r
+BOOL CUtils::IsFlash()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Flash.exe"));\r
+}\r
+\r
+BOOL CUtils::IsPhotoshop()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Photoshp.exe"));\r
+}\r
+\r
+BOOL CUtils::IsIllustrator()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Illustrator.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMicrosoftPowerPoint()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("PowerPnt.exe"));\r
+}\r
+\r
+BOOL CUtils::IsReget()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Regetdx.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("Regetjr.exe"));\r
+}\r
+\r
+BOOL CUtils::IsPaint()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("mspaint.exe"));\r
+}\r
+\r
+BOOL CUtils::IsConsole()\r
+{\r
+// Log(_T("_%s_"), m_szApplicationName);\r
+ return !m_szApplicationName[0]\r
+ || !_tcsicmp(m_szApplicationName, _T("xkeymacs.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("conime.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("csh.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("WINOA386.MOD"))\r
+ || !_tcsicmp(m_szApplicationName, _T("CMD.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("bash.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("ftp.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("sh.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("telnet.exe"));\r
+}\r
+\r
+BOOL CUtils::IsConsole(LPCTSTR szApplicationName, int nApplicationNameLength)\r
+{\r
+ return !_tcsnicmp(szApplicationName, _T("WINOA386.MOD"), nApplicationNameLength)\r
+ || !_tcsnicmp(szApplicationName, _T("CMD.exe"), nApplicationNameLength);\r
+}\r
+\r
+BOOL CUtils::IsJavaW(LPCTSTR szApplicationName, int nApplicationNameLength)\r
+{\r
+ return !_tcsnicmp(szApplicationName, _T("javaw.exe"), nApplicationNameLength);\r
+}\r
+\r
+BOOL CUtils::IsSleipnir()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Sleipnir.exe"));\r
+}\r
+\r
+BOOL CUtils::IsBash()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("bash.exe"));\r
+}\r
+\r
+// for debug\r
+void CUtils::Log(LPTSTR fmt, ...)\r
+{\r
+ va_list ap;\r
+ va_start(ap, fmt);\r
+\r
+ static const int LOG_MAX = 0x10000;\r
+ TCHAR szLog[LOG_MAX] = {'\0'};\r
+\r
+ for (unsigned int nIndex = 0; nIndex < _tcslen(fmt); ) {\r
+ LPTSTR pNextString = fmt + nIndex;\r
+ LPTSTR pLogEnd = szLog + _tcslen(szLog);\r
+\r
+ if (*pNextString == _T('%')) {\r
+ TCHAR szFormatTag[LOG_MAX] = {'0'};\r
+ _tcscpy(szFormatTag, pNextString);\r
+\r
+ switch (GetFormatTag(szFormatTag)) {\r
+ case _T('d'):\r
+ case _T('i'):\r
+ case _T('o'):\r
+ case _T('x'):\r
+ case _T('X'):\r
+ case _T('u'):\r
+ case _T('c'):\r
+ _stprintf(pLogEnd, szFormatTag, va_arg(ap, int));\r
+ break;\r
+ case _T('s'):\r
+ _stprintf(pLogEnd, szFormatTag, va_arg(ap, LPTSTR));\r
+ break;\r
+ case _T('f'):\r
+ case _T('e'):\r
+ case _T('E'):\r
+ case _T('g'):\r
+ case _T('G'):\r
+ _stprintf(pLogEnd, szFormatTag, va_arg(ap, double));\r
+ break;\r
+ case _T('p'):\r
+ _stprintf(pLogEnd, szFormatTag, va_arg(ap, void *));\r
+ break;\r
+ case _T('n'):\r
+ _stprintf(pLogEnd, szFormatTag, va_arg(ap, int *));\r
+ break;\r
+ case _T('%'):\r
+ default:\r
+ _stprintf(pLogEnd, _T("%s"), szFormatTag);\r
+ break;\r
+ }\r
+\r
+ nIndex += _tcslen(szFormatTag);\r
+ } else {\r
+ TCHAR szString[LOG_MAX] = {'0'};\r
+ _tcscpy(szString, pNextString);\r
+ LPTSTR pString = _tcstok(szString, _T("%"));\r
+ _stprintf(pLogEnd, _T("%s"), pString);\r
+\r
+ nIndex += _tcslen(pString);\r
+ }\r
+ }\r
+\r
+ va_end(ap);\r
+\r
+ static int n = 0;\r
+ TCHAR szPath[MAX_PATH] = {'\0'};\r
+ if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_APPDATA, TRUE)) {\r
+ _tmakepath(szPath, NULL, szPath, _T("xkeylog"), _T("txt"));\r
+ } else {\r
+ _tcscpy(szPath, _T("c:\\xkeylog.txt"));\r
+ }\r
+ FILE *fp = _tfopen(szPath, _T("a"));\r
+ _ftprintf(fp, _T("%8d: %s %s\n"), n++, m_szApplicationName, szLog);\r
+ fflush(fp);\r
+ fclose(fp);\r
+}\r
+\r
+BOOL CUtils::IsSh()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("sh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsCsh()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("csh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsVisualStudioDotNet()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("devenv.exe"));\r
+}\r
+\r
+BOOL CUtils::IsAccess()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("MSACCESS.EXE"));\r
+}\r
+\r
+BOOL CUtils::IsProject()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("WINPROJ.EXE"));\r
+}\r
+\r
+BOOL CUtils::IsVisualBasic()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("VB6.EXE"));\r
+}\r
+\r
+BOOL CUtils::IsVisualBasicEditor()\r
+{\r
+ if (IsVisualBasic()) {\r
+ return TRUE;\r
+ }\r
+\r
+ if (IsAccess()\r
+ || IsExcel()\r
+ || IsMicrosoftFrontPage()\r
+ || IsMicrosoftPowerPoint()\r
+ || IsMicrosoftWord()\r
+ || IsOutlook()\r
+ || IsProject()) {\r
+ TCHAR szWindowText[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+ static LPCTSTR const szVBE = _T("Microsoft Visual Basic - ");\r
+ if (!_tcsnicmp(szWindowText, szVBE, _tcslen(szVBE))) {\r
+ return TRUE;\r
+ }\r
+ }\r
+ return FALSE;\r
+}\r
+\r
+BOOL CUtils::IsEclipse()\r
+{\r
+ TCHAR szWindowText[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), szWindowText, sizeof(szWindowText));\r
+\r
+ LPCTSTR szEclipse = _T(" - Eclipse Platform");\r
+ LPCTSTR szFind = _T("Find/Replace");\r
+\r
+ return IsJavaW()\r
+ && (_tcslen(szEclipse) < _tcslen(szWindowText) && !_tcsicmp(szWindowText + _tcslen(szWindowText) - _tcslen(szEclipse), szEclipse)\r
+ || _tcslen(szFind) == _tcslen(szWindowText) && !_tcsicmp(szWindowText, szFind));\r
+}\r
+\r
+int CUtils::GetClipboardTextLength()\r
+{\r
+ CString szClipboardText;\r
+ CUtils::GetClipboardText(&szClipboardText);\r
+ CUtils::SetClipboardText(&szClipboardText);\r
+\r
+// return sz.GetLength();\r
+\r
+ int nLength = 0;\r
+ for (int i = 0; i < szClipboardText.GetLength(); ++i) {\r
+ if (szClipboardText.GetAt(i) & 0x80) {\r
+ ++i;\r
+ }\r
+ ++nLength;\r
+ }\r
+ return nLength;\r
+}\r
+\r
+BOOL CUtils::IsDialog()\r
+{\r
+ return GetParent(GetForegroundWindow()) != NULL;\r
+}\r
+\r
+int CUtils::GetFormatTag(LPTSTR szFormatTag)\r
+{\r
+ if (*(szFormatTag) != _T('%')) {\r
+ return NULL;\r
+ }\r
+\r
+ unsigned int nIndex = 1;\r
+\r
+ // flags\r
+ while (nIndex < _tcslen(szFormatTag)) {\r
+ switch (*(szFormatTag + nIndex)) {\r
+ case _T('-'):\r
+ case _T('+'):\r
+ case _T(' '):\r
+ case _T('0'):\r
+ case _T('#'):\r
+ ++nIndex;\r
+ continue;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ // width\r
+ while (_istdigit(*(szFormatTag + nIndex))) {\r
+ ++nIndex;\r
+ }\r
+\r
+ // precision\r
+ if (*(szFormatTag + nIndex) == _T('.')) {\r
+ ++nIndex;\r
+ while (_istdigit(*(szFormatTag + nIndex))) {\r
+ ++nIndex;\r
+ }\r
+ }\r
+\r
+ // prefix\r
+ switch (*(szFormatTag + nIndex)) {\r
+ case _T('h'):\r
+ case _T('l'):\r
+ case _T('L'):\r
+ ++nIndex;\r
+ break;\r
+ }\r
+\r
+ // type\r
+ switch (*(szFormatTag + nIndex)) {\r
+ case _T('d'):\r
+ case _T('i'):\r
+ case _T('o'):\r
+ case _T('x'):\r
+ case _T('X'):\r
+ case _T('u'):\r
+ case _T('c'):\r
+ case _T('s'):\r
+ case _T('f'):\r
+ case _T('e'):\r
+ case _T('E'):\r
+ case _T('g'):\r
+ case _T('G'):\r
+ case _T('p'):\r
+ case _T('n'):\r
+ case _T('%'):\r
+ *(szFormatTag + nIndex + 1) = NULL;\r
+ return *(szFormatTag + nIndex);\r
+ default:\r
+ *(szFormatTag + nIndex) = NULL;\r
+ return NULL;\r
+ }\r
+}\r
+\r
+BOOL CUtils::IsEudora()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Eudora.exe"));\r
+}\r
+\r
+BOOL CUtils::IsCodeWarrior()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("IDE.exe"));\r
+}\r
+\r
+BOOL CUtils::IseMemoPad()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("eMemoPad.exe"));\r
+}\r
+\r
+BOOL CUtils::IsStoryEditor()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("STRYEDIT.EXE"));\r
+}\r
+\r
+BOOL CUtils::IsNami2000()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Nami2000.exe"));\r
+}\r
+\r
+BOOL CUtils::IsCorelDRAW()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("CorelDrw.exe"));\r
+}\r
+\r
+// If Clipboard data is empty, return ture.\r
+// You must CopyNextCharacter in previous step.\r
+// Clipboard data is destroyed.\r
+BOOL CUtils::IsEOF()\r
+{\r
+ return IsTOForEOF();\r
+}\r
+\r
+// If Clipboard data is empty, return ture.\r
+// You must CopyBackCharacter in previous step.\r
+// Clipboard data is destroyed.\r
+BOOL CUtils::IsTOF()\r
+{\r
+ return IsTOForEOF();\r
+}\r
+\r
+BOOL CUtils::IsTOForEOF()\r
+{\r
+ CString szClipboardText;\r
+ GetClipboardText(&szClipboardText);\r
+ return szClipboardText.IsEmpty() // for normal application\r
+ || szClipboardText.GetLength() >= 3; // for VC++\r
+}\r
+\r
+BOOL CUtils::IsHusen()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("husen.exe"));\r
+}\r
+\r
+BOOL CUtils::IsAdobeReader()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("AcroRd32.exe"));\r
+}\r
+\r
+BOOL CUtils::IsOpenOffice()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("soffice.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("soffice.bin"));\r
+}\r
+\r
+BOOL CUtils::IsTuruKameMail()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("TuruKame.exe"));\r
+}\r
+\r
+BOOL CUtils::IsOedit()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("oedit.exe"));\r
+}\r
+\r
+BOOL CUtils::IsAutla()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Autla.exe"));\r
+}\r
+\r
+BOOL CUtils::IsShuriken()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("JsvMail.exe"));\r
+}\r
+\r
+BOOL CUtils::IsEdLeaf()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("edleaf.exe"));\r
+}\r
+\r
+BOOL CUtils::IsJmEditor()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("JmEdit.exe"))\r
+ || !_tcsicmp(m_szApplicationName, _T("JmEdit2.exe"));\r
+}\r
+\r
+BOOL CUtils::IsDana()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Dana.exe"));\r
+}\r
+\r
+BOOL CUtils::IsIPMessenger()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("ipmsg.exe"));\r
+}\r
+\r
+BOOL CUtils::IsezHTML()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("ezhtml.exe"));\r
+}\r
+\r
+BOOL CUtils::IsTcsh()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("tcsh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsZsh()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("zsh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsPdksh()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("pdksh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsFirefox()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("firefox.exe"));\r
+}\r
+\r
+BOOL CUtils::IsPHPEditor()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("php_editor.exe"));\r
+}\r
+\r
+BOOL CUtils::IsTeraPad()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("TeraPad.exe"));\r
+}\r
+\r
+BOOL CUtils::IsLispWorksPersonalEdition()\r
+{\r
+ CString szLispWorks(_T("lispworks-personal-"));\r
+ return !_tcsnicmp(m_szApplicationName, szLispWorks, szLispWorks.GetLength());\r
+\r
+// return !_tcsicmp(m_szApplicationName, _T("lispworks-personal-4300.exe"));\r
+}\r
+\r
+BOOL CUtils::IsBorlandCppBuilder()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("bcb.exe"));\r
+}\r
+\r
+BOOL CUtils::Run(CString szCommandLine, BOOL isWait)\r
+{\r
+ STARTUPINFO si;\r
+ ZeroMemory(&si, sizeof(si));\r
+ si.cb = sizeof(si);\r
+\r
+ PROCESS_INFORMATION pi;\r
+ ZeroMemory(&pi, sizeof(pi));\r
+\r
+ BOOL rc = CreateProcess(NULL, szCommandLine.GetBuffer(szCommandLine.GetLength() + 1), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);\r
+ if (rc) {\r
+ if (isWait) {\r
+ WaitForSingleObject( pi.hProcess, INFINITE );\r
+ }\r
+\r
+ CloseHandle(pi.hThread);\r
+ CloseHandle(pi.hProcess);\r
+ }\r
+\r
+ return rc;\r
+}\r
+\r
+BOOL CUtils::IsJavaW()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("javaw.exe"));\r
+}\r
+\r
+BOOL CUtils::IsMSDN()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("hh.exe"));\r
+}\r
+\r
+BOOL CUtils::IsVisualSlickEdit()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("vs.exe"));\r
+}\r
+\r
+void CUtils::PrintWindowInfo(WINDOWINFO *pwi)\r
+{\r
+ Log(_T("windowinfo.cbSize: %d"), pwi->cbSize);\r
+ Log(_T("windowinfo.rcWindow.top: %d"), pwi->rcWindow.top);\r
+ Log(_T("windowinfo.rcWindow.bottom: %d"), pwi->rcWindow.bottom);\r
+ Log(_T("windowinfo.rcWindow.left: %d"), pwi->rcWindow.left);\r
+ Log(_T("windowinfo.rcWindow.right: %d"), pwi->rcWindow.right);\r
+ Log(_T("windowinfo.rcClient.top: %d"), pwi->rcClient.top);\r
+ Log(_T("windowinfo.rcClient.bottom: %d"), pwi->rcClient.bottom);\r
+ Log(_T("windowinfo.rcClient.left: %d"), pwi->rcClient.left);\r
+ Log(_T("windowinfo.rcClient.right: %d"), pwi->rcClient.right);\r
+ Log(_T("windowinfo.dwStyle: %d"), pwi->dwStyle);\r
+ Log(_T("windowinfo.dwExStyle: %d"), pwi->dwExStyle);\r
+ Log(_T("windowinfo.dwWindowStatus: %d"), pwi->dwWindowStatus);\r
+ Log(_T("windowinfo.cxWindowBorders: %d"), pwi->cxWindowBorders);\r
+ Log(_T("windowinfo.cyWindowBorders: %d"), pwi->cyWindowBorders);\r
+ Log(_T("windowinfo.atomWindowType: %d"), pwi->atomWindowType);\r
+ Log(_T("windowinfo.wCreatorVersion: %d"), pwi->wCreatorVersion);\r
+}\r
+\r
+BOOL CUtils::IsOpenJane()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Jane2ch.exe"));\r
+}\r
+\r
+BOOL CUtils::UpdateKeyboardState(BYTE bVk, BYTE bState)\r
+{\r
+ BYTE ks[256] = {'\0'};\r
+ BOOL rc = FALSE;\r
+\r
+ if ((rc = GetKeyboardState(ks)) != FALSE) {\r
+ ks[bVk] = bState;\r
+ rc = SetKeyboardState(ks);\r
+ }\r
+ return rc;\r
+}\r
+\r
+BOOL CUtils::IsThunderbird()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("thunderbird.exe"));\r
+}\r
+\r
+int CUtils::GetWindowTextType(CString strWindowText)\r
+{\r
+ int nWindowTextType = IDS_WINDOW_TEXT_IGNORE;\r
+\r
+ if (3 <= strWindowText.GetLength()\r
+ && strWindowText.Find(_T('*')) == 0\r
+ && strWindowText.ReverseFind(_T('*')) == strWindowText.GetLength() - 1) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH;\r
+ } else if (2 <= strWindowText.GetLength()\r
+ && strWindowText.Find(_T('*')) != 0\r
+ && strWindowText.ReverseFind(_T('*')) == strWindowText.GetLength() - 1) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_FORWARD;\r
+ } else if (2 <= strWindowText.GetLength()\r
+ && strWindowText.Find(_T('*')) == 0\r
+ && strWindowText.ReverseFind(_T('*')) != strWindowText.GetLength() - 1) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_BACKWARD;\r
+ } else if (!strWindowText.IsEmpty()\r
+ && strWindowText.Find(_T('*')) != 0\r
+ && strWindowText.ReverseFind(_T('*')) != strWindowText.GetLength() - 1) {\r
+ nWindowTextType = IDS_WINDOW_TEXT_MATCH_FULL;\r
+ }\r
+\r
+ return nWindowTextType;\r
+}\r
+\r
+BOOL CUtils::IsLunascape()\r
+{\r
+ return !_tcsicmp(m_szApplicationName, _T("Luna.exe"));\r
+}\r
+\r
+BOOL CUtils::IsAtok()\r
+{\r
+ return !_tcsnicmp(m_szApplicationName, _T("ATOK"), 4) && !_tcsnicmp(m_szApplicationName + _tcslen(m_szApplicationName) - 4, _T(".IME"), 4);\r
+}\r
--- /dev/null
+// Utils.h: interface for the CUtils class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_UTILS_H__D64BCD3F_F2E2_41F7_AD58_0F32E2D46942__INCLUDED_)\r
+#define AFX_UTILS_H__D64BCD3F_F2E2_41F7_AD58_0F32E2D46942__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+class AFX_EXT_CLASS CUtils \r
+{\r
+public:\r
+ static BOOL IsAtok();\r
+ static BOOL IsLunascape();\r
+ static int GetWindowTextType(CString strWindowText);\r
+ static BOOL IsThunderbird();\r
+ static BOOL UpdateKeyboardState(BYTE bVk, BYTE bState);\r
+ static BOOL IsOpenJane();\r
+ static void PrintWindowInfo(WINDOWINFO *pwi);\r
+ static BOOL IsVisualSlickEdit();\r
+ static BOOL IsMSDN();\r
+ static BOOL IsJavaW();\r
+ static BOOL Run(CString szCommandLine, BOOL isWait = FALSE);\r
+ static BOOL IsBorlandCppBuilder();\r
+ static BOOL IsLispWorksPersonalEdition();\r
+ static BOOL IsTeraPad();\r
+ static BOOL IsPHPEditor();\r
+ static BOOL IsFirefox();\r
+ static BOOL IsPdksh();\r
+ static BOOL IsZsh();\r
+ static BOOL IsTcsh();\r
+ static BOOL IsezHTML();\r
+ static BOOL IsIPMessenger();\r
+ static BOOL IsDana();\r
+ static BOOL IsJmEditor();\r
+ static BOOL IsXPorLater();\r
+ static BOOL IsEdLeaf();\r
+ static BOOL IsShuriken();\r
+ static BOOL IsAutla();\r
+ static BOOL OpenClipboard();\r
+ static BOOL IsOedit();\r
+ static BOOL IsTuruKameMail();\r
+ static BOOL IsOpenOffice();\r
+ static BOOL IsAdobeReader();\r
+ static BOOL IsHusen();\r
+ static BOOL IsTOF();\r
+ static BOOL IsEOF();\r
+ static BOOL IsCorelDRAW();\r
+ static BOOL IsNami2000();\r
+ static BOOL IsStoryEditor();\r
+ static BOOL IseMemoPad();\r
+ static BOOL IsNT();\r
+ static BOOL IsCodeWarrior();\r
+ static BOOL IsVisualBasicEditor();\r
+ static BOOL IsEudora();\r
+ static BOOL IsDialog();\r
+ static int GetClipboardTextLength();\r
+ static BOOL IsEclipse();\r
+ static BOOL IsFindDialog();\r
+ static BOOL IsVisualBasic();\r
+ static BOOL IsProject();\r
+ static BOOL IsAccess();\r
+ static BOOL IsVisualStudioDotNet();\r
+ static BOOL IsCsh();\r
+ static BOOL IsSh();\r
+ static BOOL IsBash();\r
+ static void SetCorrectApplicationName(LPTSTR szApplicationName, int nApplicationNameLength, LPTSTR szWindowText, int nWindowTextLength);\r
+ static void Log(LPTSTR fmt, ...);\r
+ static BOOL IsSleipnir();\r
+ static BOOL IsConsole();\r
+ static BOOL IsPaint();\r
+ static BOOL IsReget();\r
+ static BOOL IsMicrosoftPowerPoint();\r
+ static BOOL IsIllustrator();\r
+ static BOOL IsPhotoshop();\r
+ static BOOL IsFlash();\r
+ static BOOL IsDreamweaver();\r
+ static BOOL IsFireworks();\r
+ static BOOL IsExcel();\r
+ static BOOL IsDirector();\r
+ static BOOL IsEggExplorer();\r
+ static BOOL IsK2Editor();\r
+ static BOOL IsDWFM();\r
+ static BOOL IsDefaultIgnoreApplication();\r
+ static BOOL IsXWin();\r
+ static BOOL IsEmacs();\r
+ static BOOL SetClipboardText(CString *szClipboardText);\r
+ static BOOL GetClipboardText(CString *szClipboardText);\r
+ static BOOL IsNTor9x();\r
+ static void InitCUtils();\r
+ static void SetApplicationName(BOOL bImeComposition);\r
+ static LPCTSTR const GetApplicationName();\r
+ static BOOL IsXyzzy();\r
+ static BOOL IsWordpad();\r
+ static BOOL IsVisualCpp();\r
+ static BOOL IsTeraTermPro();\r
+ static BOOL IsSakuraEditor();\r
+ static BOOL IsOutlookExpress();\r
+ static BOOL IsOutlook();\r
+ static BOOL IsOpera();\r
+ static BOOL IsNotepad();\r
+ static BOOL IsNetscape();\r
+ static BOOL IsMuleForWin32();\r
+ static BOOL IsMozilla();\r
+ static BOOL IsMicrosoftWord();\r
+ static BOOL IsMicrosoftFrontPage();\r
+ static BOOL IsMeadow();\r
+ static BOOL IsLotusWordPro();\r
+ static BOOL IsLotusNotes();\r
+ static BOOL IsLotus123();\r
+ static BOOL IsInternetExplorer();\r
+ static BOOL IsHidemaru();\r
+ static BOOL IsExplorer();\r
+ static BOOL IsBecky();\r
+ static BOOL IsAstecX();\r
+ static BOOL CUtils::GetFindDialogTitle(CString *szDialogTitle);\r
+ CUtils();\r
+ virtual ~CUtils();\r
+\r
+private:\r
+ static BOOL IsTOForEOF();\r
+ static int GetFormatTag(LPTSTR szFormatTag);\r
+ static void FairConsoleApplicationName(LPTSTR szApplicationName, int nApplicationNameLength, LPTSTR szWindowText, int nWindowTextLength);\r
+ static BOOL IsConsole(LPCTSTR szApplicationName, int nApplicationNameLength);\r
+ static BOOL IsJavaW(LPCTSTR szApplicationName, int nApplicationNameLength);\r
+ static void SetIMEName();\r
+ static OSVERSIONINFO m_OsVersionInfo;\r
+ static TCHAR m_szIMEName[MAX_PATH];\r
+ static TCHAR m_szApplicationName[MAX_PATH];\r
+};\r
+\r
+#endif // !defined(AFX_UTILS_H__D64BCD3F_F2E2_41F7_AD58_0F32E2D46942__INCLUDED_)\r
--- /dev/null
+//\r
+// XKEYMACSDLL.RC2 - resources Microsoft Visual C++ does not edit directly\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+ #error this file is not editable by Microsoft Visual C++\r
+#endif //APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Add manually edited resources here...\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
--- /dev/null
+//{{NO_DEPENDENCIES}}\r
+// Microsoft Developer Studio generated include file.\r
+// Used by xkeymacsdll.rc\r
+//\r
+\r
+// Next default values for new objects\r
+// \r
+#ifdef APSTUDIO_INVOKED\r
+#ifndef APSTUDIO_READONLY_SYMBOLS\r
+#define _APS_NEXT_RESOURCE_VALUE 1000\r
+#define _APS_NEXT_COMMAND_VALUE 32771\r
+#define _APS_NEXT_CONTROL_VALUE 1000\r
+#define _APS_NEXT_SYMED_VALUE 1000\r
+#endif\r
+#endif\r
--- /dev/null
+// xkeymacsdll.cpp : Defines the initialization routines for the DLL.\r
+//\r
+\r
+#include "stdafx.h"\r
+#include "resource.h"\r
+#include "Utils.h"\r
+#include "Commands.h"\r
+#include <afxdllx.h>\r
+#include <math.h>\r
+#include <Imm.h>\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#undef THIS_FILE\r
+static char THIS_FILE[] = __FILE__;\r
+#endif\r
+\r
+\r
+static AFX_EXTENSION_MODULE XkeymacsdllDLL = { NULL, NULL };\r
+\r
+static HINSTANCE g_hDllInst = NULL;\r
+\r
+HINSTANCE GetThisHInst()\r
+{\r
+ return g_hDllInst;\r
+}\r
+\r
+extern "C" int APIENTRY\r
+DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)\r
+{\r
+ g_hDllInst = hInstance;\r
+ \r
+ // Remove this if you use lpReserved\r
+ UNREFERENCED_PARAMETER(lpReserved);\r
+\r
+ if (dwReason == DLL_PROCESS_ATTACH) {\r
+ TRACE0("XKEYMACSDLL.DLL Initializing!\n");\r
+ \r
+ // Extension DLL one-time initialization\r
+ if (!AfxInitExtensionModule(XkeymacsdllDLL, hInstance)) {\r
+ return 0;\r
+ }\r
+\r
+ // Insert this DLL into the resource chain\r
+ // NOTE: If this Extension DLL is being implicitly linked to by\r
+ // an MFC Regular DLL (such as an ActiveX Control)\r
+ // instead of an MFC application, then you will want to\r
+ // remove this line from DllMain and put it in a separate\r
+ // function exported from this Extension DLL. The Regular DLL\r
+ // that uses this Extension DLL should then explicitly call that\r
+ // function to initialize this Extension DLL. Otherwise,\r
+ // the CDynLinkLibrary object will not be attached to the\r
+ // Regular DLL's resource chain, and serious problems will\r
+ // result.\r
+\r
+ try {\r
+ new CDynLinkLibrary(XkeymacsdllDLL);\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("DllMain: 'new' threw an exception");\r
+ }\r
+ } else if (dwReason == DLL_PROCESS_DETACH) {\r
+ TRACE0("XKEYMACSDLL.DLL Terminating!\n");\r
+ // Terminate the library before destructors are called\r
+ AfxTermExtensionModule(XkeymacsdllDLL);\r
+ }\r
+ return 1; // ok\r
+}\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// CXkeymacsDll Class\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#include "xkeymacsDll.h"\r
+#pragma data_seg(".xkmcs")\r
+ HHOOK CXkeymacsDll::m_hHookKeyboard = NULL;\r
+ HHOOK CXkeymacsDll::m_hHookCallWnd = NULL;\r
+ HHOOK CXkeymacsDll::m_hHookCallWndRet = NULL;\r
+ HHOOK CXkeymacsDll::m_hHookGetMessage = NULL;\r
+ HHOOK CXkeymacsDll::m_hHookShell = NULL;\r
+ int CXkeymacsDll::m_nCommandID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bAtIbeamCursorOnly[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+ int CXkeymacsDll::m_nFunctionID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+ TCHAR CXkeymacsDll::m_szSpecialApp[MAX_APP][CLASS_NAME_LENGTH] = {'\0'};\r
+ TCHAR CXkeymacsDll::m_szWindowText[MAX_APP][WINDOW_TEXT_LENGTH] = {'\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
+ BOOL CXkeymacsDll::m_bDefiningMacro = FALSE;\r
+ DWORD CXkeymacsDll::m_dwOldMessage[MAX_ICON_TYPE] = {'\0'};\r
+ NOTIFYICONDATA CXkeymacsDll::m_stNtfyIcon[MAX_ICON_TYPE] = {'\0'};\r
+ NOTIFYICONDATA CXkeymacsDll::m_stOldNtfyIcon[MAX_ICON_TYPE] = {'\0'};\r
+ HICON CXkeymacsDll::m_hIcon[MAX_ICON_TYPE][MAX_STATUS] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bIcon[MAX_ICON_TYPE] = {'\0'};\r
+ int CXkeymacsDll::m_nKillRingMax[MAX_APP] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bUseDialogSetting[MAX_APP] = {'\0'};\r
+ CList<CClipboardSnap *, CClipboardSnap *> CXkeymacsDll::m_oKillRing;\r
+ CObList CXkeymacsDll::m_Macro;\r
+ int CXkeymacsDll::m_nKillRing = 0;\r
+ int CXkeymacsDll::m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+ int CXkeymacsDll::m_nApplicationID = 0;\r
+ int CXkeymacsDll::m_nSettingStyle[MAX_APP] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bIgnoreUndefinedMetaCtrl[MAX_APP] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bIgnoreUndefinedC_x[MAX_APP] = {'\0'};\r
+// int CXkeymacsDll::m_nPassThrough = 0;\r
+ TCHAR CXkeymacsDll::m_szApplicationName[MAX_PATH] = {'\0'};\r
+ TCHAR CXkeymacsDll::m_szOldApplicationName[MAX_PATH] = {'\0'};\r
+ BOOL CXkeymacsDll::m_bEnableCUA[MAX_APP] = {'\0'};\r
+ TCHAR CXkeymacsDll::m_szFunctionDefinition[MAX_FUNCTION][MAX_DEFINITION] = {'\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
+ BOOL CXkeymacsDll::m_b326Compatible[MAX_APP] = {'\0'};\r
+\r
+ BOOL CXkeymacsData::m_b106Keyboard = FALSE;\r
+#pragma data_seg()\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CXkeymacsDll::CXkeymacsDll()\r
+{\r
+ CUtils::InitCUtils();\r
+}\r
+\r
+CXkeymacsDll::~CXkeymacsDll()\r
+{\r
+\r
+}\r
+\r
+int CXkeymacsDll::ModifyShell_NotifyIcon(ICON_TYPE icon, BOOL bNewStatus, BOOL bForce)\r
+{\r
+ if (m_stNtfyIcon[icon].hIcon == (bNewStatus ? m_hIcon[icon][ON_ICON] : m_hIcon[icon][OFF_ICON])) {\r
+ if (!bForce) {\r
+ return TRUE;\r
+ }\r
+ } else {\r
+ m_stNtfyIcon[icon].hIcon = (bNewStatus ? m_hIcon[icon][ON_ICON] : m_hIcon[icon][OFF_ICON]);\r
+ }\r
+ return DoShell_NotifyIcon(icon, NIM_MODIFY);\r
+}\r
+\r
+void CXkeymacsDll::SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hEnable, HICON hDisableTMP, HICON hDisableWOCQ, HICON hDisable, BOOL bEnable)\r
+{\r
+ m_hIcon[icon][STATUS_ENABLE] = hEnable;\r
+ m_hIcon[icon][STATUS_DISABLE_TMP] = hDisableTMP;\r
+ m_hIcon[icon][STATUS_DISABLE_WOCQ] = hDisableWOCQ;\r
+ m_hIcon[icon][STATUS_DISABLE] = hDisable;\r
+ m_bIcon[icon] = bEnable;\r
+ m_stNtfyIcon[icon] = stNtfyIcon;\r
+ AddShell_NotifyIcon(icon);\r
+}\r
+\r
+void CXkeymacsDll::SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hOn, HICON hOff, BOOL bEnable)\r
+{\r
+ m_hIcon[icon][ON_ICON] = hOn;\r
+ m_hIcon[icon][OFF_ICON] = hOff;\r
+ m_bIcon[icon] = bEnable;\r
+ m_stNtfyIcon[icon] = stNtfyIcon;\r
+ AddShell_NotifyIcon(icon);\r
+}\r
+\r
+void CXkeymacsDll::EnableShell_NotifyIcon(ICON_TYPE icon, BOOL bEnable)\r
+{\r
+ DeleteShell_NotifyIcon(icon);\r
+ m_bIcon[icon] = bEnable;\r
+ AddShell_NotifyIcon(icon);\r
+}\r
+\r
+\r
+BOOL CXkeymacsDll::DoShell_NotifyIcon(ICON_TYPE icon, DWORD dwMessage)\r
+{\r
+ if (m_bIcon[icon]\r
+ && (m_dwOldMessage[icon] != dwMessage\r
+ || memcmp(&m_stOldNtfyIcon[icon], &m_stNtfyIcon[icon], sizeof(m_stNtfyIcon[icon])))) {\r
+ m_dwOldMessage[icon] = dwMessage;\r
+ m_stOldNtfyIcon[icon] = m_stNtfyIcon[icon];\r
+\r
+ BOOL rc = FALSE;\r
+ for (int retry_count = 0; retry_count < 20; ++retry_count) { // retry for timeout\r
+ rc = Shell_NotifyIcon(dwMessage, &m_stNtfyIcon[icon]);\r
+ if (dwMessage != NIM_ADD || rc || (GetLastError() != ERROR_TIMEOUT && 5 < retry_count)) {\r
+ break;\r
+ }\r
+ Sleep(1000); // 1sec\r
+ if ((rc = Shell_NotifyIcon(NIM_MODIFY, &m_stNtfyIcon[icon])) != FALSE) {\r
+ break; // ERROR_TIMEOUT was returned but the icon was also added.\r
+ }\r
+ }\r
+ return rc;\r
+ } else {\r
+ return TRUE;\r
+ }\r
+}\r
+\r
+void CXkeymacsDll::AddShell_NotifyIcon(ICON_TYPE icon)\r
+{\r
+ DoShell_NotifyIcon(icon, NIM_ADD);\r
+}\r
+\r
+void CXkeymacsDll::DeleteShell_NotifyIcon(ICON_TYPE icon)\r
+{\r
+ DoShell_NotifyIcon(icon, NIM_DELETE);\r
+}\r
+\r
+// set keyboard hook\r
+BOOL CXkeymacsDll::SetKeyboardHook()\r
+{\r
+ m_hHookKeyboard = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, GetThisHInst(), 0);\r
+ if (!m_hHookKeyboard) {\r
+ return FALSE;\r
+ }\r
+\r
+ m_hHookCallWnd = ::SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, GetThisHInst(), 0);\r
+\r
+ m_hHookCallWndRet = ::SetWindowsHookEx(WH_CALLWNDPROCRET, (HOOKPROC)CallWndRetProc, GetThisHInst(), 0);\r
+\r
+ m_hHookGetMessage = ::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, GetThisHInst(), 0);\r
+\r
+ m_hHookShell = ::SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, GetThisHInst(), 0);\r
+\r
+ AddShell_NotifyIcon(MAIN_ICON);\r
+\r
+ return TRUE;\r
+}\r
+\r
+// release keyboard hook\r
+BOOL CXkeymacsDll::ReleaseKeyboardHook()\r
+{\r
+ BOOL bKeyboard = TRUE;\r
+ BOOL bCallWnd = TRUE;\r
+ BOOL bCallWndRet = TRUE;\r
+ BOOL bGetMessage = TRUE;\r
+ BOOL bShell = TRUE;\r
+\r
+ if (m_hHookKeyboard) {\r
+ bKeyboard = ::UnhookWindowsHookEx(m_hHookKeyboard);\r
+ }\r
+ m_hHookKeyboard = NULL;\r
+\r
+ if (m_hHookCallWnd) {\r
+ bCallWnd = ::UnhookWindowsHookEx(m_hHookCallWnd);\r
+ }\r
+ m_hHookCallWnd = NULL;\r
+\r
+ if (m_hHookCallWndRet) {\r
+ bCallWndRet = ::UnhookWindowsHookEx(m_hHookCallWndRet);\r
+ }\r
+ m_hHookCallWndRet = NULL;\r
+\r
+ if (m_hHookGetMessage) {\r
+ bGetMessage = ::UnhookWindowsHookEx(m_hHookGetMessage);\r
+ }\r
+ m_hHookGetMessage = NULL;\r
+\r
+ if (m_hHookShell) {\r
+ bShell = ::UnhookWindowsHookEx(m_hHookShell);\r
+ }\r
+ m_hHookShell = NULL;\r
+\r
+ return bKeyboard && bCallWnd && bCallWndRet && bGetMessage && bShell;\r
+}\r
+\r
+void CXkeymacsDll::SetKeyboardHookFlag(BOOL bFlag)\r
+{\r
+ m_bHook = bFlag;\r
+\r
+ if (m_bHook) {\r
+ if (CCommands::IsTemporarilyDisableXKeymacs()) {\r
+ m_stNtfyIcon[MAIN_ICON].hIcon = m_hIcon[MAIN_ICON][STATUS_DISABLE_TMP];\r
+ m_hCurrentCursor = m_hCursor[STATUS_DISABLE_TMP];\r
+ } else {\r
+ m_stNtfyIcon[MAIN_ICON].hIcon = m_hIcon[MAIN_ICON][STATUS_ENABLE];\r
+ m_hCurrentCursor = m_hCursor[STATUS_ENABLE];\r
+ }\r
+ } else {\r
+ m_stNtfyIcon[MAIN_ICON].hIcon = m_hIcon[MAIN_ICON][STATUS_DISABLE_WOCQ];\r
+ m_hCurrentCursor = m_hCursor[STATUS_DISABLE_WOCQ];\r
+ }\r
+ if (m_nSettingStyle[m_nApplicationID] == SETTING_DISABLE\r
+ || (!_tcsicmp(m_szSpecialApp[m_nApplicationID], _T("Default"))\r
+ && CUtils::IsDefaultIgnoreApplication())) {\r
+ m_stNtfyIcon[MAIN_ICON].hIcon = m_hIcon[MAIN_ICON][STATUS_DISABLE];\r
+ m_hCurrentCursor = m_hCursor[STATUS_DISABLE];\r
+ }\r
+ DoShell_NotifyIcon(MAIN_ICON, NIM_MODIFY);\r
+ DoSetCursor();\r
+}\r
+\r
+// if be keyboard hook, return TRUE\r
+BOOL CXkeymacsDll::IsKeyboardHook()\r
+{\r
+ if (m_bHook) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+void CXkeymacsDll::LogCallWndProcMessage(WPARAM wParam, LPARAM lParam)\r
+{\r
+ CWPSTRUCT &cwps = *(CWPSTRUCT *)lParam;\r
+\r
+ switch (cwps.message) {\r
+ case WM_PAINT: // 0x000F\r
+ case WM_MDIGETACTIVE: // 0x0229\r
+ case 0x0403:\r
+ case 0x0407:\r
+ case 0x0418:\r
+ case 0x043F:\r
+ case 0x0440:\r
+ break;\r
+ case WM_CREATE: // 0x0001\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_CREATE"));\r
+ break;\r
+ case WM_DESTROY: // 0x0002\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_DESTROY"));\r
+ break;\r
+ case WM_MOVE: // 0x0003\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_MOVE");)\r
+ break;\r
+ case WM_SIZE: // 0x0005\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_SIZE"));\r
+ break;\r
+ case WM_GETTEXT: // 0x000D\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_GETTEXT"));\r
+ break;\r
+ case WM_ERASEBKGND: // 0x0014\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_ERASEBKGND"));\r
+ break;\r
+ case WM_WINDOWPOSCHANGING: // 0x0046\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_WINDOWPOSCHANGING"));\r
+ break;\r
+ case WM_WINDOWPOSCHANGED: // 0x0047\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_WINDOWPOSCHANGED"));\r
+ break;\r
+ case WM_COPYDATA: // 0x004A\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_COPYDATA"));\r
+ break;\r
+ case WM_NCCREATE: // 0x0081\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_NCCREATE"));\r
+ break;\r
+ case WM_NCDESTROY: // 0x0082\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_NCDESTROY"));\r
+ break;\r
+ case WM_NCCALCSIZE: // 0x0083\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_NCCALCSIZE"));\r
+ break;\r
+ case WM_NCPAINT: // 0x0085\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_NCPAINT"));\r
+ break;\r
+ case WM_IME_STARTCOMPOSITION: // 0x010D\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_IME_STARTCOMPOSITION"));\r
+ break;\r
+ case WM_IME_ENDCOMPOSITION: // 0x010E\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_IME_ENDCOMPOSITION"));\r
+ break;\r
+ case WM_IME_KEYLAST: // 0x010F\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_IME_KEYLAST"));\r
+ break;\r
+ case WM_COMMAND: // 0x0111\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_COMMAND"));\r
+ break;\r
+ case WM_CTLCOLOREDIT: // 0x0133\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_CTLCOLOREDIT"));\r
+ break;\r
+ case WM_POWERBROADCAST: // 0x0218\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_POWERBROADCAST"));\r
+ switch (wParam) {\r
+ case PBT_APMQUERYSUSPEND: // 0x0000\r
+// CUtils::Log(_T("PBT_APMQUERYSUSPEND"));\r
+ break;\r
+ case PBT_APMQUERYSTANDBY: // 0x0001\r
+// CUtils::Log(_T("PBT_APMQUERYSTANDBY"));\r
+ break;\r
+ case PBT_APMQUERYSUSPENDFAILED: // 0x0002\r
+// CUtils::Log(_T("PBT_APMQUERYSUSPENDFAILED"));\r
+ break;\r
+ case PBT_APMQUERYSTANDBYFAILED: // 0x0003\r
+// CUtils::Log(_T("PBT_APMQUERYSTANDBYFAILED"));\r
+ break;\r
+ case PBT_APMSUSPEND: // 0x0004\r
+// CUtils::Log(_T("PBT_APMSUSPEND"));\r
+ break;\r
+ case PBT_APMSTANDBY: // 0x0005\r
+// CUtils::Log(_T("PBT_APMSTANDBY"));\r
+ break;\r
+ case PBT_APMRESUMECRITICAL: // 0x0006\r
+// CUtils::Log(_T("PBT_APMRESUMECRITICAL"));\r
+ break;\r
+ case PBT_APMRESUMESUSPEND: // 0x0007\r
+// CUtils::Log(_T("PBT_APMRESUMESUSPEND"));\r
+ break;\r
+ case PBT_APMRESUMESTANDBY: // 0x0008\r
+// CUtils::Log(_T("PBT_APMRESUMESTANDBY"));\r
+ break;\r
+ case PBT_APMBATTERYLOW: // 0x0009\r
+// CUtils::Log(_T("PBT_APMBATTERYLOW"));\r
+ break;\r
+ case PBT_APMPOWERSTATUSCHANGE: // 0x000A\r
+// CUtils::Log(_T("PBT_APMPOWERSTATUSCHANGE"));\r
+ break;\r
+ case PBT_APMOEMEVENT: // 0x000B\r
+// CUtils::Log(_T("PBT_APMOEMEVENT"));\r
+ break;\r
+ case PBT_APMRESUMEAUTOMATIC: // 0x0012\r
+// CUtils::Log(_T("PBT_APMRESUMEAUTOMATIC"));\r
+ break;\r
+ default:\r
+// CUtils::Log(_T("PBT_OTHERS: %d"), wParam);\r
+ break;\r
+ }\r
+ break;\r
+ case WM_IME_NOTIFY: // 0x0282\r
+// CUtils::Log(_T("CallWndProc: cwps.message = WM_IME_NOTIFY"));\r
+ break;\r
+ default:\r
+// CUtils::Log(_T("CallWndProc: cwps.message = 0x%04X"), cwps.message);\r
+ break;\r
+ }\r
+}\r
+\r
+LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)\r
+{\r
+// LogCallWndProcMessage(wParam, lParam);\r
+\r
+ if (0 <= nCode) {\r
+ CWPSTRUCT &cwps = *(CWPSTRUCT *)lParam;\r
+ switch (cwps.message) {\r
+ case WM_IME_STARTCOMPOSITION:\r
+ InitKeyboardProc(TRUE);\r
+ break;\r
+ case WM_IME_ENDCOMPOSITION:\r
+ InitKeyboardProc(FALSE);\r
+ break;\r
+ case WM_SETFOCUS:\r
+ if (cwps.hwnd == GetForegroundWindow()) {\r
+ InitKeyboardProc(FALSE);\r
+ SetKeyboardHookFlag(m_bHook);\r
+ }\r
+ break;\r
+ case WM_NCACTIVATE:\r
+ if (cwps.wParam) {\r
+ if (cwps.hwnd == GetForegroundWindow()) {\r
+ InitKeyboardProc(FALSE);\r
+ SetKeyboardHookFlag(m_bHook);\r
+ }\r
+ }\r
+ break;\r
+ case WM_POWERBROADCAST:\r
+ switch (wParam) {\r
+ case PBT_APMRESUMECRITICAL: // 0x0006\r
+ case PBT_APMRESUMESUSPEND: // 0x0007\r
+ case PBT_APMRESUMESTANDBY: // 0x0008\r
+ ReleaseKeyboardHook();\r
+ SetKeyboardHook();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ return CallNextHookEx(m_hHookCallWnd, nCode, wParam, lParam);\r
+}\r
+\r
+LRESULT CALLBACK CXkeymacsDll::CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam)\r
+{\r
+ if (0 <= nCode) {\r
+ CWPRETSTRUCT &cwprets = *(CWPRETSTRUCT *)lParam;\r
+ switch (cwprets.message) {\r
+ case WM_SETTEXT:\r
+ if (cwprets.hwnd == GetForegroundWindow()) {\r
+ InitKeyboardProc(FALSE);\r
+ }\r
+ break;\r
+ case WM_SETCURSOR:\r
+ DoSetCursor();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ return CallNextHookEx(m_hHookCallWndRet, nCode, wParam, lParam);\r
+}\r
+\r
+LRESULT CALLBACK CXkeymacsDll::GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)\r
+{\r
+ MSG &msg = (*(MSG *)lParam);\r
+\r
+ switch (msg.message) {\r
+ case WM_IME_STARTCOMPOSITION:\r
+ InitKeyboardProc(TRUE);\r
+ break;\r
+ case WM_IME_ENDCOMPOSITION:\r
+ InitKeyboardProc(FALSE);\r
+ break;\r
+ }\r
+ return CallNextHookEx(m_hHookGetMessage, nCode, wParam, lParam);\r
+}\r
+\r
+LRESULT CALLBACK CXkeymacsDll::ShellProc(int nCode, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch (nCode) {\r
+ case HSHELL_WINDOWACTIVATED:\r
+ {\r
+ TCHAR className[256];\r
+ ::GetClassName((HWND)wParam, className, 255);\r
+ if (!_tcsicmp(className, _T("ConsoleWindowClass"))) {\r
+ InitKeyboardProc(FALSE);\r
+ SetKeyboardHookFlag(m_bHook);\r
+ }\r
+ break;\r
+ }\r
+ default:\r
+ break;\r
+ }\r
+ return CallNextHookEx( m_hHookShell, nCode, wParam, lParam );\r
+}\r
+\r
+// return true if the key is down\r
+BOOL CXkeymacsDll::IsDown(BYTE bVk, BOOL bPhysicalKey)\r
+{\r
+ if (bPhysicalKey) {\r
+ return GetKeyState(bVk) < 0;\r
+ } else {\r
+ return GetAsyncKeyState(bVk) < 0;\r
+ }\r
+}\r
+\r
+// Do keybd_event\r
+void CXkeymacsDll::DoKeybd_event(BYTE bVk, DWORD dwFlags)\r
+{\r
+ // Set KEYEVENTF_EXTENDEDKEY if needed\r
+ switch (bVk) {\r
+ case VK_CONTROL:\r
+ if (m_bRightControl) { // Right Ctrl\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ }\r
+ break;\r
+\r
+ case VK_MENU:\r
+ if (m_bRightAlt) { // Right Alt\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+// CUtils::Log("Right Alt %d", dwFlags);\r
+// } else {\r
+// CUtils::Log("Left Alt %d", dwFlags);\r
+ }\r
+ break;\r
+\r
+ case VK_SHIFT:\r
+ if (m_bRightShift) { // Right Shift\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ }\r
+ break;\r
+\r
+ case VK_PAUSE:\r
+ if (IsDown(VK_CONTROL)) { // Break\r
+ dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+ }\r
+ break;\r
+\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
+ default:\r
+ break;\r
+ }\r
+\r
+// CUtils::Log(_T("b: %x, %x, %x, %#x, %#x"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+ keybd_event(bVk, 0, dwFlags, GetMessageExtraInfo());\r
+// CUtils::Log(_T("a: %x, %x, %x, %#x, %#x"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+}\r
+\r
+// the key is being depressed\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
+\r
+ int nCommandType = NONE;\r
+ if (IsDown(VK_CONTROL, FALSE)) {\r
+ nCommandType |= CONTROL;\r
+ }\r
+ if (IsDown(VK_MENU, FALSE)) {\r
+ nCommandType |= META;\r
+ }\r
+ Original(nCommandType, bVk, 1);\r
+ }\r
+\r
+ DoKeybd_event(bVk, 0);\r
+}\r
+\r
+// the key is being released\r
+void CXkeymacsDll::ReleaseKey(BYTE bVk) // bVk is virtual-key code, MSDN said\r
+{\r
+ DoKeybd_event(bVk, KEYEVENTF_KEYUP);\r
+}\r
+\r
+// bVk down, bVk up\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
+ if (CUtils::IsFindDialog()) {\r
+ static BOOL bImeCompositionOld = FALSE;\r
+ if (!bImeComposition\r
+ && bImeCompositionOld) {\r
+ DepressKey(VK_END);\r
+ ReleaseKey(VK_END);\r
+ }\r
+ bImeCompositionOld = bImeComposition;\r
+ }\r
+\r
+ CUtils::SetApplicationName(bImeComposition);\r
+\r
+ if (_tcsnicmp(m_szSpecialApp[m_nApplicationID], CUtils::GetApplicationName(), 0xF) || !IsMatchWindowText(m_szWindowText[m_nApplicationID])) { // PROCESSENTRY32 has only 0xF bytes of Name\r
+ m_nApplicationID = -1;\r
+\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ if (!_tcsnicmp(m_szSpecialApp[nApplicationID], CUtils::GetApplicationName(), 0xF) && IsMatchWindowText(m_szWindowText[nApplicationID])) {\r
+\r
+ if (m_nApplicationID < 0\r
+ || CUtils::GetWindowTextType(m_szWindowText[m_nApplicationID]) < CUtils::GetWindowTextType(m_szWindowText[nApplicationID])\r
+ || CUtils::GetWindowTextType(m_szWindowText[m_nApplicationID]) == CUtils::GetWindowTextType(m_szWindowText[nApplicationID])\r
+ && _tcscmp(m_szWindowText[m_nApplicationID], m_szWindowText[nApplicationID]) <= 0) {\r
+ m_nApplicationID = nApplicationID;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (m_nApplicationID < 0) {\r
+ for (int nApplicationID = 0; nApplicationID < MAX_APP; ++nApplicationID) {\r
+ if (!_tcsicmp(m_szSpecialApp[nApplicationID], _T("Default"))) {\r
+ m_nApplicationID = nApplicationID;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (m_nApplicationID < 0) {\r
+ m_nApplicationID = 0;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (m_nSettingStyle[m_nApplicationID] != SETTING_DISABLE\r
+ && (_tcsicmp(m_szSpecialApp[m_nApplicationID], _T("Default")) || !CUtils::IsDefaultIgnoreApplication())\r
+ && !bImeComposition\r
+ && CUtils::IsDialog()) {\r
+ // Use Dialog Setting\r
+ if (m_bUseDialogSetting[m_nApplicationID]) {\r
+ int nOriginalApplicationID = m_nApplicationID;\r
+ for (m_nApplicationID = 0; m_nApplicationID < MAX_APP; ++m_nApplicationID) {\r
+ if (!_tcsicmp(m_szSpecialApp[m_nApplicationID], _T("Dialog"))) {\r
+ break;\r
+ }\r
+ }\r
+ if (m_nApplicationID == MAX_APP) {\r
+ m_nApplicationID = nOriginalApplicationID;\r
+ }\r
+ }\r
+ }\r
+\r
+ ModifyShell_NotifyIcon(CX_ICON, FALSE);\r
+ ModifyShell_NotifyIcon(MX_ICON, FALSE);\r
+ ModifyShell_NotifyIcon(META_ICON, FALSE);\r
+ CCommands::SetMark(FALSE);\r
+ CCommands::SetTemporarilyDisableXKeymacs(FALSE);\r
+ CCommands::Reset();\r
+}\r
+\r
+// emulate emacs // cf virtual-key code\r
+LRESULT CALLBACK CXkeymacsDll::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)\r
+{\r
+ ASSERT(0 <= wParam && wParam <= UCHAR_MAX);\r
+\r
+ int nCommandType = NONE;\r
+ BYTE nKey = (BYTE)wParam;\r
+\r
+ static BOOL bLocked = FALSE;\r
+ static const BYTE RECURSIVE_KEY = 0x07;\r
+ static int (*fCommand)() = NULL;\r
+ static BYTE nOneShotModifier[MAX_KEY] = {'\0'};\r
+ static BOOL bCherryOneShotModifier = FALSE;\r
+\r
+// CUtils::Log(_T("nCode = %#x, nKey = %#x, lParam = %#x"), nCode, nKey, lParam);\r
+\r
+ if (nCode < 0 || nCode == HC_NOREMOVE) {\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (nKey == RECURSIVE_KEY) {\r
+ if (lParam & BEING_RELEASED) {\r
+ goto HOOK_RECURSIVE_KEY;\r
+ } else {\r
+ goto RECURSIVE_COMMAND;\r
+ }\r
+ }\r
+\r
+ {\r
+ static BOOL bShift = FALSE;\r
+ if (IsDepressedShiftKeyOnly(nKey)) {\r
+ if (lParam & BEING_RELEASED) {\r
+ if (bShift) {\r
+ CCommands::SetMark(FALSE);\r
+ }\r
+ } else {\r
+ bShift = TRUE;\r
+ }\r
+ } else {\r
+ bShift = FALSE;\r
+ }\r
+ }\r
+\r
+ if (CUtils::IsNT()) {\r
+ switch (nKey) {\r
+ case VK_CONTROL:\r
+ if (lParam & EXTENDED_KEY) {\r
+ nKey = VK_RCONTROL;\r
+ } else {\r
+ nKey = VK_LCONTROL;\r
+ }\r
+ break;\r
+ case VK_MENU:\r
+ if (lParam & EXTENDED_KEY) {\r
+ nKey = VK_RMENU;\r
+ } else {\r
+ nKey = VK_LMENU;\r
+ }\r
+ break;\r
+ case VK_SHIFT:\r
+ if (lParam & EXTENDED_KEY) {\r
+ nKey = VK_RSHIFT;\r
+ } else {\r
+ nKey = VK_LSHIFT;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (lParam & BEING_RELEASED) {\r
+ if (nKey == VK_MENU\r
+ || nKey == VK_LWIN\r
+ || nKey == VK_RWIN\r
+ || nKey == VK_APPS\r
+ || nKey == VK_LMENU\r
+ || nKey == VK_RMENU) {\r
+ for (int i = 0; i < MAX_COMMAND_TYPE; ++i) {\r
+ if (Commands[m_nCommandID[m_nApplicationID][i][nKey]].fCommand\r
+ && (Commands[m_nCommandID[m_nApplicationID][i][nKey]].fCommand != CCommands::MetaAlt\r
+ || nKey != VK_MENU && nKey != VK_LMENU && nKey != VK_RMENU)) {\r
+ goto HOOK;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (nOneShotModifier[nKey]) {\r
+ ReleaseKey(nOneShotModifier[nKey]);\r
+ nOneShotModifier[nKey] = 0;\r
+\r
+ if (bCherryOneShotModifier) {\r
+ bCherryOneShotModifier = FALSE;\r
+ Kdu(nKey);\r
+ }\r
+ }\r
+\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (m_nSettingStyle[m_nApplicationID] == SETTING_DISABLE) {\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ // Do Nothing for Meadow, Mule for Win32, ... if those use default setting.\r
+ if (!_tcsicmp(m_szSpecialApp[m_nApplicationID], _T("Default"))\r
+ && CUtils::IsDefaultIgnoreApplication()) {\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ switch (IsPassThrough(nKey)) {\r
+ case GOTO_DO_NOTHING:\r
+ goto DO_NOTHING;\r
+ case GOTO_HOOK:\r
+ goto HOOK;\r
+ case CONTINUE:\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ // set command type\r
+ {\r
+ nCommandType = NONE;\r
+ if (IsDown(VK_SHIFT, FALSE)) {\r
+ nCommandType |= SHIFT;\r
+ }\r
+ if (IsControl()) {\r
+ nCommandType |= CONTROL;\r
+ }\r
+ if (IsMeta()) {\r
+ nCommandType |= META;\r
+ }\r
+ if (CCommands::bC_x()) {\r
+ nCommandType |= CONTROLX;\r
+ }\r
+\r
+ // Ignore undefined C-x ?\r
+ if (nCommandType & CONTROLX) {\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == NULL\r
+ && m_nFunctionID[m_nApplicationID][nCommandType][nKey] < 0) {\r
+ if (m_bIgnoreUndefinedC_x[m_nApplicationID]) {\r
+ CCommands::Reset(GOTO_HOOK);\r
+ goto HOOK;\r
+ }\r
+ nCommandType &= ~CONTROLX;\r
+ }\r
+ }\r
+\r
+ // Ignore undefined Meta Ctrl+?\r
+ if (CCommands::bM_() && (nCommandType & CONTROL)) {\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == NULL\r
+ && m_nFunctionID[m_nApplicationID][nCommandType][nKey] < 0) {\r
+ if (m_bIgnoreUndefinedMetaCtrl[m_nApplicationID]) {\r
+ if (Original(CONTROL, nKey)) {\r
+ Original(CONTROL, nKey, -1);\r
+ goto DO_NOTHING;\r
+ }\r
+ CCommands::Reset(GOTO_HOOK);\r
+ goto HOOK;\r
+ }\r
+ nCommandType &= ~META;\r
+ }\r
+ }\r
+ }\r
+\r
+ {\r
+// CUtils::Log(_T("o: %x, %d, %d, %d, %d, %d, %d, %d, %d"), (BYTE)wParam,\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
+\r
+ BYTE nKey = (BYTE)wParam; // VK_CONTROL is needed instead of VK_RCONTROL and VK_LCONTROL in this block just for Original()\r
+ int nVirtualCommandType = NONE;\r
+ if (IsDown(VK_CONTROL) && nKey != VK_CONTROL) {\r
+ nVirtualCommandType |= CONTROL;\r
+ }\r
+ if (IsDown(VK_MENU) && nKey != VK_MENU) {\r
+ nVirtualCommandType |= META;\r
+ }\r
+ if (Original(nVirtualCommandType, nKey)) {\r
+ Original(nVirtualCommandType, nKey, -1);\r
+ goto DO_NOTHING;\r
+ }\r
+ }\r
+\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::EnableOrDisableXKeymacs) {\r
+ SetKeyboardHookFlag(!m_bHook);\r
+ goto HOOK;\r
+ }\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::EnableXKeymacs) {\r
+ if (!m_bHook) {\r
+ SetKeyboardHookFlag(!m_bHook);\r
+ }\r
+ goto HOOK;\r
+ }\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::DisableXKeymacs) {\r
+ if (m_bHook) {\r
+ SetKeyboardHookFlag(!m_bHook);\r
+ }\r
+ goto HOOK;\r
+ }\r
+ if (!m_bHook) {\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (CCommands::bM_x()) {\r
+ static unsigned int index = 0;\r
+ static TCHAR szPath[MAX_PATH] = {'\0'};\r
+\r
+ if (lParam & BEING_RELEASED) {\r
+ // ignore\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::BackwardChar) {\r
+ if (index) {\r
+ --index;\r
+ }\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::BeginningOfLine) {\r
+ index = 0;\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::DeleteBackwardChar) {\r
+ if (index) {\r
+ --index;\r
+ memmove(&szPath[index], &szPath[index + 1], _tcslen(szPath) - index);\r
+ ModifyM_xTip(szPath);\r
+ }\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::DeleteChar) {\r
+ if (index < _tcslen(szPath)) {\r
+ memmove(&szPath[index], &szPath[index + 1], _tcslen(szPath) - index);\r
+ ModifyM_xTip(szPath);\r
+ }\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::EndOfLine) {\r
+ index = _tcslen(szPath);\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::ForwardChar) {\r
+ if (index < _tcslen(szPath)) {\r
+ ++index;\r
+ }\r
+ goto HOOKX;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::KeyboardQuit) {\r
+ CCommands::bM_x(FALSE);\r
+ index = 0;\r
+ memset(szPath, 0, sizeof(szPath));\r
+ goto HOOK;\r
+ } else if (nKey == VK_RETURN\r
+ || Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::Newline) {\r
+ InvokeM_x(szPath);\r
+\r
+ CCommands::bM_x(FALSE);\r
+ index = 0;\r
+ memset(szPath, 0, sizeof(szPath));\r
+ goto HOOK;\r
+ } else if (index < MAX_PATH - 1) {\r
+ const BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT);\r
+ for (TCHAR nAscii = 1; nAscii != 0; ++nAscii) { // repeat until overflow\r
+ if (nKey != 0 && a2v(nAscii) == nKey && bIsShiftDown == IsShift(nAscii)) {\r
+// CUtils::Log("M-x: %#X (%c), %#X (%c)", nKey, nKey, nAscii, nAscii);\r
+ if (index < _tcslen(szPath)) {\r
+ memmove(&szPath[index + 1], &szPath[index], __min(_tcslen(szPath) - index, MAX_PATH - (index + 1) - 1));\r
+ }\r
+ szPath[index++] = nAscii;\r
+// CUtils::Log("M-x: %c(%#04x)", nAscii, nAscii);\r
+ ModifyM_xTip(szPath);\r
+ goto HOOKX;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (CCommands::bC_u()) {\r
+ if ((nCommandType == NONE) && ('0' <= nKey) && (nKey <= '9')) {\r
+ CCommands::NumericArgument(nKey - '0');\r
+ goto HOOK0_9;\r
+ }\r
+ if ((nCommandType == NONE) && (nKey == 0xBD)) {\r
+ CCommands::NumericArgumentMinus();\r
+ goto HOOK0_9;\r
+ }\r
+ }\r
+\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrl) {\r
+ nOneShotModifier[nKey] = VK_LCONTROL;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
+ nOneShotModifier[nKey] = VK_LCONTROL;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~CONTROL][nKey]].fCommand == CCommands::OneShotModifierCtrlRepeat) {\r
+ ReleaseKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = FALSE;\r
+ Kdu(nKey);\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~META][nKey]].fCommand == CCommands::OneShotModifierAlt) {\r
+ nOneShotModifier[nKey] = VK_LMENU;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
+ nOneShotModifier[nKey] = VK_LMENU;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~META][nKey]].fCommand == CCommands::OneShotModifierAltRepeat) {\r
+ ReleaseKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = FALSE;\r
+ Kdu(nKey);\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShift) {\r
+ nOneShotModifier[nKey] = VK_SHIFT;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
+ nOneShotModifier[nKey] = VK_SHIFT;\r
+ DepressKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = TRUE;\r
+ goto HOOK;\r
+ } else if (Commands[m_nCommandID[m_nApplicationID][nCommandType & ~SHIFT][nKey]].fCommand == CCommands::OneShotModifierShiftRepeat) {\r
+ ReleaseKey(nOneShotModifier[nKey]);\r
+ bCherryOneShotModifier = FALSE;\r
+ Kdu(nKey);\r
+ goto HOOK;\r
+ } else {\r
+ for (int i = 0; i < MAX_KEY; ++i) {\r
+ if (nOneShotModifier[i] == nKey) {\r
+ break;\r
+ }\r
+ }\r
+ if (i == MAX_KEY) {\r
+ bCherryOneShotModifier = FALSE;\r
+ }\r
+ }\r
+\r
+ if (0 <= m_nFunctionID[m_nApplicationID][nCommandType][nKey]\r
+ && m_nFunctionID[m_nApplicationID][nCommandType][nKey] < MAX_FUNCTION\r
+ && _tcslen(m_szFunctionDefinition[m_nFunctionID[m_nApplicationID][nCommandType][nKey]])) {\r
+ CallFunction(m_nFunctionID[m_nApplicationID][nCommandType][nKey]);\r
+ CCommands::Reset(GOTO_HOOK);\r
+ goto HOOK;\r
+ }\r
+\r
+ if (!Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand) {\r
+ if (nKey == VK_CONTROL\r
+ || nKey == VK_LCONTROL\r
+ || nKey == VK_RCONTROL\r
+ || nKey == VK_MENU\r
+ || nKey == VK_LMENU\r
+ || nKey == VK_RMENU\r
+ || nKey == VK_SHIFT\r
+ || nKey == VK_LSHIFT\r
+ || nKey == VK_RSHIFT) {\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (!(nCommandType & SHIFT)) {\r
+ if (CCommands::IsSetMark()) {\r
+ if (CCommands::MoveCaret(nKey, nCommandType & CONTROL) != CONTINUE) {\r
+ CCommands::ClearNumericArgument();\r
+ goto HOOK;\r
+ }\r
+ CCommands::SetMark(FALSE);\r
+ }\r
+ }\r
+\r
+ if (1 < CCommands::GetNumericArgument()) {\r
+ Kdu(nKey, CCommands::GetNumericArgument());\r
+ CCommands::ClearNumericArgument();\r
+ goto HOOK;\r
+ }\r
+\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (CCommands::IsTemporarilyDisableXKeymacs()\r
+ && Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand != CCommands::KeyboardQuit) {\r
+ CCommands::SetTemporarilyDisableXKeymacs(FALSE);\r
+ goto DO_NOTHING;\r
+ }\r
+\r
+ if (m_bAtIbeamCursorOnly[m_nApplicationID][nCommandType][nKey]) {\r
+ CURSORINFO cursorinfo = { sizeof(cursorinfo) };\r
+ if (GetCursorInfo(&cursorinfo) && cursorinfo.flags && cursorinfo.hCursor != LoadCursor(NULL, IDC_IBEAM)) {\r
+ goto DO_NOTHING;\r
+ }\r
+ }\r
+\r
+ m_bRightControl = IsDown(VK_RCONTROL);\r
+ m_bRightAlt = IsDown(VK_RMENU);\r
+ m_bRightShift = IsDown(VK_RSHIFT);\r
+\r
+ if (!bLocked) {\r
+ bLocked = TRUE;\r
+ fCommand = Commands[m_nCommandID[m_nApplicationID][nCommandType][nKey]].fCommand;\r
+RECURSIVE_COMMAND:\r
+ switch (fCommand()) {\r
+ case GOTO_DO_NOTHING:\r
+ bLocked = FALSE;\r
+ goto DO_NOTHING;\r
+ case GOTO_HOOK:\r
+ bLocked = FALSE;\r
+ goto HOOK;\r
+ case GOTO_RECURSIVE:\r
+ goto RECURSIVE;\r
+ case GOTO_HOOKX:\r
+ bLocked = FALSE;\r
+ goto HOOKX;\r
+ case GOTO_HOOK0_9:\r
+ bLocked = FALSE;\r
+ goto HOOK0_9;\r
+ default:\r
+ ASSERT(0);\r
+ bLocked = FALSE;\r
+ goto DO_NOTHING;\r
+ }\r
+ } else {\r
+ goto HOOK_RECURSIVE_KEY;\r
+ }\r
+\r
+DO_NOTHING:\r
+ ModifyShell_NotifyIcon(SHIFT_ICON, IsDown(VK_SHIFT));\r
+ ModifyShell_NotifyIcon(CTRL_ICON, IsControl());\r
+ ModifyShell_NotifyIcon(ALT_ICON, IsDown(VK_MENU));\r
+\r
+ {\r
+ static BOOL bDefiningMacro = FALSE;\r
+ if (m_bDefiningMacro) {\r
+ static BOOL bDown[MAX_KEY] = {'\0'};\r
+\r
+ if (!bDefiningMacro) {\r
+ while (m_Macro.GetHeadPosition()) {\r
+ void *p = m_Macro.GetAt(m_Macro.GetHeadPosition());\r
+ m_Macro.RemoveHead();\r
+ delete p;\r
+ p = NULL;\r
+ }\r
+ memset(bDown, 0, sizeof(bDown));\r
+ }\r
+\r
+ if ((!(lParam & BEING_RELEASED)) || bDown[wParam]) {\r
+ try {\r
+ KbdMacro_t *pKbdMacro = new KbdMacro;\r
+ if (pKbdMacro) {\r
+ pKbdMacro->nCode = nCode;\r
+ pKbdMacro->wParam = wParam;\r
+ pKbdMacro->lParam = lParam;\r
+ pKbdMacro->bOriginal = TRUE;\r
+ m_Macro.AddTail((CObject *)pKbdMacro);\r
+ }\r
+ }\r
+ catch (CMemoryException* e) {\r
+ e->Delete();\r
+// CUtils::Log("KeyboardProc: 'new' threw an exception");\r
+ }\r
+ if (!(lParam & BEING_RELEASED)) {\r
+ bDown[wParam] = TRUE;\r
+ }\r
+ }\r
+ }\r
+ bDefiningMacro = m_bDefiningMacro;\r
+ }\r
+\r
+ return ::CallNextHookEx(m_hHookKeyboard, nCode, wParam, lParam);\r
+\r
+RECURSIVE:\r
+ Kdu(RECURSIVE_KEY, 1, FALSE);\r
+ ModifyShell_NotifyIcon(SHIFT_ICON, IsDown(VK_SHIFT));\r
+ ModifyShell_NotifyIcon(CTRL_ICON, IsControl());\r
+ ModifyShell_NotifyIcon(ALT_ICON, IsDown(VK_MENU));\r
+ return TRUE;\r
+\r
+HOOK:\r
+ CCommands::SetLastCommand(fCommand);\r
+HOOK0_9:\r
+HOOKX:\r
+ ModifyShell_NotifyIcon(SHIFT_ICON, IsDown(VK_SHIFT));\r
+ ModifyShell_NotifyIcon(CTRL_ICON, IsControl());\r
+ ModifyShell_NotifyIcon(ALT_ICON, IsDown(VK_MENU));\r
+HOOK_RECURSIVE_KEY:\r
+ return TRUE;\r
+}\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// CXkeymacsData Class\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// Construction/Destruction\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+CXkeymacsData::CXkeymacsData()\r
+{\r
+ ClearAll();\r
+}\r
+\r
+CXkeymacsData::~CXkeymacsData()\r
+{\r
+\r
+}\r
+\r
+// set application name\r
+void CXkeymacsData::SetApplicationName(LPCTSTR lpszApplicationName)\r
+{\r
+ m_strApplicationName.Format(lpszApplicationName);\r
+}\r
+\r
+// return application name\r
+CString CXkeymacsData::GetApplicationName()\r
+{\r
+ return m_strApplicationName;\r
+}\r
+\r
+// set hook or not\r
+void CXkeymacsData::SetCommandID(int nCommandType, int nKey, int nCommandID)\r
+{\r
+ ASSERT(0 <= nCommandType || nCommandType < MAX_COMMAND_TYPE);\r
+ ASSERT(0 <= nKey || nKey < MAX_KEY);\r
+\r
+ m_nCommandID[nCommandType][nKey] = nCommandID;\r
+}\r
+\r
+// return hook or not\r
+int CXkeymacsData::GetCommandID(int nCommandType, int nKey)\r
+{\r
+ ASSERT(0 <= nCommandType || nCommandType < MAX_COMMAND_TYPE);\r
+ ASSERT(0 <= nKey || nKey < MAX_KEY);\r
+\r
+ return m_nCommandID[nCommandType][nKey];\r
+}\r
+\r
+// set hook at ibeam cursor only or not\r
+void CXkeymacsData::SetAtIbeamCursorOnly(int nCommandType, int nKey, BOOL bAtIbeamCursorOnly)\r
+{\r
+ ASSERT(0 <= nCommandType || nCommandType < MAX_COMMAND_TYPE);\r
+ ASSERT(0 <= nKey || nKey < MAX_KEY);\r
+\r
+ m_bAtIbeamCursorOnly[nCommandType][nKey] = bAtIbeamCursorOnly;\r
+}\r
+\r
+// get hook at ibeam cursor only or not\r
+BOOL CXkeymacsData::GetAtIbeamCursorOnly(int nCommandType, int nKey)\r
+{\r
+ ASSERT(0 <= nCommandType || nCommandType < MAX_COMMAND_TYPE);\r
+ ASSERT(0 <= nKey || nKey < MAX_KEY);\r
+\r
+ return m_bAtIbeamCursorOnly[nCommandType][nKey];\r
+}\r
+\r
+// clear all data\r
+void CXkeymacsData::ClearAll()\r
+{\r
+ ZeroMemory(m_nCommandID, sizeof(m_nCommandID));\r
+ ZeroMemory(m_bAtIbeamCursorOnly, sizeof(m_bAtIbeamCursorOnly));\r
+ m_strApplicationName.Empty();\r
+}\r
+\r
+void CXkeymacsDll::SetApplicationName(int nApplicationID, CString szApplicationName)\r
+{\r
+ ZeroMemory(m_szSpecialApp[nApplicationID], sizeof(m_szSpecialApp[nApplicationID]));\r
+ _tcsncpy(m_szSpecialApp[nApplicationID], szApplicationName, sizeof(m_szSpecialApp[nApplicationID]));\r
+}\r
+\r
+void CXkeymacsDll::SetWindowText(int nApplicationID, CString szWindowText)\r
+{\r
+ ZeroMemory(m_szWindowText[nApplicationID], sizeof(m_szWindowText[nApplicationID]));\r
+ _tcsncpy(m_szWindowText[nApplicationID], szWindowText, sizeof(m_szWindowText[nApplicationID]));\r
+}\r
+\r
+void CXkeymacsDll::SetCommandID(int nApplicationID, int nCommandType, int nKey, int nCommandID)\r
+{\r
+ m_nCommandID[nApplicationID][nCommandType][nKey] = nCommandID;\r
+}\r
+\r
+void CXkeymacsDll::SetAtIbeamCursorOnly(int nApplicationID, int nCommandType, int nKey, BOOL bAtIbeamCursorOnly)\r
+{\r
+ m_bAtIbeamCursorOnly[nApplicationID][nCommandType][nKey] = bAtIbeamCursorOnly;\r
+}\r
+\r
+void CXkeymacsDll::SetKillRingMax(int nApplicationID, int nKillRingMax)\r
+{\r
+ m_nKillRingMax[nApplicationID] = nKillRingMax;\r
+}\r
+\r
+void CXkeymacsDll::SetUseDialogSetting(int nApplicationID, BOOL bUseDialogSetting)\r
+{\r
+ m_bUseDialogSetting[nApplicationID] = bUseDialogSetting;\r
+}\r
+\r
+// Clear data of nApplicationID\r
+void CXkeymacsDll::Clear(int nApplicationID)\r
+{\r
+ if (0 <= nApplicationID && nApplicationID < MAX_APP) {\r
+ ZeroMemory(m_szSpecialApp[nApplicationID], sizeof(m_szSpecialApp[nApplicationID]));\r
+ ZeroMemory(m_nCommandID[nApplicationID], sizeof(m_nCommandID[nApplicationID]));\r
+ ZeroMemory(m_bAtIbeamCursorOnly[nApplicationID], sizeof(m_bAtIbeamCursorOnly[nApplicationID]));\r
+ m_nKillRingMax[nApplicationID] = 0;\r
+ m_bUseDialogSetting[nApplicationID] = FALSE;\r
+ m_nSettingStyle[nApplicationID] = 0;\r
+ } else {\r
+ ASSERT(0);\r
+ }\r
+}\r
+\r
+void CXkeymacsData::SetApplicationTitle(LPCTSTR lpszApplicationTitle)\r
+{\r
+ m_strApplicationTitle.Format(lpszApplicationTitle);\r
+\r
+ // delete white space at the end of the application title.\r
+ while (!m_strApplicationTitle.IsEmpty()\r
+ && _istspace(m_strApplicationTitle.GetAt(m_strApplicationTitle.GetLength() - 1))) {\r
+ m_strApplicationTitle.Delete(m_strApplicationTitle.GetLength() - 1);\r
+ }\r
+}\r
+\r
+CString CXkeymacsData::GetApplicationTitle()\r
+{\r
+ return m_strApplicationTitle;\r
+}\r
+\r
+void CXkeymacsData::SetKillRingMax(int nKillRingMax)\r
+{\r
+ m_nKillRingMax = nKillRingMax;\r
+}\r
+\r
+int CXkeymacsData::GetKillRingMax()\r
+{\r
+ return m_nKillRingMax;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsValidKey(BYTE bVk)\r
+{\r
+ if (bVk == 0xf0) { // 0xf0: Eisu key. GetAsyncKeyState returns the wrong state of Eisu key.\r
+ return FALSE;\r
+ }\r
+\r
+ if (CUtils::IsNT()) {\r
+ switch (bVk) {\r
+ case VK_CONTROL:\r
+ case VK_MENU:\r
+ case VK_SHIFT:\r
+ return FALSE;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+\r
+ return TRUE;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsDepressedModifier(int (__cdecl *Modifier)(void), BOOL bPhysicalKey)\r
+{\r
+ BYTE bVk = 0;\r
+ do {\r
+ if (IsValidKey(bVk)\r
+ && IsDown(bVk, bPhysicalKey)\r
+ && Commands[m_nCommandID[m_nApplicationID][NONE][bVk]].fCommand == Modifier) {\r
+ return TRUE;\r
+ }\r
+ } while (++bVk);\r
+ return FALSE;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsDepressedShiftKeyOnly(BYTE nKey)\r
+{\r
+ if (nKey != VK_SHIFT\r
+ && nKey != VK_LSHIFT\r
+ && nKey != VK_RSHIFT) {\r
+ return FALSE;\r
+ }\r
+\r
+ BYTE bVk = 0;\r
+ do {\r
+ if (bVk == VK_SHIFT\r
+ || bVk == VK_LSHIFT\r
+ || bVk == VK_RSHIFT) {\r
+ continue;\r
+ }\r
+\r
+ if (IsDown(bVk)) {\r
+ return FALSE;\r
+ }\r
+ } while (++bVk);\r
+ return TRUE;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsControl()\r
+{\r
+ return CCommands::bC_() || IsDepressedModifier(CCommands::C_, FALSE);\r
+}\r
+\r
+BOOL CXkeymacsDll::IsMeta()\r
+{\r
+ return CCommands::bM_() || IsDepressedModifier(CCommands::MetaAlt, FALSE);\r
+}\r
+\r
+void CXkeymacsDll::AddKillRing(BOOL bNewData)\r
+{\r
+ if (m_nKillRingMax[m_nApplicationID] == 0) {\r
+ return;\r
+ }\r
+\r
+ CClipboardSnap *pSnap = new CClipboardSnap;\r
+ if( !pSnap ) return;\r
+\r
+ BOOL bCapture = pSnap->Capture();\r
+ bCapture = pSnap->Capture(); // for "office drawing shape format". Can CClipboardSnap care this problem?\r
+\r
+ if( bCapture ) {\r
+ if (bNewData) {\r
+ m_oKillRing.AddHead(pSnap);\r
+ } else {\r
+ if (m_oKillRing.IsEmpty()) {\r
+ m_oKillRing.AddHead(pSnap);\r
+ } else {\r
+ for (CClipboardSnap *pParent = m_oKillRing.GetHead(); pParent->GetNext(); pParent = pParent->GetNext()) {\r
+ ;\r
+ }\r
+ pParent->SetNext(pSnap);\r
+ }\r
+ }\r
+ } else {\r
+ delete pSnap;\r
+ pSnap = NULL;\r
+ }\r
+\r
+ m_nKillRing = 0;\r
+\r
+ if (m_nKillRingMax[m_nApplicationID] < m_oKillRing.GetCount()) {\r
+ CClipboardSnap *pSnap = m_oKillRing.GetTail();\r
+ delete pSnap;\r
+ pSnap = NULL;\r
+ m_oKillRing.RemoveTail();\r
+ }\r
+}\r
+\r
+// Return TRUE if there is another data\r
+// Return FALSE if there is no more data\r
+CClipboardSnap* CXkeymacsDll::GetKillRing(CClipboardSnap* pSnap, BOOL bForce)\r
+{\r
+ if (m_nKillRingMax[m_nApplicationID] == 0) {\r
+ return NULL;\r
+ }\r
+\r
+ if (m_oKillRing.IsEmpty()) {\r
+ return NULL;\r
+ }\r
+\r
+ m_nKillRing %= m_oKillRing.GetCount();\r
+\r
+ if (!bForce) {\r
+ CClipboardSnap oCurrentSnap;\r
+ oCurrentSnap.Capture();\r
+\r
+ CClipboardSnap *pKillRing = m_oKillRing.GetAt(m_oKillRing.FindIndex(m_nKillRing));\r
+ if (!pKillRing) {\r
+ return NULL;\r
+ }\r
+ for (; pKillRing->GetNext(); pKillRing = pKillRing->GetNext()) {\r
+ ;\r
+ }\r
+ if (*pKillRing != oCurrentSnap) {\r
+ return NULL;\r
+ }\r
+ }\r
+\r
+ if (!pSnap) {\r
+ pSnap = m_oKillRing.GetAt(m_oKillRing.FindIndex(m_nKillRing));\r
+ }\r
+ pSnap->Restore();\r
+\r
+ return pSnap->GetNext();\r
+}\r
+\r
+void CXkeymacsDll::Original(int nCommandType, BYTE bVk, int nOriginal)\r
+{\r
+ nCommandType &= ~SHIFT;\r
+\r
+ if (CUtils::IsNT()) {\r
+ switch (bVk) {\r
+ case VK_CONTROL:\r
+ bVk = VK_LCONTROL;\r
+ break;\r
+ case VK_MENU:\r
+ bVk = VK_LMENU;\r
+ break;\r
+ case VK_SHIFT:\r
+ bVk = VK_LSHIFT;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+\r
+ m_nOriginal[nCommandType][bVk] += nOriginal;\r
+}\r
+\r
+int CXkeymacsDll::Original(int nCommandType, BYTE bVk)\r
+{\r
+ nCommandType &= ~SHIFT;\r
+\r
+ if (CUtils::IsNT()) {\r
+ switch (bVk) {\r
+ case VK_CONTROL:\r
+ bVk = VK_LCONTROL;\r
+ break;\r
+ case VK_MENU:\r
+ bVk = VK_LMENU;\r
+ break;\r
+ case VK_SHIFT:\r
+ bVk = VK_LSHIFT;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+\r
+ return m_nOriginal[nCommandType][bVk];\r
+}\r
+\r
+void CXkeymacsDll::IncreaseKillRingIndex(int nKillRing)\r
+{\r
+ m_nKillRing += nKillRing;\r
+}\r
+\r
+// move CCommands\r
+CString CXkeymacsData::GetCommandName(int nCommandID)\r
+{\r
+ CString szCommandName(Commands[nCommandID].szCommandName);\r
+ return szCommandName;\r
+}\r
+\r
+// move CCommands\r
+int CXkeymacsData::GetDefaultCommandType(int nCommandID, int nIndex)\r
+{\r
+ if (nCommandID < 0 || sizeof(Commands) / sizeof(Commands[0]) <= nCommandID\r
+ || nIndex < 0 || sizeof(Commands[nCommandID].keybind) / sizeof(Commands[nCommandID].keybind[0]) <= nIndex) {\r
+ ASSERT(0);\r
+ return NONE;\r
+ }\r
+\r
+ int nCommandType = Commands[nCommandID].keybind[nIndex].nCommandType;\r
+ int bVk = Commands[nCommandID].keybind[nIndex].bVk;\r
+\r
+ if (m_b106Keyboard) {\r
+ if (nCommandType & SHIFT) { // Shift\r
+ switch (bVk) {\r
+ case '2':\r
+ case '6':\r
+ case 0xBA: // VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key\r
+ nCommandType &= ~SHIFT;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ } else { // Normal\r
+ switch (bVk) {\r
+ case 0xBB: // VK_OEM_PLUS Windows 2000/XP: For any country/region, the '+' key\r
+ case 0xC0: // VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the '`~' key\r
+ case 0xDE: // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ nCommandType |= SHIFT;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ return nCommandType;\r
+}\r
+\r
+// move CCommands\r
+int CXkeymacsData::GetDefaultCommandKey(int nCommandID, int nIndex)\r
+{\r
+ if (nCommandID < 0 || sizeof(Commands) / sizeof(Commands[0]) <= nCommandID\r
+ || nIndex < 0 || sizeof(Commands[nCommandID].keybind) / sizeof(Commands[nCommandID].keybind[0]) <= nIndex) {\r
+ ASSERT(0);\r
+ return 0;\r
+ }\r
+\r
+ int nCommandType = Commands[nCommandID].keybind[nIndex].nCommandType;\r
+ int bVk = Commands[nCommandID].keybind[nIndex].bVk;\r
+\r
+ if (m_b106Keyboard) {\r
+ if (nCommandType & SHIFT) { // Shift\r
+ switch (bVk) {\r
+ case '0':\r
+ bVk = '9';\r
+ break;\r
+ case '2':\r
+ bVk = 0xC0; // VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the '`~' key\r
+ break;\r
+ case '6':\r
+ bVk = 0xDE; // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ break;\r
+ case '7':\r
+ bVk = '6';\r
+ break;\r
+ case '8':\r
+ bVk = 0xBA; // VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key\r
+ break;\r
+ case '9':\r
+ bVk = '8';\r
+ break;\r
+ case 0xBD: // VK_OEM_MINUS Windows 2000/XP: For any country/region, the '-' key\r
+ bVk = 0xE2; // VK_OEM_102 Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard\r
+ break;\r
+ case 0xC0:\r
+ bVk = 0xDE; // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ break;\r
+ case 0xDE: // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ bVk = '2';\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ } else { // Normal\r
+ switch (bVk) {\r
+ case 0xBA: // VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key\r
+ bVk = 0xBB; // VK_OEM_PLUS Windows 2000/XP: For any country/region, the '+' key\r
+ break;\r
+ case 0xBB: // VK_OEM_PLUS Windows 2000/XP: For any country/region, the '+' key\r
+ bVk = 0xBD; // VK_OEM_MINUS Windows 2000/XP: For any country/region, the '-' key\r
+ break;\r
+ case 0xDE: // VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. \r
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key\r
+ bVk = '7';\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ return bVk;\r
+}\r
+\r
+// move CCommands\r
+int CXkeymacsData::GetDefaultControlID(int nCommandID, int nIndex)\r
+{\r
+ if (nCommandID < 0 || sizeof(Commands) / sizeof(Commands[0]) <= nCommandID\r
+ || nIndex < 0 || sizeof(Commands[nCommandID].keybind) / sizeof(Commands[nCommandID].keybind[0]) <= nIndex) {\r
+ ASSERT(0);\r
+ return 0;\r
+ }\r
+\r
+ return Commands[nCommandID].keybind[nIndex].nControlID;\r
+}\r
+\r
+// nobody use\r
+int CXkeymacsDll::GetMickey(int nDifferential, int nThreshold1, int nThreshold2, int nAcceleration, int nSpeed)\r
+{\r
+ nDifferential = nDifferential * 10 / nSpeed;\r
+\r
+ switch (nAcceleration) {\r
+ case 2:\r
+ if (nThreshold2 < fabs((double)(nDifferential / 4))) {\r
+ nDifferential /= 4;\r
+ break;\r
+ }\r
+ // Do NOT write break; here.\r
+ case 1:\r
+ if (nThreshold1 < fabs((double)(nDifferential / 2))) {\r
+ nDifferential /= 2;\r
+ }\r
+ break;\r
+ case 0:\r
+ break;\r
+ default:\r
+ ASSERT(0);\r
+ break;\r
+ }\r
+\r
+ return nDifferential;\r
+}\r
+\r
+\r
+int CXkeymacsData::GetSettingStyle()\r
+{\r
+ return m_nSettingStyle;\r
+}\r
+\r
+void CXkeymacsData::SetSettingStyle(int nSettingStyle)\r
+{\r
+ m_nSettingStyle = nSettingStyle;\r
+}\r
+\r
+void CXkeymacsDll::SetSettingStyle(int nApplicationID, int nSettingStyle)\r
+{\r
+ m_nSettingStyle[nApplicationID] = nSettingStyle;\r
+}\r
+\r
+int CXkeymacsData::GetCategoryID(int nCommandID)\r
+{\r
+ return Commands[nCommandID].nCategoryID;\r
+}\r
+\r
+void CXkeymacsData::SetIgnoreUndefinedMetaCtrl(BOOL bIgnoreUndefinedMetaCtrl)\r
+{\r
+ m_bIgnoreUndefinedMetaCtrl = bIgnoreUndefinedMetaCtrl;\r
+}\r
+\r
+BOOL CXkeymacsData::GetIgnoreUndefinedMetaCtrl()\r
+{\r
+ return m_bIgnoreUndefinedMetaCtrl;\r
+}\r
+\r
+void CXkeymacsDll::SetIgnoreUndefinedMetaCtrl(int nApplicationID, BOOL bIgnoreUndefinedMetaCtrl)\r
+{\r
+ m_bIgnoreUndefinedMetaCtrl[nApplicationID] = bIgnoreUndefinedMetaCtrl;\r
+}\r
+\r
+void CXkeymacsData::SetIgnoreUndefinedC_x(BOOL bIgnoreUndefinedC_x)\r
+{\r
+ m_bIgnoreUndefinedC_x = bIgnoreUndefinedC_x;\r
+}\r
+\r
+BOOL CXkeymacsData::GetIgnoreUndefinedC_x()\r
+{\r
+ return m_bIgnoreUndefinedC_x;\r
+}\r
+\r
+void CXkeymacsDll::SetIgnoreUndefinedC_x(int nApplicationID, BOOL bIgnoreUndefinedC_x)\r
+{\r
+ m_bIgnoreUndefinedC_x[nApplicationID] = bIgnoreUndefinedC_x;\r
+}\r
+\r
+void CXkeymacsData::SetEnableCUA(BOOL bEnableCUA)\r
+{\r
+ m_bEnableCUA = bEnableCUA;\r
+}\r
+\r
+BOOL CXkeymacsData::GetEnableCUA()\r
+{\r
+ return m_bEnableCUA;\r
+}\r
+\r
+void CXkeymacsDll::SetEnableCUA(int nApplicationID, BOOL bEnableCUA)\r
+{\r
+ m_bEnableCUA[nApplicationID] = bEnableCUA;\r
+}\r
+\r
+BOOL CXkeymacsDll::GetEnableCUA()\r
+{\r
+ return m_bEnableCUA[m_nApplicationID];\r
+}\r
+\r
+void CXkeymacsData::SetUseDialogSetting(BOOL bUseDialogSetting)\r
+{\r
+ m_bUseDialogSetting = bUseDialogSetting;\r
+}\r
+\r
+BOOL CXkeymacsData::GetUseDialogSetting()\r
+{\r
+ return m_bUseDialogSetting;\r
+}\r
+\r
+int CXkeymacsData::GetDescriptionID(int nCommandID)\r
+{\r
+ return Commands[nCommandID].nDescriptionID;\r
+}\r
+\r
+int CXkeymacsData::GetToolTipID(int nCommandID)\r
+{\r
+ return Commands[nCommandID].nToolTipID;\r
+}\r
+\r
+void CXkeymacsDll::DefiningMacro(BOOL bDefiningMacro)\r
+{\r
+ m_bDefiningMacro = bDefiningMacro;\r
+\r
+ if (bDefiningMacro) { // start-kbd-macro\r
+ if (CCommands::bC_u()) {\r
+ ReleaseKey(VK_SHIFT);\r
+ CallMacro();\r
+ }\r
+ } else { // end-kbd-macro\r
+ while (!m_Macro.IsEmpty()) {\r
+ KbdMacro_t *pKbdMacro = (KbdMacro_t *)m_Macro.GetTail();\r
+ if (pKbdMacro->lParam & BEING_RELEASED) {\r
+ break;\r
+ } else {\r
+ m_Macro.RemoveTail();\r
+ delete pKbdMacro;\r
+ pKbdMacro = NULL;\r
+ }\r
+ }\r
+\r
+// CUtils::Log(_T("Macro MemMap: start"));\r
+ if (!m_Macro.IsEmpty()) {\r
+ static HANDLE hMacro = NULL;\r
+ if (!hMacro) {\r
+ hMacro = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0x3000, _T("macro"));\r
+ }\r
+ if (hMacro) {\r
+// CUtils::Log(_T("Macro MemMap: 1"));\r
+ PVOID pView = MapViewOfFile(hMacro, FILE_MAP_ALL_ACCESS, 0, 0, 0);\r
+// CUtils::Log(_T("Macro MemMap: 2"));\r
+ if (pView) {\r
+// CUtils::Log(_T("Macro MemMap: 2.5"));\r
+ for (int i = 0; i < m_Macro.GetCount(); ++i) {\r
+// CUtils::Log(_T("Macro MemMap: 3-1 %d"), i);\r
+ KbdMacro_t *pKbdMacro = (KbdMacro_t *)m_Macro.GetAt(m_Macro.FindIndex(i));\r
+// CUtils::Log(_T("Macro MemMap: 3-2 %d"), i);\r
+ memcpy((LPTSTR) pView + i * sizeof(KbdMacro_t), pKbdMacro, sizeof(KbdMacro_t));\r
+// CUtils::Log(_T("Macro MemMap: 3-3 %d"), i);\r
+ }\r
+// CUtils::Log(_T("Macro MemMap: 4"));\r
+ UnmapViewOfFile(pView);\r
+// CUtils::Log(_T("Macro MemMap: 5"));\r
+ } else {\r
+// CUtils::Log(_T("Macro MemMpa: error: %d"), GetLastError());\r
+ }\r
+ } else {\r
+// CUtils::Log(_T("Macro MemMap: 6"));\r
+ ASSERT(0);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+BOOL CXkeymacsDll::DefiningMacro()\r
+{\r
+ return m_bDefiningMacro;\r
+}\r
+\r
+/**/ \r
+void CXkeymacsDll::CallMacro()\r
+{\r
+ BOOL bIsCtrlDown = IsDown(VK_CONTROL);\r
+ if (bIsCtrlDown) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ BOOL bIsAltDown = IsDown(VK_MENU);\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ BOOL bIsShiftDown = IsDown(VK_SHIFT);\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ for (POSITION pos = m_Macro.GetHeadPosition(); pos; ) {\r
+ KbdMacro_t *pKbdMacro = (KbdMacro_t *)m_Macro.GetNext(pos);\r
+ if (pKbdMacro->lParam & BEING_RELEASED) {\r
+ ReleaseKey((BYTE)pKbdMacro->wParam);\r
+ } else {\r
+ DepressKey((BYTE)pKbdMacro->wParam, pKbdMacro->bOriginal);\r
+ }\r
+ }\r
+\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+}\r
+\r
+/*/\r
+void CXkeymacsDll::CallMacro() // for debug\r
+{\r
+ CString sz;\r
+ for (POSITION pos = m_Macro.GetHeadPosition(); pos; ) {\r
+ KbdMacro_t *pKbdMacro = (KbdMacro_t *)m_Macro.GetNext(pos);\r
+ if (pKbdMacro->lParam & BEING_RELEASED) {\r
+ CString t;\r
+ t.Format(_T("0x%xu "), pKbdMacro->wParam);\r
+ sz += t;\r
+ } else {\r
+ CString t;\r
+ t.Format(_T("0x%xd "), pKbdMacro->wParam);\r
+ sz += t;\r
+ }\r
+ }\r
+// CUtils::Log(sz);\r
+}\r
+/**/\r
+\r
+void CXkeymacsData::Set106Keyboard(BOOL b106Keyboard)\r
+{\r
+ m_b106Keyboard = b106Keyboard;\r
+}\r
+\r
+BOOL CXkeymacsData::Is106Keyboard()\r
+{\r
+ return m_b106Keyboard;\r
+}\r
+\r
+int CXkeymacsDll::IsPassThrough(BYTE nKey)\r
+{\r
+ BYTE bVk = 0;\r
+ do {\r
+ if (IsDown(bVk)\r
+ && (Commands[m_nCommandID[m_nApplicationID][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
+}\r
+\r
+void CXkeymacsDll::SetKeyboardHookFlag()\r
+{\r
+ SetKeyboardHookFlag(m_bHook);\r
+}\r
+\r
+void CXkeymacsDll::SetFunctionKey(int nFunctionID, int nApplicationID, int nCommandType, int nKey)\r
+{\r
+ if (nApplicationID < 0 || MAX_APP <= nApplicationID\r
+ || nCommandType < 0 || MAX_COMMAND_TYPE <= nCommandType\r
+ || nKey < 0 || MAX_KEY <= nKey) {\r
+ return;\r
+ }\r
+\r
+ m_nFunctionID[nApplicationID][nCommandType][nKey] = nFunctionID;\r
+}\r
+\r
+void CXkeymacsDll::ClearFunctionDefinition()\r
+{\r
+ memset(m_nFunctionID, -1, sizeof(m_nFunctionID));\r
+ memset(m_szFunctionDefinition, 0, sizeof(m_szFunctionDefinition));\r
+}\r
+\r
+void CXkeymacsDll::SetFunctionDefinition(int nFunctionID, CString szDefinition)\r
+{\r
+ if (nFunctionID < 0 || MAX_FUNCTION <= nFunctionID) {\r
+ return;\r
+ }\r
+\r
+ memset(m_szFunctionDefinition[nFunctionID], 0, sizeof(m_szFunctionDefinition[nFunctionID]));\r
+ _stprintf(m_szFunctionDefinition[nFunctionID], _T("%s"), szDefinition);\r
+\r
+ return;\r
+\r
+}\r
+\r
+// call an original command which is defined in dot.xkeymacs\r
+void CXkeymacsDll::CallFunction(int nFunctionID)\r
+{\r
+ CArray<KeyBind_t, KeyBind_t> keybinds;\r
+\r
+ if (nFunctionID < 0 || MAX_FUNCTION <= nFunctionID || !_tcslen(m_szFunctionDefinition[nFunctionID])) {\r
+ return;\r
+ }\r
+\r
+ BOOL bIsCtrlDown = CXkeymacsDll::IsDown(VK_CONTROL);\r
+ BOOL bIsAltDown = CXkeymacsDll::IsDown(VK_MENU);\r
+ BOOL bIsShiftDown = CXkeymacsDll::IsDown(VK_SHIFT);\r
+\r
+ if (m_szFunctionDefinition[nFunctionID][0] == _T('"') && m_szFunctionDefinition[nFunctionID][_tcslen(m_szFunctionDefinition[nFunctionID]) - 1] == _T('"')) {\r
+ for (unsigned int i = 1; i < _tcslen(m_szFunctionDefinition[nFunctionID]) - 1; ++i) { // skip '"'\r
+ keybinds.Add(ParseKey(nFunctionID, i));\r
+ }\r
+ } else if (m_szFunctionDefinition[nFunctionID][0] == _T('[') && m_szFunctionDefinition[nFunctionID][_tcslen(m_szFunctionDefinition[nFunctionID]) - 1] == _T(']')) {\r
+ for (unsigned int i = 1; i < _tcslen(m_szFunctionDefinition[nFunctionID]) - 1; ++i) { // skip '[' and ']'\r
+ if (m_szFunctionDefinition[nFunctionID][i] == _T('?')) { // [?f ?o ?o]\r
+ ++i;\r
+ keybinds.Add(ParseKey(nFunctionID, i));\r
+ } else { // [ControlCharacter]\r
+ for (int nKeyID = 0; nKeyID < sizeof(ControlCharacters) / sizeof(ControlCharacters[0]); ++nKeyID) {\r
+ if (!_tcsncmp(m_szFunctionDefinition[nFunctionID] + i, ControlCharacters[nKeyID].name, _tcslen(ControlCharacters[nKeyID].name))) {\r
+ KeyBind_t keybind = {NONE, ControlCharacters[nKeyID].bVk};\r
+ keybinds.Add(keybind);\r
+ i += _tcslen(ControlCharacters[nKeyID].name);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ return;\r
+ }\r
+\r
+ BOOL bM_x = FALSE;\r
+ TCHAR szPath[MAX_PATH] = {'\0'};\r
+ unsigned int index = 0;\r
+ BOOL bInitialized = FALSE;\r
+\r
+ for (int i = 0; i < keybinds.GetSize(); ++i) {\r
+ const int nCommandType = keybinds.GetAt(i).nCommandType;\r
+ const BYTE bVk = keybinds.GetAt(i).bVk;\r
+\r
+ if (nCommandType < MAX_COMMAND_TYPE && Commands[m_nCommandID[m_nApplicationID][nCommandType][bVk]].fCommand) {\r
+ if (Commands[m_nCommandID[m_nApplicationID][nCommandType][bVk]].fCommand == CCommands::ExecuteExtendedCommand) {\r
+ bM_x = TRUE;\r
+ } else if (!bInitialized) {\r
+ if (bIsCtrlDown) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ bInitialized = TRUE;\r
+ }\r
+// CUtils::Log("CallFunction: Command Name: %s", Commands[m_nCommandID[m_nApplicationID][nCommandType][bVk]].szCommandName);\r
+ while (Commands[m_nCommandID[m_nApplicationID][nCommandType][bVk]].fCommand() == GOTO_RECURSIVE) {\r
+ ;\r
+ }\r
+ } else if (bM_x) {\r
+ if (bVk == VK_RETURN) {\r
+ InvokeM_x(szPath);\r
+ } else {\r
+ for (TCHAR nAscii = 1; nAscii != 0; ++nAscii) { // repeat until overflow\r
+ if (bVk != 0 && a2v(nAscii) == bVk && ((nCommandType & SHIFT) != 0) == IsShift(nAscii)) {\r
+// CUtils::Log("M-x: %#X (%c), %#X (%c)", bVk, bVk, nAscii, nAscii);\r
+ szPath[index++] = nAscii;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ if (!bInitialized) {\r
+ if (bIsCtrlDown) {\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 0);\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+\r
+ if (bIsAltDown) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsShiftDown) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+\r
+ bInitialized = TRUE;\r
+ }\r
+ if (nCommandType & WIN_WIN) {\r
+ DepressKey(VK_LWIN);\r
+ }\r
+ if (nCommandType & WIN_CTRL) {\r
+ DepressKey(VK_CONTROL);\r
+ }\r
+ if (nCommandType & WIN_ALT) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+ if (nCommandType & SHIFT) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ Kdu(bVk);\r
+\r
+ if (nCommandType & SHIFT && (keybinds.GetSize() <= i + 1 || !(keybinds.GetAt(i + 1).nCommandType & SHIFT))) {\r
+ ReleaseKey(VK_SHIFT);\r
+ }\r
+ if (nCommandType & WIN_ALT && (keybinds.GetSize() <= i + 1 || !(keybinds.GetAt(i + 1).nCommandType & WIN_ALT))) {\r
+ ReleaseKey(VK_MENU);\r
+ }\r
+ if (nCommandType & WIN_CTRL && (keybinds.GetSize() <= i + 1 || !(keybinds.GetAt(i + 1).nCommandType & WIN_CTRL))) {\r
+ ReleaseKey(VK_CONTROL);\r
+ }\r
+ if (nCommandType & WIN_WIN && (keybinds.GetSize() <= i + 1 || !(keybinds.GetAt(i + 1).nCommandType & WIN_WIN))) {\r
+ ReleaseKey(VK_LWIN);\r
+ }\r
+ }\r
+ }\r
+\r
+ keybinds.RemoveAll();\r
+\r
+ if (bInitialized) {\r
+ // If these lines are invoked at M-x, a window transition does not work well.\r
+\r
+ if (bIsShiftDown) {\r
+ DepressKey(VK_SHIFT);\r
+ }\r
+\r
+ if (bIsAltDown) {\r
+ DepressKey(VK_MENU);\r
+ }\r
+\r
+ if (bIsCtrlDown) {\r
+ DepressKey(VK_CONTROL);\r
+ CUtils::UpdateKeyboardState(VK_CONTROL, 1);\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+KeyBind_t CXkeymacsDll::ParseKey(const int nFunctionID, unsigned int &i)\r
+{\r
+ KeyBind keybind = {NONE};\r
+\r
+ if (m_szFunctionDefinition[nFunctionID][i] == _T('\\')) {\r
+ ++i;\r
+ BOOL bFound = FALSE;\r
+ do {\r
+ bFound = FALSE;\r
+ for (int ModifierID = 0; ModifierID < sizeof(Modifiers) / sizeof(Modifiers[0]); ++ModifierID) {\r
+ if (!_tcsncmp(m_szFunctionDefinition[nFunctionID] + i, Modifiers[ModifierID].name, _tcslen(Modifiers[ModifierID].name))\r
+ && _tcslen(Modifiers[ModifierID].name) < _tcslen(m_szFunctionDefinition[nFunctionID] + i)) {\r
+ keybind.nCommandType |= Modifiers[ModifierID].id;\r
+ i+= _tcslen(Modifiers[ModifierID].name);\r
+ bFound = TRUE;\r
+ }\r
+ }\r
+ } while (bFound);\r
+ }\r
+ if (IsShift(m_szFunctionDefinition[nFunctionID][i]) && !(keybind.nCommandType & (WIN_CTRL | WIN_ALT | WIN_WIN))) {\r
+ keybind.nCommandType |= SHIFT;\r
+ }\r
+\r
+ for (int nKeyID = 0; nKeyID < sizeof(ControlCharacters) / sizeof(ControlCharacters[0]); ++nKeyID) {\r
+ if (!_tcsncmp(m_szFunctionDefinition[nFunctionID] + i, ControlCharacters[nKeyID].name, _tcslen(ControlCharacters[nKeyID].name))) {\r
+ i += _tcslen(ControlCharacters[nKeyID].name);\r
+ break;\r
+ }\r
+ }\r
+ if (nKeyID < sizeof(ControlCharacters) / sizeof(ControlCharacters[0])) {\r
+ keybind.bVk = ControlCharacters[nKeyID].bVk;\r
+ } else {\r
+ keybind.bVk = a2v(m_szFunctionDefinition[nFunctionID][i]);\r
+ }\r
+\r
+ return keybind;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsShift(TCHAR nAscii)\r
+{\r
+ switch (nAscii) {\r
+ case _T(' '):\r
+ return FALSE;\r
+ case _T('!'):\r
+ case _T('"'):\r
+ case _T('#'):\r
+ case _T('$'):\r
+ case _T('%'):\r
+ case _T('&'):\r
+ return TRUE;\r
+ case _T('\''):\r
+ return CXkeymacsData::Is106Keyboard();\r
+ case _T('('):\r
+ case _T(')'):\r
+ case _T('*'):\r
+ case _T('+'):\r
+ return TRUE;\r
+ case _T(','):\r
+ case _T('-'):\r
+ case _T('.'):\r
+ case _T('/'):\r
+ case _T('0'): case _T('1'): case _T('2'): case _T('3'): case _T('4'): case _T('5'): case _T('6'): case _T('7'): case _T('8'): case _T('9'):\r
+ return FALSE;\r
+ case _T(':'):\r
+ return !CXkeymacsData::Is106Keyboard();\r
+ case _T(';'):\r
+ return FALSE;\r
+ case _T('<'):\r
+ return TRUE;\r
+ case _T('='):\r
+ return CXkeymacsData::Is106Keyboard();\r
+ case _T('>'):\r
+ case _T('?'):\r
+ return TRUE;\r
+ case _T('@'):\r
+ return !CXkeymacsData::Is106Keyboard();\r
+ case _T('A'): case _T('B'): case _T('C'): case _T('D'): case _T('E'): case _T('F'): case _T('G'): case _T('H'): case _T('I'): case _T('J'): \r
+ case _T('K'): case _T('L'): case _T('M'): case _T('N'): case _T('O'): case _T('P'): case _T('Q'): case _T('R'): case _T('S'): case _T('T'): \r
+ case _T('U'): case _T('V'): case _T('W'): case _T('X'): case _T('Y'): case _T('Z'): \r
+ return TRUE;\r
+ case _T('['):\r
+ case _T('\\'):\r
+ case _T(']'):\r
+ return FALSE;\r
+ case _T('^'):\r
+ return !CXkeymacsData::Is106Keyboard();\r
+ case _T('_'):\r
+ return TRUE;\r
+ case _T('`'):\r
+ return CXkeymacsData::Is106Keyboard();\r
+ case _T('a'): case _T('b'): case _T('c'): case _T('d'): case _T('e'): case _T('f'): case _T('g'): case _T('h'): case _T('i'): case _T('j'): \r
+ case _T('k'): case _T('l'): case _T('m'): case _T('n'): case _T('o'): case _T('p'): case _T('q'): case _T('r'): case _T('s'): case _T('t'): \r
+ case _T('u'): case _T('v'): case _T('w'): case _T('x'): case _T('y'): case _T('z'): \r
+ return FALSE;\r
+ case _T('{'):\r
+ case _T('|'):\r
+ case _T('}'):\r
+ case _T('~'):\r
+ return TRUE;\r
+ default:\r
+ return FALSE;\r
+ }\r
+}\r
+\r
+BYTE CXkeymacsDll::a2v(TCHAR nAscii)\r
+{\r
+ switch (nAscii) {\r
+ case _T(' '):\r
+ return VK_SPACE;\r
+ case _T('!'):\r
+ return '1';\r
+ case _T('"'):\r
+ return CXkeymacsData::Is106Keyboard() ? '2' : (BYTE) 0xde; // VK_OEM_7\r
+ case _T('#'):\r
+ return '3';\r
+ case _T('$'):\r
+ return '4';\r
+ case _T('%'):\r
+ return '5';\r
+ case _T('&'):\r
+ return CXkeymacsData::Is106Keyboard() ? '6' : '7';\r
+ case _T('\''):\r
+ return CXkeymacsData::Is106Keyboard() ? '7' : (BYTE) 0xde; // VK_OEM_7\r
+ case _T('('):\r
+ return CXkeymacsData::Is106Keyboard() ? '8' : '9';\r
+ case _T(')'):\r
+ return CXkeymacsData::Is106Keyboard() ? '9' : '0';\r
+ case _T('*'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xba : '8'; // VK_OEM_1\r
+ case _T('+'):\r
+ return 0xbb; // VK_OEM_PLUS\r
+ case _T(','):\r
+ return 0xbc; // VK_OEM_COMMA\r
+ case _T('-'):\r
+ return 0xbd; // VK_OEM_MINUS\r
+ case _T('.'):\r
+ return 0xbe; // VK_OEM_PERIOD\r
+ case _T('/'):\r
+ return 0xbf; // VK_OEM_2\r
+ case _T('0'): case _T('1'): case _T('2'): case _T('3'): case _T('4'): case _T('5'): case _T('6'): case _T('7'): case _T('8'): case _T('9'):\r
+ return nAscii;\r
+ case _T(':'):\r
+ return 0xba; // VK_OEM_1\r
+ case _T(';'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xbb : (BYTE) 0xba; // VK_OEM_PLUS VK_OEM_1\r
+ case _T('<'):\r
+ return 0xbc; // VK_OEM_COMMA\r
+ case _T('='):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xbd : (BYTE) 0xbb; // VK_OEM_MINUS VK_OEM_PLUS\r
+ case _T('>'):\r
+ return 0xbe; // VK_OEM_PERIOD\r
+ case _T('?'):\r
+ return 0xbf; // VK_OEM_2\r
+ case _T('@'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xc0 : '2';\r
+ case _T('A'): case _T('B'): case _T('C'): case _T('D'): case _T('E'): case _T('F'): case _T('G'): case _T('H'): case _T('I'): case _T('J'): \r
+ case _T('K'): case _T('L'): case _T('M'): case _T('N'): case _T('O'): case _T('P'): case _T('Q'): case _T('R'): case _T('S'): case _T('T'): \r
+ case _T('U'): case _T('V'): case _T('W'): case _T('X'): case _T('Y'): case _T('Z'): \r
+ return nAscii;\r
+ case _T('['):\r
+ return 0xdb; // VK_OEM_4\r
+ case _T('\\'):\r
+ return 0xdc; // VK_OEM_5\r
+ case _T(']'):\r
+ return 0xdd; // VK_OEM_6\r
+ case _T('^'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xde : '6'; // VK_OEM_7\r
+ case _T('_'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xe2 : (BYTE) 0xbd; // VK_OEM_102 VK_OEM_MINUS\r
+ case _T('`'):\r
+ return 0xc0; // VK_OEM_3\r
+ case _T('a'): case _T('b'): case _T('c'): case _T('d'): case _T('e'): case _T('f'): case _T('g'): case _T('h'): case _T('i'): case _T('j'): \r
+ case _T('k'): case _T('l'): case _T('m'): case _T('n'): case _T('o'): case _T('p'): case _T('q'): case _T('r'): case _T('s'): case _T('t'): \r
+ case _T('u'): case _T('v'): case _T('w'): case _T('x'): case _T('y'): case _T('z'): \r
+ return (BYTE) (nAscii - (_T('a') - _T('A')));\r
+ case _T('{'):\r
+ return 0xdb; // VK_OEM_4\r
+ case _T('|'):\r
+ return 0xdc; // VK_OEM_5\r
+ case _T('}'):\r
+ return 0xdd; // VK_OEM_6\r
+ case _T('~'):\r
+ return CXkeymacsData::Is106Keyboard() ? (BYTE) 0xde : (BYTE) 0xc0; // VK_OEM_7 VK_OEM_3\r
+ default:\r
+ return 0;\r
+ }\r
+}\r
+\r
+void CXkeymacsDll::DeleteAllShell_NotifyIcon()\r
+{\r
+ for (int icon = 0; icon < MAX_ICON_TYPE; ++icon) {\r
+ DeleteShell_NotifyIcon((ICON_TYPE)icon);\r
+ }\r
+}\r
+\r
+void CXkeymacsDll::AddAllShell_NotifyIcon()\r
+{\r
+ for (int icon = 0; icon < MAX_ICON_TYPE; ++icon) {\r
+ AddShell_NotifyIcon((ICON_TYPE)icon);\r
+ }\r
+}\r
+\r
+void CXkeymacsData::SetWindowText(LPCTSTR lpszWindowText)\r
+{\r
+ m_nWindowTextType = CUtils::GetWindowTextType(lpszWindowText);\r
+ if (m_nWindowTextType == IDS_WINDOW_TEXT_IGNORE) {\r
+ m_strWindowText = _T('*');\r
+ } else {\r
+ m_strWindowText.Format(lpszWindowText);\r
+ }\r
+}\r
+\r
+CString CXkeymacsData::GetWindowText()\r
+{\r
+ return m_strWindowText;\r
+}\r
+\r
+void CXkeymacsData::SetWindowTextType(int nWindowTextType)\r
+{\r
+ m_nWindowTextType = nWindowTextType;\r
+}\r
+\r
+int CXkeymacsData::GetWindowTextType()\r
+{\r
+ return m_nWindowTextType;\r
+}\r
+\r
+BOOL CXkeymacsDll::IsMatchWindowText(CString szWindowText)\r
+{\r
+ BOOL bIsMatchWindowText = TRUE;\r
+\r
+ TCHAR szCurrentWindowText[0x100] = {'\0'};\r
+ GetWindowText(GetForegroundWindow(), szCurrentWindowText, sizeof(szCurrentWindowText));\r
+\r
+ switch (CUtils::GetWindowTextType(szWindowText)) {\r
+ case IDS_WINDOW_TEXT_MATCH: // *foo*\r
+ szWindowText.Delete(0); // Delete first '*'\r
+ szWindowText.Delete(szWindowText.GetLength() - 1); // Delete last '*'\r
+ bIsMatchWindowText = 0 <= CString(szCurrentWindowText).Find(szWindowText);\r
+ break;\r
+ case IDS_WINDOW_TEXT_MATCH_FORWARD: // foo*\r
+ szWindowText.Delete(szWindowText.GetLength() - 1); // Delete last '*'\r
+ bIsMatchWindowText = 0 == CString(szCurrentWindowText).Find(szWindowText);\r
+ break;\r
+ case IDS_WINDOW_TEXT_MATCH_BACKWARD: // *foo\r
+ szWindowText.Delete(0); // Delete first '*'\r
+ bIsMatchWindowText = 0 <= CString(szCurrentWindowText).Find(szWindowText, CString(szCurrentWindowText).GetLength() - szWindowText.GetLength());\r
+ break;\r
+ case IDS_WINDOW_TEXT_MATCH_FULL: // foo\r
+ bIsMatchWindowText = szWindowText == CString(szCurrentWindowText);\r
+ break;\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::SetAccelerate(int nAccelerate)\r
+{\r
+ m_nAccelerate = nAccelerate;\r
+}\r
+\r
+int CXkeymacsDll::GetAccelerate()\r
+{\r
+ return m_nAccelerate;\r
+}\r
+\r
+void CXkeymacsDll::SetKeyboardSpeed(int nKeyboardSpeed)\r
+{\r
+ m_nKeyboardSpeed = nKeyboardSpeed;\r
+}\r
+\r
+unsigned int CXkeymacsDll::GetMaxKeyInterval()\r
+{\r
+ // m_nKeyboardSpeed == 0: slowest repeat rate; approximately 2 characters per second\r
+ // m_nKeyboardSpeed == 31: fastest repeat rate; approximately 30 characters per second\r
+ // 47 ms is max on my machine w/ KeyboardSpeed 31.\r
+ // 1000 / 2 + 50 = 550\r
+ // 1000 / 30 + 50 = 83\r
+ return (unsigned int) (1000.0 / (2.0 + m_nKeyboardSpeed % 32 * 28.0 / 31.0) + 50.0);\r
+}\r
+\r
+void CXkeymacsDll::SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR hDisableWOCQ, HICON hDisable, BOOL bEnable)\r
+{\r
+ m_hCursor[STATUS_ENABLE] = hEnable;\r
+ m_hCursor[STATUS_DISABLE_TMP] = hDisableTMP;\r
+ m_hCursor[STATUS_DISABLE_WOCQ] = hDisableWOCQ;\r
+ m_hCursor[STATUS_DISABLE] = hDisable;\r
+ m_bCursor = bEnable;\r
+}\r
+\r
+void CXkeymacsDll::DoSetCursor()\r
+{\r
+ if (m_bCursor && m_hCurrentCursor) {\r
+ ::SetCursor(m_hCurrentCursor);\r
+ }\r
+}\r
+\r
+BOOL CXkeymacsData::Get326Compatible()\r
+{\r
+ return m_b326Compatible;\r
+}\r
+\r
+void CXkeymacsData::Set326Compatible(BOOL b326Compatible)\r
+{\r
+ m_b326Compatible = b326Compatible;\r
+}\r
+\r
+void CXkeymacsDll::Set326Compatible(int nApplicationID, BOOL b326Compatible)\r
+{\r
+ m_b326Compatible[nApplicationID] = b326Compatible;\r
+}\r
+\r
+BOOL CXkeymacsDll::Get326Compatible()\r
+{\r
+ return m_b326Compatible[m_nApplicationID];\r
+}\r
+\r
+void CXkeymacsDll::InvokeM_x(const TCHAR *const szPath)\r
+{\r
+// CUtils::Log("M-x: szPath=_%s_", szPath);\r
+ int (*fCommand)() = NULL;\r
+\r
+ for (int i = 0; i < sizeof(Commands) / sizeof(Commands[0]); ++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::ModifyM_xTip(const TCHAR *const szPath)\r
+{\r
+ if (szPath) {\r
+ if (_tcslen(szPath) < sizeof(m_stNtfyIcon[MX_ICON].szTip) / sizeof(m_stNtfyIcon[MX_ICON].szTip[0]) - 5) {\r
+ memset(m_stNtfyIcon[MX_ICON].szTip, 0, sizeof(m_stNtfyIcon[MX_ICON].szTip));\r
+ _stprintf(m_stNtfyIcon[MX_ICON].szTip, "M-x %s", szPath);\r
+ }\r
+ } else {\r
+ memset(m_stNtfyIcon[MX_ICON].szTip, 0, sizeof(m_stNtfyIcon[MX_ICON].szTip));\r
+ _stprintf(m_stNtfyIcon[MX_ICON].szTip, "M-x LED");\r
+ }\r
+\r
+ ModifyShell_NotifyIcon(MX_ICON, CCommands::bM_x(), TRUE);\r
+}\r
--- /dev/null
+; xkeymacsdll.def : Declares the module parameters for the DLL.\r
+\r
+LIBRARY "xkeymacs"\r
+DESCRIPTION 'xkeymacs Windows Dynamic Link Library'\r
+\r
+EXPORTS\r
+ ; Explicit exports can go here\r
+\r
+SECTIONS\r
+ .xkmcs READ WRITE SHARED\r
--- /dev/null
+# Microsoft Developer Studio Project File - Name="xkeymacsdll" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=xkeymacsdll - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "xkeymacsdll.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "xkeymacsdll.mak" CFG="xkeymacsdll - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "xkeymacsdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "xkeymacsdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""$/xkeymacsdll", KDAAAAAA"\r
+# PROP Scc_LocalPath "."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "xkeymacsdll - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 6\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 6\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c\r
+# ADD CPP /nologo /MD /W4 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_AFXEXT" /Yu"stdafx.h" /FD /c\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"\r
+# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386\r
+# ADD LINK32 Imm32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"../xkeymacs/Release/xkeymacs.dll"\r
+\r
+!ELSEIF "$(CFG)" == "xkeymacsdll - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 6\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 6\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\xkeymacs\Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W4 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_AFXEXT" /FR /Yu"stdafx.h" /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 Imm32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"../xkeymacs/Debug/xkeymacs.dll" /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "xkeymacsdll - Win32 Release"\r
+# Name "xkeymacsdll - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\ClipboardFormatSnap.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ClipboardSnap.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Commands.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\FunctionDefinition.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\StdAfx.cpp\r
+# ADD CPP /Yc"stdafx.h"\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Utils.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacsdll.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacsdll.def\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacsdll.rc\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=.\ClipboardFormatSnap.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ClipboardSnap.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Commands.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\FunctionDefinition.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Resource.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\StdAfx.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Utils.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\xkeymacsdll.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# Begin Source File\r
+\r
+SOURCE=.\res\xkeymacsdll.rc2\r
+# End Source File\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=.\ReadMe.txt\r
+# End Source File\r
+# End Target\r
+# End Project\r
--- /dev/null
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
+\r
+###############################################################################\r
+\r
+Project: "xkeymacsdll"=.\xkeymacsdll.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+ begin source code control\r
+ "$/xkeymacsdll", KDAAAAAA\r
+ .\r
+ end source code control\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
--- /dev/null
+// xkeymacs.h: interface for the CXkeymacsDll class.\r
+//\r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#if !defined(AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_)\r
+#define AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_\r
+\r
+#if _MSC_VER > 1000\r
+#pragma once\r
+#endif // _MSC_VER > 1000\r
+\r
+HINSTANCE GetThisHInst();\r
+\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
+\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
+\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
+\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
+\r
+typedef struct KeyBind\r
+{\r
+ int nCommandType;\r
+ BYTE bVk;\r
+ int nControlID;\r
+} KeyBind_t;\r
+\r
+typedef struct KbdMacro\r
+{\r
+ int nCode;\r
+ WPARAM wParam;\r
+ LPARAM lParam;\r
+ BOOL bOriginal;\r
+} KbdMacro_t;\r
+\r
+typedef struct Modifier {\r
+ LPCTSTR name;\r
+ int id;\r
+} Modifier_t;\r
+\r
+static const Modifier_t Modifiers[] = {\r
+// { _T("A-"), ALT },\r
+ { _T("C-"), CONTROL},\r
+// { _T("H-"), HYPER },\r
+ { _T("M-"), META },\r
+ { _T("S-"), SHIFT },\r
+// { _T("s-"), SUPER },\r
+ { _T("Ctrl+"), WIN_CTRL },\r
+ { _T("Alt+"), WIN_ALT },\r
+ { _T("Win+"), WIN_WIN },\r
+};\r
+\r
+typedef struct KeyName\r
+{\r
+ BYTE bVk;\r
+ LPCTSTR name;\r
+} KeyName_t;\r
+\r
+static const KeyName_t ControlCharacters[] = {\r
+// { VK_LBUTTON, _T("mouse-1") }, // does not work well\r
+// { VK_RBUTTON, _T("mouse-3") }, // does not work well\r
+ { VK_CANCEL, _T("break") },\r
+// { VK_MBUTTON, _T("mouse-2") }, // does not work well\r
+ { VK_BACK, _T("backspace") },\r
+ { VK_TAB, _T("tab") },\r
+ { VK_RETURN, _T("return") },\r
+ { VK_CAPITAL, _T("capslock") },\r
+ { VK_KANA, _T("kana") },\r
+ { VK_KANJI, _T("kanji") },\r
+ { VK_ESCAPE, _T("escape") },\r
+ { VK_CONVERT, _T("convert") },\r
+ { VK_NONCONVERT, _T("nonconvert") },\r
+// { VK_SPACE, _T("SPC") }, // [? ]\r
+ { VK_PRIOR, _T("prior") },\r
+ { VK_NEXT, _T("next") },\r
+ { VK_END, _T("end") },\r
+ { VK_HOME, _T("home") },\r
+ { VK_LEFT, _T("left") },\r
+ { VK_UP, _T("up") },\r
+ { VK_RIGHT, _T("right") },\r
+ { VK_DOWN, _T("down") },\r
+ { VK_SELECT, _T("select") },\r
+ { VK_PRINT, _T("print") },\r
+ { VK_EXECUTE, _T("execute") },\r
+ { VK_SNAPSHOT, _T("printscreen") }, // work as print\r
+ { VK_INSERT, _T("insert") },\r
+ { VK_DELETE, _T("delete") },\r
+ { VK_LWIN, _T("lwindow") },\r
+ { VK_RWIN, _T("rwindow") },\r
+ { VK_APPS, _T("apps") },\r
+ { VK_SLEEP, _T("sleep") },\r
+ { VK_NUMPAD0, _T("kp-0") },\r
+ { VK_NUMPAD1, _T("kp-1") },\r
+ { VK_NUMPAD2, _T("kp-2") },\r
+ { VK_NUMPAD3, _T("kp-3") },\r
+ { VK_NUMPAD4, _T("kp-4") },\r
+ { VK_NUMPAD5, _T("kp-5") },\r
+ { VK_NUMPAD6, _T("kp-6") },\r
+ { VK_NUMPAD7, _T("kp-7") },\r
+ { VK_NUMPAD8, _T("kp-8") },\r
+ { VK_NUMPAD9, _T("kp-9") },\r
+ { VK_MULTIPLY, _T("kp-multiply") },\r
+ { VK_ADD, _T("kp-add") },\r
+ { VK_SUBTRACT, _T("kp-subtract") },\r
+ { VK_DECIMAL, _T("kp-decimal") },\r
+ { VK_DIVIDE, _T("kp-divide") },\r
+// { VK_F1, _T("f1") }, // FIXME\r
+// { VK_F2, _T("f2") }, // Move at the end of definition of funcgtion keys to keep away confliction f1/f2 and f1?/f2? by _tcsncmp() i.e. strncmp()\r
+ { VK_F3, _T("f3") },\r
+ { VK_F4, _T("f4") },\r
+ { VK_F5, _T("f5") },\r
+ { VK_F6, _T("f6") },\r
+ { VK_F7, _T("f7") },\r
+ { VK_F8, _T("f8") },\r
+ { VK_F9, _T("f9") },\r
+ { VK_F10, _T("f10") },\r
+ { VK_F11, _T("f11") },\r
+ { VK_F12, _T("f12") },\r
+ { VK_F13, _T("f13") },\r
+ { VK_F14, _T("f14") },\r
+ { VK_F15, _T("f15") },\r
+ { VK_F16, _T("f16") },\r
+ { VK_F17, _T("f17") },\r
+ { VK_F18, _T("f18") },\r
+ { VK_F19, _T("f19") },\r
+ { VK_F20, _T("f20") },\r
+ { VK_F21, _T("f21") },\r
+ { VK_F22, _T("f22") },\r
+ { VK_F23, _T("f23") },\r
+ { VK_F24, _T("f24") },\r
+ { VK_F1, _T("f1") },\r
+ { VK_F2, _T("f2") },\r
+ { VK_NUMLOCK, _T("kp-numlock") },\r
+ { VK_SCROLL, _T("scroll") },\r
+ { 0xa6, _T("browser-back") }, // VK_BROWSER_BACK\r
+ { 0xa7, _T("browser-forward") }, // VK_BROWSER_FORWARD\r
+ { 0xa8, _T("browser-refresh") }, // VK_BROWSER_REFRESH\r
+ { 0xa9, _T("browser-stop") }, // VK_BROWSER_STOP\r
+ { 0xaa, _T("browser-search") }, // VK_BROWSER_SEARCH\r
+ { 0xab, _T("browser-favorites") }, // VK_BROWSER_FAVORITES\r
+ { 0xac, _T("browser-home") }, // VK_BROWSER_HOME\r
+ { 0xad, _T("volume-mute") }, // VK_VOLUME_MUTE\r
+ { 0xae, _T("volume-down") }, // VK_VOLUME_DOWN\r
+ { 0xaf, _T("volume-up") }, // VK_VOLUME_UP\r
+ { 0xb0, _T("media-next-track") }, // VK_MEDIA_NEXT_TRACK\r
+ { 0xb1, _T("media-prev-track") }, // VK_MEDIA_PREV_TRACK\r
+ { 0xb2, _T("media-stop") }, // VK_MEDIA_STOP\r
+ { 0xb3, _T("media-play-pause") }, // VK_MEDIA_PLAY_PAUSE\r
+ { 0xb4, _T("launch-mail") }, // VK_LAUNCH_MAIL\r
+ { 0xb5, _T("launch-media-select") }, // VK_LAUNCH_MEDIA_SELECT\r
+ { 0xb6, _T("launch-1") }, // VK_LAUNCH_APP1\r
+ { 0xb7, _T("launch-2") }, // VK_LAUNCH_APP2\r
+};\r
+\r
+class AFX_EXT_CLASS CXkeymacsDll \r
+{\r
+public:\r
+ static void ModifyM_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 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
+// static int m_nPassThrough;\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 BOOL 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 BOOL SetKeyboardHook();\r
+ void SetSettingStyle(int nApplicationID, int nSettingStyle);\r
+ void SetUseDialogSetting(int nApplicationID, BOOL bUseDialogSetting);\r
+ static void AddKillRing(BOOL bNewData = TRUE);\r
+ static void CallMacro();\r
+ static void ClearFunctionDefinition();\r
+ static void DefiningMacro(BOOL bDefiningMacro);\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 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
+ CXkeymacsDll();\r
+ virtual ~CXkeymacsDll();\r
+private:\r
+ static void InvokeM_x(const TCHAR* const szPath);\r
+ static BOOL m_b326Compatible[MAX_APP];\r
+ static void LogCallWndProcMessage(WPARAM wParam, LPARAM lParam);\r
+ static void DoSetCursor();\r
+ static HCURSOR m_hCurrentCursor;\r
+ static BOOL m_bCursor;\r
+ static HCURSOR m_hCursor[MAX_STATUS];\r
+ static int m_nKeyboardSpeed;\r
+ static int m_nAccelerate;\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 HHOOK m_hHookKeyboard;\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 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_t ParseKey(const int nFunctionID, unsigned int &i);\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 int IsPassThrough(BYTE nKey);\r
+ static BOOL IsDepressedShiftKeyOnly(BYTE nKey);\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 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_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
+};\r
+\r
+\r
+class AFX_EXT_CLASS CXkeymacsData \r
+{\r
+public:\r
+ void Set326Compatible(BOOL b326Compatible);\r
+ BOOL Get326Compatible();\r
+ int GetWindowTextType();\r
+ void SetWindowTextType(int nWindowTextType);\r
+ CString GetWindowText();\r
+ void SetWindowText(LPCTSTR lpszWindowText);\r
+ static BOOL Is106Keyboard();\r
+ static void Set106Keyboard(BOOL b106Keyboard);\r
+ static int GetToolTipID(int nCommandID);\r
+ static int GetDescriptionID(int nCommandID);\r
+ void SetUseDialogSetting(BOOL bUseDialogSetting);\r
+ BOOL GetUseDialogSetting();\r
+ BOOL GetEnableCUA();\r
+ void SetEnableCUA(BOOL bEnableCUA);\r
+ BOOL GetIgnoreUndefinedC_x();\r
+ void SetIgnoreUndefinedC_x(BOOL bIgnoreUndefinedC_x);\r
+ BOOL GetIgnoreUndefinedMetaCtrl();\r
+ void SetIgnoreUndefinedMetaCtrl(BOOL bIgnoreUndefinedMetaCtrl);\r
+ static int GetCategoryID(int nCommandID);\r
+ void SetSettingStyle(int nSettingStyle);\r
+ int GetSettingStyle();\r
+ static int GetDefaultControlID(int nCommandID, int nIndex);\r
+ static int GetDefaultCommandKey(int nCommandID, int nIndex);\r
+ static int GetDefaultCommandType(int nCommandID, int nIndex);\r
+ static CString GetCommandName(int nCommandID);\r
+ void SetKillRingMax(int nKillRingMax);\r
+ int GetKillRingMax();\r
+ CString GetApplicationTitle();\r
+ void SetApplicationTitle(LPCTSTR lpszApplicationTitle);\r
+ void ClearAll();\r
+ int GetCommandID(int nCommandType, int nKey);\r
+ void SetCommandID(int nCommandType, int nKey, int nCommandID);\r
+ BOOL GetAtIbeamCursorOnly(int nCommandType, int nKey);\r
+ void SetAtIbeamCursorOnly(int nCommandType, int nKey, BOOL bAtIbeamCursorOnly);\r
+ CString GetApplicationName();\r
+ void SetApplicationName(LPCTSTR lpszApplicationName);\r
+ CXkeymacsData();\r
+ virtual ~CXkeymacsData();\r
+\r
+private:\r
+ BOOL m_b326Compatible;\r
+ int m_nWindowTextType;\r
+ CString m_strWindowText;\r
+ BOOL m_bEnableCUA;\r
+ static BOOL m_b106Keyboard;\r
+ BOOL m_bUseDialogSetting;\r
+ BOOL m_bIgnoreUndefinedC_x;\r
+ BOOL m_bIgnoreUndefinedMetaCtrl;\r
+ int m_nSettingStyle;\r
+ int m_nKillRingMax;\r
+ CString m_strApplicationTitle;\r
+ CString m_strApplicationName;\r
+ int m_nCommandID[MAX_COMMAND_TYPE][MAX_KEY];\r
+ BOOL m_bAtIbeamCursorOnly[MAX_COMMAND_TYPE][MAX_KEY];\r
+};\r
+\r
+#endif // !defined(AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_)\r
--- /dev/null
+//Microsoft Developer Studio generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "afxres.h"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// \89p\8cê (±Òض) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "#include ""afxres.h""\r\n"\r
+ "\0"\r
+END\r
+\r
+3 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+ "#define _AFX_NO_SPLITTER_RESOURCES\r\n"\r
+ "#define _AFX_NO_OLE_RESOURCES\r\n"\r
+ "#define _AFX_NO_TRACKER_RESOURCES\r\n"\r
+ "#define _AFX_NO_PROPERTY_RESOURCES\r\n"\r
+ "\r\n"\r
+ "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"\r
+ "#ifdef _WIN32\r\n"\r
+ "LANGUAGE 9, 1\r\n"\r
+ "#pragma code_page(1252)\r\n"\r
+ "#endif //_WIN32\r\n"\r
+ "#include ""res\\xkeymacsdll.rc2"" // non-Microsoft Visual C++ edited resources\r\n"\r
+ "#include ""afxres.rc"" // Standard components\r\n"\r
+ "#endif\r\n"\r
+ "\0"\r
+END\r
+\r
+#endif // APSTUDIO_INVOKED\r
+\r
+\r
+#ifndef _MAC\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Version\r
+//\r
+\r
+VS_VERSION_INFO VERSIONINFO\r
+ FILEVERSION 3,47,0,0\r
+ PRODUCTVERSION 3,47,0,0\r
+ FILEFLAGSMASK 0x3fL\r
+#ifdef _DEBUG\r
+ FILEFLAGS 0x1L\r
+#else\r
+ FILEFLAGS 0x0L\r
+#endif\r
+ FILEOS 0x4L\r
+ FILETYPE 0x2L\r
+ FILESUBTYPE 0x0L\r
+BEGIN\r
+ BLOCK "StringFileInfo"\r
+ BEGIN\r
+ BLOCK "040904b0"\r
+ BEGIN\r
+ VALUE "Comments", "\0"\r
+ VALUE "CompanyName", "\0"\r
+ VALUE "FileDescription", "XKeymacs DLL\0"\r
+ VALUE "FileVersion", "3, 47, 0, 0\0"\r
+ VALUE "InternalName", "xkeymacsdll\0"\r
+ VALUE "LegalCopyright", "Copyright (C) 2001-2008\0"\r
+ VALUE "LegalTrademarks", "\0"\r
+ VALUE "OriginalFilename", "xkeymacs.dll\0"\r
+ VALUE "PrivateBuild", "\0"\r
+ VALUE "ProductName", "XKeymacs Dynamic Link Library\0"\r
+ VALUE "ProductVersion", "3, 47, 0, 0\0"\r
+ VALUE "SpecialBuild", "\0"\r
+ END\r
+ END\r
+ BLOCK "VarFileInfo"\r
+ BEGIN\r
+ VALUE "Translation", 0x409, 1200\r
+ END\r
+END\r
+\r
+#endif // !_MAC\r
+\r
+#endif // \89p\8cê (±Òض) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+#define _AFX_NO_SPLITTER_RESOURCES\r
+#define _AFX_NO_OLE_RESOURCES\r
+#define _AFX_NO_TRACKER_RESOURCES\r
+#define _AFX_NO_PROPERTY_RESOURCES\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE 9, 1\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+#include "res\xkeymacsdll.rc2" // non-Microsoft Visual C++ edited resources\r
+#include "afxres.rc" // Standard components\r
+#endif\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif // not APSTUDIO_INVOKED\r
+\r