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)
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内部でバッチファイルのパラメータを渡している限り
文字化けしますね。
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
それを試してもだめでした
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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