Strg/Ctrl + C in C++ simulieren
-
Hi zusammen,
ich häng hier gerade etwas fest, ich möchte das mit die Anwendung etwas was ich in Firefox markiert habe in die Zwischenablage/Clipboard kopiert und versuche deshalb den Tastendruck STRG + C zu simulieren was nicht wirklich klappt, bisher konnte ich lediglich einzelne Buchstaben per simuliertem Tastendruck ins Notepad schreiben, mit 2 Tasten gleichzeitig klappts nicht wirklich
INPUT ip[2]; ip[0].type = INPUT_KEYBOARD; ip[0].ki.wScan = 0; ip[0].ki.time = 0; ip[0].ki.dwExtraInfo = 0; ip[1].type = INPUT_KEYBOARD; ip[1].ki.wScan = 0; ip[1].ki.time = 0; ip[1].ki.dwExtraInfo = 0; ip[0].ki.wVk = 0x11; ip[0].ki.dwFlags = 0; ip[1].ki.wVk = 0x43; ip[1].ki.dwFlags = 0; SendInput(2, ip, sizeof(INPUT)); ip[0].ki.dwFlags = KEYEVENTF_KEYUP; ip[1].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(2, ip, sizeof(INPUT));
INPUT ip; INPUT ip2; ip.type = INPUT_KEYBOARD; ip.ki.wScan = 0; ip.ki.time = 0; ip.ki.dwExtraInfo = 0; ip2.type = INPUT_KEYBOARD; ip2.ki.wScan = 0; ip2.ki.time = 0; ip2.ki.dwExtraInfo = 0; ip.ki.wVk = 0x11; ip.ki.dwFlags = 0; SendInput(1, &ip, sizeof(INPUT)); ip2.ki.wVk = 0x43; ip2.ki.dwFlags = 0; SendInput(1, &ip2, sizeof(INPUT)); ip.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, &ip, sizeof(INPUT)); ip2.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, &ip2, sizeof(INPUT));
und
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); keybd_event(0x43, MapVirtualKey(0x43, 0), 0, 0); keybd_event(0x43, MapVirtualKey(0x43, 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Hab ich bisher erfolglos probiert...
Vielen Dank schon mal für eure UnterstützungMFG Marcurion
-
Update:
Hab grade herausgefunden im Texteditor, Opera und im Internet Explorer funktioniert das letzte Beispiel (die anderen warscheinlich auch), warum nicht in Firefox?
MFG Marcurion
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
keybd_event soll laut MSDN nicht mehr verwendet werden.
Versuchs mal so (bei mir funktioniert es):
#include <windows> void HoldCtrl(); void PressC(); void ReleaseCtrl(); void SimulateCtrlC(); int main() { Sleep(5000); SimulateCtrlC(); } void SimulateCtrlC() { HoldCtrl(); PressC(); ReleaseCtrl(); } void HoldCtrl() { INPUT data; data.type = INPUT_KEYBOARD; data.ki.wVk = VK_CONTROL; data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC); data.ki.time =0; data.ki.dwExtraInfo = 0; data.ki.dwFlags = 0; SendInput (1 , &data, sizeof(data)); // Taste drücken } void PressC() { INPUT data; data.type = INPUT_KEYBOARD; data.ki.wVk = 0x43; data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC); data.ki.time =0; data.ki.dwExtraInfo = 0; data.ki.dwFlags = 0; SendInput (1 , &data, sizeof(data)); // Taste drücken data.ki.dwFlags = KEYEVENTF_KEYUP; SendInput (1 , &data, sizeof(data)); // Taste loslassen } void ReleaseCtrl() { INPUT data; data.type = INPUT_KEYBOARD; data.ki.wVk = VK_CONTROL; data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC); data.ki.time =0; data.ki.dwExtraInfo = 0; data.ki.dwFlags = KEYEVENTF_KEYUP; SendInput (1 , &data, sizeof(data)); // Taste loslassen }
-
Hi,
danke funktioniert 1 a
MFG Marcurion