XREA.COM Logo XREA.COM Ad

スクリプト質問スレッド

1管理人 ★:04/09/21 20:01 ID:???
質問が多いので独立させます

状況や実現したいことは出来るだけ具体的に書いてください。

スクリプトがうまく動かないなどの問題の場合、問題のあるスクリプトの内容や
エラーメッセージの内容を併記してください。
2unnamed.ahk:04/09/21 22:38 ID:tI023S++
こんにちは。
もしご存じでしたらぜひ教えてください。
Inputコマンドにおいて、2つ目以降に押したキーに
修飾キーをつけることは可能なのでしょうか?

というのは、貴サイトで紹介されている
^c::
Input,InputChar,C I L1 T2,{Esc},x,s
if ErrorLevel=Match
{
if InputChar=x
Send,!{F4}
のような書き方だと、Ctrl+Cを行った後で
Ctrlを離してからXを押さないとコマンドとして認識されませんよね。
これをCtrlを離さずにXを押しても認識されるようにしたいのです。
実現させるためには2番目以降のキーとして^xのような指定ができれば
いいかと思ったのですが……。
3unnamed.ahk:04/09/22 00:40 ID:???
Inputでは修飾キー付きの操作は取得できないようです
なぜか最初の一回だけCtrl押しっぱなしでも動作するようですね……
4unnamed.ahk:04/09/22 01:51 ID:7pmeomzo
やはりそうですか。
私はメニューバーの操作をいつも修飾キー押しっぱなしで
やっているので、これができれば例えばAlt+F→Sを強引に
Alt+F→Aに置き換えるなどの使い方ができるかなと思ったのですが、
その使い方はあきらめてほかの操作にしてみます。
ご回答ありがとうございました!
5unnamed.ahk:04/09/26 18:34 ID:itM+1YLk
CapsLock押下でCtrlを送信させたいのですがCapsLockの押下解除が
認知できず煮詰まってます。(Win XP SP1 Home / FMV Loox T90D)

$sc03A:: ; FMV LOOX T90D スキャンコード(CapsLockラベルでは何故か効かないので)
send,{CtrlDown}
Loop ; ←ここから抜けて来られなくなる
{
st = U ; buf init
GetKeyState,st,sc03A,P
if ErrorLevel <> 0 ,Break ; Error break(効果無し)
if st <> D, Break
Sleep,10
}
send,{CtrlUp}
retuen

#InstallKeybdHookのみ記述の.ahkを作りKeyHistoryを調べましたが
押下中 F0 03A d の表記がリピートされ、押下解除でdは止まりますが
解除後もuのイベントは発生しないままでした。
上のコーディングだと押下解除後もGetKeyStateは D or d を返してきて、
どうにも解除情報が得られない状態です。
また、Loop{ ~ }を、KeyWait,sc03A に変えても同様な結果です。
(上のソースには入れ込んでいませんが、特定のアプリ(xyzzy)のみに
限定適用させたいのでレジ弄って CtrlとCapsを入換えとかは使えませんのです)

そもそもCapsLock::での表記が効かないのでマシン固有の問題かとも
思ってるのですが、何か少しでもヒントがありましたらお願いいたします。
6unnamed.ahk:04/09/26 18:56 ID:???
>>5
CapsLock<-->Ctrl入れ替えについてはいろいろ試してみましたが、どうにもうまくいかないようです。
Lock系キーだけで発生する問題のようです。

レジストリの変更が可能なら、CapsLockをあまり使わないキーに変えて、xyzzyならCtrl、
他のアプリならCapsLockを送信するようにすれば代用できるんじゃないでしょうか。
7unnamed.ahk:04/09/27 22:47 ID:???
>>6
レスありがとうございます。むー、やはりAutoHotkey自体の制限なんですか。
Lock系の3個であの後試してみたところ

       LOOX    職場のNT4マシン
CapsLock  ×         ×
ScrollLock ..○         ○
NumLock  .×         ○

という感じでした。NumはKeyhistoryでは uも来るのにLOOXでは
押下解除が取れないという…
結構環境で大きく左右されるソフトなのかも

尚、教えていただいた方法については、LOOXはサブノートゆえ
存在しないキー(RWin,RAlt)がありますので、その辺のキーと入換え
ちゃえば行けそうな感じですね。
キー入換えはOS再起動が必要なので今すぐは試せないのですが
後日試してみますです。

ありがとうございました。
8unnamed.ahk:04/09/28 00:30 ID:???
うちはScrollLockもだめだった
やっぱり環境依存?
9unnamed.ahk:04/09/28 11:24 ID:???
IfInStringを使って分岐させようとしているんですが
UTF-8の日本語を扱うことってできないんですかね?
Loop,READで読み込んでMsgboxに試しに表示させてみると化け化けだったので
これじゃダメかなーって思ってるんですが。

もし解決法とかあれば教えて貰えると助かります。
10unnamed.ahk:04/09/28 17:34 ID:???
>>9
分岐自体はできると思いますが、MsgBoxはSJIS専用なので化けます
11unnamed.ahk:04/09/28 22:53 ID:???
>10
なるほど、ありがとうございました。
125:04/10/04 02:37 ID:???
5でつ、遅レスですが>6で教えていただいた方法で試してみました。
KeyCtrlで CapsLock <- RWin割り付け、再起動
CapsLock押下で [Win]キー動作するのを確認後、以下入れ込み
↓でできたです。改めてアドバイスありがとうございました。

;;; xyzzyでは、CapsをCtrlがわりに
$RWIN::
IfWinActive,%A_Space%- xyzzy
{
Send,{CtrlDown}
Keywait,RWIN
Send,{CtrlUp}
}
return

;;; Shift+Capsで Capsトグル(xyzzy以外)
$+RWIN::
IfWinNotActive,%A_Space%- xyzzy
{
GetKeyState,st,CapsLock,T
If st = D
SetCapsLockState,OFF
else
SetCapsLockState,ON
}
return

Version 1.0.20 (9/30)で動作確認
Capsトグルは Send,{CapsLock}で行けるかと思ったけどだめみたい

>8
環境依存っていうかまだまだ発展途上なのかなぁ
職場のNTではRCTRLなどの右側のキーは、~付けると何故か押下解除を
待たず、何度もホットキー呼び出してループしてしまう(Ver 1.0.19)

うちのXPはVer 1.0.20入れてから挙動が変だ
#r::Reload で win+R長押しするとAutoHotkeyが大量に重複起動しまつ(つд`)
13unnamed.ahk:04/10/05 23:27 ID:5lWD+b0M
--- shortcut.ahk ---
If %0% = 0, exit
SplitPath, 1, FileName
FileCreateShortcut, %1%, C:\%FileName% へのショートカット.lnk
----------------------
↑のスクリプトにファイルをドラッグさせて、
そのファイルのショートカットを作成させようと思うんだけど
ファイル名が長いとファイルネームが省略される。これをなんとかしたいんだけど、
仕様(コマンドライン引数がロングファイルネーム形式に対応してない)っぽいんで無理かな?
14unnamed.ahk:04/10/06 00:28 ID:???
どんなファイル名か
15namazu:04/10/20 09:18 ID:6Uscnojs
はじめまして。
AutoHotkeyで、日本語IMEのON状態を検出することは可能でしょうか?
IfWinActiveみたいな方法で。
IMEの文節調節のキー(^l,^k)を、Left,Rightに乗っ取っているのですが、
IMEがONの時は、Left,Rightじゃなくて、そのまま(^l,^k)渡したいのです。
なにか、いい方法はありませんか?
16unnamed.ahk:04/10/20 12:55 ID:???
>>15
IMEの状態はImm系のAPIで取得できるはずですが、
AutoHotkeyではAPIは使えないので難しいと思います。
IMEの変換中かどうかの判定であれば、以下のようなスクリプトで無理やり実現できました。

F1::
WinGet,p1,PID,A
WinGet, ids,list,ahk_class imejpstcnv81
Loop, %ids%
{
StringTrimRight, this_id, ids%a_index%, 0
WinGet,p2,PID, ahk_id %this_id%
If p1=%p2%
{
ToolTip,true
return
}
}
ToolTip,false
return
17namazu:04/10/21 10:30 ID:Zz21bNVE
unnamed.ahkさん、お答えありがとうございました。
しかし、結論からいいますと、私の環境では、うまくいきません。

本スクリプトの要旨は、
1)漢字変換中は、"imejpstcnv81"というクラスを持つウインドウ(のハンドル)が
複数現れる。
2)そのウインドウのプロセスIDが、現在ActiveなウインドウのプロセスIDと同一
だったら、漢字変換中である。

ということだと思います。しかし、私の環境では、1)が、どうも検出できないよ
うです。つまり、
"WinGet, ids,list,ahk_class imejpstcnv81"
これの、idsが、IMEを立ち上げて漢字変換を行っても、常に0だということです。

"imejpstcnv81"というのは、IMEのバージョンによって異なるような値でしょう
か?私の環境での"imejpstcnv81"はなにかというのを確認する手段はありますで
しょうか?

申し訳ありません、教えていただければ助かります。
18unnamed.ahk:04/10/21 22:00 ID:???
管理人さんのマウスジェスチャスプリクトを拝見させてもらいましたが
#UseHook、#InstallMouseHookともに指定していない状態で、
各マウスホットキーラベル先頭に$も付けていませんが問題なく動いてますよね
マウスベントの場合、
WheelUp::Send,{WheelUp}
みたいな書き方しても再帰イベントは発生しないってことなんでしょうか?
もしそうであれば↓みたいな記述ができるのでコードがすっきりするんですけど

WheelUp::
WheelDown::
If 何か判定
{
   特別な処理
}
else Send,{%A_ThisHotkey%}
return


>>17
横レス失礼
「私の環境では上手くいきません」と書かれていますが、その環境を説明しないのでは
識者の方もアドバイスしずらいと思いますよ。
OSバージョン、使用IMEの種類(ATOKとかMS-IME2002等)
AutoHotkeyのバージョン、特定のアプリ上でのみ動作させたいのか
(もしならそのアプリ名)Win全てに共通するのか、等
関連しそうな事柄は書いたほうが良いと思います。

"imejpstcnv81"はIMEのクラスなんじゃないですかね、よくわかんないけど
19unnamed.ahk:04/10/21 23:10 ID:???
マウスホットキーは元から全部Hookだったような
20unnamed.ahk:04/10/21 23:34 ID:s3/QTe8M
>>17
DetectHiddenWindows, On 忘れてるだけ・・・ってことはないよね?
他人の(今回の場合は16氏)のスクリプトをそのままコピペで使うんじゃなくて、
自分の環境等に合わせて多少変えないとだめかも。
ちなみにウチのIMEのclassは、imejpstmain81になってる
21namazu:04/10/22 03:12 ID:mAAAbC2I
皆さんありがとうございました。解決しました!
(unnamed.ahkは、「名無しさん」だったんですね。失礼しました)

私の環境では、"imejpstcnv9"でした。全部のWindowのクラス名の中に、"ime"が入
ってるやつを列挙してみたら、見つかりました。これで教えて頂いたスクリプト
を実行してみると、無事、IMEのON/OFFが検出できました。
(遅ればせながら、私の環境は、Windows2000 SP4、Microsoft IME2003です)

ただし、IEの、HTMLファイルの中の入力フォームでは、検出できませんでした。
URLを入れるところでは検出できるので、HTMLファイルを表示している所は、別
プロセスなのかもしれません。

あと、
>>20
DetectHiddenWindows, On 忘れてるだけ・・・ってことはないよね?

すみません、忘れてました!ただ、これは、必要ないみたいです。これをやらな
いでも、"ahk_class imejpstcnv9"で、ウインドウハンドルがとれました。

皆さんのおかげで、とても快適な環境を手にすることができました。
本当にありがとうございました。あと、AutoHotkeyというすばらしいソフトを作
ってくれた作者さんにも、感謝感激です。
2220:04/10/22 14:04 ID:???
>>21
解決おめでとう。
けどウチだと、DetectHiddenWindows, On なしじゃIMEのCLASS取得できないや。
AutoHotkeyってそういうとこ、環境(?)に左右されやすいのかなぁ?
最近2000からXPに移ったんだけど、一部のスクリプトの挙動がおかしくなったし。

ウィンドウの情報を取得するスクリプトあぷろだにあげてみますた。
http://lukewarm.s41.xrea.com/AutoHotkey/up/file/002.zip
2318:04/10/22 16:57 ID:???
>>19
レスどうもです。自分で試した範囲ではOKぽかったんだけど環境依存とか
あるとアレなので質問してみました。$省略しても平気そうですね。
#InstallMouseHookはマウスホットキーがない場合でもフックするって意味なのかな。

>>22
試してみますた、うちのIME Classはどうも WXGIME らしい、分かりやすいこと(^^;
xyzzyはやはり取れなかった。Winspecterでも駄目だったのでまぁ諦めてるけど
24unnamed.ahk:04/12/04 16:38 ID:icBeYTdM
はじめまして!質問します。
無変換を押しながらaを押すと、Escを発動させる
などという処理は可能でしょうか?できればサンプル記述お願いします。
25unnamed.ahk:04/12/04 17:34 ID:???
OSくらい書け
2624:04/12/04 19:42 ID:icBeYTdM
WindowsXP Pro SP2です。
AutoHotKeyは 1.0.23 (現時点での最新)です。
loop文?みたいなのを使用して監視して処理するのかまたは
Ctrlキーみたいに簡単な記述でできるのでしょうか?
27unnamed.ahk:04/12/04 20:05 ID:???
vk1Dsc07B & a::Send,{Esc}
2824:04/12/04 20:41 ID:sGPTSJAs
>>27
できました。ありがとうございます。
29unnamed.ahk:04/12/04 22:58 ID:???
スレ趣向とは関係ないけど>24がどういうシチュエーションでそれを使うのかが気になる
…キーボードがバカになってESCキーが使えなくなったのかな?
3024:04/12/05 00:38 ID:???
最近KeyExtentionを導入したのですが、これだと半角/全角とTabキーを別のキーに設定できなくて。
(デフォルトでしか使ってないから知らないだけかもしれんが)。

ちなみに、普段は親指ひゅんQを使ってます。

親指ひゅんQも長く使ってきて不満が出てきたし、これを機会に1つに統一しようかと思って。
あとは昔Dvorak配列練習してたのを思い出したんで、英語はDvorak,日本語は親指シフト、その他よく押すキーは変換キー + 押しやすいキー
の最強環境を構築するつもりです。Alt + Shiftの言語切り替えは遅いしね。

XPになってからコントロールパネルの詳細テキストサービスoFFにしないとWebの入力フォームでは普通のかな入力になるんで困ってて。
でもoffにするとIMEバーをタスクバーに入れられなくなし、XPのVisualスタイルでもなぜかIMEバーだけクラシック。これはXP SP2 で修正されているかと思っていたが、直ってなかった。
そうするとnamazuさんの質問に参考にすることになりそう

ちなみに今は、iをcに割り当て、cをjに割り当てるとiを押したときにjが出力されるんで、
回避方法を考えているんですが、試行錯誤中です。どうすればいいですか?
31unnamed.ahk:04/12/05 00:41 ID:???
$つける
3224:04/12/05 01:11 ID:zgpq/qbk
$i::Send,c
$c::Send,j

で出来ました。ありがとうございます。
基本から躓きまくってるけど、やりがいあるね。
33unnamed.ahk:04/12/05 03:02 ID:???
!a::
Send,^c
Run,C:\Program Files\Sleipnir\Sleipnir.exe http://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=%Clipboard%&btnG=Google+%8C%9F%8D%F5&lr
Return

のようにしてALT+Aで文字列を選択したものをググルようにしたのですが、
1回目はうまく出来るのですが、2回目以降、いくらやっても1回目と同じ検索文字列で検索してします。
どうすれば、よいのでしょうか?
どなたかご教授ください。
34unnamed.ahk:04/12/05 04:02 ID:???
環境ぐらい書け
うちではならなかった
35unnamed.ahk:04/12/05 06:27 ID:???
Send,^c のあと ClipWait入れてみたらどうだろう
と、テストもしないで言ってみる。
36unnamed.ahk:04/12/05 13:28 ID:???
>>34
環境は
WinxpPRO
CPU pen4-3.2
メモリ-512
です。
>>35
変わりません・・・
「AutoScriptWriter.exe」で作ったものを
saveすればよろしいのですよね?
37unnamed.ahk:04/12/05 22:01 ID:???
ここでAutoScriptWriterについての話題は見たことないし、普通は自分でスクリプト書いてると思うが
!a::
Clipboard=
ClipWait,0.5
Send,^c
ClipWait,0.5
Msgbox,%Clipboard% ; ※クリップボード内容確認用
If ErrorLevel = 0
{
Run,C:\Program Files\Sleipnir\Sleipnir.exe http://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=%Clipboard%&btnG=Google+%8C%9F%8D%F5&lr
}
Return

でどう? もしクリップボードが書き換わってるのに検索文字列が変わらないのなら
起動パラメータを疑ってみる。起動していない状態からと起動中で動作が変わったりしない?
自分プニル使いじゃないのでよく知らんのだけど
38unnamed.ahk:05/01/10 22:17 ID:4NzjcJDI
先輩方に質問です
マウスの操作のみのブロックは出来ませんでしょうか?
手元のタッチパッドに触れて知らぬ間に段落がかわってたりするので
文章入力中のマウス移動をブロックしたいのです
BlockInputだとキーボードまでロックされてしまいます
39unnamed.ahk:05/01/11 21:42 ID:???
タッチパッドってノートパソコンなんかについてるやつだっけか?
↓みたいにやってみたんだけどどうよ?

Hotkey, LButton, off
Hotkey, RButton, off
Hotkey, MButton, off


~Ctrl::
If A_PriorHotkey <> ~Ctrl
Return
If A_TimeSincePriorHotkey > 500
Return

Input, InputKey, T0.5 V, {LCtrl}{RCtrl}
If ErrorLevel Not Contains Control
Return

If TouchPad <> off
{
Hotkey, LButton, on
Hotkey, RButton, on
Hotkey, MButton, on
TouchPad = off
}
Else
{
Hotkey, LButton, off
Hotkey, RButton, off
Hotkey, MButton, off
TouchPad =
}
Return

LButton::
RButton::
MButton::
Return

^Esc::ExitApp

Ctrlキーをトリプルクリックで、マウスのボタン有効/無効トグル

Ctrlトリプルクリックじゃなくしたい場合は、
~Ctrl:: から If TouchPad がある行の前まで削除して好きなキーで書き直せばok
If TouchPad の行の前に有効/無効が変化したってことを表すように
Msgboxかなんかで知らせるか、音鳴らしたりすれば使いやすいかも。

Hotkeyコマンドって初めに使うときは、ラベル指定でonになるのに、
offにした後だとラベル指定でonにならないのな。ちょっと使いにくい気がするんだが...。
4038:05/01/11 22:05 ID:???
お返事ありがとうございます。動作確認いたしました
うまいこと動いております
マウス移動も抑制できればなおいいのですが。。
今思いついたのですが、デバイスマネージャから
マウスドライバを無効にすればいいですね
今手作業でやってみましたがうまくいきましたので
なんとか自動で出来るスクリプトを作ってみます
根本的に出来るのかどうかがわかりませんが。。
41unnamed.ahk:05/01/15 17:54 ID:???
投稿スレの34です
36さん返答ありがとうございました
投稿スレの34です
%%のなかに%%を使う方法がやっとわかりました
10個あったサブルーチンも一個になり全体で500kバイトほど減らせました
組み込み変数にこんな便利なものがあったのは知りませんでした
42namazu:05/01/16 00:16 ID:???
AutoHotkey 1.0.25(XP SP2)で、
以下のようなスクリプトをAutoHotkey.iniに書いてF1を押しますと、

F1::
test =
test = %test% inu
test = %test% saru
MsgBox, %test%
return

当然ながら、表示は、"inu saru"なんだけど、もう一度F1を
おしてみると、なぜか"inu"になってしまいます。これって
AutoHotkeyのバグじゃないですかね?

下記のように書くと、何度やっても"inu saru"なので、

F2::
test =
test := test " inu"
test := test " saru"
MsgBox, %test%
return

1.0.25以降は、この新スタイルに移行しろ、ということでしょうか。
ちょっと困っちゃいますね。
43unnamed.ahk:05/01/16 06:28 ID:???
>>42
%test%とinuの間のスペースなくせば2回目以降もokなのと、
AutoTrim, off入れれば、スペース入れてても問題ないんで、バグっぽいね。
・・・ってことで、本家に報告ガンガレ!
でもこれって、AHKver1.0.25より前なら大丈夫だったのかな?
実は前からAutoTrimにはちょっと不安があったんだよなぁ・・・
44namazu:05/01/16 16:03 ID:???
>>43
AHKver1.0.24以前なら、問題ありませんでした。
そういうことで、本家のForumのBug Reportに報告しておきました。
スペースをなくすとOKという情報はありがとうございました。
とりあえず、それでしのいでおこうと思います。
45unnamed.ahk:05/01/16 23:26 ID:???
ダブルクリックとトリプルクリックで違う動作をさせるにはどうすればいいでしょうか?
トリプルクリック事態は出来るのですが、その前にダブルクリックが動作してしまいます
指定時間に何回キーが押されたかカウントできればいけそうなのですが。。
a::
Input , OutputVar, t0.5
if OutputVar=a
msgbox,2
if OutputVar=aa
msgbox,3
return
(常駐してキーボードが効かなくなるので注意して下さい)
通常キーならこんなんで出来るのに、マウスボタンやCTRLでは出来ないのです
46namazu:05/01/17 00:32 ID:???
>>44
作者のChrisさんがバグを解決してくれたようです。
>>43さんが指摘される通り、AutoTrim周りのバグだったようです。
バージョンは1.0.25のままですが、現在のDownloadのページは、日付が1/16になっており、
現在のAHK本体を落としてinstallすれば、>>42の問題はでません。
よかったよかった。AHKのバグ出しに貢献できて光栄であります。
47unnamed.ahk:05/01/17 18:02 ID:???
>>45
あんまり見栄えのする書き方じゃないけど、一応↓ので出来ると思う。

LButton::
If A_PriorHotkey <> LButton
{
LClick = 1
Return
}
If A_TimeSincePriorHotkey > 300
{
LClick = 1
Return
}
LClick ++
If LClick = 2
SetTimer, DoubleClickCheck, 10
Else If LClick = 3
{
SetTimer, DoubleClickCheck, off
MsgBox, 3 Click
LClick = 0
}
Return

DoubleClickCheck:
If A_TimeSinceThisHotkey < 300
Return
SetTimer, DoubleClickCheck, off
Msgbox, 2 Click
LClick = 0
Return

^ESC::ExitApp

とりあえず問題なく動いたけど、LClick >= 4を書いた方が安心かも。
ダブルクリックの判定は余裕だから、トリプルでも楽だと思ってたんだけど、
見づらいし、応用のききにくい書き方になってしまった。
だれかもっといい方法あったら教えてくれぃ。

>>46
本家書き込み乙。
それにしても、Chris氏は対応早いな。
48unnamed.ahk:05/01/18 23:54 ID:???
スクリプトの書き方で質問です。ifを良く使いますがelseがうまくつかえません

if a=1
{
msgbox,1だよ
}
else
msgbox,空だよ
return

と書くのが普通かと思いますが、ifが重なったりloopが入ったりするとelseのとこでよく失敗します

if a=1
{
msgbox,1だよ
return
}
msgbox,空だよ
return

私はこう書いてるのですが、これはイレギュラーなんでしょうか?
49unnamed.ahk:05/01/19 01:41 ID:???
>>48
この2例だと、どっちもエラーは起こらないし、特におかしいところはないと思う。
あえてつっこむなら、最初の例の方はカッコ { } なしでもokってのと、
『空だよ』じゃなくて、『1以外だよ』・・・まぁそんなことは分かってると思うがw
おそらくカッコの付け方の問題のような気がするんだけど、よく失敗するっていうのが
どういう失敗だか分からないんで、なんとも説明のしようがない。失敗例を説明してくれ。
50unnamed.ahk:05/01/19 08:02 ID:???
>>48
上下共同じ動作を期待しているのならNGだと思う
下の例、else書かなかったら Not時の条件とは見なされないでそ

a=1のときだけ{ }内を処理し、その下はaの中がどうだろうと必ず実行される
51unnamed.ahk:05/01/19 08:04 ID:???
スマン{ }内のreturn見落としてた orz
5248:05/01/19 18:40 ID:???
>>49
>>50
失敗例としましては、キーアサインを変更中、leftなんかはやたらifwinactiveが並びます。
こういうときはelseがどこにかかるかわけわからなくなってエラーとなります
無理にelse使う必要がなければ、なるたけ使わない方向で行こうと思います
返答ありがとうございました
53namazu:05/01/19 21:58 ID:???
遅いレスになりましたが、トリプルクリックの話です。
>>47
時間を見るのはタイマーだけでいいかな?と思い、以下のように
してみました。少しシンプルになったかと思いますが、どうでしょう?

LButton::
 LB_cnt += 1
 SetTimer, LB_TimeOut, 300

 if LB_cnt = 1 ; 最初(シングル)
 {
  ;シングルクリック
 }

 if LB_cnt = 4 ; 最後(クアッド)
 {
  MsgBox, クアッドクリック
 }

return

LB_TimeOut:
 SetTimer, LB_TimeOut, Off

 if LB_cnt = 2 ; 真ん中1(ダブル)
 {
  MsgBox, ダブルクリック
 }

 if LB_cnt = 3 ; 真ん中2(トリプル)
 {
  MsgBox, トリプルクリック
 }

 LB_cnt = 0
return

サンプルとして、4回で最後にしていますが、もちろん、
5回、6回...いくらでもできます。
54unnamed.ahk:05/01/20 20:01 ID:???
Transformわかりにくいのでビット演算子を使いたいのだが、いまいちようわからん…

var1 = 0x00000001
var2 := var1 | 0x00000010
if var2 = 0x00000011
    ans = true
else
    ans = false

if var2 == 0x00000011
    ans2 = true
else
    ans2 = false
msgbox, var1=%var1% var2=%var2% ans=%ans% ans2=%ans2%


var1=0x00000001 var2=0x00000011 ans=true ans2=true
期待した答えは↑だったんだけど

var1=0x00000001 var2=17 ans=true ans2=false
↑が帰ってくる。 比較の = と == って同じじゃないのかな
5554:05/01/20 21:43 ID:???
質問スレで質問する口調じゃないですねすみません
つかぶっちゃけ誤爆した。2ちゃんに書込むつもりだったのに… orz
ちなみにバージョンは 1.0.25.05
56unnamed.ahk:05/01/20 22:26 ID:???
>>54
式の比較は比較式を()で囲みやがれ
それじゃ「var2」変数と「= 0x00000011」の比較になるだろうが
57unnamed.ahk:05/01/20 22:53 ID:???
>>56
すんません完全に失念してました。

if (var2 == 0x00000011)
    ans2 = true

で true返ってきました。ありがとうございます。
58unnamed.ahk:05/01/21 22:58 ID:???
>>53
自分が書いた>>47よりシンプル&分かりやすくなってていいね。
マルチプル(2回以上の)クリック時に、シングルクリックを発生させたくない場合でも、
シングルの判定と処理をSettimerの方に移すだけでいいんで、応用もききやすそう。
その場合は、最も頻繁に使うであろうシングルクリックもタイムアウトを待つことになっちゃうけど、
LButton・RButtonのメインボタン以外で使うことにすればいいし、
タイムアウト時間を変更したりすればそんなに気にならないと思うし。

>>54
Var2の値は16進で返ってこないのね。SetFormat使えばいいだけなんだけど、
桁数合わせるのが面倒なんで、SetFormat, Floatみたいに
桁数揃える命令も追加されたら便利かも。あと、

Var := 0.2 + 0.3
Msgbox, %Var%

を実行させると、0.500000って出るんだけど、両方とも小数点以下の桁数同じなんだし、
こういう場合に自動で桁数揃えてくれるような設定が出来ればいいと思うんだが。
16進数も小数の計算もあんまり使わないんでよく分からないんだけど、
そっちの方が便利ってことなのかね?まぁ、使ってないだけに特別困ってるわけじゃないんだけど。
59unnamed.ahk:05/01/23 18:02 ID:???
スキャンコード無しで仮想キーのみ発生させる10keyパッドで、
スキャンコードも含めてキーストロークを発生させるために使っています。

vk61sc04F::Send,{Numpad1}

これが、できません。
同じキーへのSendができないのはどうにもならないものでしょうか。

現状このように代用してしのいでいます。
vk61sc04F::Send,{NumpadEnd}
60unnamed.ahk:05/01/23 21:01 ID:???
だから環境を書けっつーに
どうできないのか知らんが、ループに陥るってなら

$vk61sc04F::Send,{Numpad1}
でやってみたら?
61unnamed.ahk:05/01/23 21:36 ID:???
なるほど、ループになるから禁止されてるみたいですね。
おかげさまで無事設定できました。ありがとう。
62unnamed.ahk:05/01/27 11:27 ID:ylUkJylc
if ( hoge )
{
 〜
}
else if ( hage )
{
 〜
}
else
{
 〜
}
って他の言語と等価?なんか怪しい。書き方が悪いのかもしれないけど。

RegExp, OutputVar, InputVar, pattern [, option] が欲しい…
63unnamed.ahk:05/01/27 19:43 ID:???
他の言語云々いうほど色々言語使えるわけじゃないけど、AutoHotkeyの場合、
If ( hoge ) は、hogeが数値として0(0.00や0x00などを含む)の場合と、
null(空)の場合以外はtrueだったと思うんで、
If ( hoge<>0 && hoge<>"" )と同じ意味になるかと。

RegExは確かに欲しいね。ワイルドカード云々って話が本家フォーラムで出てるんで、
しょぼいRegExpコマンドにならないかそれが心配。
64unnamed.ahk:05/01/29 22:57 ID:???
メニューを使ったスクリプトを作ってるんですが、メニュー表示中にはホットキーを拾ってくれないので困ってます
メニュー表示中に割り込む方法を教えてください
Thread, Priorityコマンドあたりを試してみましたがやはりうまくいきません
下の場合、leftでTEST1表示。rightでTEST2表示という風にメニューのページを切り替えたいのですがTEST2が出てきません
ESCを手動で押してやるとTEST2、TEST1を切り替えできます
何か解決法がありましたらよろしくお願いします

Menu, MenuName1, add, TEST1,test
Menu, MenuName2, add, TEST2,test
return

left::
send,{esc}
Menu, MenuName1,show
return

right::
send,{esc}
Menu, MenuName2,show
return

test:
return
65unnamed.ahk:05/01/30 03:26 ID:???
メニュー表示中は制御が完全にAutohotkey側に取られてしまって
項目選択かキャンセルするまで戻ってこないみたい。

将来的にはこの辺も弄れるようになると嬉しいんだけどな
Shorter LauncherみたいにShift,Ctrl押下中は別動作ってのをやりたいし
アイコンとかも表示したかったり…GUI使えって話になりそうだけど
6664:05/01/30 22:00 ID:???
>>65
お返事ありがとうございます。現状では無理っぽいのかな。
別スクリプトでキー操作だけ担当させればなんとか動いたけどもあまりにスマートじゃないんで、GUIで作り直してしまいました
メニューのほうが見た目がスッキリしてて好きなんだけどなぁ
67unnamed.ahk:05/01/30 23:38 ID:+266I1kg
>>65
キーフック入れて、 GetKeyState でキー押下状態取得して分岐すればいいんじゃないの?
デフォで色々出来るようになると、コマンド数が大変なことになりそうな言語仕様なのが怖い。

VBScript, JScript(DMonkey含む), perl(script)等、色々スクリプト触れてきたけど、
AHKはユーザが自動or半自動でやりたいことを割合簡単に実現できるって点でかなり優秀かとおもう。

JScriptはブラウザと連携したり、ActiveX呼び出しでかなり色々出来るけど、
テキストストリーム開いてって読んで書いてって思った以上にめんどいし、
perlは強力な正規表現とテキスト処理が簡単なのが魅力だけど、GUI操作は…

やっぱ正規表現は欲しいなぁ。 [ ] 内のテキストを得るサブルーチンとかいちいち作るのが面倒だ。

(´-`).。oO(Janeで書き込めないのが不便だなぁ
68unnamed.ahk:05/01/31 00:03 ID:???
書き込めるよ
69unnamed.ahk:05/01/31 00:26 ID:???
>>67
本当だ、メニュー選択後のGetKeyStateは有効だね
Shoterの "Shift押下中はメニュー消さないで実行"をまねしようとして挫折したんだけど
通常はアプリ起動して、Ctrl押下時はそのフォルダを開く…みたいな動作ならOKみたい。
70unnamed.ahk:05/01/31 00:27 ID:???
>(´-`).。oO(Janeで書き込めないのが不便だなぁ
外部板登録汁
71unnamed.ahk:05/02/06 18:04 ID:dRQ1z0Do
デバッグがしんどいんでOutputDebugString
使いたいんですけど何か方法はありませんか?
72unnamed.ahk:05/02/06 18:26 ID:???
>>71
AutoHotkey.exeのソースに手を加えてChrisたんに送る
73unnamed.ahk:05/03/04 15:56 ID:7rPnHNyg
Guiコマンドなんですけど
DropDownList ComboBox ListBox で |を含む項目を作る方法って
何かありますでしょうか?
関係あるかわかんないけど環境はNT系です
74unnamed.ahk:05/03/04 21:07 ID:2ACWIJok
` でエスケープ
7573:05/03/04 21:59 ID:???
えっと後出しですみませんが、それは事前に試してみてまして、
どうもダメなようなんです。 Autohotkey Version 1.0.29.00

Gui,Add,ListBox ,,aaa|bbb`|ccc|ddd|ee
Gui,Show
return

GuiEscape:
ExitApp

Loop,Parseみたい区切り文字を指定できるといいんですけどね
`aとかを指定しとけばテキスト扱うのには困らないし。
76unnamed.ahk:05/03/04 23:04 ID:2ACWIJok
ホンマや。すまん分からんわ。
7773:05/03/09 22:42 ID:???
レス遅れてすみません。本家で聞いてみたところ ToDoになってるみたいです。
現状ではControl Addで対応可能みたいです。

Gui,Add,ListBox
Gui,Show

data="aaa","bb|b","ccc","ddd"
Loop,Parse,data,CSV
  Control,Add,%A_LoopField% ,ListBox1,ahk_class AutoHotkeyGUI

return

GuiEscape:
ExitApp
78unnamed.ahk:05/03/25 04:03 ID:HxERFtyU
AltTabの機能をSuspend時にも有効にしたいのですが、
何か良い方法はありませんか?他の機能であれば、Suspend,Permit 書いとけば大丈夫なんですが、
AltTabは無理でした。
79unnamed.ahk:05/03/25 05:44 ID:???
Suspendの状態でホットキーを使いたいという意図がよくわからん
何かの制御中に割込まれたくないのなら スレッド制御するとか
ホットキーラベルの頭に$つけるとかで回避できたりしないか?

どうしても一時的に一部のホットキーを一括で無効にしたいなら ↓のような
サブルーチ作ってGosubしたらどうか

hotkey_Toggle:
  if hotkey_t_flg <> 1
  {
     hotkey_t_flg = 1
     Gosub,hotkey_Enabled
  }
  else
  {
     hotkey_t_flg = 0
     Gosub,hotkey_Disabled
  }
return

hotkey_Enabled:
  Hotkey,key名,ON
  Hotkey,key名,ON
   :
  Hotkey,key名,ON
  Hotkey,key名,ON
return

hotkey_Disabled:
  Hotkey,key名,OFF
   :
return
8078:05/03/26 01:26 ID:ws3lbNbI
親指ひゅんQというプログラムでNicola入力してるんですが、
IMEのON/OFFを検知した後、
OFFならDvorakで英字入力、ONならそのキー自身を送信するようにしてたんですが、
ホットキーを2個くらい定義したら日本語入力は意図しない変な文字(全角*とか色々)が出力されるんです。
そこで仕方なく一部キーをSuspendしてたらAltTabは使えなかった。

というわけで、皆さんが苦労しているIMEのON/OFFを検知プログラムアップしときますね。
ただし、Cでコンパイルした外部ファイルですが。
>>79 スクリプトありがとうございます。試してみます。
81unnamed.ahk:05/04/03 14:39 ID:???
ブラウザの終了を監視し
終了と同時にあるアプリケーションを一緒に終了したいのですが
どうやればいいのでしょうか?
82unnamed.ahk:05/04/03 17:42 ID:???
Process
83unnamed.ahk:05/04/03 17:50 ID:???
ブラウザがMDIかSDIかで監視の方法は変わるし
連動アプリがタスクトレイ収納型かどうかで終了のさせ方も変わる。
要は環境書かなきゃ答えようがない
84unnamed.ahk:05/04/03 19:08 ID:???
>>82
出来ました。
ありがとうございました。
85unnamed.ahk:05/04/09 15:26 ID:???
このソフトは、DirectInputアプリ(ゲーム)にて、
マウスの拡張ボタン(4、5ボタン目)を認識させられますか?
X Wheel NTが仕様上駄目なので、こちらはどうなのでしょうか。
あと、アプリ毎に設定変更も可能でしょうか。
86unnamed.ahk:05/04/09 15:38 ID:uuYWhC6A
色々ためした結果、確証はないけど駄目っぽい気がする。モノにもよるけど。
キーボードはいけるけど、MouseとJoystickはなんか挙動がおかしい感じ。
ホットキーに割り当ててマクロ的な動作させる分には問題ないんだけどね。

他の人フォロー、ツッコミよろ。
87unnamed.ahk:05/04/25 04:30 ID:HxERFtyU
qと入力したときはa,
dqと入力したときはzを出力したい場合、どのように記述すればよいですか?
以下では駄目でした。

$q::
Send,a
Return

$d::
Input, UserInput, V T1 L1 C, {Enter}{Esc}, q
If UserInput = q
Send, {BS}z

Return
88unnamed.ahk:05/04/25 15:42 ID:???
>>87
$がなければ動きましたよ
89unnamed.ahk:05/04/25 20:08 ID:HxERFtyU
>>88 87の例ではそれで出来ますね。
書き込み用にかなり削ったものだったのでそれでも大丈夫だったようです。
もう少し増やした以下の例ではだめでした。実際はもっと多いです。
qと入力したときはso,wと入力したときはko,sと入力したときはka,
dqと入力したときはmya,dwと入力したときはgya,
dsと入力したときはpi,dpと入力したときはwo,を出力したい場合、どのように記述すればよいですか?
以下では駄目でした。

q::
Send,so
Return

w::
Send,ko
Return

s::
Send,ka
Return

d::
Input, UserInput, V T1 L1 C, {Enter}{Esc}, q,w,s,k,o,m,g,y,a,p,i
If UserInput = q
Send, {BS}myo
Else If UserInput = w
Send, {BS}gya
Else If UserInput = s
Send, {BS}pi
Else If UserInput = p
Send, {BS}wo

Return
90unnamed.ahk:05/04/25 22:20 ID:???
>>89
何らかの日本語入力方法のようにみえるなぁ。
窓使いの憂鬱でkeymap使ったほうが良さそうな感じ。
91unnamed.ahk:05/04/26 00:19 ID:ws3lbNbI
窓使いの憂鬱は出先のPCで気軽に使えないというのが気になる。
hishiと組み合わせて目的は達成してるけど、常駐ソフト減らしたいので何とかAutoHotKeyのみで出来ないものか
92unnamed.ahk:05/04/27 13:42 ID:???
#UseHook On
InputLock = 0
!#S::Suspend, On

q::
    if InputLock = 0
        Send,so
    else
        Send,q
Return

w::
    if InputLock = 0
        Send,ko
    else
        Send,w
Return

s::
    if InputLock = 0
        Send,ka
    else
        Send,s
Return

d::
InputLock = 1
Input, UserInput, L1 C, {Esc}, q,w,s,k,o,m,g,y,a,p,i
    If UserInput = q
        Send, myo
    If UserInput = w
        Send, gya
    If UserInput = s
        Send, pi
    If UserInput = p
        Send, wo
InputLock = 0
return

>>89できたぞよ。結構手こずったぜ。これぐらいはAHKで出来るはずだろうと、意地になってしまったよ。
93unnamed.ahk:05/04/27 16:00 ID:???
どうもはじめまして、スクリプト投稿スレの15さんのがバージョンの違いのせいか
動いてくれず、15さんのを参考に同じ動作をするように作ってみたのですが
なかなか動いてくれません。OSはXP SP2でAutoHotKey.iniに直接書いてます。
根本的なとこから間違っているのでしょうか、間違いを指摘してくださいお願いします。

SetTimer,OverWindowCheck,1000

OverWindowCheck:
WinGet,winstatus,MinMax,A
if (winstatus == 0)

WinGetPos,win_x,win_y,win_width,,A

r_limit := 1024 - 35
l_limit := -%win_width% + 100
t_limit := 30
b_limit := 768 - 10

if (%r_limit% <= %win_x%) WinMove, A,, %r_limit% ; 右
if (%l_limit% >= %win_x%) WinMove, A,, %l_limit% ; 左
if (%t_limit% >= %win_y%) WinMove, A,,, %t_limit% ; 上
if (%b_limit% <= %win_y%) WinMove, A,,, %b_limit% ; 下

return
94unnamed.ahk:05/04/27 16:06 ID:???
if ( 式 ) の場合、%〜%のようにしなくても変数展開は行われる。
95unnamed.ahk:05/04/27 16:28 ID:???
うげ、途中で投稿しちまった
なんかよく見ると色々ツッコミ所があるから箇条書きにするか。

1. AutoExcuteブロックがどこまでか分からない。 -> return をSetTImerのあとに入れる
2. SetTimerで常駐させるなら #Persistent を先頭に入れて常駐させることを明示
3. 1と2の結果により、先頭から順にサブルーチンラベルもそのままに実行してスクリプトは終了する
4. If コマンドに引き続き同じ行に真になったときの処理を書くときは、 「,」で区切る
5. If(〜)が真のとき実行されるのは次の1コマンドもしくは1ブロック
 つまり、 「if (winstatus == 0)」の所は真偽判定して結局何もしていない
6. 下4つのIfの所は、x, yそれぞれ1つめの条件が真になれば、
  もう一つは条件判定する必要がないので2,4番目は else if がいい。
7. if ( 式 ) の場合、%〜%のようにしなくても変数展開は行われる。

結論、もうちょっとマニュアルを読んだ方がいい。
96unnamed.ahk:05/04/27 16:33 ID:???
あぁ、まだあるな
8. var := 式 の場合、%〜%のようには基本的にしなくていい。(変数展開が分かってるなら別)
97unnamed.ahk:05/04/27 19:55 ID:???
いきなり4方向じゃなく、まず上下動くようにしようと思います。

SetTimer,OverWindowCheck,2000
return

OverWindowCheck:
WinGet,winstatus,MinMax,A
if(winstatus == 0)
{
WinGetPos,,win_y,,,A

t_limit=30
b_limit=A_ScreenHeight - 10

if(t_limit > win_y) ; 上
{
WinMove, A,,, %t_limit%
}
else if(b_limit < win_y) ; 下
{
WinMove, A,,, %b_limit%
}
}
return

#Persistentはahkじゃなく、iniファイルに書けば必要ないんですよね。
指摘された事を一応考慮したつもりなのですが、動作させるにはあと何が必要でしょうか。
また、投稿スレの>>15さんのが動かないのは正常ですか?
98投稿スレ15:05/04/27 22:36 ID:???
>>97
>また、投稿スレの>>15さんのが動かないのは正常ですか?
Ver.1.0.25で若干仕様変更があったので今のahkバージョンだと動作しないです。
投稿スレにも貼ったけど、修正してマルチモニタで動作確認済みのものを
あぷろだの方に上げたので良かったら、ドゾ
ttp://lukewarm.s101.xrea.com/up/file/023.zip

>#Persistentはahkじゃなく、iniファイルに書けば必要ないんですよね。
ホットキーの指定がない場合はiniでもいるよ、多分
9993,97:05/04/28 03:18 ID:???
>>98
レスありがとうです、スクリプト参考にさせてもらいます。

iniファイルの下の方に書いてやってたのですが
どうやらiniファイルの書く位置を変えて一番上に移したら、あっさり動いてくれました。
ahkにして#Includeで呼び出す場合も、上にコマンドが何も無い場所に置かないと動いてくれませんでした。
それによる他のHotkeyなどのコマンドへの影響は無いのですが、
SetTimerを使う場合は上に置かないと動かないという様な仕様でもあるのでしょうか?
それとも単純に私の書いたスクリプトの書式がおかしいからでしょうか。

あと#Persistentはahk単体で動かした場合以外は無くても動くみたいです
100unnamed.ahk:05/04/28 07:54 ID:???
http://lukewarm.s101.xrea.com/Scripts.htm
スクリプトの起動とAuto-executeセクションの項を嫁

今サイト見直して思ったんだけど上のページ
関数とかの説明追加でAuto-execute後ろのほうに来てるから
確かに見つけにくくなってるね
でも>95でも書いててくれてるんだけど
85KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08