Ich verwende den Windows API-Aufruf SendInput(), um Tastaturereignisse zu simulieren. Der folgende Ausschnitt (irrelevante Details weggelassen) funktioniert perfekt für eine Folge von Zeichen zu senden:Wie kbd Modifikatoren mit SendInput() angeben?
wchar_t txt = ...;
INPUT *input = ...;
size_t nInput = 0;
for (unsigned int j = 0; j < length; j++) {
input[nInput].ki.wVk = 0;
input[nInput].ki.wScan = txt[j];
input[nInput].ki.dwFlags = KEYEVENTF_UNICODE;
nInput++;
input[nInput].ki.wVk = 0;
input[nInput].ki.wScan = txt[j];
input[nInput].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
nInput++;
}
SendInput(nInput, input, sizeoF(INPUT));
Jetzt einzelne Tastenanschläge zu senden, mit Modifikatoren Ich versuche. Ich habe versucht, den folgenden Code:
bool control, alt shift;
wchar_t chr;
if (control) {
input[nInput].ki.wVk = VK_CONTROL;
input[nInput].ki.dwFlags = 0;
nInput++;
}
if (alt) {
input[nInput].ki.wVk = VK_MENU;
input[nInput].ki.dwFlags = 0;
nInput++;
}
if (shift) {
input[nInput].ki.wVk = VK_SHIFT;
input[nInput].ki.dwFlags = 0;
nInput++;
}
input[nInput].ki.wVk = 0;
input[nInput].ki.wScan = chr;
input[nInput].ki.dwFlags = KEYEVENTF_UNICODE;
nInput++;
input[nInput].ki.wVk = 0;
input[nInput].ki.wScan = chr;
input[nInput].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
nInput++;
if (shift) {
input[nInput].ki.wVk = VK_SHIFT;
input[nInput].ki.dwFlags = KEYEVENTF_KEYUP;
nInput++;
}
if (alt) {
input[nInput].ki.wVk = VK_MENU;
input[nInput].ki.dwFlags = KEYEVENTF_KEYUP;
nInput++;
}
if (control) {
input[nInput].ki.wVk = VK_CONTROL;
input[nInput].ki.dwFlags = KEYEVENTF_KEYUP;
nInput++;
}
SendInput(nInput, input, sizeof(INPUT));
jedoch Modifikatoren scheinen nicht durch zu erhalten, das heißt, auch wenn, sagen control
auf true gesetzt ist, wird die Ereignisfolge als einfacher Tastendruck erhalten.
@David, Sie sollten diese Antwort wahrscheinlich annehmen, sonst wird SO Sie weiterhin mit "Haben Sie daran gedacht, eine Antwort auf diese Frage zu akzeptieren" stören. – paxdiablo
@Pax: Sicher, ich mache das, aber zuerst wollte ich anderen eine Chance geben, meine Antwort zu verbessern oder auf meine Fehler hinzuweisen. –