6

Я использую 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 для распознавания нажатия сенсорного экрана, или есть другое решение для того, что я пытаюсь сделать?

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

3 ответа3

3

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

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

У меня есть MID (мобильное интернет-устройство) под названием Viliv S5. Он имеет разрешение 1024 х 768 для 4,8-дюймового экрана. Это означает, что значки должны быть маленькими, чтобы щелкать пальцами. Поэтому я разработал скрипт для преобразования сенсорного экрана (абсолютная координата) в сенсорную панель (относительная координата).

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

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

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

  2. Откройте Touchpad.ini и установите скорость курсора (0 ~ 1).

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

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

  5. Двойное нажатие - двойной щелчок.

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

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

Сделать:

  1. Реализуйте перетаскивание.

  2. Иногда курсоры прыгают на мою позицию пальца.

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

Загрузите файл почтового индекса здесь: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% )
    }
}

Надеюсь это поможет... Я не проверял сценарий.

2

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

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

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

Этот поток stackoverflow говорит:

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

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

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

В действительности MouseGetPos может работать не очень хорошо на сенсорном экране.

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .