マニュアル > Tips一覧 > AutoHotKey > 描画色・透明色を2つのキーに割り当て

「マニュアル/Tips一覧/AutoHotKey/描画色・透明色を2つのキーに割り当て」の編集履歴(バックアップ)一覧に戻る

マニュアル/Tips一覧/AutoHotKey/描画色・透明色を2つのキーに割り当て - (2010/01/19 (火) 01:44:06) のソース

スクリプト名 :HkSaiTransparency
用途   :1キートグル仕様の「描画色/透明色」の切替を2つのキーに分割して設定できます
動作環境 : / Win7x64 / SAI 1.1.0 / AutoHotKey Version 1.0.48.05 / Wacom Intuos2 Driver 6.1.2-4
ファイル名:HkSaiSlider.ahk

#highlight(lisp){{
;//////////////////////////////////////////////////////////
; HkSaiTransparency
; 1キートグル仕様の通常/透過モードを2つのキーに分割して設定できます
;
; 無保証・再配布・改変自由
;
; 動作 AutoHotKey 1.0.48.05
;    SAI 1.1.0
;
; 
; 使用法
;	スクリプトを起動したら、
;	1.ツールパレットを表示させ
;	2.適当なブラシを選択し
;	3.開いているSAIファイルのキャンバスの上にマウスカーソルを乗せてください
;	4.スクリプトがブラシのマウスカーソルを認識し、動作を開始します
;
;	Z	通常ブラシ
;	C	透明ブラシ
;
;	このソースの最下部にある、キー設定の部分を変更すれば
;	お好みのキーに割り当てられます。
;
; 2010-01-10 起動時カーソル確認待機
; 2009-12-26
;	ツールパネル消してても動作するように(マウスカーソル判定)
; 2009-12-22
;	初版
;
;//////////////////////////////////////////////////////////
; 設定  ///////////////////////////////////////////////////
;//////////////////////////////////////////////////////////

; デバッグモード
; 設定:
;   0 ... オフ
;   1 ... オン
DebugMode=0

;//////////////////////////////////////////////////////////
;設定ここまで  ////////////////////////////////////////////
;//////////////////////////////////////////////////////////
#MaxThreads 1
#MaxThreadsPerHotkey 1
#HotkeyInterval 1000 ; This is  the default value (milliseconds).
#MaxHotkeysPerInterval 50 ; This is the default value.

;初期化

MsgBox, 4160, , SAIを起動してブラシを選択し、キャンバスの上にカーソルを乗せてください。
sleep, 1000

Loop{
	TA_SAI:="SAI ahk_class sfl_window_class"
	hSAI:=WinExist(TA_SAI) 


	If WinActive(TA_SAI){

		If(CheckChecker()){
			ControlSend,, -, SAI ahk_class sfl_window_class
		}
		
		hNomalCursor:=GetCursor(hSAI)
		if (hNomalCursor>1000){
			tooltip, hSAI%hSAI% 通常%hNomalCursor%
			break
		}
		
	}
	

	sleep,1000
}

sleep,3000
tooltip,
return



GetCursor(HWND){
	mytid:=DllCall("kernel32.dll\GetCurrentThreadId","UInt")
	targettid:=DllCall("user32.dll\GetWindowThreadProcessId","UInt",HWND,"UInt",0,"UInt")
	if(mytid==targettid){
		hcursor:=DllCall("user32.dll\GetCursor","Short")
	}else{
		DllCall("user32.dll\AttachThreadInput","UInt",targettid,"UInt",mytid,"Int",-1)
		hcursor:=DllCall("user32.dll\GetCursor","Short")
		DllCall("user32.dll\AttachThreadInput","UInt",targettid,"UInt",mytid,"Int",0)
	}
	return hcursor
}

CheckChecker(){
	;ツールウィンドウの位置	
	WinGetPos, ToolX, ToolY, , , ツール ahk_class sfl_window_class

	;ウィンドウある?
	if(!ToolX && !ToolY){
		;tooltip, ツールウィンドウがないよ!
		;sleep, 1000
		;tooltip
		return -1
	}
	;座標モード変更
	CoordMode Pixel,Screen
	CoordMode Tooltip,Screen

	;選択色ボックスの位置
	ControlGetPos, X, Y, , , sfl_window_class1, ツール
	;透過状況表示箱の位置
	GetX:=ToolX+X+2
	GetY:=ToolY+Y+34

	;sleep, 250
	;色取得 
	PixelGetColor, CheckerColor, GetX, GetY

	if (CheckerColor=0xFFE0E0)
		return 1
	if (CheckerColor=0xFAFAFA)
		return 0

}

ToggleTrans(GoTo){
	Global DebugMode,hSAI,hNomalCursor

	Loop,1{
		;sleep, 250
		;色取得 
		;PixelGetColor, CheckerColor, GetX, GetY
		EnableTrans:=CheckChecker()
	
		;FFE0E0 erase
		if (GoTo=0) {	;通常にする
			If (EnableTrans=1) {	;通常にする
				ControlSend,, -, SAI ahk_class sfl_window_class
				if DebugMode
					Tooltip, %CheckerColor% 通常にする %GoTo% E %ErrorLevel%, GetX,GetY
			}
			If (EnableTrans=0) { 	;もう通常
				if DebugMode
					Tooltip, %CheckerColor% もう通常 %GoTo% E %ErrorLevel%, GetX,GetY
			}
			If (EnableTrans=-1) { 	;カーソル判別モード
				hCursor:=GetCursor(hSAI)
				if DebugMode
					tooltip, 通常にする 今の%hCursor% 通常%hNomalCursor%
				if (hCursor!=hNomalCursor)
					ControlSend,, -, SAI ahk_class sfl_window_class
			}
		}
		if (GoTo=1){	;透明にする
			If (EnableTrans=0) {	;透明にする
				ControlSend,, -, SAI ahk_class sfl_window_class
				if DebugMode
					Tooltip, %CheckerColor% 透明にする %GoTo% E %ErrorLevel%, GetX,GetY
			}
			If (EnableTrans=1) {	;もう透明
				if DebugMode
					Tooltip, %CheckerColor% もう透明 %GoTo% E %ErrorLevel%, GetX,GetY
			}
			If (EnableTrans=-1) { 	;カーソル判別モード
				hCursor:=GetCursor(hSAI)
				if DebugMode
					tooltip, 透明にする 今の%hCursor%  通常%hNomalCursor%
				if (hNomalCursor=hCursor)
					ControlSend,, -, SAI ahk_class sfl_window_class
				
			}
		}
	}

	return
}


;//////////////////////////////////////////////////////////
;キー設定
;//////////////////////////////////////////////////////////
#IfWinActive, SAI - 
;通常
Z::ToggleTrans(0)
;透明
C::ToggleTrans(1)
;Space::ToggleTrans(1)

;//////////////////////////////////////////////////////////
#IfWinActive
;Esc::exitapp ; テスト用

}}

- 自分用に作ったので載せておきます  -- 名無し  (2009-12-22 12:13:26)
- GetCursorでやろうとしたけど、SAIのカーソルはハンドルが毎回変わるので無理でした。カーソルハンドル値は、消しゴム>通常なので、今の方法と組み合わせれば使えるかも。  -- 名無し  (2009-12-22 12:24:15)
- パネル類を非表示にしていても動作するようにした  -- 名無し  (2009-12-26 07:25:39)
- 起動時チェック追加  -- 名無し  (2010-01-19 01:44:06)
#comment(,disableurl)