mieki256's diary



2017/03/03(金) [n年前の日記]

#2 [autohotkey] AutoHotkeyでマウスホイールの回転を検出

こんな感じだろうか…。

_wheelupdown_check_01.ahk
; wheel up/down check
; use AutoHotKey v1.1.24.05

#SingleInstance, Force
#InstallMouseHook

appliname=wheelupdown_check_01
appliver=0.0.1
wtitle=%appliname% %appliver%

; GUI settings

; Gui, +Owner +AlwaysOnTop +Resize -SysMenu -MinimizeBox -MaximizeBox -Disabled -Caption -Border +ToolWindow
Gui, +Owner +AlwaysOnTop +Resize -MinimizeBox -MaximizeBox
Gui, Color, 336699
Gui, Font, CFFFFFF S26 W700 Q2, Arial
Gui, Add, Text, Vkeystext, Alt+Q ... Exit
Gui, Show, NoActivate, %wtitle%
; GuiControl, , keystext,
WinSet, Transparent, 220, %wtitle%

cwheeldown = 0
cwheelup = 0
check_cwheeldown = 0
check_cwheelup = 0

ks=WheelDown WheelUp Space Up Down Left Right BS
keyslist := Object()
nowstate := Object()
oldstate := Object()
Loop, Parse, ks, %A_Space%
{
  k=%A_LoopField%
  v=%k%
  keyslist.Insert(k, v)
  nowstate.Insert(k, 0)
  oldstate.Insert(k, 0)
}

Loop, 
{
  For k, v in keyslist
  {
    n := nowstate[k]
    oldstate[k] := n
    nowstate[k] := 0
    If k=WheelDown
    {
      If cwheeldown<>%check_cwheeldown%
      {
        check_cwheeldown := cwheeldown
        nowstate[k] := 1
      }
    }
    Else If k=WheelUp
    {
      If cwheelup<>%check_cwheelup%
      {
        check_cwheelup := cwheelup
        nowstate[k] := 1
      }
    }
    Else
    {
        nowstate[k] := GetKeyState(k)
    }
  }
  
  keys=
  For k, v in keyslist
  {
    If (nowstate[k] + oldstate[k])=1
      If nowstate[k]<>0
        keys=%keys% %k%
  }
  keys := Trim(keys, " ")
  
  If keys<>
    GuiControl, , keystext, %keys%
  
  Sleep, 16
}

EXIT:
GuiClose:
  ExitApp

~*WheelDown::
  cwheeldown += 1
  return
  
~*WheelUp::
  cwheelup += 1
  return

~!Q Up::
  ; Alt + Q ... Exit
  Goto, EXIT

結果はこんな感じに。

wheelupdown_check_01_ss01.gif

補足説明。 :

以下のやり取りを参考にして書いてみたり。

_getkeystate wheel (Getkeystate not wheely good!) - Ask for Help - AutoHotkey Community

GetKeyStateを使ってホイール回転を検出しようとすると、ホイールを回した途端、そこからずっとOnが返ってくる状態になってしまう。しかし、ホットキーラベル(WheelDown::、WheelUp:: 等)を使うと、そこはホイールを回した瞬間だけ呼ばれるようで。なので、そこで変数の内容をインクリメントして、メインループ内で「変数の内容が今までと違っているか」を調べて、ホイール回転があったかどうかを判断してる。

GetKeyState は、「GetKeyState, 変数, キー種類」という形でも書けるけど、「n := GetKeyState(キー種類)」という形で書けば、1/0で状態を取得できるらしい。

以上です。

過去ログ表示

Prev - 2017/03 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project