MyEdit.cpp
上传用户:tree100901
上传日期:2016-07-12
资源大小:182k
文件大小:4k
源码类别:

外挂编程

开发平台:

Visual C++

  1. // MyEdit.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "WarH.h"
  5. #include "MyEdit.h"
  6. #include "Register.h"
  7. // CMyEdit
  8. IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
  9. CMyEdit::CMyEdit()
  10. {
  11. m_DeshWnd = NULL;
  12. m_cVKcharSrc = NULL;
  13. m_cVKcharDes = NULL;
  14. }
  15. CMyEdit::~CMyEdit()
  16. {
  17. }
  18. BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
  19. ON_WM_KEYDOWN()
  20. END_MESSAGE_MAP()
  21. // CMyEdit 消息处理程序
  22. BOOL CMyEdit::SaveKey(int index)
  23. {
  24. CRegister reg;
  25. BOOL bResult = TRUE;
  26. char buf[] = "0key";
  27. buf[0] = char(index); 
  28. DWORD dwKey = m_cVKcharSrc | (m_cVKcharDes << 16);
  29. bResult = bResult && reg.CreateKeyW(HKEY_CURRENT_USER, _T("Software\Blizzard Entertainment\Warcraft III\WarH"));
  30. bResult = bResult && reg.SetValueExExA(buf, REG_BINARY, (LPBYTE)&dwKey, sizeof(DWORD));
  31. return bResult;
  32. }
  33. BOOL CMyEdit::ReadKey(int index)
  34. {
  35. CRegister reg;
  36. BOOL bResult = TRUE;
  37. char buf[] = "0key";
  38. buf[0] = char(index); 
  39. DWORD dwKey;
  40. bResult = bResult && reg.CreateKeyW(HKEY_CURRENT_USER, _T("Software\Blizzard Entertainment\Warcraft III\WarH"));
  41. bResult = bResult && reg.QueryValueExA(buf, (LPBYTE)&dwKey, 4);
  42. if (bResult)
  43. {
  44. m_cVKcharSrc = dwKey & 0x000000FF;
  45. m_cVKcharDes = (dwKey & 0x00FF0000) >> 16;
  46. if (m_cVKcharSrc && m_cVKcharDes)
  47. {
  48. if (m_DeshWnd)
  49. {
  50. ::SendMessage(m_hWnd, WM_KEYDOWN, m_cVKcharSrc, 0);
  51. ::SendMessage(m_DeshWnd, WM_KEYDOWN, m_cVKcharDes, 0);
  52. }
  53. else
  54. {
  55. ::SendMessage(m_hWnd, WM_KEYDOWN, m_cVKcharDes, 0);
  56. }
  57. }
  58. }
  59. return bResult;
  60. }
  61. LRESULT CMyEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  62. {
  63. CHAR buf[4] = "0键";
  64. switch (message)
  65. {
  66. case WM_INIT:
  67. m_cVKcharSrc = (UCHAR)wParam;
  68. m_DeshWnd = (HWND)lParam;
  69. SetWindowText(_T("<无>"));
  70. break;
  71. case WM_CHAR:
  72. break;
  73. case WM_KEYDOWN:
  74. if (wParam == VK_BACK)
  75. {
  76. SetWindowText(_T("<无>"));
  77. if (m_DeshWnd)
  78. {
  79. ::PostMessage(m_DeshWnd, WM_SETSRC, 0, 0);
  80. }
  81. else
  82. {
  83. ::PostMessage(m_hWnd, WM_SETDES, 0, 0);
  84. }
  85. }
  86. else if('A' <= wParam && wParam <= 'Z' || '0' <= wParam && wParam <= '9')
  87. {
  88. if (m_DeshWnd)
  89. {
  90. ::PostMessage(m_DeshWnd, WM_SETSRC, wParam, 0);
  91. }
  92. else
  93. {
  94. ::PostMessage(m_hWnd, WM_SETDES, wParam, 0);
  95. }
  96. buf[0] = wParam;
  97. SetWindowTextA(m_hWnd, buf);
  98. }
  99. break;
  100. case WM_SETSRC:
  101. if (m_cVKcharDes)
  102. {
  103. ::UnregisterHotKey(m_hWnd, m_cVKcharDes);
  104. }
  105. m_cVKcharSrc = (UCHAR)wParam;
  106. PostMessage(WM_SETHOT, m_cVKcharSrc, m_cVKcharDes);
  107. break;
  108. case WM_SETDES:
  109. if (m_cVKcharDes)
  110. {
  111. ::UnregisterHotKey(m_hWnd, m_cVKcharDes);
  112. }
  113. m_cVKcharDes = (UCHAR)wParam;
  114. PostMessage(WM_SETHOT, m_cVKcharSrc, m_cVKcharDes);
  115. break;
  116. case WM_SETHOT:
  117. if (m_cVKcharDes)
  118. {
  119. ::UnregisterHotKey(m_hWnd, m_cVKcharDes);
  120. }
  121. if (wParam && lParam)
  122. {
  123. m_cVKcharSrc = (UCHAR)wParam;
  124. m_cVKcharDes = (UCHAR)lParam;
  125. ::RegisterHotKey(m_hWnd, m_cVKcharDes, 0, m_cVKcharDes);
  126. }
  127. break;
  128. case WM_HOTKEY:
  129. if (!theApp.m_bInput && theApp.m_bActive && theApp.m_bChangeKey)
  130. {
  131. keybd_event(m_cVKcharSrc, 0, KEYEVENTF_EXTENDEDKEY, 0);
  132. keybd_event(m_cVKcharSrc, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
  133. }
  134. else
  135. {
  136. ::UnregisterHotKey(m_hWnd, m_cVKcharDes);
  137. keybd_event(m_cVKcharDes, 0, KEYEVENTF_EXTENDEDKEY, 0);
  138. keybd_event(m_cVKcharDes, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
  139. ::RegisterHotKey(m_hWnd, m_cVKcharDes, 0, m_cVKcharDes);
  140. }
  141. break;
  142. default:
  143. return CWnd::DefWindowProc(message, wParam, lParam);
  144. }
  145. return 0;
  146. }