探検


AutoHotkey スレッド part28

■ このスレッドは過去ログ倉庫に格納されています
1名無しさん@お腹いっぱい。 (ワッチョイ aef9-dJm7)
垢版 |
2020/04/03(金) 18:35:06.00ID:/YRSlUCD0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512

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

■前スレ
AutoHotkey スレッド part27
http://egg.5ch.net/test/read.cgi/software/1555770773/

■日本語解説等
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
2020/04/27(月) 20:14:11.79ID:fuQIAEB8M
>>40
昔からあるホットキーすり抜け問題
完全な回避は無理だがBlockInputやSendPlay(いろいろ制限あり)を使えば
高負荷時以外であれば回避できる

ホットキーすり抜け対策(要管理者権限)
https://pastebin.com/en1JqVym
2020/04/27(月) 20:15:13.63ID:fuQIAEB8M
ホットキーすり抜けってなんぞや?という人はこちら

すり抜け条件
・修飾キーを入力(ホットキー、Send)
・高速で過剰な入力(ホイール回転など)
・PC負荷が掛かっている状態

ホットキーすり抜け再現スクリプト(要管理者権限)
https://pastebin.com/yHS3MAtF
2020/04/27(月) 20:19:15.89ID:fuQIAEB8M
+WheelDown::SendInput d ; Shift + ホイール下回転

KeyHistory
h=Hook Hotkey
i=Ignored because it was generated by an AHK script
d=Down
u=Up

■正常(入力d)
  d 0.03 LShift    ← キー入力
  d 0.03 LShift    ← キーリピート
  d 0.03 LShift    ← キーリピート
h d 0.02 WheelDown ← キー入力(ホットキー開始)
i u 0.02 LShift    ← 修飾キー解除
i d 0.00 d       ← SendInput
i u 0.00 d       ← SendInput
i d 0.00 LShift    ← 修飾キー復元(ホットキー終了)

■すり抜け(入力D)
  d 0.03 LShift
  d 0.03 LShift
  d 0.03 LShift
h d 0.02 WheelDown
i u 0.02 LShift
  d 0.00 LShift ← すり抜け
i d 0.00 d
i u 0.00 d
i d 0.00 LShift
2020/04/30(木) 02:55:18.35ID:P5SWOXvf0
%A_MyDocuments%\AutoHotkey\Lib\mylib.ahk
というファイルを作ると
#include <mylib>
で参照できるようになるというのはわかったんですが
環境変数などを設定して上記フォルダ以外の任意の検索パス(c:\src\ahk\libなど)を指定する方法はないですか?
2020/04/30(木) 15:10:49.20ID:+ou1aYSca
>>66
変数は使えないけど
#include c:\src\ahk\lib
#include mylib.ahk
#include mylib2.ahk
という書き方ならできるね
http://ahkwiki.net/-Include
2020/05/03(日) 08:39:44.85ID:NG1wCXE/0
Ctrl + Vを押した時に
短押しの場合 Ctrl + V
長押しの場合 wiindowsボタン + Ctrl + V
という機能をつけようとしたんだけどうまくいかなかった
修飾キーの扱いがわるいのか、keywaitのところがおかしいのか

https://i.imgur.com/hZ6dEB9.jpg

#UseHook ;ホットキーラベルの定義で、常にフックを使用するようにする

Ctrl & v::
KeyWait,Control
KeyWait,v,T0.3 ;0.3秒対象キーが押されたかどうか
If(ErrorLevel)
{
send, <^v ;ここに任意のコマンド 長押し
KeyWait,Control
KeyWait,v
Return
}
KeyWait,Control
KeyWait,v,D T0.2 ;0.2秒対象キーが押されるのを待つ
If(ErrorLevel)
{
send, ^#v ;ここに任意のコマンド 1度押し
KeyWait,Control
KeyWait,v
Return
}
2020/05/03(日) 09:46:08.74ID:BcgnsImu0
>>68
wikiのサンプルコードを見るのは良いけど一行ずつの意味を正しく理解して無駄を省けよ
長押しor短押し判定のみなら KeyWait,v,D T0.2 の部分は要らねえだろ
あと #(Winキー) 付け加える位置も間違ってるし


^v::
KeyWait,v,T 0.3 ;0.3秒対象キーが押されたかどうか
If(ErrorLevel)
{
msgbox, Ctrl+Vを長押ししました ;ここに任意のコマンド 長押し
KeyWait,Ctrl
Return
}
msgbox, Ctrl+Vを短く押しました ;ここに任意のコマンド 1度押し
KeyWait,Ctrl
Return
2020/05/03(日) 10:17:19.32ID:MUdN1Azr0
それ質問者は短押し0.3 長押し0.5 で判定のつもりで書いてると思うぞ
300msで長押しとみなすのは操作的にきついじゃろ
2020/05/03(日) 10:23:02.14ID:BcgnsImu0
>>70
どこから0.5なんて数字が出て来たんだ?
別に0.3秒判定でも操作的には全然きつく無いんだが
普通の短押しってせいぜい100ms〜150msくらいだしな
事実>>69のスクリプトでも普通に押し分けられる
仮に0.5秒以上にしたいなら KeyWait,v,T 0.5 にすりゃいいだけだ
2020/05/03(日) 14:38:23.16ID:NG1wCXE/0
>>69
本当は
短押しの場合 Ctrl + C
二回押しの場合 wiindowsボタン + Ctrl + V
長押しの場合 Ctrl + V

としようと思ったんだけど(マウスのボタンに登録して1つのボタンで済ませるため)
Ctrl + Cまで混ぜると使い勝手悪くなりそうだから書くのをちょっと迷ってたんだ

ともあれ書いてくれたものを参考にしたら動きました、ありがとうございます
2020/05/03(日) 14:59:20.25ID:+I3GRHTU0
>>72
とにかく参考にするにしても一行ずつどういう意味があるのか理解して使うことが大事
そうすりゃ元サンプルの通り2回押しの場合も入れようが省こうが自由に出来る
2020/05/05(火) 21:38:52.40ID:S9G2EtUY00505
自作関数ってこの呼び出し方できないの?

mb(mes)
{
msgbox % mes
}

mb,"hello"
mb % "hello"
2020/05/05(火) 22:37:06.71ID:i0X3+70y0
>>74
よく読んだ方が良いと思う
関数 - AutoHotkey Wiki
http://ahkwiki.net/Function
2020/05/06(水) 10:08:51.61ID:b7Jl+TQP0
言語仕様酷すぎ
SquirrelとかLuaとかまともなスクリプトエンジン使ったのがあるけど
I/O周りの処理のノウハウに一日の長があるからこっち使うしかないんだよなあ。
自分で作ってみてもALT+F1が拾えないゲームが出て放棄した。
2020/05/06(水) 14:07:23.27ID:E3pRlJgb0
PythonとかJavaScriptからトランスパイル出来たら最高
2020/05/12(火) 16:54:41.85ID:E+fH0d4D0
たびたびお世話になってます。
LShift短押し(0.5秒以内とか)でSend,a
LShift長押しで本来の機能を持たせたく悪戦苦闘しています。
KeyWaitを軸に、GetKeyState,SetTimer、Loopなどを組み合わせtて試行錯誤しましたが歯が立ちませんでした。
特にKeyWaitが曲者?で、長押し中は定義から解放されず、本来のLShiftに回復してくれないのです。
詳しい方々、どうかよろしくお願いします。
2020/05/12(火) 17:26:37.24ID:dy+j9Q/G0
>>78
少し上の>>69に長押しと短押しのサンプルコードがあるだろ
まずはそれを参考に自分で書いてみろ
それで上手く行かなかったらその書いたスクリプト貼りな
2020/05/12(火) 17:38:33.84ID:ckVLw1J00
過去スレとwikiは宝の山
2020/05/12(火) 18:21:12.70ID:E+fH0d4D0
78です。
これなんかどうでしょう?
初めの数秒間は希望通りの動きをすることもあるのですが、
ほとんどの場合が、LShiftが押しっぱなしのような状態になります。
PCを再起動しないと、押しっぱなし状態が解除されなくなってしまうのです。
希望通りの動きをすることが数秒間あるのは、どういうことなんでしょうか?

LShift::
KeyWait, LShift, T0.5
If (ErrorLevel)
{
Send, {LShift Down}
KeyWait, LShift
Return
}
Else
{
Send, a
KeyWait, LShift
Return
}
2020/05/12(火) 18:33:43.92ID:dy+j9Q/G0
>>81
{LShift Down}があったら、必ずキーを離した時に{LShift Up}も入れないと
Shift押しっぱなしになるぞ
2020/05/12(火) 19:38:03.12ID:E+fH0d4D0
78=81です。
82さんのアドバイスに従い、下のように追記したところ上手く機能するようになりました。
ありがとうございました。

しかし、新たな問題が発覚しました。
LShiftを押してから0.5秒以内にマウスクリックやマウスホイール操作をすると、
押しっぱなしにもかかわらず、今度はLShiftが解除されてしまうのです。
LShiftから指を離し、再び押して0.5秒以上を待ってマウス操作を入れると問題ないのですが、
押し直したり厳密に0.5秒が経過するのを待つのはストレスなので、なんとかならないものでしょうか?
キーボード操作の場合は、0.5秒以内であってもLShiftが解除されることはないようです。
よろしくお願いします。

LShift::
KeyWait, LShift, T0.5
If (ErrorLevel)
{
Send, {LShift Down}
KeyWait, LShift
Send, {LShift Up}   ←追加
Return
}
Else
{
Send, i
KeyWait, LShift
Return
}
2020/05/12(火) 20:22:49.26ID:dy+j9Q/G0
>>83
”0.5秒以上押したかどうか”で条件分岐してんだからそうなるの当たり前だろ
0.5秒以内は解除されるんじゃなくてまだShiftがSendされてないだけ
文句があるなら「押した長さ」で分岐するの止めろとしか言いようがない
根本的な使い方から見直しな
2020/05/12(火) 20:53:49.84ID:E+fH0d4D0
78=81=83です。
キーボード操作の場合は、0.5秒以内であってもLShiftが解除されることはなく、
直ぐにキーボードでキーを送り直すだけですみます。
マウス操作でもキーを送るように設定しているので、マウス操作をやり直すだけで済ませられないかと考えています。
2020/05/12(火) 20:55:52.67ID:qx8cyfXk0
根本的な動作要件としてモデファイアキーをチョン押しで何かアクションさせるのは辛いと思うんだ

例えば ~Lshift:: にしてshift 2回押し(ダブルクリック的な挙動)でトリガとかのほうが
キーオペレーションとしてはスムーズに行きそうな気がする
2020/05/12(火) 21:03:33.72ID:dy+j9Q/G0
>>85
>キーボード操作の場合は、0.5秒以内であってもLShiftが解除されることはなく、

もはやお前の言ってる「解除」って言葉自体が意味不明
キーボードだろうが何だろうが>>83のスクリプトだと0.5秒以内はShiftは押されない
解除も糞も無い
とにかく根本的な操作方法から見直せって
2020/05/12(火) 23:16:36.85ID:E+fH0d4D0
78=81=83=85です。
>>86
shift 2回押し(ダブルクリック的な挙動)を試してみました。
なかなか良い感じです。
ありがとうございました。
>>87
私の言う「解除」とは、おてつきの後、LShiftを押し直さなけけばならない状況になることです。
おてつきの後、LShiftを離して押し直さなくても、時間が経過したらマウス操作をやり直せばキー送信できるようにしたいのです。
何度も言いますが、キーボード送信ではそれが可能なんです。
よろしくお願いします。
2020/05/12(火) 23:19:41.88ID:dy+j9Q/G0
>>88
全く意味不明
マウスクリックも一度0.5秒以内にクリックした後そのままshift押しっぱなしで0.5秒経過後にもう一度クリックすれば
Shift+クリックになる

>マウス操作をやり直せばキー送信できるようにしたい
とか突然言われても寝耳に水だしだったらそのスクリプトも書けよ
人に伝えるの下手糞過ぎ
2020/05/12(火) 23:52:30.06ID:E+fH0d4D0
78=81=83=85=88です。
>>89
スクリプトは83で干した通りです。
その口ぶりから推測すると、83のスクリプトを貴殿のPCで検証したうえで、
私の言う「解除」の現象が確認できなかったということですね?
可能であれば、マウスホイールアップにアルファベットキーをバインドさせ、
「一度0.5秒以内にホイールアップした後そのままshift押しっぱなしで0.5秒経過後にもう一度ホイールアップ」
を試し、shift+アルファベットが送信されるか否かを検証してもらえないでしょうか?
お怒りのところ申し訳ありませんが、もう少々お付き合いくださいませ。
2020/05/13(水) 00:21:01.64ID:4vArzUsR0
>>90
>マウスホイールアップにアルファベットキーをバインドさせ
だからこの部分のスクリプトも貼れよ
一度言った事何度も言わすな

>お怒りのところ申し訳ありませんが
舐めた口聞いてんなよ池沼
2020/05/13(水) 00:32:21.88ID:yTfMHr2D0
78=81=83=85=88=90です。

>>91
これでしょうか?

+WheelUp::
Send,+i
Return
2020/05/13(水) 00:38:45.82ID:4vArzUsR0
>>92
普通に動作したぞ
Shift押した直後0.5秒以内にWheelUpしても反応しないが
そのままShift押しっぱなしで0.5秒経過後はホイール廻せばは I が入力される
何が解除だか意味不明
2020/05/13(水) 01:56:01.70ID:NTPhoH9M0
アプリケーションを起動させて、そのアプリケーションの中のClassNN AAAの表示を待ってからWinMoveを
実行したいのですが、ClassNN AAAの表示を待つ方法がわかりません。
どうすればいいでしょうか?

Run, %Run%, %Run_Dir%, , Run_PID
WinWait, ahk_pid %Run_PID%
2020/05/13(水) 05:26:57.46ID:div6UgiV0
>>94
タイマーで監視する
https://pastebin.com/JAXxPShs
2020/05/13(水) 08:23:18.43ID:yTfMHr2D0
78=81=83=85=88=90=92です。
>>93
そうですか・・・キーボード操作と同じ反応ですか・・・
ご検証ありがとうございました大先生。
私も別の環境(別PC、別マウスなど)で試してみます。
2020/05/13(水) 13:51:48.23ID:jQ/Lttt80
なんだコイツ
2020/05/13(水) 20:08:43.81ID:NTPhoH9M0
>>95
ありがとうございます。
試してみます
99名無しさん@お腹いっぱい。 (ワッチョイ d776-oW4g)
垢版 |
2020/05/20(水) 02:51:40.71ID:BnTHvFV20
AltTabでAltキーを離したら
選択したアプリの、画面中央にカーソルが移動する
スクリプトが上手く動きません、、
なにがおかしいのか教えていただきたいです、、

LAlt & Tab::AltTab

KeyWait, Alt
WinGetActiveStats, Title, Width, Height, X, Y
{
MouseMove, Width*.5, Height*.5
}
Return

よろしくお願い致します
2020/05/20(水) 03:25:30.67ID:yFj7I/kv0
>>99
まず、
LAlt & Tab::AltTab
このコマンドはこの一行だけで完結してる
なのでそれ以降の行は一切実行されてないのが動作しない原因

そもそもAlt+Tabキーはそのまま使えるのでわざわざAHKで乗っ取らずに
~!tab::
を使いその後の「AltTab」の記述は削除してOK

KeyWait, Alt
の後に一応Sleepを100〜200msくらい入れといた方がいい
最小化したウィンドウなどは復元時に若干遅延があるので(OS設定にもよるけど)

WinGetActiveStats の後の { } は全く要らない
なぜMouseMoveを { } で囲ってるのか意味不明なので削除

以上、これで俺の環境では正常に動作確認済み
余談だがCoordModeの設定も忘れずに
2020/05/20(水) 03:38:36.67ID:P+MbmAwc0
>>99
Width * .5 は分かりにくいので直したほうがいい

Width / 2
Width * 0.5
2020/05/20(水) 10:18:41.30ID:i/8wQWfHr
>>100
>>101
細かい部分までありがとうございます!!
早速使わせていただきます!
半年くらい悩んでたので、本気で助かりました!!
2020/05/24(日) 21:00:56.86ID:+8iPQVw+0
エディットボックスに書き込む際、そのウインドウを裏に隠れた状態のまま書き込みたいのです
C ont rol Text Setを使うとウインドウが裏にいるままで書き込めるのですが、再度のEnterを入れることが出来ません
Cont ro lSen dを使うとEnterも入れられるのですが、フォーカスされて表にウインドウが出てきてしまいます
どうしたらいいでしょうか
Send Messageの WM_ IME_ KEYDOWN を使ってもフォーカスされて表にでてきてしまいます

なぜか書き込み不可能になってしまうので、半角スペースを入れてます
2020/05/24(日) 21:01:52.95ID:+8iPQVw+0
→最後のEnter
2020/05/24(日) 23:59:20.94ID:3KHM3ts20
Enterというのが改行のことなら `r`n で行ける

text := "aiueo`r`n"
ControlSetText, Edit1,%text%,ahk_class Notepad
2020/05/25(月) 00:06:11.71ID:iowxTiYJ0
あと ControlSend でフォーカスされるかどうかはアプリによるのでAHKの仕様ではない
少なくともメモ帳ではバックグラウンドのまま
ControlSend, Edit1,aaaaaa{Enter},ahk_class Notepad
とかできる
2020/05/25(月) 08:33:12.59ID:7XQahtaV0
>>105
改行ではないです。Enterです
'r'nでは文字通り改行になり、複数行の入力になってしまってそのエディットボックスの入力完了の合図にはなりません
108名無しさん@お腹いっぱい。 (ワッチョイ 0e76-lu6J)
垢版 |
2020/05/25(月) 08:58:05.06ID:yLxp81xy0
最悪、フォーカスが切り替わることをタイマーで監視して、
切り替わったら元のウィンドウをアクティベーションするのはいかが
2020/05/25(月) 10:53:24.27ID:7XQahtaV0
>>108
他の仕事を別ウインドウでいろいろしてるときに裏ジョブとしていろいろ計算させてその結果をそのウインドウの
テキストボックスに入れていく、というのをしてるのですよね
そのときにテキストボックスに入力する度に表に出てくるのがとても鬱陶しいのですよ
2020/05/25(月) 11:58:43.92ID:iowxTiYJ0
ControlSetTextはテキストの内容をセットするコマンドなので改行ではない{Enter}が入らないのは道理
ControlSendがフォーカスを奪わないで{Enter}をセットできるのは>106で書いた通り

そこから先はアプリ側の仕様なので肝心のアプリの名前を隠されたまま相談されても話は進まないと思う
2020/05/25(月) 12:29:39.04ID:7XQahtaV0
>>110
ということは、エディットボックスにEnterを裏のまま入力することは出来ないケースはある
ということですね
これは残念です
2020/05/25(月) 13:11:25.02ID:BrwKh1f/0
>>111
ウィンドウが出てしまうことは諦めて、いっそのこと
ハナからウィンドウサイズを可能な限り小さくしておくか
サイズ変更できないアプリならシェードしておいて作業してみては
2020/05/30(土) 13:11:06.06ID:rRBwy6MaM
エクセルの文字を大きくするショートカットを作ったのですが、キーおしっぱにして
連続で文字を大きくしようとすると、たまにLAltがスカしてセルに「HFG」と
入力になっちゃいます。
スカ対策はやはりSleepしかないのでしょうか?確実に実行されるようにしたいのですが、
皆様はどういった対策をとられているのでしょうか。

#IfWinActive ahk_class XLMAIN
^+.::
BlockInput On
Send,{LAlt}
Sleep 150
Send,{H}
Send,{F}
Send,{G}
BlockInput Off
return
#IfWinActive
2020/05/30(土) 13:28:31.30ID:yGv3dVNZ0
俺はスカ対策で
SetKeyDelay, , 50
って最初に入れてる
押してる間の時間を50msにすることでSendのスカしにくくなる
2020/05/30(土) 23:29:38.43ID:kG3fR+Ih0
>>114
おお、今まで動作を早くするためのもの?程度の認識の関数でしたが、
その設定で使ってみたらかなり安定度あがりました。
回答ありがとうございます。
2020/05/31(日) 16:16:09.17ID:MmSe3n4Q0
同じく、横からですがありがとう 若干モサッと動くけど手戻りすること考えたらストレスない
2020/05/31(日) 16:23:50.01ID:JzP83ijW0
速度求めるなら自分の好みでもう少し早くしても構わないと思う
50msはかなり余裕を見ての数値なので
デフォルトだとこの値が -1 で一瞬(1ms以下?)なのでまあ10ms以上なら比較的安定するんじゃないかな
環境にもよるけど
2020/06/01(月) 03:57:09.41ID:Dp86aIsgr
#IfWinActive

Space Up::Send, {Space}

Space & f::Send, {Right}

↑ここまでOK----------------------------------

#IfWinActive, ahk_exe Photoshop.exe

~Space & f::Send, {Right}

↑チルダが機能しません、、---------------------

Spaceを修飾キーとして使用します。
上記の通り、前半は問題なく意図した通りに、機能しているのですが、
Photoshopなどのプログラムに切り替わったときには
チルダを入れて、Spaceそのものの機能を活かしたいのですが
上手く機能しません、、どのように切り替えればよいでしょうか?
よろしくお願い致します。
2020/06/01(月) 10:57:06.00ID:Og6eBwhk0
>>118
#IfWinActive で分けても Space & f:: の影響(スペース単独で押し下げた時は入力されず離した時に入力になってしまう)は出るからなあ
プログラムごとに切り替えたいならホットキーのスクリプトファイルを普段使い用(a.ahk)とPhotoshop専用(b.ahk)に分けて、
普段はa.ahkを起動しておき、Photoshop.exeがアクティブになった時はb.ahkを起動してa.ahkを終了
Photoshop.exeが非アクティブになったらa.ahkを起動してb.ahkを終了とかしてスクリプトを完全に分離させた方が良いんじゃね
2020/06/02(火) 00:58:47.26ID:v4Ajf04P0
>>118
コンビネーションを使わなければいい
https://pastebin.com/p9KcZFJn
2020/06/02(火) 06:24:40.59ID:l9NSXWu90
英語キーボードをあきらめて日本語キーボードにすれば、装飾キーにできるキーが増えるよ。
2020/06/05(金) 01:35:20.82ID:q1s2UhOK0
前スレで

>35名無しさん@お腹いっぱい。 (ワッチョイ 2373-KxX0)2019/04/26(金) 21:43:07.89ID:YRa+WZQz0>>36>>73
数週間前からWheelをからめたスクリプトが急に動かなくなったりするようになったんだけどみんなはそんなことない?
Xbutton1 & Wheel downで動かすスクリプトがあるんだけどこれが急に動かなくなったりする
そうなったらリロードしてスクリプトを読み直すしかない
Windows10のアップデートのせいかなとか思ったんだけど原因がわからず

と書かれていましたが、自分はwin8.1だけど
同じ症状(AutoHotkeyがWheel関係のボタン、中ボタン、ティルト左右、ホイール回転、を突然認識しなくなる)で悩んでました。
原因を考えると、win8.1とwin10両方で症状が出ているのでOSが原因ではない。
更に

マウスを別メーカーにする→変わらない
ドライバをメーカー製からwin標準のものに換える→変わらない
USBポートを換える→変わらない

だったのですが、別のノートPCで試したところ問題は起きなくなりました。
こうなるとマザボが原因という線が一番濃いでしょうか?

ちなみに自分のマザボはAsusuのH97-PLUSですが同じ症状の人のOS、マザボを聞いてみたいです。
123名無しさん@お腹いっぱい。 (ワッチョイ 5da6-y8Lg)
垢版 |
2020/06/05(金) 10:38:22.40ID:IyhGXBt90
アクティブでないウィンドウを操作するために
WinActivate, ahk_class xxxxx
Send,^a
sleep 50
WinActivate, ahk_class ooooo
みたいなやり方をしているのですが、ちょっとダサい気がするので、
ControlSendで書き換えたいと思っています。どう書き換えたらいいんでしょうか?
2020/06/05(金) 11:01:51.27ID:x0banOBH0
>>123
ControlSend, [Control], ^a, ahk_class xxxxx

ただしControlSendは上手く動作しないアプリケーション多いので俺はほとんど使ってない
2020/06/05(金) 19:34:38.98ID:hKAmwp+l0
それかsendmessageで直接該当アプリに命令流し込む
2020/06/05(金) 21:27:02.93ID:WTgalMLm0
>>122
実際に問題の起こるスクリプト貼ってくれないと誰にも断定はできない

>>63-65
ホットキーすり抜けが発生して修飾キーが押されっぱなしになっているのかも?
Wheel UpやDown で起こりやすい
127名無しさん@お腹いっぱい。 (ワッチョイ 5da6-y8Lg)
垢版 |
2020/06/05(金) 21:47:57.36ID:IyhGXBt90
>>124
やっぱりそうですか。マニュアル通りに書たはずなのに上手くいかないので、
書き方が何か違っているのかと思ってました。どうもありがとうございます。
2020/06/05(金) 21:56:03.83ID:q1s2UhOK0
>>126
どんなスクリプトかは関係なく単純な

WheelUp::send, a

のように1行だけのスクリプトも機能しなくなります。
Wheel関係のボタン 中ボタン、ティルト左右、ホイール回転 が全てAutoHotkeyで認識されていない状態です。

つまりAutoHotkeyのウィンドウのメニュー View>Key history and script info
で 中ボタン、ティルト左右、ホイール回転 の履歴が表示されていない状態です。

AutoHotkeyでこれら認識されなくなった時もAutoHotkey以外では問題なく機能しています。
2020/06/05(金) 22:06:53.68ID:x0banOBH0
>>128
マウスは何使ってんの?
2020/06/05(金) 22:27:42.10ID:q1s2UhOK0
>>129
エレコムのM-LS13ULです。
これをバッファローのものに変えても突然認識しなくなる症状は出ます。
しかし、このエレコムのマウスでも別PC(AutoHotkeyのバージョンは同じ)だと症状は出ません。
2020/06/06(土) 01:35:18.48ID:qI3Jyt1W0
>>130
おそらく別ソフトがマウスフックでイベントを乗っ取っている

AHKのフックはOSの機能であるWin32APIのSetWindowsHookEx(WH_MOUSE_LL、WH_KEYBOARD_LL)
他のソフトも利用可能でフックは後から設定したものから順次実行される(途中のフックで入力を破棄すれば次のフックは実行されない)

エレコム マウスアシスタント(原因?)
https://www.elecom.co.jp/support/download/peripheral/mouse/assistant/

> マウスを別メーカーにする→変わらない
> ドライバをメーカー製からwin標準のものに換える→変わらない
> USBポートを換える→変わらない

↑のアプリを終了させずに色々テストしたのでは?
終了しても駄目ならセーフモードで確認
2020/06/06(土) 06:22:40.93ID:1ptPVhcy00606
>>131
原因がわかりました。
WizMouseというフォーカスされていないウィンドウでも
マウスでスクロール可能にする常駐ソフトが原因でした。

普段使っているPC(Win8.1)で症状が出て、別PC(Win10)で症状が出なかったのは、
Win10では標準でWizMouseと同じ機能が装備されているのでWizMouseをインストールしていなかったからでした。
(さらに、今調べたらWin8.1もレジストリの設定変更だけでWinMouseと同じ事が出来ました。)

以前WizMouseも疑って、WizMouseの機能を使っている時、AutoHotkeyの
Wheel関係のボタンの認識を見たら問題なかったので完全にWizMouseの線は除外していました。

しかし今回>>131さんの指摘を受けて、マウスフックを使っているソフトを探したところ、WizMouseぐらいしかなかったので
AutoHotkeyがボタンを認識しなくなったタイミングでWizMouseを終了させたところ、一発で認識が戻りました。
ありがとうございました。
2020/06/06(土) 12:22:18.13ID:C5R1kkUA00606
フック奪い合いあるあるおつかれ
リダイレクトホイールは真っ先にahkで実装した機能の一つだわ
2020/06/14(日) 10:30:19.15ID:TOyb/fzu0
StatusbarGettextって64bitアプリに対しては使えない?
厳密には共有メモリを介しての情報取得系だけど Tb_GetitemRectとか。
64bit版ahkで試して値が返らない
2020/06/14(日) 13:18:25.46ID:c3a5nMdB0
>>134
64bit版AHKで64bitアプリのメモ帳のステータスバー取得できるから64bitとかは関係無いな

;メモ帳の行と列を表示
StatusBarGetText, OutputVar, 2, ahk_exe notepad.exe
MsgBox, %OutputVar%
Return

上手く行かないのは管理者権限とか個々のアプリの仕様とかが原因だろ
2020/06/14(日) 14:00:06.30ID:TOyb/fzu0
>>135
ありがとうございます
学び直します
137名無しさん@お腹いっぱい。 (ワッチョイ 0e76-6BNC)
垢版 |
2020/06/20(土) 02:37:11.99ID:ubMWWC0s0
タスクマネージャとかその他一部のウィンドウでホットキーが効かないことがあるのはなぜ?

例えばvk1D & k::Send, {Blind}{Down}をしてもk押下判定になっているみたい
当然、MGLのジェスチャーも無反応だし
2020/06/20(土) 02:50:11.83ID:hAmIJ0K30
>>137
UACで弾かれてるんじゃね
スクリプトを管理者権限で実行しな
2020/06/24(水) 16:26:51.06ID:rgAPk7/l0
特定のソフトで、SHIFT押下時だけスクロールを左右キーにアサインする記述って出来ないでしょうか
2020/06/24(水) 16:59:59.96ID:lWY1xrDw0
>>139
出来ますよ
まずはwikiのサンプルコード集でも見て勉強しましょう
2020/06/24(水) 20:14:50.15ID:rgAPk7/l0
>>140
色々と調べたけど出来ないんですよね…
Adobe Premiere Pro.exeの時のみSHIFT+ホイールスクロールを方向キーの左右に
~Lshift & WheelUp::
IfWinActive ahk_exe Adobe Premiere Pro.exe
{
Send,{ArrowLeft}
}

#IfWinActive, Adobe Premiere Pro.exe
~Lshift & WheelUp::Send,{ArrowLeft}
~Lshift & WheelDown::Send,{ArrowRight}
では動きません ご教授いただける方いれば教えて頂きたいです
2020/06/24(水) 20:22:59.67ID:lWY1xrDw0
>>141
{ArrowLeft} なんて無いから
wikiのキーリストをちゃんと見なさい
2020/06/24(水) 20:31:31.10ID:gQ3gi96k0
Adobe Premiere Pro.exe のスペースはなんもくくらんで認識できるんだっけ?
ahk_classで見たほうが確実な気がするけど
2020/06/24(水) 20:50:47.68ID:rgAPk7/l0
>>142-143
ありがとうございます
SetTitleMatchMode, 2
#IfWinActive, Adobe Premiere Pro
~Lshift & WheelUp::Send,{Left}
~Lshift & WheelDown::Send,{Right}
で行けました
ただ元々のスクロールも残って送信されるようで、Leftキーの移動と同時にスクロールもされてしまうのはしょうがないんですかね…
2020/06/24(水) 21:01:02.97ID:lWY1xrDw0
>>144
他の記述が余計な邪魔してんじゃないか

~Lshift & WheelUp::Send,{Left}
~Lshift & WheelDown::Send,{Right}

少なくともこれだけのスクリプトなら試した限り元のスクロールは送信されてない

ちなみに余談だけど修飾キーはコンビネーションキーにする必要ない
+WheelUp:: でOK
2020/06/24(水) 22:28:34.08ID:rgAPk7/l0
>>145
ありがとうございます!
147名無しさん@お腹いっぱい。 (オッペケ Sra3-L9uE)
垢版 |
2020/06/25(木) 03:55:59.04ID:vvPDn5f2r
新規タブでエクスプローラを開くコマンドって作れないですかね…。
特定のソフトが起動しているが前面に無い場合、そのソフトをアクティブにしてキーを送信…とするコマンドを作りたくて
IfWinActive explorer.exe
{
Send, ^t
return
}
IfWinExist Run explorer.exe
WinActivate
return
とかやってみたのですが出来ず、
MouseGestureL.ahkでトラックボールに割り当ててみようとしたけど出来ず…
2020/06/25(木) 04:09:00.66ID:j94+fiYF0
うちのwin10エクスプローラはいまだにタブ化はしとらんのだが
これ?
https://gigazine.net/news/20180308-windows-10-file-explorer-support-tabs/
2020/06/25(木) 05:45:08.99ID:C9QzYMGy0
>IfWinExist Run explorer.exe
これ合ってるのか?
俺には全く意味分からんのだが
俺が知らないだけならスマン

explorer.exeはウィンドウ無くても常駐してるから
ahk_class で指定した方が良い気がするが

そもそもエクスプローラーのタブは俺も知らない
Setsとやらはどうやら頓挫したみたいだが>>147の環境ではCtrl+t使えてんの?
2020/06/25(木) 08:47:10.76ID:4J/MN06G0
>>147
ファイラーならたいていホットキー設定でできると思うけど、MSのエクスプローラじゃないとダメなの?
Tablacusのようなエクスプローラ互換ファイラーもあるし、なかなか便利だよ
151名無しさん@お腹いっぱい。 (オッペケ Sra3-L9uE)
垢版 |
2020/06/25(木) 14:30:34.91ID:vvPDn5f2r
>>148
使用しているのはQTTabBarというタブ化ソフトです
>>149
そうですよね…そもそもExplorer.exeはずっといるので駄目ですかね
ahk_class explorer.exe でも動作しませんし、マイコンピュータを開く
Run "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
だとタブではなく新規ウィンドウで開いてしまうので…

やはり無理でしょうか
2020/06/25(木) 15:11:54.48ID:C9QzYMGy0
>>151
ahk_classはちゃんとWindow Spyで確認しな
普通にActivateとかはできる
QTTabBarでCtrl+Tが使えてるなら当然Sendコマンドだって使えるだろう
「無理でしょうか」とか言い出す前にしっかりwiki見てウィンドウ指定の方法を勉強しな
色々と書き方を間違ってるだけだから
153名無しさん@お腹いっぱい。 (ワッチョイ 0f56-V/rO)
垢版 |
2020/06/25(木) 20:47:23.92ID:u3QjMjKW0
>>152
ありがとうございます エクスプローラのclassはCabinetWClassなんですね…
wikiも
http://tsubolog.c-brains.jp/14/12/16-100000.php
http://blog.ayakix.com/2009/07/autohotkey.html
この辺りのページも参考にしているのですが一行に出来ません
まず裏にあるエクスプローラウィンドウをアクティブにするだけも機能しません…。
#WinActivateForce
#Enter::
WinActivate, ahk_class CabinetWClass
return

本当はこの上にSend, ^ t、
起動していなければ起動…という風にもしたいのですがそもそもアクティブ化すら動かない状態なので現状詰まっています
どこかミスが分かる方いればご教授お願いしたいです
2020/06/25(木) 21:00:30.04ID:C9QzYMGy0
>>153
その4行のみのスクリプトで何も問題なく機能してるぞ
Winキー+Enter押すとエクスプローラーのウィンドウがあればアクティブになる
動かないとしたら他にも何か余計なもん書いてるんじゃね
2020/06/25(木) 22:36:28.18ID:u3QjMjKW0
>>154
ありがとうございます 一旦全て消して打ち直した所無事に動くことが出来ました!
自分の様な使い方がしたい人は稀だと思いますが一応
#WinActivateForce
#n::
IfWinNotExist ahk_class CabinetWClass ;存在しない時
Run, explorer.exe ;エクスプローラを起動
else ;または
IfWinActive ahk_class CabinetWClass ;エクスプローラのクラスがある時
{
Send, ^t ;ショートカットを送信
return
}
IfWinExist ahk_class CabinetWClass ;裏にある時
WinActivate ;アクティブ
return

で動きたいように動いてくれました。スレ汚し失礼しました。
2020/06/26(金) 05:50:57.98ID:VjaeUZio0
>>155
本当に「動きたいように動いてくれました。」何だろうか?
まあ本人が言うんだから間違いないんだろうけど(´・ω・`)
157名無しさん@お腹いっぱい。 (オッペケ Sra3-L9uE)
垢版 |
2020/06/26(金) 18:10:14.78ID:rIU3pFBBr
IMEオフってIME_SET(0)じゃない?
wikiにも書いてないしtabに割り当てたいんだけど動かない
2020/06/26(金) 18:24:27.06ID:8s6kilGT0
>>157
それはahk使わなくてもIMEのプロパティでキー設定すればできるしそっちの方が確実
まあTabはそれ以外でも使うから不便になると思うがな
ちなみに余談だけど俺は英数キーをIMEオフに割りあててる
159名無しさん@お腹いっぱい。 (オッペケ Sra3-L9uE)
垢版 |
2020/06/26(金) 18:53:11.89ID:rIU3pFBBr
>>158
普段はtabキー使うから、IMEオフが必要なソフトでのみtabをIMEオフにしたかったんだよね ahkならソフトでの指定が出来るから
IMEオフはIME_SET(0)でいいのかな
2020/06/26(金) 19:02:52.26ID:5Gj+Y/Ke0
>>159
そういうことなら

■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。

なぜかテンプレなくなってるな
2020/06/28(日) 02:35:20.56ID:APknnKSb0
IME.ahk入れていないのにIME_SET()関数使おうとしたんかよ
まあahk標準機能として用意されて欲しいとは思うけどね
162名無しさん@お腹いっぱい。 (ワッチョイ 7f76-V/rO)
垢版 |
2020/06/28(日) 06:10:43.18ID:JSt+EfPH0
AHKの便利さを知っている人でも満足できるMac対応代替アプリ知りたい
おすすめありますか(別言語可)
■ このスレッドは過去ログ倉庫に格納されています

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