C++将字符数组转换为大写(无 MFC)
C++ convert character array to uppercase ( no MFC )
我正在尝试让我的应用程序将字符数组转换为大写字母,以便我可以将它们作为按键传递。我知道我即将让这段代码工作,但我只是看不到问题所在。
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]=' ';
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]=' ';
GenerateKey(0x09, FALSE);
Sleep(1000);
GenerateKey(0x09, FALSE);
Sleep(1000);
GenerateKey(0x0D, FALSE);
这是生成密钥函数:
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;
}
任何帮助都会很棒!
编辑:
此应用程序正在尝试打开网页,然后输入登录信息并按提交(使用选项卡选择用户名,密码字段等(。为了回答@Rup,l[]
和p[]
在此代码块上方初始化。
char l[180];
char p[180];
l 是用户的登录名,p 是他们的密码。我正在尝试将它们转换为大写以在生成密钥中传递它们。例如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]=' ';
GenerateKey(0x09, FALSE);
a=0;
for(a=0; a<sizeof(pass);a++){
GenerateKey(pass[a], FALSE);}
pass[a]=' ';
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] -= ' ';
}
}
我已经用以下代码解决了这个问题:
代码在注释中进行了说明。
// Convert to uppercase to be passed as keypresses
toUpper(login, sizeof(login));
toUpper(pass, sizeof(pass));
int a;
// Loop through the character array and send the key presses
for(a=0; a<strlen(login);a++){
GenerateKey(login[a], FALSE);}
GenerateKey(0x09, FALSE);
for(a=0; a<strlen(pass);a++){
GenerateKey(pass[a], FALSE);}
// Additional keypresses
GenerateKey(0x09, FALSE);
Sleep(1000);
GenerateKey(0x09, FALSE);
Sleep(1000);
GenerateKey(0x0D, FALSE);
为了使此代码正常运行,还需要提供的 GenerateKey 函数和 toUpper 函数。
感谢您在这个问题上的所有帮助。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- MFC Cedit将非ASCII字符转换为ASCII
- 在 MFC 中,当 CEdit 控件达到最大字符数时,退格键不起作用
- Unicode 字符变为问号(C++ 和基于 MFC 对话框的应用)
- MFC-传递带有PostMessage From DLL的字符缓冲区
- C++将字符数组转换为大写(无 MFC)
- 从文件到字符数组(MFC)
- 如何在 mfc++ 中将字符* 转换为字符**
- 使用MFC编辑控件中的块字符(仅用于浮动的示例)
- 如何改变下一个字符将被放置在MFC编辑控件中的位置
- 在MFC的CListCtrl中更改项目中特定字符的颜色
- MFC:基于宽字符的CMap使程序崩溃
- Visual c++ /MFC:让日文字符在没有UNICODE的情况下工作
- _stprintf()在c++和MFC中只读取第一个字符
- 将 MFC 表单'text'处理为字符类型或常规字符串类型