1 名前:名無しさん@お腹いっぱい。 [2008/12/31(水) 12:39:34 ID:ROX9gd900] ■公式 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/ 関連リンク>>2 以降も参照
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/27(火) 20:27:41 ID:WqNNCHEs0] >>149 一番お手軽なのはエディタ側でタイトルバーにファイルパス表示する設定にしといて それ取得して加工すれば?
152 名前:名無しさん@お腹いっぱい。 [2009/01/27(火) 20:41:15 ID:X4tsXHNf0] >>151 そか、ありがとう!
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/27(火) 21:18:33 ID:paF95q4q0] >>147 なるほど…常識…。はまると往々にして単純で当たり前の理由なんだなwまた間違えそうで怖い。 >>149 MouseGestureのコマンドラインを取得する関数が使える時もある。 俺が使ってるのはMenuHackerで、%arg%%titlepath%を使って、ポチエスに投げる。 メモ帳から使い慣れたエディタに開き直すときに使っている。
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/27(火) 21:28:17 ID:hKjgB29J0] >>148 IniRead と Hotkeyコマンド使え >>149 コマンドライン文字列を取得するという方法もある pc11.2ch.net/test/read.cgi/software/1219130051/683-691
155 名前:148 mailto:sage [2009/01/27(火) 21:56:28 ID:t0VmE1Ht0] >>154 設定ファイルから設定を読み込むのは出来るのですが 割り振るキーを設定に応じて変更する方法が無いものかと。
156 名前:148 mailto:sage [2009/01/27(火) 22:05:14 ID:t0VmE1Ht0] 読み違えてました Hotkeyコマンドで出来ますね すみませんでしたm(_ _)m
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/27(火) 22:19:04 ID:eAnAnnBW0] >>142 TWのテスト版だけど、こっちを試してくれるとありがたい。 一応 *今のところ* 不具合は出ていない。 あと、縦横どっちかにスクロールを固定するオプションを追加(dx, dyの大きい方のみを採用、手抜きw) ttp://sites.google.com/site/agkh6mze/strage/TrackWheel_RC.zip?attredirects=0 もしこれで直ったてら単純なコーディングミスだな...
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/27(火) 22:50:56 ID:hKjgB29J0] >>157 お疲れさまです ちょうど今の時期、在宅でのPC仕事なんで(自宅警備じゃないよ)しばらくこれで酷使テストしてみます。 つか今日気がついたけどリモートデスクトップ上でもホイール相当のスクロールは効くんだな。 さすがにマウス下ウィンドウの認識まではしてくれなかったが。 >縦横どっちかにスクロールを固定するオプション DenyBoth=1にしてみたらWinMergeでスクロールさせる時カクカクしなくなったヽ(´ー`)ノ ありがとです
159 名前:名無しさん@お腹いっぱい。 [2009/01/29(木) 06:09:04 ID:LOmhUipb0] QWERTY 配列の109キーボード用を dvorak 配列に変更しようとして #InstallKeybdHook #UseHook *z::; *+z::: と書いたところ、 Shift + z で + が表示されるようになりました。 意図しているのはもちろん : の表示です。 どのようにすればよいのでしょうか? またなぜこのように表示されてしまうのでしょうか? AutoHotkeyは最新版を使用しています。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 09:10:03 ID:b+H6/CBd0] +z::Send,: z::Send,; Remapは面倒な事があるねぇ。 これはキーコード送信でなくて、「キー置き換え」なんだわ。 つまり、 z::; と書くと以下のようになる、([]内はキー名) [Shift] +[z] -> [Shift] + [;] [Ctrl] +[z] -> [Ctrl] + [;] [Alt] +[z] -> [Alt] + [;] ってなる。 QUERTYキーボードだとおもうけど、キーに印字されたものを見れば・・・
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 09:40:20 ID:qrvrUYM20] *z::send,; *+z::send,:
162 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 14:19:47 ID:SY+Fy4ud0] >>160-161 ありがとうございます。sendでしたか。 *z::send,; *+z::send,: を記述すると常に ; が表示されるようになったので もしやと思い *+z::send,: *z::send,; と表記したらうまくいきました。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 21:38:27 ID:aLpAKfgd0] CAPSLOCKをCTRL(左)に置き換えるには どのように設定すればよいのかわかりません 旧雑記サルベージ lukewarm.s101.xrea.com/test/read.cgi/bbs/1157529465/62 >CapsLockCtrl入れ替えは実現できず こういう情報がありますが やはりレジストリを弄るしかないのでしょうか
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 21:48:36 ID:PtNO3FlD0] >>163 Change Keyでサクッと弄っちゃえばいいじゃない ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html
165 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 22:25:49 ID:Of1QsQUs0] テンプレ>3
166 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/29(木) 22:45:33 ID:wR4WwhsC0] >>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 mailto:sage [2009/01/30(金) 21:53:26 ID:HlJEMNMH0] >>167 >A_Cursorの参照 >A_CaretX(Y)の参照 >ControlClick >ControlGetFocus >ControlFocus >Controlコマンドの、Check,Uncheck やばい。バリバリ使ってる。特にControl関係は最近作ってる奴でテストしまくってた。 ってことは現象が出るのはTWじゃなくて自分が書いたスクリプトだった可能性も大だ orz ちなみにRC版導入以降、こちらでは問題は起こってないです。 (仕事が込んできてスクリプト弄る余裕がなかっただけかも知れないが)
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 22:44:06 ID:w6m+xv+i0] > ちなみにRC版導入以降、こちらでは問題は起こってないです。 発生していないなら何よりだけど、、、 >>140 書いた段階で単純なバグ(コーディングミス)を見つけて直したので、 4日くらいは大丈夫だったので、発生頻度は確かに減った気はする。 だけどさっき出たんで・・・。 原因はこっちだと思うなぁ。 というか、列挙されたコマンドってAHKでは肝なところだと思うし、 他スレッドに長い間(マウス押下中ずっと)アタッチしっぱなしって、想定してないはず。 というか、これも自体が的外れな見解なのかもしれないけどorz ちなみに、AHK の C++ のソースコードを分かりもしない癖にふいんき(何故かry で斜め読みしたら 1.0.42.02以降ではA_Cursor では実質使わないようになっているみたいだけど他は変わってない。
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/30(金) 22:49:38 ID:HlJEMNMH0] 自分も今 ソース眺めてたんだけど、ControlClickもv1.0.45 以降の"NA"モードでは AttachThreadInput()使ってないみたい。 コメント読む限りでは AttachThreadInput()で何かしらの問題が起こることは作者氏も たぶん認識していて使用頻度は極力減らしているような印象。 (テキスト翻訳で適当に解釈してるから実際はわからんけど)
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/31(土) 12:06:50 ID:DjmYD3GA0] >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 の設定に従う。
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/31(土) 13:46:06 ID:g43WAhtb0] アウチ、AttachThreadInput()でgrepかけたら、コメントで 「AttachThreadInput()を避ける」みたいなのが結構出てきたんで勝手に解釈してた。 SetForegroundWindowEx()とかの中でも使ってるし、WinActivateする度に呼ばれてるのか コーディングを工夫して避けるは無理そう。 普通のホットキー駆動だとユーザー操作が発生してからのアクションが多いから あまり問題にならないみたいだけど 間隔短くとってタイマーぶん回して高度なことやらせるのは避けたほうが無難?
173 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/01/31(土) 16:44:41 ID:XA0EcD/m0] そこまで分かる人でもAHKを使うんだな
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 03:06:41 ID:Ul6ytoNp0] 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 -> それ どこを変更すれば正常に動くのでしょうか
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 03:41:30 ID:+8QlN44X0] >>174 流行らせるページより >MatchList >「,」で区切って文字列を列挙する。 >入力内容がここに列挙したものに一致した場合、コマンドは終了しErrorLevelが「Match」になる。 >カンマ区切りだが、引数の区切りとは扱いが違い、カンマの前後の空白文字などは、文字列の一部とみなされる。 これが原因?
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 04:11:44 ID:Ul6ytoNp0] >>175 ありがとうございます!うまくいきました
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:20:16 ID:WFl1N4Nl0] 名前を付けて保存ダイアログってスクリプトから出せないのかな? ファイル選択ダイアログを表示・フォルダ選択ダイアログを表示 はあるんだけどなー。
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:32:19 ID:5OtrqmWb0] 選択ダイアログを出して ウィンドウタイトルとかボタンのテキストとか書き替えて 無理からControlとかでテキスト拾って 保存用に利用してみるとかw
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 16:35:34 ID:gM29b+OF0] FileSelectFileでできるだろ?
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 17:16:49 ID:WFl1N4Nl0] >>179 リファレンスよく見たら保存ダイアログにする方法書いてあるな 気付かなかった
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 19:02:57 ID:o14t9yXp0] アイドル状態ってどうやって調べてるんだろ? 5分ごとに、アイドル状態ならば検索ソフトのインデックス作成を行うように設定してるのだが、 Civilization4っていうゲームをプレイ中に、5分ごとにフォーカス奪われちゃってすごく困ってる。 なんか改善策ないかなー
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 19:09:30 ID:zLFlCA+70] 組み込み変数の A_TimeIdle や A_TimeIdlePhysical じゃ用はなさないってこと? というか、プレイ中と書いてあるけど、起動して放置中ってことか?
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 19:24:13 ID:nES9c2H30] Civilization4がどこまでマルチスレッド対応してるかにもよるかもね。 ウィンドウでもプロセス検知でもいいから、ゲームが起動中かどうかで判断するのが一番簡単じゃない?
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/01(日) 22:31:29 ID:IsdiFXGP0] スレッド毎のCPU占有率調べて処理すればいいんじゃね 除外設定付けておけば望みの動作になると思われ
185 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 00:37:36 ID:ghjeIC8V0] 直前に閉じたウィンドウを開くスクリプトは書けますか?
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 00:41:16 ID:/eytDMHF0] >>185 無理。具体的に言ってよ。 アクティブウィンドウを再起動させるのならできると思う。 直前に閉じちゃったのなら、常に何かしら監視していないといけないから面倒かも。
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 00:59:40 ID:1rUYw8J20] ワークステーションがロックされてる、で、パスワードを入れて復帰する。 この直後に処理を挟みたい。 OnMessageとかでトラップなのかな?
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 01:43:07 ID:ghjeIC8V0] >>186 操作ミスで閉じてしまったときに楽に復帰できたらいいなと思ったんだ。(´・ω・`)
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 02:02:47 ID:09XryvuG0] >>185 これか?外人がAutohotkeyで色々作っていたやつ。試してレス横瀬。 窓の杜 - 【NEWS】誤って閉じたウィンドウを60秒以内なら復活できる「GoneIn60s」 www.forest.impress.co.jp/article/2007/01/11/gonein60s.html
190 名前:185 mailto:sage [2009/02/02(月) 04:29:43 ID:ghjeIC8V0] >>189 サンクス!さっそく使ってみたので以下報告。結論としては不採用。 Alt + F4を押すとWinHideする仕組みらしい。で、 ・GoneIn60sのアイコン右クリックして閉じたアプリを選択 ⇒ WinShowで復帰。 ・指定時間後までに何もしない ⇒ WinCloseで閉じる。 なぜかWinKillでなくWinCloseだから、「保存しますか?」と出るはずのときに、 ・指定時間後までは何もなしで閉じたように見える。→後で急にあらわれて「保存しますか?」 となる。これは気持ち悪い。 しかも右上の×でも同様なんだけど、こっちはもっとひどくて、位置が正確でないから 誤動作する場合がある。最小化ボタンの位置で反応したり、閉じるに反応しなかったり。 WinHideの仕組みはいいアイデアだと思った。 ちなみに窓の杜の紹介記事からバージョンアップしてて、今はv1.4。
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 05:46:25 ID:BYiuvhuI0] 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? というエラーメッセージが出てしまいます。
192 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 07:28:16 ID:ghjeIC8V0] >>191 このスレでhotkeys have been receivedを検索。 特定のウィンドウでの動作は #IfWinActive, ahk_class TDefForm ;ここに処理を書く。 #IfWinActive って具合に書くといいよ。
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 08:46:33 ID:BYiuvhuI0] >>192 ありがとうございます。うまく行きました。
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 22:31:32 ID:kP24v5Wa0] www2.atchs.jp/test/read.cgi/pcpc/5/l50 こちらもつかってください。
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/02(月) 22:52:47 ID:99xZfHQW0] なぜ情報を拡散させたがるのか。 ここと流行らせるページの掲示板で十分だろ。
196 名前:187 mailto:sage [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
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 19:09:41 ID:d0uBooiq0] あるウィンドウがアクティブなときのキー設定を #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} というように逐一書いていくしかないでしょうか? 定義を二重に書かないといけないのでできれば避けたいんですが…
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 19:18:13 ID:qfq9gHtT0] 残念ながら無理(なはず)。 窓使いの憂鬱(のどか)とかkeyhacでいう「キーマップ」とか「キープレフィックス」に相当するものはない。 強いて言えば同じサブルーチンに飛ばすくらい。 ex) Gosub, 1 ; 1のキーに割り当てられている機能を呼ぶ
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 20:57:50 ID:LGJ9Ljgs0] ControlSend, , {F%key%} でできない? あと、そういう場合は Autohotkey_L の #if expression 使うと 楽に実現できそうな気がする。
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 23:23:58 ID:LGJ9Ljgs0] >>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秒以内に各キーを押すと処理が実行されて、 そうでない時は普通に各キーが送られる。
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/03(火) 23:26:30 ID:LGJ9Ljgs0] ちなみにキーマップはこんな感じで書ける。 ;--------------------------------------------- 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便利だと思うんだけど… こういう需要あんまり無いのかな?
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 00:16:05 ID:53JDVpb00] いや、あると思う。 窓使いの憂鬱とかでkeymapでの定義に慣れた人には断然分かりやすいとは思う。 というか _L って安定してる? ウニコード化してくんないかなぁ。
203 名前:199 mailto:sage [2009/02/04(水) 00:50:50 ID:mEq9h9q70] >>202 環境によるかもしれないけど、むしろ 俺の環境では本家より安定してるかな。 WinXP SP3。 本家の使ってるとスクリプトリロードさせた時に、 たまにエラー出るんだけど_Lだと今のところない。 単に俺の書いてるスクリプトがおかしいのかもしれないが… もし使う時に注意する事があるとしたら、 #if expression使う時に、時間かかる判定しないように 気をつけるくらいかな。一応タイムアウト時間も指定できる。 3ヶ月くらい使ってるけど今のところ不満は無いです。 Unicode化は…して欲しいね。
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 15:39:07 ID:MFTbk+bR0] 時間がものすごくかかる演算をDLLで組もうと思うんだけど 参考になるサイトとかないかな 中身は単純にfor文とかを大量に繰り返して結果を返す、といったものなんだけど ためしに extern "C" __declspec(dllexport) INT WINAPI extracter(int x){ return 5*x; } こんな感じのDLL組んでDLLCALLで呼び出してみたけど上手く動作しなかったんだ…
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 18:27:03 ID:k5e6IctL0] >>204 時間掛かる処理をさせるならLoadLibraryしてみたほうがいいよ
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 21:27:31 ID:Ut7+efCd0] >204 多分呼び出し規約が stdcall になってるので関数名を extracter@4 にすれば呼び出せるかも。
207 名前:206 mailto:sage [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 ファイル使えば制御はできると思う。
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/04(水) 23:14:11 ID:MFTbk+bR0] >>206-207 神 問題解決しますたありがと><
209 名前:197 mailto:sage [2009/02/04(水) 23:30:00 ID:uksORcM50] >>198-201 ありがとうございます。 >>200 の方法でできました。 >>201 とか面白いですね。
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 03:44:32 ID:He1nXNrH0] 白背景に黒い文字を書いた画像を用意して ImageSearchで*TransWhiteをオプションに指定したら真っ黒な場所に反応してしまう… 何か良い方法はないかな
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 03:58:21 ID:Ctlz88MC0] 初心者質問で申し訳ないんだけど、入力キー、回数、間隔時間を指定して 直前にアクティブなウインドウに対して、キー(コード)を送るスクリプトってどう書くの? 現状↓のような感じで詰まってる DefaultKey=Enter InputBox, OutputKey ,入力設定,KeyName で指定,,200,150,,,,,%DefaultKey% if ErrorLevel != 0 exit else counter = 1 Loop, 3 { SendEvent, {%OutputKey%} SetKeyDelay, 100 counter += 1 }
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 05:28:16 ID:JN8SH5jU0] 連続した入力 {BS 5}のように、「{}」で囲んで、右に数値を指定すると、複数回押すことができる。 って書いてるけど。
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 11:01:00 ID:6B3J8+du0] 212の言うように SetKeyDelay,100 SendEvent, {%OutputKey% 3} とするか Loop,3 { SendEvent, {%OutputKey%} Sleep,100 } でいいんでね? あとIfでExitしてるからこの場合の動作には影響ないと思うが 文法上はElseのあと { } で囲わないとまずくね?
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 14:59:25 ID:Ctlz88MC0] >>212-213 レス、サンクス やっぱ質問が悪かったか。今分からないのが、 ・入力キー、回数、間隔 を一括で各変数に入れる関数(方法) ・入力キーはKeyNameで指定じゃなく、キーコードを直接受け取りたい という感じ。ま、挫折するまで調べてみる
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 15:57:17 ID:rxk2q+A70] アクティブウィンドウのプロセスのフルパスを Autohotkey単体で取得することはできますか? Winget, OutputVar, ProcessName, A で実行ファイル名は取得できたのですが それから先がわかりません
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 16:12:39 ID:JN8SH5jU0] >>215 ほい、前スレから。俺が教えて貰ったんだけどw 47 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/25(月) 23:01:23 ID:O2etOCIT0 eamatの日記 ttp://d.hatena.ne.jp/eamat/ にあると思う 48 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/08/25(月) 23:22:03 ID:iVqjz6P/0 ttp://d.hatena.ne.jp/eamat/20050826 の一番下 これ大元は流行らせるページ管理人氏のなんだけどそっちは今見れないね。 削除されちゃったんだろか。結構需要あると思うんだけど。
217 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 20:19:48 ID:n8B6a3aC0] >>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になるけど)
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/05(木) 21:45:16 ID:dLfvsoZw0] 今押されている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) }
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 03:17:46 ID:wnkD34rd0] クリップボードに変更があったらその内容をテキストファイルに追記する、 というのを作ったのですが、下のだと数時間経つと使えなくなってしまいます。 AHKを再起動すればいいんですが毎回再起動するのも面倒です。 何か対策とか無いでしょうか? #Persistent Clipboard= OnClipboardChange: Run,"テキストファイルに追記するソフト起動" tooltip clip sleep,300 tooltip return
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 03:43:37 ID:/VPzv7st0] 俺も過去にそれを作ったことがあった。 クリップボードバッファの領域に、スクショ画像などのテキスト以外の 巨大データが出現すると、エラーメッセージなしにAutoHotkeyが死んでしまう。 解決策は見つからなかった。うまい回避法はあるのかな?
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/06(金) 05:09:20 ID:ka9EMbek0] >>201 を見て キーマップのきりかえができることにおどろいたので
222 名前:214 mailto:sage [2009/02/06(金) 05:58:59 ID:NAAOC5m30] >>217-218 こいつ・・・動くぞ、すげーー! >というか、キーコードって手入力前提でないの? 最終的に send,{vkXX} という感じでやった方が楽かなーと思ったので さて、>>218 の解読作業に移ります。ありがとう!!
223 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 02:39:29 ID:81yNBSmE0] >>216 参考になりました ありがとうございました
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 15:22:29 ID:WmNZzOvm0] スクリプト内に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
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 15:33:57 ID:AcAuyp/00] 押しいなぁ。 ボタン名省略時のデフォルトサブルーチンラベルまで分かってて、ボタン名重複時のところが分かってない、と。 もう一度解説読んでみ。
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 15:37:05 ID:AcAuyp/00] ん?もしかして Test1 と Test2 って別窓(GUI)にしたいのかな? だったら、GUI番号を変えた二つのGUIを用意するか、毎回破棄(Destroy)するとかすればいい。 どっちにしろサブルーチンラベルの重複で怒られるとは思うけど。
227 名前:224 mailto:sage [2009/02/07(土) 15:46:42 ID:WmNZzOvm0] >>225-226 あぁ G オプションってこういうときのためか Gui, Add, Button, GButton1inTest2, 1 でいけました。ありがとうございました。
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 18:34:02 ID:OHL9IjH/0] 語学関係のもの(英検、TOEIC、留学)がまったくない私が 語学について聞かれたらなんて答えるべきですか?
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 22:07:43 ID:vTbfdAUL0] ジュワワワジュワワ、 ジュワジュワジュジュワワワワワ?
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 22:16:28 ID:WFpsFaYj0] 面接官「ジュワ!ワタシジュワワイイビョウインシッテルヨワワ」
231 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 23:02:35 ID:SzMrA22TP] Vista環境だと、コンマ使うショートカット(#,::Run,cmd みたいな) のが動作しないみたいのがえらい不便だ。 これだけでXPに戻しそう…
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/07(土) 23:46:19 ID:+Kjk/oX50] >>231 スクリプトに何か問題があるんじゃない? Vista64Ultで普通に動く・
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 13:37:15 ID:lpNI9P4b0] >>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が強制発動します。 この辺の挙動がいまいちわかりません・・・ どこかに記述はありませんでしょうか?
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 21:14:11 ID:yKg3PII70] > AutoHotKey.iniの最後に以下のように書き足して ~~~~~~~ ってのがマズいんじゃないかと。 > #Persistent > SetTimer, OnTimer, 1000 この2行は多分ホットキー定義より後ろに書いてあると思うんで ファイルの頭に持ってきた方がいい。 頭から読んで順次実行するところ(Autoexecブロック)として扱われていない 死にコード担ってると思う。
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/08(日) 21:21:06 ID:yKg3PII70] うひ。解決してやがるw ttp://lukewarm.s101.xrea.com/Scripts.html#autoexecsection > スクリプトが読み込まれると、最初にReturnかExitが実行されるか、 > ホットキーラベルが記述されている行やスクリプトの終わりに達するまで、スクリプトが実行される。 > この部分のことを、auto-executeセクションと呼ぶ。 これは Gotoがあっても同じなわけ。 で、ラベルって関数じゃないから上から読んで実行するから Gotoで飛んで先のコードも順次実行するだけ。 要は > Goto, NextOnTimer を return にする
238 名前:234 mailto:sage [2009/02/08(日) 21:33:53 ID:sclNqxNe0] >>236 なるほどホットキー定義より先に書かないといけないんですね。 >>234 のコードを丸ごと先頭に書いても問題ない感じでした。 returnしてますけど、後ろのホットキー定義はちゃんと定義されるんですね・・・。 いろいろ試してみて、>>234 のコードをAutoHotkey.iniに書かずに、 別ファイルに書いて、最初に#includeするようにしても問題ない感じなので、 管理楽だしそっちで行ってみようと思います。 ありがとうございました。
239 名前:234 mailto:sage [2009/02/08(日) 21:34:56 ID:sclNqxNe0] >>237 記述もあったのか!理解が深まり助かりました。 ありがとう。
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/09(月) 22:16:03 ID:s0aAmitG0] キーのリマップで、キーリピートしないようにするにはどうしたらよいですか? 回数指定で1としても、Pauseキーなどからリマップしたものは リピートしてしまうようなのですが・・・
241 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/09(月) 22:25:30 ID:qaZxLjlv0] リマップは所詮リマップなので キーを Send したあとに、キーが離されるのを待つようにすればいい KeyWaitを使うと楽
242 名前:240 mailto:sage [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分毎に同じ操作を永遠に繰り返させるのってどういうコードになるんだ?
244 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 00:05:43 ID:2gVYx17+0] タイマーでおk
245 名前:名無しさん@お腹いっぱい。 [2009/02/10(火) 00:08:18 ID:y3Hmn7JH0] >>244 上でも出てる SetTimer,OnTimer,xxxxxx でいけるわけね納得
246 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 02:28:03 ID:5/WxU7qW0] AutoHotkey楽しすぎ ちょっとした自動応答的なボタン押下とか (AutoPushButton win32がVistaで動かないし、ウインドウ検知方法も融通も利かなくて長い間代替探してた) 長い間最前面にでしゃばってくるスプラッシュウインドウを後ろに回したりとかしようとして、 Delphiでプログラムでも組むか、マンドクセ('A`)と思ってたことが、 思いついてからものの数分でできてしまうじゃないかー。 すばらしいソフトだ。 簡易言語だと心の底で馬鹿にしてて正直すまなかった。 ホットキー定義以外のことにも使い出してから、やたら普段の操作が楽になったよ。
247 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 04:00:00 ID:4LTAENh50] ウィンドウを作成してチェックボックスをクリックしたら タスクトレイに収納されてしまいます チェックはできているようなのですが どうすれば常にウィンドウを表示できるのでしょうか 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%
248 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 04:10:55 ID:CECmGA9+0] タスクトレイにあるアプリを右クリックしたときに出るメニュー これをPostMessageで実行したいのですが WinTitleには何を指定すればよいのでしょうか アプリのウィンドウを指定しても駄目みたいです
249 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 04:36:17 ID:0gok775Y0] >>247 GUI, Submit , NoHide 「NoHide」を指定すると、ウィンドウを非表示にせずに、変数への反映だけを行う。 >>248 とりあえずDetectHiddenText, On|Off を使ってるかどうかだね。
250 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/10(火) 04:37:04 ID:0gok775Y0] はい間違えたー DetectHiddenWindows
251 名前:247 mailto:sage [2009/02/10(火) 04:38:07 ID:4LTAENh50] >>249 おお、ありがとうございます。