繁体   English   中英

确定是否应使用 shift 和 caps lock 来大写一个键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM