Обнаружение нажатий сенсорного экрана в AutoHotkey в Windows 8

Я использую Dell Venue 8 Pro под управлением Windows 8.1 32 бит. Я пытаюсь использовать AutoHotkey для сопоставления определенных областей экрана с определенными кнопками на клавиатуре, чтобы иметь возможность использовать сенсорный экран для управления определенной игрой в пинбол, которая уже существует. Моя цель состоит в том, чтобы нажать A, если коснулась левой половины экрана, и нажать B для правой половины (разрешение экрана установлено в 640x480). Вот сценарий, который я написал:

~LButton::
MouseGetPos, x,y
if (x > 0 and x < 320)
    Send {A}
if (x > 320 and x < 640)
    Send {B}
return

однако, не похоже, что распознавание нажатий сенсорного экрана вообще. Кажется, что нажатия на сенсорный экран отличаются от обычных щелчков мыши. Как я могу использовать AutoHotkey для распознавания нажатия на сенсорный экран, или есть другое решение для того, что я пытаюсь сделать?

Edit: я начинаю думать, что AutoHotkey не способен делать то, что я хочу сделать здесь. Если кто-то может найти альтернативный способ, который дает тот же результат (нажимает кнопки клавиатуры при касании областей экрана), я приму ответ.

21
задан bdr9
31.12.2022 21:14 Количество просмотров материала 3646
Распечатать страницу

3 ответа

Я не уверен, на каком языке вы пишете игра... Как правило, [ javascript ], [ jquery ] и [ Webkit ] поддержка сенсорных событий. Но если это не поможет, то вы можете попробовать этот скрипт и изменить его в соответствии с вашим удобством:

цитата от создателя скрипта: [ ссылке ]

У меня есть MID (мобильное интернет-устройство) под названием Viliv S5. Оно имеет разрешением 1024 x 768 для 4.8 дюймов экран. Что означает значки на маленький щелчок пальцами. Поэтому я разработал скрипт для конвертации сенсорный экран (абсолютная координата) к сенсорной панели (относительной координате).

этот скрипт ловит мышь вниз, скрывая реальные курсоры и показывая подделку указатели. Когда палец отпущен, указатель мыши перемещается в предполагаемое положение и раскрыть курсор.

использование:

  1. распакуйте zip-файл в соответствующем папка.

  2. Открыть Тачпад.ini и установите курсор "speed" (0 ~ 1).

  3. перетащите экран и курсор перемещается.

  4. Нажмите в любом месте экрана и нажмите отправляется.

  5. двойное нажатие двойной клик.

  6. "Ctrl + u" приостановить / перезапустить скрипт.

  7. нажмите на иконку в трее и выйдите из сценария.

в do:

  1. выполнить перетаскивание.

  2. иногда курсоры переходят в положение моего пальца.

  3. иногда курсоры скрыты.

загрузите zip-файл здесь: http://cafe.naver.com/flowpad/34 (Я обновил приведенную выше ссылку.)

сценарий:

; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win9x/NT
; Author:         Seung-Young Noh <noh@socoop.net>


#SingleInstance force
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Menu, Tray, NoStandard
Menu, Tray, Tip, Touchpad V0.7
Menu, Tray, Icon, 1.ico, , 1
Menu, Tray, add, Exit, MenuQuit
Menu, Tray, Default, Exit
Menu, Tray, Click, 1

#Persistent
CoordMode, Mouse, Screen

IniRead, Cursor_speed, Touchpad.ini, main, Cursor_speed
if not Cursor_speed
    Cursor_speed := 0.7

SystemCursor("I")
SetTimer, WatchCursor, 50
return

MenuQuit:
    ExitApp
return

LWin & u::
    Suspend
    SetTimer, WatchCursor, Off
    SetTimer, MovePointer, Off
    SystemCursor(1)

    if (A_IsSuspended = 1) {
        Menu, Tray, Icon, 2.ico
    } else {
        Menu, Tray, Icon, 1.ico
    }
return  

WatchCursor:
    MouseGetPos, x, y
    GetKeyState, state, LButton
    FromX := FromX1
    FromY := FromY1
    FromX1 := x
    FromY1 := y
return

StartWatchCursor:
    SetTimer, WatchCursor, On
return

LButton::
    SystemCursor(0)
    SetTimer, WatchCursor, Off

    ToX := FromX
    ToY := FromY

    SplashImage, C:\Windows\Cursors\arrow_r.cur, x%ToX% y%ToY% B

    MouseGetPos, thisX, thisY
    SetTimer, MovePointer, 100
return

LButton Up::
    SetTimer, MovePointer, Off

    MouseMove, %ToX%, %ToY%, 0
    SplashImage, Off
    if ((A_TimeSincePriorHotkey < 100) and (abs((ToX - FromY) * (ToY - FromY)) < 200)) {
        Click
    }
    FromX := ToX
    FromY := ToY

    SystemCursor(1)

    SetTimer, StartWatchCursor, -1000
return

MovePointer:
    MouseGetPos, x, y
    ToX := ToX + Round(Cursor_speed * (x - thisX))
    ToY := ToY + Round(Cursor_speed * (y - thisY))
    if (ToX <= 0) {
        ToX = 0
    } else if (ToX >= A_ScreenWidth) {
        ToX := A_ScreenWidth
    }
    if (ToY <= 0) {
        ToY = 0
    } else if (ToY >= A_ScreenHeight) {
        ToY := A_ScreenHeight
    }

    if (((x - thisX) != 0) or ((y - thisY) !=0)) {
        SplashImage, C:\Windows\Cursors\arrow_r.cur, x%ToX% y%ToY% B
    }
    thisX := x
    thisY := y
return

;; The script below is another's. I can't remember whose it is.

SystemCursor(OnOff=1)   ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
    static AndMask, XorMask, $, h_cursor
        ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
        , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13   ; blank cursors
        , h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13   ; handles of default cursors
    if (OnOff = "Init" or OnOff = "I" or $ = "")       ; init when requested or at first call
    {
        $ = h                                          ; active default cursors
        VarSetCapacity( h_cursor,4444, 1 )
        VarSetCapacity( AndMask, 32*4, 0xFF )
        VarSetCapacity( XorMask, 32*4, 0 )
        system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
        StringSplit c, system_cursors, `,
        Loop %c0%
        {
            h_cursor   := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
            h%A_Index% := DllCall( "CopyImage",  "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
            b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
                , "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
        }
    }
    if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
        $ = b  ; use blank cursors
    else
        $ = h  ; use the saved cursors

    Loop %c0%
    {
        h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
        DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
    }
}

надеюсь, что это помогает... Я не тестировал сценарий.

3
отвечен mk117 2023-01-02 05:02

в потоке списка пожеланий AutoHotkey несколькими пальцами жесты, главный разработчик AutoHotkey, lexikos, говорит об этом 30 сентября 2013 года:

У меня нет планшета Windows или сенсорного экрана, или какой-либо интерес к получение одного или разработка функций сенсорного ввода.

кроме того, насколько я знаю, Windows 8 отправляет события мыши для сенсорных экранов, хотя они будут отложены до тех пор, пока Windows не решит, что они не жесты.

этой поток stackoverflow говорит :

Я заметил, что интерфейс сенсорного экрана Windows 7 имеет эту вещь где он будет сдерживать mousedown события. Благодаря функции " tap-and-hold щелкните правой кнопкой мыши" жест, Windows 7 на самом деле не отправить приложение событие мыши вниз до:

  • пользователь "touch ups" (поднимите палец от прикосновения, в этот момент вниз и вверх отправляются)
  • движется их палец (в этот момент щелчок становится перетаскиванием)
  • или щелкните круг жестом раз из (примерно 5-6 секунд)

приложение должно работать с этими ограничениями, особенно MouseGetPos не работает, пока пользователь не поднимает или перемещает палец таким образом, что очевидно (для Windows) не жест.

в действительности, MouseGetPos не может функционировать очень хорошо на сенсорном экране.

2
отвечен harrymc 2023-01-02 07:19

вы можете использовать стороннее приложение, чтобы сделать это.

TouchMe жест студия может быть в состоянии помочь, это позволит вам назначить сенсорные жесты горячих клавиш.

проверьте этот ahk форум сообщение

0
отвечен YasharBahman 2023-01-02 09:36

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх