2017-07-05 1 views
2
Konto bei gedrückter Umschalttaste

Ich versuche, ein CTRL +SHIFT + END Tastenhub zu einer Kontrolle, in einer C++ Anwendung mit Embarcadero geschrieben zu senden. Ich verwende den folgenden Code:Send auf C++ ist Ctrl nicht nehmen und

tagINPUT ip; 
ip.type = INPUT_KEYBOARD; 
ip.ki.wScan = 0; 
ip.ki.time = 0; 
ip.ki.dwExtraInfo = 0; 

// Appui sur Ctrl 
ip.ki.wVk = VK_CONTROL; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

// Appui sur Shift 
ip.ki.wVk = VK_SHIFT; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

// Appui sur End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

Application->ProcessMessages(); 

// Relacher End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

// Relacher Shift 
ip.ki.wVk = VK_SHIFT; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

// Relacher Ctrl 
ip.ki.wVk = VK_CONTROL; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

Es ist jedoch zu funktionieren scheint, wie wenn es keine Wirkung auf die CTRL und SHIFT Schlüssel war.

Was fehlt mir?

+0

sendinput ist nicht Teil des Standard-C++, sollten Sie mehr Tags zu Ihrer Frage hinzufügen, wenn Sie es so lassen, sollten Sie den Code zu dieser sendinput-Funktion hinzufügen, aber ich nehme an, dass Sie es nicht haben, nicht Jeder, der C++ verwendet, verwendet Embarcadero. – exs

+0

Um ehrlich zu sein, verwende ich das SendInput, das von dem Projekt kam, eingeschlossen in einer win32.h Datei. Dies wurde von jemand anderem getan, der nicht mehr in meiner Firma ist, daher kann ich keine genaue Vorstellung davon geben, was es tut. –

+0

Es ist für die Synthese Tastenanschläge verwendet – Asesh

Antwort

1

Das Problem ist, dass der Schlüssel vk_End ein erweiterter Schlüssel ist. So sollten Sie dies in den Flaggen erklären:

`eip.ki.dwFlags = 0; 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = 0; 
ip.ki.dwFlags = ip.ki.dwFlags || 1; 
SendInput(1, &ip, sizeof(INPUT)); 

Application->ProcessMessages(); 

// Relacher End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
ip.ki.dwFlags = ip.ki.dwFlags || 1; 
SendInput(1, &ip, sizeof(INPUT));` 

Bitte beachte, dass ich 1 verwendet, um das Flag, wie ich weiß nicht, ob Sie eine Konstante in C++ definiert haben, aber annehmen, dass es eine Konstante irgendwo ist.

+0

Vielen Dank, ich wette, das ist genau die Antwort, die ich brauchte :) Ich werde es bald ausprobieren und sagen, ob es funktioniert oder nicht (es ist sicherlich gut, denke ich). –

Verwandte Themen