Laden...

Windows 8/10 Touch-Gesten für Fullscreen-Anwendung deaktivieren

Erstellt von PoWl vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.243 Views
P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 7 Jahren
Windows 8/10 Touch-Gesten für Fullscreen-Anwendung deaktivieren

Hi,

ich programmiere gerade eine Fullscreen-Anwendung. Jedoch sind für die Touchbedienung die in Windows 10 integrierten Touch-Gesten, wie z.b. das Öffnen des Info-Centers beim Swipe nach links sehr störend.

Nach etwas googeln habe ich hier "System.EdgeGesture.DisableTouchWhenFullscreen" entdeckt, welches mit "Prevents edge gesture behaviors when an application window is active and in full-screen mode (or an owned window is active)." genau die von mir gewünschte Funktion erfüllt.

https://msdn.microsoft.com/en-us/library/windows/desktop/jj553591(v=vs.85).aspx

Leider bin ich noch viel zu unerfahren in der Programmierung um das irgendwie implementiert zu bekommen. Sicher muss ich da irgendwas mit PInvoke machen, leider habe ich nicht mal die Idee, wie ich hier anfangen soll bzw. finde nicht genug Informationen darüber.

Kann mir hier wer helfen? Ich erarbeite mir das auch gerne selbst wenn mich jemand auf die richtigen Informationen stoßen könnte. =)

Gruß, Paul

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 7 Jahren

Ich bin gerade auf folgendes gestoßen:

http://stackoverflow.com/questions/34217231/how-to-programmatically-disable-edge-swipe-gesture-of-the-windows-10-tablet-scre

Dieser Code funktioniert scheinbar. Leider verstehe ich überhaupt nicht, was da passiert, würde es aber gerne.

Hat jemand weiterführende Informationen für mich bzw. links, wo ich mich einlesen kann?

16.835 Beiträge seit 2008
vor 7 Jahren

Bei sowas ist es immer das einfachste mal auf GitHub zu schauen:
https://github.com/search?q=SetTouchDisableProperty&type=Code&utf8=%E2%9C%93
Hat ne super Suche.

Dort findest Du nach wenigen Sekunden entsprechende PInvokes, wie

      [DllImport("NativeWrappers.dll", CallingConvention = CallingConvention.Cdecl)]
        static extern bool SetTouchDisableProperty(IntPtr hwnd, bool fDisableTouch);

Derjenige hat sich also ein C++ Projekt gebaut mit dem entsprechenden C++ Code von SetTouchDisableProperty und verwendet diesen dann über PInvoke.

(Original hier)

Edit auf Deinen Beitrag, der sich überschnitten hat:
Dein auf StackOverflow gefundener Code gemacht im Prinzip genau das gleiche wie der GitHub-Code; braucht aber kein C++ Projekt.

Der deaktiviert halt die Edge-Gestures für ein gewisses Window-Handle.
Und das Window-Handle ist dann eben die Anwendung, die diese Events nich mehr auslösen soll.

A
51 Beiträge seit 2014
vor 7 Jahren

Dieser Code funktioniert scheinbar. Leider verstehe ich überhaupt nicht, was da passiert, würde es aber gerne. Würde an deiner Stelle einfach die statische Klasse EdgeGestureUtil ins eigene Projekt kopieren, dann wie beschrieben den Handler vom MainWindow via GetProcessesByName() abrufen, die Funktion EdgeGestureUtil.DisableEdgeGestures() aufrufen und mit dem Debugger langsam durchgehen.
Macht im Prinzip nichts anderes, als vom MainWindow (die Referenz übergibst du via IntPtr der Funktion) einen PropertyKey auf einen neuen Wert (siehe Guid DISABLE_TOUCH_SCREEN) zu setzen und dadurch den Touchscreen disabled.

Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt - Tractatus 5.6, Ludwig Wittgenstein