2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

AutoHotkey スレッド part18

1 :名無しさん@お腹いっぱい。:2014/04/28(月) 12:19:55.14 ID:ZU+n1lM80.net
■配布元
http://ahkscript.org/download/
2014年1月からAHKLのLが取れて正式にAHKの主流扱いになりました。
新規利用者には日本語の扱いで不具合の無いユニコード版の利用を推奨。

■前スレ
AutoHotkey スレッド part17
http://anago.2ch.net/test/read.cgi/software/1383384464/

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
http://www.ironahk.net/
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/

テンプレ>>2-10

101 :名無しさん@お腹いっぱい。:2014/05/08(木) 02:05:11.80 ID:5Yw3w92c0.net
>>97
RegularRenamerってファイルリネームして即終わるアプリでしょ
RunWaitで終わるまで待ってやるんじゃダメなわけ?

つかAHK内でFileMoveでリネームするのはどうよ
Unicode版ではダメ文字もなくなったしRegExReplace()も使えるから
外部アプリに頼らなくてもいいんでね


>>99
↓のMUS_GetTitleBarPos() あたり
http://www6.atwiki.jp/eamat/pages/27.html

102 :99:2014/05/08(木) 13:18:38.89 ID:U9WEUh+g0.net
>>100
>>101
ありがとうございます、やってみます。

103 :名無しさん@お腹いっぱい。:2014/05/08(木) 19:55:27.42 ID:i7jGPQu60.net
>>95に関連する(逆の?)質問なんすけど…
>>95を例にして説明すると、
長押しでキーリピートしないのは良いんだけど、長押しからリリースした瞬間「0」が1個入力されてしまうのは困る。
修飾キーとして使おうと思って「0」キー押したが暫く考えてやっぱり止めた…という時に「0」が入力されないようにしたい。
こんな場合どう書けば良いの?

Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 Return
}else{
 Send, {Numpad0}
}
Return

としても「0」が入力されてしまい、だめだったです。

104 :名無しさん@お腹いっぱい。:2014/05/08(木) 21:02:30.22 ID:ysVxZ42V0.net
>>103
スクリプトの実行ログ見れば分かると思うが、キーリピートが最後に実行されている。
リピート止めていないのが原因。
それとは別に、フックを使わないとSendにも反応して無限ループする。ダメな例:Numpad0::Send,{Numpad0}

#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 KeyWait, %A_ThisHotKey%
 Return
}else{
 Send,{Numpad0}
}
Return

105 :名無しさん@お腹いっぱい。:2014/05/08(木) 21:55:15.60 ID:3zhXVqi40.net
ていうか修飾キーとして&使っちゃうと元のキーとしての機能が失われるんよ。それはAHKの仕様

だからGetkeystateで分岐するほうが問題が少ない。
Numpad0の機能は殺して、Numpad0 upでsend,0するのは正しいけど、こうしないとダメ

Numpad0::
keywait,Numpad0
return

Numpad0 up::
if{flag==1){
flag:=0
}else{
send,{Numpad0}
}

Numpad0+Numpad3で処理をさせたいなら

Numpad3::
if (getkeystate("numpad0","p")){
flag:=1
処理
}else{
send,{Numpad3}


でやるべき。
&使うのはもともと修飾キーだったwinやaltやctrlやshiftのほうがいいぞ

106 :名無しさん@お腹いっぱい。:2014/05/08(木) 21:59:27.79 ID:i7jGPQu60.net
>>104
レスありがとう。
>>104単独ではうまく行くのですが、>>103の目的が達成されません。

#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 KeyWait, %A_ThisHotKey%
 Return
}else{
 Send,{Numpad0}
}
Return
;例として[Numpad0]+[Numpad3]で「a」を送る
Numpad0 & Numpad3::Send, a

こうすると長押しでも「0」が送られます。
なかなか難しいすね。

107 :名無しさん@お腹いっぱい。:2014/05/08(木) 22:06:51.61 ID:3zhXVqi40.net
てかうpろだのNewOSM落として改造してみては?

Numpad0::Hotkey(1,0)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::("{blind}{Numpad3}","処理ラベル")

処理ラベル:
処理
return

とか

108 :名無しさん@お腹いっぱい。:2014/05/08(木) 22:16:20.32 ID:i7jGPQu60.net
>>105
レスありがとう。
修飾キー以外もいじる必要あって何かかなり複雑になるみたいすね。

>>104-105
素直に普通の修飾キー使うか、
長押しでキー送られても問題ない状況でこういう修飾キー使おうと思います。

109 :名無しさん@お腹いっぱい。:2014/05/08(木) 22:16:58.89 ID:3zhXVqi40.net
ちがった。こうか
ちょっと関数分かりにくいなコレ

Numpad0::Hotkey(1,1)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::Keypush(,"aaa")

aaa:
msgbox,A
return

110 :名無しさん@お腹いっぱい。:2014/05/08(木) 22:24:54.73 ID:i7jGPQu60.net
>>107
参考にさせてもらいます。
ありがとう。

111 :名無しさん@お腹いっぱい。:2014/05/08(木) 23:22:35.63 ID:ysVxZ42V0.net
>>ID:i7jGPQu60
何が聞きたいのかハッキリしてほしいな、コンビネーションキーの事も聞いていたのか。
普段使わないF13等のキー以外はコンビネーションキーの機能で割り当てない方がいい。
#Ifを使えばキー機能無効化せずに割り当てできる。

#UseHook

Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel) {
 KeyWait, %A_ThisHotKey%
}else{
 Send,{Numpad0}
}
Return

#If GetKeyState("Numpad0","P")
Numpad3::Send, a
#If

112 :名無しさん@お腹いっぱい。:2014/05/08(木) 23:52:54.28 ID:i7jGPQu60.net
>>111
>>103>>95を例に質問したつもりだったんですけど、分かり難かったみたいでスンマセン。
要は、修飾キーにしたテンキー0を押してそのまま何キー(テンキー3)も押さないで
暫くしてテンキー0を放した時に「0」が送られないようにしたいと言う質問でした。

>>111のコードで目的が達成できたと思います。
ありがとう。

113 :名無しさん@お腹いっぱい。:2014/05/09(金) 04:10:30.55 ID:7zmMXcCb0.net
>>2
必要

114 :名無しさん@お腹いっぱい。:2014/05/09(金) 12:39:01.16 ID:ya11hfko0.net
>>109
作った人だけどたしかに区切り多くて難しいカモ
うーんどうしよう……なんかいい方法ないかな

115 :名無しさん@お腹いっぱい。:2014/05/09(金) 17:20:32.76 ID:z0hMhqvm0.net
タスクトレイでNumlockとかの状態が見れるスクリプトってどうすればいいんだろう
わざわざキーボードのランプ見たくない

116 :名無しさん@お腹いっぱい。:2014/05/09(金) 19:00:23.13 ID:WMN9Yo2t0.net
>>115
Numlockの状態はGetKeyStateで取得できる
タイマー監視して状態変化時にトレイアイコン変更すれば一応目的は達成できる

117 :名無しさん@お腹いっぱい。:2014/05/09(金) 19:00:39.95 ID:szsV1knE0.net
>>115
タイマーでキー状態を取得してアイコン切り替えるだけ、簡単だから自力で作れ。

118 :名無しさん@お腹いっぱい。:2014/05/09(金) 19:14:07.03 ID:fLWGwM3W0.net
#NoEnv
って今のPCだとあんま体感できんよね
それでもプラシーボ効果で軽くなった気がして付け加えてしまう

119 :名無しさん@お腹いっぱい。:2014/05/09(金) 19:18:18.29 ID:z0hMhqvm0.net
NumLock::
If(GetKeyState("NumLock","T") == 0)
{
SetNumLockState, on
Menu,Tray,icon,icon0
}else{
SetNumLockState, off
Menu,Tray,icon,icon1
}
keywait,%A_ThisHotkey%
return

タイマーすら必要なかったありがとう

120 :名無しさん@お腹いっぱい。:2014/05/09(金) 21:37:44.33 ID:LG6g55C60.net
教えて下さい
質問文が長いので分割させていただきます

array1 := Object()
array2 := Object()

array1[1] := "hoge"
array2[1, 1] := ["あああ", "いいい", "ううう"]
array2[1, 2] := ["かかか", "ききき", "くくく"]

array1[2] := "hage"
array2[2, 1] := ["わわわ", "ををを", "んんん"]

(実際は更に続く)

上のよう設定としてにスクリプト内に直に書いてた物を
iniファイルから読み込むようにしようかと改造中なんですが
行き詰まってしまいました

次のレスへ

121 :名無しさん@お腹いっぱい。:2014/05/09(金) 21:39:34.82 ID:LG6g55C60.net
>>120からの続き

----- Config.ini -----
[hoge]
1=あああ, いいい, ううう
2=かかか, ききき, くくく

[hage]
1=わわわ, ををを, んんん
-----------------------

次のレスへ

122 :名無しさん@お腹いっぱい。:2014/05/09(金) 21:40:22.88 ID:LG6g55C60.net
>>121からの続き

array1 := Object()
array2 := Object()

IniRead, Section, %A_ScriptDir%\Config.ini
Loop, Parse, Section, `n
{
 n1 := A_Index
 array1[n1] := A_LoopField
 Loop,
 {
  n2 := A_Index
  IniRead, key, %A_ScriptDir%\Config.ini, % array1[n1], %n2%
  array2[n1, n2] := key
  if (key = "ERROR") {
   break
  }
  MsgBox, % n1 "-" n2 "`n" key "`n" array2[n1, n2] ;(1)
  Loop, Parse, key, `,
  {
   array2[n1, n2, A_Index] := A_LoopField ;(2)
  }
 }
}
MsgBox, % array2[1, 1, 1] ;(3)

(1)でarray2[n1, n2]には確実にデータが入ってるのですが
(2)でarray2[n1, n2, A_Index]にデータが入らないらしく
(3)で見ると空っぽなのです(「あああ」と表示して欲しい)
何処が間違ってますか?

123 :名無しさん@お腹いっぱい。:2014/05/09(金) 22:08:45.36 ID:LG6g55C60.net
>>122の一部修正します
Loop, Parse, key, `,
     ↓
Loop, Parse, key, `,, %A_Space%

124 :名無しさん@お腹いっぱい。:2014/05/09(金) 22:23:08.63 ID:rWPBh27L0.net
画像ファイルのサイズ(ピクセル)を取得するにはどうしたらいいですか?

125 :名無しさん@お腹いっぱい。:2014/05/09(金) 22:36:29.31 ID:EsjgkGB60.net
>>120-123
array2[n1, n2] := key
の時点で array2[n1, n2] が文字列になっているのが原因じゃないかな
その行を消したらきちんと代入されたよ

126 :名無しさん@お腹いっぱい。:2014/05/09(金) 23:36:21.61 ID:LG6g55C60.net
>>125
120-123です
期待通りの結果になりました
これで設定をiniファイルに移すことが出来ます
ありがとうございました

127 :名無しさん@お腹いっぱい。:2014/05/10(土) 00:10:07.21 ID:qsKirAso0.net
>>126
勝手にまとめ

obj1 := Object()
MsgBox, % obj1[1] := "あ" ;あ
MsgBox, % obj1[1, 1] := "い" ;失敗
MsgBox, % obj1[1, 1, 1] := "う" ;失敗

obj2 := Object()
MsgBox, % obj2[1, 1, 1] := "う" ;う
MsgBox, % obj2[1, 1] := "い" ;い
MsgBox, % obj2[1] := "あ" ;あ

128 :名無しさん@お腹いっぱい。:2014/05/10(土) 00:12:12.67 ID:qsKirAso0.net
続き
MsgBox, % obj2[1, 1, 1] ;失敗
MsgBox, % obj2[1, 1] ;失敗
MsgBox, % obj2[1] ;あ

129 :名無しさん@お腹いっぱい。:2014/05/10(土) 00:32:49.29 ID:qsKirAso0.net
>>124
画像の高さ/幅取得
裏でGUI作成、サイズ取得して破棄。

Gui, Add, Picture , vPID, パス/ファイル名
GuiControlGet, Var, Pos, PID
MsgBox % VarW "`n" VarH
Gui, Destroy
Return

130 :名無しさん@お腹いっぱい。:2014/05/10(土) 01:01:44.02 ID:RxoB4pdU0.net
>>129
ありがとうございます
こんな手があったとは思いもよりませんでした!

131 :名無しさん@お腹いっぱい。:2014/05/10(土) 01:17:11.26 ID:o1LpG6D90.net
>>130
http://www.autohotkey.com/board/topic/59258-get-imagesize-how-solved/
http://www.autohotkey.com/board/topic/55305-read-the-image-size-solved/#entry347466
http://www.autohotkey.com/board/topic/29449-gdi-standard-library-145-by-tic/
このあたり参考にするといいかもね
>>129の方法も紹介されてる
大量の画像のサイズ取得とかだと結構取得時間に差が出るから色々試してみるのもいい

132 :名無しさん@お腹いっぱい。:2014/05/10(土) 13:35:03.99 ID:oFUi44ng0.net
Gui, Add, DropDownList 
で、1-100くらいまでの数字を表示させたいんですが、
1つずつ打っていくしか手はないのでしょうか?
正規表現もここでは使えないぽくて…

133 :名無しさん@お腹いっぱい。:2014/05/10(土) 14:14:39.55 ID:ap1Tu+d00.net
Loopで回せばいいんちゃう?

134 :名無しさん@お腹いっぱい。:2014/05/11(日) 13:42:56.32 ID:h/TY4HtP0.net
>>118
#NoEnvはメモリ効率向上というより誤爆よけだと思うけど
関数やローカル変数がなかった頃は よくpath、tmpあたりのグルーバル変数をうっかり作って
おかしな結果になってたわ

135 :名無しさん@お腹いっぱい。:2014/05/11(日) 23:21:57.57 ID:JVnyrOhh0.net
キーボードショートカットで、
Windowsの普通のMDIアプリケーションの親ウィンドウをスクロールさせたいのですが可能でしょうか?
たいていのMDIアプリケーションって、マウスのスクロールホイールに反応しませんよね?

136 :名無しさん@お腹いっぱい。:2014/05/11(日) 23:56:51.19 ID:EhWXXYjv0.net
>>135
他の人でも試せるように具体的にどれのことを言ってるのか書いてほしい。

137 :名無しさん@お腹いっぱい。:2014/05/12(月) 00:32:15.79 ID:Ui9fdhIL0.net
>>136
こういうタイプのアプリです(これはテキストエディタ)
http://www.vector.co.jp/soft/dl/win95/writing/se234397.html

親ウィンドウがあり、新規ドキュメントで、親ウィンドウの中に子ウィンドウをつくります
子ウィンドウが親ウィンドウをはみでると、親ウィンドウにスクロールバーがでます

私がやりたいのは、この親ウィンドウのスクロールバーを
ショートカットキーや、特定のキー+マウスホイール上下左右に動かしたいんです

私が実際にやりたいのは市販の音楽ソフトなのでみなさま試せないので
シンプルな昔ながらのMDI型のテキストエディタを例として挙げさせていただきました
Windows7や8でも動きます。

138 :名無しさん@お腹いっぱい。:2014/05/12(月) 01:41:33.64 ID:IiDkPInT0.net
リダイレクトホイールの要領で行けると思う

MDIの背景領域のクラスを取得して
WM_MOUSEWHELL(0x20A, 0x20E)
WM_HSCROLL(0x114) /WM_VSCROLL(0x115)
あたりをSendMessageで投げる

139 :名無しさん@お腹いっぱい。:2014/05/12(月) 03:27:27.43 ID:JG1NZim90.net
>>137
親    Send、ControlSend ahk_parent有無
親、子 対象のClass調べて SendMessage

あとは動かすキー操作送るだけ。
もちろん動くか動かないかはアプリの仕様次第。

140 :名無しさん@お腹いっぱい。:2014/05/12(月) 09:49:16.22 ID:IhZH/lvP0.net
>>138 >>139
ありがとうございます!
でも>>137のアプリでも自分が試したいアプリでも、うごかないっす。。。orz

とりあえず>>137のアプリの親ウィンドウのスクロールバーをなんとか動かせないでしょうか?

試し方ですが、>>137のアプリで、ファイル>新規作成 をしてドキュメント(子ウィンドウ)を作って
親ウィンドウからはみだすように配置すると、親ウィンドウにスクロールバーが出ます。
2つ新規ドキュメントを作って下と右にはみだすように配置すれば親ウィンドウの右と下にスクロールバーがでます。
そのスクロールバーを動かしたいのです。
キー送信しても子ウィンドウのスクロールバーしか動かないのです。。。。

MDI親ウィンドウの外側のスクロールバーは、PgUpやPgDnやマウスのスクロールホイールなどでは動かないのですが、それでもAHKで動かすことはできるのでしょうか?
スクロールバーにマウスクリック送信とかの裏技的やりかたをしないと厳しいでしょうか?

141 :名無しさん@お腹いっぱい。:2014/05/12(月) 12:46:47.72 ID:IiDkPInT0.net
MdiCliantの場合はスクロールクラスをしてやるほうがいいっぽい
とりあえずこの辺を参考にしてみて

WheelScroll U32/64対応版
http://www1.axfc.net/uploader/so/3197627

142 :名無しさん@お腹いっぱい。:2014/05/12(月) 18:02:04.45 ID:JG1NZim90.net
>>140
スクロールバーを特定できないなら
座標か画像認証で▲まで瞬間移動してクリック送信

スマートじゃないから最終手段だが・・・。

143 :名無しさん@お腹いっぱい。:2014/05/12(月) 20:39:20.50 ID:3Gga6I5m0.net
>141
WheelScrollの最新版ていつもどのあたりで入手できるんでしょうか?

144 :名無しさん@お腹いっぱい。:2014/05/12(月) 22:06:39.75 ID:RCC9MozX0.net
>>143
WheelScroll.ahk の改造版である「WheelAccel」なら
http://code.google.com/p/mousegesturel/
http://code.google.com/p/mousegesturel/downloads/detail?name=Examples52.zip
これ↑の中に入ってる。

ここのWheelAccelのアップデート版が存在するのかは知らない。
例え存在しなくても自分でスクリプト手直し出来るんだから問題ないでしょ?(やる気が有るか無いかは別)

145 :名無しさん@お腹いっぱい。:2014/05/12(月) 23:37:05.89 ID:IiDkPInT0.net
>>143
スレ内でホイールやスクロール系の質問が来た時に保存期間の長いあぷろだに適当に上げてます
前は IME.ahkとかと一緒の @wikiのftpサーバーに置いてたんだけど
ハッキング騒ぎでウィルス怖い書き込みがあったので

>114にある通りMouseGestureLにはGesture組込み用のWheelAccel改が同梱されてるっぽく今はそっちが主流な感じかな
一応 WheelScrollにもWheelAccelの機能は盛込み済だけどMouseGestureLとの連携は考慮してないもんで

146 :名無しさん@お腹いっぱい。:2014/05/13(火) 20:37:09.69 ID:MuYqfOSW0.net
寝落ち用に作っているのだけれど
A_TimeIdlePhysicalでタイマーセットして
Run, %ComSpec% /c powercfg -x -monitor-timeout-ac 1
これで電源オプションのディスプレイの電源を切るまでの時間を1分に変更して
スクリプトが終了するときに元の間隔に戻すという感じにしてて
不意に電源がオンになっても1分で切れるようにまではできたけど
これをなんとか1分未満、秒単位に出来る方法はないかな

147 :名無しさん@お腹いっぱい。:2014/05/13(火) 21:01:21.66 ID:/QEGGUrc0.net
>144 >145
ありがとう、参考になりました!

148 :名無しさん@お腹いっぱい。:2014/05/13(火) 21:39:17.17 ID:rG8Z6GDo0.net
>>146
SendMessage, 0x112, 0xF170, 2,, Program Manager ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER.

149 :名無しさん@お腹いっぱい。:2014/05/13(火) 21:41:38.80 ID:MuYqfOSW0.net
ちゃうねん
電源の状態を確認してオンだったらオフる動作をしたいねん

150 :名無しさん@お腹いっぱい。:2014/05/14(水) 01:59:44.61 ID:RkcpF9pr0.net
画面の縦が狭いノートをずっと使っているんだが、
画面の一番下をクリックするとタスクバーが消える/表示をトグルする単純なスクリプト作ったがとても便利
もっとはやくつくればよかったw

151 :名無しさん@お腹いっぱい。:2014/05/14(水) 02:12:27.70 ID:fk1aU+Mo0.net
タスクバーを自動で隠すのとどう違うの?

152 :名無しさん@お腹いっぱい。:2014/05/14(水) 02:18:11.49 ID:RPGHyF0D0.net
自動で隠すと、出てほしくない時に出てきたりするからすごい邪魔なときある

153 :名無しさん@お腹いっぱい。:2014/05/14(水) 02:25:08.19 ID:62OzpCou0.net
そもそもタスクバーがなくなったら困らないかという気もしなくもない俺のタスクトレイはインジケーターまみれ

154 :名無しさん@お腹いっぱい。:2014/05/14(水) 03:54:57.10 ID:/HIG7Vl00.net
さいしょAHKで試行錯誤してたけど
俺は「タスクバーをほかのウィンドウの手前に表示する」のチェックを外すだけで解決した

155 :名無しさん@お腹いっぱい。:2014/05/14(水) 08:08:37.26 ID:DM5mvBPn0.net
うちは横置き&小さいタスクバーボタン
アイコンだけじゃなくウィンドウタイトルも表示されるので分かりやすい

156 :名無しさん@お腹いっぱい。:2014/05/14(水) 13:40:45.04 ID:ryadNrAh0.net
どうしてもやり方が分からないので知りたいのですが。
bmpでボタン作りたいのですがやり方どうすれば良いのでしょう?

別窓では無くイメージとしては アプリ開いている状態で画面の一部にbmpを上乗せして(濃度%いじれると良い)
クリックするとsend遅れたりするけどフォーカスは下のアプリの方(使っているアプリ)のままって感じですね。
bmp表示する方法は分かってもボタン化が分からないんですよね・・・

157 :名無しさん@お腹いっぱい。:2014/05/14(水) 14:59:05.43 ID:txyddDiZ0.net
マウスオーバーでgui時に判別が基本だろうけど

ていうかそういうのってもうビジュアルベーシックとかCのほうが早くねぇか?

158 :名無しさん@お腹いっぱい。:2014/05/14(水) 15:46:22.32 ID:/fXX0Y8P0.net
AHKでファンクションキーが使えるのか
で、私は使えたのですが、ここにこんな記述がありますねえ
これって誰が書いているのでしょうか。ちょっとびっくりです
ちなみに、ファンクションキーは普通に
F10::
Send, {F10}
return
などで出来ますよねえ。何か別の意味があるのでしょうか

http://autohotkey.blog.fc2.com/blog-entry-86.html

159 :名無しさん@お腹いっぱい。:2014/05/14(水) 15:48:30.51 ID:ryadNrAh0.net
どちらも疎いので・・・何とか分かる範囲でコレで行けるならこれでやれればなと言うのも有りまして。

160 :名無しさん@お腹いっぱい。:2014/05/14(水) 15:52:29.82 ID:RPGHyF0D0.net
>>158
重大な勘違いしてる

161 :名無しさん@お腹いっぱい。:2014/05/14(水) 15:56:27.54 ID:NeDEmuCb0.net
>>158
ノートパソコンて知ってる?

162 :名無しさん@お腹いっぱい。:2014/05/14(水) 16:08:24.99 ID:/fXX0Y8P0.net
ああ、ひょっとして、F1からF12のことではなくて、キーボードの左手前にあるFnキーのことですか
なんかありましたねえ
Fn(ファンクション)キーってわざわざファンクションとかって書いてあるし、なんかややこしい
もう少しちゃんと書いてほしいです
でもよくわかりませんが

1.人がキーを押す
2.キーボードが押されたキーの情報をパソコンに送信する
3.パソコン(Windows)が受け取る
4.Windowsが対象ウィンドウにキー情報を送る
5.AutoHotkeyが暗躍する
6.ウィンドウがキー情報を受け取って反応する

本来この順でキーを押したことがウィンドウに通知されますが、
2でキーボードが「Fnキー+○キーは×キーにする」という処理を行います。
Windowsが受け取るのは×キーのキー情報だけでFnキーや○キーのキー情報はWindowsには届きません


と書いてあります。では、この処理後の×キーのキー情報で動作を行うことって出来ないのかな
まあ、Fnキーは使うことはないと思うので余計なお世話かもしれませんが

163 :名無しさん@お腹いっぱい。:2014/05/14(水) 17:09:57.46 ID:t46m9pW+0.net
gui,add,pictureの縮小拡大でアルゴリズムの指定はできないの?
サイズ変えると糞きったなくなるんだけど

164 :名無しさん@お腹いっぱい。:2014/05/14(水) 17:54:19.83 ID:HUSPdTgC0.net
>>159
ラベル指定すると画像クリックしたときの動作を指定できるけど
それじゃ駄目なのけ

>>162
できると思うよ

165 :名無しさん@お腹いっぱい。:2014/05/14(水) 20:28:20.50 ID:fDgDPOOw0.net
トリガーキーのトグル動作でキーリマップを切り換えるスクリプト作成中なんですが、
リマップAからリマップBにした時、何らかの視覚情報で知らせられたらと思っています。

一応、リマップBにした時にタスクトレイにアイコンを表示するだけのスクリプトを走らせ、
リマップAに戻した時そのスクリプトを終了する、というのは出来たのですが、
それよりもCaretの色または太さを変える方がより視認性が高いのではないかと思い始めました。

そこで質問です。
Caretの色または太さはどうすれば変更できるんでしょうか?
また、この他にアイデア有りましたら教えていただけないでしょうか。

166 :名無しさん@お腹いっぱい。:2014/05/14(水) 21:17:19.20 ID:Tl56DF4L0.net
tooltipで表示するのがいいんでない?
俺は何かを切り替える系での告知はtooltipでやってる

167 :名無しさん@お腹いっぱい。:2014/05/14(水) 21:42:41.64 ID:DM5mvBPn0.net
>>165
なまずIME あたりが参考になるかも
中見てないけどAHKにはキャレットをカスタマイズする機能は(たぶん)ないので
GUIでキャレット位置に貼り付けてるんじゃないかな

168 :名無しさん@お腹いっぱい。:2014/05/14(水) 22:12:33.98 ID:fDgDPOOw0.net
>>166-167
回答ありがとうがざいました。

>キャレットをカスタマイズする機能は(たぶん)ないので
そうですか、わかりました。

なまずIMEのスクリプト流し読みですが、ちょっと見かなり複雑な処理してる見たいですね。

お二人の意見を参考にスクリプト書いてみます。

169 :名無しさん@お腹いっぱい。:2014/05/14(水) 22:48:46.91 ID:DM5mvBPn0.net
>>156
よくわらんがGui,Add,Buttonの上に Gui,Add,Picureでbmp貼って
GuiControlでbmpをDisableにしとけばいいんちゃう?
透明指定は WinSet,Trans とか WinSet,TransColor あたり

ボタンの形のbmp使うからButtonオブジェクトいらんってことなら
OnMessage() でWM_LBUTTONDOWNイベント発生させる

170 :名無しさん@お腹いっぱい。:2014/05/14(水) 23:11:01.08 ID:2sIhPzGT0.net
#ClipboardTimeoutの値を一つの処理(スレッド?)でのみ変更する方法ってありますか?

171 :168:2014/05/14(水) 23:44:02.72 ID:fDgDPOOw0.net
以下のようにしてCaretの位置へToolTip表示させれるようになったのですが、
秀丸エディタではCaretの位置へToolTip表示させることが出来ませんでした。(ウインドウ枠の所に表示される)
秀丸エディタでは無理なんですかね?
それから、ToolTipを半透明で表示させることって出来ますか?

;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 1000
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
Indicator_ToolTip:
CoordMode, ToolTip, Relative
CoordMode, Caret, Relative
ToolTip, ., A_CaretX - 10, A_CaretY - 16
CoordMode, ToolTip, Screen
CoordMode, Caret, Screen
return

172 :名無しさん@お腹いっぱい。:2014/05/15(木) 00:56:11.64 ID:gvWGefzm0.net
>>164,169

ん!
何となく分かった気がしますありがとう御座います。
頑張ってみます

173 :名無しさん@お腹いっぱい。:2014/05/15(木) 02:48:10.08 ID:smf5mgep0.net
>>162
> 処理後の×キーのキー情報で動作を行う
はできるけど、もとの×キーの動作も変えてしまう
Fn単独の動作を変更できたら便利だけど、AHKではできないって意味だな
FnキーのFnがfunctionだから(ファンクション)と書かれてるのも間違ってないな
ということで君がおばかさんだったってことだ

174 :168:2014/05/15(木) 04:19:57.92 ID:2vMbrIyM0.net
以下のように改良して秀丸エディタでも確認できるようになりました。

;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 500
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
;ウインドウ枠左端に縦長のToolTipを表示(ウインドウに追従し、ウインドウサイズによりToolTip縦サイズを調整する)
Indicator_ToolTip:
WinGetPos, X, Y, Width, Height, A
c := Round(Height/22)
Loop, %c% {
str .= "`n"
}
ToolTip, % str, X, Y + Round(Height/5)
str := ""
return

175 :名無しさん@お腹いっぱい。:2014/05/15(木) 04:22:58.12 ID:2vMbrIyM0.net
>>174
名前覧の168は>>171が正しいです。

176 :名無しさん@お腹いっぱい。:2014/05/15(木) 21:34:12.75 ID:x+Bh3TdJ0.net
昔はTooltipとかキャレットとかやったけど今はSoundBeep使って音階で識別してる

というのもトグル状態の確認が必要で情報表示するけど、
うざくて消したくなるから一定時間で消すような仕込みをした
でも一定時間操作してないと状態がどうなってるかよく分からなくて
再度キー押したりして本末転倒になった

今はやりたい操作は指連打と音で判断するようにしてる

*vk1Dsc07B::KeyCounter()

KeyCounter() {
 global $KeyMap
 static keyCount
 ListLines, Off
 $KeyMap:=keyCount:=(A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) ? keyCount+1 : 1
 SoundBeep, $KeyMap * 400, 10
 KeyWait, % RegExReplace(A_ThisHotkey, "^\W+", "")
 $KeyMap:=0
}

#if ($KeyMap = 1) ;
 h::Left
 j::Down
 k::Up
 l::Right
#If ($KeyMap = 2)
 ; Home, End, PgUp, PgDn とか
#If ($KeyMap = 3)
 ; WinMoveとか

177 :名無しさん@お腹いっぱい。:2014/05/17(土) 20:17:48.37 ID:CGpqRpBF0.net
このように書けば問題ないのですが、表示名が「TestToggle&Check」じゃなく、「TestToggle Check」と「半角空白」を使いたいのです
Menu, tray, add, TestToggle&Check
TestToggle&Check:
Menu, tray, ToggleCheck, TestToggle&Check
Return

でも、ラベルに半角空白含む名前は使えないらしくエラーになります
Menu, tray, add, TestToggle Check
TestToggle Check: ;<<<<<ここでエラーになる
Menu, tray, ToggleCheck, TestToggle Check
Return

何とかメニュー名に「半角空白」使えませんかね?
「全角空白」では間延びしたような見栄えでちょっとよくないです
無理なら諦めます

178 :名無しさん@お腹いっぱい。:2014/05/17(土) 21:22:07.01 ID:aSpGMjn80.net
A_Space

179 :名無しさん@お腹いっぱい。:2014/05/17(土) 23:08:57.41 ID:CGpqRpBF0.net
>>178
レスありがとうございます
すいません、どうしても分かりません。
間違ってる所を指摘して下さい

Menu, tray, add, TestToggle%A_Space%Check ;<<<<<ここでエラーになる
TestToggle%A_Space%Check:
Menu, tray, ToggleCheck, TestToggle%A_Space%Check
Return

180 :名無しさん@お腹いっぱい。:2014/05/17(土) 23:18:18.07 ID:JvJaXAuL0.net
http://ahkwiki.net/Menu

ちゃんとラベル指定しろ

181 :名無しさん@お腹いっぱい。:2014/05/17(土) 23:47:50.76 ID:CGpqRpBF0.net
>>108
ありがとうございます
解決しました

一応そのwikiのサンプルコード使って格闘してたんですが
そのコードに肝心の「Menu, tray, add, MenuItemName, Label」の例が無く
メニュー名=ラベル名になるものと思い込んでいました

182 :名無しさん@お腹いっぱい。:2014/05/18(日) 14:13:52.93 ID:azfgwDu90.net
MGLスレかどっちか迷ったんだけど、こっちで質問。

キーのリマップスクリプト(ホットキー)を一時的に無効化するのに「Suspend」使うと思うけど、
リマップスクリプトをMGLのプラグインとして使ってると、他プラグインと共にMGLがSuspendしてしまう。

他プラグインとMGLに影響出ないようホットキーのみ一時的に無効化させる方法何か有る?
あ、MGLは再起動させたくないです。

183 :名無しさん@お腹いっぱい。:2014/05/18(日) 14:28:08.85 ID:SkEzxV/c0.net
何らかのキー::
if(flag_hotkey <> 1)
 flag_hotkey = 1
else
 flag_hotkey =
return

#if (flag_hotkey)


ホットキー、
キーリマップ


#if

184 :名無しさん@お腹いっぱい。:2014/05/18(日) 16:02:07.69 ID:azfgwDu90.net
レスサンクス。
でも、パターン(1)の場合、「#If (flag_hotkey)」は無視されてうまく行かない。
で、パターン(2)のようにすれば問題なく動く。
しかし、「#If (flag_c) && (flag_hotkey)」みたいに一つ一つ書いていくのはつらい。
何か簡単な方法ないものか。

flag_hotkey := 0
flag_a := 1, flag_b := 1, flag_c := 1, flag_d := 1
return

;パターン(1)
#If (flag_hotkey)
#If (flag_a)
a::MsgBox, a
#If (flag_b)
b::MsgBox, b
#If

;パターン(2)
#If (flag_c) && (flag_hotkey)
c::MsgBox, c
#If (flag_d) && (flag_hotkey)
d::MsgBox, d
#If

185 :名無しさん@お腹いっぱい。:2014/05/18(日) 16:36:22.04 ID:SkEzxV/c0.net
わかりにくかったかな。例えば以下のようにすると、
ctrl+spaceを押すと#ifで囲まれているホットキーがonになってもう1回押すとoff(サスペンド)
ONOFFスイッチのキーは好きな奴に変えて

^Space::
if(flag_hotkey <> 1)
 flag_hotkey = 1
 ToolTip, HotKeyON, 1710, 0
else
 flag_hotkey =
 ToolTip
return

#if (flag_hotkey)

a::Msgbox, a
b::Msgbox, b
c::Msgbox, c

#if

186 :名無しさん@お腹いっぱい。:2014/05/18(日) 16:44:52.71 ID:SkEzxV/c0.net
ifのところで{}忘れてたわ

187 :名無しさん@お腹いっぱい。:2014/05/18(日) 18:01:12.11 ID:azfgwDu90.net
>>185-186
レスサンクス。
何度も申し訳ない。こっちも質問の仕方が悪かったかもしれない。

とりあえず、flag_hotkeyのフラグ切り替えの方法は理解しました。

問題は>>185の例みたいに、元々のホットキーに条件が付いてない場合はうまくいくが、
#if (flag_hotkey) ;リマップが有効か無効か
a::Msgbox, a
  ・
  ・
>>184のパターン(1)ように元々のホットキーに条件が付いてる場合うまくいかない。
#if (flag_hotkey) ;リマップが有効か無効か
#If (flag_a) ;←元々付いてる条件
a::MsgBox, a
  ・
  ・
>>184のパターン(2)のようにすれば、条件に忠実に動くようになる。
#If (flag_a) && (flag_hotkey)
  ・
  ・
でも、一つ一つ「 && (flag_hotkey)」を付け足していくのはつらい。
一つ一つに「 && (flag_hotkey)」を付け足していくのではなく、何か他に簡単な方法はないか…というのが>>184の質問でした。

#If (flag_a) && (flag_hotkey)←こういう方法しか無いですかね?

188 :名無しさん@お腹いっぱい。:2014/05/18(日) 18:20:09.13 ID:Pm+XAqGi0.net
俺もMGLかこっちか迷ったんだけどこっちで質問

;選択範囲をコピー
Lclickcopy(){
MouseGetPos, x0,y0 ;クリックした時の座標取得
keywait,Lbutton ;離すのを待つ
MouseGetPos, x1,y1 ;クリックを離した時の座標軸
if (x1-x0 > 5 or x1-x0 < -5 or y1-y0 > 5 or y1-y0 < -5){
   clipnow := ClipBoardAll ; save old clipboard
   send,^{c}
   ClipWait 1, 1
   IfEqual ClipBoard,, SetEnv ClipBoard, %clipnow%
return
}
}

こんな関数を作ったんだけどMGLのLbuttonに設定したらエラー吐く。
かといって
~Lbutton::Lclickcopy()

としたらロッカージェスチャのRB_LB__が動いてくれない
八方ふさがりなんだけどどうしよう(´・ω・`)

189 :名無しさん@お腹いっぱい。:2014/05/18(日) 18:25:07.06 ID:azfgwDu90.net
>>187追加
いわゆる「入れ子?」が#ifでは出来ないって言うことなんかな?
なら、#If (flag_a) && (flag_hotkey)←こういう方法しか無いみたいね。
元々の考えを改めて別の方法捜してみるわ。

>>185-186
お騒がせしました、あありがとう。

190 :名無しさん@お腹いっぱい。:2014/05/18(日) 20:07:10.13 ID:TWeApKh00.net
>>188
スレチ、専用スレにエラー内容とサンプルコードを書こう

【AHK】MouseGestureL.ahkを語るスレ【ジェスチャ】
http://anago.2ch.net/test/read.cgi/software/1384313234/

191 :名無しさん@お腹いっぱい。:2014/05/18(日) 20:40:52.59 ID:PE4IKbR20.net
せっかく専スレあるんだからあっち使ってあげなよ

192 :名無しさん@お腹いっぱい。:2014/05/18(日) 21:05:27.57 ID:SkEzxV/c0.net
>>189
あーそういうことか。
だったら&&で繋げるくらいしかないかな。

代替案としてはサスペンドしたいホットキーだけで別にahkスクリプト作って独立させて
その作ったスクリプトを起動、終了するホットキーを今まで使ってた本体ahkに登録すればいいかもしれない
ホットキーを有効にしたいなら別ahkを起動、サスペンドしたいなら別ahk終了、みたいな感じで

193 :名無しさん@お腹いっぱい。:2014/05/19(月) 22:24:30.27 ID:V/Tl4jcX0.net
hoge = 1*2/3
このように変数の中に式が文字列で格納されてるのを計算するにはどうやるの?
このあと
:= hoge + 1
などと計算しようとしてもエラーになる

194 :名無しさん@お腹いっぱい。:2014/05/19(月) 22:44:36.11 ID:zMJa+VtB0.net
式のように見えて単なる文字列なんで、
「文字列を数式として評価(計算)する」機能はAHKにはない
(なので、文字に数字を足しても計算できないので空白になる)

とはいえ、どうにかする方法は一時ファイルに書き出して実行して結果を得るとか
色々あるけど、面倒なのでその手のが得意なやつにやらせてしまうのが楽


; example
exp = 1*2/3

oScr := ComObjCreate("ScriptControl")
oScr.Language := "JScript"
MsgBox, % exp " = " oScr.Eval(exp)

※ x64だと ScriptControl が無いので、32ビット版(U32かA32)で動かすか、
互換ライブラリ(↓)を使う
http://www.eonet.ne.jp/~gakana/tablacus/scriptcontrol.html?0020

195 :名無しさん@お腹いっぱい。:2014/05/19(月) 22:59:11.75 ID:V/Tl4jcX0.net
>>194
なるほど
単純にはできないんだね
参考になりました、ありがとう

196 :名無しさん@お腹いっぱい。:2014/05/19(月) 23:40:26.01 ID:f7U+9ja50.net
>>195
hoge = 1*2/3 でなくて hoge := 1*2/3 したら計算できたけど、
こういうことじゃないってんなら無視して構わないよ。

hoge := 1*2/3
hige := hoge + 1
MsgBox, % hige

197 :名無しさん@お腹いっぱい。:2014/05/19(月) 23:56:53.27 ID:V/Tl4jcX0.net
入力した計算式を取得してそれを元に処理したかったんだ
言葉足らずでごめん

198 :名無しさん@お腹いっぱい。:2014/05/20(火) 15:48:49.63 ID:NvK9Yjv50.net
AutoHotkeyで作ったGUIの座標っておかしくない?
たとえばx0 y0 に表示させるとすると縁が画面外にめり込んでズレる
たぶん5pxくらい

199 :名無しさん@お腹いっぱい。:2014/05/20(火) 16:15:59.92 ID:bG70dH5O0.net
MGLってLボタンは使えないんですか?
MGLのスレがないのでこっちで聞きます

200 :名無しさん@お腹いっぱい。:2014/05/20(火) 16:19:36.72 ID:z1IwXtgy0.net
>>198
自動で入るマージン計算に入れてる?

>>199
>>190

総レス数 1010
370 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200