1 :
名無しさん@お腹いっぱい。 :
2008/12/31(水) 12:39:34 ID:ROX9gd900
FAQ Q:CapsLock(英数)キーの割り当てがうまくいかないよ A:日本語環境だとLock系キーの動作は不定。 OS側がキーUp/Down情報が正しく返してこないので対処のしようがない。 OSのローカライズ段階で発生してる問題なので、窓使いの憂鬱やChange Keyのように ドライバレベルで弄らないとダメだが英語圏では問題ないらしいので今後のサポートもあまり期待できない。 対処としては前述のソフトで、CapsLock(英数)キーを別のキー(F13〜F24など)に割り当ててから AHKで利用すべし。 Q:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ A:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]なため。 対処としてはこれらの文字の"直後"に「`」を記述する(例:「線形`代数」)か、 #EscapeCharでエスケープ文字を別のものに変えるべし。
Q:Shift, Ctrl, Alt, Winキー以外のキーを修飾キーとしてキー割り当てしたいよ (例:無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたいよ)など A:Remap機能は記述が簡単になる反面、細かい指定がしにくい。 流行らせるページのHotkeys, キーリスト, リファレンス→Send, #IfWinActive, GetKeyState()なども参照すること。 なお、例の場合は以下のように記述する。 sc07B & I:: Send, {Blind}{Up} sc07B & K:: Send, {Blind}{Down} sc07B & J:: Send, {Blind}{Left} sc07B & L:: Send, {Blind}{Right} ※ いくつかのエディタについてははキーワード定義が以下に添付されているので参考に。 {AutoHotkeyのインストールフォルダ}\Extras\Editor
勝手に追加FAQ?
Q: GUI作るのめんどくせ〜〜
A: 公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使え
Q: ファイルパスに駄目文字があるんだが、、、
A: 駄目文字微対策版(
ttp://yak.myhome.cx/junks/#ahk.cp932 )を使え。
Q: 「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A: 多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
Q: AHKってマルチスレッドじゃないの?
A: 「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …: 割り込み終了待ち
> 元スレッド →→→→→→→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
Q: 完璧なスクリプトなのに、なぜerrorが出るの? A: (文頭に)全角スペースを使ってませんか?目に見えないものもあります。 Q: 作りたいんですけど?どうすればいいのでしょうか?ご教示頂きたいです。よろしくお願いします。 A: ご勝手に。簡単ですから(メモ帳等を使い)自分で書いてください。 ここの住人は親切ですが、それはある程度努力してきたからです。 主人でも客人でもなく、努力も見えない貴方の命令には従えません。 Q: それでも作りたいんですけど? A: 題材によっては、期待以上のスクリプトが出現する可能性もあります。
Q: 具体的に何が出来ますか?どこにありますか? A: マウスジェスチャ、ThumbRemap、TTBaseプラグインの数種、仮想デスクトップ等 1: 「AutoHotkeyを流行らせるページ」の「My Scripts」や「BBS」の投稿スレ 2: 公式のWiki「Compilations」
AかつB、かつ更にCまたはD。の時のif文はどう書きますか? if A && B if C or D という風に書いているけど、1文で書けたらスマートだと思うんだけど。
if (a && b) && (c || d)
新春 Mini Tips ■ ヒアドキュメント 文字列をメタキャラ(`t や `n など)を用いずに定義できる ※ 必ず行頭に ( ) が無ければならない。 ; = 演算子での文字列代入。かなり楽ちん。%hoge% とすれば変数参照も出来る。 str1 = ( aaa = %aaa% bbb = %bbb% ) ; := 演算子でも利用できる str2 := " ( aaa = " . aa . " bbb = " . bb . " )" ;変態的な利用方法 MsgBox, % " ( ああ = " aa " いい = " bb " うう = " cc " )"
■簡易オンスクリーンディスプレイ(OSD)関数 ・・・ 全角スペースを Tab に変えること! OSD_Msg(title, msg, dur, pos="BL", fc="Aqua", fs1=28, fs2=36) { global Progress2 ; タイマで呼ぶラベルは static 変数は見えないので static _fs1,_fs2,_fc,_pos if (pos != _pos || fc != _fc || f1 != _f1 || f2 != _f2) Progress2 := false if (!Progress2) { Process, Exist MyPid := ErrorLevel opt:=InStr(pos, "L") ? "C00" : "" w := A_ScreenWidth, h := fs1 + fs2 + 40 x := A_ScreenWidth - w, y := InStr(pos, "B") ? A_ScreenHeight-(h+30) : InStr(pos, "M") ? Round((A_ScreenHeight-h)/2) : 10 Progress, 2:Hide B x%x% y%y% w%w% h%h% CW000001 CT%fc% ZH0 ZW0 ZY0 ZX0 FM%fs1% FS%fs2% WM1000 WS1000 %opt%, %msg%,%title%,%A_ThisFunc% DetectHiddenWindows, On WinGet, hwnd, ID, %A_ThisFunc% ahk_class AutoHotkey2 ahk_pid %MyPid% WinSet, TransColor, 000001, ahk_id %hwnd% WinGetPos, ,,,h, ahk_id %hwnd% WinMove, ,%y%,,,ahk_id %hwnd% } Progress2 := true Progress, 2:,%A_Space%%msg%%A_Space%,%title% Progress, 2:Show _fc := fc,_fs2:=fs2,_fs1:=fs1,_pos:=pos SetTimer, OSD_Msg_Off, -%dur% return OSD_Msg_Off: Progress2 := false Progress, 2:Off return }
※ Progressを利用するので、GUIを消費しない。時計表示などにいいかも。 ※ 文字列以外の引数が変わると再初期化する。文字だけ変わる場合はちらつかない。 title : タイトル文字列 msg: メッセージ文字列 dur: 表示時間(ms) pos: 位置と配置(TL で Top Left、 BCで Bottom Center、右寄せは無いw) ;fc:フォント色(16進数表記でも可) fs1:タイトルの文字サイズ, fs2:メッセージの文字サイズ
■ サウンドデバイスの一覧を改行区切りで得る関数 waveOut/waveIn , midiOut/midiIn に対応 複数の入出力デバイスがなければ全く意味がない。 SoundDevice_GetDeviceList(media="wave", isOut=true, requireId=false) { static cbxoc:=256,delim:="`n" uDeviceID:=0 func := InStr(media, "wave") ? "wave" : InStr(media, "midi") ? "midi" : "" if (!func) return func .= isOut ? "Out" : "In" VarSetCapacity(xoc, cbxoc, 0x00) ; Xoc (WAVEOUTCAPS / MIDIOUTCAPS) Loop { result := DllCall("winmm.dll\" func "GetDevCapsA", UInt,uDeviceID, Int,&xoc, UInt,cbxoc, Int) if (result == 2) ; MMSYSERR_BADDEVICEID break if (result == 0) { ; MMSYSERR_NOERROR devName:="" list .= StructGetString(xoc, 8) ; WAVEOUTCAPS と MIDIOUTCAPSのデバイス名称までは構造が同じ . (requireId ? ("`t" uDeviceID) : "") . delim } uDeviceID++ } StringTrimRight, list, list, % StrLen(delim) return list }
■ WaveOutを指定のデバイスIDで変更する
>>13 と組み合わせて使う。
SoundDevice_SetWaveDeviceId(id) {
static WAVE_MAPPER:=-1, MMSYSERR_NOERROR:=0
dwPreferedID:=0, dwUsePreferedOnly:=0
if (MMSYSERR_NOERROR == DllCall("winmm.dll\waveOutMessage", UInt,WAVE_MAPPER, UInt,0x2015, UInt,&dwPreferedID, UInt,&dwUsePreferedOnly, Int)) {
ret := DllCall("winmm.dll\waveOutMessage", UInt,WAVE_MAPPER, UInt,0x2016, Uint,id, dwUsePreferedOnly, Int)
return true
}
return false
}
■ 現在選択されているWave再生デバイス名を取得する
SoundDevice_GetDeviceName() {
RegRead, Playback, HKEY_CURRENT_USER, Software\Microsoft\Multimedia\Sound Mapper, Playback
return Playback
}
■ 名前でWave再生デバイスを指定する (
>>13-14 と組み合わせで使う)
SoundDevice_SetDeviceName(deviceName) {
deviceList := SoundDevice_GetDeviceList("wave", true, true)
Loop, PARSE, deviceList, `n
{
StringSplit, data, A_LoopField, %A_Tab%
if (data1 == deviceName)
return SoundDevice_SetWaveDeviceId(data2)
}
}
■ 再生デバイスのトグルをする。上のものと組み合わせて使う。
戻り値に変更後のデバイス名を返す
SoundDevice_ToggleDevice() {
currentDeviceName := SoundDevice_GetDeviceName()
deviceList := SoundDevice_GetDeviceList()
StringSplit, device, deviceList, `n
deviceCount:=device0, currentId:=0, nextId:=1
Loop, %deviceCount%
if (device%A_Index% == currentDeviceName)
currentId := A_Index
else if (currentId && A_Index == (currentId + 1))
nextId := A_Index
SoundDevice_SetDeviceName(device%nextId%)
return device%nextId%
}
>>9 d。考えてみたらそりゃそうかorz
小中学生レベルだw
18 :
13 :2009/01/02(金) 20:30:59 ID:dpIHoV0B0
>>13 で使う関数が抜けていた orz
StructGetString(ByRef pSrc, offset=0) {
Loop 0xffff {
char := NumGet(pSrc, offset, "Char")
offset++
if (!char)
break
buff.=Chr(char)
}
return buff
}
19 :
13 :2009/01/02(金) 20:35:02 ID:dpIHoV0B0
連投w ■ あいている GUI 番号を探す。 asc=true:昇順(1から探す) / false: 降順(99から探す) まぁあんまり使わないけど、色々GUI作っている人はどうぞ GuiFindFreeNo(asc=true) { Loop, 99 { guiNo := asc ? A_Index : 100 - A_Index Gui, %guiNo%:+LastFoundExist if (!WinExist()) return guiNo } }
20 :
13 :2009/01/02(金) 20:44:24 ID:dpIHoV0B0
■ 無理やり GUI で InputBox。(一応....モーダル) MsgBox, % GuiInputBox("いんぷっとボックス", "何か入れてよ") exitApp GuiInputBox(title, message, defaultValue="") { DialogString := "" len := StrLen(defaultValue) len := (len < 400) ? 400 : len Gui, 99:default Gui, +ToolWindow Gui, Add, Text, , %message% Gui, Font, s12, MS Gothic Gui, Add, Edit, -Multi w%len%, %defaultValue% Gui, Add, Button, defaultValueault g99GuiClose, OK Gui, 99:Show,, %title% WinWaitClose, %title% return DialogString 99GuiClose: Gui, 99:default GuiControlGet, DialogString, ,Edit1 Gui, Destroy return 99GuiEscape: Gui, Destroy return "" }
せっかくのところ申し訳ないが、ニーズがあるのか微妙な内容は、 自分のブログかなんかでやってくれないか
22 :
13 :2009/01/02(金) 20:51:04 ID:dpIHoV0B0
■ 指定時間(ms単位)だけツールチップを表示する #Persistent AutoHideTooltip("このツールチップは5秒で消えます", 5000) AutoHideTooltip(msg, dur,x="",y="") { Tooltip, %msg%,%x%,%y%,20 SetTimer, AutoHideTooltip_HideTip,-%dur% return AutoHideTooltip_HideTip: Tooltip,,,,20 return }
わりぃ
いや、もっとやって
F1::
hogehoge
sleep,5000
return
F1::
hogehoge2
sleep,10000
return
と指定して f1のsleepの間はf2を押しても無視するようにしたいです。
変数使ってifでreturnさせれば良いかなと思っていたのですが
>>5 をみるとf2を押すごとに割り込みが発生するみたいなのですが
よい方法はないですか?
さらに指定したキー以外の場合は押されたキーをsendしてsleep,3000するようにしたいのですが全キー分部書かないとできないでしょうか?
ああう F1:: hogehoge sleep,5000 return F2:: hogehoge2 sleep,10000 return です。
> f1のsleepの間はf2を押しても無視するようにしたいです タイマーかな F1:: if (Key_F1_NG) return Tooltip, HogeHoge1 Key_F1_NG:=true, Key_F2_NG:=true SetTimer, Key_F1_Enable, -5000 SetTimer, Key_F2_Enable, -5000 return F2:: if (Key_F2_NG) return Tooltip, HogeHoge2 Key_F2_NG:=true SetTimer, Key_F2_Enable, -10000 return Key_F1_Enable: Key_F2_Enable: RegExMatch(A_ThisLabel, "Key_(\w+)_Enable", $) Key_%$1%_NG= return
> 指定したキー以外の場合は押されたキーをsendしてsleep,3000するようにしたい 面倒なら,、 Hotkey コマンドかな Keys = a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9 Loop, PARSE, Keys, `, Hotkey, *%A_LoopField%, SendAndSleep return SendAndSleep: Send, % "{Blind}{" RegExReplace(A_ThisHotkey, "^\W","") "}" Sleep, 3000 return
#y::WinActivate, Untitled - Notepad と定義している場合に Win+Yを押そうとして、 Winキーを押してYを押す前に気が変わって、 Winキーを放すとスタートメニューが表示されます。 これが鬱陶しいので表示されないようにして、 スタートメニューを開くには Win+A を使うようにはできるでしょうか?
>>29 そもそもWinキーを割り当てること自体間違ってないか?
>>30 Ctrl, Shift, Alt はアプリごとのショートカットと被る可能性があるので、
アプリによらないグローバルなホットキーには
Winキーを使いたいと思ってるんですが、間違ってるんでしょうか?
とすると修飾シンボルの # の存在意義は何なのでしょうか?
winの単独押しを殺せばいいだけじゃないの?
キーカスタマイズソフトスレで >autohotkeyで不可能なことをkeybatでとりあえず、これを具体的に言っとけ。 って有ったので質問したらで答えられないからと,こっちに誘導されました. AutoHotKeyでは,ネットワーク経由で別PCのキー操作って出来るのでしょうか? 一枚のキーボードで複数のPCを操作したいんです. 一部のキーだけ別PCに割り当てとかマクロ動かしたいので切換器では無理... コマンドスクリプトとかも見たけどネットワーク関連は見あたらず. ニッチな要望だから対応してないのかな,Vistaに移行できねぇorz
>>32 ありがとうございます
LWin:: Return
#a:: Send, {LWin}
でいけたみたいです
>>33 synergy ってソフトあるけどダメ?
synergyはあるな
AutoHotkeyとXkeymacsを共存して使ってる人いる? 俺の環境だと C-s での検索がまともに動かないんだけど うまく使えてる人いない?
正規表現
正規表現を覚えるまでもないと言うのなら、 href=" の位置を探して、それ以降に初めて出現する " を探して切り出せばいい。 (InStr()関数か、 StringGetPos 使って割り出して、SubStr()関数使う)
LOOP, PARSE, ClipBoard, " で回して A_LoopFieldに「http:」があったら 適当な変数に入れて抜ければいい
42 :
38 :2009/01/03(土) 19:36:59 ID:wjl7GfuA0
皆さんありがとうございます。処理一つ書くにしても、いろいろな方法があるのですね。 41さんの考え方はなかったです。 40さんの教えてくれた InStr() 関数で " の位置を取得して、StringMid関数で抜き出そうと思います。 ありがとうござました。
ふと思い立って、OnMessageでWM_TIMERを仕込んで、 SetTimerコマンドを使った時にどういう挙動するか調べてみた。 で、SetTimerの数、SetTimerの時間に関わらず、 最小時間のタイマー1つしか動いてないようだった(タイマーID9)。 SetTimerコマンドで1つもタイマーを作っていないと、 WM_TIMERには飛んでこない。 という感じで、AHKではタイマー管理用のタイマーを 1つだけ作って管理してるみたいだね。 5000msとか長めのタイマーしか使わない場合でも 最小時間(約10ms)でタイマーが動いてしまうから、 長めのタイマー使う場合は自前でDllCall("SetTimer") した方がいいような気がするんだけど、神経質になりすぎかな?
あけましておめでとうございます〜。今年も色々と勉強させて頂きます。 ところで前スレ1000まで行きましたか? DAT誰かうpしてくれると嬉しいのですが。 970までは取得してあるんですけど、旅行中でチェックする時間がなかったもので。
>>46 素早いうpありがとうございます〜。
助かりました!!
ところで前々スレ1000まで行きましたか? DAT誰かうpしてくれると嬉しいのですが。
51 :
33 :2009/01/04(日) 02:47:14 ID:/TC5+4Sb0
>>35 , 36
やっぱsynergyっすか,実は前試して上手く動かせなかった...
マクロ(簡単なので良いんだけど)とか,一部のキーだけ別PC操作したいとか
微妙にやりたいことが出来ないらしかったんで,直ぐに諦めてしまった
もう一度試してみます.レスありがと
別PCの何をどのくらい操作したいのかでも どんなソフト使うべきか決まるよ。 vncとかsshでも済むかも知れないし。
TrackWheelのreadmeが参考になりすぎて困るので、 Googleサイトとかでページを作って検索にひっかかるようにすると、 幸せになる人がもうちょっと増えると思うんだけども
なんという丁寧なドキュメント・・・
57 :
33 :2009/01/04(日) 12:18:27 ID:/TC5+4Sb0
>>52 MMORPGで二垢するときに,一台のキーボードで操作してます.
WASDで移動QEで旋回,その他キーとCtrl,Altなどの組合せで色々な機能を
普通のキーボード部分は接続してあるPCのキー入力に使い
2nd側のPC操作用に
カーソルキーを2ndPCのWASD,QEを2ndPCのDelete,PageDown
テンキーの0を2ndPCのスペースバー,1〜9を2ndPCの1〜9,.を2ndPCのTABなどなど
F6を押すとトグルで2ndPC側のマクロ発動(実際には3ボタン連打w)してます
それだけではどうしてもまかなえないときもあるので,そのときは
キーボードとマウスを全部2ndPC操作に切り替えてます.
まー,KeyBatで出来ることで設定していったらこうなっちゃったんですが
キーボード共有ソフトだとちょっと無理で
Vistaに対応したキーカスタマイズ系だと複数PC操作出来るの無いなーと
>>56 それは面白そうなので観てきます
スレ違い気味なネタにレスありがとうございます
えらい器用なことやってますねw ネトゲ廃人の気合の入れようは異常w
おつー
すげえ力作ww
>>48 乙
いつのまにかExcelみたいな変態ポインタも消えるようになってるし
スクロールが随分となめらかになってて(・∀・)イイ!!
ただ、秀丸の分割ペイン切替がなくなったのは秀使いとしては地味にクリティカルかも。
組込みで使おうとして気になった点とか
・TW.ahkの後に関数集などのahk(行頭にreturnがないもの)を Includeしようとするとエラーになる。
環境:WinXP SP2 AHK 1.0.47.06 (original) 行末ラベル TW_EOF: が原因ぽい。
行頭の if (A_LineNumber != 1)ってのは組込み用対策なのかな。
これって常に1になる (組込みで使う場合も A_LineNumberはファイルごとの行数になる)ので
いまいち機能してないような。
・OnExitの任意指定ってなくなった? TW_Initialize()の後に 無理矢理 OnExitラベル変更してるけど
ExitAppの前に TW_End()を突っ込んでやればOK?
・.ini/.icoを相対パスで指定した場合、基準をA_LineFileと同じディレクトリにして欲しいとか言ってみるテスト
組込み時もデフォルト設定のままで使えるようになってると大変嬉しい
ついでにも一個要望 本末転倒だがチョン押し時の Send,{Mbutton} をヌッ殺すオプションが欲しい。 というよりタイムアウトした場合用の TW_POSTACTION が欲しい。 オートスクロールは使わないがAHKからHookかけてMbutton使いたい用途は山ほどある。 数行足すだけで済むものなので今は適当に改造して使わせてもらってますが、 更新が頻繁で追っかけるの大変になってきたので、機能として盛り込んでもらえると嬉しいなっと。
> 秀丸の分割ペイン切替がなくなったのは秀使いとしては地味にクリティカル
楽だったので組み込んだ
> 組込みで使う場合も A_LineNumberはファイルごとの行数になる
知らなかったorz。無駄だから消した
> OnExitの任意指定ってなくなった?
無くなった。でも呼ばなくても平気なはずなので、Initから外した。一応Docに追記した。
> 基準をA_LineFileと同じディレクトリにして欲しい
採用。俺も面倒だったw
> タイムアウトした場合用の TW_POSTACTION
既にあるよ。
ttp://sites.google.com/site/agkh6mze/trackwheel - ページが大きいので分割した
- 秀丸用対応の復活(Autoでやる)
- ワーキングディレクトリをTrackWheelのあるディレクトリとした(人によってはデカい)
- IEの設定が間違ってたorz
>> タイムアウトした場合用の TW_POSTACTION >既にあるよ。 Iniにはないので自分で書いてね、ってこと
>TW_POSTACTION
すんませんまさに望んでた通りの動作でした。
TWの外に MButton: 置いて自制御する場合と混同してました。
>>65 (・∀・)イイ!!
秀の場合は HorzをScroll2に指定するといい感じ。
全般的にScrooll(つまみドラッグエミュ)は慣れてないせいか操作が難しい。
うまいことコツが掴めるようになると快適なのかな。
>>68 乙。
たとえば、、、多分 SELECT文の結果をグローバル変数の配列とかにすると思うんだけど、
その最中に Loop して結果表を1行ずつフェッチする過程があるはず、
で、その行Loop中に他の関数を呼び出してデータ処理はお願いって風に出来ればなぁ、、、と思っただけ。
グローバル変数消費しないし、他の言語では結構見るタイプ。
まぁ、↓だと10カラムしか対応できなくて格好悪いけどこんな感じ。
; モジュール側
GetSelectToCallback(db, sql, funcName) {
Loop {
行取得する
%funcName%(rowNo, colCount, col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) ; 行をそのまま渡す!
}
}
; コールする側
LV_Delete()
GetSelectToCallback(db, "SELECT * FROM HOGE", "HogeFunc")
SB_SetText(LV_GetCount() . "件")
HogeFunc(rowNo, col1="",col2="",col3="",col4="",col5="",col6="",col7="",col8="",col9="",col10="") {
; ダイレクトにリストビューに追加する
LV_Add("", col1, col2, col3, col4, col5, col5, col6, col7, col8,col9,col10)
}
>>69 これは分かりやすい
理解したけど問題は列数か
頑張ってみます
TrackWheel はコア部分変更以来、小さく動かしてゆっくりスクロールする動作が苦手になってる感じ >行数 = Round((移動量-動作閾値分の補正) / 動作感度) これだと tY=2 sY=10 ($Default) のとき Yが 7以上じゃないとスクロールが発生してくれないけど しきい値を越えたら、まずは 1行動いてくれるほうがなめらかになる感じ。 value := (value-t+s)//s とか。 あとWindowClassやControlClassの指定は部分じゃなくて前方一致? ContexterのリストビューがスクロールしないのでSpyで見たら WindowsForms10.SysListView32.app32 とかいう長ったらしいコントロール名だった。
TrackWheelで左右に動かすとY軸が動くようにしているのは俺だけだろうな 上下で動かすよりなんとなく楽な感じがするんだよね
横から見てるだけでもいろいろ参考になるから、このまま続けてもOKと俺は思う
じゃ、何人かは使っているらしいんで
ttp://sites.google.com/site/agkh6mze/trackwheel [V.5]
- Altキー押下時にスクロール後にSleepする設定を加えた
- サムドラッグエミュレート抑止オプションを追加
- スクロール方法の自動判別で Scroll2 を優先するオプションを追加(V.3と同じ判定になる)
- デバッグコードが残っていたのを削除
[V.4]
- 設定しても何もなかったオプション項目に意味を持たせた
- 【重大】スクロール量の算出方式で閾値を超えた時に1行動くようにした
>>73 - クラス名定義でワイルドカードで中間一致を追加
>>73
VistaでAutoHotkeyを使用しております。少し質問をさせて頂きたいのですが
CCleanerをウィンドウの位置やサイズを変更するため簡単なスクリプトを
書いて見たのですが、機能しません同じパターン等で他のソフトを多数、使用して
も問題無いのですが、何が原因なのでしょうか、御存じの方宜しくお願いします。
Run,"C:\Program Files\CCleaner\CCleaner.exe"
WinWaitActive,Piriform CCleaner
WinMove, A, , 40, 100, 1200, 900
ExitApp
以下のスクリプトでもCCleanerだけ反応ありません。
#NoTrayIcon
^1::WinMove, A, , 40, 100, 1200, 900
^0::ExitApp
return
CCleaner - Home
http://www.ccleaner.com/ >>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
Piriform CCleaner
ahk_class #32770
>>76 あまり参考にならないかもしれないけど、うちの環境では問題なく動作したよ。
OS:WindowsVista
CCleaner 2.15.815
あ、ちなみに OS:WinXP SP3 CCleaner v2.14.750 そしてアップデートあるのに気がつきました
レス感謝です。CCleaner 2.15.815で同じバージョンですね。 先ほど眠っていたXPに同じくセットすると、此方は問題無く 起動しました。因みにVistaのエアロはどうなってますか 私はオンオフともやはりCCleanerだけ動作しません。 77氏は問題無くVistaでも動作と言う事は環境問題かな
思ったより難しそうだけど、習得率はVBSとどっちが簡単ですか?
言語仕様としてはVBSの方が整理されている。 でも、ほとんどの人がAHKを使う理由は、キー割り当てや簡易GUI構築など、 VBSでは代替できない機能が目当てだと思うんで、 「習得のしやすさ」で選ぶ二択じゃない気がする。
ちらっと見ただけだけど、面白そうな事が出来そうだな感じだったので 難易度はどれくらいなのかなと思って wshくらいの難易度で覚えられるならやってみたいけど あまり本格的なものだとすぐあきらめそうだなと
wsh(VBA,JavaScript)ができるなら大丈夫だろ。 俺もなんとかなってる。 むしろ、AHKはかなりDSL色が強くて非常に独自言語っぽく、 他の言語だと簡単に書けたり、どの言語も同じように書けるのに、 AHKは変な書き方しなくちゃならなかったり、ちょっとクセがある。
>>81 おいらも2週間前にAutoHotkeyを知ったばかりの新参だけど、
「面白そうなこと」というのが具体的に決まっているのであれば、
やってみたらいいんじゃないかな。
ちなみに、おいらは前スレで紹介されてたモールス信号スクリプトを使って和文を打てるようにしたり、
物理演算シミュレーションソフトのPhunにちょっと遊べるを機能を追加したりして遊んでる。
後者のスクリプトは下手なりにソースコード晒して公開したのにウィルスと疑われてるけどなw
チラ裏すまそ。
レスありがとう ほんとにまだちょっと見た程度なので 具体的にやりたいものが決まってるわけではないんだけど いろいろ応用が利きそうかなと 途中で挫折しなかったらまた来てまます
キー置き換えっつースタンスと、バッチ代わりとか簡易GUI作成ツールとかってスタンスで 大分違いが出そう。。。 mayu+WSH(+マウ筋)から AHKに完全移行したけど、最初はキー置き換えだけしかしなかったなぁ
mayu+AHK(非常駐スクリプト)で運用。
質問です。 右クリックを押している間、 右クリックを連打するスクリプトってどう書けばいいんでしょうか? If Rbutton loop { click,rbutton sleep, 100 } 試行錯誤してもこの程度しかわかりませんでした。 押し下げ状態とかの記述とかも流行らせるを見てもよくわかりません。 よろしくお願いします。
4と出る筈が、何で13になるの? ichi:=1 tasu:=+ san:=3 msgbox,% ichi tasu san return
> ichi tasu san は、 文字列結合してを出力しろっていってるのと同じ、 つまり↓ > ichi . tasu . san または > %ichi%%tasu%%san% javascript の eval とか python の exec に相当するのってahkには無い・・・はず
>>92 Σ(゚д゚|||)ガーンよく分かりました
>>91 msgbox, % ichi + san
なら4になるのに。
dynamic function calling (1.0.47.06)でどうにかならない?
とあるゲームで、キーにマウス移動+クリックという作業を割り当てたのですが sendplayをやろうとすると反応しなくなります。ちなみにOSはvistaで下のようなやつです send play a:: BlockInput, mousemove send,{a Down} send,{a up} sleep,100 mousemove,0,0 click sleep,100 mousemove,0,0 click BlockInput, mousemoveoff
一行目は SendMode Play じゃないの? それから「とあるゲーム」じゃ、色んなSendModeでやってダメなら、あきらめろとしか言えないと思うが
ある座標値にあるウィンドウのウィンドウハンドルを取得するにはどう書けばいいんでしょうか?
WinGetのcmdにListを指定して全てのハンドルを取得して、 ループでWinGetPosして判定すればいいんじゃね
WindowFromPointをdllcall
LWin::MsgBox, % "long = " . LongPress(A_ThisHotkey, 500) LongPress(key, limit) { Loop if !GetKeyState(key, "P") break return A_TimeSinceThisHotkey > limit }
>>103 (Pert6
>>782 より転載)
これを改造すればいいよ。
782 :名無しさん@お腹いっぱい。:2008/11/27(木) 01:43:58 ID:pOwnMABe
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。
if書きたくないから、三項演算子だいすきif書きたくないから、三項演算子だいすき
#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%
alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""
}
Tooltip, %alert%
return
>>104 >>105 遅くなりましたがありがとうございます。
>>104 を試してみましたが、
>>103 と同じように
LWinでは長押ししても "0" しか返ってきませんでした。
LWin じゃなくて a ならばちゃんと長押しで "1" が返るんですが、
私の環境だけでしょうか?それとも LWin は特別なんでしょうか?
>>105 はよくわからないところもあって改造はできてませんが、
GetKeyState で判定して時間を計るという点では一緒なのかなと・・・
>>101-102 お礼が送れて本当にすみませんでした。レスありがとうございました
DllCall("WindowFromPoint", Int, X, Int, Y, UInt)
で、コントロールのウィンドウハンドルを取得できる事まで分かったのですが
ここからウィンドウを取得するにはどうしたらいいのでしょうか・・・?
正解出してやってんのに馬鹿じゃねーの
日付の計算で2009/01/01の三日前を自動で出したいときどう書けばいいのかな 両方決まった形式じゃないと計算できなくて不便 20090101-3dayとかできたらいいのに
NowDate = 090101 NowDate -= 3, Days じゃ駄目?
と書いたけど引き算は無理なのか 足し算はいけるのになんだこの仕様 ちなみに足し算する時は20090101〜のYYYYMMDDHH24MISS形式にしないと無理
Date = 20090101 Date += -3, Days が正解というクソ仕様ですよ
おお、足し算でマイナス指定してやるのか ありがとう、できたよ
なるほど 時々よく分からない仕様があるな
カーソルキーのleftを押したら、leftを押す>leftを離す>leftを押す に、 rightを押したらrightを押す>rightを離す>rightを押す になるスクリプトはどう書きますか
そう作ればいいんじゃないの?
ホームページを見てるときに、 特定の画像(文字)が画面の指定した位置に来るようにする、ってできるでしょうか? 例えば、ホームページの[目次]という文字を、 画面の上の方に来るまでブラウザを下にスクロールさせたい、 という感じなんですが。 ImageSearchでできそうなんですが、 スクロールさせつつImageSearchを使う、ってのがよく解らないんです。
>>117 そもそも1680x1050などの広い画面でブラウザ開いた時なんか
スクロールバーが出ないから対応できないと思うんだけど
>>117 Loop
{
1スクロールさせるボタンをsend
imagesearch
if 合致したら抜ける
}
でできそうな気がする
DOM使う方が確実かと
使っているPCの、物理メモリ容量について質問です。 はやらせるページ管理人氏の GetMemoryState(0,1) を使わせてもらいました。 物理メモリが2GB以内なら問題ないのですが、2GB以上積んでると、 戻り値が2GBちょっとで頭打ちになり、それ以上増えないようです。 タスクマネージャや、コンピュータのプロパティで表示される物理メモリ容量の、 うまい取得方法は無いでしょうか。
ttp://msdn.microsoft.com/ja-jp/library/cc430087.aspx > Intel x86 プロセッサを採用し、2GB を超え、4GB 未満のメモリを実装したコンピュータでは、
> GlobalMemoryStatus 関数は MEMORYSTATUS 構造体の dwTotalPhys メンバに常に 2GB という値を返します。
> 同様に、実際の利用可能なメモリが 2〜4GB の場合、MEMORYSTATUS 構造体の dwAvailPhys メンバは
> 切り捨てられて 2GB になります。
GlobalMemoryStatusExにすればいいんじゃないかな
iTunesでXButton2を押すと次の曲に移ってしますので、それを無効にしたいと考えているのですが、 #IfWinActive,iTunes ahk_class iTunes XButton2::return とやっても #InstallMouseHook を追加してもやはり制御しきれません。 何か方法はありませんでしょうか?
使ってないからわからんが、タイトル(Class)の指定はそれで合ってるのか?
AHKの標準出力について -- StdOut.ahk ----------- FileAppend, OutPut test,* exitapp ------------------------- AutoHotkey.exe StdOut.ahk > aaa.txt リダイレクト取込みしてやるとちゃんと出力されてるのに AutoHotkey.exe StdOut.ahk ってプロンプトから実行しても画面に文字が表示されないのはなんでなんだろ?
>>125 仕様らしい。ダミーでパイプをかませばいいらしい。以下、公式リファレンスより
However, text sent to stdout will not appear at the command prompt it was launched from.
This can be worked around by piping a script's output to another command or program.
For example:
1) "%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" |more
2) For /F "tokens=*" %L in ('""%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script .ahk""') do @Echo %L
127 :
123 :2009/01/24(土) 16:06:55 ID:jTY3HDp10
>>124 iTunesに対しての他のホットキーは効いてますし、
XButton2::Msgbox
とすると、次の曲に切り替わった上でメッセージボックスが表示されてしまうので、
おそらくウィンドウの指定は間違っていないと思うのですが・・・
>>126 おお、出た出た。dクス
バッチファイル用の何かかと思ってスルーしてたけど 1) 2)ともプロンプトからでけた。
しかし "fputs 標準出力 プロンプト 表示されない" とかでググッても
StdErrはリダイレクトされないは書いてあっても
StdOutが表示されない事例は見つからなかったんだよね。
どうやったらそういう状態にできるのか逆に不思議だ。
閉じるボタンを押すとタスクトレイに最小化するアプリを使ってるのですが WinCloseでもWinKillでも終了してくれずにトレイに移動するだけです 今はSendでメニューバーにキーを送って無理矢理終了しているのですが もっとスマートなやり方があれば教えてください
クリップボードの内容を張り付けたかどうかを監視する方法ありませんか? Onclipbpardchangeでコピーは監視出来るみたいですが張り付けを監視する方法がわかりません
>>127 #IfWinActive→IfWinActive
>>129 WinKillは、WinCloseでダメだったらProcessでKillするから、結局WinClose止まりってことだね。
Process, Closeが問題あるなら、WinKillも使わないほうがいい。
Alt+F4でもダメかな・・・
ahkの初期実行部分で、実行してるマシンのOSを判別させてるんだけど、 Windows7で実行してみたら、PC名の変数が「WIN_VISTA」になった。 これだと本当のVISTAとWin7が判別できないね。 なんか適切な判別方法ないかな?
何かシステム系DLLのヴァージョンを調べるとか
ver というコマンドプロンプトで使えるコマンドがあってだな
報告その一 流行らせるページのリファレンス、ControlGetの説明の項 >Choice >リストボックスやコンボボックスで選択されている項目の番号 >(TListBox/TComboBoxコントロールにも対応) ってなってるけど ControlGet,var,Choice,,ComboBox1,画面のプロパティ msgbox,%var% でやってみたら、選択されている項目の"番号"ではなく"文字列"が取れた。 ちなみに本家ヘルプの説明はこんな感じ >Choice: Sets OutputVar to be the name of the currently selected entry in a ListBox or ComboBox. >To instead retrieve the position of the selected item, follow this example (use only one of the first two lines): > >SendMessage, 0x188, 0, 0, ListBox1, WinTitle ; 0x188 is LB_GETCURSEL (for a ListBox). >SendMessage, 0x147, 0, 0, ComboBox1, WinTitle ; 0x147 is CB_GETCURSEL (for a DropDownList or ComboBox). >ChoicePos = %ErrorLevel% ; It will be -1 if there is no item selected. >ChoicePos += 1 ; Convert from 0-based to 1-based, i.e. so that the first item is known as 1, not 0.
むしろ、番号が取れなくて困った覚えがある。 日本語取得出来たけど再利用出来ないよ!な感じで
報告その二 TrackWheelでタイトルバーをクリックしてもアクティブウィンドウが切替わらなくなることがあるです。 [Alt]+[Tab]で切り替えてやると復活するが、以降のドラッグ操作に支障が出る。 → ドラッグ&ドロップが効かなくなる。(ポインタはドラッグの絵になるがドロップができない) → マウスジェスチャ対応アプリでマウスジェスチャが効かなくなる。 スクリプトをReloadしても直らず、諦めてしばらく使ってるといつの間にか復旧してる。 vmWareのゲストOS画面(MKSEmbedded)上でうっかりスクロールさせようとした時によく起きた。 vmWareを一切起動させてなくても時々なる。 再現パターンは今のとこ不明だけど、発生直前に本来のマウスポインタとスクロールポインタが 二重で表示されていたような気がする。 WinXP SP2 AHK ver 1.0.47.06 AutoHotkey.iniに組込み利用 あとスクロール制動についての感想というかできれば要望です。 (これは多分に好みの問題かも知れないので気に入らなかったら無視して下さい) 横スクロールしたい時にブレで縦方向までスクロールしてしまうことがよくあり、縦横自在杉な制動が ちょっと仇になっているような印象を受けました。 ThinkPad標準のスクロールではあまりその辺を意識したことがなかったんですが 直前に移動した位相(xもしくは、y方向)で固定し、別の位相へのスクロール時は閾値と感度を 通常より多めに取る。もしくは縦横の移動を同時には行なわない。 (xのが移動量が多いなら横のみスクロールさせてy値はあえて無視) みたいな対処が入っているような気がします。
>>139 TrackWheelの中の人だす。
> TrackWheelでタイトルバーをクリックしてもアクティブウィンドウが切替わらなくなることがあるです。
> [Alt]+[Tab]で切り替えてやると復活するが、以降のドラッグ操作に支障が出る。
認識していまつ。同症状がこっちでも起きていて、原因は分からない。orz。
こっちは、再現性っていうか、今のところFireFoxでしか起きないんだけど・・・。
申し訳ないが、今のところメドはなし・・・です。
> 再現パターンは今のとこ不明だけど、発生直前に本来のマウスポインタとスクロールポインタが
> 二重で表示されていたような気がする。
ふむ。。。TrackPointのツールだとFireFoxの場合カーソル消えない(というかちらつく)し、ちょっと手がかりかも。
不具合でどうしようもねぇ!っていうのなら、以下のオプションをIniで設定して様子見してくれるとありがたい。
マウスポインタは消えないけど・・・
> ; マウスカーソル消去を無効にする場合は 1、しない場合は 0 にする
> NoHide=1
> 横スクロールしたい時にブレで縦方向までスクロールしてしまうことがよくあり、縦横自在杉な制動が
> ちょっと仇になっているような印象を受けました。
> :
> 直前に移動した位相(xもしくは、y方向)で固定し、別の位相へのスクロール時は閾値と感度を
> 通常より多めに取る。もしくは縦横の移動を同時には行なわない。
これは、好みっつーか仕様の範囲だね。数式いじるだけだから実現は楽なはず。
オプションで変えられるようにすればいいだけだから、気が向いたらやってみる。
trackwheel便利なんだけど 外付けマウスまで同じ挙動になっちゃうのは避けられないのかな。
>>139 dです
発生頻度はそれほど高くないんだけど、リブート以外の復旧方法がわからないのが痛いところ。
>気が向いたらやってみる。
>申し訳ないが、今のところメドはなし・・・です。
更新とか急かすつもりはないんで報告も参考程度で見といて下さい。
もうTrackWheel依存しすぎでThinkPad標準のドライバには戻れない状況ですわ。
>ふむ。。。TrackPointのツールだとFireFoxの場合カーソル消えない
そういえばVMWareも消えないですね。ゲストOSにマウス制御全部渡してるらしくトラックポイントでの
スクロールも一切できないです。
ちなみにVmWareのゲストOS内でTW.ahkを動かすことはできます。
でも仮想マシン内は普通よりディレイが発生しやすいためかスクロールはカクカクで例の現象も
比較的高頻度で起こってた気がします。
直近での発生はVMではなく Jane Styleのスレ欄だったんだけど
・その前にシェルが一回落ちていて窓切替にやたら時間がかかる状態だった。
・トラックポイント操作してもスクロール制御ができてない(間に合ってない)うちにmbuttonを離してしまった。
のが原因だったような。(いやそもそもシェルが落ちてる段階で参考にならないか)
> NoHide=1
今すでに現象が起こってるので、後でOSリブート後に試してみます。
あとTW_POSTACTIONを設定してるのでそれ解除しても起こるかも見てみます。
ControlGetTextとかって「ahk_pid %pid%」が上手に使えない。 「ahk_id %id%」等なら使える。はまった。
Jane Doe Styleってなんでタスクバーで左右になべて表示ってやると 二つ分として扱われるの?これAHKでなんとかならん?
>>132 ,133
遅くなりましたがありがとうございました
>>144 一つのプロセスで窓はいくつでも持てるんだぜ。
>>145 以下を実行した直後なら・・・
WinSet, Style, -0x10000000, ahk_class TApplication ; WS_VISIBLE
質問です 特定の動作をさせる為のホットキーを設定ファイルで設定する方法はありませんか? 例えば設定ファイルに#Eと書かれていればwin+Eで動作 #Qと書かれていればwin+Qみたいな感じで
149 :
名無しさん@お腹いっぱい。 :2009/01/27(火) 20:15:43 ID:X4tsXHNf0
僕も質問です。 アプリ上で開いているファイルの名前を取得する方法ってありますか? 例えば、エディタでc:\***.docというファイルを開く。 c:\***.docはエディタ上ではアクティブな状態だとして、 このc:\***.docという名前をAHK上で取得したいのです。 無理かなあ。
>>149 一番お手軽なのはエディタ側でタイトルバーにファイルパス表示する設定にしといて
それ取得して加工すれば?
152 :
名無しさん@お腹いっぱい。 :2009/01/27(火) 20:41:15 ID:X4tsXHNf0
>>147 なるほど…常識…。はまると往々にして単純で当たり前の理由なんだなwまた間違えそうで怖い。
>>149 MouseGestureのコマンドラインを取得する関数が使える時もある。
俺が使ってるのはMenuHackerで、%arg%%titlepath%を使って、ポチエスに投げる。
メモ帳から使い慣れたエディタに開き直すときに使っている。
155 :
148 :2009/01/27(火) 21:56:28 ID:t0VmE1Ht0
>>154 設定ファイルから設定を読み込むのは出来るのですが
割り振るキーを設定に応じて変更する方法が無いものかと。
156 :
148 :2009/01/27(火) 22:05:14 ID:t0VmE1Ht0
読み違えてました Hotkeyコマンドで出来ますね すみませんでしたm(_ _)m
>>157 お疲れさまです
ちょうど今の時期、在宅でのPC仕事なんで(自宅警備じゃないよ)しばらくこれで酷使テストしてみます。
つか今日気がついたけどリモートデスクトップ上でもホイール相当のスクロールは効くんだな。
さすがにマウス下ウィンドウの認識まではしてくれなかったが。
>縦横どっちかにスクロールを固定するオプション
DenyBoth=1にしてみたらWinMergeでスクロールさせる時カクカクしなくなったヽ(´ー`)ノ
ありがとです
159 :
名無しさん@お腹いっぱい。 :2009/01/29(木) 06:09:04 ID:LOmhUipb0
QWERTY 配列の109キーボード用を dvorak 配列に変更しようとして #InstallKeybdHook #UseHook *z::; *+z::: と書いたところ、 Shift + z で + が表示されるようになりました。 意図しているのはもちろん : の表示です。 どのようにすればよいのでしょうか? またなぜこのように表示されてしまうのでしょうか? AutoHotkeyは最新版を使用しています。
+z::Send,: z::Send,; Remapは面倒な事があるねぇ。 これはキーコード送信でなくて、「キー置き換え」なんだわ。 つまり、 z::; と書くと以下のようになる、([]内はキー名) [Shift] +[z] -> [Shift] + [;] [Ctrl] +[z] -> [Ctrl] + [;] [Alt] +[z] -> [Alt] + [;] ってなる。 QUERTYキーボードだとおもうけど、キーに印字されたものを見れば・・・
*z::send,; *+z::send,:
>>160-161 ありがとうございます。sendでしたか。
*z::send,;
*+z::send,:
を記述すると常に ; が表示されるようになったので
もしやと思い
*+z::send,:
*z::send,;
と表記したらうまくいきました。
テンプレ>3
>>164 --165
そうでしたか
ありがとうございました
167 :
名無しさん@お腹いっぱい。 :2009/01/30(金) 20:57:31 ID:w6m+xv+i0
TrackWheelの中の人です。
>>139 の症状としては依然として再発する・・・orz
詳しく書くと非クライアント領域(タイトルバーとかメニューとかサイズ変更とか)でマウス押下が効かない。
いろいろググってみたけど、
新・なまず日記(このスレでは既出中の既出)のIME状態取得のところで、
AttachThreadInput の多用で問題発生とのこと。
ttp://endoh-namazu.tierra.ne.jp/diary/?date=200512 TrackWheelは 危なさそうなのは ControlClick と Send かなぁ。。。
あとは自前の 組み込み用の PostAction で A_Cursor 参照してる。。。
AHKのコマンドをあまり使わずに DllCall でゴリ押しすれば何とかなるのかなぁ・・・
ちょっと根が深いかもしれないので、同症状で悩んでいる人は Ini で NoHide=1 でよろしく
自分は頻発するわけじゃないので [Alt] + [Tab]で逃げている。
>>141 すっかり見落としてた。ソフトウェア層でやっているので無理。
Hotkeyコマンドでマウスボタンに割り当てているんで、何らかの方法(ホットキー割り当とか)で
Hotkey, *MButton, Off
とかで一時的に解除するとか
168 :
158 :2009/01/30(金) 21:53:26 ID:HlJEMNMH0
>>167 >A_Cursorの参照
>A_CaretX(Y)の参照
>ControlClick
>ControlGetFocus
>ControlFocus
>Controlコマンドの、Check,Uncheck
やばい。バリバリ使ってる。特にControl関係は最近作ってる奴でテストしまくってた。
ってことは現象が出るのはTWじゃなくて自分が書いたスクリプトだった可能性も大だ orz
ちなみにRC版導入以降、こちらでは問題は起こってないです。
(仕事が込んできてスクリプト弄る余裕がなかっただけかも知れないが)
> ちなみにRC版導入以降、こちらでは問題は起こってないです。
発生していないなら何よりだけど、、、
>>140 書いた段階で単純なバグ(コーディングミス)を見つけて直したので、
4日くらいは大丈夫だったので、発生頻度は確かに減った気はする。
だけどさっき出たんで・・・。
原因はこっちだと思うなぁ。
というか、列挙されたコマンドってAHKでは肝なところだと思うし、
他スレッドに長い間(マウス押下中ずっと)アタッチしっぱなしって、想定してないはず。
というか、これも自体が的外れな見解なのかもしれないけどorz
ちなみに、AHK の C++ のソースコードを分かりもしない癖にふいんき(何故かry で斜め読みしたら
1.0.42.02以降ではA_Cursor では実質使わないようになっているみたいだけど他は変わってない。
自分も今 ソース眺めてたんだけど、ControlClickもv1.0.45 以降の"NA"モードでは AttachThreadInput()使ってないみたい。 コメント読む限りでは AttachThreadInput()で何かしらの問題が起こることは作者氏も たぶん認識していて使用頻度は極力減らしているような印象。 (テキスト翻訳で適当に解釈してるから実際はわからんけど)
>170 あんまりそんな風には読めなかった。別のコメントならごめん。 ちなみに AttachThreadInput() は SetActiveWindow() するのに必要なはず。 // It was reported (and confirmed through testing) that this new NA mode (which avoids // AttachThreadInput() and SetActiveWindow()) improves the reliability of ControlClick when // the user is moving the mouse fairly quickly at the time the command tries to click a button. // In addition, the new mode avoids activating the window, which tends to happen otherwise. // HOWEVER, the new mode seems no more reliable than the old mode when the target window is // the active window. In addition, there may be side-effects of the new mode (I caught it // causing Notepad's Save-As dialog to hang once, during the display of its "Overwrite?" dialog). // ALSO, SetControlDelay -1 seems to fix the unreliability issue as well (independently of NA), // though it might not work with some types of windows/controls (thus, for backward // compatibility, ControlClick still obeys SetControlDelay). この(AttachThreadInput() と SetActiveWindow() を避ける)新しい NA モードは コマンドがボタンをクリックする時にユーザーがマウスを素早く動かしている場合に 信頼性が向上することが報告され(またテストを通じて確認され)ている。 加えて、新しいモードでは避けようとしなければ発生しがちであるウィンドウの アクティブ化を避ける。 「しかし」、対象のウィンドウがアクティブウィンドウである場合には、新しいモードは 古いモードよりも信頼性が高いとは言えないようである。さらに新しいモードには副作用が あるかもしれない。メモ帳の「名前を指定して保存」ダイアログで上書きするかを たずねるダイアログが表示されている最中に一度ハングしたことがある。 「また」、SetControlDelay -1 は同様に信頼性の問題を(NA とは独立に)解決するよう だが、動作しない Winow や Control が存在するかもしれない。 そのため、互換性のため ControlClick は依然として SetControlDelay の設定に従う。
アウチ、AttachThreadInput()でgrepかけたら、コメントで 「AttachThreadInput()を避ける」みたいなのが結構出てきたんで勝手に解釈してた。 SetForegroundWindowEx()とかの中でも使ってるし、WinActivateする度に呼ばれてるのか コーディングを工夫して避けるは無理そう。 普通のホットキー駆動だとユーザー操作が発生してからのアクションが多いから あまり問題にならないみたいだけど 間隔短くとってタイマーぶん回して高度なことやらせるのは避けたほうが無難?
そこまで分かる人でもAHKを使うんだな
2ストロークで特定の語句を出力したいのですが、 (以下では見やすくするため全角空白を使用してます) #v:: Input, InputChar, C I L1 T2,{Esc}, n, h if ErrorLevel=Match { if InputChar = n Send, win + v -> n if InputChar = h Send, win + v -> h } if ErrorLevel=Max { Send, %InputChar% } return これでは、 Win + v を押して n を押したときのみ正常に動作し、 それ以外の場合はまったく動きません。 意図しているのは Win + v, そして n で Send, win + v -> n Win + v, そして h で Send, win + v -> h Win + v, そして n と h 以外のキーで Send, win + v -> それ どこを変更すれば正常に動くのでしょうか
>>174 流行らせるページより
>MatchList
>「,」で区切って文字列を列挙する。
>入力内容がここに列挙したものに一致した場合、コマンドは終了しErrorLevelが「Match」になる。
>カンマ区切りだが、引数の区切りとは扱いが違い、カンマの前後の空白文字などは、文字列の一部とみなされる。
これが原因?
>>175 ありがとうございます!うまくいきました
名前を付けて保存ダイアログってスクリプトから出せないのかな? ファイル選択ダイアログを表示・フォルダ選択ダイアログを表示 はあるんだけどなー。
選択ダイアログを出して ウィンドウタイトルとかボタンのテキストとか書き替えて 無理からControlとかでテキスト拾って 保存用に利用してみるとかw
FileSelectFileでできるだろ?
>>179 リファレンスよく見たら保存ダイアログにする方法書いてあるな
気付かなかった
アイドル状態ってどうやって調べてるんだろ? 5分ごとに、アイドル状態ならば検索ソフトのインデックス作成を行うように設定してるのだが、 Civilization4っていうゲームをプレイ中に、5分ごとにフォーカス奪われちゃってすごく困ってる。 なんか改善策ないかなー
組み込み変数の A_TimeIdle や A_TimeIdlePhysical じゃ用はなさないってこと? というか、プレイ中と書いてあるけど、起動して放置中ってことか?
Civilization4がどこまでマルチスレッド対応してるかにもよるかもね。 ウィンドウでもプロセス検知でもいいから、ゲームが起動中かどうかで判断するのが一番簡単じゃない?
スレッド毎のCPU占有率調べて処理すればいいんじゃね 除外設定付けておけば望みの動作になると思われ
直前に閉じたウィンドウを開くスクリプトは書けますか?
>>185 無理。具体的に言ってよ。
アクティブウィンドウを再起動させるのならできると思う。
直前に閉じちゃったのなら、常に何かしら監視していないといけないから面倒かも。
ワークステーションがロックされてる、で、パスワードを入れて復帰する。 この直後に処理を挟みたい。 OnMessageとかでトラップなのかな?
>>186 操作ミスで閉じてしまったときに楽に復帰できたらいいなと思ったんだ。(´・ω・`)
190 :
185 :2009/02/02(月) 04:29:43 ID:ghjeIC8V0
>>189 サンクス!さっそく使ってみたので以下報告。結論としては不採用。
Alt + F4を押すとWinHideする仕組みらしい。で、
・GoneIn60sのアイコン右クリックして閉じたアプリを選択 ⇒ WinShowで復帰。
・指定時間後までに何もしない ⇒ WinCloseで閉じる。
なぜかWinKillでなくWinCloseだから、「保存しますか?」と出るはずのときに、
・指定時間後までは何もなしで閉じたように見える。→後で急にあらわれて「保存しますか?」
となる。これは気持ち悪い。
しかも右上の×でも同様なんだけど、こっちはもっとひどくて、位置が正確でないから
誤動作する場合がある。最小化ボタンの位置で反応したり、閉じるに反応しなかったり。
WinHideの仕組みはいいアイデアだと思った。
ちなみに窓の杜の紹介記事からバージョンアップしてて、今はv1.4。
DDWinというソフトの小窓をESCキーで閉じて 他のソフトの時は標準の動作をするようにしたいのですが Esc:: IfWinActive, ahk_class TDefForm { Send,WinClose } else{ Send,{Esc} } return だとDDWinの小窓では何も起きませんし それ以外のところでは xx hotkeys have been received in the last xxxxms Do you want to continue? というエラーメッセージが出てしまいます。
>>191 このスレでhotkeys have been receivedを検索。
特定のウィンドウでの動作は
#IfWinActive, ahk_class TDefForm
;ここに処理を書く。
#IfWinActive
って具合に書くといいよ。
>>192 ありがとうございます。うまく行きました。
なぜ情報を拡散させたがるのか。 ここと流行らせるページの掲示板で十分だろ。
196 :
187 :2009/02/02(月) 23:15:39 ID:1rUYw8J20
自己レス。 WM_POWERBROADCAST(0x218)じゃ捕まえられないっぽいので、 フォアグランド窓をとれるかで判断した。 SetTimer, HogeHoge, 1000 HogeHoge: WinGet, fgId, ID, A if (!fgId) { Loop { WinGet, fgId, ID, A if (fgId) break Sleep, 1000 } // ここに処理を書く } return
あるウィンドウがアクティブなときのキー設定を #IfWinActive, WinTitle 1:: F1 2:: F2 3:: F3 という感じで書いています。 そのウィンドウが非アクティブのときでも、 Win+Space 1 のように2ストロークキーで 同様のキー操作ができるようにしようと、 #Space:: Input, key, C I L1 T2, {Esc}, 1,2,3 IfWinExist, WinTitle ControlSend, , key という感じに書いたのですが、当然というか 1,2,3 が直接送られるだけで、F1,F2,F3 になってくれません。 If key = 1 ControlSend, , {F1} というように逐一書いていくしかないでしょうか? 定義を二重に書かないといけないのでできれば避けたいんですが…
残念ながら無理(なはず)。 窓使いの憂鬱(のどか)とかkeyhacでいう「キーマップ」とか「キープレフィックス」に相当するものはない。 強いて言えば同じサブルーチンに飛ばすくらい。 ex) Gosub, 1 ; 1のキーに割り当てられている機能を呼ぶ
ControlSend, , {F%key%} でできない? あと、そういう場合は Autohotkey_L の #if expression 使うと 楽に実現できそうな気がする。
>>197 せっかくAutoHotkey_L使ってるので、試してみた。
あとこのスレでURL出てなかったので出しておく。
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/ ;---------------------------------------------
#if WinActive("無題 - メモ帳")
or (A_ThisHotkey=="#Space"
and A_TimeSinceThisHotkey<=2000
and WinExist("無題 - メモ帳"))
1::msgbox, syori 1
2::msgbox, syori 2
3::msgbox, syori 3
#if
#Space::Return ; A_ThisHotkeyに記録するために必要
;---------------------------------------------
これでメモ帳がアクティブな時か、
メモ帳がある時にWin+Spaceしてから
2秒以内に各キーを押すと処理が実行されて、
そうでない時は普通に各キーが送られる。
ちなみにキーマップはこんな感じで書ける。 ;--------------------------------------------- keymap:=0 Exit #if keymap==1 1::a 2::x #if keymap==2 1::b 2::y #if keymap==3 1::c 2::z #If ; F12を押すたびにキーマップ切り替え F12::keymap++ == 3 ? keymap:=0 : ;--------------------------------------------- AutoHotkey_L便利だと思うんだけど… こういう需要あんまり無いのかな?
いや、あると思う。 窓使いの憂鬱とかでkeymapでの定義に慣れた人には断然分かりやすいとは思う。 というか _L って安定してる? ウニコード化してくんないかなぁ。
203 :
199 :2009/02/04(水) 00:50:50 ID:mEq9h9q70
>>202 環境によるかもしれないけど、むしろ
俺の環境では本家より安定してるかな。
WinXP SP3。
本家の使ってるとスクリプトリロードさせた時に、
たまにエラー出るんだけど_Lだと今のところない。
単に俺の書いてるスクリプトがおかしいのかもしれないが…
もし使う時に注意する事があるとしたら、
#if expression使う時に、時間かかる判定しないように
気をつけるくらいかな。一応タイムアウト時間も指定できる。
3ヶ月くらい使ってるけど今のところ不満は無いです。
Unicode化は…して欲しいね。
時間がものすごくかかる演算をDLLで組もうと思うんだけど 参考になるサイトとかないかな 中身は単純にfor文とかを大量に繰り返して結果を返す、といったものなんだけど ためしに extern "C" __declspec(dllexport) INT WINAPI extracter(int x){ return 5*x; } こんな感じのDLL組んでDLLCALLで呼び出してみたけど上手く動作しなかったんだ…
>>204 時間掛かる処理をさせるならLoadLibraryしてみたほうがいいよ
>204 多分呼び出し規約が stdcall になってるので関数名を extracter@4 にすれば呼び出せるかも。
207 :
206 :2009/02/04(水) 21:38:23 ID:Ut7+efCd0
補足。 dll 側のコードはそのままで、DllCall するときに extracter@4 で呼ぶって意味ね。VC だと _extracter@4 かも。 @以降の数字は引数に使用するスタックのサイズ。今回は int が 1 つなので 4。 gcc だと -Wl,-kill-at というオプションを渡すと @ 以降がなくなって extracter で呼べるようになるはず。 VC 側の同等オプションは知らね。DEF ファイル使えば制御はできると思う。
209 :
197 :2009/02/04(水) 23:30:00 ID:uksORcM50
白背景に黒い文字を書いた画像を用意して ImageSearchで*TransWhiteをオプションに指定したら真っ黒な場所に反応してしまう… 何か良い方法はないかな
初心者質問で申し訳ないんだけど、入力キー、回数、間隔時間を指定して 直前にアクティブなウインドウに対して、キー(コード)を送るスクリプトってどう書くの? 現状↓のような感じで詰まってる DefaultKey=Enter InputBox, OutputKey ,入力設定,KeyName で指定,,200,150,,,,,%DefaultKey% if ErrorLevel != 0 exit else counter = 1 Loop, 3 { SendEvent, {%OutputKey%} SetKeyDelay, 100 counter += 1 }
連続した入力 {BS 5}のように、「{}」で囲んで、右に数値を指定すると、複数回押すことができる。 って書いてるけど。
212の言うように SetKeyDelay,100 SendEvent, {%OutputKey% 3} とするか Loop,3 { SendEvent, {%OutputKey%} Sleep,100 } でいいんでね? あとIfでExitしてるからこの場合の動作には影響ないと思うが 文法上はElseのあと { } で囲わないとまずくね?
>>212-213 レス、サンクス
やっぱ質問が悪かったか。今分からないのが、
・入力キー、回数、間隔 を一括で各変数に入れる関数(方法)
・入力キーはKeyNameで指定じゃなく、キーコードを直接受け取りたい
という感じ。ま、挫折するまで調べてみる
アクティブウィンドウのプロセスのフルパスを Autohotkey単体で取得することはできますか? Winget, OutputVar, ProcessName, A で実行ファイル名は取得できたのですが それから先がわかりません
>>214 > ・入力キー、回数、間隔 を一括で各変数に入れる関数(方法)
こんな感じか?
HogeInputBoxを呼ぶと変数にキー名、回数、ディレイが入る
Gosub, HogeInputBox
return
HogeInputBox:
Gui, Destroy
Gui, +LastFound
Gui, Add, Hotkey, vKeyName
Gui, Add, Edit, vCount Number
Gui, Add, UpDown
Gui, Add, Edit, vDelay Number
Gui, Add, UpDown
Gui, Add, Button,, OK
Gui, Show
WinWaitClose, % "ahk_id " WinExist()
return
ButtonOK:
Gui, Submit
return
GuiEscape:
return
> ・入力キーはKeyNameで指定じゃなく、キーコードを直接受け取りたい
キー名から頑張って変換する・・・かな。
というか、キーコードって手入力前提でないの?
(上のサンプルだと KeyNameになるけど)
今押されているVirtualKeyCodeを得るならこんな感じ? #Persistent CoordMode,ToolTip,Screen SetTimer,TipView,10 Exit TipView: ToolTip, % GetAllVirtualKeyState(),0,0 Return GetAllVirtualKeyState(){ str:="",tf:=A_FormatInteger SetFormat, Integer, H Loop, 0x100 str:=str (GetKeyState("vk" SubStr(A_Index-1,3),"P") ? A_Index-1 "," : "") SetFormat, Integer, %tf% Return SubStr(str,1,-1) }
クリップボードに変更があったらその内容をテキストファイルに追記する、 というのを作ったのですが、下のだと数時間経つと使えなくなってしまいます。 AHKを再起動すればいいんですが毎回再起動するのも面倒です。 何か対策とか無いでしょうか? #Persistent Clipboard= OnClipboardChange: Run,"テキストファイルに追記するソフト起動" tooltip clip sleep,300 tooltip return
俺も過去にそれを作ったことがあった。 クリップボードバッファの領域に、スクショ画像などのテキスト以外の 巨大データが出現すると、エラーメッセージなしにAutoHotkeyが死んでしまう。 解決策は見つからなかった。うまい回避法はあるのかな?
>>201 を見て
キーマップのきりかえができることにおどろいたので
222 :
214 :2009/02/06(金) 05:58:59 ID:NAAOC5m30
>>217-218 こいつ・・・動くぞ、すげーー!
>というか、キーコードって手入力前提でないの?
最終的に send,{vkXX} という感じでやった方が楽かなーと思ったので
さて、
>>218 の解読作業に移ります。ありがとう!!
>>216 参考になりました
ありがとうございました
スクリプト内にGUIを表示するサブルーチンが複数あって、 それぞれのGUIの中で同じ名前のボタンを追加した場合、 ボタンを押したときに呼び出されるサブルーチンを区別することは できないのでしょうか? ↓のようにすると二重定義でエラーになってしまいます。 Test1: Gui, Add, Button, , 1 Return Button1: MsgBox, 1 in Test1 Return Test2: Gui, Add, Button, , 1 Return Button1: MsgBox, 1 in Test2 Return
押しいなぁ。 ボタン名省略時のデフォルトサブルーチンラベルまで分かってて、ボタン名重複時のところが分かってない、と。 もう一度解説読んでみ。
ん?もしかして Test1 と Test2 って別窓(GUI)にしたいのかな? だったら、GUI番号を変えた二つのGUIを用意するか、毎回破棄(Destroy)するとかすればいい。 どっちにしろサブルーチンラベルの重複で怒られるとは思うけど。
227 :
224 :2009/02/07(土) 15:46:42 ID:WmNZzOvm0
>>225-226 あぁ G オプションってこういうときのためか
Gui, Add, Button, GButton1inTest2, 1
でいけました。ありがとうございました。
語学関係のもの(英検、TOEIC、留学)がまったくない私が 語学について聞かれたらなんて答えるべきですか?
ジュワワワジュワワ、 ジュワジュワジュジュワワワワワ?
面接官「ジュワ!ワタシジュワワイイビョウインシッテルヨワワ」
Vista環境だと、コンマ使うショートカット(#,::Run,cmd みたいな) のが動作しないみたいのがえらい不便だ。 これだけでXPに戻しそう…
>>231 スクリプトに何か問題があるんじゃない?
Vista64Ultで普通に動く・
>>231 原因決め付けすぎわろた。
おいらもVista環境だけど、そのスクリプトでまったく問題なく動くぜ。
AutoHotkey ver 1.0.47.06
234 :
名無しさん@お腹いっぱい。 :2009/02/08(日) 20:56:33 ID:sclNqxNe0
AutoHotKey.iniに、ウインドウなどを定期監視するルーチンをつけくわえたいと思っているのですが、 上手く動作しません。 AutoHotKey.iniの最後に以下のように書き足して、reloadしているのですが、SplashTextがでてくれないのです #Persistent SetTimer, OnTimer, 1000 return OnTimer: SplashTextOn,,, MAGE... Sleep, 2000 SplashTextOff return
235 :
234 :2009/02/08(日) 21:13:15 ID:sclNqxNe0
SetTimer, OnTimer, 1000 をAutoHotKey.iniの先頭の方に記述したらいけました。 これだと、上記とSetTimerとOnTimerの位置がちらばってしまうので、 SetTimer, OnTimer, 1000 Goto, NextOnTimer OnTimer: SplashTextOn,,, MAGE... Sleep, 2000 SplashTextOff return NextOnTimer: +0::Send, 0000 : ;以下、ホットキーの設定が続く という風にAutoHotKey.iniの最初の方に書いたら、 今度は、NextOnTimer: の後のホットキーの入力が、起動時(reload時)に誤爆してしまうようになりました。 上記例では、0000が強制発動します。 この辺の挙動がいまいちわかりません・・・ どこかに記述はありませんでしょうか?
> AutoHotKey.iniの最後に以下のように書き足して ~~~~~~~ ってのがマズいんじゃないかと。 > #Persistent > SetTimer, OnTimer, 1000 この2行は多分ホットキー定義より後ろに書いてあると思うんで ファイルの頭に持ってきた方がいい。 頭から読んで順次実行するところ(Autoexecブロック)として扱われていない 死にコード担ってると思う。
うひ。解決してやがるw
ttp://lukewarm.s101.xrea.com/Scripts.html#autoexecsection > スクリプトが読み込まれると、最初にReturnかExitが実行されるか、
> ホットキーラベルが記述されている行やスクリプトの終わりに達するまで、スクリプトが実行される。
> この部分のことを、auto-executeセクションと呼ぶ。
これは Gotoがあっても同じなわけ。
で、ラベルって関数じゃないから上から読んで実行するから
Gotoで飛んで先のコードも順次実行するだけ。
要は
> Goto, NextOnTimer
を
return
にする
238 :
234 :2009/02/08(日) 21:33:53 ID:sclNqxNe0
>>236 なるほどホットキー定義より先に書かないといけないんですね。
>>234 のコードを丸ごと先頭に書いても問題ない感じでした。
returnしてますけど、後ろのホットキー定義はちゃんと定義されるんですね・・・。
いろいろ試してみて、
>>234 のコードをAutoHotkey.iniに書かずに、
別ファイルに書いて、最初に#includeするようにしても問題ない感じなので、
管理楽だしそっちで行ってみようと思います。
ありがとうございました。
239 :
234 :2009/02/08(日) 21:34:56 ID:sclNqxNe0
>>237 記述もあったのか!理解が深まり助かりました。
ありがとう。
キーのリマップで、キーリピートしないようにするにはどうしたらよいですか? 回数指定で1としても、Pauseキーなどからリマップしたものは リピートしてしまうようなのですが・・・
リマップは所詮リマップなので キーを Send したあとに、キーが離されるのを待つようにすればいい KeyWaitを使うと楽
242 :
240 :2009/02/09(月) 23:33:15 ID:s0aAmitG0
>>241 なるほど、うまくいきました。ありがとうございます。
Pause::
KeyWait, Pause
Send, {キー}
return
243 :
名無しさん@お腹いっぱい。 :2009/02/10(火) 00:02:17 ID:y3Hmn7JH0
このソフト今しがた知ったんだけど使えるようになるとかなり便利そうだなw コンピュータ言語知らない俺には敷居高いが・・・ 10分毎に同じ操作を永遠に繰り返させるのってどういうコードになるんだ?
タイマーでおk
245 :
名無しさん@お腹いっぱい。 :2009/02/10(火) 00:08:18 ID:y3Hmn7JH0
>>244 上でも出てる
SetTimer,OnTimer,xxxxxx
でいけるわけね納得
AutoHotkey楽しすぎ ちょっとした自動応答的なボタン押下とか (AutoPushButton win32がVistaで動かないし、ウインドウ検知方法も融通も利かなくて長い間代替探してた) 長い間最前面にでしゃばってくるスプラッシュウインドウを後ろに回したりとかしようとして、 Delphiでプログラムでも組むか、マンドクセ('A`)と思ってたことが、 思いついてからものの数分でできてしまうじゃないかー。 すばらしいソフトだ。 簡易言語だと心の底で馬鹿にしてて正直すまなかった。 ホットキー定義以外のことにも使い出してから、やたら普段の操作が楽になったよ。
ウィンドウを作成してチェックボックスをクリックしたら タスクトレイに収納されてしまいます チェックはできているようなのですが どうすれば常にウィンドウを表示できるのでしょうか Gui, Add, Text, x10 y20 w90, test Gui, Add, Checkbox, vStateOK gCheckOK, ok ? Gui, Show, x100 y100 h100 w110, aaa Return CheckOK: GUI, Submit OK = StateOK Return #a::MsgBox,OK: %OK%
タスクトレイにあるアプリを右クリックしたときに出るメニュー これをPostMessageで実行したいのですが WinTitleには何を指定すればよいのでしょうか アプリのウィンドウを指定しても駄目みたいです
>>247 GUI, Submit , NoHide
「NoHide」を指定すると、ウィンドウを非表示にせずに、変数への反映だけを行う。
>>248 とりあえずDetectHiddenText, On|Off を使ってるかどうかだね。
はい間違えたー DetectHiddenWindows
251 :
247 :2009/02/10(火) 04:38:07 ID:4LTAENh50
252 :
248 :2009/02/10(火) 07:49:43 ID:s6avSLrT0
>>249 ありがとうございます
基本的なことだったんですね
スレ汚し失礼しました
どうにもうまくいかないので教えてください。 Firefoxでステータスバーに出るURLを取得しようとしているのですが StatusBarGetText WinGetText WinGetText では空白のままで何も取得できません。 どなたかFirefoxのステータスバーの情報を取得する方法を教えてください。
Window Spy で見たら分かると思うけど ステータスバー(に見える所)のクラスが ahk_class MozillaUIWindowClass なはず。 で、これって普通のウィンドウのステータスバーとは違ってAHKのコマンドじゃ情報とれない。
operaとかffとか何かと難しいわな
256 :
253 :2009/02/11(水) 21:26:56 ID:oCH0A50w0
皆様どうもありがとうございます。 どうにもならん事もあるのですね。
流行らせるページのMouseGesture.ahkを使ってるのですが、他のスクリプトと同時にincludeができません…… #include MouseGesture.ahk #include aaa.ahk return とするとタスクトレイの右クリックメニューにはMouseGestureのメニューが追加されますが MouseGesture自体は動きません。aaa.ahkは読み込まれているようです。 #include 1.ahkの行を消すと普通に動きます。 説明のページに書いてある「Gosub,MG_Init」なども適当に追加してみましたが、 あまり変わり映えがしません…… 何が悪いのかどなたか教えていただけませんか;
じゃあ別々に動かせ
ブラウザ上の画像を保存する関数ってないの?
ない
作れば良いだけだがな 初心者は関数ってのは組込のを使うだけだと思ってるようだが プログラムでもスクリプトでもこういった言語では 関数ってのは作るものだから まあ中には関数が作れない言語もあるけど、これは該当しないし
作るってもキーマクロでそ
いや、あらゆる処理が作れるだろ、dll呼び出しもできるし
AutoScriptWriter使えばキーマクロっぽいこともできるんだよな ほとんど利用したことはないが。 >257 例によってAutoExecuteセクションの記述飛ばしてて引っかかってるんじゃね?
>>263 確かにそうだけどさ、、AHKの範疇は超えちまうわな
AutoScriptWriter はテキストエディタのマクロみたく操作がコードになってくれるから
全然コマンドを知らない人が後からマニュアル見ながら改変するのには便利かなぁとは思う。
出来たコードはかなりしょっぱいけど・・・
マクロ登録の貧弱さという点で、UWSCとかより弱いと言われている点だな
>>259 (比較的)楽な方法
・キーマクロで何とかする
・適当なダウンローダ探して連携する
・URLDownloadToFile でhtmlを取得して、リンク抽出して個別に落す
そりゃ、comやdll使えば何でも出来るだろうが、
やはりそこは作成者・利用者の技能と、それを現実的なコストで作れるかというのも考慮すべきではないかと。
ああ、ID:EUev75pp0 の言ってるキーマクロっていうのは Send や MouseClick によるキーエミュレーション動作のことなのか。 まんまエディタのキーボードマクロみたいな、ユーザー操作を記憶して 再実行してくれるものを想像してたから混乱したわ
C などの unless って Autohotkey では使用できないのでしょうか unless に相当する物をしようしたいときは if hoge = 1 else { msgbox,hello! } こういう風に書くしかないのでしょうか それとももっとスマートな書き方があるのでしょうか
論理否定
if hoge != 1
271 :
名無しさん@お腹いっぱい。 :2009/02/14(土) 08:20:50 ID:iCnD4vMa0
>>269-270 ああ、なるほど
単純なことなのに分かっていませんでした
ありがとうございます。
>268 C に unless はないべ。Perl とか Ruby にはあるらしいが。
unlessって使う機会ある? ド・モルガンの法則を使えばいいだけじゃん。
iniファイルに書いたkeyをHotkeyにアサインした場合ってどう書くの? test.ini +++++++++++++++++++++ [hoge] Key=#z +++++++++++++++++++ IniRead, h_key, test.ini , hoge, Key ;MsgBox , "%h_key%" ;ちゃんと値は取得できている h_key:: ;↑ダメ %h_key%:: ;↑ダメ "%h_key%":: ;↑ダメ
Hotkey, %h_key%, Label で普通に割り当てできるが?
惜しいなぁ。実に惜しい。
まぁ、
>>275 の言うとおりなんだけど。
ラベルの方を動的に変えようっていうのはちょっと驚いた。
ホットキーラベルもサブルーチンラベルの一つ。
かつ、有効なホットキーラベルとして使える文字で構成されていなければならない。
ソース見たりしたわけじゃないけど、
AHKは起動(初期化)時にスクリプトを全部見て「::」のあるラベルを探して、
Hotkey, 「キー名」, 「キー名」 相当の事をしてホットキー登録しているはず。
で、これは実行するスクリプトのAutoexecブロックより先に行われている(はず)。
で、なんで
>>274 が駄目かっつーと
エラーダイアログ見れば分かると思うけど、実行時エラーじゃなく、
パース時のエラー(文法エラーとか)でしょ。
初期化時には、 h_key なんつー有効なホットキーはないし、
ユーザが使える変数なんかも無いわけで初期化エラーになる。
上から順に書いてあってその通りに処理しているように見えるけど実はそうじゃない。
IniRead までたどり着いてない。
WinSet,Topの >システムの設定によっては動作しない。 の条件ってなんだろう?
>>276 なぁオマエ一言多いとかリアルで言われないか?
トレイアイコンをクリックしたら実行するってどうやるの?
なんつーか、大したことないんだが274みたいな奴って発想力が面白い。 プログラムってスキルも大事だが発想力だと思う瞬間だったよ。
以上、本人でした。
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
SetTimerで WinGetPos,, Ypos,,, A if (Ypos <= 30) WinMove, A,,, 19,,,, Ypos = return というのを回していると、Firefoxで右クリックメニューが一瞬で消えてしまいます。 間隔を500〜2000にしたり、同じ事をLoopでやってみても同じで、この現象が起きるのは Firefoxだけです。 どうかアドバイスお願いします
if(Ypos <= 30 && Ypos != 19) にしたらええんじゃないのか?
288 :
名無しさん@お腹いっぱい。 :2009/02/16(月) 03:19:38 ID:axPHiozx0
>>288 GuiかMenu。
ポップアップメニューだと一回一回消えるから、Guiでつくればいいかもね。
>>281 流行らせるページの「タスクトレイアイコン操作」で望みが叶うかも。
何を望んでいるのかはわからんが。
>>286 簡易の絶対領域みたいだね。TTBaseプラグインでもあったな。
>>289 なるほど
その手がありましたか
やってみます
>>291 質問者じゃないけど、どういう事か教えてくれまいか
ggrksが来るぞ
あれ?違った?
>>295 みたいなことをしたいのかと思ったわw混乱させてゴメンね。
>>290 それってタスクトレイアイコンを直接操作するためのものじゃないの?
>>287 即レスくれたのに遅くなってすみません、
if(Ypos <= 30 && Ypos != 19)にしたら快適動作で幸せです。
&& Ypos != 19が必要だった理由が今ひとつ分かっていませんが勉強してみます。
有難うございました
299 :
名無しさん@お腹いっぱい。 :2009/02/17(火) 00:33:23 ID:Uxje6XHz0
guiでウィンドウの中に exit ボタンを作成し そのボタンを押すとそのウィンドウを閉じるだけの物をつくりたいです はやらせるページのにあるものを使用して次のような物を作ったものの うまく動きません Gui,Add,Text,,testtest GUI,Add,Button,,Exit gui,show ButtonExit: ExitApp どこを直せばよいのでしょうか
gui,show return ここで終わらせないとExitAppまでいっちゃうぞ。
>>300 あ、普通に動きました
そりゃそうですね
ご指摘ありがとうございます。
302 :
274 :2009/02/17(火) 01:36:11 ID:ChZCT6AI0
>>275-276 ありがとうございます。無事できました。
276さんの書いていることは自分なりに勉強になりました。
便乗するようで悪いのですが、多重起動をしようとする際現状だと英語のメッセージが出るんですが
Menu, TRAY, NoStandard
のように消して、日本語にすることって可能でしょうか?
ドッカーン! (⌒⌒⌒) ||| _____ /::::::::::::::::::::::::::\〜プーン /:::::::::::::::::::::::::::::::\〜プーン |:::::::::::::;;;;;;|_|_|_|_|〜プーン |;;;;;;;;;;ノ∪ \,) ,,/ ヽ〜 |::( 6∪ ー─◎─◎ )〜 |ノ (∵∴ ( o o)∴)〜 | ∪< ∵∵ 3 ∵> ムッキー! \ ⌒ ノ______ \_____/ | | ̄ ̄\ \ ___/ \ | | | ̄ ̄| |:::::::/ \___ \| | |__| |:::::::| \____|⊃⊂|__|__/ / |:::::/ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
やろうと思えば、ウィンドウの監視と COntrolsettextで出来なくもなさそうだけど…
若干スレ違いかもしれませんが、 WindowsのHDDコントローラ(ATA)のモードが、 UDMAになってるか、PIOになっているかを、 ahkから読み取るには、どのようにすればできそうでしょうか。 何台もPCを使っていると、いつのまにかPIOになっていることがあったので、 それを起動時にチェックしてバルーン通知したいと考えています。
レジストリの値を読むとか?
括弧 { を入力した後 } を加えてカーソルを中に入れるように ~+[::Send,}{left} return と記述したのですが } と{left}しか送られません 他の括弧は たとえば<> 同じように ~+,::Send,>{left} return でうまくいってるのですが、どのようにしたら {} でも成功するでしょうか?
俺も
>>231 みたいに「 , 」(コンマ)を使うホットキーが使えなかった。
コンマ使うホットキーを今使いたいわけじゃないが、
もし必要になった時に困るので調べてみた。OSはWinXP SP3。
以下試したこと
×Hotkeyコマンド( Hotkey,% ","〜 )
×Hotkeyラベル( ,:: 〜 )
×GetKeyState(",","P")→状態取れず
×本体バージョンをあれこれ変えた
○別PCで同じスクリプトを試した(WinXP SP2)
○「 vkBCsc033 」形式で書く
vkBCsc033を使った方が確実かもしれない。
>>219-220 これの解決法ないでしょうか?
似たようなスクリプト作ったんですがやはり数分すると
クリップボードの監視が無効になってしまいます。
timerでreload仕込むとか
OnClipboardChange: じゃなくて ClipWaitで監視してみるとか? あとはAPI のクリップボード関数で直接弄るか。 関係ないが、クリップボード内容がEXCELデータのときに ClipboardALLで丸ごと待避しようとするとExcelがハングする。 DllCall("GetClipboardOwner",Int) でオーナーウィンドウを調べて Excelがオーナーの時は テキスト内容だけ保存するようにして回避してるがちと面倒だ。
そういや昔あったクリップボードユーティリティースレでもこの手の話題あったな。 確かクリップボードの変更通知はクリップボードビューアチェインに接続されたソフト間での バケツリレー方式で伝えられていくので、間に行儀の悪いソフトがいるとチェインから勝手に 外されてしまって、それ以降の変更通知が受け取れなくなるって話だったような。 巷によくあるクリップボード系ユーティリティーでは定期的にチェイン接続し直すことで 対策を取ってるとかだったと思う。 よくわからんがAHKでも ONMessage()で CallBackサポートされてるし、具体的なサンプルは clcl のソースとか見ればたぶんできるんじゃね。 英語できるんならAHK作者氏に対策方法添えて要望出すのが手っ取り早いとも思うけど。
流れ無視して悪いがさっぱり分からんので、教えて頂きたい 例えば、 -t C:\Documents and Settings C:\Program Files というような文字列を、 -t "C:\Documents and Settings" "C:\Program Files" というように、パスっぽい文字列に引用符をつけるには、 どうすればいいのだろうか?
文字列の中に実在するパスがあったら囲む、くらいじゃないの
適当に作った。かっこ悪い。 Hoge(str) { StringSplit, arr, str, %A_Space% idx := 0 Loop { if (idx++ >= arr0) break c := arr0 - idx Loop { p := arr%idx% Loop, %c% i := idx + A_Index, p .= A_Space . arr%i% if FileExist(p) { arr%idx% := """" arr%idx%, idx += c, arr%idx% := arr%idx% . """" break } if (c-- < 1) break } } Loop, %arr0% ret .= ((A_index > 1) ? A_Space : "" ) . arr%A_Index% return ret }
>>316-317 ぐはっ、わざわざ作って頂けるとは!
よくそんなすぐに作れるな、初心者からすれば驚愕ですよ
ありがとー
vistaじゃFileSetTime使えないのかな
320 :
名無しさん@お腹いっぱい。 :2009/02/21(土) 21:01:51 ID:FzZoDrMY0
FirefoxにAlt+Rで、戻るを割り当てたいのですが、 autohotkeyからPostMessageを送って設定することは可能でしょうか? 可能であるなら、下の0x111,28690,0,,A に相当する値をお教えいただけないでしょうか? m(__)m !R::PostMessage,0x111,28690,0,,A ;// 戻るを割り当てたい firefoxでPDFを開くとフォーカスがacrobatに奪われるので、 autohotokeyを使って、戻るのキーを割り当てられないかと試行錯誤しております
うちは↓でいける @Fx3.0.6 on XP SP3 #IfWinActive, ahk_class MozillaUIWindowClass !Left::Send, {Browser_Back} !Right::Send, {Browser_Forward}
322 :
320 :2009/02/21(土) 22:10:01 ID:FzZoDrMY0
自分も前から気になってたけど、FirefoxはSendMessageとかPostMessageは受け取らないのでしょうか? 非アクティブのままにautohotkeyから操作したいんですけど?
ご存じの通りマルチプラットフォームのものでWin専用って訳じゃないから、
ウィンドウメッセージ受けとってもスルーされるものが多いと思う。
WM_MOUSEWHEEL とか WM_KEYDOWN/UP などは受けとってそれなりに動く。
メニューバーやステータスバーもウィンドウズのものじゃなく独自に作ったもの。(
>>254 参照)
Firefoxだけじゃなく Java とかもそうだけどそういうのをコントロールするのはちと厳しいね。
確実性には乏しいかも知れんが ControlSend か ControlClick あたり試してみたらどうだろうか
>マルチプラットフォーム これをすっかり忘れてました、そう言われると出来なくても当然って感じですね ありがとうございました。
>>325 ありがとうございます。
今ちょっと試してみたら、ControlSendでなりそうです。
Enterを右Ctrlにするやり方がわかりません。 Enter::RCtrlでBSを入れようとすると Enter+Hで1回はBS入るけど、 Enter押したままもう一度Hを入れると こんどはそのままHが入力されます。 どうしたらいいんでしょうか?
329 :
名無しさん@お腹いっぱい。 :2009/02/23(月) 07:31:59 ID:xVptRsNb0
コロンのhotkeyに割り当てる方法はないでしょうか? :::Send,{A} ;// : をAに割り当て vkBAsc028::Send,{A} ;// : をAに割り当て のどちらで設定しても、:のhotkeyが有効になりません セミコロンだと以下で割り当てられるのですが… vkBBsc027::Send,{A}
330 :
名無しさん@お腹いっぱい。 :2009/02/23(月) 21:29:51 ID:6awX2jgS0
結構書き方違う
mayuでは難しい部分を、最近ahkで作り始めました。 VIMが1枚だけ存在したらアクティブに、 2枚以上存在したらリストを表示するようにしたいのですが、 以下の状態で既に詰んでます...どなたかご教示願います。 #^+!f2:: SetTitleMatchMode,2 WinGet, title, Count, - GVIM If %title% = 0 MsgBox, none else if %title% = 1 MsgBox, vim else MsgBox, %title% ウインドウ数は取得できてるようなのですが...
If title = 0
334 :
332 :2009/02/24(火) 04:06:13 ID:mnDWmi6d0
変数は常に%%で囲むっていう風に統一してくれればいいのに。
if 1 = 0 こんな書き方になっちゃうもんなぁ。
文字列リテラルは一般の言語様式に合わせてくれた方がいいな シングル・ダブルクォートで囲むとか
SandS.ahkの2008.09.21版かそれ以降のものがほしいのですが、どなたかお願い できないでしょうか。
あぷろだにまだ上がってるよ
http://lukewarm.s101.xrea.com/up/file/089.zip でも SandS だったら前スレ264のがシンプルかつスマートでいいと思う。
> 264 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/09/21(日) 22:24:04 ID:jd9yjK/i0
> 自分の Shift & Space はこれ。
>
> Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 200 ? " " : "")
> +Space:: Send, +{Space}
> >+Space:: Return
> Space:: RShift
>>339 どうもありがとうございます。とても助かりました。
(A_TimeSincePriorHotkey < 200 ? " " : "")
てあたりが気がきいていると思いました。
最長マッチのHotstringを作りたいのですが どうすればよいのでしょうか
Feb 25, 2009 Version 1.0.48 is released.
パッチ等を当てずに安心して2バイトコードを使える日は、いつになるのだろうか・・・
ttp://www.autohotkey.com/changelog/ の適当な訳
1.0.48 - February 25, 2009
■互換性
後方互換性に影響するであろう変更は、今回より、変数に格納された浮動小数点値が高精度なったこと。
数値精度の差に依存するスクリプトは精査して、更新する必要があるかも。
"SetFormat Float" (例: SetFormat, Float, 0.6) を *各所* で利用することで互換性が維持できるはず。
「SetFormatフロート」は高精度値を不活化するけど、新しい速い浮動小数点演算のうちのいくらかを使わない。
■パフォーマンス
このリリースの主なテーマはよりより速い実行。
スクリプトはほとんどすべてより速く実行できるはず- 特に式とか整数の評価の多用では(場合によっちゃ通常の3倍!)。
完全なる恩恵を得るには、スクリプトは、SetFormatを使用しないようにするべきか、あるいはSetFormatの速いモードを使用するべき。
■性能改善 - 式と関数のコンパイルをコッテリとさせて、より速くなった(とくに複雑な製数式で、カンマも含む) - 変数に格納されたバイナリ数値をキャッシュさせて文字列(から/へ)変換するのをやめるようにした。これで変数の算術演算が速くなった。 - 式やマッチ/比較コマンド内でのリテラルの数値をバイナリ数値とするようにしたことにより速くなった。例) X+5 とか "if x > 5" - ブロックを持つループやIFやELSEを "{" をスキップすることで速く実行できるようになった。この結果、"{" が ListLinesで省略されるようになった。 - スレッド作成のパフォーマンスの改善、OnMessage(), RegisterCallback(), GUIイベントの rapid-fireスレッドを補佐する。(註:よくわからん) ■既存スクリプトに影響するかもしれない変更点(トップで記述されているより高精度な浮動小数点以外のもの) - "SetFormat, Integer, Hex" が有効な場合、リテラルの10進値を変数に格納するときに16進数に変換する。これは普通表示用途なはず。 - OnMessage()パフォーマンスについて、メッセージ番号とHWNDは無条件で16進数でなく通常の数値としてやってくる。これは通常表示用となはず。 - パフォーマンスにおける様々な改良を達成するために、スクリプトは今よりちょっと多くのメモリを使用する。(変数と式の数に比例している) - if var is time" と "YYYYMMDDHHMISS"形式のタイムスタンプを変更・修正し、月の範囲が1-12内に無い場合不正なものとして認識するようにした。[ニックありがと] - Dynamic関数呼び出しを変更・改善し、関数に定義されたパラメタ数よりも多いものも許容するようにした。このときパラメタは評価はされるが破棄される。[Lexikosが開発(註:Autohotkey_Lの人)] ■その他の変更点 - Autohotkey_Lより追加 → IsFunc() / while-loop / assume-static / A_IsPaused / A_IsCritical / WheelLeft と WheelRight - NumPutで UInt64をサポート - UPXを変えた
バグフィックスは面倒なので割愛w #if は取り入れなかったのかぁ・・・残念
複数のウインドウを高速に一度に前面にもってくることってできないでしょうか? 今は、10枚くらいあるウインドウをWinActivateとLoopで前面化を行っていますが、 かなりまったりと順番に前面にでてきてしまいます。 もとパッっと出すことはできないものかなあと思いまして。 今はこんな感じでやってます。(指定のexeのウインドウを全部前に出す例) +^!e:: Process, Exist, MageMogeChart.exe if ErrorLevel = 0 return WinGet, id, list, ahk_pid %ErrorLevel% Loop, %id% { StringTrimRight, this_id, id%a_index%, 0 WinGetTitle, this_title, ahk_id %this_id% WinActivate, ahk_id %this_id% } return
SetWinDelayでコマンド発行後のウェイトを指定してやる。 ウィンドウの重なりが逆順になると思うけど。 v1.0.48用で書いてみた SetWinDelay, 10 Process, Exist, (ここにExe名) WinGet, list, LIST, ahk_pid %ErrorLevel% while list>0 { WinActivate, % "ahk_id " list%list% list-- }
DELL LATITUDE E6400でTrackWheel(VER. 20081206)を使ってたんだけど しばらくぶりにバージョンアップしようと最新版/RC版に変えてみたら中ボタンに反応しない。 なんてこった。
ショートカットキーが付いてないソフトのボタンにahkでキーを割り当てたいんですけど各ボタンを指定するにはどうすればいいですか?
ものすごい放置してた。久しぶりにソース見た。思い出すのに時間がかかった。
>>349 AHK v1.0.48 だと DllCall の Return Type を指定するとうまくいかないところがある。
983行目の最後の
,"Int"
を外すと動くかもしれない。
というか、反応しないって事はホットキーのアサインがうまくいってないかも。
全く構造が違うので、Iniは去年のものは流用できないっす。
>>350 1) ControlClick を使う
WindowSpyで独自のボタン情報がとれるなら 直接指定モードでいいはず。
情報がとれないなら、座標指定モードで(ツールバーならこっち)。
2) ツールバーのコマンドを調べてウィンドウメッセージを送る(玄人向け)
ttp://lukewarm.s101.xrea.com/myscripts/index.html の "Inspecting Toolbar IDs" を使って
PostMessage を使って WM_COMMAND を送る
352 :
349 :2009/02/28(土) 07:36:34 ID:ZNlNraZX0
>>351 どうも
・1.0.47でも1.0.48でもダメ
・1.0.48で983行目の最後の,"Int"外してもダメ
・iniは流用していない
で、iniのButton=MButtonを=RButtonにしてみると反応する。スクロールもできる。
けどボタンを離してもスクロールのモードから戻ってこない。
てな状況です。
>>352 中ボタンで反応しないのと、右ボタンで暴走したままなのは別事象っす
中ボタンの方だけど、メイン画面開いて Ctrl+H かメニューから View→Hotkeys... でホットキー一覧出して
m-hook *MButton
って出てたら、ホットキー登録は問題ないはず。なってないなら大問題・・・。
そうなっているのに動かないなら他のユーティリティが影響していると思われる
確認をお願い
> RButtonにしてみると・・・モードから戻ってこない
こっちはバグですな・・・
間違えた記述のあるサイトのソースを丸々パクっていたため。考えもせず置換して使ってたorz
誤: TW_RBUTTONDOWN:=0x205 , TW_RBUTTONUP:=0x206
正: TW_RBUTTONDOWN:=0x204 , TW_RBUTTONUP:=0x205
650行目あたりから,、それぞれ2カ所あるっす
# 色々直したら zip で置き直す予定
354 :
349 :2009/02/28(土) 22:00:14 ID:ZNlNraZX0
>>353 > m-hook *MButton
出てます。
他のユーティリティか、うーん。旧バージョンは動くのになー。
とりあえずmsconfigで診断スタートアップにしてみたけどダメでした。
RButtonではちゃんと動くようになりました。
旧verで動かしてたんだからそこに問題はないとは分かるんだけど、一応って事で ・・・そうなると機序的に何処に問題があるかは、今はちょっと分からないっす 一応、ソースもう一度読み直ししてみるっす
356 :
350 :2009/03/01(日) 03:43:58 ID:Rc2HQ5QJ0
>>351 ありがとうございました
ControlClickでいけました
357 :
349 :2009/03/01(日) 20:30:20 ID:GJkhTa1h0
>>355 お手数かけてすまそ。
中ボタンに反応しないって書いたけど、
TWを起動している状態ではアプリケーションでの中クリックも効かなくなってるので
TW自体は一応反応してる気がします。
>>348 SetWinDelay で指定してみたら、瞬時にとはいきませんがかなり早くなりました。
最新のはwhile使えるようになったんですね
ありがとうございました。
AutoHotkeyでmacのDashbordみたいなの作れないかな と自分で無理なことを言ってみる
ダブルクリックとドラッグの挙動をカスタムしたいんですが、見つかりません コマンド教えてください
+WheelDown::WheelUp このスクリプトでしばらくは正常に動作するのですが 71 hotkeys have been received in the last 577ms. というメッセージが出てきます。 どういうことでしょうか?
スクリプトの冒頭で #MaxHotkeysPerInterval 200 と書くと良い
#MaxHotkeysPerInterval 300でいけました ありがとうございます。
Dllcallを使いたいのですが、構造体というものがわからないのでちょっと質問させてください。 AHKで構造体を使うというのは、 メタボかどうかを判断したいので、健康診断の記録から ・体重と腹回りの項目を見ろ(構造体) ・上から3行目の数字と、上から7行目の数字を見ろ(AHKの強引な手段) といった感じで、メモリの位置を直接指定しているといった認識でおkでしょうか。
Cも何も分からんけどAHKでゴリゴリDllCall使っている漏れの私的な見解 > メモリの位置を直接指定しているといった認識でおk たぶんそう 構造体って言語仕様でも何でもなく、 「ある番地を起点に確保したメモリの使い方はこうするんだぜ」 って決め方だと思ってる。(言語でサポートされているのは使うのは楽らしいけど。) だからVarSetCapacityとかでメモリ領域確保してアドレス渡しすれば結構使えちまう。
366 :
名無しさん@お腹いっぱい。 :2009/03/04(水) 23:33:02 ID:oTTwde4w0
suspend 時のアイコンを変更できない物でしょうか?
>>367 いやコンパイルせずにソースを実行するときに
アイコンを変更することができない物かと
試行錯誤をしていました
無理っぽいですね
ありがとうございます
会社でahkを使ってたら、Hなダイヤルアッププログラムと誤解された
A(在り得ないほど) H(えっちな) K(娘通信) ?
>>366 メニューは作り直すしか無さそう。
menu, tray, NoStandard
menu, tray, icon, shdoclc.dll, 1, 1
menu, tray, add, Suspend Hotkeys, suspend_hotkeys
menu, tray, add, Exit, ExitSub
return
suspend_hotkeys:
suspend
menu, tray, icon, shdoclc.dll, % A_IsSuspended+1 ", 1"
menu, tray, togglecheck, Suspend Hotkeys
msgbox, suspend
return
#s::
suspend, permit
gosub, suspend_hotkeys
return
ExitSub:
ExitApp
あ、俺勝手にトレイアイコンの事だと判断しちゃったな・・ 違ってたらスマン
>>371-372 おお、これで十分です
トレイアイコンの変更を意図していました
ありがとうございます。
会社ではトレイアイコンは常に非表示に設定してる
だからどうした。
376 :
名無しさん@お腹いっぱい。 :2009/03/06(金) 02:31:08 ID:6lo5rU0D0
ctrl と j でエンターキーを押した動作をさせたいのですが ^j::enter と書くと、ctrlとjが押し下げられているままとなっているようで、 実際には ctrl とjを押しながらエンターキーを押す動作となってしまいました ^j::Send,{enter} と書いても、ctrlが押し下げられているままとなっているようでした そこで ^j::Send,{Blind}{Ctrl Up}{enter} と書いたら一回目の入力は成功するものの、 {Ctrl Up}のせいで次回以降 ^j にヒットしなくなってしまいました ctrl と j でエンターキーを押し、かつそれを連続して入力する設定は可能でしょうか?
>>376 ^j::Send,{enter}
で何の問題もなくエンター打てるけど?
>>377 キーの動作を見てみると、コントロールキーも一緒に送信しているようなのです。
fenrir 経由でx-finderを起動するときに
コントロールキーも一緒に送信されると
多重起動されてしまいます
これを防止したいと思いました。
通常のアプリケーションでは何ら問題ないようだとは
うすうす感じていますが……
さらに ^j::Send,{Blind}{Ctrl Up}{enter}{Ctrl Down} としたらどうなの
>>379 それなら大丈夫そうです
ありがとうございます。
>>359 俺は逆だな。macでAutoHotkeyが欲しい。
382 :
名無しさん@お腹いっぱい。 :2009/03/06(金) 22:52:29 ID:gMTAf0z20
タスクトレイのアイコンをダブルクリックしたら hello!と表示させたいのですが、できますか? Gui の Menu の項目を読んでもわかりません Click, ClickCount あたりを使えばよいのでしょうか?
>>382 できる。
トレイにメニュー項目を追加してデフォルトにする
AHKのGUIが便利すぎるので、フロントエンドにAHKを使い、パラレルポートの制御をしたいです。
用途は機械制御(赤外線の人センサーによる出入り回数の把握)で、数個のLEDの点灯制御と、
10bps(10kじゃないです)の双方向シリアル通信で、制御の確実性(信頼性)は低くてOKです。
本家を検索し、シリアルポートをGUIで制御するサンプルはありました。
http://www.autohotkey.com/forum/topic26533.html これのパラレルポート版に相当するサンプルがあると最高なのですが、探せませんでした。
ジョイスティック制御のdppの技術が使えそうですが、本家をdppで検索してもヒットせず。
ポート制御の達人がいらっしゃいましたら、なにかヒントをいただけると嬉しいです。
>>385 そういうのは VBとかDelphiとかのフォーラムとか過去ログ覗いたらいいと思う。
前にDelphi使ってたけど、シリアルポート制御のコンポーネントとかいくつかあったはず。
VBにもあるだろうと思う。それを移植するか、DLL化して使うか。
多分、需要がなくなっていない分野なら、C#やVB.netのものも見つかると思う。
VB、Delphi、C#、VB.net はVB以外は無料バージョンあるから、
ポトペタでGUI作れるからAHKよりよほど楽なんで、いっそそっちの言語でつくってもいいし
> 【1 OSの種類 .】 Windows Vista SP1 > 【2 Excelのバージョン 】 Excel 2007 > 【3 VBAが使えるか .】 はい > 【4 VBAでの回答の可否】 否 > 【5 検索キーワード 】 Excel 補完 タブ Tab エンター ENTER など > > すごく、無茶な質問を承知でお聞きいたします。 > > Excel上やVBAエディタ上では、補完候補の決定がタブになっているのですが、 > 他の開発環境のクセでエンターを間違えておして毎回イライラしてしまいます。 > 間違えないようにする方法、もしくは、タブではなくエンターで決定する方法はありませんでしょうか? 誘導されてきました。 こういうのってAutoHotKeyで可能なんでしょうか? 候補ウインドウが出ている時だけ、ENTERをTABに置換? うーん考えただけで・・・
英語版のキーボードと日本語版のキーボードを それぞれ場合分けして処理することはできないでしょうか
392 :
名無しさん@お腹いっぱい。 :2009/03/07(土) 20:19:46 ID:9fbJ8ZNJ0
メニューバーの編集(E)とかワードパットのフォントカラーとかを 操作できる命令はありますか?
あるよ
394 :
名無しさん@お腹いっぱい。 :2009/03/07(土) 22:23:07 ID:uKtAZx+C0
gui で作成したウィンドウにデフォルトでついている 右上の最小化ボタン(_)がありますよね? これをクリックしたらタスクバーに表示せず タスクトレイに格納したいのですが どうすればよいのかわかりません 言い換えると、gui の操作で minimize のコマンドを送るようにできればいいのですが
>>386 情報どうもです。別方面からも検討してみます。
Escキーを2回、トントンって入力するとウィンドウが最小化するスクリプトを
書きたいんだけど、どこが間違っているか教えて欲しい
Inputコマンド
http://lukewarm.s101.xrea.com/commands/Input.html ↓ソース
Esc::
Input,InputChar,C I L1 T2,endkey,{Esc},z,x
if ErrorLevel=Match
{
if InputChar={Esc}
WinMinimize, A
if InputChar=z
if InputChar=x
}
return
キーのダブルタップはサンプルあるだろ
398 :
394 :2009/03/08(日) 12:41:19 ID:Zm/1oWz60
自己レスですが gui close で何とかなりそうですね スレ汚し失礼しました
399 :
394 :2009/03/08(日) 12:59:56 ID:Zm/1oWz60
たびたびすみません やっぱりできません
>>399 右クリフックしてWM_NCHITTESTでマウス位置調べたらいいんじゃね
HTMINBUTTON だったらGUIを Hideにする。
タスクトレイからの復旧はMenuを書き替えればできるべ
>>400 ふむ、その手が使えそうですね
ありがとうございました
まっとうにやるなら
>>400 だけど。別の方法
Menu, Tray, Add, ShowGui
Gui, Add, Text,, This is Test
ShowGui:
Gui, Show
return
GuiSize:
if A_GuiWidth<1
Gui, Hide
return
403 :
名無しさん@お腹いっぱい。 :2009/03/08(日) 22:31:03 ID:OvInxdiZ0
テキストファイルを読み込むときに 最終行を検出する方法はありますか?
ないんじゃないかな。 Loop, PARSE, ファイル名, `n hoge := A_LoopReadLine とすればループが終わったときに hoge には最終行の内容が入っているけど
>>404 そうできるのであれば十分です
どうもありがとうございます!
406 :
名無しさん@お腹いっぱい。 :2009/03/09(月) 18:31:39 ID:3Pb9nLSu0
ワードパッドの書式バーのフォントの色の変更や 太字化をahkでやりたいんですが座標指定でやるしかないんでしょうか? WinMenuSelectでは反応しないし、 ボタンのハンドルをMouseGetPosで調べることもできません。 青とか赤の個別の色のボタンは調べられるんですが、値が毎回違うので 行き詰っています。
407 :
406こういう感じでやりました :2009/03/09(月) 18:48:21 ID:3Pb9nLSu0
#F:: MouseGetPos, X , Y, W, OVC,2 ;これでハンドルを調べました MsgBox %W% <--> %OVC% clipboard = %OVC% return #G:: SetTitleMatchMode,2 DetectHiddenText, On WinMenuSelectItem,ahk_id 0x50370,,7& ;ウインドウのハンドルからメニューバーとして操作しようとしましたが WinMenuSelectItem,ahk_id 0x50370,,8& ;反応しません WinMenuSelectItem,ahk_id 0x50370,,9& WinMenuSelectItem,ahk_id 0x50370,,10& WinMenuSelectItem,ahk_id 0x50370,,11& WinMenuSelectItem,ahk_id 0x50370,,12& ;WinMenuSelectItem,ahk_id 0x50370,,1&,1& ;ファイル→新規、これは動きます
408 :
406こういう感じでやりました :2009/03/09(月) 18:50:43 ID:3Pb9nLSu0
WinMenuSelectItem,ahk_id 0xd40372,,1& ;バー自体のアドレスからメニューバーとして操作しようとして WinMenuSelectItem,ahk_id 0xd40372,,2& ;動きません WinMenuSelectItem,ahk_id 0xd40372,,3& WinMenuSelectItem,ahk_id 0xd40372,,4& WinMenuSelectItem,ahk_id 0xd40372,,5& WinMenuSelectItem,ahk_id 0xd60376,,1& ;反応しません WinMenuSelectItem,ahk_id 0xd60376,,2& WinMenuSelectItem,ahk_id 0xd60376,,3& WinMenuSelectItem,ahk_id 0xd60376,,4& WinMenuSelectItem,ahk_id 0xd60376,,5& WinMenuSelectItem,ahk_id 0x9d01b2,,1& WinMenuSelectItem,ahk_id 0x9d01b2,,2& WinMenuSelectItem,ahk_id 0x9d01b2,,3& WinMenuSelectItem,ahk_id 0x9d01b2,,4& WinMenuSelectItem,ahk_id 0x9d01b2,,5& ControlClick,,ahk_id 0xfb0194,,LEFT ;ハンドルが特定できません MsgBox done return
410 :
406こういう感じでやりました :2009/03/09(月) 19:17:25 ID:3Pb9nLSu0
やり直したらinspect_toolbarがなぜか今回は動いたので それでやってみます
411 :
406こういう感じでやりました :2009/03/09(月) 23:05:06 ID:3Pb9nLSu0
連投すみません ワードパッドの書式バーの位置をずらした後 (メニューバー・ファイル(ファイル... ツールーバー 書式バー(MSゴシック... のように ) inspect_tool_ids で書式バーのコマンドIDを調べて(32801) #G:: PostMessage,0x111,32801,0,,A return でフォントの色を選ぶボタンをahk経由で押させることは出来たのですが、 赤とか青とかの個別の色を押させることが出来ません。 方法はありますか?
412 :
406-411(除409) :2009/03/10(火) 00:39:25 ID:VYBxlQGq0
すいません、出来ました。Resource HackerでIDが調べられて 無事できました。ありがとうございました。長すぎる連投してしまい 本当に申し訳ないです。
起動してるプロセスを取得してその中から選択したプロセスを監視して任意の条件でいろいろする ってのをやってみてるんだけど IrvineとかJaneとかプロセスが二重に取得されてどっちを選べばいいかわからない
多重で起動してるの?すごい使い方だな。
一つしか起動してないけど取得されるのは二つになってるってこと
AHKでプロセスいじるのって Process コマンドでの
存在チェック(PID取得)、 強制終了、 優先度変更、 終了/存在待ち
だけど、二重に取得されるってどういうことだろ
Process, Exist, Jane2ch.exe
pid := ErrorLevel
WinGet, list, LIST, ahk_pid %pid%
MsgBox, %list%
ってすると2個窓がとれるけど
これのことだったら
>>144 ,147,153 あたりと同じなんだが・・・
Delphi製のアレなら、既に解決方法は確立されているので検索してこい
418 :
名無しさん@お腹いっぱい。 :2009/03/11(水) 03:02:36 ID:pYoGuoaj0
WM_COMMANDでメニューバーをクリックしたときにでてくる新しいウインドウ の中のコマンドに対するコマンドIDをしらべたいんですが、 何かいい方法はありますか? 窓コンもinspect_toolbarも反応しなくて、resource hacker でも調べられません。 ddwinとかpdicビューワーに使いたいんですけど。
ちょっと質問です。OpenJaneで「お気に入り」に入れてあるスレを お気に入りからはずして「印」のみつける(お気に入りからはずすと何故か「印」がはずれてしまうため) というのを一発でやりたいと考えています。 メニューのコマンドを送ろうとしているのですが、ControlSendを使ってもキーが送られないようです。 以下のように単なるSendだと上手くいっているようなのですが、 ControlSendとSendの違いってなんなんでしょうか? ; OpenJane #IfWinActive, Jane ahk_class TMainWnd ; Ctrl+D to delete favorite without deleting SIRUSI ^d:: WinWait,Jane ahk_class TMainWnd Send, !tv Sleep, 100 Send, !tm ; ControlSend,,!tv!tm ; damepo return #IfWinActive
Sendはフォーカスのあるところに送る ControlSendはフォーカスが無くても、というか対象を指定してキーを送る ウィンドウ指定+コントロールの指定なし、でいけるんじゃないの Styleだけど↓で動くよ ControlSend,, !tv!tm, ahk_class TMainWnd
というか、非アクティブ窓に送るのがControlSendの主目的だし
#IfWinactiveつかってるんだし、
>>421 でうごくならそれでいいと思う
keyhacはkeymapがあるし繭の代替みたいなかんじだぬ
>>422-423 サンクス。
なるほど、アクティブのときに使うなら必要ないですね。
むしろ、フォーカスないときに送るAPIもあるのかと感心したw
どうしてもスマートな書き方が分からず困ってしまったので質問します。 Photoshop7.0を使っているのですが、そのPhotoshopでの作業で ズームイン・アウトの動作は、alt+マウスのホイールで行うんですけど それをホイールのみで行いたいんですが、いまいちうまく動作しません。 ; Photoshop #IfWinActive, ahk_class Photoshop wheelup::Send, {ALTDOWN}{wheelup} wheeldown::Send, {ALTDOWN}{wheeldown} #IfWinActive とりあえずこれで動くことは動くんですが、これだとaltキーが押されっぱなしで いったんaltキーを押さないと開放されないんです。 ホイールの動作を止めてから、0.5秒くらいでaltキーが都度開放されるようにしたいんですが どういう風に書けば良いんでしょうか。
!{WheelUp}じゃ駄目なの?
うむ、自分も色々試したんだけど、ウチのCS3ではダメなんだよな !修飾だとズームさえしないし、Sleep,500 して Send {Alt Up} してもズームはするがAltが押しっぱ状態 色々なSendModeやhookにしたけどダメだった ただのズームで良ければ、Ctrl-やCtrl+送れば良いけど、 これだとポインタ位置のズームにならないから期待には沿えないんだろうな
428 :
425 :2009/03/11(水) 17:44:19 ID:zQD6nmYr0
>>427 >ただのズームで良ければ、Ctrl-やCtrl+送れば良いけど、
>これだとポインタ位置のズームにならないから期待には沿えないんだろうな
ははは。仰るとおりです。単なるズームならそれで良いんですけどね。
やっぱ難しいのかな…。
Photoshop7.0以前のホイール動作がしたいだけなんですけどねー。
429 :
425 :2009/03/11(水) 17:51:27 ID:zQD6nmYr0
>>426 実際やってみると分かるんですが、
それでは「altキーを押しっぱなしでホイール動作」にはならないんですよね。
altとホイールを同時に入力、とみなされて、微妙にカククアした動作になるんですよ。
押しっぱなしというキー入力がないと、スムーズにズームしないんですよね。
あー、ウチではこれで動くようになったけど、かなりインチキくさいので7.0ではダメかも Sleep後のAltの送り方をイジれば何とかいけそうなんでは wheelup:: SendInput {Alt Down}{WheelUp} Sleep, 500 Send {Alt} Send {Alt Up} return
> Sleep後のAltの送り方 タイマーでいいんじゃないかな。環境がないから何とも言えないけど。 wheelup:: wheeldown:: SendInput {Alt Down}{%A_ThisHotkey%} SetTimer, AltUp, 500 return AltUp: Send, {Alt} Send, {Alt Up} return
432 :
425 :2009/03/11(水) 18:45:36 ID:zQD6nmYr0
>>430 おお!まさしく理想の動きになりました!
Sleep後の動作の書き方が分からなくてつまづいてました…。
ありがとうございます!
>>431 そちらも試してみましたが、なんかaltキーが常時連打されてるような動作になりました…。
解決したようだけど、押しっぱなしの原因は#HotkeyModifierTimeoutのあたりなのかな?
434 :
431 :2009/03/11(水) 19:07:50 ID:iQp8Awzp0
> そちらも試してみましたが、なんかaltキーが常時連打されてるような動作になりました…。 うは、初歩的なミス > SetTimer, AltUp, 500 は↓で SetTimer, AltUp, -500 解決したならいいんだけど
435 :
425 :2009/03/11(水) 19:34:30 ID:zQD6nmYr0
>>434 ありがとうございます!
キチンとスムーズに動作してくれました。
AutoHotkeyの存在を知ったのが昨日なのでまだあまり把握しきれてないですが、
かなり勉強になったのでちょっとハマってみます。
>>434 >負の値を指定した場合、その絶対値の時間が経過後に、一度だけサブルーチンが実行される。
勉強になった、d.。
ふぅ、無駄こいた(´;ω;`)ブワッ
wheelup::
wheeldown::
Send, {Alt Down}{%A_ThisHotkey%}
MouseGetPos, xMouse, yMouse
settimer, IdleMouseMoved, 100
return
IdleMouseMoved:
MouseGetPos, xMouseNow, yMouseNow
xMouseChange := ( xMouseNow - xMouse ) * ( xMouseNow - xMouse )
yMouseChange := ( yMouseNow - yMouse ) * ( yMouseNow - yMouse )
If (xMouseChange > 9) | (yMouseChange > 9) | (A_TimeIdle > 500){
send, {Alt Up}
settimer, IdleMouseMoved, off
}
Return
作成した関数が 複数の値を返すことはできますか?
>>437 引数の参照渡し(ByRef)を使ってみるとか。
#persistent
SetTimer, timer
return
MouseGetScreenPos(ByRef x, ByRef y){
CoordMode, Mouse, Screen
MouseGetPos, x, y
CoordMode, Mouse, Relative
}
timer:
MouseGetScreenPos(sx, sy)
MouseGetPos, x, y
tooltip, x%x%`ny%y%`n`nsx%sx%`nsy%sy%
return
windowsXPにAHK1.0.48.00をインストールしました 起動するにはAutoHotkey.exeをwクリックすればいいんですよね? どうも起動していないようです プロセスにも載っていません どうすれば使えるようになるのでしょうか? よろしくおねがします
>>439 exeと同じところにAutoHotkey.iniを作ってメモ帳で編集。
a::a
で保存。exeをダブルクリックするか、iniをexeにD&Dすればいい。
>>440 ありがとうございます。無事動きました。
以前使っていた自作のスクリプトがなぜか駄目だったようです
これが原因とは思っても見なかったので
初歩的なことを聞いてしまいました
おかげで切り分けが出来きて解決しました
442 :
名無しさん@お腹いっぱい。 :2009/03/12(木) 01:46:44 ID:F1m5qWie0
>>438 なるほど。参照渡しなら間違いないですね
ありがとうございます。
別件の質問ですが
a に test があり、かつb に hogeがあるときで
条件分岐をしたいのですが
If a in test and b in hoge
と書いたら上手く動きません
初歩的なことだと思いますが
どうすればよいのでしょうか
if InStr(a, "tesst", true) && InStr(b, "hoge", true) Caseを問わないなら括弧内の第3引数を省略または false にする
無変換キーをシフトキーのかわりとして使いたいのですが 無変換キー+A をshift + A とするだけではなく ctrl + 無変換キー+A をctrl + shift + A や win + ctrl + 無変換キー+A をwin + ctrl + shift + A というふうに あたかもレジストリの編集により無変換キーをシフトキーとしたように動作させたいです remap を使っても思ったとおりの動作ができません
「思ったとおりの動作ができません」がどうせ間違ってるんだから、 途中まで試したコードを晒してみたら?
すみませんでした sc07B::shift だけでできました
448 :
名無しさん@お腹いっぱい。 :2009/03/13(金) 15:47:42 ID:fNm1iUGy0
モディファイアのリマップはScancodeMapいじるようにした方が 何かとすっきりさっぱりだと思うんだ。
fenrirの呼び出しキーをうまく設定できません ^a:: send,^b return こういう設定を書きました そのうえで、fenrirの呼び出しキーの設定の項目で ctrl + A を入力しました。 すると、左のctrlキーのときには意図したとおり ctrl + B が入力されたことになるのですが、 右のctrlキーのときには なし と表示されてしまいます。 パソコンはvistaを使っています どうすれば右のctrlキーを左のctrlキーのように動かせるのでしょうか
>>452 なんか言ってることがよく分からんが、それfenrirを起動したくないってこと?
>>453 いやそうじゃないんです
他のソフト(エディタとか)では
右のctrl + A できちんと ctrl + Bが動作するんですが
fenrirに限ってはそのようには動かないんです
左のctrl + A ではfenrirでもきちんと ctrl + Bが動作するんですが
あ、fenrirは最新バージョンを使っています
どうもautohotkeyの内部で
右のctrlと左のctrlの処理が大きく異なっていると思うのですが
よくわかりません
fenrir側の呼び出しキーの取得方法が特殊なんじゃなかろうか。 わざわざCtrl-Aを一旦Ctrl-Bにして呼び出す理由が分からないけど、 ただ前面にしたいなら、fenrirを二重起動するという方法もあると思う
LCtrlとRCtrlと両方書いてもだめかぬ
Gui, Add, Hotkey Gui, Show return ^A::MsgBox, Send`, "Ctrl + B" いったんAHK止めてからせっていすりゃいいんじゃねーの
試してみたら正常動作したけどfenrirが古かったから最新版にしてみたんだがやっぱり普通に動くな
もし {vkXXscXX} の形式だったら {vkXX} だけにしてみるとか
460 :
452 :2009/03/15(日) 14:01:34 ID:dCql5Xe00
autohotkey のkeyhistoryを見てみました
左のctrl + b では
42 030 i d 10.25 B fenrir
42 030 i u 0.00 B
右のctrl + b では
A2 01D i d 2.42 Ctrl fenrir
A3 11D i u 0.00 Right Control
42 030 i d 0.00 B
42 030 i u 0.00 B
A2 01D i u 0.02 Ctrl
こうなりました
そこで以下のように書いたら左のctrl + bと同様に動きました
^a::
send,{blind}b
return
>>457 のスクリプトではどちらのctrlも正常に動きます
上記のみなさんのご指摘を踏まえると、
私の環境が特異だということですかね
いろいろと調べてみます
ありがとうございました。
ホットキー用のキー足りねぇ→キーボード2台つなげばよくね と思い、ジャンクの安いキーボード買ってきた 2台目用はScrollLockでもして、それで1台目と区別すりゃいいなと思ってたんだが ScrollLockもCapsLockもNumLockも連動しやがる 1台目と2台目のキーボードの入力を判別する方法はないでしょうか? PS/2接続とUSB接続の2台なんですが
斜め上を行く発想だなw レスじゃなくてスマンが…
ソフト名忘れたが、デバイスドライバレベルで区分けするフリーソフトがあるよ。 たしか作者は日本人
俺はプログラマブルキーボード使ってる。 本来はキーマクロを割り当てて使うものだが、キーマクロのメモリ登録では、 アプリ毎に動作を切り替えられず、専用のツールを利用すれば対象アプリ毎の 設定も出来るが、あまり出来が良くないので、メモリにはF13〜F24や、 普通のキーボードでは入力しづらいショートカットキーを登録し、 AutoHotkeyで引っ掛けてアプリ毎の動作に書き替えてる。
>>463 情報ありがとう、それがみつかればできそうだ
>>464 俺も最初プログラマブルキーボードか、ホットキーがいっぱいあるゲーミングキーボードとか考えたんだか
特殊なキーボードは値段が高くて選択肢も少ないので、なんとかならないかと思ったんだが
プログラマブルってほどじゃなくても、全キーをWinキーあたりと同時押しができれば
あとはAutoHotKeyで十分なんだけど
ただWinキーを押しっぱなしで固定するだけじゃ、やっぱり2台とも連動して駄目だし
ハード的に改造しようかと調べてもROMライター前提で変換基盤自作とか、素人には無理そうだし
setntptimeという時刻修正プログラムを実行後、ログの最後の4行を TrayTipかMsgBoxに表示するようにしたいのですが RunWait, C:\App\Internet\setntptime\setntptime.exe,,hide logfile = C:\App\Internet\setntptime\settimeLog.txt i = 0 Loop, read, %logfile% { i += 1 } FileReadLine, server, %logfile%, i-3 FileReadLine, oldtime, %logfile%, i-2 FileReadLine, fixtime, %logfile%, i-1 ;最終行は改行だけなので省略 MsgBox,, setntptime log, %server%`n%oldtime%`n%fixtime% return のように、2度手間になりますがログの行数を取得してからFileReadLineする 方法しか思い浮かびませんでした。 もう少しスマートにしたいんですが良い方法あったらご教授ください。
>>466 RunWait, C:\App\Internet\setntptime\setntptime.exe,,hide
logfile = C:\App\Internet\setntptime\settimeLog.txt
Loop, read, %logfile%
{
server=%oldtime%
oldtime=%fixtime%
fixtime=%dummy%
dummy=%A_LoopReadLine% ;改行が入る
}
MsgBox,, setntptime log, %server%`n%oldtime%`n%fixtime%
return
こんなんじゃだめ?
すげぇ・・・なんというアクロバティック。これがこのスレの底力だな
>>467 うおー即レスありがとうございます
ダミー咬まして・・・うーん頭こんがらかりそう
使わせていただきます。
Runで引数を変数で与えたいんだが、 Run, %var1%, %var2% ってやっても作業ディレクトリがうまく与えられないみたいなんだけど 何が原因?
ごめんなさい自己解決 制御文字が含まれてたっぽい
よくあるw エクスプローラの引数とか特に 俺は行数増えるけど見通しよくするために↓みたくしてる dir = c:\hoge\hoge cmd = %var1%, %var2% Run, %cmd%, %dir%
作業ディレクトリを指定したら、実行ファイルってファイル名だけでいい気がした。 当たり前か・・・
>>467 これ、発想がすばらしいなぁ。
AHK以外でも使えそうなアルゴリズムだ。ありがとう
>>470 ちょうど欲しいと思ってた CompleteX 辞書ww
ありがとう、使わせてもらいます。
みんな宜しくよノシ
480 :
名無しさん@お腹いっぱい。 :2009/03/18(水) 19:11:42 ID:wqUWRKfJ0
atokの変換リストを表示中に autohotkeyで操作をしたいのですが atokの変換リストを表示しているかどうかを 取得する方法が分かりません。 window spyを使っても使用しているエディタの情報だけを 取得してしまっているようです どうすればいいのでしょうか
IME.ahk でいいじゃん。とおもったけどリストが出ているかどうかは分からないのね。 で、原始的だが変換リストを出してマウス直下の窓を調べるほうほうでやった Pause:: MouseGetPos,,, hwnd WinGetClass, class, ahk_id %hwnd% Tooltip, %class% return ATOK2007なので"ATOK20Cand" だった。 で、いい加減だけど、指定の窓があったら(ウィンドウハンドルが0以外なら) 変換中とすればいいんじゃないかな Pause:: Tooltip, % WinExist("ahk_class ATOK20Cand") return これが出ているとき専用のキーバインドが欲しいなら #Ifが使える、Autohotkey_Lが向いてそうだ #If WinExist("ahk_class ATOK20Cand") a:: hoge b:: hige
あ、、、#IfWinExist でいいじゃん・・・orz
超初歩的質問なんですがデスクトップをダブルクリックしたのを検出するのってどうやるんでしょうか OSはVISTA32SP1です
こんにちは。わたしも質問です。 テンキーをマクロ用のホットキーとして使用してるのですが、 NumLockキーを押すと、「NumLock On&AHK Suspend」 もう一度押すと、「NumLock Off&AHK 再開」 このトグル動作をさせたいのですが、どのように記述すればいいのでしょうか。 よろしくおねがいします。
SuspendじゃなくてPauseな気もする
>>484 カーソル下をahk_class Progmanか否かで判別し、あとは下記を参考でできるかな?
~CTRL::
if A_PriorHotkey <> %A_ThisHotkey%, return
if A_TimeSincePriorHotkey > 400, return
;some action
return
ああ、だめだ。あと下記も参考に
670 名前:665[sage] 投稿日:2008/06/06(金) 19:45:37 ID:89UJiJcz0
>>669 うあそういうことか
>>667 自レスも含みますが>666であったファイルの選択の状態を取得する他の方法を探したところ
ControlGetが使えそうなのでそれでやってみたテスト
~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1 ; カーソル下の情報を取得(ClassNN以下いらないような
WinGet,DesktopID,,ahk_class Progman ; デスクトップのウィンドウIDを取得
ControlGet,StateListView,List,Selected,%ClassNN%,ahk_id %WindowID% ; StateListViewにSysListView32の選択項目名を入れる
If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID && StateListView=="") ; デスクトップ上である&選択項目がない
Send,!{Numpad1}
return
アイコンのないところでダブルクリックをしたとき、イベントを乗っ取らないダブルクリックなので、
丁度よく最初のクリックの時点でデスクトップがアクティブになって選択状態が外れる
同じ方法でエクスプローラ・Openダイアログ等の余白をダブルクリックで上階層移動もできる
選択項目を利用するので MButton:: 等では途中に左クリック入れるとかしないとそのままではできない・・
>>486 レスありがとうございます。
~NumLock::pause
でできました^^
へ〜、UpperDirOneみたいなのが楽につくれるなぁ・・・と思ったけど ~LButtonでフォルダ移動の場合、項目がとれる前に移動が完了ちゃって フォルダに移動した後にBackspace送っちゃって元通り・・・で意図したとおりに動かない 結局 ~ なしになったけどうまくいかんもんだねぇ SetTitleMatchMode, RegEx #IfWinActive, ahk_class CabinetWClass|ExplorerWClass LButton:: if (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) { MouseGetPos,,,,classNN ControlGet, selected,List,Selected, SysListView321, A Send, % (classNN=="SysListView321" && !selected) ? "{BackSpace}" : "{LButton}" } else { Send, {LButton Down} KeyWait, LButton Send, {LButton Up} } return
>>488 ,489
ありがとう!
月曜まで家に帰れないから試せないけど、帰ったらやってみる!
>>492 どうやってAHKで再現しようか考えていたら・・・
ありがたく頂きます
これは面白いw タッチパットのノートパソコンだとうまく利用できそう。
おお、すんばらし。 組み込むと色々応用が効きそうだ。
autohotkey.ini に includeで #Include kurukuruscroll.ahk と書いて使わせてもらったんだけど、includeする位置によって使えたり 使えなかったりするのはなんでだろう。 マニュアルのどこを読めばいいのか教えて欲しい。
>>492 一つに纏められて助かりました
認識率と反応も完璧だね
>>498 ありがとう!!!
各includeファイルのauto-executeセクションをautohotkey.iniのauto-executeセクションに移動したらうまく動いたー。
今までauto-executeセクションって知らなかった^^;
*.ahkを includeするときって
autohotkey.ini
-------------------
AAA.ahkの auto-executeセクション
BBB.ahkの auto-executeセクション
return
#Include AAA.ahk
#Include BBB.ahk
;ホットキー定義開始
-------------------
ダブルクリック検出の件だが、何とかなったので張ってみる。コードのインデントに全角空白使ってるので注意。 ; IsDoubleClicked関数 ; ダブルクリックを判定する関数、L,R,M,X1,X2の各ボタンに対応 ; システムからダブルクリック時間、範囲を取得して判定、AutoHotkey_Lの#ifでの使用を想定 IsDoubleClicked(){ Static dcTime=0,LastTime,tx,ty,LastMouseKey=0,lx=-256,ly=-256,lr=0 if(!dcTime){ dcTime:=DllCall("GetDoubleClickTime") SysGet,tx,36 SysGet,ty,37 LastTime:=A_TickCount-dcTime*2 } if(A_TickCount=LastTime) Return lr NowMouseKey:=(GetKeyState("LButton","P") | GetKeyState("RButton","P")<<1 | GetKeyState("MButton","P")<<2 | GetKeyState("XButton1","P")<<3 | GetKeyState("XButton2","P")<<4) VarSetCapacity(Point,8) DllCall("GetCursorPos","uint",&point) if((LastMouseKey!=NowMouseKey)||((A_TickCount-LastTime)>dcTime) ||(abs((NumGet(Point,0)-lx))>tx)||(abs((NumGet(Point,4)-ly))>ty)){ lx:=NumGet(Point,0),ly:=NumGet(Point,4) LastTime:=A_TickCount,LastMouseKey:=NowMouseKey Return lr:=0 } else{ LastTime:=A_TickCount-dcTime Return lr:=1 } }
501 :
500 :2009/03/21(土) 09:42:42 ID:mEL9l3Hw0
; Lv_HitTest関数 ; リストビューでアイテム上にマウスがある時に種類を返す ; そもそもリストビュー上でない場合は何も返さず、 ; アイテム上にない場合は0を返す ; 参考:流行らせるページの MouseGesture.ahk 内 MG_LvHitTest() 関数 Lv_HitTest(){ MouseGetPos,,,hwnd,class,1 MouseGetPos,,,,chwnd,3 WinGet,pid,PID,ahk_id %hwnd% VarSetCapacity(point,8) DllCall("GetCursorPos","uint",&point) if(substr(class,1,13)=="SysListView32" || substr(class,1,9)=="TListView"){ p:=DllCall("kernel32.dll\GlobalAlloc","uint",0x40,"uint",8,"uint") NumPut(NumGet(point,0),p+0,0),NumPut(NumGet(point,4),p+0,4) DllCall("user32.dll\ScreenToClient","uint",chwnd,"uint",p) hp:=DllCall("kernel32.dll\OpenProcess","uint",0x001F0FFF,"uint",0,"uint",pid,"uint") pi:=DllCall("kernel32.dll\VirtualAllocEx","uint",hp,"uint",0,"uint",24,"uint",0x1000,"uint",0x4,"uint") DllCall("kernel32.dll\WriteProcessMemory","Int",hp,"uint",pi,"uint",p,"Int",8,"Int",0) SendMessage,0x1012,0,%pi%,,ahk_id %chwnd% DllCall("kernel32.dll\ReadProcessMemory","uint",hp,"uint",pi+8,"uintp",flag,"uint",4,"uint",0) DllCall("kernel32.dll\VirtualFreeEx", "uint",pi, "uint",0, "uint",0x8000) DllCall("psapi\CloseProcess","uint",hp) DllCall("kernel32.dll\GlobalFree","uint",p) flag:=flag & 15 return (flag<4) ? ((flag<2) ? 0 : "ItemIcon") : ((flag<8) ? "ItemLabel" : "ItemState") } }
; IsDesktopDoubleClicked関数 ; デスクトップをダブルクリックした時にTrue IsDesktopDoubleClicked(){ Return IsMouseOverDesktop() && IsDoubleClicked() } ; IsMouseOverDesktop関数 ; マウスがデスクトップ上にある時にTrue ; bbLeanだとProgmanじゃうまくいかなかったので IsMouseOverDesktop(){ MouseGetPos,,,hwnd Return (hwnd==DllCall("GetDesktopWindow") ||hwnd==WinExist("ahk_class Progman")) }
503 :
500 :2009/03/21(土) 09:44:06 ID:mEL9l3Hw0
; 使い方 #ifじゃなくても何とかなるが、ダブルクリックじゃなかった時に ; 通常のクリックをするべきなので AutoHotkey_Lの#ifを推奨 #if IsDoubleClicked() && (WinActive("ahk_class CabinetWClass") || WinActive("ahk_class ExploreWClass")) && Lv_HitTest()==0 LButton::Send,{BS} #if IsDesktopDoubleClicked() LButton::Msgbox,デスクトップがダブルクリックされた #if 以上、長くなった&見にくくてすまんがこんな感じでできた。
; おまけ:行頭の全角スペースとTabを相互変換するスクリプト #NoEnv #EscapeChar ' Gui,Font,,MS ゴシック Gui,Add,Text,,↓ここにコードを貼り付ける Gui,Add,Edit,w640 h480 vData Gui,Add,Button,gWsToTab,行頭の全角スペースをTabに変換 Gui,Add,Button,gTabToWs x+10,行頭のTabを全角スペースに変換 Gui,Show Return GuiClose: GuiEscape: ExitApp GuiDropFiles: if(A_EventInfo<=1) FileRead,Data,%A_GuiEvent% GuiControl,Text,Data,%Data% Return WsToTab: TabToWs: Gui,Submit,NoHide Output:="",w:=(A_ThisLabel="WsToTab" ? 1 : 0) Loop,Parse,Data,% chr(10) { chr:="",t:=A_LoopField While (SubStr(t,1,(w ? 2 : 1))==(w ? " " : chr(9))) t:=SubStr(t,(w ? 3 : 2)),chr.=(w ? chr(9) : " ") Output.=chr t chr(10) } GuiControl,Text,Data,%Output% Return
横からすみません。
ググったらあんまりヒットしなかったので、以前貼られていた
DoubleKey関数紹介しておきますね。
出展:
http://www.donationcoder.com/Forums/bb/index.php?topic=5926.msg41894 DoubleKey(RunCommand, timeout){
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout)
Run, %RunCommand%
}
return
~LButton up::DoubleKey("hoge.ahk", 400)
みたいに各ボタンごとに処理を書いたahkファイル(ここでは同ディレクトリ内のhoge.ahk)
を別途用意する必要はありますが、これでも動作しまっする。
>>492 のスクリプトを縦スクロールじゃなくて、横スクロールに
するにはどうすればいいんでしょうか?
507 :
500 :2009/03/21(土) 18:03:47 ID:mEL9l3Hw0
>>503 のIsDesktopDoubleClickedを修正。
こうしないとアイコンダブルクリックした時にまで発動してしまう。
IsDesktopDoubleClicked(){
Return IsMouseOverDesktop() && IsDoubleClicked() && Lv_HitTest()==0
}
>>505 確かにそういう方法でも時間内に2回クリックした時に何かするってことはできるんだけど、
1回目と2回目のクリック位置が離れてる時にも発動したり、
↑みたいにアイコンダブルクリック時にも発動しちゃったりして、
いわゆるダブルクリック系の挙動としてはちょっと弱いかなーって思って書いてみた。
あと意地でも2回目のクリックを乗っ取りたかったってのもある。
でも少しこだわりすぎたかなーとは思ってる…
まぁ、自分で組み込んで使ってるし結果的には満足。
>>506 WheelUpとWheelDownってなってるところを
横スクロールできるキーに変えればいいんじゃないかな。
>>505 ID:mEL9l3Hw0がどこまで厳密なモノを求めてるのかわからんのでスルーしていたのだが。
そもそも>505レベルでいいんならこんなに頑張ったりはしないと思う
リロってなかった。蛇足スマソ
ぶっちゃけ、あっちのフォーラム行けばいくらでもあるけどね…
511 :
500 :2009/03/21(土) 18:27:27 ID:mEL9l3Hw0
>>500 の書き方だと勘違いされそうなので
一応書いておくけど、俺は
>>484 ではないです。
>>490 を見て、UpperDirOneに相当する機能は
別のソフト使ってたの思い出したので、
何とかAHKだけで実現できないかなと思って、頑張ってみた。
…これこそ蛇足だったかな。
>>507 申し訳ありませんでした
> 1回目と2回目のクリック位置が離れてる時にも発動したり、
> ↑みたいにアイコンダブルクリック時にも発動しちゃったりして
そらそうですよね・・・深く考えずに書き込んだこと反省してROM専に戻ります。
あと IsMouseOverDesktop関数はいろいろ使えそうですね。頂きます&&乙であります。
こんにちは MouseGesture2、2008/10/07版をVista SP1で使わせて貰ってます。 マウ筋の機能で「設定ホイール回転でアクティブ」という機能があるのですが (ArtTipsというソフトでは、SETTING>快適マウスホイール>快適マウスホイールを使用する>フォーカス移動を行う) これと同じ挙動をMouseGesture2で実現させるにはどのように記述すればうまく行きますか? あと、JaneDoe Viewなど一部のソフトでWinMinimizeを使って最小化すると デスクトップ左下にタイトルバーの小さくなったものが、残って最小化されてしまいます。 これを回避する方法を教えて下さい。
簡単なのはWheelUpとWheelDownのDefault(及び各々の条件)に WinActivate を記述する
流行らせるページのホイールリダイレクトでもいいんじゃね
アクティブにしつつスクロールするなら両方
>>515-517 親切に即レスありがとうございます。
>簡単なのはWheelUpとWheelDownのDefault(及び各々の条件)に
>WinActivate
>を記述する
が一番挙動が近かったのですがマウ筋とArtTipsの機能は
Xplorer2などの二画面ファイラーや小ウィンドウがあるようなソフトに対しても
各ウィンドウをホイールの回転でアクティブに出来るので、このような挙動を望んでいますが
無理な場合WinActivateでアクティブにするようにしたいと思います。
しかし、この場合ホイールUp、Dnでアクティブになったあと普通にスクロールが利かなくなってしまいますよね?
>>490 をファイル選択ダイアログでも効くようにした
注意) 全角スペース利用、誤爆が無いとは言えない
; UpperDirOne
LButton::
if (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) {
MouseGetPos,,,,classNN
if (classNN=="SysListView321") {
ControlGetText, text, SysListView321, A
if (text == "FolderView") {
ControlGet, selected,List,Selected, SysListView321, A
if (!selected)
Send, {BackSpace}
}
}
}
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
return
MouseGesture2の設定で動作割り当てのキー操作を発生させるのパラメーターに 無変換キーの2回押しを設定したくて{無変換}{無変換}とやってみたのですが 認識してくれません。無変換キーは何で登録すれば良いでしょうか?
>>521 ありがとうございます。そのページは見落としていました。
早速、カーソルが画面左下角に接触で1秒遅らせて無変換を2回押しがしたくて動作に
if(!MG_Timer(-1000)){
Send,{vk1Dsc07B}{vk1Dsc07B}
}
や
if(!MG_Timer(-1000)){
Send,{vk1Dsc07B}
MG_Wait(100)
Send,{vk1Dsc07B}
}
など、やってみたのですがうまく動きません。
どなたかアドバイスお願い致します。
動作の確認音にSoundbeepを使ってたけど、パソコン変えたらビープが鳴らないw
>>3 のとおりに、CapsLockをF13〜F24に割り当てようと思うんだけど、
Change Keyってどうやってこれ割り当てるの??
似たようなレジストリ変更タイプのキーチェンジソフトいくつか探してみたが、
どれもF12までしか割り当てられないっぽい・・・
>>522 Send,{vk1Dsc07B}{vk1Dsc07B} → Send,{vk1Dsc07B 2}
MG_Wait(100) → Sleep,100
>>518 Jane Doe Style は「ウィンドウ(W)」→「最小化(M)」
があるのでそれを実行させればいいんじゃない?
Send,!w
Send,m
それかJane Doe Styleのショートカットキーのカスタマイズで
最小化にキーを割り当ててそれをSendするとか。
アクティブにしてスクロールは
アクティブした後にWheelUp(Down)を送ればいいじゃない。
あと、コンボボックスをアクティブにしようとすると
コンボボックスが消えるのでアクティブにしないようにしとけば
概ね支障なく動くはず。
<<
>>526 の続き >>
;WU_ の Default に↓の2行を追記する。
gosub, CursorUnderActivate
Send,{WheelUp}
;WD_ の Default に↓を2行を追記する。
gosub, CursorUnderActivate
Send,{WheelDown}
;MG_User.ahk をテキストエディタで開き、以下を「サブルーチン定義」内にコピペ
;マウスカーソル下をアクティブにする関数
CursorUnderActivate:
MouseGetPos,,, m_id, m_control
WinGetClass, m_class, ahk_id %m_id%
;マウスカーソル下がコンボボックス(ドロップダウンリスト)ならreturn
If(RegExMatch(m_control, "ComboLBox\d+"))
return
;マウスカーソル下が非アクティブならアクティブ化
IfWinNotActive, ahk_id %m_id%
{
SetWinDelay,-1
WinActivate
SetWinDelay,100
}
return
;これで支障が出るなら
>>517 の方法がいいと思う。
あ、ウィンドウクラスは必要ないので↓は要らないや・・・ WinGetClass, m_class, ahk_id %m_id%
×;マウスカーソル下をアクティブにする関数 ○;マウスカーソル下をアクティブにするサブルーチン
>>525 K SC Type Up/Dn Elapsed Key
------------------------------------------------
7C 064 i u 0.04 F13
7D 065 i u 0.04 F14
7E 066 i u 0.04 F15
7F 067 i u 0.04 F16
80 068 i u 0.04 F17
81 069 i u 0.04 F18
82 06A i u 0.04 F19
83 06B i u 0.04 F20
84 06C i u 0.04 F21
85 06D i u 0.04 F22
86 06E i u 0.04 F23
87 076 i u 0.04 F24
多重起動を検知したくて以下のようにしたんだけど、 除外タイトルって効いて無い それともPIDとかでの除外は無理なのかな #SingleInstance, OFF Process, Exist myPid:=ErrorLevel DetectHiddenWindows,On IfWinExist, %A_ScriptFullpath% ahk_class AutoHotkey,,ahk_pid %myPid% MsgBox, あり Else MsgBox, なし
>>531 >>144 ,147,153
前々スレに多重起動検知で終了とかはあったよ。
タイトルが一緒でPIDが違うならで、判別してた。
一部だけ引用
;自分の情報を取得
DetectHiddenWindows, On
Process,Exist
pid:=ErrorLevel
WinGetTitle, g_scriptTitle, ahk_pid %pid%
WinGet, hwnd, id, ahk_pid %pid% ahk_class AutoHotkey
;ahk_class AutoHotkeyのウィンドウを全て列挙
WinGet, ahk_id_list, list, ahk_class AutoHotkey
Loop, %ahk_id_list%{
this_id:=ahk_id_list%a_index%
ahk_id_list%a_index%=
WinGetTitle, this_title, ahk_id %this_id%
if(g_scriptTitle==this_title && hwnd!=this_id){ ;自分以外で同じタイトルを見つけたら終了メッセージを投げる。
暇だったから、作ってみた。あまりの使えなさに吹いたw #persistent CoordMode, Mouse, Screen Settimer, Expose return Expose: MouseGetPos, X, Y if (Y<1){ ;左右に並べて表示 SendMessage,0x111,405,,,ahk_class Shell_TrayWnd keywait, LButton, D KeyWait, LButton ;元に戻す SendMessage,0x111,416,,,ahk_class Shell_TrayWnd Loop { MouseGetPos, X, Y if (Y>2) break } } return
>>525 俺はchangekeyでF13を割り当ててるよ。
ctrlキー2連打でブラウザの更新に割り当てたいのですが、 ctrl::send,^r ↑ここをどう記述すればいいかご教授願います。
下記の、表示ウィンドウのハンドルを取得する単純なスクリプトですが、 ひとつのウィンドウしか表示されてないプロセスでも二つ取得できているのは、どういう理屈なのでしょうか? さっぱりです(´・ω・`) #persistent ;ウィンドウハンドル一覧 WinGet, List, List,,,aaaaaaaaaaaaaa Loop,%List% { Hwnd := List%A_Index% WinGet, exe, ProcessName, ahk_id %Hwnd% abc .= exe . " " . Hwnd . "`n" } msgbox, %abc% return esc::reload
Jane(クラスがTMAainWindとTApplication)だったりしないだろうか どういう理屈っていうか、作った側の理屈でしょ
どうもです。調べたらTApplicationでした。見えてなくてもあるんだよ状態か・・・ 流行らせるページがヒット >やっかいなのがDelphi製のソフトのTApplicationというクラス名のウィンドウ。 >可視ウィンドウ扱いで、タスクバーにはこのウィンドウのタイトルが表示されるが、実際には大きさがゼロで画面には表示されない。 >VxEditorなど、TApplicationが不可視になっているものもある。
質問です。 Sendコマンドにてreturnと入力したいのですが、 エラーが出てしまいます。 Sendコマンド中で、returnと表現するには どうしたらよいでしょうか。
何を間違えていたのか気になる 教えて
Send, return
>>487 >IfEqualのようなコマンド名の形式の場合、更にカンマで区切って条件に一致した場合に実行するコマンドを記述できる。
こっちじゃないと正しく動かないかも。あとこれじゃ3連打したら、2回発動する?
~Ctrl::
ifNotEqual, A_PriorHotkey, %A_ThisHotkey%, return
ifGreater, A_TimeSincePriorHotkey, 400, return
soundplay,*-1
return
流行らせるページのほうがいいか。
~Ctrl::
if A_TickCount < %ctrldouble%
{
;some action
ctrldouble=0
}
else
{
ctrldouble=%A_TickCount%
ctrldouble+=400
}
return
いやあ、規制長かった。 どうでもよくなったw
モールスのパクり。キーが規定時間以内に何度押されたかを返す。 キー押す・離すで1セットなので押しっぱなしで利用するキーやボタンには向かない あまり使えない KeyCount(timeout=0.3) { key := RegExReplace(A_ThisHotkey, "^[\$\^\+!#]+","","") KeyWait, %key% Loop { count++ KeyWait,%key%, D T%timeout% If ErrorLevel break KeyWait, %key% } return count } : ex) [Win]+[Space]二度(以上)押しでIME ON/一度ならOFF #Space::IME_SET(KeyCount()>1)
ちょっと変えた。 ↓みたいに回数指定でやればキャンセルも出来るしちょっと便利かもしれない ~Ctrl:: If KeyCount() = 3 MsgBox, Some Action return KeyCount(timeout=0.3) { key := RegExReplace(A_ThisHotkey, "^[\$\^\+\*!#~<>]+","","") KeyWait, %key% Loop { count++ KeyWait,%key%, D T%timeout% If ErrorLevel break KeyWait, %key% } return count }
549 :
名無しさん@お腹いっぱい。 :2009/03/29(日) 10:50:37 ID:rJZ7qtHO0
>>548 実行しても何も表示されないんだが
当方vista sp1
何か設定が必要?
ウィンドウが最大化されているか、 されていないかを取得する方法ってありますか?
WinGet, status, MinMax, hogehoge
メニュー上の項目先頭のチェック"レ"が付いているかいないかを取得する方法ってありますか?
WinGetレ
>>552 AHKにゃ無い。
あと最近のアプリは「普通のメニュー」を使っていないのが多いよ。
>>549 メモ帳で中身見てもらえばわかると思うけど、基本は無変換押してホイールくるくる。
#NoTrayIconは外したほうがいいかも。Vistaでも動くかな?わからない。動くと思うけど。
556 :
552 :2009/03/29(日) 16:22:07 ID:x2HXBG8DP
>>554 そうでしたか
どうもありがとうございました
557 :
549 :2009/03/30(月) 00:10:07 ID:rej68raf0
imeの状態を、キーの入力ごとにチェックするのではなくて、 0.5秒ごとにチェックするには どうすればいいのでしょうか?
>>558 #persistent
SetTimer, IME_GET, 500
return
IME_GET:
Tooltip,% IME_GET()
return
560 :
558 :2009/03/30(月) 07:57:20 ID:rej68raf0
>>559 ありがとうございます!
非常に助かりました!
マウスカーソル1回転させると何かアクションを起こすみたいなサンプルスクリプトってないですかね。
前から思ってたんだけどCoordModeを画面端からの絶対座標にする方法は ないですか? 画面の右側にGUIやtooltipを表示するスクリプトを作って使っているんだけど、 使うPCによって画面外にはみ出したりする。 今はPCごとに表示座標を書き換えてるんだけど そうしなくていい方法があったら教えてくれませんか。
564 :
563 :2009/03/31(火) 16:24:29 ID:DLXcLh2K0
自己レス。 WinGetPosでProgram Managerを指定してデスクトップのサイズを 取得すればいいのかな?と今気付いた。
キーを押す長さをSetKeyDelayで設定できるようですが、 右クリックを5000ms押す場合には、どのように指定すればいいですか?
SomeKey:: Send, {RButton Down} Sleep, 500 Send, {RButton Up} return ちなみにこれだと5秒経たないうちにもう一度キーを押しても反応しない
あ、500msになっとる・・・
570 :
名無しさん@お腹いっぱい。 :2009/04/01(水) 17:17:57 ID:UifZp1zf0
guiのウィンドウを動かしたら その移動後の位置を取得したいです どうすればいいのでしょうか
>>570 Process,ExistとかWinGetとかWinGetPosとか使う
>>570 すげ〜力業。もっとスマートにできないもんかねぇ
Gui, +LastFound
GuiHwnd := WinExist()
Gui, Show, w200 h100
WinGetPos,xx,yy,,,ahk_id %GuiHwnd%
return
#IfWinActive, ahk_class AutoHotkeyGUI
~LButton Up::
~Enter Up::
WinGetPos,x,y,w,h, ahk_id %GuiHwnd%
if (xx != x || yy != y)
SetTimer, OnGuiMoved,-1
xx:=x,yy:=y
return
OnGuiMoved:
Tooltip, (%x%`,%y%)
SetTimer, TipOff, -2000
return
TipOff:
Tooltip
return
OnMessageでできるんじゃないかな。
VistaでGuiをDestroyするとなぜかGuiが二度と表示できなくなってしまう・・・ XPでは動いたのに・・・
需要あるかどうかわからないけど貼り、リモートデスクトップの背景色を透過させるスクリプト リモートデスクトップクライアント側は背景画像なしで起動、スクリプト内部の「396da5」は各自で適宜書き換えてほしい あと、同時に2つ以上のリモートデスクトップクライアントが起動する状況は一切考慮してない あまりこういうもの書いた経験ないんで、書き方がアレなのはご勘弁を --- #Persistent SetTitleMatchMode,2 SetTitleMatchMode,Fast DetectHiddenWIndows,Off SetTimer RemoteTrans,100 return RemoteTrans: IfWinExist,リモート%A_Space%デスクトップ接続 ahk_class #32770 { If(TransFlag = 0) { DetectHiddenWIndows,On TransFlag = 1 WinSet,Trans,Off,ahk_class TSSHELLWND WinSet,TransColor,396da5 255,ahk_class TSSHELLWND DetectHiddenWIndows,Off } } else { TransFlag = 0 }
>>576 の続き
VistaだとGuiをDestroyすると、そのGui番号ではGuiが表示できなくなるみたい
単にキーバインドの変更のためだけにこのソフトを使おうと思ってるのですが、 その目的に使うだけだったらこのソフトのメリットは大してないのでしょうか
そんなこともない だがCapsLockをどうにかしたいのなら諦めれ
changekeyと組み合わせれば、CapsLock問題もクリアーできるよ。 そして便利な使い方を考えるうちに、スクリプトにはまって、VBS、Perに手を出して、終いにはC言語の勉強を始めたのは俺。
プログラミングの手間を省くために手を出すような奴もここにいる できる範囲が大きすぎて全部AutoHotkeyでやろうとしてしまうのがデメリットかな
ほんとこのソフトすごいよね便利すぎてハマるの分かる
ちょっと便利にするコードを書くうち脱線しすぎて気づけば、 数十万件ほどある2chのDAT自動分類とか、本文検索、カテゴリわけ、統計抽出で使ってる。 ホットキーは、このメインプログラムを呼び出すための ショートカットキーとして唯一、機能している。
マウスジェスチャ以来の衝撃だったな、俺的には・・・AHKでも、ジェスチャできるけど。
>>581 俺もそうなりそう、CかPythonか迷ってるんだよね。どっちもやれってことか。
AHKでできることは、Cでも全部できるのかね?どう比較すればいいのか、よくわからない。
マウスジェスチャ以来の衝撃だったな、俺的には・・・AHKでも、ジェスチャできるけど。
>>581 俺もそうなりそう、CかPythonか迷ってるんだよね。どっちもやれってことか。
AHKでできることは、Cでも全部できるのかね?どう比較すればいいのか、よくわからない。
初の連打、すまん。失敗したって出て、リロードしても書き込まれてなかったからorz
>>571 これ、リモートデスクトップ先でもとりあえず使える。Master音量しか出ないけど。
やっぱAltTabって特殊なんだね。 ~LAlt & Tab:: KeyWait, Tab, T0.15 if Errorlevel = 0 send, {Blind}{Tab} if Errorlevel = 1 send, {Blind}+{Tab} settimer, altreturn, -1 return altreturn: keywait, LAlt send, {Return} return
AVGがあると、Ahk2Exe.exeでコンパイル失敗するみたいね。 常駐シールドの例外設定すればいいらしい。
#Persistent ;監視 Clipboard= ;クリップボードのクリア OnClipboardChange: ;クリップボードの内容が変更されたときに実行されるラベル これなんですが、これだとクリップボードの内容が同じ場合でも (同じ文字列などを続けてコピーした場合) 実行されてしまいます。 クリップボードの内容が同じ場合は実行しないようにしたいのですができるでしょうか?
前のと比較すればいいだけでは
>3後半の文字化けってUTF-8でソース保存すれば回避できる?
文字化けではなくダメ文字、つまり正しく解釈された上での問題なのでそれでは回避出来ない
流行らせるにある、ホイールリダイレクト使ってるんだが、ところどころホイール操作自体できなくなります。 例)タスクトレイをホイールすることができない、デュアルモニタ環境で特定のモニタのFirefoxにホイールができない など *WheelDown:: CoordMode,Mouse,Screen MouseGetPos,x,y,hwnd,ctrl,3 wp:=0xFF880000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6 lp:=y<<16|x IfWinExist,ahk_id %hwnd% { SendMessage,0x84,0,%lp%,,ahk_id %ctrl% If ErrorLevel=4294967295 MouseGetPos,,,,ctrl,2 Loop,%A_EventInfo% PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl% } どこか改善できないでしょうか?
597 :
596 :2009/04/08(水) 12:13:50 ID:Ox1RALx+0
他の症状としては OpenOffice.orgの表計算ソフトCalcでスクロールが一切効かないです
その場合は、CalccだけでなくOOo全般で、他にマンドプロンプトも効かないはず ウィンドウ内にコントロール(窓)が無い構成だから(変数ctrlが空) メッセージ送信先を窓本体にすればよいんで、Loopの前の行に ctrl := !ctrl :? hwnd : ctrl を入れれば動くんじゃないかな 後のことは情報少ないし、環境も作れないから分かんない
ありがとうございます。 でもctrl := !ctrl :? hwnd : ctrlだとエラーになります・・?
typo だw ctrl := !ctrl ? hwnd : ctrl
>>600 本当にありがとうございました。Calc動くようになりました
Firfoxのほうは動かないのですが諦めますorz
流行らせるページのリファレンスに While とかが載ってないorz
もう更新されないだろうね
困った時は本家のリファレンス見た方がいいと思う 流行らせるの方は微妙に省略されてたりするんで、たまに本家を見ると新しい発見がある
wikiがほしいところ
今のAutoIt2ベースから AutoIt3ベースで作り直してもらえると 多言語に強くなると思うのだけど まぁasciiしか使う必要がなければ関係ないっちゃないか
流行らせるページは見やすくていいな。 白背景は法律で規制したほうがいい。まぶし過ぎて目に悪い。
レジストリいじらずにキーの入れ替えする方法を探してますが、 >3を読む限りahkでも無理そうですね。 流行らせるページを参考にscコードでCapsLockとCtrlを入れ替えたら Ctrlが常にONの状態になりました。何か方法ありませんか?・・・
色んな人がさんざん試しって解決法が無いからテンプレの最初にある
ジョイスティックのアナログキー→矢印キー変換をこんな感じでやってるんだけど、 もうちょっと良い方法って無いのかな? あまりにも基本過ぎるみたいで検索にも引っかからない sleepjoy = 100 SetTimer, getjoy, 30 #Persistent return getjoy: GetKeyState, joyx, JoyX GetKeyState, joyy, JoyY if joyx between 49 and 51 if joyy between 49 and 51 return Gosub, ranjoy return ranjoy: if joyy > 75 Send {down} else if joyy < 25 Send {up} if joyx > 75 Send {right} else if joyx < 25 Send {left} sleep, sleepjoy return
流行らせるページを見てもわからなかったので質問させてください 任意のウィンドウの状態(最大化・最小化)を知る方法はありませんか? サイズや座標はわかるようですが・・・
>>610 低級なものしか用意されていないみたい
結局「タイマーして、キー状態みて、何かする」ってコード書かなきゃならないっぽい
悩んでみたけど、俺の頭じゃ解決できなかったので質問させてください。 ホットキーを無効にする処理についてです。 変数の中身によって、特定のホットキーを無効にしたりすることはできないものでしょうか。 #全部無効/有効はSuspendによって可能なことは確認いたしました。 流行らせるページより、 > サブルーチンの最初の行が「Suspend,On」以外のSuspendコマンドになっているホットキーは、Suspend,Onが実行されても無効化されない。 このあたりをうまく使えばできるのでしょうが、書き方が悪いのかうまく動いてくれません。 解決法をご存じの方は教えていただけると助かります。
>>614 thx 結局ジョイスティックに関しては見やすくまとめるとこんな感じになるのかな
SendJoy1 = {up}
SendJoy7 = {down}
SendJoy5 = {right}
SendJoy3 = {left}
SendJoy8 = {down}{right}
SendJoy6 = {down}{left}
SendJoy2 = {up}{right}
SendJoy0 = {up}{left}
SleepJoy = 100
SetKeyDelay, 20
SetFormat, float, 0.0
SetTimer, GetJoy, 30
#Persistent
return
GetJoy:
GetKeyState, joyx, JoyX
GetKeyState, joyy, JoyY
joyx := 0.018 * joyx -= 50
joyy := 0.018 * joyy -= 50
joyh := 4 + joyx + joyy *3
if joyh = 4
return
Gosub, RunJoy
return
RunJoy:
SendJoy := SendJoy%joyh%
Send %SendJoy%
sleep, SleepJoy
return
>>615 #1::
Hotkey, #2, Hoge, % (flg:=!flg) ? "On" : "Off"
return
Hoge:
MsgBox, Hoge
return
618 :
>>615 :2009/04/11(土) 01:49:46 ID:rh+NBoz70
>>617 返信ありがとうございます。
ですが、私が思っていたこととはちょっとだけ違うような気がします。
#自分が思っていることをうまく伝えられなくてごめんなさい。
ですので、あとは自分で頑張ります。ありがとうございました。
>>618 どう違うのか書かないと、せっかく答えてくれた人も消化不良になるだろ。
自分ひとりだけよければ、それでいいのか?
USBの外付けテンキーに、普通のキーボードのテンキーと別のコマンドを Autohotkeyを使って割り当てる事ってできるんでしょうか? テンキーをプログラマブルキーボード的に使えないかと思うんですが キーボード側のテンキーと連動しちゃわないかと思いまして…
uusbd.sysでも使って デバイス毎にホットキーやリマップが設定出来るようになったら夢が広がるんだけどな 外付けテンキー全般に言えるか分からんが マジェテンキーはNumLockがOnとOffの時とで異なるキーコードを送るようだから やりようによってはフルキーボード付属のテンキーと別の動作をすることが出来るかもね
>>621 おおっ こんなソフトが! ありがとうございました。
Ahkで可能だったら最高だったんですが、現状ではできない感じなのでしょうかね。
>>615 617でダメならナニがしたいのかよくわからんが
hotkeyコマンドで任意のホットキーをオン・オフ出来るからそれで良いんじゃないの?と思うが
>>619 そうですね。すみませんでした。
やりたかったこと:
アプリケーションA専用のホットキーとして6つほど割り当てております。
そのほかにアプリケーションランチャー代わりとして5つほど割り当てているのですが、変数の中身の値によってそれだけをすべて無効にしたかったのです。
#あるキーを押せば無効になる、というものではなくあらかじめ設定用の変数を用意/設定をし、それによってスクリプトを走らせたと同時に有効/無効を切り替えられればな、と。
#走らせたあとは有効/無効を切り替えるということは考えていなかったです。
>>624 やぱ俺の頭が足りんよ
リファレンスとにらめっこしてくるよ
626 :
名無しさん@お腹いっぱい。 :2009/04/11(土) 08:47:29 ID:iBHZiqEC0
xpを使っています autohotkeyのスクリプトから、そのスクリプトのショートカットをスタートアップに登録したいです A_ScriptFullPathでそのスクリプトのありかを取得 A_Startupでスタートアップフォルダのありかを取得 ここまでは分かっています。その先がわかりません。
FileCreateShortcut, %A_ScriptFullPath%, %A_Startup%\%A_ScriptName%.lnk
>>625 #IfWinActiveで特定のアプリにのみ有効なホットキーを設定
hotkeyでホットキーのオン・オフ切り替え
このあたりを使えば望みの動作が出来ると思う
俺はよくiniファイルの設定を読み込ませてホットキーを動的に設定したりオン・オフしたりさせてるが
それと同じ方法で実現できると思う
hotkeyコマンドに変数展開使うだけだし
>>625 「変数」は何処に存在するんだろうか?
; 起動毎にホットキーのOn/Offがトグルになるスクリプト
OnExit, OnExitSub
IniRead, IsHotkeyEnable, conf.ini, Hotkey, Enable, 0 ; 無ければ "0(=Off)"とする
If (IsHotkeyEnable) {
Hotkey, IfWinActive, ahk_class Progman ; デスクトップのみ
Hotkey, #1, Key1, On
Hotkey, #2, Key2, On
}
return
; 終了時にフラグを逆転して終了
OnExitSub:
IsHotkeyEnable := !IsHotkeyEnable
IniWrite, %IsHotkeyEnable%, conf.ini, Hotkey, Enable
ExitApp
Key1:
MsgBox, Key1 Action
return
Key2:
MsgBox, Key2 Action
return
>>608 keybatという1500円のソフトで可能だよ。さっき試した出来たよ。
俺はこれからAHKに乗り換えた当初に同じことをやろうとして苦労した覚えがある。
レジストリいじるソフトを使用してF13を導入して解決した。レジストリいじれないならkeybatだね。
人気ないけど、いいソフトだと思う。キーカスタマイズスレで罵倒された楽しい思い出があるけどw
632 :
615 :2009/04/11(土) 19:33:36 ID:rh+NBoz70
>>629 iniに書き込んであります。
>>628 ,629
ヒントありがとうございます。
自分が思っていたような動作をするスクリプトが書けました。
とは言っても、約半分ぐらい629と同じですが。
お世話になりました!
ありがとうございました。
633 :
492 :2009/04/11(土) 23:31:57 ID:3TjMJxNW0
リマップで質問です。特定キーをトリガにして、リマップの内容を変更するのがうまくいきません。 添削してもらえませんか? -- vkAFsc130::PgDn ←デフォルト定義 vkAEsc12E::PgUp ←デフォ vkADsc120:: ← 問題のトリガ if flag = 100 { vkAFsc130::PgDn ←この定義で Duplicate してしまう vkAEsc12E::PgUp flag = 0 } else { vkAFsc130::Down vkAEsc12E::Up flag = 100 } return
そもそも、言語仕様にに沿ってない。つーか言語がめちゃくちゃなんだけど
>>615 からのの流れを流用してHotkeyコマンド使うか、
リマップを捨てて、Sendでキー送るってカンジかな
後者なら↓みたいな感じ
kAFsc130::
If flag = 100
Send, {PgDn}
Else
Send, {Down}
return
どうしてもリマップ捨てたくないなら AutoHotkey_L の #if 使う方がいいかも
#if (flag==100)
vkAFsc130::PgDn
vkAEsc12E::PgUp
#if (flag!=100)
kAFsc130::Down
vkAEsc12E::Up
#if
>>636 >そもそも、言語仕様にに沿ってない。つーか言語がめちゃくちゃなんだけど
滝汗
ありがとうございます。もうちょっと色々見てみます。
無変換+zで、ひとつ下のウィンドウをアクティブに。 ~vk1Dsc07B & z:: WinGetClass, classA, A a= WinGet, List, List,,,ningenshikkaku Loop,%List% { Hwnd := List%A_Index% SetFormat,Integer,H WinGet,s,Style,ahk_id %Hwnd% SetFormat,Integer,D if((!(s&0x08000000))&&((s&0x80)|| !(s&0x80000000))) { WinGetClass, class, ahk_id %Hwnd% if (a=1){ WinActivate, ahk_id %Hwnd% break } if (class=classA) a=1 } } return
639 :
638 :2009/04/12(日) 13:07:26 ID:9mFGO0zQ0
>>638 すみません、これはダメだわ。GOMPlayer等、見つけられないものもあるw、まあ手動で足していけばいいか。
キーボード中心環境なら、上にいくのも付け足せば、最前面表示とかに行けて便利?
Alt+Tabは順序が入れ替わって、使い辛いな。
無変換←→とかで、タスクバー順にアクティブにできたほうがいいけど、AHKでできるかな?
>>640 おお、d
上のは、情報が特殊なんだね。Dolphi製はTApplicationのほう取ってるし、hWndとかも何か特殊だ。
特殊だと思ったら、10進法でとってるのか。
TApplicationをどうにかしたら、タスクバー順にアクティブはできそうだね。
下のはいいね、好みw
流行らせるページにwhileとかの説明が新しく追加されてるね。英語弱いので助かります。
1by1のビッグウィンドウを思い出したw
スレ違いっぽいけど admin権限なしでCtrl<->CapsLock交換できるソフトってない? autohotkeyでキー置換の大部分はできるんだけど これだけ困ってる。
>>644 日本語ユーザーはやっぱりその壁にぶち当たるんだよな
で、なんでautohotkeyではこのキーだけ駄目なんだろう
内部で特殊な処理をしているのかな
WheelAccel.ahkでIE上でホイールを早く回した場合に、スクロールが上手く加速されていないような気がします。 IE上で素早くホイールを回した場合でも、回転に応じたスクロールができるようになりませんでしょうか。
IEのスムーズスクロールをOFFにする A_EventInfo を考慮した加速方式にする
すみません、どなたかご教授お願いします。 プログラムに明るくなくて分かりづらい説明で申し訳ありませんが。 Photoshop使用時に「6」に 6::send +!r という風にキーを割り当ててます。(ブラシのモードが変更されるショートカット) それとは別にPhotoshopでは Shift+Alt+クリック で 「カラーサンプラーを配置する」という機能があるのですが、 どうもフォトショ使用中に時折、「6」を押した瞬間にクリックして ブラシモード切替と同時にサンプラーを配置してしまうのです。 上手いこと「6」と同時くらいにクリックしても Shift+Alt+クリック にならなくするような方策はないものでしょうか?
>>648 これを試してみては
6::
blockinput, on
send, +!r
blockinput, off
return
>>649 激減しました、ありがとうございます!
しかしガチャガチャ何度もやってると極稀にサンプラーが起動してしまうことがありました。
とりあえず大分改善されたのでとても助かります。
あつかましい話ですがついでにもう一つ質問させてください。
キーを押しっぱなしにすると連打が始まってしまいますが、これを
抑制するのってどうやればいいんでしょうか?
KeyWait, 6 return にすればいいかもしれないね。 それか、6 up::にしてキーを離したときに送るか。
>>650 >>649 でダメなら
#InstallMouseHook
6::
if !getkeystate("LButton", "P")
send, +!r
return
連打しないで押したままにしたいなら↓みたいな感じかな
a::
send, {a down}
keywait, a
send, {a up}
return
ソフトの使い方を常にポップアップ表示させるようなものを作りたいんですが ソフトのウィンドウを動かした時に、一緒に説明の画面も追随するようなのって どうやったら作れますか?
エスパー難しすぐる 自作GUIならOnMessage()使ってウィンドウメッセージの"WM_MOVE(0x3)"を拾う、 そうでないならタイマーでウィンドウ位置を監視して動いた稼働かを検知、 で、追従させたい窓を移動
>>644 が求めている解決方法ではないけど、
自分の場合は、ソフトでの解決はあきらめて、
Ctrl<->CapsLock交換できるキーボードを使っています。
>>654 なるほど、タイマー使う手がありますね。
サンクスです。
Run,"hoge.exe"で外部のスクリプトやアプリを実行するとき、 ビープ音がなるんだけど、これを止める方法はないもんかな?
うちではpingコマンドを定期的にルータに向けて発射させてるが、 意図的にsoundbeepコマンドを使わない限り、鳴らないけど?
Run, notepad うん、無言で起ち上がる
ウィルス対策ソフトの設定かな? AutoHotkeyを除外すれば解決するんじゃないかと見た
661 :
657 :2009/04/14(火) 19:02:25 ID:sa012nT50
ウィルスソフト切っても鳴ってる。 キーに割り当てないで、スクリプトの先頭で、Run, notepad と書けば鳴らないで起動するけど、 キーに割り当ててから、キーを押してアプリやスクリプトを起動するときはビープ音が鳴ります。 他のPCのAHKのスクリプトでも、ホットキー押してアプリやスクリプトを起動してもビープ音なってたんだが、 まさか家だけの特別仕様?・・・w Zip版で入れたのと関係あんのかな・・・ 鳴らしたり鳴らさなかったりするコマンドでもあるのかと思ったんだが。 まぁ、動作状況が分かりやすいといえなくも無いかなw、と。
b::Run, notepad をautohotkey.ini にを記述してBを押してみたけど 特に何の音もせず、xyzzyが起動した (Terapperというソフトでnotepadの代わりにxyzzyを起動するようにしている)
>>661 ahkのバージョンと、入手場所は?
うちでは、explorerで選択したファイルのハッシュを計算するため、
ホットキーをつかって、呼ばれた場所でハッシュ計算コマンドを呼び出してる。
こんな使い方するのは、ahk界隈では朝飯前だろうから
いちいちビープが鳴ってたら、全世界でクレームだらけになるぞw
・何かのデスクトップテーマや常駐ソフトで音が鳴るようになってる ・本当のウィルスに感染してる ・PCの中にいる妖精さんが鳴らしている
>>662 そのように、ためしに別の組み合わせのキーの横に直接記述したら、音が消えました。
普通に動いてるから気にしてなかったんだけど
スクリプトの記述のエラーのビープ音なのかも・・・。
>>663 >>全世界でクレームだらけになるぞw
そりゃそうだ。
>>664 たぶん妖精さんですねw
みなさんお騒がせしました。ごめんね。
>>665 @割り当ててるホットキーがすでに別のソフトに割り当てられててそっちで音がなってる。
AたとえばWin+Dを押したとき、エクスプローラにDキーが送られて、エクスプローラから「Dで始まるファイルなんてねえよ!」って言われて音が鳴る
ぱっと思いつくのはこれぐらい
コンパネの「サウンドとオーディオデバイス」の設定で 「プログラムの起動」に音が設定されているにイッピョ
669 :
名無しさん@お腹いっぱい。 :2009/04/16(木) 01:42:10 ID:WuzwTPez0
代入について質問します autohotkeyでは以下の二つの処理のうち、より早いのはどちらなのでしょうか。 a = test a := "test"
適当に作った。こっちでは、数値でも文字列でも 「=」 のほうが 「:=」 より速い Gui, Add, ListView,Grid,Name|Count|Time(ms) Loop, 3 LV_ModifyCol(A_Index, 80) Gui, Show count := 1000 * 1000 Tests = Test1|Test2|Test3|Test4 Loop, PARSE, Tests, | { StartTime := A_TickCount Gosub, %A_LoopField% Time := A_TickCount - StartTime LV_Add("", A_LoopField, count, Time) } return Test1: Loop, %count% a = 1000 Return Test2: Loop, %count% a := 1000 Return Test3: Loop, %count% a = あいうえお Return Test4: Loop, %count% a := "あいうえお" Return
672 :
名無しさん@お腹いっぱい。 :2009/04/16(木) 05:16:49 ID:qBUQoLG70
Version 1.0.48.01
673 :
669 :2009/04/16(木) 08:07:16 ID:WuzwTPez0
>>585 >数十万件ほどある2chのDAT自動分類とか、本文検索、カテゴリわけ、統計抽出で使ってる。
便利そうだなあ、うpおねがいできない?
て
す
り
お
>>671 じゃあ := の存在意義ってあるのかな?
:=は、右式で計算するときじゃね? と俺は理解して使い分けてるけど
計算しようとする分、遅くなるんだろうね。
|= の使い道が分からん
扉を開けるって意味のAAじゃないのか?
Orのビット演算した結果を代入じゃないの?
ビット演算とか Or の概念自体がわからんのじゃね? AHKのサンプルでも | じゃなく +で足し込んでフラグの説明してる場合が多いしな
インストーラー形式の方ではなくzip版AutoHotkey104801.zipで MouseGesture2を使わせて貰おうと思うのですが AutoHotkey104801.zipを解凍したフォルダに入っているのLibフォルダの中に MouseGesture2.zipを解凍して出来たフォルダ一式を入れてAutoHotkey.exeを 実行してもドキュメントフォルダにAutoHotkey.ahkを作成するかを聞いてきて yesにしてもnoにしてもMouseGesture2.ahkを読み込めません。 AutoHotkey.exeを実行しただけで、複数の.ahkを読み込みたいのですが インストーラーでインストールしないと無理なのでしょうか?
低レベル過ぎ 流行らせるページで初歩を学んでこい
>>688 AutoHotkey.exeの実行は読んだのですが自分のやり方が間違っているので出来ません。
MouseGesture2など複数の.ahkをAutoHotkey.exeをクリックしただけで実行できる
具体的な方法を聞きたいのです。
>>689 やり方が間違ってるって分かるんなら解決できるだろ
流行らせるページを参考にしただけでは無理だったので聞いています。
#Include項を読めば、問題解決。 別々にexeに送ったほうがいいよ。includeしても問題が発生するだけ。ランチャ登録で、一発じゃん。
MouseGesture2 は単体で起動した方がいいね でもこの調子じゃ使いこなすまでにかなり苦労しそうな雰囲気…
使用方法の「AutoHotkey.exeの実行」と スクリプト仕様の「スクリプトの起動とAuto-executeセクション」も参照。 これで理解できないなら、聞くだけ無意味。初期の初期です。
色々便利な機能があるのは分かってるが組込みが面倒臭そうすぎて敬遠してるな>MouseGesture2 そこそこAHK暦ある人間ですらそんな状態なので、とりあえず単体起動で常用して 組込み(含むLIBでの自動組込み)は自力でAHK書けるようになってからにしたらいいと思う
マウ筋とAHKの組み合わせで必要十分だしね。 さらに踏み込みたいなら、MouseGesture2は非常に便利なんだけどね。 マウ筋を使いすぎて環境移動が面倒くさいのもあるけど。 ただ、ここでMouseGestureがあったらなとは、よく思う。 JaneStyleとかのマウスジェスチャーつきのソフトでは、よく思う。
>>688-696 付き合って頂きありがとうございます。
マウ筋からMouseGesture2への乗り換えの最中に問題が出てファビりました。
後出しで申し訳ありませんが、MouseGesture2とnamazu_ime_scr_v10201だけ
他のスクリプトとうまく(動いたり動かなかったり)読み込めなかったので質問しました。
マウ筋はv1.40になってかなり便利なのですが、もう少し自由度が欲しいので
ncludeを使ったりしてもう暫く色々やってみます。
最悪、MouseGesture2とnamazu_imeは単体で動かします。
皆さん本当にありがとうございました。
経験則だが MouseGesture.ahkはAuto-executeセクションで#includeするスクリプトの中では最後に記述する なまず日記のスクリプトを#includeする場合はAuto-executeセクション以外の方がいい ※スクリプト内でReturnを使ってる場合はエラーが出るから
>>698 ありがとうございます。未だ奮闘中なので
>Returnを使ってる場合は
これかな?
なまずさん所、詳しく読んでみます。
インクルード(関数ライブラリ含む)の仕様上無理だってのはわかるけど インクルード「される」側のAutoexecブロックとかプリプロセッサ命令(#NoEnvとか)を 有効にするかしないかを選びたいなぁと思う事はある。
たとえば、下の二つは個別ではきちんと動く ----------------------------- Func_AAA() return Func_AAA(){ ToolTip,AAA return } ----------------------------- Func_BBB() return Func_BBB(){ ToolTip,BBB return } ----------------------------- けどIncludeすると下のようになって実行できない ----------------------------- Func_AAA() return ;ここで終了 Func_AAA(){ ToolTip,AAA return } Func_BBB() ;ここまでこない return Func_BBB(){ ToolTip,BBB return } -----------------------------
結局、全部統合して一つのスクリプトにするってだけだから、変数とかAuto-Executeとか理解しながらまとめるしかない。 競合したりすると原因究明が面倒くさいから、個別に管理してる。
>>703 >>488 のこれが使えるかも。
ControlGet,StateListView,List,Selected,%ClassNN%,ahk_id %WindowID% ; StateListViewにSysListView32の選択項目名を入れる
>>704 ありがとうございます。
先日マウ筋から乗り換えたばかりの自分には少し難しいかもしれません。
自分の勉強不足です。
色々試してみます。
条件定義で条件を作成し(例えば条件名を GestureCancel とする) カスタム条件式で下記の何れかを登録(または複数登録) MG_LvHitTest() MG_TvHitTest() MG_TreeListHitTest() ※関数の詳細はReadme.txtの335行目〜の「●ユーティリティ変数・関数」を参照 ジェスチャ定義で RB_ を作成 動作割り当て RB_ を選択 条件 GestureCancel 動作 MG_About() これで以前と同様に扱えると思う
あるキーが押されたらループを抜けて次の処理へ、ということをやりたくて 以下のように書いていますが、タイミングによってはスリープに引っ掛かって 失敗してしまいます。ホットキーの利用も考えたのですがうまくいきません。 低レベルで申し訳ないのですが、どう書けばいいのでしょうか…? (スリープ処理は残しておきたいです) Loop { if ( GetKeyState("RETURN") = 1) Break Else Sleep,100 }
KeyWait, Return, D msgbox, test
KeyWait使うのが楽だと思うけど。。。 どうしてもSleepを残すのならば、ループ内でキーを拾えないのはしょうがない ホットキーつかってフラグの上げ下げすりゃいいはず Loop Go := false while (Go==false) Sleep, 100 : SomeKey::Go:=true
>>708-709 ありがとうございます!
実際はループ中に他の処理もしているので(省略してしまってすみません)、
KeyWait で止まってしまうのはまずかったのです。
フラグを立てる方法でうまくいきました。ありがとうございました!
GUIに現在時刻をリアルタイムで表示したいんですがどうすればよいのでしょうか?
>>711 組み込み変数
%A_YYYY%年%A_MM%月%A_DD%日%A_Hour%時%A_Min%分
; 簡易マウスジェスチャ関数 ; ジェスチャの結果をLRUDの文字列として返す GetGesture(timeout=1000, tipNo=0, sensitivity=30) { CoordMode, Mouse, Screen CoordMode, Tooltip, Screen ButtonName := RegExReplace(A_ThisHotkey, "^\W+|\s.+", "", "", -1) MouseGetPos,nx,ny qp := ATan(1), lastDir = "" while GetKeyState(ButtonName, "P") { if (A_TimeSinceThisHotkey > timeout && !gesture) { if (tipNo) Tooltip,Timeout, x+16, y+16, %tipNo% break } MouseGetPos,x,y dx:=x-nx, dy:=y-ny if (tipNo) Tooltip, %gesture%, x+16, y+16, %tipNo% if (Mod(A_Index, 10)!=1 || Sqrt(dx**2 + dy **2) < sensitivity) Continue rad := ATan(dy/dx) dir := (rad < qp && rad > -qp ) ? ((dx > 0) ? "R" : "L") : (dy>0) ? "D" : "U" if (lastDir != dir) gesture .= dir lastDir := dir, nx:=x, ny:=y Sleep, 20 }
; 続き if (!gesture) { Send, {%ButtonName% Down} KeyWait, %ButtonName% Send, {%ButtonName% Up} } if (tipNo) Tooltip,,,, %tipNo% return gesture } 利用例) SetTitleMatchMode, RegEx #IfWinActive, ahk_class CabinetWClass|ExploreWClass|MozillaUIWindowClass|IEFrame $RButton:: g := GetGesture(1000, 20) Send, % (g=="R") ? "{Browser_Forward}" : (g=="L") ? "{Browser_Back}" : (g=="LDR") ? "^w" : "" return
>>712 ソフト起動時の時間しか表示してくれません・・・。
できればリアルタイムで表示が変わっていくようにしたいんですが
>>715 そりゃそうさ。
Gui,Showをするか、GuiControlで変えるかしないと。
チカチカする場合は、
SetBatchLines, -1 ; maximize script speed!
SetWinDelay, -1
を書けば緩和されるかも。
変数名の中に変数を入れた場合その変数を呼び出すにはどうすればよいのでしょうか? たとえば no=1 name%no%=taro こうした場合%name1%では呼べますが%name%no%%では呼べません。
:=
>>718 no=1
name%no%=taro
dainyu:=name%no%
msgbox, %dainyu%
こんな感じにしてる。
1.0.48.02キター
変数の参照の仕方は変態的だよなぁ a1 = ああああ a2 = いいいい a3 = うううう a4 = ええええ a5 = おおおお Loop, % 0+2+3 { Tooltip, % "a" . A_Index " = " . a%A_Index%, A_Index*10 , % A_Index*20, %A_Index% ; ※ Sleep, 2000 } ※で色々な参照方法があるけど通るってある意味すごい
このスレってなんですか ウイルススレですか
タスクバーの右クリックで出るメニュー open をみると 履歴らしきものが出ますが、不要な場合 履歴を記録しないような設定は出来ますでしょうか。
最前面ってのはできるけど指定ウィンドウの前面って配置させることはできません?
コマンド1発じゃできないだろうけど、できると思うよ
;の後に書くコメントは日本語だとまずいですか? 英語版windowsで使えなくなるとか、何かで問題が起こるとか、 その様な不具合はありますでしょうか?
無問題
即レスthxです。
>>727 もしかすると、SetTimerコマンドを使っている場合、
コメントにダメ文字(
>>3 )が入ってるとまずい場合があるかも
先週くらいからコメントに「〜」とかが入っているスクリプトを作って使い始めたんだけど、
何回か、“NTMARTA.DLLは正しいイメージファイルではありません” というエラーメッセージが出て
他のアプリケーションを巻き込んで挙動がおかしくなることがあった
(ちょっと調べたところでは、全く処理が行われていない次回サブルーチン起動待ちの状態でエラーが出ている)
おとといくらいから該当部分のコメントを修正して様子見をしてるんだけど、いまのところエラーが出てないような感じ
http://gaatsu.ps.land.to/up/src/up_0122.jpg Gui, Add, Radio ,vRadioA , aaaaa
Gui, Add, Radio ,vRadioB , bbbbb
Gui, Add, Radio ,vRadioC Checked1, Manual
Gui, Add, Edit ,vEdit ,
Gui,Show
おおざっぱにこういうのつくってるんですがaaaaa、bbbbbにチェックが入ってると
Manualのテキスト入力欄がグレイアウトして、入力できないようにするには
どうすればよいのでしょうか?
Gui, Add, Radio ,vRadioA Gtext_usable, aaaaa Gui, Add, Radio ,vRadioB Gtext_usable, bbbbb Gui, Add, Radio ,vRadioC Gtext_usable Checked1, Manual Gui, Add, Edit ,vEdit, Gui,Show Return text_usable: ;ラジオボタンの操作に連動したルーチン GUI, Submit, NoHide If(RadioA or RadioB = 1){ GuiControl, Enable0, Edit, } Else if RadioC = 1 GuiControl, Enable1, Edit, Return
Gui, Add, Radio ,vRadioA gEvent1, aaaaa Gui, Add, Radio ,vRadioB gEvent1, bbbbb Gui, Add, Radio ,vRadioC gEvent1 Checked1, Manual Gui, Add, Edit ,vEdit , Gui, Show Event1: Gui, Submit, NoHide GuiControl,Disable%RadioC%,Edit Return
734 :
名無しさん@お腹いっぱい。 :2009/04/22(水) 21:13:52 ID:pLtZjKfp0
特定のプログラムだけスリープさせるのってできましたっけ?
735 :
734 :2009/04/22(水) 21:36:21 ID:pLtZjKfp0
api32 のsuspendthread を使ってやってみます
選択した文字列の最初の行をファイル名.txtで保存するahk教えて君
以下を何らかのイベント(ホットキーが便利)をトリガとしてで処理させる @ (クリップボードを待避) A ^cを送る B クリップボードが読めるのを待つ C PARSING LOOP を使ってクリップボードを行毎に処理させる D 1ループ目で、行内容を別変数に保存してループ終了 E ファイル出力コマンドで吐き出す F (待避したクリップボードを戻す) @Fはなくても良い ^cでコピー出来ない場合は別の方法を考える
#c:: Send,^c ClipWait SetEnv,word,%clipboard% ファイル出力 こうですか?わかりません
C Loop, PARSE を使う 区切り文字は `n 。先頭・最後の Tab, 半角スペース、 `r などは除外した方がいい ※ クリップボード内容を他の変数に代入しないでも文字列分割ループで参照できる D ここはCのループ内。やる事やったらすぐ Break。(1行目だけ欲しいから) ファイル名代入時に禁則文字を置換した方がベター E FileAppend を使う 出力内容は Clipboard そのもの。ファイル名はDで取得したもの。 このコマンドは常に追記になるので、事前に IfExist て存在したとき FileDeleteしたほうが良い 出力フォルダを変えたい・日時を入れたいとかなら、 A_MyDocuments, A_Day などの「組み込み変数」を使う
このスレってautohotkeyの海外のwikiのように 鋭い指摘やおもしろい手順がいくつもあるよな 勉強になるわ
>>732 横レスですまんが
>If(RadioA or RadioB = 1){
これは
RadioA = 1 or RadioB = 1
みたいなもの?
Radioなら1か0だから、それと等価ではある 個人的には後者のように素直に書くか、 いっそのこと if ( RadioA or RadioB ) の方が明快だと思うけどね
#IfWinActive, aaa ^Numpad9:: #IfWinActive, bbb <^Numpad9:: >^Numpad9:: ↑のように#IfWinActiveのどこかで、左か右かのモディファイアキーを使用する設定にしてると aaa がアクティブな時に Ctrl+テンキー9 を押しても機能しないのですが、 これは仕様なのでしょうか? 念のためにAutoHotkey.iniをクリアして↑のホットキーだけで試してみたのですが、同じ結果になりました。
Ver104802 で試してみたけど、(今のところ?)修飾キーに < > を利用すると < > 無しの同一ホットキーが効かなくなるみたいやね。 これは同一スクリプト内だけの問題で、スクリプトを別にすると効くみたい。 スクリプト内で < > を利用する場合、左右の区別が不必要でも < > を記述して対応するのが簡単かも。 #IfWinActive, aaa <^Numpad9:: >^Numpad9:: send, a return #IfWinActive, bbb <^Numpad9::send, b >^Numpad9::send, c
GUI, Add, Text,, %clipboard% GUI, Show 初歩的な質問で申し訳ありませんがクリップボードの内容が変更したら 表示も同時に変わるようにするにはどうすればよいのでしょうか? Redrawオプションの使い方がいまいちわかりません・・・。
OnClipboardChange
748 :
736 :2009/04/23(木) 19:55:54 ID:sSOdcq6M0
>>739 親切にありがとう
#c::
Send,^c
ClipWait
StringSplit, name, clipboard, `,.`n%A_Tab%, %A_Space%
FileAppend,%clipboard%,D:\memo\%name1%.txt
こんな感じで行き詰っています。
ファイル名取得できまへんがな
>>747 ありがとう
でも再描画の仕方がわからない・・・。
>>748 でもそれなりに動くけどな。
区切り文字がカンマ(,)またはピリオド(.)またはタブで、前後の空白除去、って動作だけど
思った通りなんだろうか。
テストした文字列の1行目に禁則文字「 \ / : * ? " < > | 」が入ってて
FileAppendでエラーになっているんじゃないかと予想。
完成するまではMsgBoxとかで変数内容確認すると良いよ。
あとエラーかどうかは、ErrorLevel調べれば分かる。
文字列置換(StringReplace か RegExReplace)で引っかからない文字にすればいい。
>>749 GuiControl コマンド
>>745 レスありがとうございます。
やっぱり仕様なのかなあ・・・
GUI, Add, Text,Vaaa, %clipboard% GUI, Show return OnClipboardChange: GuiControl, MoveDraw, aaa, return GuiClose: Exitapp わからん・・・。
>>647 誰かそれを作った人はいませんでしょうか?
754 :
736 :2009/04/24(金) 00:27:01 ID:umX25vaH0
>>750 thx
> テストした文字列の1行目に禁則文字「 \ / : * ? " < > | 」が入ってて
それでしたw
あとひとつだけ、
StringReplace, fname, name1, %A_Tab% \ / : * ? " < > | ,, ALL
複数の検索文字列はどう書けばいいんでしょうか?
>>754 以下から好きな(もしくは自分で改造できる)方法で
(どれも禁則文字をアンダースコアに変換する)
@ StringReplaceを指定文字の回数頑張る
StringReplace, FileName, FileName, \, _
StringReplace, FileName, FileName, /, _
:
A @を単純化するために検索文字リストを作成してループで回す
NG = \/:*?"<>|
Loop, PARSE, NG
StringReplace, FileName, FileName, %A_LoopField%, _
B 正規表現でやる
FileName := RegExReplace(FileName, "[\\\/\|\?\*:<>""\t]", "_", "", -1)
※ \(0x5c)に関しては誤爆がありうるので注意(BREGEXPなどを使えば回避できるが・・・)
ラジオボタン 途中で別のコントロールを追加すると、次からは新しいグループになる。 同じグループにすることってできないだろうか・・・。
今気づいたけど 組み込み関数の引数にコマンドライン引数を指定する事って出来ないんだな a = %1% とか一々しないといけないのは面倒
>>755 thx
#c::
Send,^c
ClipWait
StringSplit, name, clipboard, `r, %A_Space% %A_Tab%
fname := RegExReplace(name1, "[\/\|\?\*:<>""\t]", "_", "", -1)
FileAppend, %clipboard%, D:\memo\%fname%.txt
MsgBox,64,,%fname%.txt`rを保存しました。,2
return
ばっちりです!
おめ。
#cを連打してみると不具合が出るよ(ファイル内容を確認すれば分かる)
そのときは
>>739 のE
NoCloseでクローズボタンの無効化をしたいのですが、 ウィンドウ生成とともに無効化されるようになりません。 ショートカットキーによる無効/有効のトグルはできるのですが、 Rulesに ahk_class Notepad と書いた状態で notepad を起動しても、 新規ウィンドウのクローズボタンは有効のままです。 Disable close buttons on Window Creation のチェックボックスはチェックしています。 なぜRulesの記述が有効にならないのか わかる方がいましたらご助言お願いします。
XPのExplorerで、ファイルをドラッグアンドドロップしはじめると、 マウスカーソルが禁止マークになって、 掴んだファイルが半透明で表示されます。 このとき、マウスの左ボタンから手を離す前に 掴み中であることを識別して別の処理をしたいのですが、 掴んでるファイル名を取得する方法はないでしょうか。
たまたま似たようなの作ってた。 ; Button Up直前にGUIを置いてファイルを取得する Gui, -Caption -ToolWindow +AlwaysOnTop Gui, Show, w3 h3 Hide pattern := "ExplorerWClass|CabinetWClass" LButton:: Send, {LButton Down} KeyWait, LButton IfWinExist, ahk_class SysDragImage { CoordMode, Mouse, Screen MouseGetPos, x, y, hwnd, classNN WinGetClass, class, ahk_id %hwnd% If RegExMatch(class, pattern) Gui, Show, % "NA x" (x-1) " y" (y-1) } Send, {LButton Up} Gui, Hide return GuiDropFiles: MsgBox, %A_GuiEvent% return
おーありがとうございます! 自スクリプトに組み込んで活用させていただきます。
だれか、ahk の日本語解説本、書いて下さい。 英語は細かいところがわからなくて困る。
>1
exeからahk取り出せませんか?
パスはつけてないんですがどうやってソース取り出すか教えてください
exe2ahkでググレクズ
::a::autohotkey{ENTER} の動作にツールチップ(一秒後に消える) を着けたいのですがうまくいかず困っています。 RemoveToolTip:の部分でエラーを出されてしまいます。 a:: send ,autohotkey {enter} ToolTip, AHK SetTimer, RemoveToolTip, 1000 return RemoveToolTip: SetTimer, RemoveToolTip, Off ToolTip return なにぶん最近いじり始めたばかりなので 根本的なところで間違えてるかもですが 問題点を教えてください。 よろしくお願いします。
>>772 2行目のsendの後が全角スペースになってる。
あとsendで送られたのがautohotkeyじゃなくてutohotkeyになった。
a::を$a::に変えたら直った。
どんなエラーが出てたのかわからんけど、基本的にそのままで行けた。
> SetTimer, RemoveToolTip, -1000 で1度だけの呼び出しに出来るよ
>>773 ,774
レスありがとうございます。
>>773 の方法だとうまくいかないようです。
エラーは
Line Text:Removetooltip
Error:Duplicate label
The program will exit.
です。
環境が違うせいなのかな?
当方環境 AHK v1.0.48.02 OS:VistaHP32bit
>>774 の方法で後半部分を削ると動きました。
::a::autohotkey{ENTER}
での動作に比べて動作速度が遅くなるのは仕方ないのでしょうか?
SendMode Inputとか入れてもあんまり効果ないようです。
>>775 a::
Send, autohotkey {enter}
↓
Send, a ; ココで同サブルーチンが呼ばれてしまう。(
>>5 参照)
Send, u ; これ以降は普通に動作
:
Send, {Enter}
> 動作速度が遅くなるのは仕方ないのでしょうか?
SetKeyDelay
>>776 レスありがとうございます。
SetKeyDelayを使用して十分な速度で動くようになったのでこれで運用してみようと思います。
>>775 の時はこのスクリプトの前の他のスクリプトで既にRemoveToolTip:を使用していたため
RemoveToolTip:の部分でエラーを吐いていたようです。
WhichToolTipのあたりを勉強してきます。
書籍の形にこだわる理由は何? 流行らせるページはなんでスルーなの?
本の宣伝にならないからw という冗談は置いておいて、 流行らせるページも万能じゃないし、 もうちょっと優しめに書かれた入門書が欲しいという初心者がいても不思議じゃないと思うけど
If Var1 = %Var2% と If (Var1=Var2) とか、文法にずいぶん癖があるからなあ 最初は俺も苦労した
いや、入門レベルならそれこそググればブログなどで取っかかりから説明してるとこ沢山見つかるっしょ 英語云々書いてるってことはわざわざ原点に当たってるみたいだし むしろより高度な方向の解説を求めてるのかと思ったんだけど。
>>778 てかそれ、流行らせるページの人が書いてるものでしょ
わかりやすい書籍があれば どこででも読むかたちで予習復習できるじゃん
まず前金で200万振り込んでくれ
等価だよ IfEqual, Var1, %Var2% If Var1=%Var2% If (Var1=Var2) こういうのも通るし count=0 Loop { If (count++==3) Break MsgBox, % A_Index }
>>787 ありがとう
最後の例はすごいな
そういう発想はなかった
>>679 の := の話と似てるな
:= や if() は、式を書ける分だけ一般の高級言語に近い仕様
ahkは発展途上の過程で色々盲腸的な部分が残ってるんで分かりにくいね
ちょっとテストしてみた。1万回ループしてms単位の差がでてきた。 バッチ的に回すにしても他の処理の方が圧倒的に重いだろうし、気にするほどじゃない。
>>791 てことは if() に統一して問題無さそうだね。ありがと。
if()で使うけど、結局は%%つけちゃったり、""をつけ忘れたりする。
既出かもしれんが、autohotkey も、なでしこ みたいにbat偽装しても動くんだな。便利だわ。 ;@echo off ;"%~dp0Autohotkey.exe" "%~0" %* ;exit ;rem Autohotkey.exeのあるフォルダに hogehoge.bat で保存。 ;rem このバッチにファイルをドロップしてみる。 ;rem 下記にAHKのスクリプトを記述する。 tmpLimit=%0% Kari:="" Loop { KariI:=%A_INDEX% KariR:=chr(13) kari=%kari%%KariI%%KariR% if(tmpLimit=A_INDEX) break } msgbox,%kari%
>>794 bat偽装っていう意味がわからないんだけど、どんなシーンでなんのメリットがあるの?
>>796 Autohotkey.exeがハードディスクにインストールしてない環境や、
関連付けしてない環境でAhkスクリプトを実行したいときに便利かもしんない。
>>795 よく使ってるUWSCは拡張子をチェックしてるみたいでBatだとはねられちゃった。
なでしこも出来るわな。Dosの複数行をコメントや変数でエラーにならんように
誤魔化せて、拡張子チェックしてない場合はいけそうだ。
他のアプリからパスを受け取るコマンドってないんですか?
その他のアプリがパスをくれるなら、引数なりドラッグ&ドロップなりで煮るなり焼くなりなんなりと。 くれないならアドレスバーとかタイトルバーとかから読む。
>>799 こういうのがしたいとおもって
FileAppend,
(
これは
%ぱす%
です
),D:\aaa.txt
うまくいえないので半年ろむってます
%1%
/* hogehoge.js JscriptのスクリプトからAutohotkeyのスクリプトを使うのもOKだった ;*/ //ここからは jscriptのスクリプト Autohotkey.exeの有る場所に置いて実行。 var 変数 = "豚インフルエンザでも海外旅行";WScript.Echo(変数); var 引数空白付けて2重引用符で囲む=" "+"B"+" "+"\""+"jscriptから引数を渡す"+"\"" var 戻値 = 関数autohotkeyexeで自身のスクリプトを実行_引数空白2重引用符(引数空白付けて2重引用符で囲む); WScript.Echo("Window Script Host = AutohotkeyからのStdOut = " + 戻値); function 関数autohotkeyexeで自身のスクリプトを実行_引数空白2重引用符(sArg){ var objshl = new ActiveXObject("WScript.Shell"); var pAutohotkeyExe = WSH.ScriptFullName.substring(0,WSH.ScriptFullName.length - WSH.ScriptName.length)+"autohotkey.exe"; var objExec = objshl.Exec("\"" + pAutohotkeyExe + "\"" + " " + "\"" + WSH.ScriptFullName + "\"" + sArg); do{WScript.sleep(200)}while(objExec.Status == 0); //条件が合っている間はloop 戻値を取得 if(objExec.stdout.AtEndOfStream){var result = objExec.stderr.ReadAll();var serror = 1} else if(objExec.stderr.AtEndOfStream){var result = objExec.stdout.ReadAll()} return result} ;/* */ ;/* // ここからはAutohotkey のスクリプト Arg1=%1% Arg2=%2% Fun%Arg1%(Arg2) FunA(sMes){ FileAppend,%sMes%,* } FunB(sMes){ Msgbox,Jscriptからもらった = %sMes% FunA(sMes) } ;*/
でっていう
素晴らしい中身の薄さにワロタ
>>803 SFCminiとかDynaWrapperをインストール出来ない環境で、
jscriptからDLLを使ったり、アプリのウィンドウを制御したり、
ドロップ可能なGUIを使える程度かなw
Suppon.exeからでもDLL使えるんでいろいろできそうだけど
Autohotkey経由のほうが楽。HTAより凝ったことが出来そう。
タスクバーの上からGUIを貼り付けていろいろ改造してるのですが、 現在のテーマがLunaかClassicかを判別する、ウマイ方法はないでしょうか? 現状、タスクバーの太さ(高さ)で判別していて一見うまくいってたのですが、 「タスクバーを固定する」をONにしている環境だと、LunaでもClassicでも 高さが22で同じになってしまい、判別できなくなってしまいました。
即レス感謝!おかげさまで解決できました
WheelScroll.ahk の作者さん、ここ見ていらっしゃいますか? マルチモニタサブモニタ側 (座標がマイナス値) でホイールが利かないようなのですが、どこを直せばいいものやら… ヒントをいただければ幸いです。 AHK 1.0.48 Vista SP1 ロジクールのマウスドライバ SetPoint 4.60.122 を併用
>>809 どもです。一応座標値0,0基準での決め打ち動作などはさせていないはずなんですが
WheelRedirect()内の
CoordMode,Mouse,Screen
MouseGetPos,mx,my,hwnd,ctrl,3
で取ってるマウス座標値が怪しい気がします。これが正しくマイナス値でとれてない場合
GetScrollBarHwnd()での座標比較でこけてる可能性があります。
1.スクリプト殺したノーマルの状態で通常のホイールが効いているか
2.ToolTip,mx=%mx% my=%my% とか追加して値がマイナス値になってるかどうか
3.互換モード(WM_SCROLL)で動かした場合も動かないのか
4.管理人さんのホイールリダイレクト で正常に動くかどうか
http://lukewarm.s101.xrea.com/myscripts/WheelRedirect.zip あたりを調べてみてください。
ちなみにサブモニタは左と上のどちらでしょうか?
あー、もう一週間くらい風邪が治んない。頭痛すぎてモノ考えられないっす
GW前に医者行っとけば良かったわ
>>810 早速のご返信ありがとうございます。
実はマルチモニタは勤務先のマシンなので連休明けまで確認できません。
調べがつき次第、またここで報告させていただきます。
ちなみにサブモニタは左です。
風とのこと、どうぞお大事になさってください。インフルじゃありませんように。。。。
A_EventInfo 分だけ WM_MOUSEWHEEL を Post してるけど、 wParamの上位ワードを ±120*A_EventInfo にしてもいいんじゃないかと思う
813 :
名無しさん@お腹いっぱい。 :2009/05/03(日) 15:51:12 ID:Oe3d50Fm0
vista service pack 1です Internet Explorer 8 でimeの状態を取得したいのですがうまくいきません。 ime_funkでも同様です。どうすればいいのでしょうか。
JaneDoeViewをマウスホイールでスクロール操作する際、いったんクリックして アクティブにしないとスクロールできないため、 #IfWinActive, ahk_class TMainWnd ;jane view ~WheelUp:: ~WheelDown:: MouseGetPos,,,,class if(class = "TTreeView1") ; TTreeView2,THogeListView1,THogeTextView1も同様に ControlFocus, TTreeView1, ahk_class TMainWnd return のようにしたのですが、ホイール1を2ノッチ回さないと上手くいきません。 (1ノッチでは前にフォーカスがあった方がスクロールしてしまいます) どのように修正したらよいでしょうか?
>>814 キー乗っ取りをしない場合(~をつける)だとホイールメッセージをそのままマウス直下にスルーして、
かつスクリプトに記述した処理が実行されるため
>>814 みたいな動作になる
1) "~"を付けない処理にしてフォーカスを当ててから Send するように書き換える
2) 出来合いのモノをつかう (このスレを "Redirect" や "リダイレクト"で検索)
>>815 1)の方で上手く出来ました。有難うございます。
休止モードから復帰後に自動的に実行されるラベル的なことってできますか? 復帰後ADSL回線に自動で繋ぎたいです ちなみに休止モードへはAutohotkeyで設定しているホットキーラベルよりホットキーでやっています
・休止モードのホットキーラベルの末尾で再接続処理をする ・googleにpingを送り、帰ってこなければ接続開始する とか、いろいろ。 俺はpptpだが、1分おきにサーバへpingを飛ばして診断し、このように処理している
>>818 そんなもん外に出さないようにいちおう自分のプロバイダの鯖にしとこうよ
1秒1回のpingパケットぐらいじゃほとんど誤差だろうけど
820 :
819 :2009/05/04(月) 16:21:43 ID:O9/2Ccyo0
× 秒 ○ 分
>>820 pptpって書いてるじゃん。サーバ=pptpの接続先に自分で設置した遠隔自社サーバ
とはいっても途中経路は経由するから、結局負荷的には同じだな。
それよりもYoutubeの動画を1本見れば、ネット的に何千倍も負荷がかかるわけだから
所詮こんなのは誤差で収まるよ。今の時代、気にする方がおかしい。
822 :
817 :2009/05/04(月) 17:58:47 ID:LBMijhqy0
すみません過去ログ漁ってたらドンピシャなレス見つけて自己解決しました それと休止モードからの復帰のみなら以下レジストリの監視でもいけそうです(スタンバイは不可) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Power\HiberIoTime pingの結果で分岐という発想はなかったです覚えておきます 971 :名無しさん@お腹いっぱい。[sage]:2008/12/30(火) 00:54:09 ID:WVCIo7zL0 小ネタ。電源状態の変化を検知してサブルーチンを呼ぶ。 以下に列挙した変数に該当したイベントの通知があった場合、同名サブルーチンラベルを呼ぶ。 レジュームから醒めて録画したいときとかにでも。 PBT_APMBATTERLOW := 0x9 ; バッテリ電力が低下した PBT_APMOEMEVENT := 0xB ; OEM定義のイベントが発生した PBT_APMPOWERSTATUSCHANGE := 0xA ; パワー状態が変化した PBT_APMQUERYSUSPEND := 0x0 ; 待機要求をする PBT_APMQUERYSUSPENDFAILED := 0x2 ; 待機要求が拒否された PBT_APMRESUMEAUTOMATIC := 0x12 ; システムが自動的に復帰しようとしている PBT_APMRESUMECRITICAL := 0x6 ; 致命的な待機状態からシステムが復帰しようとしている PBT_APMRESUMESUSPEND := 0x7 ; 待機状態から復帰しようとしている PBT_APMSUSPEND := 0x4 ; システムが待機状態になろうとしている OnMessage(0x218, "WM_POWERBROADCAST") return WM_POWERBROADCAST(wParam, lParam, msg, hwnd) { global static names:="PBT_APMBATTERLOW,PBT_APMOEMEVENT,PBT_APMPOWERSTATUSCHANGE,PBT_APMQUERYSUSPEND,PBT_APMQUERYSUSPENDFAILED,PBT_APMRESUMEAUTOMATIC,PBT_APMRESUMECRITICAL,PBT_APMRESUMESUSPEND,PBT_APMSUSPEND" Loop, PARSE, names, `, if (wParam == %A_LoopField% && IsLabel(A_LoopField)) SetTimer, %A_LoopField%, -10 return 1 } ; 例) レジューム復帰時に呼ばれるのサブルーチン PBT_APMRESUMESUSPEND: MsgBox,待機状態から復帰しようとしている return
これいいな。俺も自分のスクリプトに採用するわ。引用thx
May 3, 2009 Version 1.0.48.03 is released:
条件演算子を多用すると、かなり遅くならない? スクリプトの行数を短くしようとしてif文を片っ端から変えていったら パフォーマンスが落ちまくったorz
条件式の書き方にもよるんじゃね 短絡評価はやってるみたいなんで、それを意識して書けばある程度は改善するかも x:=(0=1) and fnc(x) fnc(x) { Msgbox,fnc ; 表示されない return x }
体感できるほど速度って遅くなる? 俺は体感出来る差は感じた事無いなぁ。
>>824 の件だが
>Fixed key-up hotkeys so that if one is created while its key is being held down, the release of the key doesn't trigger the wrong hotkey.
どういうこと?いまいちわからない
>>826 短絡評価と入れ子ではどちらの方が速く処理してくれるんだろう
AutoHotkeyのマニュアルを以前ざっと読んだけど
これに関する記述は見あたらなかった気がする
>>830 おお、それで間違いなさそうだな
ありがとう
該当ページはUTF-8なので、TransForm, word, Unicode でShiftJIS(CP932)だったクリップボードの文字列をUTF-8に変換する。 更にURLに入れる文字列なのでURLエンコードを行う。 組み込みのコマンドや関数にURLエンコードは無いので自分で作るか、「AHK URLエンコード」でググって拾う。
ウィンドウクラスを指定するahk_classを使うときってClassの前方一致だと認識しないんですよね? 完全一致じゃないと駄目なんですか?
つ SetTitleMatchMode
>>833 こんな感じでnkf32.dllを使ってみたのですが、やはり文字化けします。どこが不味いのでしょうか?
;; goo辞書で検索
#j::
clipboard = ; Empty the clipboard
Send, ^c
ClipWait, 0.01
if ErrorLevel <> 0
{
return
}
SetEnv,word,%clipboard%
; nkf32.dll をロード
hModule := DllCall("LoadLibrary", Str, "C:\applications\AutoHotkey\nkf32.dll")
DllCall("nkf32.dll\SetNkfOption", "Str", "-w")
DllCall("nkf32.dll\NkfConvert", "Str", word, "Str", word)
; 開放
DllCall("FreeLibrary", UInt, hModule)
Run,
http://dictionary.goo.ne.jp/search.php?MT=%word%&kind=all return
>>833 の通りにやって分からないと言われるなら説明するけど、違うやり方で分からないと言われても困る
>>837 nkf32.dllがうまく動かないようだったので、ue.exeを使って以下でできました。
URLエンコードを自作は難しそうなので、とりあえずこれでいいかなと。
;; goo辞書で検索
#j::
clipboard = ; Empty the clipboard
Send, ^c
ClipWait, 0.01
if ErrorLevel <> 0
{
return
}
SetEnv,word,%clipboard%
Run, %A_ScriptDir%\ue\ue.exe /u goodict %word%
return
>>835 ありがとうございます。
ahk_classのとき、オプションのなしで完全一致で認識していました。
SetTitleMatchModeで正規表現(、RegEX)で思ったとおりの動作が出来ました。
でも、前方一致(,1)中間一致(,2)を使ってもahk_classでは認識しなかった…
>>832 http://pc11.2ch.net/test/read.cgi/software/1201502896/345,774 345 :名無しさん@お腹いっぱい。[sage] :2008/03/28(金) 20:40:26 [夜] ID:lF6janXs0 (PC)
%00%01%12みたいにエンコードされたURL文字列をデコードしたいのですが、
変数に入っているURLをデコードするには、どのようにすればいいでしょうか。
AutoHotkey本家サイトで、下記のサンプルらしきものをみつけたのですが、
AutoHotkey自体にまだ慣れていない状態で。たとえば %abc% という変数に
入れたURLを変換するには、どのように書けば動いてくれますか?
uriDecode(str) {
Loop
If RegExMatch(str, "i)(?<=%)[\da-f]{1,2}", hex)
StringReplace, str, str, `%%hex%, % Chr("0x" . hex), All
Else Break
Return, str
}
http://www.autohotkey.com/forum/topic18876.html
変換キー+jkliをカーソルキー代わりに使っているですが ノートPCだと keyswap で Caps→Ctrl にしたキーと上記の カーソルキーを同時押ししても認識しないんです。 デスクトップPCだと問題無いですが、HP,SonyのノートPCでは 認識しません。key history を見ると Ctrl と変換キーは 認識されているが jkli キーが認識していない様子。 こういうのは、PC固有の問題なんですかね?
質問させてください。 Chromium(Chromeの開発版)にCtrl+Sで F5を送りたいのですが、うまくいきません。 以下のように書いても、F5が送られません。 ; Ctrl+S to F5 for web browser ^s:: Send, ^s WinGet, Chrome,, ahk_class Chrome_WidgetWin_0 ControlSend,, {F5}, ahk_id %Chrome% return WinGet, Chrome,, ahk_class Chrome_WidgetWin_0 を WinGet, Chrome,, -\ Chromium ahk_class Chrome_WidgetWin_0 にすると無事に動くのですが、なるだけ ahk_class のみの指定でいきたいのです…。
>>843 キーボードの同時押しはハードウェア固有の問題です。
安いキーボードは特に同時押しができないです…。
(ゲーム用のキーボードなんかは同時押しの多さを売にしたりする)
ノートだと確認する方法がなかなかないからなあ、その辺は。
emacsでC-A-@とかやると キーボードによっては効かなくて困ることがある。
自分用の関数定義するときに%A_ScriptDir%\Lib\main.ahkに定義してインクルードせずに "main_関数名"っていう定義と呼出ししてたんだけどmain_つけるのがめんどくさくてやめた Libフォルダに入れてインクルードせずに呼出しってインクルードしなくていいこと以外メリットなにかあるの?
Aキーを1秒以下押すと、キー1入力 Aキーを1行以上押すと、キー2入力 ってどうすればいいですか? 1秒後に判定して、キー1が入力されるときも1秒後で構わないです。
a:: KeyWait, a If A_TimeSinceThisHotkey<1000 Send, 1 Else Send, 2 Return
>>850 ありがとうございました。助かりました。
>>850 は成功したのですが、
a::
KeyWait, a
If A_TimeSinceThisHotkey<1000
Send, a
Else
Send, b
Return
だと失敗してしまいます。どうすれば解決するのか教えてください。
たびたびすみません。
854 :
843 :2009/05/06(水) 21:52:42 ID:ydtKaOxE0
>>845 ,846
ありがとさんです。
やっぱりハードウェア固有の問題なのか orz
CapsLock キー(ScancodeMap で Ctrl キーに変更)以外のキーでの
コンビネーションは効いているから、CapsLock キーの扱いが
特別なのかもしれませんね。
>>853 すみませんでした。あまりに初心者すぎる質問に答えていただいて・・・
ファイル名を引数にして、そのファイルのアイコンを表示させる方法ってありませんかね? Gui, Add, Picture, , hoge.exe のような感じで、txt ファイルなどのアイコンを表示させたいんです
857 :
名無しさん@お腹いっぱい。 :2009/05/07(木) 03:25:40 ID:bL+UR/sD0
すみません。ちょっと教えてください。 Dropboxというソフトを左Altキーで終了,起動させたいと思い 次のように書きましたが,全く動作しません。 LALT:: Process, Exist, Dropbox.exe if (ErrorLevel<>0) { Process, Close, Dropbox.exe } else { Run C:\Program Files\Dropbox\Dropbox.exe } ちなみにDropboxは常駐ソフトでタスクトレイにいます。
よくわかんないが、 if ErrorLevel!=0 { でどうだ
859 :
名無しさん@お腹いっぱい。 :2009/05/07(木) 03:40:26 ID:bL+UR/sD0
>>859 どこが動かないの?
CloseかRunか、あと最後にReturn書かないとその後に続いていくよ。
MsgBox, %ErrorLevel%とかでひとつひとつ確かめていかないと。
ダメといってもいろいろ理由がある。 ホットキーが効いてるかどうかとか、 プロセスが死んだことを確認するとか、 殺すプロセスを認識できているのかとか、 間にmsgboxを挟んで、どこでつまずいてるかを切り分けすることだな
>>856 レジストリからアイコン情報を読む。
RegReadを何回かやる必要があるし、EnvGet で環境変数展開したりするんで結構面倒
>>862 うっ、意外に難しいんですね…。諦め半分でがんばってみます。
ありがとうございました
>>857 そのままコピペしてやってみたけど動いたよ。
ただし終了時にタスクトレイにアイコンは残っちゃう
Dropbox自体が割と不安定な野郎だから、
普通に終了出来ない状態になってたりしない?
Processで殺すと大体アイコンは残るよね。強制終了は精神衛生的にも、あまりよくない。 WinCloseじゃないと。
>>844 は、正規表現マッチさせてたからみたいでした。
↓これです
SetTitleMatchMode, RegEx
タイトル文字列は大概マッチするように、. にしたら無事に通りました
WinGet, Chrome,, . ahk_class Chrome_WidgetWin_0
867 :
857 :2009/05/07(木) 12:20:17 ID:bL+UR/sD0
つまらない質問におつきあいいただいてすみませんでした。 ご意見を参考にこのようにしたら動きました。 DetectHiddenWindows, On IfWinExist, ahk_class DropboxTrayIcon { WinClose,ahk_class DropboxTrayIcon Run C:\Program Files\Dropbox\Dropbox.exe return } ありがとうございます。
プロセス殺してアイコン残っても、その上をマウスでなぞれば 画面書き換えされて消えるから、そんなもんだと思っていままで全然気にしたことなかった。 そんなに問題ある方法だったのか・・・知らんかった。
>>856 FileName = %A_ScriptFullPath% ; 対象ファイル
Gui, Add, Text,, Icon of %FileName%
Gui, Add, Text, w70 h70 Border 0x203 hwndIcon1 ; アイコンを表示するコントロール
Gui Show, w400 h150, Icon Test
; アイコンを取得
hIcon := DllCall("Shell32\ExtractAssociatedIconA", UInt, 0, Str, FileName, UShortP, iIndex)
; アイコンをコントロールにセット
SendMessage, ( STM_SETIMAGE:=0x172 ), ( IMAGE_ICON:=0x1 ), hIcon,, ahk_id %Icon1%
DllCall("DestroyIcon","uint",hIcon)
>>868 ケースバイケースだが、一見動いているように見えても、後で不具合が出る場合がある。
というのも、プログラムの終了操作の時に設定データを一括書き込みするソフトは多いから。
そんな場合にプロセス殺して終了させると、設定が反映されないなどの不具合が出る。
だれかに出張仕事を頼んで、出先で仕事が終わって「用なし」になった瞬間、惨殺される感じ。
報告すべき新たな課題がなければ問題ないが、課題があったら派遣元はわからなくなる。
がっつり設定して、快適に使ってたら固まってタスクマネージャで強制終了→涙目。 ってことがあるからね。あるある。
フルスクリーンであるのか?ないのか?を調べる方法ってありますか?
アッー
>>868 と同じ考え方してたので
>>867 を参考にさせてもらった。
タスクトレイのhoge1、hoge2をWin+Qで終了するようにしたのだが、こんな感じでいいのかね?
ちゃんと終了はしているのだがahkの記述的な意味で問題ないすかね?
#q::
DetectHiddenWindows, On
IfWinExist, ahk_class hoge1
{
WinClose,ahk_class hoge1
}
IfWinExist, ahk_class hoge2
{
WinClose,ahk_class hoge2
}
Return
>>874 ありがとうございました。
これは複雑そうですね・・・
マウスのクリックロックを常用しているのですが、ペンタブレットで操作するアプリケーションが
アクティブなときだけクリックロックを無効にしたいので
http://www.autohotkey.com/forum/topic39726.html を参考にして
WinGet, pn, ProcessName, A
DllCall("SystemParametersInfo", UInt, 0x101E, UInt, 0, UIntP, lock, UInt, 0)
if pn in %MatchList%
{
if(lock = 1)
DllCall("SystemParametersInfo", "UInt", 0x101F, "UInt", 0, "UInt", 0, UInt, 0)
}else if(lock = 0)
DllCall("SystemParametersInfo", "UInt", 0x101F, "UInt", 0, "UInt", 1, UInt, 0)
return
これをSetTimerで回しています。
一応期待した動作はしているのですが、DllCallの使い方が良く分かっていないもので、ご指摘、
添削お願い出来ますでしょうか?
HKEY_CURRENT_USER, Control Panel\Desktop, UserPreferencesMask, の値が変化しないのも少し不安です・・・
>>869 ありがとうございます、できました!
テキストコントロールの枠の中にフローティングイメージを載せてる感じなんでしょうか。
DllCall や SendMessage は難しくてお手上げなのですが参考になりましたm(_ _)m
>>869 を参考にしてイAHKのメージリストに関連付けアイコンを追加してみるテスト
Gui, Add, ListView, r5 w600 Icon, Name
hImageList:=IL_Create(10,10,1),LV_SetImageList(hImageList)
Gui, Show
Loop, %A_MyDocuments%\*.*, 1
icon:=IL_Add_AssociatedIcon(hImageList, A_LoopFileFullPath),LV_Add(icon ? "Icon" icon : "", A_LoopFileName)
Return
GuiClose:
ExitApp
IL_Add_AssociatedIcon(hImageList, filePath) {
ret:=DllCall("comctl32.dll\ImageList_AddIcon", "UInt",hImageList, "UInt",DllCall("Shell32.dll\ExtractAssociatedIconA", "UInt",0, "Str",filePath, "UShortP",0))
return (ret>=0) ? ret+1 : 0
}
フォローthx。フォーラムは404だったけど .html 付けたら表示できた。
車輪の再発明だし、勉強用なら自分のブログででもやればいいと思うよ
アイコン取得は ExtractAssociatedIcon より SHGetFileInfo のほうが応用がきくイマゲ
/* ウィンドウが存在すればウィンドウIDを、存在しなければ-1を返す (UWSCのGETIDのようなもの) */ ID = % Func_GetID("メモ帳","Notepad") If ID = -1 MsgBox, ウィンドウが無い Else MsgBox, ウィンドウIDは %ID% Return Func_GetID(Title, Class) { SetTitleMatchMode, 2 WinGet, id_T, , %Title% WinGetClass, CName, ahk_id %id_T% IfWinNotExist ahk_id %id_T% Return -1 IfInString, CName, %Class% ;MFC等起動毎に変わるクラス名対策 Return id_T Else Return -1 }
;訂正 Func_GetID(Title, Class) { SetTitleMatchMode, 2 WinGet, id_T, , %Title% IfWinNotExist ahk_id %id_T% Return -1 Else { WinGetClass, CName, ahk_id %id_T% IfInString, CName, %Class% Return id_T Else Return -1 } }
SetTitleMatchMode, WinExist()
>>884 ・ウィンドウ指定は IfWinExist メモ帳 ahk_class Notepad のように条件を併記できるので、以下の一文に集約できる
id_T:=WinExist(Title . " ahk_class " . Class)
・汎用的な関数作るつもりなら、TitleMatchModeを変更したら元に戻すべき
たぶん
>>886 の言いたいことはこうだと思う
求められもしないのにコード貼りつけてる人に限って、
リファレンス読みこんでなかったり、公式フォーラムで既出だったりする罠
888 :
名無しさん@お腹いっぱい。 :2009/05/09(土) 09:11:49 ID:6Ul5swJg0
いいんじゃないの?そんなに頭硬く考えないでも・・・ 新しくAutohotkeyの世界に入ってくる人もいることだし。 他の言語みたいにいくつもスレがあるなら別だが スレすらないアプリもあるんだからさ。 ごく少人数しかレスしなくなったら自作自演で回すしかなくなる。 常連さんがそれでいいなら、自然とそういう空気になってくけど。
鋭いつっこみを有難うございます。 SetTitleMatchMode,2 id_T:=WinExist("メモ帳" . " ahk_class " . "Notepad") MsgBox, % id_T SetTitleMatchMode,1 あとahk_classの部分一致は SetTitleMatchMode,RegEXで出来ることもわかりました。
>>888 さんも有難うございます
AHKは構文が難解で分かりにくいですw
例えばUWSCならクラス名も最初から部分一致でやってくれるのですが。
それと変数の扱いもムズいですね
あまり深く考えずに「組み込み関数1発で出来るぜ」ってだけなんだけどな
ソフトウェア板だし色々な立場のレスがあっていいんじゃないかと思う。
>>889 テキスト部分は結合して記述しておk
id_T:=WinExist("メモ帳 ahk_class Notepad")
公式フォーラムの使えるスクリプトなどの内容を 日本語解説付きで転載してほしいなあ
プログラミングやったことなくてAutoHotKeyやってる コードの書き方の統一したいけどどう統一すれば最適なのか分からない 俺が書きやすい書き方でいいことはわかってるけど出来るだけプログラミング的にメジャーな書き方で書きたい if %temp% = true { msgbox, true } else { msgbox, false } もしくは if %temp% = true () { msgbox, true } else { msgbox, false } など 関数の概要と引数と戻り値の解説コメントの位置と書き方とか
人それぞれだし決まりもないようだが、俺は if %temp% = true () { msgbox, true } else { msgbox, false } Loop { あいうえお } みたいに大括弧は必ず次の行にしている。 理由は、コピペや移動するときに、行ごと選択してヒョイっと移動できるから。
autohotkeyのコーディング規則を公式のフォーラムででも 統一してくれればいいなのね
896 :
857 :2009/05/09(土) 15:07:57 ID:a2ulX55w0
SMPlayerというソフトのホイールの動作を変更したいと思います。 このように書いてみましたが,反応しません。 SetTitleMatchMode, 2 #IfWinActive, SMPlayer WheelUp::WheelDown WheelDown::WheelUp #IfWinActive こうかくと動きます。 #IfWinActive, ahk_class QWidget WheelUp::WheelDown WheelDown::WheelUp #IfWinActive ところか ahk_class QWidget は VirtualBox というソフトと同じことがわかり こちらで意図しない動作になるために,SMPlayerのみに確実にマッチさせたいのです。 最初の書き方はどう間違ってるのでしょうか。よろしくお願いします。
A:: Send,{B down} A up: Send,{B up} ってもっと簡潔に書けないの? A:: B は微妙に挙動が違う気が・・・
>>822 に関連するかもしれませんが、シャットダウンやスタンバイになる瞬間、
その操作をやめさせる方法はないでしょうか。
揮発RAMDISKドライブのバックアップを忘れてシャットダウンしてしまうことがあるので、
その対策をやりたいです。
(1)スタンバイやシャットダウンを検知
↓
(2)それを取り消す
↓
(3)至急バックアップする
↓
(4)あらためてAHKからシャットダウンさせる
という動作をさせたいのですが、2番目の方法がわかりません。
>>898 shutdown コマンドライン
rundll32.exe コマンドライン
とかでググれば出るよ。
ControlSend, , ^{Up} を2回送りたいです。 ControlSend, , {^{Up} 2} じゃ駄目でした。どうやって入力するんですか?
>>896 SMPlayerはホイール上下が直感と逆の動きだから困るよな
俺は上ので問題無かった
SetTitleMatchModeがAutoExecセクションでちゃんと実行されてる?
>>898 OnExit使えばいい
終了処理に割り込んでシャットダウンを遅らせられる
30秒くらい経つとOSが応答無しと判断して強制終了するようになってたはずだから
時間掛かる処理をするときはレジストリ変更する必要があると思う
903 :
857 :2009/05/09(土) 16:18:44 ID:a2ulX55w0
>>902 ありがとうございます。
SetTitleMatchModeの位置が悪かったようです。
動きました。
マウス直下がSMPlayerのときに,このような動作をさせるにはどうしたらいいのでしょう。
#IfWinExist, .* - SMPlayer
MouseGetPos, , ,id
WinGetTitle, title, ahk_id %id%
if(RegExMatch(%title%, SMPlayer > 0){
WheelUp::WheelDown
WheelDown::WheelUp
}
#IfWinExist
904 :
857 :2009/05/09(土) 16:21:17 ID:a2ulX55w0
>>903 すみません途中で書き込まれてしまいました。
こんな感じになるのかと書いてみましたが,
こんなのを SetTimer してマウス直下を常に監視することにすればいいのでしょうか?
SMPlayerを持ってないので代わりにOperaとJaneで動作確認した WheelUp:: WheelDown:: MouseGetPos, , , id WinGetTitle, title, ahk_id %id% if(RegExMatch(title, ".* - SMPlayer")){ IfWinNotActive, ahk_id %id% WinActivate, ahk_id %id% Send,% A_ThisHotkey="WheelUp" ? "{WheelDown}" : "{WheelUp}" }else Send, {%A_ThisHotkey%} return
>>893 そういうのは「コーディング規約」といって、大概は会社やプロジェクトごとに決めるもんなんだ。
言語によっては、その言語で推奨しているものもあるだろう。
AutoHotkeyの公式にコーディング規約があれば、それにしたがうのがいいが、
ないみたいだから。
個人の範囲では好きにしたらとしか
907 :
857 :2009/05/09(土) 19:09:39 ID:a2ulX55w0
>>905 なるほど!こうすればいいんですね!
完璧な動作です。
勉強になりました。
ありがとうございます。
行間を読んでみる
909 :
名無しさん@お腹いっぱい。 :2009/05/09(土) 22:14:06 ID:G/mtMXXx0
あ〜このソフトって ほんとなんでも出来て かんげきですね!
sc029のキーにAltをそのまま割り当てたいのですが、 sc029::alt だけだとsc029+Tabをしたときにsc029キーを離しても アプリ切り替えウィンドウが出たままになってしまいます。 これってなんとかなりますか?
通常(英数字や記号)キーを押すとDown、離すとUpだけど 漢字キーは押したときに vkf3sc029 と vkf4sc029 のUp/Downが入れ替わり (vkf3sc029 が Up のとき vkf4sc029 は Down) 離したときは何もない。 これはAutoHotKeyの仕様というよりWindowsの仕様じゃないかな。 漢字キーをAltとして利用したい場合はChangekey等で変更した方が簡単だと思う。
sc029 & Tab::alttabは?
913 :
名無しさん@お腹いっぱい。 :2009/05/10(日) 01:56:45 ID:8N8OdkOq0
XButton1 & WheelUp:: Send, ^{PgUp} return XButton1 & WheelDown:: Send, ^{PgDn} return このように設定しましたが,こうすると XButton1 のみの動作が効かなくなりました。 XButton1:: Send, {XButton1} return 無駄と思える「XButton1 は XButton1」 を追加すると動きましたが, こういうものなのですか?
そういうものです
916 :
名無しさん@お腹いっぱい。 :2009/05/10(日) 02:12:53 ID:8N8OdkOq0
>>912 ありがとうございます。
AltTabはそのままうまくいったのですが、ShiftAltTabの動作がうまく割り当てられません。
コンビネーションキーに修飾キーを追加したりはできないと流行らせるページにありましたが、
不可能なんでしょうか。
申し訳ありませんが、教えていただきたいことがあります。 RButton:: msgbox 例えば上記の様な右クリックをホットキーにするスクリプトを実行した場合に、 ウィンドウのフォーカスがコマンドプロンプト(cmd.exe)にあっている場合に限り、 右クリックをしてもホットキーを認識しないという現象が発生しています。 なお、フォーカスが他のウィンドウにあっている場合は右クリックを検知します。 また、詳細な条件を特定できていませんが、他のプログラムのせいで 処理が極端に重いときも稀に発生するようです。 これまでWindowsXPのデスクトップ機で問題なく動作していた右クリック検知スクリプトを WindowsVISTAのノートPCでそのまま動作させようとしたときに初めて発生した現象で、 #InstallMouseHookで無条件マウスフックを有効にしたり、AutoHotKeyを最新版(1.0.48.03)にしても 症状が変わりませんでした。 この現象の解決法をご存知の方がおりましたら、教えて頂きたいのですがよろしいでしょうか。
919 :
918 :2009/05/10(日) 17:00:16 ID:uT1x/KTA0
追記します。 タッチパッドのドライバ関係に問題があるのではないか、とも重い、USBマウスを装着して 右クリックを試してみましたが、やはりcmd.exeにフォーカスがあっている場合は右クリックを検知しませんでした。
インストーラやコマンドプロンプトなど、Windows標準で、初心者があまり使いそうにない 機能のウィンドウがアクティブだと定義したホットキーが効かないことが多い気がする
~LButton & RButton::Send,{End} なにが駄目?
流行らせる管理人のところの Sendコマンド用日本語コード変換 に不具合があるんで自分で作った 正規表現ばかりなんで、ちょっと遅い。今のところ不具合は無い感じ。 SendConv(str) { str := RegExReplace(str, "(?![\x81-\x9F\xE0-\xFC])([#!\+\^\{\}])", "{$1}", "", -1) str := RegExReplace(str, "\r?\n", "{Enter}", "", -1) While RegExMatch(str, "([\x81-\x9F\xE0-\xFC])([\x40-\x7E\x80-\xFC])", $) StringReplace, str, str, %$1%%$2%, % "{ASC " (Asc($1)<<8|Asc($2)) "}" Return str }
やっと私の求めていたソフトにめぐり合えましたが、質問させてください。 LButton::send,5 と書くと、左クリックしたら「5」を押すというのはできました。 マウスのサイドボタンを押したら5を押すという風にするにはどうしたらいいのでしょうか? XBotton1とかでやるとなぜかエラーがでます。
>>923 誤字ってるからじぇね
× Xbotton1
○ Xbutton1
ボットン
スクリプトがボットン便所じゃ動かんわな
927 :
名無しさん@お腹いっぱい。 :2009/05/14(木) 02:23:14 ID:h0+LiRjz0
jpgなどの画像ファイルのウインドウがアクティブなとき、 そのファイルのあるフォルダのフルパスを 取得したいんですが何か方法はありますか?
AutoHotkeyはVista対応だと思ったのですが 以下のスクリプトが、XPと挙動が違い悩んでます。 XPでは反応しても、Vistaでは一部無反応です。 例 CCleanerバージョンは同じ 原因は何なのでしょうか、ご存じの方よろしく お願いいたします。 #NoTrayIcon ^1::WinMove, A, , 202, 147, 1365, 969 ^4::ExitApp
悩んでる割には検証の過程が一切ない件
マウスジェスチャー2の設定でデスクトップ左右角をジェスチャ定義に 入れたいのですが、設定タブの新規ボタン定義の値を教えて下さい。
932 :
931 :2009/05/17(日) 00:22:46 ID:JQtSsble0
自己解決。 別フォルダのrearme見落としてました。
トラックポイント、トラックボール向けユーティリティ TrackWheel をうp。
- TrackWheel動作中にAutohotkeyのホットキーが効かないバグを修正
(不定期に暴走してボタンが効かなくなる件も対処出来たはず)
- マウスボタン以外でもIniファイルでアサイン出来るようにした
- 非クライアント領域(閉じるボタンなど)に擬似クラスを割り当て設定で利用出来るようにした。
- リストビュー専用のスクロール方式を追加。自動判定で適応させるようにした。
- 少しでもスクロールした場合にボタン押下イベントを抑止させるオプションを追加
- 縦横何れかのみをスクロール許可するオプションを追加
これに伴い[config]セクションの Button は廃止し Hotkey に変更
- 組み込みを大幅に単純化した。これに伴いTW_PostActionを廃止。
- 全く使わないトレイメニュー関連機能を削除した
- その他ユーティリティ機能をいくつか追加。
ttp://sites.google.com/site/agkh6mze/strage/TrackWheel_RC.zip >>139 とかは多分直ったと思う。様子見でRCにしておく。
サイトの更新してない(めんどう)。昔のやる気は凄かったんだなぁ。
verup乙、物置のスクリプトのバグ?報告ってココでいいのかな・・・ 流行らせるページのBREGEXPの改変版 RegExp.ahk で何箇所か記述がおかしい個所がある気がする 69行目 %name% := value が %name%_Match := value 78行目 %name%%A_Index% := var が %name%_%A_Index% := var 80行目 %name%0 := submatches が %name%_0 := submatches じゃないと説明文の記述と矛盾するような・・・ (MyRegExp_MatchじゃなくてMyRegExpMatchでマッチするようになってしまってる)
thx なるほど。説明文は殆ど変えていなかった。 / のエスケープが要らないってだけ外した覚えがある。 RegExMatch(str, pattern $) と同じように、 RegExp_Match(str, pattern, opt, "$")ってやったときに、 $ にマッチした部分、$0にマッチ数、$1〜$xx に()でグループ化した部分が入るのが好きだからそう変えたんだった。 気が向いたら直そう。
テキストファイル内の aa bb cc dd ee を bb cc ee dd aa みたいに行間隔でランダムに並べ替えたいんですがわかるかたいませんか?
行を配列に読み込んで、適当な回数(全体の行数のn倍?) ランダムに選んだ二つの要素を交換する
Sort, str, str, FRand C`n Rand(a, b) { Random, r, -1,1 return r }
^p::SendPlay,{up} Ctrl+pでカーソルを上に移動させることを意図して このように書きましたが、うんともすんとも言いません。 SendPlayの書き方まちがってるんでしょうか?
ケータイに打つときのミスです。 pは半角です。 ^p::SendPlay,{up}
ジョイパッドでの操作向上を目論んでこのソフトにたどり着きました。 まずはキーリマップからと思ったのですが、初手でいきなり躓いています。 パッドのボタンをリマップし、1→2、2→3、3→4、4→1としたいのですが、 Joy1::Joy2 Joy2::Joy3 Joy3::Joy4 Joy4::Joy1 上記記述ではエラーが発生、 Joy1::Send,{Joy2} (以下略) 上記記述ではエラーは発生しないもののリマップできませんでした。 どのような記述をすれば解決できるでしょうか? 当方WinXP、AHKのバージョンは104803です。よろしくお願いします。
>>941 Joy1を打つとJoy2を打つけど、Joy2はJoy3を打つ、
あれ?Joy3はJoy4を打つから、当然Joy4はJoy1を打つことになる。
そうだね。
>>942 さんの助言を元に、それぞれの設定を
Joy1::
{
Hotkey,Joy2,Off
Send,{Joy2}
Hotkey,Joy2,On
}
(以下略)
としてみたんですが、やはり動きません。
なにか根本的に間違ってるんでしょうか・・・。
>>944 #UseHook使うか$Joy1::Joy2じゃなかろうか?
やりたいのリマップでしょう。
>>945 リファレンスと格闘していたのですが、フックの概念が今ひとつ良くわかりません。
#UseHookで挟む事で、実行結果に対しては他の命令が適用されない、
と考えればいいんでしょうか?
ちなみに「$Joy1::Joy2」ではエラーが発生しました。
どんな「エラーが発生した」のかを、もっと細かく書いてよ。 そうすれば、スレ全体にとって、役に立つ書き込みになる
>>946 =
>>941 です。
発生したエラーは以下の通りです。
「Line Text: Joy2
Error: This line does not contain a recognized action.」
エラー発生行は$Joy1::Joy2の行です。
>>941 で起きていたエラーも同一で、該当箇所を{Joy2}とした場合にも発生しました。
リマップの割り当てにジョイパッドを直接指定した際に起きているみたいです。
AutoHotKeyのHelpの「Remapping a Joystick to Keyboard or Mouse」に Although a joystick button or axis can be remapped to become a key or mouse button, it cannot be remapped to some other joystick button or axis. That would be possible only with the help of a joystick emulator such as PPJoy. と書かれている。 英語はよく分からんのでExcite先生によると、 ジョイスティックをキーボードのキーやマウスのボタンにリマップできるけど ジョイスティックにリマップ出来ません。 ジョイスティックのリマップはPPJoyなどのジョイスティックエミュレーターで可能です。 みたいなことが書いてあるっぽい。
なんと・・・ジョイスティックへのリマップはAHK単体では出来ないんですね。 PPJoyってツールをぐぐってみた感じだと、仮想ジョイスティックツールみたいだから、 ジョイスティック入力をAHKでキー入力にリマップ→リマップされたキー入力をPPJoyで仮想ジョイスティックへ ・・・って手順を踏まないといけないんですね。なんて婉曲な・・・。
AutoHotKeyが起動していたらkill、起動していない場合起動する というバッチを作りたいんですが、起動した後にdos窓が残ってしまいます。 回避方法ありますか? @echo off taskkill /im AutoHotkey.exe IF %ERRORLEVEL% == 0 exit ("C:\Program Files\AutoHotkey\AutoHotkey.exe" "C:\home\AutoHotKey.ahk") & exit
ここで聞く事か? start "%exec%" "%script%"
@taskkill /im AutoHotkey.exe || start C:\home\AutoHotKey.ahk 頻繁にオンオフ繰り返すなら !F11:: ; スクリプトの有効化/無効化(デバッグ用) Suspend,Permit Suspend,Toggle return !F12:: ; スクリプトの再読み込み&有効化(デバッグ用) Suspend,Permit Suspend,Off Reload return みたいなのを仕込んでおくといいかも。
>>952-953 ありがとう。スレ違いだったようで失礼しました。
startでうまくいきました。
>>953 詳しくありがとう。
マクロ系のプロセスを不正とみなすゲームをプレイするとき用なので、
プロセス自体殺したかったのです。
>>951 俺は、そういうバッチ特有の面倒くささにうんざりして、AHKで全部処理してる。
#SingleInstance FORCE
↑起動時に自分が居たら勝手に起動し直す
exitapp
↑作業中のahkを自分自身で殺す場合はexitappで一撃。
これをホットキーで呼べばいい
それと、外部コマンドkillで、勝手なタイミングで殺すのって、プログラム的に良くないよ。
たとえばスクリプト中のiniファイル書換中に殺されると、
ファイルにヌル文字0x00が混じって、正常に読めなくなったりする。
終了コマンドがahkに実装されてるんだから、それを使った方が安全かつ楽だと思うのだが
,イ^i
,イ:::: l
/:::::::: l
/:::::::::: { /|
/:::::::: _`-、_ /:: {
/::::::::::: < 。\  ̄ __ l
>>951 ./::::::::::: r  ̄ ̄ :::::::..... <。゙yi 俺は、そういうバッチ特有の面倒くささにうんざりして
/::::::::::: 人 :::::::::::::::. ̄、{ AHKで全部処理してるんだよボケナス
|:::::::::::. l __`ー-、.__,,.ノ! !
|::::::::::::. \ ..`..____' / |
.l:::::::::::::. \:::::::::::::::::::::/ /
ヽ::::::::::. ___ \_ ̄~^/ ,/
\::/`ー---‐^ヽ ゙`=' /
l::: l /
_ /,--、l::::. ノ l
,--、_ノ:: `ー':: 、ミー---‐,,l \
,/ ::: i ̄ ̄ | \
/:::::::. l::: l::::::: l \
l:::::::::::. l::: !:: |::::::: l \
|:::::::::l:::: l::: |:: l::::: l l
|::::::::::l:::. }::: l:::::,r----- l l
ヽ::::::::l:::: ト:;;;;;;;/-/__........... / |
/\::::`ー‐' / l__l;;;;;;;;;;;/
/ ` /
killにリスクがあるのは当然だが、それを理解して使う分には別に問題無いと思うがね。 そもそも常駐スクリプトで、そんなに頻繁にWriteするスクリプトはそうそう使わんだろうとか、 ホットキー即exitappなんてスレッド割り込まれて終了するんだから、 トランザクションの場合に一貫性が保証されないのはkillと一緒だろうとか… 結局のところ、どのような終了のさせ方が「楽(リーズナブルと言ってもいい)」でかつ「安全」か ということを議論しだしたら、それは使用してるスクリプト・処理の内容や利用形態によるとしか言いようがない。 場合によってはkill一発で十分という解答もアリでしょ。
終了コマンドがahkに実装されてるんだから、それを使った方が安全かつ楽だと思うのだが \________________________________/ ∨ ビシッ / ̄ ̄ ̄ ̄\ / ̄\( 人____) , ┤ ト|ミ/ ー◎-◎-) | \_/ ヽ (_ _) ) | __( ̄ |∴ノ 3 ノ | __)_ノ ヽ ノ ヽ___) ノ )) ヽ.  ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ク ク || プ / ク ク || プ / ス ク ス _ | | │ //. ス ク ス _ | | │ // / ス ─ | | ッ // / ス ─ | | ッ // / _____ // / // . / l⌒l l⌒l \ )) ____ . / / ̄| ,=| |=、| ̄ヾ / ____ヽ / ̄/ ̄. ー'●ー'  ̄l ̄ | | /, −、, -、l )) 他人のやること放っとけよ | ̄l ̄ ̄ __ |.  ̄l ̄.| _| -| ,=|=、 || |. ̄| ̄ ̄ `Y⌒l__ ̄ノ ̄ (6. ー っ-´、} ヽ ヽ 人_( ヾ ヽ `Y⌒l_ノ >〓〓〓〓〓〓-イ /ヽ 人_( ヽ / / Θ ヽ| /  ̄ ̄ ̄ ヽ-イ
これで作ったexeって他の人に分からないようにできませんか?
分かる人がちょっと調べればすぐ分かっちゃうけど、 「普通の人」に対してはahk2exeのオプションとスクリプト内でのトレイ回りを変えれば ぱっと見気づかないんじゃないのかな
メニューを Send, !f して、Sendkey{down} でメニュー項目を ひとつひとつ下げていくときに、フォーカスのあたっているメニューの項目のテキストを 取得できるんでしょうか? "開く"とか"Open Video File"というメニューのテキスト。 WinGetText だとステータスバーのテキストは取得できるんだが、選択中のメニューは 駄目みたいだし。
昨日インスコして流行らせるページ読みながら、数時間掛かって出来たのはたった4行のスクリプト だけど、これだけでもソフトの使い勝手が良くなりました。 そこで質問なんですが、ahk_classってそのソフトを入れなおしたりしない、限り変わらないって認識でいいですか?
>>962 同じソフトならインストールし直してもウインドウクラスは同じ
数少ない例外だがOrchisは起動の度にウィンドウクラスが変わるよ 前方一致でなんとかなる範囲だけど
965 :
67 :2009/05/19(火) 14:52:54 ID:eL1Kmu0a0
>>933 乙です。
全般的になめらかになって手離しても止まらない事態が減ってていい感じです。
Scroll (ドラッグモード)のカクカクが超改善されてて(・∀・)イイ!!
DefaultS2=0
にしてみた。
デフォルト(DefaultS2=1)だとJaneのスレ表示がスクロールしまくりんぐ。
iniはJaneて書いてあるけど Style特化なんだな。
; Open Jane / Jane View
TMainWnd,THogeTextView,Scroll,Scroll
でいけた。
Viewのビュアー部分(TImageForm,TWebLoaderSheet)はどのモードでもバイパスしても無理っぽい。
その他自分設定
;Everything Search Engine (Scroll じゃだめっぽい)
EVERYTHING,EVERYTHING_LISTVIEW,Scroll2,Scroll2
>>965 ドラッグをエミュレートすれば動かせた。
それぞれに以下を追加。
-- TW.ini --
*,TWebLoaderSheet,~DragL,~DragL
-- TW.ahk --
TW__DragL_X(line) {
TW__DragL(line, 0)
}
TW__DragL_Y(line) {
TW__DragL(0, line)
}
TW__DragL(lineX, lineY) {
local lParam
lParam := (TW_X+lineX*4) | (TW_Y+lineY*4)<<16
PostMessage, 0x201, 0, TW_lParam,, ahk_id %TW_HwndCtrl% ; WM_LBUTTONDOWN
PostMessage, 0x200, 1, lParam ,, ahk_id %TW_HwndCtrl% ; WM_MOUSEMOVE / 1:With LButton
PostMessage, 0x202, 0, lParam ,, ahk_id %TW_HwndCtrl% ; WM_LBUTTONUP
}
------------
Scroll(サム移動)はキビキビ動くんだけど、効かないモノが多い。
Scrool2(▼▲連打)は行数分だけ命令を投げっぱなしだから処理が遅いヤツは厳しい。
>>966 d 入れてみたけどなんか不安定みたいだ
常用のViewでは全然だめだったけど、設定捨てて新規フォルダに展開するとスクロールできる
たぶんView側の設定によるんだと思うが挙動が不安定で
色々いじってるとまた動かなくなったり、動いたりする。
Viewでは素直に 左ドラッグしたほうがよさげ
>>963 >>964 レスありがとうございます。Orchisは使っていますが、今のところAHKと組み合わせる
予定はないので大丈夫だと思います。
Vista+Word2007でダイアモンドカーソルを実現しようと思い、 #IfWinActive, ahk_class OpusApp してみたのですが動作しません。 本家のフォーラムでは普通に動いているみたいです。 ・IMEはMS-IME、Office IME 2007の両方を試したがダメ ・SetTitleMatchMode, 2し、Wordで試してみてもダメ どなたか同様の環境で動いている方はいませんか?
Autohotkey for Pocket PC って使えるの?
>>969 Vista環境ないけど↓なしの場合は動くの?
#IfWinActive, ahk_class OpusApp
ウィンドウが最小化されているかどうか確認する方法はありますか?
そろそろ次スレの時期か
976 :
940 :2009/05/21(木) 19:15:00 ID:8CYf2TA70
やっと規制が解けました…。 VistaでUACオンだと、SendPlayは動作しなくなるみたいですね。 OneNoteは一部キーがSendPlayじゃないとうまく動かないので SendPlay使いたかったのですが…あきらめます。 ありがとうございました。
ちょっと質問 AHKに一時的なコマンドを覚えさせてそれを再生って感じのモノをつくったんだ。 InputBoxだして、それがアクティブの場合には a:: +a:: !a:: ^a:: #a:: +!a:: +^a:: +#a:: !^a:: !#a:: ^#a:: +!^a:: +!#a:: !^#a:: +!^#a:: とか全てのキーの組み合わせがホットキーとして記述されてるスクリプトが有効になって、 SendRaw, %A_ThisHotkey% でInputBoxにキーが送られる…ってしくみなんだが、なんかもっとスマートにできないものか。 いろいろ考えた挙句こんな無理やりな方法になってしまった。このためだけに ホットキー1500オーバーとかになってるし…。
>>978 超サンクス。英語で難しいがちと頑張ってよんでみる!!
ステータスバーの2つ目の区切り以降の文字を変更する事は出来ないのでしょうか? ControlSetTextでは1つ目の区切りの文字しか変更できないみたいです
>>971 初代[es]に入れたけどGUIとかもちゃんと動いてた
分割指定をしてから、 SB_SetParts([Width1, Width2, ... Width255]) テキストをセット SB_SetText(NewText [, PartNumber, Style])
983 :
名無しさん@お腹いっぱい。 :2009/05/23(土) 00:27:36 ID:Gh9Aou0B0
>>981 AHKのPocketPC用も軽く動くのかな?
前スレ
>>977 Gui, Add, Hotkey はWindowsキーを修飾キーとして利用出来ず、
いずれはそれっぽいものを個人的に作ろうと思ってたので
前スレ
>>978 氏のリンクを参考に書いてみた。
#SingleInstance, force
#Installkeybdhook
gosub, SetHotkeys
InputBox, OutputVar, , キーを押してください, , 180, 120
return
SetHotkeys:
Hotkey, IfWinActive, %A_ScriptName% ahk_class #32770
;リンク先のサンプルは vk?? なので入力欄ではどのキーを押したのか判別し難いので
;A-Z,0-9,F1-F12 で表示されるようにしてみただけ。他(記号やテンキー等)が必要なら要追加
keys=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
,0,1,2,3,4,5,6,7,8,9,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12
loop, parse, keys, `,
{
Hotkey, *~%A_loopField%, AnyKey_down
Hotkey, *~%A_loopField% up, AnyKey_up
}
return
1000にならずとも、メンテナンス日?に980を超えているスレは 過去ログ送りになるようなので次スレに書くつもりが 間違ってこっちにレスしてしまった・・・ 続きもあるので次スレに改めてレスしました。
梅
What's in your pocket?
Clipboard:=""
SplitPath, A_AhkPath,,Path
Loop, %Path%\Lib\*.ahk
ClipBoard.=A_LoopFileName "`n"
Loop, %A_MyDocuments%\AutoHotkey\Lib\*.ahk
ClipBoard.=A_LoopFileName "`n"
ttp://www.autohotkey.com/forum/topic32704.html
#EscapeCharを使ってる時に 1バイト圏のスクリプトを組み込む場合って 一々 ‘ を ' に置換しないといけないのが不便だなあ
#EscapeCharなんて必要なセクションでだけ使って、用が無くなったら元に戻すもんだろ
うめとく
梅煮
特殊な自分用設定に慣れると、他人の成果物を流用しにくくなる、まさに諸刃の剣
>>988 ACC.ahk,ahk,Control.ahk,Anchor.ahk,Array.ahk,Array_Test.ahk,
BalloonTip.ahk,Cdll.ahk,Cdll_Test.ahk,cGUI.ahk,Char.ahk,
Class.ahk,CmnDlg.ahk,CoHelper.ahk,Coin.ahk,CoinPurse.ahk,
COM.ahk,Control_AniGif.ahk,cRichEdit.ahk,d.ahk,Dictionary.ahk,
Dime.ahk,Double.ahk,DoubleKey.ahk,execute.ahk,Float.ahk,Functions.ahk,
Gdip.ahk,GL.ahk,IE.ahk,IEControl.ahk,Int.ahk,Int64.ahk,List.ahk,ListIncludes.ahk,
mb_snd.ahk,MI.ahk,Nickel.ahk,Node.ahk,Rectangle.ahk,Rectangle_Test.ahk,
RemoteBuf.ahk,RunDebugView.ahk,SDictionary.ahk,SetConstants.ahk,Short.ahk,
SString.ahk,String.ahk,TB.ahk,tooltipV2.ahk,UChar.ahk,UInt.ahk,UInt64.ahk,
UShort.ahk,Vector.ahk,WINDERS.ahk,WinTraymin.ahk,WM_NCHITTEST.ahk,xpath.ahk
; 行数多くて加工しないと書けなかた
を、AHKでOOPやってるのか。
>>994 すごい量だな、それ全部関数ライブラリとしての利用前提なんだ?
>>994 xpath.ahkとかそんなのもあるんかよw
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。