【发布时间】:2022-01-22 23:18:56
【问题描述】:
我编写了一个程序,可以向计算机键入字符串。一切正常,但我遇到了两个问题: 1. 当我输入大写字母时,它不写大写字母。 2. 当我写两个相同的字母并排在一起时,其中一个没有写出来。我阅读了很多 Windows API 文档,但找不到任何东西。有人可以帮我解决问题吗?
#include <stdio.h>
#include <windows.h>
void keyboard(char *str)
{
int x = strlen(str);
INPUT inputStruct[x];
ZeroMemory(inputStruct, sizeof(inputStruct));
for (int i = 0; i < x; i++)
{
inputStruct[i].type = INPUT_KEYBOARD;
inputStruct[i].ki.wVk = VkKeyScanA(str[i]);
}
SendInput(x, inputStruct, sizeof(INPUT));
}
int main()
{
keyboard("hoe is het");
}
【问题讨论】:
-
这段代码还能编译吗?你有一个非常量大小的数组!
-
我在函数的第一行计算数组的大小?
-
是的,但是在普通程序中,您不能使用 strlen 来设置堆栈分配数组的大小。你可能会很幸运,编译器会在编译时计算它。将
strlen更改为lstrlenA看看会发生什么。 -
它还能用吗?
-
C99 可能允许这样做或作为 GCC 扩展,但我认为这无关紧要,因为在使用虚拟键时,您无法仅根据字符串知道正确的大小。