アプリケーションで文字配列を大文字に変換して、キーを押して渡すことができるようにしようとしています。このコードが機能するようになったことはわかっていますが、問題がわかりません。
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;
}
どんな助けでも素晴らしいでしょう!
編集:
このアプリケーションは、Web ページを開こうとしており、ログイン情報を入力して [送信] を押します (タブを使用してユーザー名、パスワード フィールドなどを選択します)。@Rup に応答し、このコード ブロックの上で初期化されますl[]
。p[]
char l[180];
char p[180];
l はユーザーのログイン名、p はパスワードです。これらを大文字に変換して、GenerateKey に渡しようとしています。例えばGenerateKey('A', FALSE);
現時点では、コードはキープレスをまったく渡していないように見えますが、アプリケーションがフリーズするため、どこかで for ループに陥っていると思います。
編集2:
役立つコードを提供してくれた @William に感謝します。toUpper 関数を使用して、この問題の解決に非常に近づいています。私が今抱えている唯一の問題は、渡されるログインとパスワードに余分な文字が含まれていることです。たとえば、login as をusername
渡すと、プログラムを再実行しuser
、出力を取得するときにlogin を渡します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);
すると、私が抱えていたすべての問題が解決されました。