Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bewegung des Mausrades in einem externen Spiel auslösen (https://www.delphipraxis.net/47313-bewegung-des-mausrades-einem-externen-spiel-ausloesen.html)

markbolten 9. Jun 2005 08:41


Bewegung des Mausrades in einem externen Spiel auslösen
 
Hi,
in kommerziellen Strategiespielen (Siedler 5,Kinder des Nils) ist das zoomen sehr
wichtig und wird durch das Mausrad bzw. einer Taste ausgeführt.

Aus gesundheitlichen Gründen ist meine Bewegungsfreiheit stark eingeschränkt, dadurch
kann ich weder eine Tastatur noch eine normale Maus nutzen. Den Computer bediene
ich durch eine Kopfsteuerung, 2 Mausbuttons und eine virtuelle Tastatur.

Ich will nun bei gleichzeitigen Drücken der 2 Buttons und vertikale Mausbewegung
eine Mausradbewegung auslösen. Um das zu erreichen habe ich eine MouseHook
geschrieben, in dieser wird die Message wm_mousewhell mittels Sendinput aufgerufen,
sobald das Ereignis - 2 Buttons + Mausbewegung - auftritt.
Dieses funktioniert in allen WindowsAnwendungen, nur nicht in Spielen.
Aus diversen Forenbeiträgen habe ich erfahren, das Spiele DirectxAnwendungen sind.

Wie kann ich eine wm_mousewhell Message in einer externen DirectxAnwendungen aufrufen bzw.
wie sende/übermittel ich eine wm_mousewhell Message an ein Spiel, um zoomen zu können ?

Eine Lösung bitte mit Beispielcode, da ich keine Erfahrung mit DirectxProgrammierung
habe (ich habe Directx 9.0c).

Anm.: Ist eine Lösung nur mit neueren Versionen von Delphi als Delphi7 möglich,
programmiert mir bitte eine lauffähige Dll.

cu

Robert Marquardt 9. Jun 2005 11:21

Re: Bewegung des Mausrades in einem externen Spiel auslösen
 
Die richtige Funktion ist mouse_event().

mouse_event(MOUSEEVENTF_WHEEL, 0, 0, WheelMove);

WheelMove ist ein Integer. Positive Werte bedeuten Rad dreht nach vorn.
Es wird in Mausradklicks (Raste am Mausrad) gezaehlt. Eine Raste wird mit WHEEL_DELTA (= 120) in WheelMove gezaehlt.

markbolten 10. Jun 2005 09:14

Re: Bewegung des Mausrades in einem externen Spiel auslösen
 
Zitat:

Zitat von Robert Marquardt
Die richtige Funktion ist mouse_event().

mouse_event wurde in XP durch sendinput ersetzt!

Robert Marquardt 10. Jun 2005 10:08

Re: Bewegung des Mausrades in einem externen Spiel auslösen
 
Nein, es wurde nur SendInput ergaenzt. SendInput setzt auf mouse_event und keybd_event auf.
Die Besonderheit ist, das der Datenstrom von SendInput nicht durch andere Inputs (z. B. echte Tastatureingaben) unterbrochen werden kann.

toms 10. Jun 2005 11:11

Re: Bewegung des Mausrades in einem externen Spiel auslösen
 
Zitat msdn zu mouse_event:
Zitat:

"Windows NT/2000/XP: This function has been superseded. Use SendInput instead."

Robert Marquardt 10. Jun 2005 12:34

Re: Bewegung des Mausrades in einem externen Spiel auslösen
 
Die Funktion ist aber immer noch vorhanden. Abgesehen davon gibt es SendInput nicht fuer Win 9x.
Nicht zuletzt sollte man erst die einfache Funktion lernen und dann damit SendInput besser verstehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz