Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Windows RawInput Funktionen (https://www.delphipraxis.net/214584-windows-rawinput-funktionen.html)

BigAl 3. Feb 2024 10:56

Windows RawInput Funktionen
 
Hallo zusammen,

ich möchte an einem Touch-Bildschirm den Mauszeiger verstecken (Screen.Cursor := crNone) sobald die Eingaben vom Touch kommen. Sobald eine evtl. angeschlossene Maus aktiv wird soll der Mauszeiger aktiviert werden (Screen.Cursor := crDefault).

Meine Idee war nun die "RawInput" Funktionen der Windows API zu nutzen um herauszufinden wer die Eingabe mache. Über GetRawInputDeviceList könnte erstmal eine List der der Devices abgerufen werden etc. Aber da scheiter es schon. Sämtliche "RawInput"-Funktionen sind nirgends zu finden.

Sind die "RawInput"-Funktionen in Delphi 12 nicht enthalten?

Gibt es irgendwo eine "recommended" Quelle zu diesen Funktionen?

himitsu 3. Feb 2024 12:24

AW: Windows RawInput Funktionen
 
In Delphi fehlt Vieles und der Rest ist nicht aktuell und schon garnicht vollständig.
Drum gibt/gab es ja Projekte wie die JEDI Windows API Library.

Es gibt im GetIt ein neues Projekt, welches automatisiert die "ganze" API von Windows importiert, aber
* erstmal ist GetIt grade im Arsch https://www.delphipraxis.net/212854-...ffline-11.html
* und außerdem https://www.delphipraxis.net/214473-...vor-winmd.html



RawInput ist sooo alt ... was fehlt denn?
Hätte gedacht, dass man dafür so Einiges im Delphi findet.

BigAl 3. Feb 2024 12:40

AW: Windows RawInput Funktionen
 
Zitat:

Zitat von himitsu (Beitrag 1532957)
In Delphi fehlt Vieles und der Rest ist nicht aktuell und schon garnicht vollständig.
Drum gibt/gab es ja Projekte wie die JCL.

Es gibt im GetIt ein neues Projekt, welches automatisiert die "ganze" API von Windows importiert, aber
* erstmal ist GetIt grade im Arsch https://www.delphipraxis.net/212854-...ffline-11.html
* und außerdem https://www.delphipraxis.net/214473-...vor-winmd.html

Bisher hatte ich eigentlich in Delhhi (Winapi) ziemlich alles gefunden was ich brauche. War sehr selten das da was fehlte und dann hat man da schnell was gefunden bzw. konnte sich das selbst schreiben. Nur leider zu diesem Thema finde ich irgendwie nichts.

Von dem "Auto-Import" halte ich nicht so viel. Erfahrungsgemäß produziert das jede Menge Müll. Aber ich lasse mich da gerne belehren.

Dann werde ich halt wieder bei Visual Studio schauen und mir da die Sachen rausziehen die ich brauche. Dachte halt es gibt schon was Fertiges.

himitsu 3. Feb 2024 12:50

AW: Windows RawInput Funktionen
 
Zitat:

Zitat von himitsu (Beitrag 1532957)
...

RawInput ist sooo alt ... was fehlt denn?
Hätte gedacht, dass man dafür so Einiges im Delphi findet.

PS:
C:\Users\%username%\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0\Windows.UI.Input.pas
C:\Users\%username%\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0\Windows.UI.WindowsAndMessaging.pas
...\CnPack VCL Components\Source\NonVisual\CnRawInput.pas

BigAl 3. Feb 2024 13:09

AW: Windows RawInput Funktionen
 
[QUOTE=himitsu;1532959]
Zitat:

Zitat von himitsu (Beitrag 1532957)
...
C:\Users\%username%\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0\Windows.UI.Input.pas
C:\Users\%username%\Documents\Embarcadero\Studio\23.0\CatalogRepository\WindowsAPIfromWinMD-1.0\Windows.UI.WindowsAndMessaging.pas

Das wurde aber früher installiert, als es GetIt noch gab :-)

himitsu 5. Feb 2024 00:12

AW: Windows RawInput Funktionen
 
Joar, bevor Delphi gestorben ist.

Eigentlich hatte ich gestern auch mal überlegt endlich mein System zurückzusetzen, aber dann ginge Delphi ja nicht.
Mein Problem ist aktuell nur, dass immer alle Explorer.exe (inkl. Taskleiste) abstürzen/neustarten, wenn der Bildschirm aus dem Standby kommt. (irgendein Dreck mit der Bei Google suchenWindows.UI.Xaml.dll)


Versuch mal einen der Beiden, während du die Message (OnMouseIrgendwas/OnKeyIrgendwas bzw. WM_MOUSE_irgendwas/WM_KEY_irgendwas) behandelts.

Delphi-Quellcode:
// Winapi.Windows.pas

type
  INPUT_MESSAGE_DEVICE_TYPE = (
    IMDT_UNAVAILABLE = 0,
    IMDT_KEYBOARD   = 1,
    IMDT_MOUSE      = 2,
    IMDT_TOUCH      = 4,
    IMDT_PEN        = 8,
    IMDT_TOUCHPAD   = 16
  );

  INPUT_MESSAGE_ORIGIN_ID = (
    IMO_UNAVAILABLE = 0,
    IMO_HARDWARE   = 1,
    IMO_INJECTED   = 2,
    IMO_SYSTEM     = 4
  );

function GetCurrentInputMessageSource(inputMessageSource: PINPUT_MESSAGE_SOURCE): BOOL; stdcall;
function GetCIMSSM(inputMessageSource: PINPUT_MESSAGE_SOURCE): BOOL; stdcall;

Der schöne Günther 5. Feb 2024 07:25

AW: Windows RawInput Funktionen
 
Wäre nicht der richtige Ansatz, den korrekten Treiber für den Touch zu installieren, sodass der auch ehrlich sagt, dass er ein Touch ist? Windows versteckt doch den Mauszeiger automatisch, wenn man über Touch bedient.

Wenn der Touch-Bildschirm allerdings sagt "Ich bin eine Maus", dann kann es Windows ja gar nicht besser machen...

BigAl 5. Feb 2024 08:02

AW: Windows RawInput Funktionen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1533016)
Wäre nicht der richtige Ansatz, den korrekten Treiber für den Touch zu installieren, sodass der auch ehrlich sagt, dass er ein Touch ist? Windows versteckt doch den Mauszeiger automatisch, wenn man über Touch bedient.

Wenn der Touch-Bildschirm allerdings sagt "Ich bin eine Maus", dann kann es Windows ja gar nicht besser machen...

Das wäre natürlich ideal. Im Device Manager wird das Teil als "HID-compliant touch screen" angezeigt. Windows 11 behandelt es aber als normale Maus (GetCurrentInputMessageSource liefert IMDT_MOUSE und nicht IMDT_TOUCH). Es wird halt immer der Mauszeiger angezeigt, was störend und teilweise verwirrend ist. Abschalten des Zeigers ist auch nicht so prickelnd, da ja trotzdem die Buttons etc, über denen sich der Mauszeiger befindet, ge-highlited werden...

Update: Von Windows selbst wird der Touch wohl als solcher erkannt. Wenn ich z.B. auf dem Desktop mit dem Finger länger auf ein Symbol drücke wird "rechte Maustaste" ausgelöst. Was ja bei einer Maus so nicht passiert. Der Mauszeiger verschwindet trotzdem nicht.

himitsu 5. Feb 2024 09:41

AW: Windows RawInput Funktionen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hatte auch mal bissl damit rumgespielt, da ich eh grade ein TestProjekt hab, wobei ich über diese API gestolpert war.
OnMouseMove, OnMouseDown/OnMouseUp und MouseWheel an der Form, also überall zwischen den GroupBoxen, sowie OnKeyDown und OnKeyUp mit KeyPreview.

Lokal stimmt, also Maus=Hardware.
Im RDP behaptet es, es käme von der Hardware.
Bei AnyDesk wird aber von Injected geredet.
Wird es aktuell nicht innerhalb einer "Input"-Message abgefragt, dann heißt es oft Unavailable.

Mein Touchpad behauptet es wäre die Maus (beide Win10-DELL und Win11-HP). (vermutlich wegen der Mausemulation)
Beim Touchscreen kommt IMDT_TOUCH (Win10-DELL) und er hat auch von Hardware/Treiber eine MSDN-Library durchsuchenGetMessageExtraInfo gesetzt bekommen.



PS: Seitdem ich das GetCurrentInputMessageSource/GetCIMSSM hinzugefügt hab, meckert der Defender, in Win10, beim ersten Start nach dem Kopieren der EXE (startet sie aber dennoch nach ein paar Sekunden, oder beim zweiten Doppelklick)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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