[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 01/22 01:40 / Filesize : 157 KB / Number-of Response : 443
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

AutoHotkey スレッド part17



1 名前:名無しさん@お腹いっぱい。 mailto:sage [2013/11/02(土) 18:27:44.86 ID:h5sjW8CN0]
■配布元
www.autohotkey.com/
本家Autohotkeyは事実上開発停止で、派生のAutoHotkey_L(AHKL)が主流。
新規利用者には日本語の扱いで不具合の無いAHKLのユニコード版の利用を推奨。

■前スレ
AutoHotkey スレッド part16
anago.2ch.net/test/read.cgi/software/1367725658/

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

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

テンプレ>>2-10

348 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/04(土) 20:58:34.93 ID:iZ9IYWWx0]
単純に、crtl+cじゃ駄目なんだっけ?

349 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/04(土) 21:10:03.42 ID:w5g57NbE0]
>>348
こんな機能あったのかwサンクス

350 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/04(土) 21:29:26.58 ID:AjuKralY0]
Windows標準の機能だけど意外と知ってる人いないよね

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 01:54:21.50 ID:SqERt/fB0]
いやそこは「レベル低すぎだろ」って突っ込んであげたほうがいい希ガス
こんなもんも知らないんじゃAHKなんて活かし様ないだろ

352 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 03:01:54.64 ID:KGEDNDUc0]
>>351
ハイハイ、よかったね。

353 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 15:08:46.89 ID:b/yWfANK0]
Ctrl+CでコピーしたらCtrl+Vでパスを貼り付けられるようにしてほしかった

354 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 16:25:36.08 ID:tFFNLJlE0]
>>353
出来るだろ?

355 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 18:41:09.85 ID:b/yWfANK0]
>>354
エクスプローラではできんかった
VistaHomeBasic32bit

356 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 18:59:56.66 ID:sZA4GYag0]
AHK関係ないだろ
AHKを使ってってことなら余裕で実現可能だし



357 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/05(日) 19:02:03.05 ID:b/yWfANK0]
そりゃそうだw

358 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/06(月) 02:57:17.10 ID:6M7KTWEQ0]
Send,^{Home}
Send,{Ctrl down}{Home}{Ctrl up}

この2行って違いあります?
前者だと誤動作することがあって後者に書き換えるとうまくいくことが度々あるんですが

359 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/06(月) 03:00:38.51 ID:sxo5qzGk0]
多分差はない。下ほうがうごくならそっちのほうがいいかも
ただもし他の処理とかち合ったらctrlが押しっぱなしになるかも・・・?

360 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/06(月) 03:29:08.93 ID:6M7KTWEQ0]
>ただもし他の処理とかち合ったらctrlが押しっぱなしになるかも・・・?

試しに
Sleep,1000
Send,^{Home}
としてみたら安定動作しているみたいなので
もしかしたら他のキーが一瞬押されているのかもしれません
処理に入る前にCtrl,Alt,Shift,Winあたりの押下状態を調べてUpされるのを待つなり警告出すなりしてみます
ありがとうございます

361 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/06(月) 12:29:28.31 ID:0G6McRFW0]
文字コード関係で困って自己解決したので報告です

AutoHotKeys_L unicode 64bit

特殊文字を指定するためのコマンド ASC{ nnnn } について。
解説だとnnnnをユニコードで指定できるとなっていますが、実際はキーボード(IME)の言語に依存します。
日本語キーボードならShift_Jis番号として解釈されるます。

Send {ASC 220} は
日本語キーボード だと 「ワ」
USキーボード だと 「ウムラウトの大文字U」

ユニコード番号で指定するためにはこのスタイルで書けばいいみたいです
Send {U+nnnn} * nは16進数のユニコード番号

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/07(火) 14:57:06.16 ID:HnLr3QxO0]
文字列「{a { b } c}」から先頭の「{」と末尾の「}」を取り除き、
「a { b } c」にしようと以下のようにしたのですが、
ret2で末尾の「}」が取り除けません。
Pattern指定のどこが間違っているのでしょうか。

Target := "{a { b } c}"
Pattern := "^\{"

ret1 := RegExReplace(Target, Pattern)
msgbox, % ret1

Pattern := "$}"
ret2 := RegExReplace(ret1, Pattern)
msgbox, % ret2

363 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/07(火) 15:08:35.62 ID:LQVBB70R0]
Pattern := "}$"

364 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/07(火) 15:42:37.93 ID:HnLr3QxO0]
>>363
ありがとうございました。

365 名前:名無しさん@お腹いっぱい。 [2014/01/08(水) 22:14:01.50 ID:kARE6RtX0]
エレコムのM-XG3Gを買ったんですが、専用ドライバーをインストールするとWheelLeftとWheelRightがAHKで拾えなくなります。
ドライバーをインストールしなければ拾えるんですけど、こういう場合、
ドライバーをインストールしたままチルト入力を拾うことってできないもんなんでしょうか?
チルト系のスクリプト全部書き直しになると地獄です。

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/08(水) 22:37:43.84 ID:NA8co93/0]
>>365
2.3 マウスにホットキーの割り当てをしても反応しない。 ttp://ahkwiki.net/Faqs
専用ドライバーの設定に対してAutoHotkeyで割り当て

ドライバー(WheelLeft→他のキーに変更)

対象のキーにAutoHotkeyで割り当て



367 名前:名無しさん@お腹いっぱい。 [2014/01/08(水) 22:52:22.20 ID:kARE6RtX0]
>>366
それしかないですかね?
あいにくここのドライバF13以降の割り当てができないので
なにがしかのキーボードのキー(or プラス修飾キー)を使うことになってしまうんですが。
エレコムのドライバが制御してるキー入力判定を読み取ることとtか無理ですかね?

368 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/08(水) 23:18:29.84 ID:NA8co93/0]
>>367
ドライバツールの段階でAutoHotkeyで拾えない独自のWheel***になってるのでドライバをどうにかするしかない。
もしかしたらドライバの設定ファイルを直接いじればF13以降も出来るかもしれない。

369 名前:名無しさん@お腹いっぱい。 [2014/01/08(水) 23:43:56.71 ID:kARE6RtX0]
>>368
そうですか。難しそうですね。
ドライバーのインストールフォルダの中にあったkeyboard.iniの中に
マウスボタンに割り当てるキーボードのキー情報がありました。中にあったF12キーのスキャンコードをF13のスキャンコードに置き換えて
マウスのチルトにF13を割り当ててAHKでF13を制御してみましたがいけました。どうもです。
しょうがないんでWheelleftとWheelrightは全部これで置き換えます。

370 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 12:38:55.17 ID:5Gf14WnP0]
今現在、SetTimerとWinActiveをループさせながら複数ウインドウの監視してるのですが、
この方法よりも「イベントフック専用APIを利用する」方が無駄のない方法だと知り
https://sites.google.com/site/agkh6mze/howto/winevent
此処にあるサンプルを元にウインドウ出現の監視をしようと思っています。

しかし、今動かしてるスクリプトは当該ウインドウの終了(WinNotExist)も監視してるため
WinNotExistに当たるイベントも取得したいのですがそれらしいのが見あたりません。
WinNotExistに当たる定数は何なんでしょうか?

EVENT_OBJECT_DESTROY = 0x00008001
かな?と思い、
EVENT_SYSTEM_FOREGROUND = 0x00000003
の代わりに指定してみましたが、何か違うような…

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 18:56:09.10 ID:1hwoDp2F0]
ウィンドウを最善面にしたらウィンドウタイトルバーの色を変える(ようは目立たせる)
というようなことをしたいです

特定のウィンドウタイトルバーの色を変えることはできますか?

372 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 19:18:49.36 ID:5Gf14WnP0]
370です。前の疑問がまだ解決してないんですけど、もう一つ質問させて下さい。(欲張ってすいません)
SetTimerの第3引数に優先度を指定できますが、特に指定しなければデフォルトの0になると思うんですけど、
その場合のスレッド起動の順番はどういう順番になるのでしょうか?

メイン.ahk
  ┃
  ┣━ サブ_1.ahk(メイン.ahkにインクルード)
  ┃
  ┗━ サブ_2.ahk(メイン.ahkにインクルード)

スレッド起動の順番は、[メイン.ahk]→[サブ_1.ahk]→[サブ_2.ahk]ですか?

また、任意に優先順位を決める場合、数字か大きい順に高いと判断して良いのですか?

メイン.ahk(SetTimer, hage, 1000, 3)
  ┃
  ┣━ サブ_1.ahk(メイン.ahkにインクルード SetTimer, turu, 1000, 1)
  ┃
  ┗━ サブ_2.ahk(メイン.ahkにインクルード SetTimer, bozu, 500, 2)

優先順位高い順に(スレッド起動の順番)、[メイン.ahk]→[サブ_2.ahk]→[サブ_1.ahk]と思っていいのでしょうか?

373 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 19:25:24.39 ID:5Gf14WnP0]
>>371
ux.getuploader.com/autohotkeyl/download/33/AltKGM12.zip
これは枠を強調表示するみたい・・・試してないので詳細不明なんです。

374 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 19:30:37.83 ID:CVWfPYOb0]
>>371
AutoHotkeyウィンドウなら Gui,Flash
それ以外はOSのAPI関数 FlashWindowEx

目的のコマンドが無い場合はAPI関数を調べる癖付けるとイイよ。
ttp://www.autohotkey.com/board/topic/92043-problems-with-flashwindowex/

375 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 20:23:13.35 ID:CVWfPYOb0]
>>370
無いものはないんじゃない?

>>372
例えがおかしい、スレッドはインクルードや.ahkは関係ないスクリプトは上の行から順に開始される。
現在のスレッドより優先度が低い場合、割り込みは行われず、操作は無視される。
ttp://ahkwiki.net/Threads

■通常(優0)
> → 実行中、 …:割り込み終了待ち
> 元スレッド   →→→→→→……………………………………→→→→
>                  ★割込                ↑再開
> 割り込みスレ          →→→→…………→→→→→→END
>                        ◆割込 ↑再開
> 更に割り込み                →→→END

■元スレッドの優先順位が高い場合割込無視される待機もしない
> 元スレッド(優2)   →→→→→→→→→→→→→→→→→→→→END
>                  ★割込無視
> 割り込みスレ(優1)      ×待機もしない
>                        ◆割込無視
> 更に割り込み(優1)            ×待機もしない

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 21:16:51.01 ID:5Gf14WnP0]
>>375
レスどうもです。

>>370の件は、地道にSetTimerとWinActiveをループさせときます。

あと、よく見たら、>>372の上の図で抜けがありました(すみません)
正確には、それぞれのahkでSetTimerでループ(?)しています。

メイン.ahk(SetTimer, hage, 1000)
  ┃
  ┣━ サブ_1.ahk(メイン.ahkにインクルード SetTimer, turu, 1000)
  ┃
  ┗━ サブ_2.ahk(メイン.ahkにインクルード SetTimer, bozu, 500)

この場合、どの順序でSetTimerが働くかは読み込まれた順
(メイン.ahkでインクルードを記述した順)で決まるってことなんですね。

また、下の図の優先度云々の件は、割り込みに関係するのであって順番ではないんですね。

お手数お掛けしました。ありがとうございました。



377 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 21:19:34.41 ID:1hwoDp2F0]
>>373-374
本当にありがとうございます
試してみます

378 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/09(木) 21:21:07.33 ID:5Gf14WnP0]
>>376訂正

X >>370の件は、地道にSetTimerとWinActiveをループさせときます。
○ >>370の件は、地道にSetTimerとWinActive及びWinNotExistをループさせときます。

379 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/10(金) 07:00:36.49 ID:NhKU6AoL0]
こんなメモリーから読み取るBOT作られりゃ、そりゃゲーム会社も対策するわ。

Bot made in Autohotkey beats SSFIV AE 2012 on hardest difficulty
www.youtube.com/watch?v=daqBboLaMKk

Autohotkey自体の寿命が縮まらなければいいのだが。

380 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/10(金) 21:29:28.71 ID:5Jklg+MO0]
AHKからVBS(WSH)使う時はScriptControlで出きるけんど、VBSからAHK使う方法手有るのん?
試してないけんど、AutoHotkey.dllっちゅうのでできるんかいの?

それから、下のスクリプトのコメントで書いてるように
AHK側→VBS側へ変数の中身を渡せないんだけんど、何か方法ないっすか?
VBS側でAutoItX3.dllなんか使ってクリップボード介すしかない?

obj := ComObjCreate("ScriptControl")
obj.Language := "VBScript"
;~ moji := "12345" ;←AHK側で指定してVBS側へ変数の中身を渡す事ができない

script =
(
moji = "あいうえお" '←ここで直接書く他無い?
MsgBox moji
)

obj.ExecuteStatement(script)

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 11:06:35.83 ID:0NPVogb40]
これホントだとしたら日本ってつくづくガラパコスだよね

img104.imageshack.us/img104/3740/stolevf2.jpg

日本国内だと UWSC > AHK >> AutoIt っぽいけど…

382 名前:380 mailto:sage [2014/01/11(土) 12:14:03.24 ID:L93ysrB90]
結局こんな感じで・・・・・ちょっとだけスッキリしますた(´・ω・`)
AHKにも文字列を入れた変数を展開先で実行してくれる機能有れば良いのにぃぃぃぃぃ

script_before =
(
moji = "あいうえお"
title_string = "VBSを動かす - WshShell.Popup"
)
script_VBS := Exec_VBS(script_before, "d")
Exec_VBS(script_VBS)

次レスへ...

383 名前:380 mailto:sage [2014/01/11(土) 12:15:03.39 ID:L93ysrB90]
>>382のつづき

;"d":「データ取得モード」でVBSが動くように完全な文字列を取得(戻り値有り)
;モード無指定(実質"c"指定):「実行モード」となり、上で取得した文字列を実行する(戻り値無し)
Exec_VBS(tmp_script, mode = "c") {
    if (mode == "c") {
        obj := ComObjCreate("ScriptControl")
        obj.Language := "VBScript"
        obj.ExecuteStatement(tmp_script)
        return
    }

    script =
    (

    '↑ ここの空白行は、引数の文字列と結合する時の「改行」代わりになるので【必須】
    MsgBox moji, 3+32, "VBSを動かす - MsgBox"

    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Popup "12345", , title_string, 4+64
    )

    if (mode == "d") {
        return (tmp_script . script)
    }
}

384 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 13:11:55.87 ID:L93ysrB90]
>>381
オレの場合、実用scriptの数で言うと

VBS(WSH) + AutoItX3.dll > AutoIt > AutoHotKey > UWSC

ファイル/フォルダ扱う処理ならVBS(WSH)がこん中で一番扱いな、個人的に
UWSCはほぼ使わんから知らん

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 13:18:25.44 ID:DkUM7X060]
海外ではAHK出る前からある程度AutoItが普及してたんじゃない?
日本内でのAHKの認知度が上がったのはリファレンス訳して流行らせようとした人の功績だし
日本の場合ジワジワ浸透よりマニア推しの働きかけのほうが影響出てるように思う

386 名前:名無しさん@お腹いっぱい。 [2014/01/11(土) 13:31:33.31 ID:ezMuEju20]
基本的に日本語のリファレンスが充実してる言語しか日本じゃ流行らんし



387 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 17:49:30.45 ID:RzNhSytD0]
>>381
gazo.shitao.info/r/i/20140111174750_000.png
ぐるぐrトレンドですまんが、AutoitがじわじわAutoHotkeyに迫られてる気がするぞ。

お国で違うようなので、突っ込んで調査したい人は各自でグリグリやってくれ。

388 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 18:09:22.23 ID:xrpAHSIh0]
さきほどここでAutoItを知って、いまAutoIt調べまくってた
キーリマップはAHKが強いみたいだからUWSCの代替になるのかと勘案してるんだが
専用スレは落ちて久しいみたいだな

389 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 19:26:16.84 ID:eIcYw4Wm0]
Chromeバージョンアップでマウスホイールでタブ切り替え
ControlSend,,^{PgDn}, ahk_id %Win%
ControlSend,,^{Tab}, ahk_id %Win%
が効かなくなったんですか代替策ないですかね?

390 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 19:43:25.75 ID:ZCvYVkOb0]
>>389
最新版(バージョン 31.0.1650.63 m)で普通に反応するが・・・。
環境と問題のスクリプトぐらい書こう。

391 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 20:26:07.39 ID:eIcYw4Wm0]
すみません
Win7 x64とAHKL x64 最新です
WheelDown::
MouseGetPos,,,Win
ControlSend, , +^{Tab}, ahk_id %Win%

ちゃんと非アクティブ時にも動きますか?
こちらもアクティブ時は動きますが非アクティブ時に機能しなくなりました

392 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 21:20:41.28 ID:ZCvYVkOb0]
+^{Tab} → ^{Tab} → {Ctrl Down}{Tab}{Ctrl Up}
Return がないのでSend以降の行までいっている可能性あり

---------------------------------------------
; SetKeyDelay,,100 ;反応しない場合

WheelDown::
MouseGetPos,,,Win
ControlSend, , {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win%
; ControlSend, ahk_parent, {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win% ;FireFox用
Sleep 90
Return

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 21:47:05.49 ID:ElkyttuT0]
つまりautoitの日本語訳作れば大逆転なの

394 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 21:50:17.80 ID:eIcYw4Wm0]
>>392
サンクスです!
試したんですがそれだと非アクティブ時もアクティブ時も両方機能しなくなりました・・・
SoundBeepを入れてちゃんとスレッドが実行されていることは確認済みです


ですが
ControlSend, ahk_parent,, {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win%
にするとアクティブ時のみ機能します
しかし相変わらず非アクティブ時に動きません

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 22:03:44.75 ID:ZCvYVkOb0]
>>394
ユーザーアカウント制御 (UAC)をOFF
フック使う #UseHook
間隔調整 SetKeyDelay,***,***
ahk_parent 有り無しで試す

396 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 22:25:56.03 ID:L93ysrB90]
>>393
AutoItのリファレンス(chmヘルプ)の中見れば分かると思うが
膨大な項目数の割りに一つ一つの説明が簡潔だから
英語が不得意でも全然分かりやすいと思うぞ

それに、ボタン一発でサンプルの動作確認もできる親切設計だ

もし日本語訳リファレンス有るんならオレも欲しい



397 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 23:03:50.10 ID:Rzl8ngLT0]
>>396
blog.livedoor.jp/blackcode/archives/1224220.html
で日本語訳chmファイル配布してるけどver.3.3.6.1のままなのが少し残念

398 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/11(土) 23:07:18.92 ID:benG0tTg0]
スレ立ててそっちでやれよ

399 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/12(日) 02:13:21.88 ID:HTX3Hu0i0]
>>395
サンクスです
ですが何故か非アクティブ時だけどうしても効きません

400 名前:名無しさん@お腹いっぱい。 [2014/01/12(日) 04:20:51.54 ID:N0XLrLft0]
はじめまして。
NumLockキーを押し間違えるので
NumLock::return
と書いたのですが、そのあと、本当に必要な時のために
#NumLock::Send {NumLock}
と書いても動作しません。

どこをどう間違えているのでしょうか?

401 名前:名無しさん@お腹いっぱい。 [2014/01/12(日) 04:23:19.43 ID:N0XLrLft0]
追記。Windows XP 32bitです。

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/12(日) 05:44:25.72 ID:7kMoVYjO0]
>>400
Lock系のキーへのキー割り当ては上手く行かない。
ttp://ahkwiki.net/Trouble#LockTrouble

---------以下代案--------
#If !(GetKeyState("LWin","P") or GetKeyState("RWin","P"))
*NumLock::Return
#If

403 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/12(日) 21:44:58.99 ID:eJUQGLfo0]
Execute string in AHK - Support - AutoHotkey Community
www.autohotkey.com/board/topic/51532-execute-string-in-ahk/

ここ↑をヒントに文字列を実行する関数作ってみた
所詮素人が作ったものなんで突っ込み所有ると思うので、手直し必要なら教えてちょ(´・ω・`)

Exec_Strings("MsgBox,2,title_test,test test test")
Exec_Strings("WinClose,無題 - メモ帳 ahk_class Notepad")
Exec_Strings("gosub,label_sub")

Exec_Strings(cmd_strings){
    Array := StrSplit(cmd_strings, ",")

    call_func := % "func_" Array[1]
    cmd_strings := RegExReplace(cmd_strings, Array[1]",")

    if (InStr(Array[1], "MsgBox")) {
        %call_func%(Array[2], Array[3], Array[4], Array[5])
    }else if (InStr(Array[1], "WinClose")) {
        %call_func%(Array[2], Array[3], Array[4], Array[5], Array[6])
    }else if (InStr(Array[1], "gosub")) {
        %call_func%(Array[2])
    }
}

次レスへ続く

404 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/12(日) 21:45:38.86 ID:eJUQGLfo0]
>>403の続き

func_MsgBox(a, b, c, d) {
    MsgBox, % a, %b%, %c%, %d%
}

func_WinClose(a, b, c, d, e) {
    WinClose, % a, %b%, %c%, %d%, %e%
}

func_gosub(a) {
    gosub, % a
}

label_sub:
    MsgBox, sub_sub_sub
return

405 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/12(日) 21:54:15.08 ID:eJUQGLfo0]
>>403
Exec_Strings()関数内の「cmd_strings := 〜」の行は不要ですた

406 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 13:13:27.29 ID:oE7uW8Qb0]
関数も文字列として送れるようにした
とりあえずこんな感じだけど個人的には満足しとります(リマップ用スクリプトが見た目スッキリした)

Exec_Strings("kansu_1(""hoge hage"")", "f")
Exec_Strings("kansu_2(""Auto"",""HotKey"")", "f")

Exec_Strings(cmd_strings, function = ""){
    if (function = "f") { ;引数functionが「f」なら、cmd_stringsは関数と判断する
        Array := StrSplit(cmd_strings, "(")
        Pattern := "^""|""|\)$"
        tmp_Arg := RegExReplace(Array[2], Pattern)
    }else{
        Array := StrSplit(cmd_strings, ",")
        call_func := % "func_" Array[1]
    }
    if (InStr(Array[1], "kansu_1")) {
        kansu_1(tmp_Arg)
    }else if (InStr(Array[1], "kansu_2")) {
        arg := StrSplit(tmp_Arg, ",")
        kansu_2(arg[1], arg[2])
    }
}
kansu_1(hikisu){
    MsgBox, % hikisu
}
kansu_2(hikisu_1, hikisu_2){
    MsgBox, % hikisu_1 hikisu_2
}

スレ汚しスマンかった(´・ω・`)



407 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 15:32:09.11 ID:ExwEl34b0]
>>406
関数を追加するたびに else if を増やしていくのは面倒くさそう
InStr() で1つずつ調べるより IsFunc() で関数の存在と引数の個数を調べて
分岐するほうが楽じゃないかな

後、MsgBox や WinClose みたいに単体で動作するやつは新規スクリプトに
書き出してそれを実行するほうが好み
引数の個数で分岐する必要が無いし、エラーが発生しても元のスクリプトが
止まらなくてすむ

408 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 15:38:03.02 ID:qvRdmS//0]
関数とラベルチェック作るとするじゃん?

if (islabel(check))
gosub % check
else if(isfunc(check))
    この行どうしよう?
else
    Send % check
return

409 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 16:03:58.58 ID:ExwEl34b0]
やるとしたらこんな感じかな
arg1, arg2, ... は適切に設定されているとして

n := IsFunc(check)
if(n)
{
 if(n==1)
  %check%()
 else if(n==2)
  %check%(arg1)
 else if(n==3)
  %check%(arg1, arg2)
 else if(n==4)
  %check%(arg1, arg2, arg3)
  以下、予想される最大数の n まで
}

410 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 19:57:19.56 ID:oE7uW8Qb0]
>>407,>>408
アドバイスありがとう。お陰でかなり洗練されたけど、突っ込み所有れば容赦なく言ってちょ

Exec_Strings(cmd_strings, function = ""){
    if (function = "f") { ;引数functionが「f」なら、cmd_stringsは関数と判断する
        Array := StrSplit(cmd_strings, "(")
        Pattern := "^""|""|\)$"
        call_func := % Array[1]
        tmp_Arg := RegExReplace(Array[2], Pattern)

        n := IsFunc(call_func)
        if (n) {
            arg := StrSplit(tmp_Arg, ",")
            if (n = 1) {
                %call_func%()
            }else if (n = 2) {
                %call_func%(tmp_Arg)
            }else if (n = 3) {
                %call_func%(arg[1], arg[2])

            ;中略

            }else if (n = 9) {
                %call_func%(arg[1], 〜, arg[8])
            }
        }
;---------------------------------------------------------------------

次レスへ続く

411 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 19:59:10.16 ID:oE7uW8Qb0]
>>410の続き
;---------------------------------------------------------------------
    }else{
        Array := StrSplit(cmd_strings, ",")
        call_func := % "func_" Array[1]

        if (islabel(Array[2])) {
            gosub, % Array[2]
        }else{
            %call_func%(Array[2], 〜, Array[9])
        }
    }
}

またまた、スレ汚しスマンです(´・ω・`)

412 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 20:15:02.55 ID:oE7uW8Qb0]
突っ込まれる前に一つ分かってることを言っとくと、

Exec_Strings("MsgBox,2,title_test,test")
Exec_Strings("MsgBox,test")

上のは問題ないけど、下のだと表示が空になるのでまだまだですわ(´・ω・`)
後はコツコツと時間かけて手直ししていきますです

では、おやすみなさい・・・・・(´・ω・`)

413 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/13(月) 23:19:06.64 ID:z3Qnnmrd0]
可変長引数使ったほうがシンプルだよ

414 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/15(水) 23:32:21.59 ID:V21fvvgZ0]
ID:oE7uW8Qb0です
>>413
可変長引数の件はかなり役に立ったよ、ありがとう

>>412の件は、func_MsgBox()関数内で第2引数以下に値が有るか無いかで
どっちのMsgBox使うか判断するようにしますた

他にも手直しが必要なところを見つけたよ・・・まだまだ先が長いな(´・ω・`)

415 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/16(木) 00:15:37.30 ID:stEVobho0]
似たようなのでini に記述されたコマンドを実行するようなマクロスクリプト作ってたわ
ahkそのものがテキストベーススクリプタだから激しく車輪の再開発なんだけどね

416 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/16(木) 00:59:56.08 ID:GI4VDAks0]
autohotkeyにreplがあればいいのに



417 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/17(金) 14:26:10.08 ID:zcQzHuv90]
Tてアスキーコードじゃ84じゃん。
そんで小文字のtは116。

でも、どっかのブログの記事だと
Send,^+tと
Send,^Tは同じになっちゃうとか??受けるアプリによるの??

おかしくね?

^+t はコントロールとシフトを押しながらt(116)となることを通常、
想定するよな?

^+tは内部でコントロール押しながらT(84)となっているの?
初心者な意見ですみません。

418 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/18(土) 17:05:43.11 ID:nVmuDu3q0]
文字コードだけでなく、スキャンコード, VKey とか色々とあるんよ
とりあえずSendやその周辺のマニュアル読むべし

419 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/19(日) 13:05:34.00 ID:dvav9W940]
降順にループしたいんだけど、こんな方法しかない?

array := Object()
array[1] := "one"
array[2] := "two"
array[3] := "three"

c := 0, n := 0
for Value in array {
  c := array.Maxindex() - n
  n ++
  MsgBox, % array[c]
}

とか

Loop, % array.Maxindex() {
  c := array.Maxindex() - n
  n ++
  MsgBox, % array[c]
}

420 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/19(日) 13:19:11.21 ID:dvav9W940]
>>419
訂正です。
実際はforループでValueの値も使いたいので、こっちので良い(スマートな)方法有ったら教えて下さい。

421 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/19(日) 13:59:26.29 ID:dvav9W940]
連投すいません・・・>>420の「Valueの値も使いたいので・・・」件は取り消します。
Valueは昇順で処理する場合必要なのであって、降順には不要でした。

422 名前:419 mailto:sage [2014/01/19(日) 18:14:49.09 ID:dvav9W940]
結局以下のようにして落ち着きました。
降順ループの場合、forだと変数Valueが無駄になるので
loopの方がメモリーを無駄遣いしなくて良いのかな・・・なんて思いました。

Loop, % array.Maxindex() {
  c := array.Maxindex() - (A_Index - 1)
  MsgBox, % array[c]
}

423 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 00:24:14.42 ID:hAigsbcH0]
オブジェクト内の要素カウントするのはコストかかるんで、
ループ前にローカル変数増やして対処するのが常套手段だけど、
AHKはどうかなぁ

424 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 04:48:58.02 ID:qibQGH8z0]
i := array.Maxindex() + 1
while --i
 MsgBox, % array[i]

とか

i := array.Maxindex()
Loop {
 MsgBox, % array[i]
} until !--i

とかは?

425 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 20:53:51.90 ID:k+hq/v/Y0]
>>423-424
ありがd
知らなかったこと色々勉強した・・・
レスが長くなるとアレなんで簡単に書くと
先ずは、「--i」は(記述されたその行で?)演算後の値になること。(「i--」は次に「i」が使われる時点で演算後の値になる)
上段・・・「while 式」は、式「--i」の評価結果が 0 の時点でループ終了すること。
下段・・・「until 式」は、式「!--i」の評価結果が真(true、つまり 0 以外)になるまでループが続行されること。(この場合、「!」が肝)

今回は、後々のメンテナンスで分かりやすい「while」ループを使うことにしました。

426 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 20:55:45.08 ID:k+hq/v/Y0]
連続だけど、質問。

今まさにWindowsがシャットダウンされようとしてるのは以下の方法で検知できるんだけど、
If A_ExitReason = ShutDown

サスペンドやハイバネートを検知するにはどうしたらいいんでしょうか?

AHKからサスペンドやハイバネートさせれば、検知など不要なんだけど、
方法如何に関わらず、検知させたいんです。



427 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 20:59:22.22 ID:k+hq/v/Y0]
あ、windowsXP 32bitでAHK_L(1.1.13.01)です。

428 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 21:31:05.63 ID:hAigsbcH0]
>>426
WM_POWERBROADCAST

AutoHotkey スレッド part6
pc11.2ch.net/test/read.cgi/software/1219130051/971
AutoHotkey スレッド part7
pc12.2ch.net/test/read.cgi/software/1230694774/817,822,898,899,902-904

429 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/20(月) 22:07:16.10 ID:k+hq/v/Y0]
>>428
ありがd
よく読んで活用します。

しかし、過去スレのpart6と7に有ったのか・・・
一応過去スレ読んどかないと、と思ってpart16・15・・・と遡りながら時間かけて読んできたけど、まだpart11の途中だったよ。

430 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 05:43:22.73 ID:VqxOnmgt0]
専ブラのJaneStyleで動画が見つからなかった時に
ダイアログを自動で閉じるようにしたいんだけど無反応でうまくいきません
どこか間違ってますか?

SetTitleMatchMode,2
#Persistent
SetTimer AutoClose,500
return

AutoClose:
IfWinExist, StreamingPlayer3 ahk_class #32770
{
ControlClick OK, StreamingPlayer3 ahk_class #32770
}
return

431 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 15:08:07.41 ID:aYUiPLva0]
AutohotkeyL x64 unicode版で動くeucへのURIエンコードスクリプトってありますでしょうか。
UTFへの変換やShiftJIS版でのものなら見つかるのですが、上記の条件だと見当たりません。

432 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 15:36:30.37 ID:oaSK6Z880]
マウスカーソルがリンク、入力モード、矢印のどれかであるかを判断する方法はあるでしょうか?

433 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 16:00:45.35 ID:KTV70fcA0]
>>432
MouseGestureLの関数丸パクリでこんなのは?

Loop
{
If MG_GetCursor() = 65567
Tooltip, リンク
Else If MG_GetCursor() = 65541
Tooltip, 入力モード
Else If MG_GetCursor() = 65539
Tooltip, 矢印
Else
Tooltip, その他
Sleep,500
}
Return

MG_GetCursor()
{
VarSetCapacity(infCur, 16+A_PtrSize, 0)
NumPut(16+A_PtrSize, infCur, 0, "UInt")
DllCall("GetCursorInfo", "Ptr",&infCur)
hCursor := NumGet(infCur, 8, "Ptr")
return hCursor
}

434 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 18:45:16.66 ID:MOe0YTzR0]
リマップ/ホットキー用スクリプト書くとき、
キー毎にまとめて書くのとアプリ毎にまとめて書くのと
どっちの方が見やすく、管理しやすいでしょうか。

…というか、どっちがオススメですか。ご意見お聞かせ下さい。

435 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 18:54:25.99 ID:OEZwiZLo0]
>>430
問題が起きたなら単純に機能をばらして確認すればいい、この場合、監視 + ダイアログをクリック
ダイアログをクリックするスクリプトを先に完成させよう。

>>432
A_Cursor
Wiki等情報サイトでまずは検索 ttp://ahkwiki.net/Variables#A_Cursor

436 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 19:49:21.45 ID:sJJjom+00]
うーん、地味に組み込み変数に今押してる修飾キーを除いた物理キーってのがないんだのう

A_thishotkeyだと#とか^とか*とか downとか upとか余計なのついてくるし、トリムコマンドで整形するしかないのん?



437 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 20:51:49.47 ID:W82wCj4o0]
かなキーに変換キーを割り当てたいだけなのに、
うまいこと設定できない。
日本語キー周りはレジストリ書き換えするしかないのか。

438 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 21:02:49.49 ID:5mH6o05+0]
やったことないが、Wikiでは半角/全角・CapsLock・かなは動作不定となっている以上、
AHKで弄るのはよろしくないんじゃね

439 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 21:32:37.32 ID:+JdT8cDl0]
>>434
俺はアプリ毎
アプリを使わなくなった時にまとめて消せるのが楽

>>437
vkF2sc070::
Send, {vk1Csc079}
return
で動かね?

440 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 21:45:03.49 ID:OEZwiZLo0]
>>434
こんな感じで管理するといいかも。

;---共通設定----
F1::
ToolTip 通常
Return

;--アプリ別設定--
#If WinActive("電卓")
F1::
ToolTip 電卓
Return
#If

#If WinActive("無題 - メモ帳")
F1::
ToolTip メモ帳
Return
#If

441 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 22:57:09.64 ID:MOe0YTzR0]
>>439-440
なるほどーアプリ毎にまとめた方が良いみたいですね。
自分もその方向で行きたいと思います。
ありがとうございました、。

442 名前:名無しさん@お腹いっぱい。 mailto:sage [2014/01/21(火) 22:58:28.83 ID:kPbnp8kO0]
もし良いアイディアがあれば教えてもらいたいのですが、
Windows8のタッチキーボードをトリガーに、AHKを使えたりしますか?

最近DELL Venue8を購入、Win8使ったことある人ならわかるだろうけど、タッチキーボードに左側にテンキー右側に日本語フリックのキーボードがあって、
それをテンキーよろしく8,2,4,6を上下左右のカーソル化や、「あ」をタッチしたら○○する というアクションを起こさせたいんです。
(イメージはゲームボーイのように縦に持って、両手親指で操作)






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<157KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef