[英]Determine if a key should be capitalized using both shift and caps lock
我想根据 shift 键和 Caps-Lock 的状态确定字母应该是大写还是小写。 例如:如果两者都关闭或都打开,则字母为小写。 但是如果按下 shift 并且 Caps-Lock 关闭,或者如果没有按下 shift 并且 Caps-Lock 开启,那么字母应该是大写的。
我已经尝试简单地查看GetKeyState()
的高位位以确定是否按下了 shift 键,以及来自GetKeyState()
的低位位以确定是否切换了 Caps-Lock,但它没有完美地工作。 现在我只是将数据输出到一个文本文件,看看我得到了什么值。 我从这里得到了GetKeyState()
信息
这是我用来确定字母大小写的函数:
bool Capitalize(short int shift, short int caps){
bool s = shift<0;
bool c = (caps&1)!=0;
return s!=c;
}
这是我调用函数的地方:
ofstream write("test.txt", ios::app);
void main(){
char c;
for(;;){
for(c=1;c<=222;c++){
if(GetAsyncKeyState(c)==-32767){
short int shift = GetKeyState(VK_SHIFT);
short int caps = GetKeyState(VK_CAPITAL);
switch(c){
case 65:{
if(Capitalize(shift,caps))
write<<"A";
else
write<<"a";
}break;
}
write<<"\r\n";
}
}
}
}
所以当我关闭 Caps-Lock 并且没有按住 shift 键时,输出如下:
A
a
a
a
如果您注意到,第一个字母是大写的,我希望它是小写的。 当我在 Caps-Lock 开启时按住 shift 时发生了同样的事情,这应该产生小写字母。 如果按住任一班次,或启用 Caps-Lock,但不是两者都打开,那么它似乎工作正常,所有字母都输出为大写“A”。 我不完全确定为什么会发生这种情况,但任何帮助/解释将不胜感激:)
这段代码对我来说很好用,你期望的输出是:
#include <Windows.h>
#include <iostream>
bool Capitalize(short int shift, short int caps)
{
bool s = shift < 0;
bool c = (caps & 1) != 0;
return s != c;
}
void main()
{
unsigned char c;
while (true)
{
for (c = 1; c <= 222; c++)
{
if (GetAsyncKeyState(c) &1)
{
short int shift = GetKeyState(VK_SHIFT);
short int caps = GetKeyState(VK_CAPITAL);
switch (c)
{
case 65:
{
if (Capitalize(shift, caps))
{
std::cout << "A\n";
}
else
{
std::cout << "a\n";
}
}
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.