1 名前:名無しさん@お腹いっぱい。 [2009/05/23(土) 00:23:38 ID:78PWRd9v0] ■公式 www.autohotkey.com/ ■解説 AutoHotkeyを流行らせるページ lukewarm.s101.xrea.com/ ■過去スレ 1 pc7.2ch.net/test/read.cgi/software/1098531338/ 2 pc7.2ch.net/test/read.cgi/software/1129836713/ 3 pc11.2ch.net/test/read.cgi/software/1157043396/ 4 pc11.2ch.net/test/read.cgi/software/1184556627/ 5 pc11.2ch.net/test/read.cgi/software/1201502896/ 6 pc11.2ch.net/test/read.cgi/software/1219130051/ 7 pc12.2ch.net/test/read.cgi/software/1230694774/ ■派生版 AutoHotkey_L www.autohotkey.net/~Lexikos/AutoHotkey_L/ 駄目文字微対策版 yak.myhome.cx/junks/#ahk.cp932 関連リンク>>2 以降も参照
2 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 00:24:43 ID:78PWRd9v0] ■関連記事のあるサイト AutoHotkey メモ - Principia principia.s54.xrea.com/index.php?AutoHotkey%20%A5%E1%A5%E2 AutoHotKey - notitle.txt kan.s151.xrea.com/?AutoHotKey なまず日記 www.tierra.ne.jp/~aki/diary/ eamatの日記 d.hatena.ne.jp/eamat/ おばけ日記 d.hatena.ne.jp/obake/ 1 Hour Software by Skrommel - DonationCoder.com www.donationcoder.com/Software/Skrommel/ ACConsole www.autohotkey.com/forum/topic7831.html Tips N Tricks(公式フォーラムのトピック) www.autohotkey.com/forum/topic8795.html&highlight=gui
3 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 00:25:48 ID:78PWRd9v0] Q1:CapsLock(英数)キーの割り当てがうまくいかないよ A1:日本語環境だとLock系キーの動作は不定。 OS側がキーUp/Down情報が正しく返してこないので対処のしようがない。 OSのローカライズ段階で発生してる問題なので、窓使いの憂鬱やChange Keyのように ドライバレベルで弄らないとダメだが英語圏では問題ないらしいので今後のサポートもあまり期待できない。 対処としては前述のソフトで、CapsLock(英数)キーを別のキー(F13〜F24など)に割り当ててから AHKで利用すべし。 Q2:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ A2:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]なため。 対処としてはこれらの文字の"直後"に「`」を記述する(例:「線形`代数」)か、 #EscapeCharでエスケープ文字を別のものに変えるべし。 Q3:Shift, Ctrl, Alt, Winキー以外のキーを修飾キーとしてキー割り当てしたいよ (例:無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたいよ)など A3: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} Q4:エディタの定義はどうするの? A4:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり Q5:GUI作るのめんどくせ〜〜 A5:公式( ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使え Q6:ファイルパスに駄目文字があるんだが、、、 A6:駄目文字微対策版( ttp://yak.myhome.cx/junks/#ahk.cp932 )を使え。
4 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 00:27:52 ID:78PWRd9v0] Q7:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による) A7:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」 先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」 Q8:AHKってマルチスレッドじゃないの? タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。 A8:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。 > 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。 > → 実行中、 …:割り込み終了待ち > 元スレッド →→→→→→→→→→→……………………………………→→→→ > ★割込 ↑再開 > 割り込みスレ →→→→…………→→→→→→END > ◆割込 ↑再開 > 更に割り込み →→→END Q9:完璧なスクリプトなのに、なぜerrorが出るの? A9:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、 全角スペースをタブや半角スペースに変換してみよう。 Q10:作りたいんですけど?どうすればいいのでしょうか?ご教示頂きたいです。よろしくお願いします。 A10:簡単ですから(メモ帳等を使い)自分で書いてください。 まず、自分で少しでも書いて晒してみよう。そうしたらレスが付くかも… イントロダクション、使用例、使用方法、Hotkeys、キーリストに目を通した方が話が早いぞ。 Q11:具体的に何が出来ますか?どこにありますか? A11:マウスジェスチャ、ThumbRemap、TTBaseプラグインの数種、仮想デスクトップ等 1:「AutoHotkeyを流行らせるページ」の「My Scripts」や「BBS」の投稿スレ 2:公式のWiki「Compilations」
5 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 00:59:07 ID:78PWRd9v0] Q12:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある? A12:意味としては違いは無いけど、コマンド形式(共に前者)の方が「式」形式(後者)のほうが少し速い。 だけど、ループで大量(数万回転↑)に回さないと実感出来ないし、複数条件を使うなら「式」を使った方が速い。 Q13:ウィンドウ毎のキーマップは簡単だけど、キーを押して切り替えたりしたい。 Q13:派生版の「AutoHoekey_L( www.autohotkey.net/~Lexikos/AutoHotkey_L/ )」を使うと便利。 ; 変数KeyMapが1の時だけ、IKJLでカーソル移動 #If (KeyMap=1) I::Up K::Down J::Left L::Right #If ※ 上記以外にもユーザ定義関数などを利用して様々条件でキー・マウス設定が出来る。 Q14:配列変数やハッシュ(仮想配列)は使ええないの? A14:「式」を使うと配列やハッシュのように変数を参照できる 以下のようにした場合、A%Index%を展開してできあがった文字列の示す変数内容が x に格納される。 x := A%Index% 代入しないで参照するする事も可能、 WinGet, list, list Loop, %list% { WinGetClass, class, % "ahk_id " list%A_Index% : }
6 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 01:22:42 ID:i45iLGOr0] 新スレおめ ∧_∧ オツカレチャ━━━━━━(´∀` )━━━━━━ソ!!!!! / ヽ / 人 \\ 彡 ⊂´_/ ) ヽ__`⊃ / 人 ( (_ノ (_)
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 02:26:26 ID:EdKRGdzN0] 乙です! > A12:意味としては違いは無いけど、コマンド形式(共に前者)の方が「式」形式(後者)のほうが少し速い。 どっちが速いの?
8 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 02:29:34 ID:j0LLn1RV0] >>7 後をきちんと読めばわかるだろう
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 06:24:57 ID:Pd5cDY560] >>3 の↓は >Q:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ 別ファイルに書いといて直接変数に読み込む手もあるね (ahkスクリプト) ------------------ SetWorkingDir, %A_ScriptDir% FileReadLine, OutputVar, test.txt,1 FileReadLine, HelloWorld, test.txt,2 MsgBox, %OutputVar% MsgBox, %HelloWorld% ------------------ test.txt ------------------ 〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔 ハロ〜ワールド
10 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 08:15:38 ID:0lga1Rqg0] 前スレ >>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
11 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 08:16:18 ID:0lga1Rqg0] ;<続き> AnyKey_down: B_ThisHotkey:=RegExReplace(A_ThisHotkey, "\*~(.*)", "$1") if GetKeyState("LWin", "P") || GetKeyState("RWin", "P") B_ThisHotkey=`#%B_ThisHotkey% if GetKeyState("Alt", "P") B_ThisHotkey=`!%B_ThisHotkey% if GetKeyState("Ctrl", "P") B_ThisHotkey=`^%B_ThisHotkey% if GetKeyState("Shift", "P") B_ThisHotkey=`+%B_ThisHotkey% return AnyKey_up: B_KeyDelay=%A_KeyDelay% SetKeyDelay, -1 Send, {home} Send, +{end} Sendraw, %B_ThisHotkey% SetKeyDelay, %B_KeyDelay% return
12 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 13:32:15 ID:gAwG1DqL0] 初歩的な事ですみませんが SplashTextを中央以外に表示させる事ってできますか? スクリーンの中央に表示するって書いてあるので、中央以外は無理なのかな?
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 13:39:45 ID:aA4IMCHP0] SplashImageを使えばいいんでないの?
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 14:55:33 ID:gAwG1DqL0] >>13 イメージを表示させる事ができなかったけど、やりたい事はできました。ありがとうございます インストールフォルダに画像「splash.JPG」を置いて SplashImage , splash.JPG, B X100 Y100, 123 sleep, 1000 SplashImage, Off で画像が出ませんでした。文字は出せたのでいいといえばいいのですが、なぜ画像が出ないのでしょうか?
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 15:01:35 ID:EUJqRyaQ0] 977です。最終的にはこんなスクリプトになりました。 #SingleInstance force currentlyRecording := 0 send_mode = Event holddown := 10 between := 10 ; register all 255 virtual keys SetFormat,Integer,Hex Loop, 255 { key := substr("0" . substr(A_Index + 0, 3), -2) ; convert to hex, remove "0x", pad to two digits Hotkey, *~vk%key%, AnyKey_down Hotkey, *~vk%key% up, AnyKey_up } SetFormat,Integer,Decimal AnyKey_down: if (currentlyRecording) playback := playback . "{" . substr(A_ThisHotkey,3). " Down}" return AnyKey_up: if (currentlyRecording) playback := playback . "{" . substr(A_ThisHotkey,3). "}" return
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 15:02:26 ID:EUJqRyaQ0] 続き ToolTipOff: SetTimer,ToolTipOff,Off ToolTip return ~LWin:: tapcount=1 loop, { KeyWait,LWin KeyWait,LWin,t0.15 d if ErrorLevel=0 tapcount+=1 else break } ;---------------------ここから希望動作を入れる if tapcount=1 { SetKeyDelay, between, holddown Send,%playback% return }
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 15:04:22 ID:aA4IMCHP0] >>14 ahkがあるフォルダが作業ディレクトリになるから。 msgbox, %A_WorkingDir%
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 15:04:23 ID:EUJqRyaQ0] 続き else if tapcount=2 { if (currentlyRecording) { ToolTip,Stopped recording. currentlyRecording := 0 playback := RegExReplace(playback, "(\{[^}]+ Down\})+$", "") ; remove the "^F5" from the end } else { ToolTip,Started recording. currentlyRecording := 1 playback := "" } SetTimer,ToolTipOff,1000 return } 最初のとは結構変わってるけど、やりたいことができました!ありがとう! ただ、たまに暴発するのがたまにキズw
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 15:36:25 ID:gAwG1DqL0] >>17 ahkも同じインストールしたフォルダにあります。 C:\Program Files\AutoHotkey\splash.JPGでもダメでした
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 16:15:40 ID:78PWRd9v0] スクリプトをどこに置いて、どうやって実行してるか、でカレントフォルダは変わるよ
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 17:37:09 ID:CXZr65JJ0] 新スレ立ってたのか
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 17:51:29 ID:gAwG1DqL0] >>17 >>20 ごめんなさい、画像ファイルの名前ミスでした・・・ 初歩の初歩のミスでレス重ねてすみませんでした
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/23(土) 20:09:00 ID:aA4IMCHP0] >>22 ぇぃ! ∧,,∧ (´・ω・) ∧_∧ ⊂( ⊆ ̄つ☆))Д`) \ /⊂ ⊂~ノ と丿⊂ と_ノ
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/24(日) 20:30:16 ID:UimWf5FR0] SQLiteModule.ahkの1.1の関数のSQLite_GetSelect(db, sql, text, ByRef row, ByRef col)で データベースの列の最後の値がNULLだと次のレコードを変数に格納してくれない気がする よく検証してないから分からないけど最後の列の値になにか入れたら次の行は一応格納してくれた
25 名前:24 mailto:sage [2009/05/24(日) 20:40:28 ID:UimWf5FR0] いや、やっぱり8列目までしか対応してないだけっぽいかも SQLはじめてやるもんで朝から苦戦しっぱなし 基本情報取るときに少しやっただけだが辛い
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/24(日) 20:54:05 ID:2/JStSCV0] autohotkey で sqlite を使う用途がいまいち思い浮かばない 何に使うんだろう
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/24(日) 23:30:10 ID:ERJmg4L+0] 同一キー連打でキーマップ切り替え。AutoHotkey_L専用。 コンビネーションキーよりいい感じ。 #If *vk1Dsc07B:: KeyMap:=(A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300)+1 KeyWait, vk1Dsc07B KeyMap:=0 return #If (KeyMap==1) h::Left j::Down k::Up l::Right #If (KeyMap==2) h::Home j::PgDn k::PgUp l::End
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 05:07:06 ID:+20GCM/K0] Guiの手始めにじゃんけんゲーム作ってみたところ 勝敗引分けの統計がほぼ平均的にバラけてて ランダムといってもあまり偏ったりしないもんなんですかね
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 19:06:52 ID:K51ru5IJ0] >>26 使ったことないけど配列とかリストの代わりになるのかな?
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 19:49:53 ID:ayEEflNj0] なるよ。普通の言語の配列みたな気軽さを求めると痛い目に遭うと思うけど。
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 20:54:05 ID:D8xwJFNr0] 前スレ1000の某所の裏ってどこ? 1000 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/05/24(日) 14:29:38 ID:h0rZeR9o0 1000ゲト? あるえ?>>999 なんでドキュメントの方のリンク載せちゃったんだろ? Class library ttp://www.autohotkey.net/~animeaime/ClassLibrary/ こっちっすね。 Class library (OOP) - Help Thread: ttp://www.autohotkey.com/forum/topic42244.html Class library (OOP) - Wish list / Bug reports thread: ttp://www.autohotkey.com/forum/topic40293.html ; >>994 ,999,1000のネタ元は某所の裏からっす。
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 21:36:07 ID:K51ru5IJ0] >>30 そうかそういう手があったのか 非表示のリストビューで無理矢理リスト作ってたわ俺w
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 21:50:53 ID:3ssrsEXY0] >>24 作者だけど忙しい+結構立ってるので理解が・・・ 自分用にコメントつけておけばよかった >>26 自分用TV表が欲しかった お気に入り機能でデータ保存には何が良いだろう→SQLが一番 と考えて
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 22:37:00 ID:ayEEflNj0] ぬるぽかと ttp://www.3rd-impact.net/Document/SQLite/Translation/Current/capi3ref.html#sqlite3_column_text
35 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/25(月) 23:47:59 ID:3ssrsEXY0] INTEGER、FLOAT、TEXTしか判断してないっぽい 514〜521を if($result == 3) { if(!SQLite_Column_Text($query, $nowCount, $get)) { $errMsg = SQLite_GetSelect->%$errMsg% return False } } else { $get = "" } で対処可能なはず blob型ってのがよく分かってないのでとりあえず空文字で
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 00:05:37 ID:3ssrsEXY0] >>35 これミスでした ttp://lukewarm.s101.xrea.com/up/file/109.zip これで大丈夫なはず
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 01:24:00 ID:+TlrQY3d0] RButton::return で右クリックを殺してるはずなのに、ゲーム中で右クリックすると無効になってません どうしてでしょう? ゲームのプロテクトとかそんなんですかね?
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 02:49:14 ID:Y7ZtP0Kd0] そんなところだろうね。たぶんDirectInput
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 10:46:40 ID:WTUueAPd0] >>38 DirectInputはキー切ったり、送ったりはできないのですか?
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 11:33:39 ID:24/J68kf0] 公式のFAQにあるけど、DirectInputでも一部は動くこともある ・SendPlayを使う ・SetKeyDelayを増やしてみる SetKeyDelay, 0, 50 SetKeyDelay, 0, 50, Play ・ControlSendを使う GameguardやNPro使ってるんだったら、ドライバレスでマクロができるゲーマー用のマウス買った方が楽かと
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 17:13:05 ID:QN5A7Hfw0] If A > %A_Index% Count ++ Hoge%Count% = hogehoge みたいに配列的に変数を使ってその数が不定の場合、これらのメモリを一括で開放する方法はなにかありますでしょうか。 Loop,%Count% { Hoge%A_Index%= } Loopで回せばいいのはわかりますが、Countの値を保持してなければならずあまりスマートな感じがしないので、「配列のメモリを解放」みたいなコマンドがあればと思って。
42 名前:24 mailto:sage [2009/05/26(火) 18:39:35 ID:qcaMCxpC0] >>36 うお、よくわかんないけど直りました ありがとうございます >>26 ちょっとした記憶用ソフト作りたくて頑張ってました すでにCSVで問題、答え、苦手度、最後に解いた日、間違ったフラグ(次正解すれば解除)とか記録してて そのCSVを読み込んで出題するAHKはほとんど完成系で作ってあるんだけど いろんな条件で抽出するときやっぱりCSVよりSQLのWHERE文があればと思ったのがきっかけ
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/26(火) 18:48:49 ID:24/J68kf0] >>41 内部的には配列ではなくそれぞれ独立した変数として扱われてるのだから一括解放は無理なんじゃないかな どうしても一括解放にこだわるなら、以下のようなライブラリを使ってみるとか ttp://www.autohotkey.com/forum/topic36600.html ttp://www.autohotkey.com/forum/topic35041.html ttp://www.autohotkey.com/forum/topic14881.html それから余計なお世話かもしれないけど、hoge=ではメモリが解放されない場合がある この辺はVarSetCapacity()のヘルプに書いてあるけど、一度64にセットしてから0で解放する必要がある
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/27(水) 06:01:02 ID:49MLE6WY0] 前スレでVista+Word2007でダイアモンドカーソルを実現しようと思った者です。 返信すごく遅くなって申し訳ありません。 今日試してみたらなぜか普通に動くようになってました。 1日潰してあんなに動かそうとしても全然動かなかったのに…。 前スレでレス下さった皆様ありがとうございました。 お騒がせしました。
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/27(水) 22:13:25 ID:ghabN5mP0] 先輩方 初めてのAutoHokeyで書いてみたのですが おかしなところを突っ込んで頂けると嬉しいです。 #Persistent SetTimer, Note, 3000 Note: Process, Exist, notepad.exe NewPID = %ErrorLevel% if NewPID = 0 { Run, notepad.exe, c:\, /UseErrorLevel } 3秒ごとにメモ帳が動いてるか確認 動いてなければ メモ帳を起動する notepad.exeなんか存在しませんのときにエラーウインドウが立ち上がらないように処理 作業ディレクトリがc:\は良く意味がわかっていないorz メモ帳が動いてた時の処理はループするだけだから問題ないのかな(´・ω・`)
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/27(水) 23:03:39 ID:2RG+Zvrk0] >>45 SetTimerの後と、最後の行にreturn入れてる?
47 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/27(水) 23:19:55 ID:HF3buD8W0] >>45 うごくから、いいんじゃないのかな。 >>46 のツッコミはもっともだが、起動時に1回処理を噛ますと言う意味では処理としては良いと思う。 (SetTimerの後にreturnをわざと置いていないのだとしたら) 第2引数は作業フォルダ。ショートカットを右クリックし見たてプロパティ画面のと同じ。 メモ帳なら空でもいい。 プロセスが無くなるまで待つ方法もある。 Process, WaitClose, %pid%
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 00:06:27 ID:wZfk3OyC0] >>46 >>47 ありがとうございます。 settimerの後はreturn入れると挙動がおかしかったので入れてません。 最後の行に入れてないのは入れたら終わってしまうと思っていれてないです^^; 作業フォルダのご説明大変わかりやすいです^^ この場合は特になくても大丈夫そうですね。 作業フォルダがいつか消滅したときのことを考えてエラーを吐かれると嫌だったので 絶対存在し続けるc:\にしてみました。 returnを入れてもう一度ためしてみます。
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 00:10:25 ID:wZfk3OyC0] #Persistent SetTimer, Note, 3000 return Note: Process, Exist, notepad.exe NewPID = %ErrorLevel% if NewPID = 0 { Run, notepad.exe, c:\, /UseErrorLevel } return 言われた通りにretrun二つ突っ込んで見ましたがちゃんと動きますね return入れてないと処理がきちんと修了しないからだんだん重くなっていったりしますかね? 違いが全くわかりません^^;
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 00:14:22 ID:wZfk3OyC0] Return GosubやHotkeyのサブルーチン処理から戻る Remarks GoSubでジャンプしていないときにReturnを実行すると、 Exitを実行したときと同様にスレッドを終了する。 サブルーチン処理をしていない場合はなくてもよいのかなと思い込んでみる。。
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 00:18:11 ID:k3jZrIoJ0] これだけでいい気がする Loop RunWait, NotePad.exe
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 01:23:49 ID:g2Gpk75K0] SetTimerって待機スレッド(プロセス?)がどんどん溜まって 重くなったりしないかと不安であまり使ってない…。実際のところどうなんでしょ?
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 05:19:31 ID:UHCBZ4+L0] Autohotkeyの中で疑似スレッド的に動いてるだけで、OSから見たら常に単一プロセス単一スレッドだから CPUやメモリリソースへの負荷はあまり考える必要が無いと思うけど。 疑似スレッドの制御は本物のプロセス/スレッドのように複雑じゃないので、 実質上の負荷は、実際にタイマースレッドで動作するAHKコードの量で判断してもかまわないと思う。 それにスクリプト実行中はSetBatchLinesで指定した間隔で10msのスリープも入って、 OS全体の負荷を高めないような作りにもなってるし。
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 16:22:04 ID:ar6yU5aO0] AutoHotKey、さっきはじめて知りました。 スクリプトとか全然わかりませんし、わかるのはBASICぐらいですw でもなんとかマニュアルを参考にして10分ぐらいいろいろやってるのですが。。。 たとえば、Winキー+y で、iTunesがアクティブなときだけ最小化したいんですが、 スクリプトは、これでOKでしょうか? 一応動いているのですが、なにか問題があるでしょうか? >>>>>>>>>>>>( iTunesがアクティブなら最小化 )<<<<<<<<<<<<< #y:: IfWinActive iTunes WinMinimize,iTunes IfWinActive return レベルが低い質問でごめんなさい...orz そもそも、なにがやりたくてAutoHotKeyを知ったのかといいますと、 任意のホットキーを押したとき、 (1)任意のアプリが起動していなければ起動する。 (2)任意のアプリが起動していて、かつ、最小化状態またはバックグラウンド状態なら、アクティブに(最前面に持ってくる)。 (3)任意のアプリが起動していて、かつ、最前面(アクティブ)ならば、最小化する。 こういうのをやりたかったんです。
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 16:24:36 ID:ar6yU5aO0] そもそもなぜそんなことをやりたいのかといいますと、、、 最近、プログラマブルキーボードを買ったのですが、 1つのキーだけで、任意のアプリのアクティブ化と最小化をトグルしたい。 あるキーを押したら指定したアプリのウィンドウが最前面に来て、 そのアプリが最前面にあるときに、そのキーをもう一度押したら そのアプリのウィンドウが最小化する、みたいな感じです。 でもそんな簡単なことすらプログラマブルキーボード付属のユーティリティーではできず。。。 で、いろいろ考えて、その任意のアプリにWindows標準のホットキーを割り当て、 プログラマブルキーボード側の任意のキーにそのホットキーをアサインすれば、 上記の(1)と(2)だけは実現できるんですが、(3)がどうしても実現できないんですよね。 んで、国内外のフリーウェアをかなりいろいろ試したんですが、(1)(2)と同時に(3)ができるものが 数時間探しても見つけられず、また、こういうのって、 検索ワードがホットキーとか最小化とか一般すぎる言葉になっちゃって 自分の求めているソフトを検索エンジンで探しにくいんですよね。。。。 てなわけで、長くなってしまいましたが、AutoHotKeyにこれからハマってみる予定です GUIまで作れちゃったりするみたいで、恐ろしいほど高性能でびっくりですよ、ほんと。
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 16:25:18 ID:ar6yU5aO0] コメントアウトは >>>>>>>>>>>> で大丈夫でしょうか?
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 16:32:10 ID:Rj+x9ILK0] まだ初心者の俺が、試しもせずにしゃしゃり出てみる #y:: IfWinActive, iTunes { WinMinimize,iTunes }else{ Process,Exist,notepad.exe If ErrorLevel<>0 WinActivate,ahk_pid %ErrorLevel% else Run,notepad.exe } return
58 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 18:06:51 ID:ar6yU5aO0] >>57 早速、ありがとうございます! notepad.exeになってしまってますが、 iTunes.exeに変えると動きますね!
59 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 18:08:03 ID:ar6yU5aO0] >>55 ,56を書き込んだあとに、自分で考えたものは以下でした。 以下でも一応ちゃんと動くみたいです。 でも、>>57 さんのように、ちゃんとahk_pid %ErrorLevel%みたいに 指定したほうが確実ですよね? #y:: IfWinActive,iTunes { WinMinimize,iTunes } else { WinActivate,iTunes Process,Exist,iTunes.exe If ErrorLevel=0 { Run,iTunes.exe } } ;;;IfWinNotExist iTunes ;;; Run,iTunes.exe return ただ、iTunesって名前が付いたフォルダとかアプリが開いていると そっちのほうが最小化しちゃったりしますけど、それも本当は、キッチリPIDを調べてやれば、誤動作もなくなるんですよね? 数時間いじったらかなりわかってきました!ありがとうございます!! 本当に面白くて可能性を感じるソフトですよね!
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 18:08:51 ID:ar6yU5aO0] ありゃりゃ、 ;;;IfWinNotExist iTunes ;;; Run,iTunes.exe の部分はコメントアウトでした..orz
61 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 19:31:15 ID:Rj+x9ILK0] ちなみに>>57 のやつはAutoHotkeyを流行らせるページに載ってたヤツのコピペです。 暇なときにでものんびり読んでみるといいよ。
62 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 21:32:48 ID:jz4l290M0] >>36 これはいいね。使わせてもらうよ ところでライセンスは何?
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 22:02:37 ID:k3jZrIoJ0] マウス周囲のを指定した大きさの正方形でデスクトップまで穴をあける。再度呼び出すと元に戻す。 ~RCtrl::ClipWindow() ClipWindow(size=200, ignoreClassPattern="Shell_TrayWnd|BaseBar") { static clipped If (!clipped) { DetectHiddenWindows, Off CoordMode, Mouse, Screen MouseGetPos, mx, my WinGet, list, List Loop, % (list-1) { IfWinNotExist, % "ahk_id " list%A_Index% continue WinGetClass, class If ignoreClassPattern && RegExMatch(class, ignoreClassPattern) continue WinGetPos, x, y, w, h mx1:=mx-x-size//2, my1:=my-y-size//2, mx2:=mx-x+size//2, my2:=my-y+size//2 If (mx1>w || my1>h || mx2<0 || my2<0) continue WinSet, Region, 0-0 %w%-0 %w%-%h% 0-%h% %mx1%-%my1% %mx2%-%my1% %mx2%-%my2% %mx1%-%my2% %mx1%-%my1% 0-%h% clipped := list%A_Index% . (clipped ? "|" : "") . clipped } } else { DetectHiddenWindows, On Loop, PARSE, clipped, | WinSet, Region,, ahk_id %A_LoopField% clipped= } }
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/28(木) 22:33:50 ID:qyNknqLm0] >>63 これいいね ちょっと感動した 使わせてもらいます。
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 00:36:46 ID:DA5drrjA0] Vistaじゃ動かないな
66 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 00:37:02 ID:u1yo0xzx0] >>63 面白いな 穴あいてるときにSetTimerでマウス追従するとさらに便利 堪能するためにわざわざ壁紙張ってしまったw
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 00:40:11 ID:0CBSOWcu0] もちろんエロい壁紙だよな
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 01:12:50 ID:ZNykQa940] s = %A_thishotkey% s1 = %s%% msgbox,%s1% return s の変数の値の末尾に % を付け加えて それを s1 に保存したいのですが (A_thishotkey が a だとすれば "a%") こうかくとエラーになります。 どうすればこれを実現できますか。
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 01:19:50 ID:keMVWhB40] 敷居が高いのもあるからどんどん流行ってくれ
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 01:25:55 ID:5w+b34I70] >>68 s1 = %s%`% 最後の % をエスケープする(デフォならShift + @)
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 01:27:23 ID:y2qE0/Pv0] >>68 エスケープ s1 = %s%`% MsgBox, %s1% 式を使う方法もあり s2 := s1 . "%" MsgBox, % s2
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 01:29:55 ID:ZNykQa940] >>70-71 ありがとうございます!
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 08:36:17 ID:HnnwY0C40] 少しお聞きします。 無変換とシフトと任意のキーというホットキーの定義の仕方はありませんでしょうか? vk1Dsc07B & +g:: SplashTextOn,,, Test... Sleep, 600 SplashTextOff return などとやっても、無変換+シフト+Gを拾ってくれないのです・・・ +vk1Dsc07B & gだと読み込み時にエラーがでるし…。
74 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 08:42:33 ID:vciG3EmH0] >>73 コンビネーションキー 「&」を使うことで、2つの任意のキー(ジョイスティック以外)の組み合わせをホットキーに指定することが可能。 3つ以上のキーを指定したり、+^!#で修飾キーを追加したりは出来ない。 If GetKeyState("Shift","P")
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 08:54:53 ID:vciG3EmH0] 最初に vk1Dsc07B & g:: If !GetKeyState("Shift","P") return を追加すれば大丈夫か
76 名前:1/2 mailto:sage [2009/05/29(金) 13:22:46 ID:u1yo0xzx0] >>63 のマウス追従Ver 作ってみた。 タイマ未使用、Shiftで固定、ESCで終了 #1:: ClipWindow_MouseFollows() ClipWindow_MouseFollows(size=200, Pause="Shift",endKey="ESC", ignoreClassPattern="Shell_TrayWnd|BaseBar") { static list IfNotEqual,list,, return ;semaphore DetectHiddenWindows, Off CoordMode, Mouse, Screen WinGet, list, List Loop, %list% l := list%A_Index% . (l ? "|" : "|0x0") . l While !GetKeyState(endKey) && Instr(l,WinActive("A")) { if GetKeyState(pause) { KeyWait,%pause% pmode := (pmode!=1 ? 1 : 0) } IfEqual,pmode,1, continue MouseGetPos, mx, my if ((mxs-10 < mx) && (mx < mxs+10) && (mys-10 < my) && (my < mys+10)) continue mxs:=mx, mys=my
77 名前:2/2 mailto:sage [2009/05/29(金) 13:24:56 ID:u1yo0xzx0] Loop, % (list-1) { IfWinNotExist, % "ahk_id " list%A_Index% continue WinGetClass, class If ignoreClassPattern && RegExMatch(class, ignoreClassPattern) continue WinGetPos, x, y, w, h mx1:=mx-x-size//2, my1:=my-y-size//2, mx2:=mx-x+size//2, my2:=my-y+size//2 If (mx1>w || my1>h || mx2<0 || my2<0) continue WinSet, Region, 0-0 %w%-0 %w%-%h% 0-%h% %mx1%-%my1% %mx2%-%my1% %mx2%-%my2% %mx1%-%my2% %mx1%-%my1% 0-%h% if !Instr(clipped,list%A_Index%) clipped := list%A_Index% . (clipped ? "|" : "") . clipped } Sleep,50 } DetectHiddenWindows, On Loop, PARSE, clipped, | WinSet, Region,, ahk_id %A_LoopField% list= } >>67 プリインスコのメーカーロゴ、エロいの持ってねぇ(´・ω・`)
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 13:36:25 ID:tLIgPVbp0] 最小化したときにタスクトレイにアイコン化するアプリを タスクトレイに入った状態からアクティブ化するのは無理でしょうか? その手のアプリ、みんなWinActiveが効きません...orz
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 15:06:40 ID:+GBy9qZg0] DetectHiddenWindows, On
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 15:41:21 ID:tLIgPVbp0] >>79 そんなコマンドがあったとは! 即レス本当にありがとうございます! ほんと、ahkってなんでもできるんですねー
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 22:49:46 ID:y2qE0/Pv0] 昨晩のやつの改造版。アクティブウィンドウ以外に黒いシェードを掛ける。2K/XP用。ビデオ鑑賞にでもどぞ Gui, +LastFound -Border +ToolWindow +AlwaysOnTop -Caption +0x02000000 -0x0CC00000 +E0x00080020 Gui, Color, 000000 ; ここで色をかえてもおk WinSet, Transparent, 200 ; 透明度(1-255) Gui, Show, NA x0 y0 w%A_ScreenWidth% h%A_ScreenHeight% SetTimer, Timer1, On Timer1: SetWinDelay,-1 WinGetPos,x,y,w,h,A x1:=x, y1:=y, x2:=x1+w, y2:=y1+h If (lx1==x1 && ly1==y1 && lx2==x2 && ly2==y2) return Gui, +LastFound Gui, +AlwaysOnTop WinGetPos,,,ww,hh WinSet, Region, 0-0 %ww%-0 %ww%-%hh% 0-%hh% %x1%-%y1% %x2%-%y1% %x2%-%y2% %x1%-%y2% %x1%-%y1% 0-%hh% lx1:=x1, ly1:=y1, lx2:=x2, ly2:=y2 Return
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 23:08:59 ID:IKD+qEU60] おもしろいな 解除はどうやるんすか?
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/29(金) 23:13:54 ID:y2qE0/Pv0] タスクトレイw
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/30(土) 06:17:34 ID:84IZ3aep0] >>74-75 2つ以上ダメなんですね。以外に不便…。というかホットキー扱いじゃないのかな ありがとうさんです。試してみまする
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/30(土) 13:39:34 ID:pp0cJZID0] >>36 のSQLite_GetSelect関数ってフィールドの数が10個以上あると変数重複するよね? 例えばLV111の場合11行目の1列目、1行目の11列目で重複みたいに 俺が頭悪いだけ?
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/30(土) 14:25:44 ID:yxno/H630] それが仕様だと思うよ。 > %接頭辞%%行番号%%列番号% := 値 って風に代入してるし > %接頭辞%_%行番号%_%列番号% とかにすれば平気なんだろうけど
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/30(土) 14:40:43 ID:pp0cJZID0] なるほど。 ライブラリいじらないとだめか。
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/31(日) 01:53:08 ID:jQyIS5jG0] >>36 関連でわからないことがあったので便乗して質問します SELECT * FROM test WHERE 〜 というところで、 ' が含まれる項目をうまく探し出してくれません autohotkey 特有のエスケープ処理か何かのせいか?と思ったのですが いまいちよくわかりません ' が含まれる項目を処理するときに同じような症状に出会った人はいますか?
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/31(日) 20:18:32 ID:g4+Xfjng0] 引数の基準フォルダと対象ファイルパスを元に相対パスを返す関数ってありますか?
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/31(日) 21:26:54 ID:3pSi+qBb0] Path_RelativePathTo(From,atrFrom,To,atrTo) ; 相対パスを作成 ; From : ベースパス ; To : 相対にするパス ; atr : ファイル属性を指定 ; ディレクトリ 0x10 (FILE_ATTRIBUTE_DIRECTORY) ; ファイル 0x20 (FILE_ATTRIBUTE_ARCHIVE) { VarSetCapacity(t,260,0) DllCall("SHLWAPI.DLL\PathRelativePathToA", Str,t , str,From, Uint,atrFrom, str,To, Uint,atrTo) return t } Path_CommonPrefix(p1, p2) ; 2つのパス名の先頭から共通するディレクトリ名を取得する { VarSetCapacity(t,260,0) DllCall("SHLWAPI.DLL\PathCommonPrefixA", Str,p1, Str,p2, str,t) Return t }
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/31(日) 21:59:11 ID:g4+Xfjng0] >>90 ありがとうございます 無事できました
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 01:21:39 ID:nMoGzHYT0] AutoHotkey v1.0.48.03.L30
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 15:00:23 ID:KxOltqgo0] 変数%aaa%の中に変数%bbb%を組み込みたいです。 %aa%bbb%%では駄目でした。 どうすれば出来ますか?
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 15:57:15 ID:nMoGzHYT0] 「%aaa%」と書いた場合、 ・コマンド内は、変数に格納された値 ・式や関数の中では、%〜%を展開した文字列が名前となる変数 となるけど、 「組み込みたい」の意味が分からないから具体例で。
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 16:27:57 ID:5kiaGP5n0] よくわからんが多分 Transform,Deref, String あたりではないかとエスパーしてみる
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 16:33:11 ID:9Rwj7uYk0] 流行るページを参考にしたのですが、わからない箇所があるので教えてください Ctrl-x,Ctrl-sで保存(Ctrl-S)の実行、Ctrl-sで検索(Ctrl-f)の実行をしたいと思っています ところが下記のスクリプトでCtrl-x,Ctrl-sを実行すると、Ctrl-fが送られてしまいます このように置き換え対象のキーも別のキーに置き換えてしまっている場合、どのように対処すれば意図した動きになるのでしょうか? ^x:: Transform,CtrlS,Chr,19 Input,InputChar,C I M L1 T1,{ESC} If InputChar=%CtrlS% Send,^s Return ^s:: Send,^f Return
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 17:02:21 ID:nMoGzHYT0] いろいろやり方はあるけど、^s:: のところでA_PriorHotkeyで分岐すりゃいいんじゃないの ^x::Return $^s:: If A_PriorHotkey = ^x Send, ^s Else Send, ^F Return
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/01(月) 17:36:14 ID:9Rwj7uYk0] >>97 試してみたところ意図した動きになりました。感謝です! ^x::Returnでキーの動きを無効化しても組み込み変数に値は入るんですね 勉強になりました。ありがとうございました>< 2ストロークで設定しているキーバインドが多く、書き換えが面倒なので、 勉強もかねて関数をつくってやってみたいと思います
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/02(火) 18:58:42 ID:xwgWw2A40] 対象窓で、文字入力中or変換中なら1を、変換候補窓が出ているなら2を、それ以外なら 0を返す。 ATOK2007とMS-IME8.1で確認。クラス名がバージョンの数値違いだけなら別verでも通用するかも。 IME_IsConverting(winTitle="A") { hwnd:=WinExist(winTitle) WinGet, pid, PID, ahk_id %hwnd% tmm:=A_TitleMatchMode SetTitleMatchMode, RegEx ret := WinExist("ahk_class ATOK\d+Cand|imejpstCandList\d+ ahk_pid " pid) ? 2 : WinExist("ahk_class ATOK\d+CompStr|imejpstcnv\d+ ahk_pid " pid) ? 1 : 0 SetTitleMatchMode, %tmm% return ret }
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/02(火) 19:44:30 ID:rJZ7jJ5w0] >>99 昔から何度も質問に出てましたよね。IMEで変換中かどうかを知る方法。 ついに実現できる人がいたとは。 さっそく試してみます。