AutoHotkey スレッド part27

■ このスレッドは過去ログ倉庫に格納されています
2019/04/20(土) 23:32:53.28ID:cTmLtZyf0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part26
https://egg.5ch.net/test/read.cgi/software/1524647289/

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

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
625名無しさん@お腹いっぱい。 (ワッチョイ 77c8-/nlV)
垢版 |
2019/12/13(金) 17:09:10.07ID:4NH6Uzpf0
chromeを使っていますが複数ウインドウ複数タブの中で
今アクティブでないウインドウでもタイトルが一致したら
Alt + F4でそのウインドウだけ閉じる方法をご存じないですか。

SetTitleMatchMode, 2 ; 中間一致
IfWinExist, xxxxxxxx
{
WinActivate , xxxxxxxx
send !{F4}
}

目的のタブがアクティブならできますが、そうでないときはこれではできません。
2019/12/13(金) 23:48:30.36ID:bL4R67m1H
>>625
タブ関係なしにウィンドウタイトルのみで判断?
それならWinGetでListのちLoop
2019/12/13(金) 23:52:33.99ID:uMIfKS0h0
裏になってるタブは無理じゃね
2019/12/13(金) 23:53:08.80ID:bL4R67m1H
ListだけじゃなくてCountでウィンドウの数も取得しないとダメか
2019/12/13(金) 23:56:26.83ID:uMIfKS0h0
いやそういう問題じゃなくて
ウィンドウじゃなくて非アクティブタブの話だからウィンドウタイトルじゃどうやっても取得できないでしょ
2019/12/14(土) 00:12:36.58ID:xIeQ+l0kH
>>627のレス見てなかったわ

タブも見るならウィンドウごとにacc.ahk使えばいい
UI AutomationのFindAllでタブタイトル取得して確認するのもいいかもしれんけど
2019/12/14(土) 06:06:50.14ID:TFN+dvhQ0
当該ウィンドウの全ての非アクティブタブのタブタイトルを合成した文字列を、アクティブタブのオリジナルタイトルの最後に合成する拡張機能を作ればイケそう
(アクティブタブ切り替えやタブの追加/削除/ページ遷移の各タイミングで適切にタイトルを更新する)

ある程度特徴的な区切り文字列(例えば「/////」など)を決めておけば、普段使いでの混乱を抑制できるかなかも
例) アクティブタブオリジナルタイトル ///// 全非アクティブタブのタブタイトル合成文字列
2019/12/14(土) 08:52:43.42ID:hjikztn/0
非アクティブタブのタイトルだけ分かっても
そのオブジェクトが特定できないとタブ閉じに再利用できなくね?
ああでも特定のタブを閉じるのではなく窓ごとバッサリやっちゃっていい前提なんだっけ?
2019/12/14(土) 09:03:52.95ID:hjikztn/0
というかそういう所作が必要なのってポップアップウィンドウ広告位しか思い付かんのだけど
場合によってはahkでやるよりuBlockとかの拡張使う方が楽なのでは
2019/12/14(土) 10:50:21.11ID:u1T33DCP0
625です
実験でAlt + F4にしましたが、できれば>>632さんのようにそのタブ以外を閉じる
ほうがいいですね。
実際のところ別ウインドウでアドインのTab Posision Optionsを使っているので
目的のタブが裏に隠れることはあまりないですけど。
ただ、将来的にそのような機能が必要かと思い質問してみました。
というわけで、すべてのウインドウのタイトルを取得したとしてもそのタブを特定して
残すのはどうすればいいか分からないです。
今のところはもう一つアドイン・Keyboard shortcuts to close Chrome tabsを使って
Alt + SHITF + wで他のウインドウを閉じるようにしています。
SetTitleMatchMode, 2 ; 中間一致
IfWinExist, xxxxxxxx
{
WinActivate , xxxxxxxx
send !+w
}
2019/12/14(土) 11:40:31.86ID:TFN+dvhQ0
>>634
それこそ直接chromeの拡張機能を作った方が楽だと思うけど...
(なぜそれをAutoHotkeyで実現させようと考えたのか)
2019/12/14(土) 12:05:31.76ID:u1T33DCP0
>>635
Javascriptからローカルサーバー → PHP → AutoHotkeyの順番で
やっていて、できればJavascriptから直接やりたいのですが、危ないし
やろうとしても、おそらくできないと思うのでこの形にしています。

chromeの拡張機能で例えばどのようなものがあるか、おすすめを教えてもらえると
ありがたいです。
2019/12/14(土) 12:09:05.96ID:TFN+dvhQ0
>>636
jsできるなら拡張機能も作れるよ
2019/12/14(土) 17:06:56.19ID:wk8eolGG0
>>624
取得する関数があるわけではないんですね。
遅くなりました。ありがとうございました。
2019/12/14(土) 22:33:32.80ID:u1T33DCP0
>>637
今のところTampermonkeyを使ってJavascriptを書いてるだけなのでそこまでは研究していません。
作ったのことないのでわかりませんが拡張機能だと、別々のURLで別の作業をしたいときはその都度
新しい拡張機能を作るのでしょうか。
2019/12/16(月) 04:35:35.72ID:xPE2f/1b0
test1.ahk というのが起動しているときに
それを検出して、test1.ahkを除去してtest2.ahkを起動させたり
その逆にtest2.ahkを除去してtest1.ahkを起動させたり
さらにその際にtest1.ahkが誤って2重起動しないようにしたいのですが
test3.ahkというのを作って、それら二つのahkファイルを外部から制御するって可能でしょうか?
2019/12/16(月) 06:21:56.70ID:uCZJTbCy0
>>640
起動はtest3,ahkから呼び出すでも何でもいいけど
終了はtest1.ahkとtest2.ahkにそれぞれExitApp書いておいた方がラクなんじゃね
二重起動防止は冒頭に #SingleInstance force 書いとけば
2019/12/16(月) 08:44:37.13ID:l/hrNkH30
wmic process list
でプロセス+コマンドライン引数一覧が取れるのでどのスクリプトが常駐しているかがわかる
2019/12/16(月) 10:18:56.97ID:+CU86MBV0
OnMessageでお互いにメッセージ飛ばし合えば
起動検知も終了命令もできるんじゃない
2019/12/16(月) 15:02:09.19ID:Jeggue7g0
2ストロークのキー割り当て
2ストロークキーとは、一回のキー操作ではなく、二回のキー操作の組み合わせによって行う操作のことです。
例えば、Ctrl-Q Ctrl-R という感じで Ctrl-Q を押した後すぐに Ctrl-R を押すと「ファイルの先頭に移動」を実行します。
(古きWordStarにあったキー操作)

このワードスターを再現する.ahk探してるけど、やはりないね
2019/12/17(火) 07:12:38.75ID:8BHuFCoH0
>>644
英語版のグーグルで「wordstar ahk」で検索
https://www.google.com/search?q=wordstar+ahk
したら↓こんなのがあったよ
https://autohotkey.com/board/topic/30628-wordstar-like-two-key-combinations/
2019/12/17(火) 23:11:02.53ID:qsbQwbCU0
>>641
ありがとうございます
相手を起動したのち自分が停止するっていう考えですよね
一時的にでも両者が共存するのはできれば避けたいんですよね
そういう意味で外部で検出して、停止したのち起動という手法を選んだんですよ

ahk単体では無理な感じですかね
2019/12/17(火) 23:14:19.06ID:S2uNMpCy0
>>646
順番なんて好きにすりゃいいだろ
test1をexitappで終了させてからtest3でtest2を起動しったって良いんだし
そもそも質問内容が要点少なすぎなんだよ
後だしで条件追加うぜえ
2019/12/17(火) 23:37:30.80ID:E8AX9lFu0
>>646
ハッキリ言って具体的に何やりたいのかよく分からない
アクティブなアプリまたは決まった条件によってキーリマップ(ホットキー)のスクリプトを変更するとか?
↑だとしたら、スクリプト一つで出来るから小難しいこと考える必要はない

とりあえずそれは置いといて…
1.test3.ahkでtest1.ahk及びtest2.ahkが起動中か監視する
2.例えばtest1.ahkが起動中なら「test1.ahk起動中サブルーチン」を実行
 そのサブルーチン内で、test1.ahkを終了→test2.ahkを起動させるための条件が揃ったかを監視する
 条件が揃ったらtest1.ahkを終了→test2.ahkを起動しサブルーチンを抜け 1. に戻る

※スクリプトの終了方法はwinclose使う

的外れなこと言ってたら無視で
2019/12/18(水) 00:55:13.90ID:jgaai62z0
>>646
そうじゃのうて外から強制終了するのはなるべく避けた方がいいので
test3から終了命令受けたらtest12がそれぞれ自力で終了するようにしたらって意味では

例えば
-- test1.ahk
F13:: ExitApp
-- test2.ahk
F14:: ExitApp
-- test3.ahk
Send,{F13}
run,test2.ahk
みたいな それかOnMessage

起動検出はDetectHiddenWindows,ONにしてWinExistするか>642
2019/12/18(水) 01:21:22.06ID:sON/QP2u0
>>649
test3.ahkでSend,{F13}してもそれをtest1.ahkで受けるのは無理じゃね

そもそも質問者はどういう操作でtest1.ahkを終了させたりtest2.ahkを起動させたりしたいのかも不明だから
何かのキーを押したときなのかそれともtest3を非常駐で実行したときなのかなど、とにかく説明不足なんだよ
test1とtest2が一時的でも被ってはいけないという理由も謎だしな
2019/12/18(水) 08:16:31.84ID:DWSmgN8M0
とりあえず質問者にセンスがないことは分かった
2019/12/18(水) 23:03:07.23ID:BUoxab4D0
636ですがとりあえず、おすすめの通りChromeの拡張を試してみたいと思います。
スレ違いになるのでとりあえずこれで失礼します。
レスをくださった方、ありがとうございました。
2019/12/19(木) 00:23:12.81ID:rueYUr0o0
>>650
>test3.ahkでSend,{F13}してもそれをtest1.ahkで受けるのは無理じゃね
やってみたがうちではできてるよ
できない人はメーカー製マウスユーティリティでF13キー以降の割り当てしてない?
ただ再三いうがAHK間でやり取りするならOnMessage()使ったほうが自由度は上がると思う
2019/12/24(火) 21:56:40.15ID:4O80sp520EVE
AutoHotkeyU64 で PHPのexecから引数をつけて文字列を渡そうと
思っていますが、変数で中身がUTF-8だとSJISに変換しないと
正しく機能しません。
$TITLE = $_POST['title'];
$SJIS_TITLE = mb_convert_encoding($TITLE, "SJIS");
exec("\"D:\\Program Files\\AutoHotkey\\AutoHotkeyU64.exe\" \"D:\\MyProgramFiles\\apache\\httpd-2.4.20-win64-VC14\\Apache24\\htdocs\\close_other_tabs.ahk\" \"$SJIS_TITLE\"");
echo json_encode($TITLE);
2019/12/24(火) 22:04:58.00ID:hEXiCpxI0EVE
>>654
なら変換すればいいのでは?
2019/12/24(火) 22:11:06.79ID:4O80sp520EVE
PHPも
header('Content-Type: application/javascript; charset=utf-8');
を入れて保存。 ファイルもUTF-8で保存。
ahkもBOM付きで保存しています。
とりあえず今のところSJIS変換で使えるのですがUTF-8のまま使えない理由が
分かりません。
2019/12/24(火) 22:13:55.20ID:4O80sp520EVE
>>655
あまり、ウインドウのタイトルについて詳しくわからないのですが
中国語のタイトルとかでUTF-8が使われたりしていたら
その時はどうするのですか。
2019/12/24(火) 22:19:32.39ID:jnSVlV9m0EVE
execでahk起動してるコマンドライン(コマンドプロンプト?)がSJISだからじゃないの?

プロンプトならchcp 65001すりゃいいけど
コマンドラインの場合はどうすんのかね
2019/12/24(火) 23:09:07.09ID:4O80sp520EVE
exec("chcp 65001 & \"D:\\Program Files・・・・
でもだめでしたね。
もちろん
export LANG=ja_JP.UTF-8;
も使ってみましたがおそらくLinuxですよね。
2019/12/24(火) 23:31:32.09ID:IkwDoBvt0EVE
引数のcharsetがうまく指定できないんなら
引数をbase64でエンコードして渡すとかでいいんじゃ
というかAutoHotkeyあんま関係ないよね
この話
2019/12/24(火) 23:44:51.98ID:4O80sp520EVE
バッチファイルを使って間接的にやってみましたがexec内部でバッチファイルのパラメータを渡している限り
文字化けしますね。
2019/12/24(火) 23:46:43.19ID:4O80sp520EVE
そうですね。すれ違いでした。
答えてくださった方ありがとうございました。
2019/12/25(水) 11:49:16.51ID:OZpGJAwt0XMAS
やっつけでcronモドキ作ったが結構便利かもしれない
分単位で厳密にやるには常駐させたほうがいいだろうけど
https://textuploader.com/1owzm
2019/12/25(水) 16:40:32.69ID:eAAE7EkP0XMAS
ControlClick, X690 Y415, ahk_exe apli.exe, , L, , Pos

このようにしても指定した座標の場所がクリックされないのですが何が原因でしょうか?
クリックそのものは発生していのですが現在カーソルがある位置をクリックしてしまうのです
2019/12/25(水) 19:00:11.99ID:CgUlNSdiMXMAS
>>664
記述は問題ない

考えられる問題は
実行中にマウスを動かしている
対象がマウス座標を拾っている

---------------------------------
Run, mspaint,, Max ; ペイント起動

F1::
Random, X, 100, 200
Random, Y, 300, 400
ControlClick, x%X% y%Y%, ahk_exe mspaint.exe,, L,, Pos
return

F2::
Random, X, 300, 400
Random, Y, 300, 400
MouseClick, L, %X%, %Y%
return
2019/12/25(水) 19:14:26.91ID:eAAE7EkP0XMAS
>>665
ご回答ありがとうございす。
試しにペイントでその2つを試した所、座標どおりにクリックされました。
しかし自分がUnity製のゲームではControlClickだとマウスの位置しかクリックされませんでした。
アプリケーションによってはダメみたいですね…。
2019/12/28(土) 05:51:22.70ID:uzpbn+ZX0
{Blind}の効果がいまいちよくわからないんだけど
つけるべきときにつけないことで誤動作してしまう例ってどんな物ですか?

よくあるのはこれですが
sc07B & i::Send,{Blind}{Up}

sc07B & i::Send,{Up}
と挙動が異なるときってどんな時ですか?
2019/12/28(土) 08:21:29.89ID:cA7QC5oQ0
>>667
上方向に選択しながらカーソル移動できるかどうか
かな
2019/12/28(土) 20:19:29.58ID:dK7lFuaz0
>>667
その例はわかりにくいから一旦忘れよう
{Blind}はSendで修飾キーの状態をAHKから隠したいときに使う


; Sendに修飾キーの状態を反映させたい
+s::Send abc ; abc
+s::Send {Blind}abc ; ABC

; 修飾キーの自動復元を無視したい
^space::Send {Ctrl up} ; Ctrlが押された状態に戻る
^space::Send {Blind}{Ctrl up} ; Ctrlが上がったままになる
2019/12/28(土) 20:26:06.81ID:dK7lFuaz0
つまり↓の違いは、修飾キーの状態を考慮するかどうか
ただの{Up}しか送らないなら{Blind}は無いほうが誤動作しない

sc07B & i::Send,{Blind}{Up}
sc07B & i::Send,{Up}
2019/12/29(日) 23:53:27.36ID:0ftJxOi20NIKU
ありがとうございます
今まではコピペコードくらいでしか使っていませんでしたが
これからは新規のコードを書く際にしっかり意識しながらやっていこうと思います
2019/12/30(月) 00:01:36.22ID:8fU+/4w50
意識する必要あるか?
特に{Blind}を入れなきゃいけないケースが思い浮かばない
2019/12/30(月) 00:53:01.61ID:++vtXWHX0
俺は8割くらいは{Blind}入れてるなぁ
vk1D & i::Send, {Blind}{Up}

Sendしたキーを、Shift・Ctrl・Altで修飾したいじゃん
2019/12/30(月) 01:41:06.31ID:NbxbuvnT0
そういう使い方はしてないな
フルキーボードに慣れてるし普通にカーソルキー使うし
むしろ3つ以上の複数キー押しが煩わしいものを1キーや2キー押しで出来るようにしてる
2019/12/30(月) 08:14:11.15ID:++vtXWHX0
>>674
3キー以上の複数押しって
Shift + Ctrl + N とか、
Windows + Ctrl + D とかってことだろうか

例えばどんなふうに押し換えてるのか教えてくれない?
2019/12/30(月) 12:27:27.22ID:aG+FjrRT0
>>675
例えば
F13::Send, +^n
2019/12/30(月) 16:41:24.85ID:++vtXWHX0
すまん、質問の仕方が悪かった
「F13」の部分が、実際は何にしているのかを知りたかったんだ

例えば「Ctrl + Shift + N」を、仮に「Win + N」で置き換えてるとしたら、
「OneNoteに送る」とバッティングするなぁ、とかそういうの
(OneNote使ってない人は全然気にしないだろうけど)

 ※普通のキーボードにはF12までしかないから、実際は別の何かなんだろうと思ってる
 ※多ボタンマウスとかの割り当てで、F13にしてるのかなぁ
 ※1キー押しだとすると、結局普段使われないキーなのだから、実際にもF13なのか?
2019/12/30(月) 17:08:54.37ID:ADTlewR00
>>677
>※多ボタンマウスとかの割り当てで、F13にしてるのかなぁ

そうだよ
2019/12/30(月) 19:03:30.76ID:++vtXWHX0
>>678
それなら納得だよ
ありがとう
680sage (ワッチョイ c273-pIXJ)
垢版 |
2020/01/02(木) 19:38:23.07ID:tVOKYODP0
https://www.autohotkey.com/docs/scripts/KeyboardOnScreen.htm
上のサンプルスクリプトのについて質問があります。
キーボードの各キーにあたるボタンの設定変更についてです。

ボタンはgui, add で追加されたButtonです。ボタンの色またはボタン上の
テキスト(A,B,Cなどの1文字)の色を動的に変えたいんですが初期状態で
変えることすら出来ません。そういうことはできないんでしょうか?

掲載コードでは透明になっているキーボード全体の背景色を変えることは出来ました
2020/01/02(木) 19:39:30.75ID:tVOKYODP0
>>680 追記
私の方ではguicontrol で色々やって見ましたが出来ませんでした
2020/01/02(木) 22:26:21.81ID:VH5UvwWQ0
>>680
[CLASS] CCButton
https://autohotkey.com/board/topic/79315-class-ccbutton-colored-caption-on-themed-button-l/

[Class] ImageButton
https://www.autohotkey.com/boards/viewtopic.php?f=6&;t=1103
2020/01/03(金) 15:57:48.70ID:Og8N9g0/0
>>682
ありがとうございます。
結局それは使わずに

同サイズのProgressバー、Button、Textを同じ位置に重ねて
表示、非表示を切り替える感じで実現できました。
(Progressバーはボタンの四角形を表示するために一挙に100%まで行きます。)

参照:
https://autohotkey.com/board/topic/94703-another-approach-to-a-virtual-keyboard/
https://autohotkey.com/board/topic/89959-centering-text-in-a-progress/
684名無しさん@お腹いっぱい。 (ワッチョイ 4273-UAPS)
垢版 |
2020/01/05(日) 02:58:05.24ID:z6nCiPO+0
最近AHKのバージョンを1.1.30.03から1.1.32.00にしたんですけど
GetkeystateとKeywaitの反応がおかしくなったアプリがあります
具体的にはこんなスクリプトなんですが

vk1D::
Send,{Space down}{Ctrl down}
Keywait,vk1D
Send, {Space up}{Ctrl up}
return

無変換キーを離しているのに1秒くらいしてから Send, {Space up}{Ctrl up} が実行される状態です
下記のGetkeystateでも同じ状態です

vk1D::
Send,{Space down}{Ctrl down}
loop
{
sleep,10
GetKeyState, state, vk1D , p
if state = u
{
Send, {Space up}{Ctrl up}
return
}
}


こういう不具合が報告されてたりしますかね?バージョン1.1.30.03なら問題なく動くんですが
2020/01/05(日) 12:32:16.16ID:2kqGD1ED0
特定アプリ上の出来事ならそれを書かなきゃ話にならん
2020/01/05(日) 19:52:26.97ID:cN3eyu1Z0
>>684
バージョン関係なく、修飾キー上げ下げのタイミングで
ショートカットの挙動が変になっているのでは?

× Send {Space down}{Ctrl down}
○ Send {Ctrl down}{Space down} ; 修飾キーは先に押して最後に離す
687名無しさん@お腹いっぱい。 (ワッチョイ 4273-UAPS)
垢版 |
2020/01/06(月) 16:20:17.37ID:oLM8GZzz0
>>685
ClipStudioPaintで修飾キーを使った一時ツール切り替えのためのスクリプトです
CtrlとSpaceキーを押すと虫眼鏡ツールに切り替わります

>>686
それを試してもだめでした
2020/01/06(月) 19:34:24.26ID:7mFD3sLb0
>>687
後試すことは
修飾キーの順序直す、ホットキーにAHKフック、送信方式変更、ディレイを入れる

以下必要最低限の記述でテストすること
わかりやすいように音を鳴らしてキーを離してからAHKが遅延するのかアプリ側が遅延しているのか判断

; 自分で調整↓
; SendMode, Mode
; SetKeyDelay[, Delay, PressDuration, Play]

$vk1D::
Send {Ctrl down}{Space down}
Keywait vk1D
Send {Space up}{Ctrl up}
SoundPlay *64
return
2020/01/09(木) 13:42:44.87ID:SLR+jgO50
Firefoxでクリップボードにあるurlを新規タブにてバックグラウンド(フォーカスせずに)で
開きたいのですが出来るでしょうか?
2020/01/10(金) 01:16:45.87ID:Be24/aXa0
返事がない
それが答えのようだ
691名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 12:19:10.98ID:GNH0LeBL6
ゲームをやる時にある特定のキーを一回押すだけで次にもう一回押すまで長押しの状態にしたいのですがどうすればいいですか?
2020/01/14(火) 13:26:20.95ID:pvwqaT4h0
>>691
Send, {キー名 down}
Send, {キー名 up}

フラグ付けて判定
693名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 14:50:34.59ID:GNH0LeBL6
$1::
Send, {a down}

試しにこれで長押しするか試したけどメモ帳には1文字しか入力されない
694名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 14:53:54.61ID:GNH0LeBL6
>>693
>$1::
> Send, {a down}
>
試しにこれで1を一回押したらaが自動で長押しされるか試したけどメモ帳にはaが1文字しか入力されない
2020/01/14(火) 14:57:40.10ID:wU9b9Ut70
>>693
テキスト入力でのキーリピートは {a down temp}
ゲームとかなら関係ないからどっちでもいい
696名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 15:03:54.07ID:GNH0LeBL6
できませんorz
697名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 15:06:05.27ID:GNH0LeBL6
回数指定はいけます
2020/01/14(火) 15:07:10.32ID:daEHimlkM
なら諦めろ
そもそもここはコーディング依頼スレじゃない
699名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 15:11:49.13ID:GNH0LeBL6
Loop使ったらいけました。ありがとうございます。
ちなみに今のような質問をする時は次からどこで聞けばいいですか?
2020/01/14(火) 15:24:14.71ID:wU9b9Ut70
>>699
Loopと押しっぱなしは全然意味が違うぞ
お前がやりたいのは押しっぱなしじゃなかったのか?
押しっぱなしなら{キー名 down} でいい(キーリピートはしない)

あと初心者スレみたいなもんは無いしwikiのサンプルコード熟読するとか
最低限の知識は自力で付けられないならahk使うの諦めたほうがイイ
701名無しさん@お腹いっぱい。 (ガックシW 0623-h659)
垢版 |
2020/01/14(火) 15:38:47.56ID:GNH0LeBL6
ゲームだとLoopなしでもいけたけど押しっぱなしになったままで解除する方法が分からない。

分かりました。wikiもう少し読んで出直します...orz
2020/01/14(火) 15:45:17.27ID:wU9b9Ut70
>>701
解除する方法も692に書いてあるだろ
ま、そういうのも含めて基礎知識不足
2020/01/14(火) 19:04:45.74ID:roP/RC34M
GuiのEditのGラベルでサブルーチンを実行するとき
そのサブルーチンの実行中の
Edit値の変化は無視されてしまうのでしょうか

例えば下記のスクリプトで
"a"と"b"を続けて素早く入力した場合
"a"のみが表示されるのですが
"ab"も(又は"ab"だけ)表示するには
どうしたらよいでしょうか

Gui,Add,Edit,Gsub
Gui,Show
Return

sub:
ControlGetText, newtext , edit1
Sleep, 1000
MsgBox, %newtext%
Return
2020/01/14(火) 20:08:16.83ID:/njvsrvp0
>>703
余り自信ないけど

sub:の
ControlGetText は GuiControlGet, newtext, , edit1 にして
Sleep, 1000 を削除

で、MsgBox はウザいから ToolTip で確認

間違ってたら他の人よろしく
2020/01/14(火) 20:17:43.20ID:sw1ywxul0
Sleep, 1000
ControlGetText, newtext , edit1
2020/01/14(火) 20:28:56.17ID:roP/RC34M
すみません例が悪かったです
sleepの所は実際には
newtextの値に基づく処理が入り、
この処理に1秒ほどかかる
というサンプルのつもりでした
2020/01/14(火) 20:34:09.06ID:roP/RC34M
サンプルを書き直してみました
Gui,Add,Edit,Gsub
Gui,Show
Return

sub:
GuiControlGet, newtext , , edit1
<newtextの値に基づく長めの処理>
Tooltip, <上の処理の結果>
Return
2020/01/14(火) 20:38:30.95ID:YCyA6bsk0
>>704-705
Sleepは重い処理って意味かと

>>703
同じスレッドは無視されることで起きる問題ですね
重い処理をする場合は大体この二択

*入力を禁止して同じスレッドが実行されないようにする
*SetTimerを使って再入力時にスレッドを予約する
2020/01/14(火) 20:40:03.39ID:YCyA6bsk0
Gui, Add, Edit, w500 r5 gThread_Edit1 ; 処理が終わるまで入力禁止
Gui, Add, Edit, wp hp gThread_Edit2 ; 処理中に追加があれば再実行
Gui, Show
return

Thread_Edit1:
GuiControl, Disable, edit1
Test()
GuiControl, Enable, edit1
return

Thread_Edit2:
SetTimer, Thread_Timer, -1
return

Thread_Timer:
Test()
return

Test() {
Sleep, 1000 ; 重い、時間のかかる処理
GuiControlGet, newtext,, edit2
Tooltip, %newtext%
SetTimer, RemoveToolTip, -2000
}

RemoveToolTip:
ToolTip
return
Esc::
GuiClose:
ExitApp
2020/01/14(火) 20:53:14.14ID:YCyA6bsk0
>>709
ミスがあるので修正

Thread_Edit1:
GuiControl, Disable, edit1
Test(1)
GuiControl, Enable, edit1
return

Thread_Edit2:
SetTimer, Thread_Timer, -1
return

Thread_Timer:
Test(2)
return

Test(n) {
Sleep, 1000 ; 重い、時間のかかる処理
GuiControlGet, newtext,, edit%n%
2020/01/14(火) 21:00:02.09ID:GrGg/thH0
サブルーチンの最初にCritical入れるだけじゃだめなのか?
2020/01/14(火) 21:08:32.90ID:roP/RC34M
>>710
ありがとうございます
試してみます
2020/01/14(火) 21:10:38.13ID:roP/RC34M
>>711
しっかりとは理解できていませんが
これでうまく行きました
助かりました

他の回答をくださった方もありがとうございました
勉強になります
2020/01/14(火) 21:13:01.16ID:YCyA6bsk0
>>711
Criticalはやめとけ延々と待つことになるぞ


Gui, Add, Edit, w500 r5 gThread_Edit1
Gui, Show
return

Thread_Edit1:
Critical
Test(1)
return

Test(n) {
Sleep, 1000 ; 重い、時間のかかる処理
GuiControlGet, newtext,, edit%n%
Tooltip, %newtext%
SetTimer, RemoveToolTip, -2000
}

RemoveToolTip:
ToolTip
return

Esc::
GuiClose:
ExitApp
2020/01/14(火) 22:22:22.07ID:1rtvu3My0222222
func()
{
IfWinActive, ウィンドウ名
{
Send, あ
Return
}
}

でウィンドウ名を後方一致にしたいのですが、どうすればよいでしょうか?
2020/01/14(火) 23:48:18.39ID:X3CMnVxd0
>1のahk wikiで ウィンドウ指定の方法 の項目を嫁
2020/01/15(水) 00:48:33.04ID:hWCUiCW80
>>716
すみません>>715に書き忘れたのですが
IfWinActive, ウィンドウ名, 2
としても
IfWinActive, [ウィンドウ名, 2]
のように配列で渡してもうまく部分一致になりません
(あと部分一致でなく後方一致にする方法についての記載を見つけられませんでした)
2020/01/15(水) 00:52:29.97ID:hWCUiCW80
あ、わかりました!
SetTitleMatchModeは引数ではなく独立したコマンドでしたね…

SetTitleMatchMode,2

IfWinActive, ウィンドウ名の一部
{
Send, あ
}

うまくいきました
2020/01/15(水) 00:54:02.32ID:nTj1bC5N0
絶対書き忘れとかいう問題じゃねえだろこの嘘つきw
716のを中途半端に読んで勘違いしてるのがバレバレ
2020/01/15(水) 00:54:48.86ID:hWCUiCW80
後方一致は正規表現(RegEx)で$って書いてなんとかします
2020/01/15(水) 00:58:53.98ID:hWCUiCW80
>>719
え…該当ページを事前に読んで勘違いしていたのと後出ししてしまって申し訳ないのは事実ですが嘘つきと言われても…
2020/01/15(水) 01:03:51.05ID:nTj1bC5N0
質問の一番核になる部分を書き忘れ?は?脳味噌沸いてんのかw
2020/01/15(水) 08:49:17.92ID:/Z4xN/Rd0
まあ解決したみたいだしそこまで噛みつく内容でもないと思うが
質問時にソース貼るなら次からは試して動かなかったコードを貼ろうな
そしたらどこで勘違いしてんのか分かるし具体的にアドバイスできるから
やりたい、分からない部分を空白にしたソース貼って穴うめして下さいっていうのは
結局丸投げと同じだからさ
2020/01/20(月) 09:16:30.24ID:d4sYPmSp0
キーボードの右altキーをChangekeyで
F24に割り当ててAHKを使用しています。
AHKでやりたいことは出来ているのですが、
マウスジェスチャーLで右クリックの代わりにF24を始動キーにしようと思い、設定したのですが、この場合AHKで設定したのことが無効になります。
どちらもアプリもF24で共存することは出来ないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

ニューススポーツなんでも実況