From bc1ff98d45f87cd70825e7adfd5f106b6b3fb116 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Mon, 30 Mar 2015 19:25:51 +0000 Subject: 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 --- plugins/HwHotKeys/HwHotKeys_10.vcxproj | 206 +++++++++++++++++++++ plugins/HwHotKeys/HwHotKeys_10.vcxproj.filters | 56 ++++++ plugins/HwHotKeys/HwHotKeys_12.vcxproj | 205 +++++++++++++++++++++ plugins/HwHotKeys/HwHotKeys_12.vcxproj.filters | 56 ++++++ plugins/HwHotKeys/res/HwHotKeys.rc | 110 +++++++++++ plugins/HwHotKeys/res/HwHotKeys_version.rc | 38 ++++ plugins/HwHotKeys/src/HwHotKeys.cpp | 23 +++ plugins/HwHotKeys/src/HwHotKeys.h | 87 +++++++++ plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp | 108 +++++++++++ plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp | 150 +++++++++++++++ plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp | 133 ++++++++++++++ plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp | 243 +++++++++++++++++++++++++ plugins/HwHotKeys/src/HwHotKeys_Util.cpp | 139 ++++++++++++++ plugins/HwHotKeys/src/HwHotKeys_resource.h | Bin 0 -> 1340 bytes plugins/HwHotKeys/src/HwHotKeys_version.h | 41 +++++ plugins/HwHotKeys/src/stdafx.cpp | 18 ++ 16 files changed, 1613 insertions(+) create mode 100644 plugins/HwHotKeys/HwHotKeys_10.vcxproj create mode 100644 plugins/HwHotKeys/HwHotKeys_10.vcxproj.filters create mode 100644 plugins/HwHotKeys/HwHotKeys_12.vcxproj create mode 100644 plugins/HwHotKeys/HwHotKeys_12.vcxproj.filters create mode 100644 plugins/HwHotKeys/res/HwHotKeys.rc create mode 100644 plugins/HwHotKeys/res/HwHotKeys_version.rc create mode 100644 plugins/HwHotKeys/src/HwHotKeys.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys.h create mode 100644 plugins/HwHotKeys/src/HwHotKeys_Dlg.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys_DllMain.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys_KbdHook.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys_KeyName.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys_Util.cpp create mode 100644 plugins/HwHotKeys/src/HwHotKeys_resource.h create mode 100644 plugins/HwHotKeys/src/HwHotKeys_version.h create mode 100644 plugins/HwHotKeys/src/stdafx.cpp (limited to 'plugins/HwHotKeys') diff --git a/plugins/HwHotKeys/HwHotKeys_10.vcxproj b/plugins/HwHotKeys/HwHotKeys_10.vcxproj new file mode 100644 index 0000000000..effa6ac14d --- /dev/null +++ b/plugins/HwHotKeys/HwHotKeys_10.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {639E2B3A-64F2-4152-B5BB-12468E5D60B6} + Win32Proj + HwHotKeys + HwHotKeys + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + $(SolutionDir)$(Configuration)\Plugins\ + $(SolutionDir)$(Configuration)\Obj\$(ProjectName)\ + true + + + false + $(SolutionDir)$(Configuration)64\Plugins\ + $(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\ + + + + Use + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + HwHotKeys.h + EnableFastChecks + MultiThreadedDebugDLL + + + Windows + true + $(ProfileDir)..\..\bin10\lib;%(AdditionalLibraryDirectories) + + + NDEBUG;%(PreprocessorDefinitions) + ..\..\include\msapi + + + + + Use + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + HwHotKeys.h + EnableFastChecks + MultiThreadedDebugDLL + + + Windows + true + $(ProfileDir)..\..\bin10\lib;%(AdditionalLibraryDirectories) + + + NDEBUG;%(PreprocessorDefinitions) + ..\..\include\msapi + + + + + Level3 + Use + Full + true + false + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) + Size + OnlyExplicitInline + HwHotKeys.h + ProgramDatabase + + + Windows + true + true + true + $(ProfileDir)..\..\bin10\lib;%(AdditionalLibraryDirectories) + true + $(IntDir)$(TargetName).lib + /PDBALTPATH:%_PDB% %(AdditionalOptions) + + + NDEBUG;%(PreprocessorDefinitions) + + + ..\..\include\msapi + + + + + Level3 + Use + Full + true + false + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) + Size + OnlyExplicitInline + HwHotKeys.h + + + Windows + true + true + true + $(ProfileDir)..\..\bin10\lib;%(AdditionalLibraryDirectories) + true + $(IntDir)$(TargetName).lib + /PDBALTPATH:%_PDB% %(AdditionalOptions) + + + NDEBUG;%(PreprocessorDefinitions) + + + ..\..\include\msapi + + + + + + + + + + + + + + + Create + + + + + + + + + + \ No newline at end of file diff --git a/plugins/HwHotKeys/HwHotKeys_10.vcxproj.filters b/plugins/HwHotKeys/HwHotKeys_10.vcxproj.filters new file mode 100644 index 0000000000..0dc01c54f3 --- /dev/null +++ b/plugins/HwHotKeys/HwHotKeys_10.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/plugins/HwHotKeys/HwHotKeys_12.vcxproj b/plugins/HwHotKeys/HwHotKeys_12.vcxproj new file mode 100644 index 0000000000..54e4db1a63 --- /dev/null +++ b/plugins/HwHotKeys/HwHotKeys_12.vcxproj @@ -0,0 +1,205 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {639E2B3A-64F2-4152-B5BB-12468E5D60B6} + Win32Proj + HwHotKeys + HwHotKeys + + + + DynamicLibrary + true + v120_xp + Unicode + + + DynamicLibrary + true + v120_xp + Unicode + + + DynamicLibrary + false + v120_xp + true + Unicode + + + DynamicLibrary + false + v120_xp + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + $(SolutionDir)$(Configuration)\Plugins\ + $(SolutionDir)$(Configuration)\Obj\$(ProjectName)\ + true + + + false + $(SolutionDir)$(Configuration)64\Plugins\ + $(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\ + + + + Use + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + HwHotKeys.h + + + Windows + true + $(ProfileDir)..\..\bin12\lib;%(AdditionalLibraryDirectories) + false + + + NDEBUG;%(PreprocessorDefinitions) + ..\..\include\msapi + + + + + Use + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + HwHotKeys.h + + + Windows + true + $(ProfileDir)..\..\bin12\lib;%(AdditionalLibraryDirectories) + + + NDEBUG;%(PreprocessorDefinitions) + ..\..\include\msapi + + + + + Level3 + Use + Full + true + false + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) + Size + OnlyExplicitInline + HwHotKeys.h + ProgramDatabase + + + Windows + true + true + true + $(ProfileDir)..\..\bin12\lib;%(AdditionalLibraryDirectories) + true + $(IntDir)$(TargetName).lib + + + NDEBUG;%(PreprocessorDefinitions) + + + ..\..\include\msapi + + + + + Level3 + Use + Full + true + false + NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) + Size + OnlyExplicitInline + HwHotKeys.h + + + Windows + true + true + true + $(ProfileDir)..\..\bin12\lib;%(AdditionalLibraryDirectories) + true + $(IntDir)$(TargetName).lib + + + NDEBUG;%(PreprocessorDefinitions) + + + ..\..\include\msapi + + + + + + + + + + + + + + + Create + + + + + + + + + + \ No newline at end of file diff --git a/plugins/HwHotKeys/HwHotKeys_12.vcxproj.filters b/plugins/HwHotKeys/HwHotKeys_12.vcxproj.filters new file mode 100644 index 0000000000..0dc01c54f3 --- /dev/null +++ b/plugins/HwHotKeys/HwHotKeys_12.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/plugins/HwHotKeys/res/HwHotKeys.rc b/plugins/HwHotKeys/res/HwHotKeys.rc new file mode 100644 index 0000000000..693266bbe8 --- /dev/null +++ b/plugins/HwHotKeys/res/HwHotKeys.rc @@ -0,0 +1,110 @@ +// Microsoft Visual C++ generated resource script. +// +#include "..\src\HwHotKeys_resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Ðóññêèé (Ðîññèÿ) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "..\\src\\HwHotKeys_resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +dlg_options DIALOGEX 0, 0, 315, 247 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "Hardware HotKeys plugin\r\nAllows to assign expanded multimedia-keys (only for PS/2-keyboards)", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTER, 3, 3, 303, 21 + CONTROL "Close Miranda", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFTNOWORDWRAP, 0, 30, 114, 12 + CONTROL "", dlg_close_edit, "Edit", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_READONLY | ES_AUTOHSCROLL, 114, 30, 114, 12, WS_EX_CLIENTEDGE + CONTROL "Assign", dlg_close_set, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 228, 30, 42, 12 + CONTROL "Clear", dlg_close_clear, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 270, 30, 42, 12 + CONTROL "Show/Hide contact list", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFTNOWORDWRAP, 0, 45, 114, 12 + CONTROL "", dlg_hide_edit, "Edit", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_READONLY | ES_AUTOHSCROLL, 114, 45, 114, 12, WS_EX_CLIENTEDGE + CONTROL "Assign", dlg_hide_set, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 228, 45, 42, 12 + CONTROL "Clear", dlg_hide_clear, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 270, 45, 42, 12 + CONTROL "Read message", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFTNOWORDWRAP, 0, 60, 114, 12 + CONTROL "", dlg_read_edit, "Edit", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_READONLY | ES_AUTOHSCROLL, 114, 60, 114, 12, WS_EX_CLIENTEDGE + CONTROL "Assign", dlg_read_set, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 228, 60, 42, 12 + CONTROL "Clear", dlg_read_clear, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP, 270, 60, 42, 12 + CONTROL "Last pressed key", -1, "Button", WS_CHILDWINDOW | WS_VISIBLE | BS_CENTER | BS_GROUPBOX, 0, 174, 312, 63 + CONTROL "Extended flag (1xx), Hardware scan code (x23), KeyName", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFTNOWORDWRAP, 6, 186, 198, 12 + CONTROL "", dlg_scancode_edit, "Edit", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_READONLY | ES_AUTOHSCROLL, 204, 186, 99, 12, WS_EX_CLIENTEDGE + CONTROL "Combine left/right keys Shift, Ctrl, Win, Alt", dlg_combine, "Button", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 6, 204, 291, 9 + CONTROL "Combination of keys for assignment", -1, "Static", WS_CHILDWINDOW | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFTNOWORDWRAP, 6, 219, 144, 12 + CONTROL "", dlg_keyname_edit, "Edit", WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_READONLY | ES_AUTOHSCROLL, 150, 219, 153, 12, WS_EX_CLIENTEDGE +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_DIALOG1, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 302 + TOPMARGIN, 7 + BOTTOMMARGIN, 169 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Ðóññêèé (Ðîññèÿ) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/HwHotKeys/res/HwHotKeys_version.rc b/plugins/HwHotKeys/res/HwHotKeys_version.rc new file mode 100644 index 0000000000..e2a0e7b639 --- /dev/null +++ b/plugins/HwHotKeys/res/HwHotKeys_version.rc @@ -0,0 +1,38 @@ + + +#include "afxres.h" +#include "..\src\HwHotKeys_version.h" + +// https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058%28v=vs.85%29.aspx + +VS_VERSION_INFO VERSIONINFO +FILEVERSION __FILEVERSION_STRING +PRODUCTVERSION __FILEVERSION_STRING +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS_NT +FILETYPE VFT_DLL +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "04090000" + BEGIN + VALUE "FileDescription", __DESCRIPTION_DLL + VALUE "FileVersion", __VERSION_STRING_DOTS + VALUE "InternalName", __PLUGIN_NAME + VALUE "LegalCopyright", __COPYRIGHT + VALUE "CompanyName", __AUTHORWEB + VALUE "OriginalFilename", __FILENAME + VALUE "ProductName", __PLUGIN_NAME + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0 + END +END 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 +#include + +#include +#include +#include +#include +#include + +#include + +#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 new file mode 100644 index 0000000000..c96893bfcf Binary files /dev/null and b/plugins/HwHotKeys/src/HwHotKeys_resource.h differ 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 + +#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 . +*/ + +#include "HwHotKeys.h" \ No newline at end of file -- cgit v1.2.3