diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2015-03-30 19:25:51 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2015-03-30 19:25:51 +0000 |
commit | bc1ff98d45f87cd70825e7adfd5f106b6b3fb116 (patch) | |
tree | 006b3b00307696467ada445fd4168b8bda2200e6 /plugins/HwHotKeys/src | |
parent | 5c46a4ff3d889e7ef4b2c4a8e6c353f84207a7ab (diff) |
HwHotKeys plugin added, does not compile in MSVC 2010 yet (error C2470)
git-svn-id: http://svn.miranda-ng.org/main/trunk@12557 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/HwHotKeys/src')
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys.cpp | 23 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys.h | 87 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp | 108 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp | 150 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp | 133 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp | 243 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_Util.cpp | 139 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_resource.h | bin | 0 -> 1340 bytes | |||
-rw-r--r-- | plugins/HwHotKeys/src/HwHotKeys_version.h | 41 | ||||
-rw-r--r-- | plugins/HwHotKeys/src/stdafx.cpp | 18 |
10 files changed, 942 insertions, 0 deletions
diff --git a/plugins/HwHotKeys/src/HwHotKeys.cpp b/plugins/HwHotKeys/src/HwHotKeys.cpp new file mode 100644 index 0000000000..a922fd80ba --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys.cpp @@ -0,0 +1,23 @@ +// HwHotKeys.cpp: определяет экспортированные функции для приложения DLL.
+//
+
+#include "stdafx.h"
+#include "HwHotKey.h"
+
+
+
+// Пример экспортированной переменной
+HWHOTKEYS_API int nHwHotKeys=0;
+
+// Пример экспортированной функции.
+HWHOTKEYS_API int fnHwHotKeys(void)
+{
+ return 42;
+}
+
+// Конструктор для экспортированного класса.
+// см. определение класса в HwHotKeys.h
+CHwHotKeys::CHwHotKeys()
+{
+ return;
+}
diff --git a/plugins/HwHotKeys/src/HwHotKeys.h b/plugins/HwHotKeys/src/HwHotKeys.h new file mode 100644 index 0000000000..82b3a7bb61 --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys.h @@ -0,0 +1,87 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+#include <SDKDDKVer.h>
+#include <windows.h>
+
+#include <newpluginapi.h>
+#include <m_langpack.h>
+#include <m_database.h>
+#include <m_options.h>
+#include <m_clistint.h>
+
+#include <Strsafe.h>
+
+#include "HwHotKeys_resource.h"
+#include "HwHotKeys_version.h"
+
+int initializeOptions(WPARAM, LPARAM);
+INT_PTR CALLBACK OptDlgProc(HWND, UINT, WPARAM, LPARAM);
+VOID HwHotKeys_PrintFullKeyname(DWORD);
+BOOL HwHotKeys_CompareCurrentScancode(DWORD);
+LRESULT CALLBACK key_hook(INT, WPARAM, LPARAM);
+extern CLIST_INTERFACE *pcli;
+
+
+extern HINSTANCE hInstance;
+extern INT hLangpack;
+extern HWND hDialogWnd; // глобально используется для вывода туда в реалтайме сканкодов клавы, из хука
+extern HHOOK hHook;
+
+extern DWORD code_Close_tmp;
+extern DWORD code_HideShow_tmp;
+extern DWORD code_ReadMsg_tmp;
+extern DWORD code_Close;
+extern DWORD code_HideShow;
+extern DWORD code_ReadMsg;
+
+extern DWORD key_code;
+extern DWORD key_code_raw;
+extern DWORD key_code_assign;
+
+
+extern CHAR key_name_buffer[150];
+extern const CHAR *key_tab[0x200];
+
+extern const CHAR *t_CL;
+extern const CHAR *t_CR;
+extern const CHAR *t_CC;
+extern const CHAR *t_AL;
+extern const CHAR *t_AR;
+extern const CHAR *t_AA;
+extern const CHAR *t_WL;
+extern const CHAR *t_WR;
+extern const CHAR *t_WW;
+extern const CHAR *t_SL;
+extern const CHAR *t_SR;
+extern const CHAR *t_SS;
+
+// значения связаны с битами в HwHotKeys_CompareCurrentScancode
+enum : DWORD { key_flag_sr = 0x01000000 };
+enum : DWORD { key_flag_cr = 0x02000000 };
+enum : DWORD { key_flag_ar = 0x04000000 };
+enum : DWORD { key_flag_wr = 0x08000000 };
+enum : DWORD { key_flag_sl = 0x10000000 };
+enum : DWORD { key_flag_cl = 0x20000000 };
+enum : DWORD { key_flag_al = 0x40000000 };
+enum : DWORD { key_flag_wl = 0x80000000 };
+enum : DWORD { key_flag_ss = 0x00100000 };
+enum : DWORD { key_flag_cc = 0x00200000 };
+enum : DWORD { key_flag_aa = 0x00400000 };
+enum : DWORD { key_flag_ww = 0x00800000 };
diff --git a/plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp b/plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp new file mode 100644 index 0000000000..c159acc2d8 --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp @@ -0,0 +1,108 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+#include "HwHotKeys.h"
+
+INT_PTR CALLBACK OptDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg) {
+ case WM_INITDIALOG:
+
+ hDialogWnd = hDlg;
+
+ TranslateDialogDefault(hDlg);
+
+ code_Close_tmp = code_Close;
+ HwHotKeys_PrintFullKeyname(code_Close_tmp);
+ SetDlgItemTextA(hDlg, dlg_close_edit, key_name_buffer);
+ code_HideShow_tmp = code_HideShow;
+ HwHotKeys_PrintFullKeyname(code_HideShow_tmp);
+ SetDlgItemTextA(hDlg, dlg_hide_edit, key_name_buffer);
+ code_ReadMsg_tmp = code_ReadMsg;
+ HwHotKeys_PrintFullKeyname(code_ReadMsg_tmp);
+ SetDlgItemTextA(hDlg, dlg_read_edit, key_name_buffer);
+
+ break; //case WM_INITDIALOG
+
+ case WM_COMMAND:
+ switch (wParam)
+ {
+ case dlg_close_set:
+ code_Close_tmp = key_code_assign;
+ HwHotKeys_PrintFullKeyname(key_code_assign);
+ SetDlgItemTextA(hDialogWnd, dlg_close_edit, key_name_buffer);
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0); // сообщает системе о том что были изменения
+ break;
+ case dlg_close_clear:
+ code_Close_tmp = 0;
+ SetDlgItemTextA(hDialogWnd, dlg_close_edit, "");
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ break;
+ case dlg_hide_set:
+ code_HideShow_tmp = key_code_assign;
+ HwHotKeys_PrintFullKeyname(key_code_assign);
+ SetDlgItemTextA(hDialogWnd, dlg_hide_edit, key_name_buffer);
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ break;
+ case dlg_hide_clear:
+ code_HideShow_tmp = 0;
+ SetDlgItemTextA(hDialogWnd, dlg_hide_edit, "");
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ break;
+ case dlg_read_set:
+ code_ReadMsg_tmp = key_code_assign;
+ HwHotKeys_PrintFullKeyname(key_code_assign);
+ SetDlgItemTextA(hDialogWnd, dlg_read_edit, key_name_buffer);
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ break;
+ case dlg_read_clear:
+ code_ReadMsg_tmp = 0;
+ SetDlgItemTextA(hDialogWnd, dlg_read_edit, "");
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break; //case WM_COMMAND
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY: // система просит сохранить настройки плагина
+ code_Close = code_Close_tmp;
+ db_set_dw(0, __DbModName, "Close", code_Close_tmp);
+ code_HideShow = code_HideShow_tmp;
+ db_set_dw(0, __DbModName, "HideShow", code_HideShow_tmp);
+ code_ReadMsg = code_ReadMsg_tmp;
+ db_set_dw(0, __DbModName, "ReadMsg", code_ReadMsg_tmp);
+ break; //case PSN_APPLY
+ }
+ break; //case 0
+ }
+ break; //case WM_NOTIFY
+
+ case WM_DESTROY:
+ hDialogWnd = 0; // используется для вывода туда в реалтайме сканкодов клавы (пока открыты настройки), 0 (при закрытии диалога) блокирует это
+ break;
+ }
+
+ return 0;
+}
+
diff --git a/plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp b/plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp new file mode 100644 index 0000000000..6a36f8e31e --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp @@ -0,0 +1,150 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+
+
+#include "HwHotKeys.h"
+
+HINSTANCE hInstance;
+int hLangpack;
+HWND hDialogWnd = 0; // хэндл окна настроек, он глобально используется для вывода туда в реалтайме сканкодов клавы из хука
+HHOOK hHook;
+CLIST_INTERFACE *pcli;
+
+// там хранятся настройки - сканкоды кнопок для закрытия/показа/чтения, на которые должны реагировать соответствующие действия
+DWORD code_Close = 0;
+DWORD code_HideShow = 0;
+DWORD code_ReadMsg = 0;
+// в _tmp копируются настройки на время диалога настроек
+DWORD code_Close_tmp = 0;
+DWORD code_HideShow_tmp = 0;
+DWORD code_ReadMsg_tmp = 0;
+// формат сканкодов тут такой:
+// младшие 0...7 биты - это аппаратный сканкод (как он приходит в KbdLLHookStruct.scanCode&0xFF)
+// 8 бит - это как бы часть сканкода, флаг LLKHF_EXTENDED ((LOBYTE(KbdLLHookStruct.flags)&1) - часть кнопок с этим флагом
+// (авторам 101-кнопочной клавы не хватило 255 сканкодов, т.к. там много старых кнопок которые уже давно вымерли типа F13-F20).
+// итак, плагин оперирует 9-битными сканкодами (имена кнопок всех этих сканкодов прописаны в таблице *key_tab[0x200]).
+// биты 9-19 - не используются.
+// биты 20-31 - это флаги регистров, Shift/Ctrl/Alt/Win. На 4 кнопки - 12 битов. Потому что каждая кнопка 3 имеет бита - левая, правая, или любая.
+// битовые маски регистров опеределены в key_flag_sr и соседних именах
+
+// плагин оперирует 10 - битными "сканкодами" собственного формата.
+// младшие 0...7 биты - это обычно аппаратный сканкод (как он приходит в KbdLLHookStruct.scanCode&0xFF)
+// 8 бит - это как бы часть сканкода, флаг LLKHF_EXTENDED ((LOBYTE(KbdLLHookStruct.flags)&1) - часть кнопок с этим флагом
+// (авторам 101-кнопочной клавы не хватило 255 сканкодов, т.к. там много старых кнопок которые уже давно вымерли типа F13-F20).
+// 9 бит - это значит что в битах 0...7 не аппаратный сканкод, а VK-код (KbdLLHookStruct.vkCode), и 8 бит при этом всегда 0.
+// сделано это потому что некоторые USB-клавиатуры не выдают в хук аппаратные скандоды, и если там 0 - то будет использован VK-код.
+// (имена кнопок всех этих сканкодов прописаны в таблице *key_tab[0x300]).
+// биты 10-19 - не используются.
+// биты 20-31 - это флаги регистров, Shift/Ctrl/Alt/Win. На 4 кнопки - 12 битов. Потому что каждая кнопка 3 имеет бита - левая, правая, или любая.
+// битовые маски регистров опеределены в key_flag_sr и соседних именах
+
+
+
+
+DWORD key_code = 0; // там постоянно обновляется сканкод текущей нажатой комбинации
+DWORD key_code_raw = 0;
+DWORD key_code_assign = 0; // во время настроек там хранится сканкод последней нажатой комбинации, который можно назначить для действия.
+
+CHAR key_name_buffer[150]; // буфер куда печатается имя кнопки в настройках. ANSI.
+// Самая длинная в теории строка - «L_Shift + L_Ctrl + L_Alt + L_Win + R_Shift + R_Ctrl + R_Alt + R_Win + MSO_Print, HP_TouchPadOff» - менее 100 букв.
+
+// ============================================================================
+
+BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
+ hInstance = hModule;
+ return TRUE;
+}
+
+// ============================================================================
+
+PLUGININFOEX PluginInfoEx = {
+ sizeof(PLUGININFOEX),
+ __PLUGIN_NAME,
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESCRIPTION_MIR,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ // {315B3800-8258-44C4-B60E-58C50B9303B6} - GUID для плагина HwHotKeys
+ { 0x315b3800, 0x8258, 0x44c4, { 0xb6, 0xe, 0x58, 0xc5, 0xb, 0x93, 0x3, 0xb6 } }
+};
+
+extern "C" __declspec(dllexport) PLUGININFOEX * MirandaPluginInfoEx(DWORD)
+{
+ return &PluginInfoEx;
+}
+
+// ============================================================================
+
+extern "C" __declspec(dllexport) int Load(void)
+{
+ // загружаем (из БД) настройки плагина
+ code_Close = db_get_dw(0, __DbModName, "Close", 0);
+ code_HideShow = db_get_dw(0, __DbModName, "HideShow", 0);
+ code_ReadMsg = db_get_dw(0, __DbModName, "ReadMsg", 0);
+
+ // установка кода локализации - макрос mir_getLP(PlgInfoEx)
+ mir_getLP(&PluginInfoEx);
+
+ // Интерфейс контактлиста - макрос заполняет CLIST_INTERFACE *pcli;
+ mir_getCLI();
+
+ // регистрация диалога опций
+ HookEvent(ME_OPT_INITIALISE, initializeOptions);
+
+ // установка хука для низкоуровневой обработки хоткеев
+ hHook = SetWindowsHookExA(WH_KEYBOARD_LL, key_hook, hInstance, 0);
+
+// StringCbPrintfA(key_name_buffer, 100, "hHook = 0x%x, Err = %u", hHook, GetLastError);
+// MessageBoxA(0, key_name_buffer, 0, 0);
+
+ return 0;
+}
+
+// ====================================
+
+int initializeOptions(WPARAM wParam, LPARAM)
+{
+ OPTIONSDIALOGPAGE OptDlgPg = { sizeof(OptDlgPg) };
+ OptDlgPg.position = 100000000;
+ OptDlgPg.hInstance = hInstance;
+ OptDlgPg.flags = ODPF_BOLDGROUPS | ODPF_TCHAR;
+ OptDlgPg.pszTemplate = MAKEINTRESOURCEA(dlg_options);
+ OptDlgPg.ptszGroup = LPGENT("Customize");
+ OptDlgPg.ptszTitle = LPGENT(__PLUGIN_NAME);
+ OptDlgPg.pfnDlgProc = OptDlgProc;
+ OptDlgPg.hLangpack = hLangpack;
+ Options_AddPage(wParam, &OptDlgPg);
+ return 0;
+}
+
+// ============================================================================
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ UnhookWindowsHookEx(hHook);
+ return 0;
+}
+
+// ============================================================================
+
diff --git a/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp b/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp new file mode 100644 index 0000000000..ac80b69036 --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp @@ -0,0 +1,133 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+#include "HwHotKeys.h"
+
+LRESULT CALLBACK key_hook(int nCode, WPARAM wParam, LPARAM lParam) // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985%28v=vs.85%29.aspx
+{
+ KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT *)lParam;
+ if (nCode >= 0)
+ {
+ if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) // при отпускании любой кнопки - сбрасываем всю накопленную комбинацию
+ {
+ key_code = 0;
+ }
+ else if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
+ {
+ if (!(pKbdLLHookStruct->scanCode & 0xFFFFFF00) && (pKbdLLHookStruct->scanCode & 0xFF)) // && !(pKbdLLHookStruct->flags & LLKHF_INJECTED))
+ // 0xFFFFFF00 фильтр для странных двойных сканкодов например перед L_Alt/AltGr,
+ // 0xFF фильтр для нулевых сканкодов(приходят при всякой там эмуляции нажатий и т.п.)
+ // LLKHF_INJECTED фильтр для эмулируемых нажатий, но есть проблема с некоторыми клавами
+ {
+ // строим комплексный код(сканкод + доп.флаг LLKHF_EXTENDED), от 0 до 1FF
+ key_code_raw = (LOBYTE(pKbdLLHookStruct->scanCode) | ((LOBYTE(pKbdLLHookStruct->flags)&1) << 8));
+
+ if (hDialogWnd) // если диалог настроек открыт - выводим в него нажимаемые кнопоки
+ {
+ StringCbPrintfA(key_name_buffer, sizeof(key_name_buffer), "%03X %s", key_code_raw, key_tab[(key_code_raw & 0x1FF)]);
+ SetDlgItemTextA(hDialogWnd, dlg_scancode_edit, key_name_buffer);
+ }
+
+ switch (key_code_raw) // проверяем кнопки модификаторов
+ {
+ case 0x01D: // L_Ctrl
+ key_code |= key_flag_cl;
+ break; // после модификаторов - ничего не делаем, выход из хука.
+ case 0x11D: // R_Ctrl
+ key_code |= key_flag_cr;
+ break;
+ case 0x038: // L_Alt
+ key_code |= key_flag_al;
+ break;
+ case 0x138: // R_Alt
+ key_code |= key_flag_ar;
+ break;
+ case 0x15B: // L_Win
+ key_code |= key_flag_wl;
+ break;
+ case 0x15C: // R_Win
+ key_code |= key_flag_wr;
+ break;
+ case 0x02A: // L_Shift
+ key_code |= key_flag_sl;
+ break;
+ case 0x036: // R_Shift
+ key_code |= key_flag_sr;
+ break;
+ case 0x12A: // L_Shift_fake
+ key_code |= key_flag_sl;
+ break;
+ case 0x136: // R_Shift_fake
+ key_code |= key_flag_sr;
+ break;
+ default: // если это не кнопка модификатора - то дальнейшая обработка
+ key_code = (LOWORD(key_code_raw)) | (key_code & 0xFFFF0000); // в старшей половине там лежат биты модификаторов - их оставляем (они там могут быть от предыдущего раза)
+ if (hDialogWnd) // если диалог настроек открыт - выводим в него комплексную комбинацию (типа Shift+Key), которую потом можно назначить;
+ {
+ if (IsDlgButtonChecked(hDialogWnd, dlg_combine)) // левые/правые модификаторы объединять в один?
+ {
+ DWORD tmp1, tmp2;
+ tmp1 = ((key_code >> 4) | (key_code >> 8)) & 0x00F00000;
+ tmp2 = LOWORD(key_code) | tmp1;
+ tmp2 &= 0x00F001FF;
+ key_code_assign = tmp2;
+ }
+ else
+ {
+ key_code_assign = key_code;
+ }
+ HwHotKeys_PrintFullKeyname(key_code_assign);
+ SetDlgItemTextA(hDialogWnd, dlg_keyname_edit, key_name_buffer);
+ }
+ else // хоткей выполняют действия только если закрыт диалог настроек (чтобы не мешал настраивать)
+ {
+ if (HwHotKeys_CompareCurrentScancode(code_Close)) // хоткей полного закрытия Miranda
+ {
+ // Beep(300, 200);
+ CallService("CloseAction", 0, 0);
+ return 1;
+ }
+ else if (HwHotKeys_CompareCurrentScancode(code_HideShow)) // хоткей сворачивания/разворачивания главного окна Miranda
+ {
+ // Beep(700, 200);
+ pcli->pfnShowHide(0, 0); // есть варианты
+ return 1;
+ }
+ else if (HwHotKeys_CompareCurrentScancode(code_ReadMsg)) // хоткей чтения сообщения
+ {
+ // Beep(1500, 200);
+ if (pcli->pfnEventsProcessTrayDoubleClick(0) != 0) // клик по трею для стандартного открытия сообщения
+ { // иначе - окно чата уже открыто и надо его вытащить наверх...
+ SetForegroundWindow(pcli->hwndContactList);
+ SetFocus(pcli->hwndContactList);
+ // хотя всё равно это не очень работает в новой винде
+ // надо http://www.rsdn.ru/article/qna/ui/wndsetfg.xml
+ // но пока незнаю где тут взять хэндл окна чата(причём именно для
+ // выбранного контакта, их же несколько может быть если простой srmm)
+ // у миранды в hkRead такие же проблемы
+ }
+ return 1; // возврат 1 запрещает дальнейшую работу кнопки, т.е. кнопка после нашего плагина никому более не достанется
+ }
+ }
+ }
+ }
+ }
+ }
+ return CallNextHookEx(hHook, nCode, wParam, lParam);
+}
diff --git a/plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp b/plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp new file mode 100644 index 0000000000..a372bca19e --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp @@ -0,0 +1,243 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+#include "HwHotKeys.h"
+
+// тут описаны известные имена кнопок по аппаратным сканкодам (KbdLLHookStruct.scanCode & 0xFF) и ((LOBYTE(KbdLLHookStruct.flags)&1)
+// и по VK-кодам (KbdLLHookStruct.vkCode)
+
+// при обнаружении новых кнопок (на мультимедийных клавиатурах) просьба сообщать об этом автору!
+
+
+
+// имена для KbdLLHookStruct.scanCode
+const CHAR *k000 = "Undefined!";
+const CHAR *k001 = "Esc";
+const CHAR *k002 = "1";
+const CHAR *k003 = "2";
+const CHAR *k004 = "3";
+const CHAR *k005 = "4";
+const CHAR *k006 = "5";
+const CHAR *k007 = "6";
+const CHAR *k008 = "7";
+const CHAR *k009 = "8";
+const CHAR *k00A = "9";
+const CHAR *k00B = "0";
+const CHAR *k00C = "-_";
+const CHAR *k00D = "=+";
+const CHAR *k00E = "Backspace";
+const CHAR *k00F = "Tab";
+const CHAR *k010 = "Q";
+const CHAR *k011 = "W";
+const CHAR *k012 = "E";
+const CHAR *k013 = "R";
+const CHAR *k014 = "T";
+const CHAR *k015 = "Y";
+const CHAR *k016 = "U";
+const CHAR *k017 = "I";
+const CHAR *k018 = "O";
+const CHAR *k019 = "P";
+const CHAR *k01A = "[{";
+const CHAR *k01B = "]}";
+const CHAR *k01C = "Enter";
+const CHAR *k01D = "L_Ctrl";
+const CHAR *k01E = "A";
+const CHAR *k01F = "S";
+const CHAR *k020 = "D";
+const CHAR *k021 = "F";
+const CHAR *k022 = "G";
+const CHAR *k023 = "H";
+const CHAR *k024 = "J";
+const CHAR *k025 = "K";
+const CHAR *k026 = "L";
+const CHAR *k027 = ";:";
+const CHAR *k028 = "\'\""; // '"
+const CHAR *k029 = "`~";
+const CHAR *k02A = "L_Shift";
+const CHAR *k02B = "\\|";
+const CHAR *k02C = "Z";
+const CHAR *k02D = "X";
+const CHAR *k02E = "C";
+const CHAR *k02F = "V";
+const CHAR *k030 = "B";
+const CHAR *k031 = "N";
+const CHAR *k032 = "M";
+const CHAR *k033 = ",<";
+const CHAR *k034 = ".>";
+const CHAR *k035 = "/?";
+const CHAR *k036 = "R_Shift";
+const CHAR *k037 = "Keypad_*"; // 37 (Keypad - *) or(*/ PrtScn) on a 83 / 84 - key keyboard
+const CHAR *k038 = "L_Alt";
+const CHAR *k039 = "Space";
+const CHAR *k03A = "Caps_Lock";
+const CHAR *k03B = "F1";
+const CHAR *k03C = "F2";
+const CHAR *k03D = "F3";
+const CHAR *k03E = "F4";
+const CHAR *k03F = "F5";
+const CHAR *k040 = "F6";
+const CHAR *k041 = "F7";
+const CHAR *k042 = "F8";
+const CHAR *k043 = "F9";
+const CHAR *k044 = "F10";
+const CHAR *k045 = "Pause";
+const CHAR *k046 = "Scroll_Lock";
+const CHAR *k047 = "Keypad_7_Home";
+const CHAR *k048 = "Keypad_8_Up";
+const CHAR *k049 = "Keypad_9_PageUp";
+const CHAR *k04A = "Keypad_-";
+const CHAR *k04B = "Keypad_4_Left";
+const CHAR *k04C = "Keypad_5";
+const CHAR *k04D = "Keypad_6_Right";
+const CHAR *k04E = "Keypad_+";
+const CHAR *k04F = "Keypad_1_End";
+const CHAR *k050 = "Keypad_2_Down";
+const CHAR *k051 = "Keypad_3_PageDown";
+const CHAR *k052 = "Keypad_0_Insert";
+const CHAR *k053 = "Keypad_._Delete";
+const CHAR *k054 = "Alt_SysRq"; // Alt + PrtScr
+
+const CHAR *k057 = "F11";
+const CHAR *k058 = "F12";
+
+const CHAR *k105 = "Messenger";
+
+const CHAR *k107 = "MSO_Redo";
+const CHAR *k108 = "MSO_Undo";
+const CHAR *k10A = "HP_Lock";
+const CHAR *k10E = "HP_DVD";
+const CHAR *k110 = "Media_PrevTrack";
+const CHAR *k116 = "LogOff";
+const CHAR *k119 = "Media_NextTrack";
+const CHAR *k11C = "Keypad_Enter";
+const CHAR *k11D = "R_Ctrl";
+const CHAR *k120 = "Volume_Mute";
+const CHAR *k121 = "Calculator";
+const CHAR *k122 = "Media_Play/Pause";
+const CHAR *k123 = "MSO_Spell";
+const CHAR *k124 = "Media_Stop";
+const CHAR *k12A = "L_Shift_fake";
+const CHAR *k12E = "Volume_Down";
+const CHAR *k130 = "Volume_Up";
+const CHAR *k131 = "HP_Help";
+const CHAR *k132 = "Browser_Start";
+const CHAR *k135 = "Keypad_/";
+const CHAR *k136 = "R_Shift_fake";
+const CHAR *k137 = "PrintScreen"; // ? ? ? no - ext ?
+const CHAR *k138 = "R_Alt";
+
+
+const CHAR *k13B = "MSO_Help";
+const CHAR *k13C = "MyMusic";
+const CHAR *k13E = "MSO_New";
+const CHAR *k13F = "MSO_Open";
+const CHAR *k140 = "MSO_Close";
+const CHAR *k141 = "MSO_Reply";
+const CHAR *k142 = "MSO_Fwd";
+const CHAR *k143 = "MSO_Send";
+
+const CHAR *k145 = "Num_Lock";
+const CHAR *k146 = "Ctrl_Break"; // Ctrl + Pause
+const CHAR *k147 = "Home"; // grey
+const CHAR *k148 = "Up"; // grey
+const CHAR *k149 = "PageUp"; // grey
+const CHAR *k14B = "Left"; // grey
+const CHAR *k14C = "MyDocuments";
+const CHAR *k14D = "Right"; // grey
+const CHAR *k14F = "End"; // grey
+const CHAR *k150 = "Down"; // grey
+const CHAR *k151 = "PageDown"; // grey
+const CHAR *k152 = "Insert"; // grey
+const CHAR *k153 = "Delete"; // grey
+
+const CHAR *k157 = "MSO_Save";
+const CHAR *k158 = "MSO_Print,HP_TouchPadOff";
+const CHAR *k159 = "HP_TouchPadOn";
+
+const CHAR *k15B = "L_Win";
+const CHAR *k15C = "R_Win";
+const CHAR *k15D = "Context_Menu";
+const CHAR *k15E = "Power";
+const CHAR *k15F = "Sleep";
+const CHAR *k163 = "Wake";
+const CHAR *k164 = "MyPictures";
+const CHAR *k16C = "Mail";
+const CHAR *k16D = "Media_Select";
+
+const CHAR *k165 = "Browser_Search";
+const CHAR *k166 = "Browser_Favorites";
+const CHAR *k167 = "Browser_Refresh";
+const CHAR *k168 = "Browser_Stop";
+const CHAR *k169 = "Browser_Forward";
+const CHAR *k16A = "Browser_Back";
+
+
+// кнопки регистров (Shift,Ctrl,Alt,Win)
+const CHAR *t_CL = k01D;
+const CHAR *t_CR = k11D;
+const CHAR *t_CC = k01D + 2;
+const CHAR *t_AL = k038;
+const CHAR *t_AR = k138;
+const CHAR *t_AA = k038 + 2;
+const CHAR *t_WL = k15B;
+const CHAR *t_WR = k15C;
+const CHAR *t_WW = k038 + 2;
+const CHAR *t_SL = k02A;
+const CHAR *t_SR = k036;
+const CHAR *t_SS = k02A + 2;
+
+
+
+const CHAR *key_tab[0x200]
+{
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k00D, k00E, k00F, // 000 - простые KbdLLHookStruct.scanCode
+ k010, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C, k01D, k01E, k01F, // 010
+ k020, k021, k022, k023, k024, k025, k026, k027, k028, k029, k02A, k02B, k02C, k02D, k02E, k02F, // 020
+ k030, k031, k032, k033, k034, k035, k036, k037, k038, k039, k03A, k03B, k03C, k03D, k03E, k03F, // 030
+ k040, k041, k042, k043, k044, k045, k046, k047, k048, k049, k04A, k04B, k04C, k04D, k04E, k04F, // 040
+ k050, k051, k052, k053, k054, k000, k000, k057, k058, k000, k000, k000, k000, k000, k000, k000, // 050
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 060
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 070
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 080
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 090
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0A0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0B0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0C0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0D0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0E0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 0F0
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ k000, k000, k000, k000, k000, k105, k000, k107, k108, k000, k10A, k000, k000, k000, k10E, k000, // 100 - LLKHF_EXTENDED KbdLLHookStruct.scanCode
+ k110, k000, k000, k000, k000, k000, k116, k000, k000, k119, k000, k000, k11C, k11D, k000, k000, // 110
+ k120, k121, k122, k123, k124, k000, k000, k000, k000, k000, k12A, k000, k000, k000, k12E, k000, // 120
+ k130, k131, k132, k000, k000, k135, k136, k137, k138, k000, k000, k13B, k13C, k000, k13E, k13F, // 130
+ k140, k141, k142, k143, k000, k145, k146, k147, k148, k149, k000, k14B, k14C, k14D, k000, k14F, // 140
+ k150, k151, k152, k153, k000, k000, k000, k157, k158, k159, k000, k15B, k15C, k15D, k15E, k15F, // 150
+ k000, k000, k000, k163, k164, k165, k166, k167, k168, k169, k16A, k000, k16C, k16D, k000, k000, // 160
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 170
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 180
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 190
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1A0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1B0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1C0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1D0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1E0
+ k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, k000, // 1F0
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+};
diff --git a/plugins/HwHotKeys/src/HwHotKeys_Util.cpp b/plugins/HwHotKeys/src/HwHotKeys_Util.cpp new file mode 100644 index 0000000000..cc22aeae7c --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_Util.cpp @@ -0,0 +1,139 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+#include "HwHotKeys.h"
+
+
+
+// сравнивает текущий нажатый сканкод с указанным
+BOOL HwHotKeys_CompareCurrentScancode(DWORD scancode)
+{
+ if (key_code == scancode) // key_code - текущий нажатый на клавиатуре сканкод.
+ {
+ return true; // сканкод напрямую совпал - TRUE.
+ }
+ if (!(scancode & 0x00F00000)) // проверяем нет ли в сканкоде запроса на любой из левого/правого регистра.
+ {
+ return false;
+ }
+ DWORD tmp1, tmp2; // битовые маски: 0xF0000000 - левые кнопки Sft/Ctr/Alt/Win, 0x0F000000 - правые кнопки, 0x00F00000 - любые кнопки Sft/Ctr/Alt/Win
+ tmp1 = key_code >> 8; // сдвигаем биты левых и правых кнопок.
+ tmp2 = key_code >> 4;
+ tmp1 |= tmp2;
+ tmp1 &= 0x00F00000;
+ tmp2 = (key_code | tmp1) & 0x00FFFFFF;
+ if (tmp2 == scancode)
+ {
+ return true;
+ }
+ return false;
+}
+
+
+
+// печатает в буфер key_name_buffer текстовое описание нажатой комбинации кнопок
+// Кодировка ANSI (для экономии места, всё равно названия клавиш английские)
+VOID HwHotKeys_PrintFullKeyname(DWORD scancode)
+{
+ key_name_buffer[0] = 0;
+ if (!scancode) // если нулевой сканкод - то пустую строку делаем.
+ {
+ return;
+ }
+
+ if (scancode & key_flag_sl) // L_Shift
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_SL);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_sr) // R_Shift
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_SR);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_ss) // Shift
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_SS);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+
+ if (scancode & key_flag_cl) // L_Ctrl
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_CL);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_cr) // R_Ctrl
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_CR);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_cc) // Ctrl
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_CC);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+
+ if (scancode & key_flag_al) // L_Alt
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_AL);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_ar) // R_Alt
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_AR);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_aa) // Alt
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_AA);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+
+ if (scancode & key_flag_wl) // L_Win
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_WL);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_wr) // R_Win
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_WR);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+ if (scancode & key_flag_ww) // Win
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), t_WW);
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), " + ");
+ }
+
+ if ((scancode & 0x1FF) < sizeof(key_tab)) // защита от ошибочных данных - чтобы не выйти из таблицы имён.
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), key_tab[(scancode & 0x1FF)]);
+ }
+ else
+ {
+ StringCbCatA(key_name_buffer, sizeof(key_name_buffer), "out of range");
+ }
+
+ INT_PTR tmp1 = mir_strlen(key_name_buffer); // допечатываем в конеце строки сканкод - для удобства работы с пока ещё не известными (безимянными) кнопками
+ StringCbPrintfA(key_name_buffer + tmp1, sizeof(key_name_buffer) - tmp1, " (%03X)", (scancode & 0x1FF));
+
+ return;
+}
+
+
diff --git a/plugins/HwHotKeys/src/HwHotKeys_resource.h b/plugins/HwHotKeys/src/HwHotKeys_resource.h Binary files differnew file mode 100644 index 0000000000..c96893bfcf --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_resource.h diff --git a/plugins/HwHotKeys/src/HwHotKeys_version.h b/plugins/HwHotKeys/src/HwHotKeys_version.h new file mode 100644 index 0000000000..e4d52b0082 --- /dev/null +++ b/plugins/HwHotKeys/src/HwHotKeys_version.h @@ -0,0 +1,41 @@ +/* ============================================================================
+Hardware HotKeys plugin for Miranda NG.
+Copyright © Eugene f2065, http://f2065.narod.ru, f2065 mail.ru, ICQ 35078112
+
+This program is free software; you can redistribute it and / or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 - 1307, USA.
+============================================================================ */
+
+// история версий:
+// 1.0.0.6 - первая версия Hardware HotKeys для Miranda NG (более ранние версии были для Miranda IM), исправление старых ошибок.
+
+
+#define __MAJOR_VERSION 1
+#define __MINOR_VERSION 0
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 6
+
+#include <stdver.h>
+
+#define __PLUGIN_NAME "Hardware HotKeys" // dll-fileinfo "FileVersion" и "ProductName", меню в настройках миранды, название плагина в миранде. Нелокализуемое!
+#define __FILENAME "HwHotKeys.dll" // dll-fileinfo "OriginalFilename"
+#define __DESCRIPTION_MIR "Hardware HotKeys plugin for Miranda NG\r\nAllows to assign expanded multimedia keys (only for PS/2-keyboards)." // описание плагина в миранде (локализуемое)
+#define __DESCRIPTION_DLL "Hardware HotKeys plugin for Miranda NG." // описание плагина в dll-fileinfo "FileDescription" (там многострочные строки - не работают). Нелокализуемое!
+#define __AUTHOR "Eugene f2065" // описание плагина в миранде
+#define __AUTHOREMAIL "f2065@mail.ru" // описание плагина в миранде
+#define __AUTHORWEB "http://f2065.narod.ru/" // описание плагина в dll-fileinfo "CompanyName", описание плагина в миранде
+#define __COPYRIGHT "© 2010-2015 Eugene f2065" // описание плагина в dll-fileinfo "LegalCopyright", описание плагина в миранде
+
+#define __DbModName "HwHotKeys" // имя раздела настроек плагина в БД миранды
+
diff --git a/plugins/HwHotKeys/src/stdafx.cpp b/plugins/HwHotKeys/src/stdafx.cpp new file mode 100644 index 0000000000..93782795d3 --- /dev/null +++ b/plugins/HwHotKeys/src/stdafx.cpp @@ -0,0 +1,18 @@ +/*
+Copyright (C) 2012-15 Miranda NG project (http://miranda-ng.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation version 2
+of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "HwHotKeys.h"
\ No newline at end of file |