Windows 8.132ビットを実行しているDellVenue 8Proを使用しています。タッチスクリーンを使用して既存の特定のピンボールゲームを制御できるようにするために、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が私がここで達成したいことをすることができないと思い始めています。誰かがこれと同じ結果を生み出す別の方法を見つけることができれば(画面領域がタッチされたときにキーボードボタンを押す)、私は答えを受け入れます。
ゲームをコーディングしている言語がわかりません...通常、[ javascript ]、[ jquery ]、および[ Webkit =]タッチイベントをサポートします。しかし、それでも問題が解決しない場合は、このスクリプトを試して、都合に合わせて変更することができます。
Viliv S5というMID(モバイルインターネットデバイス)を持っています。 4.8インチ画面の解像度は1024x768です。つまり、アイコンは指でクリックするには小さすぎます。そこで、タッチスクリーン(絶対座標)をタッチパッド(相対座標)に変換するスクリプトを開発しました。
このスクリプトは、マウスを下に引っ掛けて、実際のカーソルを非表示にし、偽のカーソルを表示します。指を離すと、マウスポインタが目的の位置に移動し、カーソルが表示されます。
関連するフォルダにあるZipファイルを解凍します。
Touchpad.iniを開き、カーソルの「速度」(0〜1)を設定します。
画面をドラッグするとカーソルが移動します。
画面上の任意の場所をタップすると、クリックが送信されます。
ダブルタップはダブルクリックです。
「Ctrl + u」はスクリプトを一時停止/再開します。
トレイアイコンをクリックして、スクリプトを終了します。
ドラッグを実装します。
カーソルが私の指の位置にジャンプすることがあります。
カーソルが非表示になることがあります。
ここからZipファイルをダウンロードします: http://cafe.naver.com/flowpad/34 (上記のリンクを更新しました。)
; AutoHotkey Version: 1.x
; Language: English
; Platform: Win9x/NT
; Author: Seung-Young Noh <[email protected]>
#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% )
}
}
これがお役に立てば幸いです...私はスクリプトをテストしていません。
AutoHotkeyウィッシュリストスレッド マルチフィンガータッチジェスチャ で、メインのAutoHotkey開発者であるlexikosは、2013年9月30日に次のように述べています。
私はWindowsタブレットやタッチスクリーンを持っていません。あるいは、それらを入手したり、タッチ入力機能を開発したりすることに興味はありません。
これとは別に、私が知る限り、Windows 8はタッチスクリーンのマウスイベントを送信しますが、Windowsがジェスチャーではないと判断するまで遅延します。
これ stackoverflowスレッド は言う:
Windows 7のタッチスクリーンインターフェイスには、マウスダウンイベントを抑制する機能があることに気づきました。 「タップアンドホールドの右クリック」ジェスチャにより、Windows 7は、次の場合まで実際にアプリケーションにマウスダウンイベントを送信しません。
- ユーザーの「タッチアップ」(タッチから指を上げると、下と上の両方が送信されます)
- 指を動かします(その時点でクリックがドラッグになります)
- または、右クリックのサークルジェスチャがタイムアウトします(約5〜6秒後)
アプリケーションは、これらの制限、特にユーザーが明らかに(Windowsにとって)ジェスチャーではない方法で指を持ち上げるか動かすまでMouseGetPosが機能しないという制限で動作する必要があります。
実際、MouseGetPosはタッチスクリーンではうまく機能しない可能性があります。
これを行うには、サードパーティのアプリを使用できます。
TouchMe Gesture Studioが役立つ場合があります。これにより、タッチスクリーンジェスチャをホットキーに割り当てることができます。