AutoHotKey > ナビゲータのスライダーをキー入力で操作する

スクリプト名 :HkSaiSlider(Simple)
用途   :ナビゲータのスライダーをキー入力で操作する
動作環境 : / Win7x64 / SAI 1.1.0 / AutoHotKey Version 1.0.48.05 / Wacom Intuos2 Driver 6.1.2-4
ファイル名:HkSaiSlider.ahk
注意   :misc.ini TabletMouseSimulation = 1 にしないと、
      カーソルがSAIウィンドウの上にある時誤動作する。


  • ページ分離 -- testmen (2009-12-18 07:09:38)
  • 自分で使ってるのでシンプル版として更新 -- testmen (2009-12-23 04:20:19)
コメントは1つ上の階層へどうぞ。

;//////////////////////////////////////////////////////////
; HkSaiSlider(Simple)
; 無保証・再配布・改変自由
;
; 動作 AutoHotKey 1.0.48.05
; 推奨 SAI 1.1.0
;
; 使用法
;  ズームイン(変換) vk1Csc079
;  ズームアウト(無変換) vk1Dsc07B
;  このソースの最下部にある、キー設定の部分を変更すれば
;  お好みのキーに割り当てられます。
;
; 注意
;  misc.ini TabletMouseSimulation = 1 にしないと、
;  カーソルがSAIウィンドウの上にある時誤動作する。
;
; 2009-12-23
;  カイゼン活動
;//////////////////////////////////////////////////////////
#MaxThreads 1
#MaxThreadsPerHotkey 1
#HotkeyInterval 1000 ; This is  the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.
;//////////////////////////////////////////////////////////
; 設定  ///////////////////////////////////////////////////
;//////////////////////////////////////////////////////////
;
; ナビゲータは独立ウィンドウか
; 設定:
;   0 ... メインウィンドウと統合
;   1 ... 独立(SAI1.1.0~使用可)
;
IsNavigatorIndependent = 1
 
; 表示倍率 or 回転角度
; 設定:
;   0 ... 表示倍率
;   1 ... 回転角度
;
TargetSlider = 0
;
;//////////////////////////////////////////////////////////
;設定ここまで  ////////////////////////////////////////////
;//////////////////////////////////////////////////////////
Target_Wintit=SAI
if IsNavigatorIndependent=1
	Target_Wintit=ナビゲータ
 
if TargetSlider=0
{
	Target_Class=sfl_window_class3
	if IsNavigatorIndependent=1
		Target_Class=sfl_window_class2
	Target_Text=表示倍率
 
}
if TargetSlider=1
{
	Target_Class=sfl_window_class7
	if IsNavigatorIndependent=1
		Target_Class=sfl_window_class6
	Target_Text=回転角度
}
;//////////////////////////////////////////////////////////
;スライダ位置の検出
ControlGetPos, x, y, w, h, %Target_Class%, %Target_Wintit%, %Target_Text%
X:=x+(w/2)
;//////////////////////////////////////////////////////////
SendMode Play
return 
 
;//////////////////////////////////////////////////////////
;メイン
; SliderX	…	スライダのX位置
; SliderY	…	スライダのY位置
; PLM	…	加算の横方向
; TClass	…	ターゲットのクラス
; TWintit	…	ターゲットのウィンドウタイトル
; Ttext		…	ターゲットのテキスト
NavDrag(SliderX,SliderY,PLM,TClass,TWintit,Ttext) {
	;押されたホットキーを保存
	PushThishotkey=%A_Thishotkey%
	;トラップ(ちょい待機してキー押してなかったらreturn)
	sleep, 25
	if PLM = -1
	{
		GetKeyState, stateZoomOut, %PushThishotkey%,P
 
		if stateZoomOut = U
			return
	}
	if PLM = +1
	{
		GetKeyState, stateZoomIn, %PushThishotkey%, P
		if stateZoomIn = U
			return
	}
	;入力禁止
	BlockInput, MouseMove
;On	
 
	nowX:=SliderX	;スライド操作初期位置
	minADD:=PLM*0.5	;増加単位
 
	;シフトDOWN
	Send {Shift Down}
	;左ボタンDOWN
	clickLParam := nowX | (SliderY << 16) 
	SendMessage, 0x201, 0x0001, ClickLParam ,%TClass%, %TWintit%, %Ttext%
 
	;キーDOWN中の処理
	Loop
	{
		;座標加算
		nowX := nowX + minADD
		;スライド処理
		moveLParam := nowX | (SliderY << 16) 
		SendMessage, 0x200, 0x0001, moveLParam ,%TClass%, %TWintit%, %Ttext%
		;脱出処理
		if PLM = -1
			{
			GetKeyState, stateZoomOut, %PushThishotkey%,P
			if stateZoomOut = U
				break
			}
		if PLM = +1
			{
			GetKeyState, stateZoomIn, %PushThishotkey%, P
			if stateZoomIn = U
				break
			}
	}
 
	;左ボタンUP
	outLParam := nowX | (SliderY << 16) 
	SendMessage, 0x202, 0x0001, outLParam ,%TClass%, %TWintit%, %Ttext%
	;シフトUP
	Send {Shift Up}
	;入力禁止解除
	BlockInput, MouseMoveOff	
return
}
;//////////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////
#IfWinActive, SAI - ahk_class sfl_window_class
;//////////////////////////////////////////////////////////
;ズームアウト(無変換) vk1Dsc07B
vk1Dsc07B::NavDrag(X,Y,-1,Target_Class,Target_Wintit,Target_Text)	
;ズームイン(変換) vk1Csc079
vk1Csc079::NavDrag(X,Y,+1,Target_Class,Target_Wintit,Target_Text)	
 
#IfWinActive
;Esc::exitapp ; テスト用