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)
2019/11/11(月) 14:04:41.33ID:AdvOVrfM01111
自分はLiName+テキストエディタの変換機能でやってるが
一発でリネームできるようなバッチ作りたいなら非2バイト語圏の海外産のAHKより
nkf32とか使ったほうが楽だと思う
2019/11/11(月) 18:32:07.13ID:SIlajLB/M1111
>>560
a::
+a::
Send, ○○
return

>>561
AutoHotkey スレッド part18
https://anago.5ch.net/test/read.cgi/software/1398655195/974

半角全角変換関数 詰め合わせ
http://pastebin.com/diJWv0pw
2019/11/12(火) 00:07:42.36ID:XvJWFDxd0
あるウィンドウがアクティブなら(なんらかのポップアップされたメッセージウィンドウを想定)、
Esc以外のどんなキーを押しても、ある処理を実行するみたいなスクリプトをつくりたいんですけど、

この"どんなキーを押しても"の部分って、全部のキー羅列しないといけないんですかね?
何かいい方法ありますか?
2019/11/12(火) 05:22:26.24ID:FtqeMYVR0
>>564
#InstallKeybdHook
SetTimer
WinActive()
KeyWait()
if !GetKeyState("Esc", "P") {
 コマンド
}

KeyWait() {
 Loop {
  if (Idle > A_TimeIdlePhysical)
   break
  Idle := A_TimeIdlePhysical
  Sleep, 10
 }
}
2019/11/12(火) 21:24:09.06ID:XvJWFDxd0
>>565
あー関数とか演算子とか多用する感じなのか
普段基本的な使い方しないから勉強になった、ありがとう
2019/11/13(水) 00:42:57.36ID:NxgPOaNH0
>>563
参考になったありがとう
s := conv(s, "ABC#「」『』", "ABC# ")
って感じの変換テーブル渡すコンバータ作った
568名無しさん@お腹いっぱい。 (スププ Sda2-NlRl)
垢版 |
2019/11/19(火) 20:50:10.36ID:DwmpxaS1d
ie上でalt+speceに設定したIME切替が動かないので、ie上のaltを無効化したいんですが、どうしたら無効化しますか?試行錯誤してるんですけど、どれもダメみたいで、
2019/11/19(火) 21:43:50.75ID:g+gF+7FS0
まずその試行錯誤を書いて
570名無しさん@お腹いっぱい。 (スププ Sda2-NlRl)
垢版 |
2019/11/19(火) 22:33:48.23ID:DwmpxaS1d
もう残ってないっす
2019/11/23(土) 20:28:16.06ID:Mh7lYThn0
vimでよくある、ddや<leader>wのようなシーケンス割当をいい感じでできるLibなぞどこかにありませんでしょうか?
:*:dd:: で割り当ててみたのですが、はじめのdが入力されてしまう点と、d単体に割り当てできなくなってしまっていけてないです…
572名無しさん@お腹いっぱい。 (ワッチョイ 1976-BEIG)
垢版 |
2019/11/26(火) 22:15:06.67ID:JAmcxqSM0
obj:=[1,2,3]
ScratchPad("a", 100)
ScratchPad("b", obj)
ScratchPad("keystate:a", keystata)
ScratchPad("c", "hello")
ScratchPad("a", 500)

と実行すると
a=500 <- 最後に書き込まれた値
b=1,2,3
keystate:a=U
c=hello
というウィンドウが表示されるデバッグ用ツール作ってくださいお願いします!
ウィンドウは存在しなかったら自動で生成し
存在していたら再利用し
ユーザーはいつでも閉じても構わない感じにお願いします!
ログ系の関数だとどんどんスクロールしてしまって不便で仕方が有りません
2019/11/26(火) 22:56:43.77ID:Gvt9eacH0
自分でやれ
2019/11/26(火) 23:00:43.22ID:1c8/xZfE0
>>572
よし俺に任せろ
ちょっと待ってくれよな
2019/11/27(水) 13:51:09.12ID:CXHpBTJ60
その後
>>574の姿を見たものは居なかった
2019/11/28(木) 08:49:31.79ID:7ah9PNzD0
じゃあ替わりに俺が作るよ
>>572 待ってろよ
2019/11/28(木) 09:10:22.14ID:YQMVfgpt0
壮大なプロジェクトになってきた
578名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 09:30:29.24ID:lQjz+pHhd
>>568 もだれかお願いできないですかね
2019/11/28(木) 09:41:34.01ID:u3kK9hCK0
マジレスするとまともな回答が付かないのは質問の仕方に問題があるということ
ここはお客様サービスセンターじゃないのでそういう面倒な奴はスルーまたは適当にあしらわれるだけ
580名無しさん@お腹いっぱい。 (ワッチョイ b5cf-8b9h)
垢版 |
2019/11/28(木) 10:44:26.21ID:M99/5zSx0
回答がつかないのはこういうの
・Windows標準機能を乗っ取ろうとかバカなやつ(無謀
・それ普通に一般機能でできるけどってやつ(無知
・試したソース書かないやつ
・試してすらいないやつ
・日本語になってないやつ

すぐに回答がつくやつ
・やりたいことが明確で試したソースもついてる
・具体的な関数や文法的なアドバイスを求める内容
2019/11/28(木) 10:58:50.61ID:Q7RBzET20
試行錯誤してるってその内容書いてないは結構致命的だよね
「こうじゃない?」って言ったとして「それはもうやってみました」ってなるのが目に見える
2019/11/28(木) 11:10:45.60ID:u3kK9hCK0
あと>>568だけでは言葉足らずでやりたいことが明確ではない
場合によっては
・それ普通に一般機能でできるけどってやつ(無知
に該当してる可能性もあり得る
2019/11/28(木) 12:10:44.20ID:8Y2KV43/0
>>578
他の人も書いてるけど、その試行錯誤を書いてほしい
それとAlt+Spaceって自分には必要なキーだから潰してもいいの?と言う疑問もある
例えば、WinMinimizeで最小化を設定してもタスクバーに収まらずに変な残り方するソフトが
時々あるけど、そういう場合に Alt+Spane,Nを充てて対処してる
584名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 14:00:15.68ID:lQjz+pHhd
なるほど。質問の仕方か、、そう言われると確かに丸投げみたいな質問だな、、反省
試行錯誤したやつをまとめて、出直してきます
2019/11/28(木) 14:10:26.69ID:U/9F6nEa0
>>584
一つだけ確認しておきたいんだがaltではなくCtrl+スペースでIME切り替えするのでは駄目なのか?
それならAHKを使わずにIMEのプロパティでキー割り当て変えるだけで出来るしスマート
無理してAHKでどうこうするよりシステム本来の機能で出来ることはそっちでやった方がいい
586名無しさん@お腹いっぱい。 (スフッ Sdb2-fSRg)
垢版 |
2019/11/28(木) 19:11:05.66ID:F3zZXs0fd
>>585
CtrlとCaps入れ替え前提だよね
2019/11/28(木) 19:47:45.33ID:U/9F6nEa0
>>586
いやそんなことはしないが
普通にCtrl+スペースにIME切り替えを割り当てるだけ
altに拘らなけりゃそれだけで済む話じゃねえの
588名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 20:00:07.48ID:lQjz+pHhd
>>585
この状況の経緯です。何年もMacとMac用USキーボード使ってコマンド&スペースで入力モード変換してたけど、最近WindowsとWindows用のUSキーボードを使うことになった
589名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 20:00:44.11ID:lQjz+pHhd
>>585
最初はalt&バッククォートやコントロール&スペースで変換してたけど、常時Macと併用してることもあり、やっぱり指が慣れず、コマンドの位置にあるaltばかり押してしまうので、altとスペースを入力モード変換として使えるようにした。という感じです

エラーになったので2つに分けました。
2019/11/28(木) 20:10:55.37ID:U/9F6nEa0
>>589
そういうことならまずChangeKeyなど使いレジストリでAltとCtrlを入れ替えたほうがいいんじゃね
コピペなどもAltをCtrlとして使えるからMacに近い指の操作感になる
全てではないがMacのコマンドキーに相当する機能がWinでは概ねCtrlキーだからな
Ctrlをコマンドと同じ位置にしてしまったほうが早いだろ
そのうえでCtrl+スペースをIME切り替えに割り当てれば実際に押すのはAlt+スペースでIME切り替え出来るようになる
591名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 20:34:13.20ID:lQjz+pHhd
>>590
実はその通りで、Ctrl+cとかもalt+cで動くように設定してるんですけど、ieだけaltが制御できずコピペが不安定なんです。。change keyはレジストリいじるの怖くて何となくスルーしてたんですが、そっちのがいいんですかね、、調べてみます
592名無しさん@お腹いっぱい。 (スププ Sdb2-hYBf)
垢版 |
2019/11/28(木) 20:39:17.44ID:lQjz+pHhd
>>590
というのと、自分以外の人がこのpcを使うことを考えてAHKでの一時的な制御を考えた。という経緯もありました
593名無しさん@お腹いっぱい。 (ワッチョイ b5cf-8b9h)
垢版 |
2019/11/28(木) 20:39:54.18ID:M99/5zSx0
ChangeKeyはWin7時代に使ったけど問題なかったよ
Win10じゃ非対応だったと思うけど違ったかな
(もちろん類似ソフトはあると思う)
594名無しさん@お腹いっぱい。 (ワッチョイ 19cf-5Jli)
垢版 |
2019/11/29(金) 03:44:10.27ID:Tf3CI0sR0
質問したいです ステレオミニジャックに
イヤホンをさしたら 特定のファイルを実行する
ぬいたら別のファイルを実行するということがしたいです

以前ネットでそんなことができると見た覚えがあるのですが
ヘルプにそれらしきコマンドなどなかったです
目論見は可能でしょうか?
可能でしたら記述方法をおしえていただけませんか?
よろしくお願いします
2019/11/29(金) 23:04:50.44ID:gIwANFe0aNIKU
>>594
AutoHotkey はCOMオブジェクトを扱えると思うので
できるのではないかと思うのだが確信はない

できるとすれば
たぶん思っているよりだいぶ面倒だとは思うが
以下のような方法がある

もっといい方法があるかも知れないが、Windoows の
Core Audio インタフェースを通して状態を知ることはできる

再生デバイスの一覧とボリュームの取得
http://yamatyuu.net/computer/program/vc2013/vollist/index.html
がいいサンプルになると思う(言語はC++)

この中のボリュームに関する処理は不要だか
pProperties->GetValue(PKEY_Device_FriendlyName, &vName);
で取得したデバイス名が自分の対象としているヘッドフォンなら
DWORD stat;
HRESULT hr = pEndpoint->GetState(&stat);
(↑この行はサンプルコードには含まれていない)
でその状態を取得することができると思う
2019/11/29(金) 23:47:57.21ID:gIwANFe0aNIKU
>>595
もしかしたデバイスの下についているセッションの状態をとる必要があるかも知れない
2019/11/30(土) 00:34:19.57ID:KUmLOSnY0
環境によると思うのでよくわからんが
SoundGet,var,HEADPHONES では値取れないん?
2019/12/03(火) 20:18:24.26ID:ceEY+y+eM
ahkで和暦の日付入力って可能なの?
formattimeじゃ無理そうだけど、、、
599名無しさん@お腹いっぱい。 (ワッチョイ 9e73-YC6P)
垢版 |
2019/12/04(水) 04:05:05.50ID:nf1P/FNe0
>>598
formattimeじゃなくてFormatTimeを使う

FormatTime, today, yyyymmdd D4, LongDate
MsgBox, % today
2019/12/04(水) 23:56:35.27ID:7Klp1s8b0
>>599
できた!めちゃくちゃ助かったあんがと
2019/12/05(木) 00:33:31.68ID:izzBjhE+a
edgeがフルスクリーンかそうじゃないかって判定する方法ないですか?
IEだとかFirefoxはタイトルバー(0x00C00000)があるかどうかで判定できたんですけどedgeだとこれで判定できないので困ってます。

if tmp & 0x00C00000
{
send,{F11}
}
else
{
sleep,100
}
2019/12/05(木) 01:42:32.28ID:Jhh0ALwr0
失礼かきこめるのかな
2019/12/05(木) 01:42:38.11ID:Jhh0ALwr0
失礼かきこめるのかな
2019/12/05(木) 01:56:39.84ID:Jhh0ALwr0
連投はかんぜんに間違いでした、ずっと書き込めなかったので本文つくる前に
軽率に確認しちゃいました申し訳ない

質問なのですが

最終的に座標の色をみてなんやかんやしようというための途中段階なんですが、

ある座標(今回は100,200として)の場所の色を判定するのに第一段階として
以下のx→yで確認して確認動作としてzに組み込むという方法を以前からやっていて何の問題もなくできたのですが
今回 zで上手く hensuu :=1 と出てくれません。
別のコードも今まで同じやり方で作って正常動作できているので、動作を理解していないということはないと思うのですが
何かポカしていることありますでしょうか?

x::MouseMove, 100,200

y::
MouseGetPos,x,y,
PixelGetColor, color, %x%, %y%
return
で調べた colorの値を下に代入して(FFFFFFという値が出たとして)

z::
PixelSearch,,,100,200,102,202,0xFFFFFF,2,Fast
If ErrorLevel=0
Msgbox,hensuu :=1
else Msgbox,hensuu :=0

2019/12/05(木) 02:00:32.20ID:Jhh0ALwr0
連投すみません 修正します
大分テンパって申し訳ないです

x::MouseMove, 100,200

y::
MouseGetPos,x,y,
PixelGetColor, color, %x%, %y%
Clipboard=%x%, %y%, %color% 
return
で調べた colorの値を下に代入して(FFFFFFという値が出たとして)

z::
PixelSearch,,,100,200,102,202,0xFFFFFF,2,Fast
If ErrorLevel=0
Msgbox,hensuu =1
else Msgbox,hensuu =0
return
2019/12/05(木) 02:11:20.13ID:8EiK3bS00
>>601
普通にWinGetで判定出来るぞ
Edgeでも他のソフトでも
2019/12/05(木) 02:18:26.86ID:8EiK3bS00
>>601
あ、スマン
EdgeのフルスクってF11押した状態のことか
最大化と勘違いしてた
606はウソなので忘れて
2019/12/05(木) 02:47:51.06ID:8EiK3bS00
>>601
お詫びに代案だけど
WinGetActiveStats でEdgeのウィンドウサイズを取得してスクリーンサイズと比較するのはどうだろう
最大化の場合はボーダーラインの分だけスクリーンサイズよりウィンドウサイズが一回り大きくなるけど
フルスクならスクリーンサイズとウィンドウサイズがピッタリ同じで位置も0,0になるので判定できるかと
2019/12/05(木) 11:44:12.03ID:JQ7WcuOOa
>>608
その方法でできるようになりました、ありがとうございます!
610名無しさん@お腹いっぱい。 (ワッチョイ cb73-MVf8)
垢版 |
2019/12/07(土) 17:24:42.64ID:yB203HjY0
AutoHotkeyで他プロセスのイベントを監視したい。

例えばNotepad.exeにSendMessageを送ってプログラムを終了させたり、拡大縮小化などをさせることはできますが
逆に終了や拡大縮小化などがNotepad.exeで行われた場合に、AutoHotkey側でそれを検知して、Notepadで〇〇したタイミングにAutoHotkeyでなにかの処理をさせたいのですが、その方法がわかりません。
AHKのOnMessage関数でできないかと思ったのですが、AutoHotkeyから送信されたメッセージしか取得できないみたいなのでこの方法ではうまくいきませんでした。
WIN32 APIのSetWindowsHookExを使えばできなくもなさそうなのですが、イベントを検知させるためのDLLを自作しないのいけないみたいなので、AutoHotkeyしか使えない自分には難しいです。

いろいろ調べたのですが、結局どうしたらできるのかわかりません。
AutoHotkeyで似たようなことをしている資料やコードを知っている、もしくはなにかヒントとなるアイデアを持っていたら教えて下さい。
2019/12/07(土) 17:45:57.42ID:8NwilouV0
普通にタイマーで見張るのではダメなの?
2019/12/07(土) 19:17:18.34ID:rAIwLfTa0
オプションでいいから2DIN出せよ。CDが聞けないとかありえない。
DINは車の基本だぞ。
2019/12/07(土) 23:47:22.02ID:/zi3V67z0
>>610
Windowsのイベントを拾う
https://sites.google.com/site/agkh6mze/howto/winevent
614名無しさん@お腹いっぱい。 (ワッチョイ cb73-MVf8)
垢版 |
2019/12/09(月) 02:28:27.50ID:Yrg6ObJm0
>>612
>>613
回答ありがとう。

本当にやりたかったことは、とあるアプリが終了したときにAutoHotkeyでホットキーを送信するようにしたかったんです。
タイマーを使えばできることは知っていたのだけど、Windows APIで終了時の判定ができる方法があればそっちを使いたかったからです。
SetWinEventHookだと拡大縮小時にはイベントが取れるけど、終了時を判別するイベントはたぶんないみたい。
EVENT_OBJECT_DESTROYを使えばいけそうだと思ったけど、オブジェクトを破壊したときのタイミングを取得するみたいで、アプリそのものが終了したタイミングだけを取得する方法は自分にはわからなかった。
もう少し頑張ってみて、それでもだめなら素直にタイマーを使おうと思います。
2019/12/09(月) 02:55:28.85ID:qhn+RYVz0
質問者の真意は回答者には計り知れないのに回答者がかわいそう…
今時のPCならahkのタイマー監視なんてどうってことないと思うんだがな
おれ、結構timer使ってるけど0.5%前後だぜ(i5 3470)
2019/12/09(月) 09:38:36.59ID:RhLy9rR30
まあ 〇〇したタイミング とか とあるアプリ とか条件ボカされて ドンピシャな回答期待されても困るんで…

そもそも終了しか見ないんなら フック使う意味薄いような
SetWindowsHookExでグローバルフック使ったところで結局は得られるのは
ウィンドウの破棄情報であってプロセスの終了情報じゃないと思うけど

どうしても Timer使いたくないなら専用スプリクト化してProcess, WaitCloseで永遠に待てば
2019/12/09(月) 11:31:17.27ID:/I2TboW60
プロセス終了のタイミング=メインウィンドウ破棄のタイミングで代用して何が問題になるのかわからん
2019/12/09(月) 12:52:16.96ID:RhLy9rR30
1プロセスで複数ウィンドウこさえるSDIのアプリなんかだと どの窓も同列でメインウィンドウってのが無かったり
タスクトレイに常駐するタイプのアプリはメインウィンドウが破棄されてもアプリそのものは終了してなかったり

まあ厳密にいうと複数プロセスで動いてるアプリもあるし
トップレベルのプロセス監視でも終了確認できないウィルス的な挙動のアプリもあるし
とあるアプリが特定不可な以上具体的な挙動はわからんですが
2019/12/09(月) 14:23:35.35ID:/I2TboW60
>>618
そりゃその理屈は分かってるよ
その上でやりたい事を実現出来ないケースは殆ど無いだろという疑問なわけ
2019/12/09(月) 18:05:58.70ID:RhLy9rR30

何が問題になるのかわからんと言われたから問題になるケースを上げたんだが…?

>やりたい事を実現出来ないケースは殆ど無いだろ
ごめん殆ど無いの根拠がよく分からないわ
一般的な範疇のアプリという条件の元だとして
同列のメインウィンドウを複数作るアプリもタスクトレイに常駐するアプリも
ほとんどないから考えなくていいというほど特殊な存在でもないと思うけど

もちろん前提条件として「とあるアプリ」がそういう挙動をしないとあらかじめわかってるなら話は別だが
どっちにしたところでウィンドウ破棄をahkだけでイベントとして拾うのが難しい以上は
WinExistかProcess, Existかみたいな話になるだろうから確実な線で見るほうがよくない?
2019/12/10(火) 12:44:46.95ID:0PQtofevM
FormatTimeで質問したものだけど、最初は令和○年○月○日って表示されてたのに、最近になったら文字化けするようになってしまった、、、なぜでしょうか。。。

FormatTime,today,D4,y年M月d日
2019/12/11(水) 21:06:09.86ID:QVDjHUOL0
とおもったら自己解決したわ
SciTEでコンパイルするとだめだったわ。
どうにかなんねーのかコレ
2019/12/13(金) 08:51:21.82ID:khQtJgZC0
キーの取得ってどうやったらできますか?
2019/12/13(金) 12:17:12.80ID:7dZUILEn0
>>623
・GetKeyStateをまわす
・ホットキーラベルを列挙してA_This_Hotkeyを見る
・スクリプト外で良ければ、AHKのメインウィンドウを開いて View->Key history〜
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内部でバッチファイルのパラメータを渡している限り
文字化けしますね。
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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