Windows 8 mit Touch und GUI_EVENT_PrimaryDown

  • Hallo Zusammen!

    Ich habe ein Problem im Zusammenhang mit Windows 8 und einem Touchscreen.
    Und zwar möchte ich einen Event setzen, der ausgelöst wird, sobald die Maustaste bzw. der Touchbildschirm gedrückt wird.

    Ich verwende untenstehenden Code.

    [autoit]


    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Global $hGUI1 = GUICreate("Test", 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI1)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseClick", $hGUI1)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While True
    Sleep(500)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _MouseClick()
    MsgBox(64,"info","click")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Der funktioniert auch einwandfrei, wenn ich mit einer "normalen" Maus klicke.
    Wennn ich jedoch auf dem Touchscreen tippe (Finger) oder mit dem Touchpen auf den Bildschirm drücke, dann passiert nichts.
    Das heisst, wenn ich einen Doppelklick auf den Bildschirm mache, erst dann wird die Funktion "_MouseClick" ausgeführt. Doch ein Doppelklick ist auf einem Touchgerät etwas schwieriger, als mit einer Maus!

    Klar, es gibt andere Codes hier im Forum, die einen Maushook setzen. Das habe ich getestet und es funktioniert sogar mit Touch. Aber dies ist halt sehr ressourcenhungrig.

    Deshalb hier meine Frage: Warum läuft der Befehl GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseClick", $hGUI1) nicht mit einem einfachen Klick auf dem Touch? Der Clou ist ja, dass die Funktion "$GUI_EVENT_Close" auf auf dem Touch mit einem einfachen Klick funktioniert!

    Gruss Veronesi

    2 Mal editiert, zuletzt von veronesi (27. März 2013 um 06:47) aus folgendem Grund: Präfix auf gelöst gesetzt

  • OK, mit diesem Skript bekomme ich jedes Mal einen Event, wenn ich mit dem Stylus (oder Finger) auf den Titelrahmen der GUI tippe. Schon mal sehr gut! Aber eigentlich soll es auch - oder nur funktionieren, wenn ich innerhalb der GUI klicke!

    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Global $hGUI1 = GUICreate("Test", 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI1)
    ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseClick", $hGUI1)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    Global Const $WM_TOUCHUP = 0x0242
    GUIRegisterMsg($WM_TOUCHUP, "_Test")

    [/autoit][autoit][/autoit][autoit]

    While True
    Sleep(500)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Test($hWnd, $Msg, $wParam, $lParam)
    MsgBox(64,"info","click")
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _MouseClick()
    MsgBox(64,"info","click")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Eine Idee?

    Gruss, Veronesi

    Einmal editiert, zuletzt von veronesi (25. März 2013 um 07:01)

  • Das folgende Skript funktioniert nun, wenn man mit dem Finger die Touchoberfläche bedient.
    Leider passiert mit einem Touchpen nichts!

    [autoit]


    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Global $hGUI1 = GUICreate("Test", 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI1)
    ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseClick", $hGUI1)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    Global Const $WM_GESTURENOTIFY = 0x011A
    GUIRegisterMsg($WM_GESTURENOTIFY, "_TouchFinger")
    While True
    Sleep(500)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _TouchFinger($hWnd, $Msg, $wParam, $lParam)
    ConsoleWrite("Touch with finger!" & @CRLF)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Gruss, Veronesi

    Einmal editiert, zuletzt von veronesi (25. März 2013 um 07:00)

  • So, nun habe ich doch noch eine Lösung dafür gefunden.
    Es gibt (mindestens momentan) eine Konstante die nicht benannt wird. Der Wert ist 0x02CC.

    Damit können mit einer GUIRegisterMsg alle Finger-Touch und Pen-Touch Gesten abgefangen werden.
    Genau das, was ich im Moment benötige!

    [autoit]


    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit][autoit][/autoit][autoit]

    Global $hGUI1 = GUICreate("Test", 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI1)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_MouseClick", $hGUI1)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    Global Const $WM_GESTURENOTIFY = 0x011A ;Detect only finger, but not pen!
    Global Const $WM_TABLET_UNKNOWN = 0x02CC
    GUIRegisterMsg($WM_TABLET_UNKNOWN, "_TouchTablet")

    [/autoit][autoit][/autoit][autoit]

    While True
    Sleep(500)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _MouseClick()
    ConsoleWrite("Touch with mouse!" & @CRLF)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _TouchTablet($hWnd, $Msg, $wParam, $lParam)
    ConsoleWrite("Touch on Tablet!" & @CRLF)
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Gruss Veronesi