STRG + S als Tastendruck simulieren
-
Guten Tag,
um euch schonmal zu warnen, ich bin noch ein Anfänger in C.
Mein Problem sieht folgendermaßen aus, ich arbeite häufig mit einem
bestimmten Programm, dieses beansprucht den Arbeitsspeicher dermaßen, dass
es häufig zum Programmabsturz kommt. Selbstverständlich immer zu den ungünstigsten zeiten :), da ich auch noch so gut wie immer das Speichern vergesse, möchte ich ein Programm schreiben das alle 2min oder so "STRG + S" drückt. Leider weiß ich nicht wie ich den Tastendruck simuliere, habe schon gegoogelt, aber ist leider für einen Anfänger nur sehr wenig dabei, hoffe ihr könnt mir da weiterhelfen.MFG
DeeJayExTasy
-
Um mal alle Vorurteile zu bedienen, verschiebe ich dich direkt zu Windows, ohne vorher zu fragen, welches System das Ziel ist.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89, C99 und C11) 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.
-
AutoIt macht sich für sowas gut.
-
Mit SendInput() sollte das eigentlich kein Problem sein. Es muss allerding sichergestellt werden, das das Zielprogramm momentan den Eingabefokus hat (eventuell mit Get/SetForgroundWindow+GetWindowText)
-
Beispiel:
http://purespam.wordpress.com/2011/09/03/example-of-sendinput-windows-api-function-c-c/
https://sites.google.com/site/jozsefbekes/Home/windows-programming/keyboard-and-mouse-simulations
-
Eigentlich sollte nur noch keybd_event und mouse_event verwendet werden
-
Martin Richter schrieb:
Eigentlich sollte nur noch keybd_event und mouse_event verwendet werden
So ein Unfug und das weisst du auch!
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx
MSDN schrieb:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx
Einen Tastendruck simulieren ... das wurde hier schon oft im Forum besprochen.
SendInput kann einen verrückt machen ... mal gehts mal gehts nicht ... es sei den man macht alles richtig dann geht es immer.So gehts richtig:
void Simulate(unsigned KeyInHex) { UINT HardwareScanCode ; HardwareScanCode = MapVirtualKey ( KeyInHex, MAPVK_VK_TO_VSC); // VirtualKeyCode aus KeyInHex in einen Hardware // Scan Code umwandeln INPUT data; data.type = INPUT_KEYBOARD; data.ki.wVk = KeyInHex; data.ki.wScan = HardwareScanCode; data.ki.dwFlags = 0; data.ki.time =0; data.ki.dwExtraInfo = 0; SendInput (1 , &data, sizeof(data)); // Taste drücken data.ki.dwFlags = KEYEVENTF_KEYUP; SendInput (1 , &data, sizeof(data)); // Taste loslassen }
Du solltest auch noch schauen das dein Tastendruck Simulations Programm den Focus auf die Ziel Anwendung hat. Wenn dein Programm was du da hast keine Vollbild Anwendung ist dann sollte es ohne Focus Kram gehen solange das Fenster der Anwendung aktiv ist.
Aber besser ist es dafür einen Focus zu verwenden.
Oder wie nwp3 schon sagt einfach AutoIT verwenden. Wobei AutoIT v3 intern auch keybd_event verwenden und keybd_event ist Legacy (veraltet) ka ob die neuste AutoIT auch keybd_event intern verwendet hab gerade kb das zu installieren und zu reversen. Aber wie auch immer probiers halt aus.
-
Sorry stimmt. Ich habe es genau verwechselt. keybd_event etc. is deprecated... Sorry.