我正在尝试让我的应用程序将字符数组转换为大写字母,以便可以将其作为按键传递。我知道我即将使此代码正常工作,但我看不到问题所在。

            int a, b, c, d;
        char text[25];
        char upper[25];

        for (a = 0, b = sizeof(login); a < b; a++)
        {
            if (isalpha(login[a])){
                l[a] = toupper(login[a]);
                Sleep(1000);
                GenerateKey(l[a], FALSE);}
            else{
                GenerateKey(l[a], FALSE);
                Sleep(1000);
                l[a] = login[a];}
        }
        login[a]='\0';
        GenerateKey(0x09, FALSE);

        for (c = 0, d = sizeof(pass); c < d; c++)
        {
            if (isalpha(pass[c])){
                p[c] = toupper(pass[c]);
                GenerateKey(p[c], FALSE);
                Sleep(1000);}
            else{
                GenerateKey(p[c], FALSE);
                p[c] = pass[c];
                Sleep(1000);}
        }
        pass[a]='\0';

        GenerateKey(0x09, FALSE);
        Sleep(1000);
        GenerateKey(0x09, FALSE);
        Sleep(1000);
        GenerateKey(0x0D, FALSE);


这是GenerateKey函数:

void GenerateKey(int vk, BOOL bExtended) {

KEYBDINPUT  kb = {0};
INPUT       Input = {0};

/* Generate a "key down" */
if (bExtended) { kb.dwFlags  = KEYEVENTF_EXTENDEDKEY; }
kb.wVk  = vk;
Input.type  = INPUT_KEYBOARD;
Input.ki  = kb;
SendInput(1, &Input, sizeof(Input));

/* Generate a "key up" */
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags  =  KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));

return;
 }


任何帮助将是巨大的!

编辑:

该应用程序试图打开一个网页,然后输入登录信息并按Submit(使用选项卡选择用户名,密码字段等)。为了回答@Rup,在此代码块上方初始化l[]p[]

        char l[180];
        char p[180];


l是用户的登录名,p是其密码。我试图将它们转换为大写形式,以将它们传递给GenerateKey。例如GenerateKey('A', FALSE);

目前,该代码似乎根本没有传递任何按键,但是该应用程序冻结了,因此我认为它会陷入某个for循环中。

编辑2:

感谢@William提供有用的代码。
使用toUpper函数非常接近解决这个问题。我现在唯一的问题是所传递的登录名和密码包含额外的字符。例如,如果我以username身份登录,然后重新运行程序并以user身份登录,则输出为userame

这是我现在具有GenerateKey和toUpper函数的代码:

            // Convert to uppercase to be passed as keypresses
        toUpper(login, sizeof(login));
        toUpper(pass, sizeof(pass));
        int a;
        for(a=0; a<sizeof(login);a++){
            GenerateKey(login[a], FALSE);}
        login[a]='\0';
        GenerateKey(0x09, FALSE);
        a=0;
        for(a=0; a<sizeof(pass);a++){
            GenerateKey(pass[a], FALSE);}
        pass[a]='\0';
        GenerateKey(0x09, FALSE);
        Sleep(1000);
        GenerateKey(0x09, FALSE);
        Sleep(1000);
        GenerateKey(0x0D, FALSE);


解:

在上面的代码中使用strlen(login);清除了我遇到的所有问题。

最佳答案

void toUpper(char* pArray, int arrayLength)
{
    for(int i = 0; i < arrayLength; i++)
    {
        if(pArray[i] >= 'a' && pArray[i] <= 'z')
            pArray[i] -= ' ';
    }
}

10-08 16:05