Ich mache ein Frontend für verschiedene Emulatoren und triggere ihre verschiedenen Funktionen wie Speichern / Laden, Screenshot speichern, aber mit einer einheitlichen Oberfläche. FS-UAE benutzt irritierend "Print Screen" als Screenshot-Schlüssel, und ich möchte vermeiden, dass der Benutzer Emulatoren von ihren Standard-Hotkey-Einstellungen ändern muss.
Ich habe es geschafft, mit SendInput einen beliebigen Tastendruck zu simulieren, mit Ausnahme der Taste "Print Screen".
Ich hatte kein Glück mit der Verwendung von virtuellen Tastencodes, ich denke, das funktioniert nicht mit Vollbild-Anwendungen. Daher ist dieser Teil des Codes auskommentiert. (EDIT: bessere Erklärung - Virtual Key Codes werden von DirectInput Software ignoriert)
Mit Scancodes kann ich fast jede Taste drücken. Print Screen scheint der eine oder andere zu sein.
Hier ist die Referenz, die ich für die Scan-Codes verwende; Ссылка
Im Folgenden finden Sie den Mindestcode, mit dem das Problem reproduziert werden kann. Wenn Sie es ausführen, drücken Sie eine Taste, wechseln Sie dann schnell zum Notizblock und warten Sie 2 Sekunden, es sollte den Buchstaben "q" in den Notizblock drücken und dann beenden.
Ändern Sie den Scan-Code von 0x10 (q) auf 0x37 (Druckbildschirm). Stellen Sie sicher, dass Sie an beiden Stellen - KEY DOWN und KEY UP - drücken.
Nun führe es erneut aus, drücke eine Taste und warte. Um zu sehen, ob der Druckbildschirm funktioniert, öffne MS Paint oder was auch immer und drücke STRG + V, um zu sehen, ob du einen Screenshot von deinem Desktop bekommst. Es funktioniert nicht! Aber wenn Sie manuell Druckbildschirm und STRG + V in MS Paint drücken, wird es funktionieren.
Warum funktioniert die Drucktaste nicht?
%Vor% Verwenden Sie wVk
anstelle von wScan
und stellen Sie sicher, dass KEYEVENTF_SCANCODE
nicht gesetzt ist, weil das wVk
ignoriert. Sie müssen VK_SNAPSHOT
Okay, ich beantworte meine eigene Frage hier;
Also habe ich noch mehr Nachforschungen angestellt, diesen tollen Post von jemandem gefunden, der die Details von Scan-Codes rausgesucht hat, und es scheint, dass Print Screen ein seltsames ist, das eine spezielle Sequenz erfordert, um richtig ausgelöst zu werden; Ссылка (Und zum Nachlesen gibt es diesen Artikel über die Geschichte der 3 verschiedenen Scan-Code-Sets, der einige Einblicke gibt, warum einige Schlüssel seltsam sein könnten, wenn dem Standard neue Schlüssel hinzugefügt wurden) Ссылка
Allerdings konnte ich die verschiedenen Codefolgen in diesem Artikel nicht zum Laufen bringen. Am Ende gelang es mir, mein ursprüngliches Problem zu lösen, indem ich erfuhr, dass FS-UAE eine ALTERNATIVE Tastenfolge zum Speichern eines screenshot: F12-S, die ich stattdessen benutze und es funktioniert großartig.
Also habe ich das Problem dieses Mal vermieden, aber wehe die Person, die legitim einen Druckbildschirm-Schlüssel auf der Scan-Code-Ebene drücken muss, OHNE "virtuelle Schlüsselcodes" zu benutzen ... es ist eine geheimnisvolle arkane Aufgabe, die Das habe ich immer noch nicht erreicht.