1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\r
2 // dlginvestigate.cpp
\r
10 #include "stringtool.h"
\r
12 #include "windowstool.h"
\r
13 #include "vkeytable.h"
\r
14 #include "dlginvestigate.h"
\r
19 class DlgInvestigate
\r
22 UINT m_WM_MAYU_MESSAGE; ///
\r
23 DlgInvestigateData m_data; ///
\r
27 DlgInvestigate(HWND i_hwnd)
\r
29 m_WM_MAYU_MESSAGE(RegisterWindowMessage(
\r
30 addSessionId(WM_MAYU_MESSAGE_NAME).c_str())) {
\r
31 m_data.m_engine = NULL;
\r
32 m_data.m_hwndLog = NULL;
\r
36 BOOL wmInitDialog(HWND /* i_focus */, LPARAM i_lParam) {
\r
37 m_data = *reinterpret_cast<DlgInvestigateData *>(i_lParam);
\r
38 setSmallIcon(m_hwnd, IDI_ICON_mayu);
\r
39 setBigIcon(m_hwnd, IDI_ICON_mayu);
\r
45 unsetSmallIcon(m_hwnd);
\r
46 unsetBigIcon(m_hwnd);
\r
52 ShowWindow(m_hwnd, SW_HIDE);
\r
57 BOOL wmCommand(int /* i_notifyCode */, int i_id, HWND /* i_hwndControl */) {
\r
60 ShowWindow(m_hwnd, SW_HIDE);
\r
68 BOOL wmFocusNotify(bool i_isFocused, HWND i_hwndFocus) {
\r
69 if (m_data.m_engine &&
\r
70 i_hwndFocus == GetDlgItem(m_hwnd, IDC_CUSTOM_scancode))
\r
71 m_data.m_engine->enableLogMode(i_isFocused);
\r
76 BOOL wmTargetNotify(HWND i_hwndTarget) {
\r
77 _TCHAR className[GANA_MAX_ATOM_LENGTH];
\r
79 if (GetClassName(i_hwndTarget, className, NUMBER_OF(className))) {
\r
80 if (_tcsicmp(className, _T("ConsoleWindowClass")) == 0) {
\r
81 _TCHAR titleName[1024];
\r
82 if (GetWindowText(i_hwndTarget, titleName, NUMBER_OF(titleName)) == 0)
\r
83 titleName[0] = _T('\0');
\r
85 Acquire a(&m_data.m_engine->m_log, 1);
\r
86 m_data.m_engine->m_log << _T("HWND:\t") << std::hex
\r
87 << reinterpret_cast<int>(i_hwndTarget)
\r
88 << std::dec << std::endl;
\r
90 Acquire a(&m_data.m_engine->m_log, 0);
\r
91 m_data.m_engine->m_log << _T("CLASS:\t") << className << std::endl;
\r
92 m_data.m_engine->m_log << _T("TITLE:\t") << titleName << std::endl;
\r
97 CHECK_TRUE( PostMessage(i_hwndTarget, m_WM_MAYU_MESSAGE,
\r
98 MayuMessage_notifyName, 0) );
\r
103 BOOL wmVkeyNotify(int i_nVirtKey, int /* i_repeatCount */,
\r
104 BYTE /* i_scanCode */, bool i_isExtended,
\r
105 bool /* i_isAltDown */, bool i_isKeyup) {
\r
106 Acquire a(&m_data.m_engine->m_log, 0);
\r
107 m_data.m_engine->m_log
\r
108 << (i_isExtended ? _T(" E-") : _T(" "))
\r
109 << _T("0x") << std::hex << std::setw(2) << std::setfill(_T('0'))
\r
110 << i_nVirtKey << std::dec << _T(" &VK( ")
\r
111 << (i_isExtended ? _T("E-") : _T(" "))
\r
112 << (i_isKeyup ? _T("U-") : _T("D-"));
\r
114 for (const VKeyTable *vkt = g_vkeyTable; vkt->m_name; ++ vkt) {
\r
115 if (vkt->m_code == i_nVirtKey) {
\r
116 m_data.m_engine->m_log << vkt->m_name << _T(" )") << std::endl;
\r
120 m_data.m_engine->m_log << _T("0x") << std::hex << std::setw(2)
\r
121 << std::setfill(_T('0')) << i_nVirtKey << std::dec
\r
122 << _T(" )") << std::endl;
\r
126 BOOL wmMove(int /* i_x */, int /* i_y */) {
\r
128 GetWindowRect(m_hwnd, &rc1);
\r
129 GetWindowRect(m_data.m_hwndLog, &rc2);
\r
131 MoveWindow(m_data.m_hwndLog, rc1.left, rc1.bottom,
\r
132 rcWidth(&rc2), rcHeight(&rc2), TRUE);
\r
141 INT_PTR CALLBACK dlgInvestigate_dlgProc(HWND i_hwnd, UINT i_message,
\r
143 BOOL CALLBACK dlgInvestigate_dlgProc(HWND i_hwnd, UINT i_message,
\r
145 WPARAM i_wParam, LPARAM i_lParam)
\r
147 DlgInvestigate *wc;
\r
148 getUserData(i_hwnd, &wc);
\r
150 switch (i_message) {
\r
151 case WM_INITDIALOG:
\r
152 wc = setUserData(i_hwnd, new DlgInvestigate(i_hwnd));
\r
153 return wc->wmInitDialog(reinterpret_cast<HWND>(i_wParam), i_lParam);
\r
156 switch (i_message) {
\r
158 return wc->wmMove(static_cast<short>(LOWORD(i_lParam)),
\r
159 static_cast<short>(HIWORD(i_lParam)));
\r
161 return wc->wmCommand(HIWORD(i_wParam), LOWORD(i_wParam),
\r
162 reinterpret_cast<HWND>(i_lParam));
\r
164 return wc->wmClose();
\r
166 return wc->wmDestroy();
\r
167 case WM_APP_notifyFocus:
\r
168 return wc->wmFocusNotify(!!i_wParam,
\r
169 reinterpret_cast<HWND>(i_lParam));
\r
170 case WM_APP_targetNotify:
\r
171 return wc->wmTargetNotify(reinterpret_cast<HWND>(i_lParam));
\r
172 case WM_APP_notifyVKey:
\r
173 return wc->wmVkeyNotify(
\r
174 static_cast<int>(i_wParam), static_cast<int>(i_lParam & 0xffff),
\r
175 static_cast<BYTE>((i_lParam >> 16) & 0xff),
\r
176 !!(i_lParam & (1 << 24)),
\r
177 !!(i_lParam & (1 << 29)),
\r
178 !!(i_lParam & (1 << 31)));
\r