[SOLVED] SendInput vs. PostMessage | Win 7 x64 |
-
Hallo zusammen,
ich beschäftige mich schon etwas länger mit SendInput - und nun, seit ich mein neues System mit Win7 Ultimate (64bit) habe, funktioniert gar nichts mehr
.
Kurzerhand bin ich auf PostMessage ausgewichen, um Keyboard Input und Mouse Input zu simulieren.
Ich habe inzwischen zwar ein paar Funktionen geschrieben - das Mausinputmodul ist schon fertig - aber ich habe jetzt gelesen, dass es eventuell Probleme geben könnte, wenn ich andere Fenster mit fake-Messages bombardiere (ich schreibe weder einen Hoax noch eine Cheat-engine
). Ich kann das HWND dieser Fenster bekommen durch FindWindow() und WindowFromPoint(). Muss ich mein Programm zunächst mit irgendwie gearteten Privilegien ausstatten, um den Zugriff auf andere Fenster zu ermöglichen?
Oder hat jemand doch noch eine Möglichkeit, SendInput() auf Win 7 Ultimate x64 zu betreiben, gefunden? Das wäre natürlich die komfortabelste Methode.
Viele Grüße und vielen Dank schon einmal im Voraus,
LauritzG
-
Erkläre mal bitte warum SendInput bitte nicht geht?
D.h. bei welchen Programmen und in welcher Kombination...
-
Ich habe hier
http://www.visualstudiodev.com/visual-basic-express-edition/sendinput-vs-windows-7-x64-rc-build-7000-not-working-36140.shtml
gelesen, dass die INPUT struct, die der Compiler auch bei mir bemängelt hat, geändert werden muss mithilfe von FieldOffset<8> statt <4>. Nun ist das C# und ich habe nichts vergleichbares für C++ gefunden (so etwas wie FieldOffset).
Deshalb bin ich davon ausgegangen, dass SendInput keine Möglichkeit ist und bin jetzt bei PostMessage. Ich habe den alten Code aber noch, also...
Ich probiere jetzt einfach noch einmal, den alten Code zu kompilieren und poste dann, was falsch läuft
.Vielen Dank,
LauritzG
-
Der Compiler findet die INPUT struct einfach nicht, obwohl ich sowohl winuser.h als auch Windows.h inkludiert habe...
Das ist wohl das Problem und in den betreffenden Dateien ist _WIN32_WINNT als 0x0400 bekannt.
Ich habe aber nun das Problem gefunden: OpenCV setzt die entsprechende symbolische Konstante auf 0x0400. Kann ich das einfach im Quellcode ändern oder muss ich die Konstante in meinen eigenen headern als 0x0601 eintragen?Vielen Dank auf jeden Fall,
Viele Grüße,
LauritzG
-
_WIN32_WINNT muss so für Dein Zielsystem entsprechend definiert sein.
Punkt!
Siehe: http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspxDa ich z.B. nurnoch füpr Windows XP SP2 und später entwickle ist
_WIN32_WINNT entsprechend 0x0502!Wie das OpenCV macht wirst Du in der Doku sicherlich lesen können. I.a. wird dieser werd in einer Deiner primären Header definiert bevor windows.h gezogen wird.
Grundsätzlich: Wenn Du windows.h inkludierst benötigst Du winuser.h nicht mehr. windows.h langt.
PS: Ich verstehe nicht warum Du zu der Annahme gekommen bist, dass SendInput unter Win7 x64 nicht kmehr gehen soll?
-
Vielen Dank!
Ich habe nun die winuser-include gelöscht und mein neues Zielsystem Win XP eingestellt und nun läuft alles fehlerfrei.
Vielen Dank noch einmal,
LauritzG