AutoHotkey スレッド part28
レス数が1000を超えています。これ以上書き込みはできません。
!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 Include先も含め、AutoHotkey.ahkに関係するホットキー全体で
変数を共有するためには、その都度IniReadするしかないですか?
グローバル変数的な何かはないのかなと。
可能なら、AutoHotkey.ahkからのInclude先AHKファイルで定義した変数を共有したいのですが。
下のような構成で、bを押したときにaaAAaaと表示させたい
[AutoHotkey.ahk]
#Include a.ahk
#Include b.ahk
Return
[a.ahk]
AAA := "aaAAaa"
a1::Return
a2::Return
[b.ahk]
b::MsgBox, % AAA その状態でAutoHotkey.ahkを動かす分にはいける
[AutoHotkey.ahk]
AAA := "aaAAaa"
a1::Return
a2::Return
b::MsgBox, % AAA
Return
includeは全てAutoHotkey.ahkとして展開されるので↑と同義になるから
ただしaとbのincludeを逆にしたらautoexrcuteが働かない
includeの位置は要注意
[AutoHotkey.ahk]
b::MsgBox, % AAA
AAA := "aaAAaa"
a1::Return
a2::Return
Return
あと当然だが a.ahk / b.ahk を単体起動した時はAutoHotkey.ahkから起動した時のようには動作しない >>5
わかりました、ありがとうございます。
Includeは内容を展開しているだけだったのですね。
まずInclude元でAutoexecuteが開始し、Includeがあればその先のReturnまでAutoexecuteされ、
またInclude元に戻って、そのInclude元のReturnまではAutoexecuteされるものだと思っておりました。
自分のスクリプト郡は、Include先でReturnがあったためにそこでAutoexecuteが終わってしまっていた訳ですね。 ところで以下ような感じに、ファイルごとに役割を分け、
またそれぞれのファイル内でしか使わない変数はそのファイル内に収めておきたいのですが、
その方法はありますでしょうか?(下の構成ではInputA.ahkの2行目でAutoexecuteが終わってしまいますよね。)
あまり美しくないですが、AutoHotkey.ahkの先頭にVariables.ahkのようなものをIncludeして、そこで変数リストを作るとかしかないですかね?
[AutoHotkey.ahk]
#Include InputA.ahk
#Include InputB.ahk [InputA.ahk]
textA := "A"
a::MsgBox, % textA
d::MsgBox, % (textA . "D")
[InputB.ahk]
textB := "B"
b::MsgBox, % textB
c::MsgBox, % (textB . "C") イニシャライズを各AHK内で完結させたいならsubかfunctionにしてcall
ただし全体のグローバル変数であるという事実は変わらんが
エラった時のpastbin AHKのハイライトもあるのね
https://pastebin.com/dkUfkDTj
ただこれだと一時的に#includeをコメントアウトで外したいときにautoexecuteの
手直しも必要になるので islabel() isfunc() を入れたほうがいいかも >>10
なるほど確かにこれなら実現できますね!
ありがとうございました、とても勉強になりました
ところで下のようにしてみたのですが、#Include では変数が使えないみたいですね。
何かいい案はないでしょうか?
というのも、実際は10以上のファイルがあるので、ダラダラ書くよりLoopで回したいものでして・・・
https://pastebin.com/g2Gc1cDU 無理だが
いっそ関数ライブラリ化して全部 %A_ScriptDir%/Lib に押し込むという手もある
したらincludeそのものが不要になる >>11
Includeするahk内で更にInclude出来るはずだぞ(その内容は「#Include 〜.ahk」だけでも良い)
だからメインahk(AutoHotkey.ahk)内でのInclude用ahkの名前は固定しといて
メインahkでそのahkファイルを書き換えすれば手直しは要らなくなると思う
例として、メインahkにIncludeするファイル名を「Include_ahk.ahk」とし
Include_ahk.ahk内は
-----------------------------------
#Include InputA.ahk
#Include InputB.ahk
-----------------------------------
↑の2行はメインahkのautoexecute内で検索→名前取得→書き込み処理を実行して
この処理の後に「#Include Include_ahk.ahk」を記述する
拙い説明 & 出来なかったらスマヌ
もしアレだったらMGLのスクリプトが参考になると思う >>13
>もしアレだったらMGLのスクリプトが参考になると思う
ごめん真っ新なMGLでは参考にはならないかもしれないのでこの件は忘れて https://www.autohotkey.com/docs/commands/_Include.htm
マニュアル読み直してたらv1.1.28以降はErrorlevelとコマンドライン文字列以外のすべての組み込み変数が有効とあるね
Loop,Filesのローカル組み込み変数はどうなんだろ
もし使えるなら↓みたいにできるのかも(出先からのなので試してはいない)
#include %A_SprictDir%
Loop, Files, %A_SprictDir%\*.ahk, F
If (A_LoopFileFullPath != A_SprictFullPath)
#include %A_LoopFileName% ↓以下テンプレ(微修正)
----------------------------
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
↑スレ立てする時は3行にして下さい
■配布元
https://autohotkey.com/download/
■前スレ
AutoHotkey スレッド part27
https://egg.5ch.net/test/read.cgi/software/1555770773/
■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://hdd.s300.xrea.com/ahk/
AutoHotkeyJp(過去ログdatあり)
https://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
https://www6.atwiki.jp/eamat/
■スクリプト投稿
Autohotkey専用うpろだ
https://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
https://pastebin.com/ ■重要事項
オリジナルである、旧 "AutoHotKey" の開発は2009年9月で終了している。
現在は、そこからフォークした "AutoHotkey_L" が主流となり、2014年1月からは後のLが取れ
正式にAutohotkeyとして扱われるようになりました。
よって古いスクリプト(主にDllCall)は最新Verで動作しないものがあり、その場合はスクリプトの修正が必用です。
旧版のAHK1.0との変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
https://www.autohotkey.com/docs/AHKL_Features.htm
http://ahkwiki.net/Addition_L
※新規利用者には最新版を推奨しますが、AHK1.0(2009年9月までのVer)の利用者はAHK1.1への移行に際して
少なからず改修が必要となります。特に、旧流行らせるページの配布物(MouseGesture等)の多くは
そのままでは動作しません。安定利用できている環境を崩して移行するかどうかは各人の判断による。
MouseGestureについては有志の方が最新AHK対応版(MouseGestureL.ahk)を配布しているのでそれを利用するのもありです。
https://hp.vector.co.jp/authors/VA018351/mglahk.html
※ACC.ahk(旧版用)とCOM.ahkはフォーラムのリンク先にファイルが存在しませんので下記から入手してください。
https://ux.getuploader.com/autohotkeyl/download/24/ACC%2BCOM.zip
※Unicode版のACC.ahkは下記(AccInfoViewer.ahk付き)またはフォーラムから入手してください。
https://ux.getuploader.com/autohotkeyl/download/76/ACC_Unicode_and_AccInfoViewer_kai.zip
■質問に際して
OSの種類(7/8/10)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
5chの仕様の関係で、このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
レスをコピペして利用する場合は行頭の全角スペースをタブ等に置換してから利用すること。 以下FAQ等
■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」の「BOM」付きで保存する。(AHK1.1)
Q2:初めて使うけどどれを使えばいいの?
A2:AHK1.1のユニコード版を推奨。
旧流行らせるページの配布物をそのまま使う場合はAHK1.0を利用する事。
64ビットOSでAHK1.1、32ビット版の使用は制約が多いので64ビット版を強く推奨。
■リマップ・ホットキー割り当て
Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報を正しく返してこないのでAHKのみで対処は無理です。
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。( https://forest.watch.impress.co.jp/library/software/changekey/ )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード(0x0064はF13)が表示されるので覚えておき「終了」をクリック。
「ひらがな」キーをクリックすると「【ひらがな】キーをどのキーに変更しますか?」という
ウィンドウが表示されるので右上の「Scan code」をクリック。
覚えておいたスキャンコード(0064)を入力し、「OK」ボタンをクリック。
「登録」をクリックし、Windowsを再起動する。 Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
^1::Send, {Esc}
Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
sc07B & I::Send, {Blind}{Up}
sc07B & K::Send, {Blind}{Down}
sc07B & J::Send, {Blind}{Left}
sc07B & L::Send, {Blind}{Right}
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
#UseHookで全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
× Joy1::Esc
○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。 Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
○AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
例) ^W::Send, {w 30}
これを回避するためには、以下の方法をとればよい:
・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
○AHK以外が原因の場合
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
・Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)など他多数
・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている 皆さんありがとうございます。
>>12
今回は、関数に落とし込まない方針で行きます。
>>13
つまり、↑のPastebinで貼ったコードにあるincludeFilesはInclude_ahk.ahkの記述内容から取得して、各ahkの初期化セクションへGoSub
その後Include_ahk.ahk自体を読み込むということですか?
記述内容から読み出す方法がわからないので勉強してきます。
それから、MGLのスクリプトは現状読めない+あまり複雑にはしたくないので、もしかしたら現状のままメインahkで2箇所を修正する方針でいくかもしれません。
>>15
読みました。
Include指令ではLoop系の組み込み変数は使用できないのではないですか?
工夫して、%A_LoopFileName%の部分を書き換えられれば良いと思うのですが、いかがでしょうか。これは難しいですか? ジョイスティックの傾きを
GetKeyState, X, JoyX, P
で取得しようとしても、「49.999237」の値しか取得できない。
だけど、autohotkeyのメニュー画面がアクティブの状態だと正常に取得できる。
他のウィンドウでも正常に取得できるようにするにはどうすればいいでしょうか >>23
試したけど他のウィンドウでも普通に取得できるんだが? >>24
そうすると自身のpc環境特有の問題っぽいですね。
再インストとかいろいろ試してみます >>25
ちなみに中央値は49.999237で合ってる
スティック左に倒したときは0.001526、右に倒した時は100.000000
環境というよりも何か根本的な勘違いじゃね
AHKの画面アクティブだけ動くってとこからして ↓以下テンプレ ※規制が厳しくなったせいで貼るときに浪人がないとBBQに規制されるので注意!!
https://pastebin.com/aYGhWqyJ
おかげで手持ちの回線全部焼かれた (#^ω^)ビキビキ F13+WASDなどでカーソルを動かせるようにしてみたけど、それ以外のキーを押すと
普通に文字が入力されてしまう。
たとえばEを押しても入力されないように無視することはできない? F13 & e:: Return
誤爆しそうなWASD周りを一通り入れときゃ良いんじゃね >>29
LowLevelKeyboardProcを使って入力を破棄する方法
大量のホットキーを登録しないで済む
https://pastebin.com/rcNGBzVV ホットキーやタイマーでラベル名の代わりに関数指定できるけど
ここで指定した関数ってLibに置いといても自動で#Includeされないのね OneNote2016でSend, {Up}とSend, {Down}が動作しない問題が
あっさり解決したから一応共有しとく
OS: Windows 10
AHK Version: 1.1.32.00
#If, WinActive("ahk_exe ONENOTE.EXE")
vk1D & i::ControlSend, OneNote::DocumentCanvas1, {Up}
vk1D & k::ControlSend, OneNote::DocumentCanvas1, {Down}
#If >>35
AHK_L1.1.08.01では
#IfWinActive ahk_class Framework::CFrame
^E::SendInput {blind}{UP}
^X::SendInput {blind}{DOWN}
#If
で動作してるが、もしかして非互換性の問題とか? >>36
こっちの環境では動作しないみたい
ネットにはいろいろ情報転がってたけど、おま環だらけだったし、
>>35 に書いたやつも俺環かもしれない
ついでに >>35 補足: Blindつけ忘れた ahk外部の話になっちゃうんだけど
タイトルバーに .py が含まれていたら
Python辞書を指定して定型文ツールを起動みたいなことやりたいんだけど
辞書指定して起動できる定型文貼り付けツールみたいのないかな
その部分までahkで真面目に実装すると大作になりそうなんでちょっとめんどい 素直に言語補完やスニペット機能のあるエディタ使うのがいいとおもうが
タイトルバー .py ってことはこういうとこに貼る断片コードじゃなくて
ちゃんとファイルとしての作成されてるpythonスプリクトなんだろうし winキー押下のときスクロール量を増加、
ctrl+winキーでさらにスクロール量増加、という処理をしたいです。
winキーをF13にしているんですが、ctrlがたまに抜けてwebブラウザ見てるときとかに
ズームになってしまいます。。。宜しくお願いいたします。
; スクロール量増加
F13 & WheelUp::
If GetKeyState("Ctrl", "P") ;ctrlが押されているか?の確認
{
Send, {WheelUp 20} ;ctrl含めた3つ同時押しの処理
}
Else
{
MouseClick,WheelUp,,,5 ;2つ同時押しの処理
}
Return
F13 & WheelDown::
If GetKeyState("Ctrl", "P") ;ctrlが押されているか?の確認
{
Send, {WheelDown 20} ;ctrl含めた3つ同時押しの処理
}
Else
{
MouseClick,WheelDown,,,5 ;2つ同時押しの処理
}
Return >>40
その書き方だと1回目は#WheelUpだけど2回目からは^#WheelUpになってるんじゃないかな?
と思っていろいろ試したけど、うまくいかなかった。
下のコードも試したけど、WheelDownはGetKeyStateが効かないらしく失敗。
(KeyHistory見たら10〜30ms押下状態維持してる感じだったし、このWhileでいけるんじゃないかと思った)
もしかしたら、SetTimerの10ms刻みくらいでいけるかも?
https://pastebin.com/wmnY8P5R
なんならChromeのズーム周りの挙動は不審なのか?
#WheelUp::Send, {WheelUp 5}
でもたまにズームするし、なんだろね
結局よくわからなかったので、他の有識者に任せます
ごめんなさい GetKeyStateは押下情報見てるだけで横取りしてるわけじゃなかったような
ctrl+wheelの挙動にしたくないならブラウザがCtrl押下を検知しないよう
Hotkeyかなんかで殺しとかなきゃいかんのでは ウィンドウの位置を配置するWINキー+↑↓←→をWINキー+IKJLにしたくていろいろやったんですけど、どうしても安定して同じように動かないです。
同じようなことやってる人がいたらサンプル見せてもらえませんか? >>43
何がどう安定しないのかの原因追及ならまだしもクレクレは却下
自分のスクリプトをまず貼るのが礼儀 >>43
とりあえず、Win+Lで別のことをやりたいなら、
Winキーをレジストリ系のキーチェンジャーでF13とかにしておかないとダメだろうね。 >>45
キーチェンジャーで探してみます。ありがとうございます。 >>47
今もできるのか確認してないけど試してみたら?他のWinキー使ったショートカットもなくなってもいいなら
ttps://sites.google.com/site/autohotkeyjp/reference/misc/Override
>Win+L および Win+U を除き、ウィンドウズのホットキーはレジストリを以下のように書き換えることで無効化出来る。 >>48
>Win+L および Win+U を除き
とある時点で論外だろ
なんでこう無意味なレスするんだか
>>45のやり方は一応Win+Lも無効化出来るが標準のWinキーショートカット全て使えなくなるから
使いたいコマンドは全てF13で登録し直さなくてはならない
>>43
そもそもWinキーを修飾キーにしなきゃいけない必要あるのか?
IKJLと組み合わせるならAppsKeyや変換キーなどを修飾代わりに使えばそういう煩わしさも無く簡単に出来る 登録し直しに関しては、
f13::LWin
で良いのでは? CapsLockをF13にレジストリで書き換えて似たようなことしてるけどかなり快適 ポータビリティ重視してる身としてはレジストリ書き換えは論外だから、
その前提で工夫するだろうな XPの時代はポータブルでできたけど、今はAHKを管理者権限で起動しないと完全な動作ができないんで無理 チェンジキーアプリで、Winキー を 0x0064 にリマップし
F13 & i::Send {Lwin down}{Up}
F13 & k::Send {Lwin down}{Down}
F13 & l::Send {Lwin down}{Right}
F13 & j::Send {Lwin down}{Left}
で画面の移動できるんだけど、WINキーが押しっぱなし状態になって解除されない。。 >>54
そこは普通 Send, #{Up} でいいだろ
どうしても # がダメな理由があるなら {Lwin Up} も付けろよ >>56
両方やってみたけどウィンドウを移動中に効かなくなっちゃいます 手元にPCないから試してないけど
F13 up:: Send {Lwin up}
は? >>57
移動中とか意味不明
Win10なら最大化最小化などのショートカットだろそれ
で、何がダメなのか知らんが、F13を離したときに Send, {Lwin Up} するようにすりゃ良いんじゃねえの
色々と説明不足だしもう少し頭使え windows8.1でキーボードやマウスからの入力を一時的に無効にしようと
^b::
blockinput,on
sleep, 5000
blockinput, off
return
のように書いても普通にキー入力を受け付けています。
この命令は効果がないのでしょうか? >>60
Win10だけどうちでは管理者権限で実行すれば正常に動くぞ
普通の権限だと効果無し
ただしそのスクリプトだとCtrlを離す操作もブロックされてCtrl押されっぱなしになるから
5秒経過後blockinput, offにしたあと挙動おかしくなるからKeyWaitなどで離したあとBlockInput,onにした方が良いだろうな >>61
管理者権限で実行したところ上手くいきました、ありがとう。 >>40
昔からあるホットキーすり抜け問題
完全な回避は無理だがBlockInputやSendPlay(いろいろ制限あり)を使えば
高負荷時以外であれば回避できる
ホットキーすり抜け対策(要管理者権限)
https://pastebin.com/en1JqVym ホットキーすり抜けってなんぞや?という人はこちら
すり抜け条件
・修飾キーを入力(ホットキー、Send)
・高速で過剰な入力(ホイール回転など)
・PC負荷が掛かっている状態
ホットキーすり抜け再現スクリプト(要管理者権限)
https://pastebin.com/yHS3MAtF +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 %A_MyDocuments%\AutoHotkey\Lib\mylib.ahk
というファイルを作ると
#include <mylib>
で参照できるようになるというのはわかったんですが
環境変数などを設定して上記フォルダ以外の任意の検索パス(c:\src\ahk\libなど)を指定する方法はないですか? >>66
変数は使えないけど
#include c:\src\ahk\lib
#include mylib.ahk
#include mylib2.ahk
という書き方ならできるね
http://ahkwiki.net/-Include 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
} >>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 それ質問者は短押し0.3 長押し0.5 で判定のつもりで書いてると思うぞ
300msで長押しとみなすのは操作的にきついじゃろ >>70
どこから0.5なんて数字が出て来たんだ?
別に0.3秒判定でも操作的には全然きつく無いんだが
普通の短押しってせいぜい100ms〜150msくらいだしな
事実>>69のスクリプトでも普通に押し分けられる
仮に0.5秒以上にしたいなら KeyWait,v,T 0.5 にすりゃいいだけだ >>69
本当は
短押しの場合 Ctrl + C
二回押しの場合 wiindowsボタン + Ctrl + V
長押しの場合 Ctrl + V
としようと思ったんだけど(マウスのボタンに登録して1つのボタンで済ませるため)
Ctrl + Cまで混ぜると使い勝手悪くなりそうだから書くのをちょっと迷ってたんだ
ともあれ書いてくれたものを参考にしたら動きました、ありがとうございます >>72
とにかく参考にするにしても一行ずつどういう意味があるのか理解して使うことが大事
そうすりゃ元サンプルの通り2回押しの場合も入れようが省こうが自由に出来る 自作関数ってこの呼び出し方できないの?
mb(mes)
{
msgbox % mes
}
mb,"hello"
mb % "hello" >>74
よく読んだ方が良いと思う
関数 - AutoHotkey Wiki
http://ahkwiki.net/Function 言語仕様酷すぎ
SquirrelとかLuaとかまともなスクリプトエンジン使ったのがあるけど
I/O周りの処理のノウハウに一日の長があるからこっち使うしかないんだよなあ。
自分で作ってみてもALT+F1が拾えないゲームが出て放棄した。 PythonとかJavaScriptからトランスパイル出来たら最高 たびたびお世話になってます。
LShift短押し(0.5秒以内とか)でSend,a
LShift長押しで本来の機能を持たせたく悪戦苦闘しています。
KeyWaitを軸に、GetKeyState,SetTimer、Loopなどを組み合わせtて試行錯誤しましたが歯が立ちませんでした。
特にKeyWaitが曲者?で、長押し中は定義から解放されず、本来のLShiftに回復してくれないのです。
詳しい方々、どうかよろしくお願いします。 >>78
少し上の>>69に長押しと短押しのサンプルコードがあるだろ
まずはそれを参考に自分で書いてみろ
それで上手く行かなかったらその書いたスクリプト貼りな 78です。
これなんかどうでしょう?
初めの数秒間は希望通りの動きをすることもあるのですが、
ほとんどの場合が、LShiftが押しっぱなしのような状態になります。
PCを再起動しないと、押しっぱなし状態が解除されなくなってしまうのです。
希望通りの動きをすることが数秒間あるのは、どういうことなんでしょうか?
LShift::
KeyWait, LShift, T0.5
If (ErrorLevel)
{
Send, {LShift Down}
KeyWait, LShift
Return
}
Else
{
Send, a
KeyWait, LShift
Return
} >>81
{LShift Down}があったら、必ずキーを離した時に{LShift Up}も入れないと
Shift押しっぱなしになるぞ 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
} >>83
”0.5秒以上押したかどうか”で条件分岐してんだからそうなるの当たり前だろ
0.5秒以内は解除されるんじゃなくてまだShiftがSendされてないだけ
文句があるなら「押した長さ」で分岐するの止めろとしか言いようがない
根本的な使い方から見直しな 78=81=83です。
キーボード操作の場合は、0.5秒以内であってもLShiftが解除されることはなく、
直ぐにキーボードでキーを送り直すだけですみます。
マウス操作でもキーを送るように設定しているので、マウス操作をやり直すだけで済ませられないかと考えています。 根本的な動作要件としてモデファイアキーをチョン押しで何かアクションさせるのは辛いと思うんだ
例えば ~Lshift:: にしてshift 2回押し(ダブルクリック的な挙動)でトリガとかのほうが
キーオペレーションとしてはスムーズに行きそうな気がする >>85
>キーボード操作の場合は、0.5秒以内であってもLShiftが解除されることはなく、
もはやお前の言ってる「解除」って言葉自体が意味不明
キーボードだろうが何だろうが>>83のスクリプトだと0.5秒以内はShiftは押されない
解除も糞も無い
とにかく根本的な操作方法から見直せって 78=81=83=85です。
>>86
shift 2回押し(ダブルクリック的な挙動)を試してみました。
なかなか良い感じです。
ありがとうございました。
>>87
私の言う「解除」とは、おてつきの後、LShiftを押し直さなけけばならない状況になることです。
おてつきの後、LShiftを離して押し直さなくても、時間が経過したらマウス操作をやり直せばキー送信できるようにしたいのです。
何度も言いますが、キーボード送信ではそれが可能なんです。
よろしくお願いします。 >>88
全く意味不明
マウスクリックも一度0.5秒以内にクリックした後そのままshift押しっぱなしで0.5秒経過後にもう一度クリックすれば
Shift+クリックになる
>マウス操作をやり直せばキー送信できるようにしたい
とか突然言われても寝耳に水だしだったらそのスクリプトも書けよ
人に伝えるの下手糞過ぎ 78=81=83=85=88です。
>>89
スクリプトは83で干した通りです。
その口ぶりから推測すると、83のスクリプトを貴殿のPCで検証したうえで、
私の言う「解除」の現象が確認できなかったということですね?
可能であれば、マウスホイールアップにアルファベットキーをバインドさせ、
「一度0.5秒以内にホイールアップした後そのままshift押しっぱなしで0.5秒経過後にもう一度ホイールアップ」
を試し、shift+アルファベットが送信されるか否かを検証してもらえないでしょうか?
お怒りのところ申し訳ありませんが、もう少々お付き合いくださいませ。 >>90
>マウスホイールアップにアルファベットキーをバインドさせ
だからこの部分のスクリプトも貼れよ
一度言った事何度も言わすな
>お怒りのところ申し訳ありませんが
舐めた口聞いてんなよ池沼 78=81=83=85=88=90です。
>>91
これでしょうか?
+WheelUp::
Send,+i
Return >>92
普通に動作したぞ
Shift押した直後0.5秒以内にWheelUpしても反応しないが
そのままShift押しっぱなしで0.5秒経過後はホイール廻せばは I が入力される
何が解除だか意味不明 アプリケーションを起動させて、そのアプリケーションの中のClassNN AAAの表示を待ってからWinMoveを
実行したいのですが、ClassNN AAAの表示を待つ方法がわかりません。
どうすればいいでしょうか?
Run, %Run%, %Run_Dir%, , Run_PID
WinWait, ahk_pid %Run_PID% 78=81=83=85=88=90=92です。
>>93
そうですか・・・キーボード操作と同じ反応ですか・・・
ご検証ありがとうございました大先生。
私も別の環境(別PC、別マウスなど)で試してみます。 AltTabでAltキーを離したら
選択したアプリの、画面中央にカーソルが移動する
スクリプトが上手く動きません、、
なにがおかしいのか教えていただきたいです、、
LAlt & Tab::AltTab
KeyWait, Alt
WinGetActiveStats, Title, Width, Height, X, Y
{
MouseMove, Width*.5, Height*.5
}
Return
よろしくお願い致します >>99
まず、
LAlt & Tab::AltTab
このコマンドはこの一行だけで完結してる
なのでそれ以降の行は一切実行されてないのが動作しない原因
そもそもAlt+Tabキーはそのまま使えるのでわざわざAHKで乗っ取らずに
~!tab::
を使いその後の「AltTab」の記述は削除してOK
KeyWait, Alt
の後に一応Sleepを100〜200msくらい入れといた方がいい
最小化したウィンドウなどは復元時に若干遅延があるので(OS設定にもよるけど)
WinGetActiveStats の後の { } は全く要らない
なぜMouseMoveを { } で囲ってるのか意味不明なので削除
以上、これで俺の環境では正常に動作確認済み
余談だがCoordModeの設定も忘れずに >>99
Width * .5 は分かりにくいので直したほうがいい
Width / 2
Width * 0.5 >>100
>>101
細かい部分までありがとうございます!!
早速使わせていただきます!
半年くらい悩んでたので、本気で助かりました!! エディットボックスに書き込む際、そのウインドウを裏に隠れた状態のまま書き込みたいのです
C ont rol Text Setを使うとウインドウが裏にいるままで書き込めるのですが、再度のEnterを入れることが出来ません
Cont ro lSen dを使うとEnterも入れられるのですが、フォーカスされて表にウインドウが出てきてしまいます
どうしたらいいでしょうか
Send Messageの WM_ IME_ KEYDOWN を使ってもフォーカスされて表にでてきてしまいます
なぜか書き込み不可能になってしまうので、半角スペースを入れてます Enterというのが改行のことなら `r`n で行ける
text := "aiueo`r`n"
ControlSetText, Edit1,%text%,ahk_class Notepad あと ControlSend でフォーカスされるかどうかはアプリによるのでAHKの仕様ではない
少なくともメモ帳ではバックグラウンドのまま
ControlSend, Edit1,aaaaaa{Enter},ahk_class Notepad
とかできる >>105
改行ではないです。Enterです
'r'nでは文字通り改行になり、複数行の入力になってしまってそのエディットボックスの入力完了の合図にはなりません 最悪、フォーカスが切り替わることをタイマーで監視して、
切り替わったら元のウィンドウをアクティベーションするのはいかが >>108
他の仕事を別ウインドウでいろいろしてるときに裏ジョブとしていろいろ計算させてその結果をそのウインドウの
テキストボックスに入れていく、というのをしてるのですよね
そのときにテキストボックスに入力する度に表に出てくるのがとても鬱陶しいのですよ ControlSetTextはテキストの内容をセットするコマンドなので改行ではない{Enter}が入らないのは道理
ControlSendがフォーカスを奪わないで{Enter}をセットできるのは>106で書いた通り
そこから先はアプリ側の仕様なので肝心のアプリの名前を隠されたまま相談されても話は進まないと思う >>110
ということは、エディットボックスにEnterを裏のまま入力することは出来ないケースはある
ということですね
これは残念です >>111
ウィンドウが出てしまうことは諦めて、いっそのこと
ハナからウィンドウサイズを可能な限り小さくしておくか
サイズ変更できないアプリならシェードしておいて作業してみては エクセルの文字を大きくするショートカットを作ったのですが、キーおしっぱにして
連続で文字を大きくしようとすると、たまにLAltがスカしてセルに「HFG」と
入力になっちゃいます。
スカ対策はやはりSleepしかないのでしょうか?確実に実行されるようにしたいのですが、
皆様はどういった対策をとられているのでしょうか。
#IfWinActive ahk_class XLMAIN
^+.::
BlockInput On
Send,{LAlt}
Sleep 150
Send,{H}
Send,{F}
Send,{G}
BlockInput Off
return
#IfWinActive 俺はスカ対策で
SetKeyDelay, , 50
って最初に入れてる
押してる間の時間を50msにすることでSendのスカしにくくなる >>114
おお、今まで動作を早くするためのもの?程度の認識の関数でしたが、
その設定で使ってみたらかなり安定度あがりました。
回答ありがとうございます。 同じく、横からですがありがとう 若干モサッと動くけど手戻りすること考えたらストレスない 速度求めるなら自分の好みでもう少し早くしても構わないと思う
50msはかなり余裕を見ての数値なので
デフォルトだとこの値が -1 で一瞬(1ms以下?)なのでまあ10ms以上なら比較的安定するんじゃないかな
環境にもよるけど #IfWinActive
Space Up::Send, {Space}
Space & f::Send, {Right}
↑ここまでOK----------------------------------
#IfWinActive, ahk_exe Photoshop.exe
~Space & f::Send, {Right}
↑チルダが機能しません、、---------------------
Spaceを修飾キーとして使用します。
上記の通り、前半は問題なく意図した通りに、機能しているのですが、
Photoshopなどのプログラムに切り替わったときには
チルダを入れて、Spaceそのものの機能を活かしたいのですが
上手く機能しません、、どのように切り替えればよいでしょうか?
よろしくお願い致します。 >>118
#IfWinActive で分けても Space & f:: の影響(スペース単独で押し下げた時は入力されず離した時に入力になってしまう)は出るからなあ
プログラムごとに切り替えたいならホットキーのスクリプトファイルを普段使い用(a.ahk)とPhotoshop専用(b.ahk)に分けて、
普段はa.ahkを起動しておき、Photoshop.exeがアクティブになった時はb.ahkを起動してa.ahkを終了
Photoshop.exeが非アクティブになったらa.ahkを起動してb.ahkを終了とかしてスクリプトを完全に分離させた方が良いんじゃね 英語キーボードをあきらめて日本語キーボードにすれば、装飾キーにできるキーが増えるよ。 前スレで
>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、マザボを聞いてみたいです。 アクティブでないウィンドウを操作するために
WinActivate, ahk_class xxxxx
Send,^a
sleep 50
WinActivate, ahk_class ooooo
みたいなやり方をしているのですが、ちょっとダサい気がするので、
ControlSendで書き換えたいと思っています。どう書き換えたらいいんでしょうか? >>123
ControlSend, [Control], ^a, ahk_class xxxxx
ただしControlSendは上手く動作しないアプリケーション多いので俺はほとんど使ってない それかsendmessageで直接該当アプリに命令流し込む >>122
実際に問題の起こるスクリプト貼ってくれないと誰にも断定はできない
>>63-65
ホットキーすり抜けが発生して修飾キーが押されっぱなしになっているのかも?
Wheel UpやDown で起こりやすい >>124
やっぱりそうですか。マニュアル通りに書たはずなのに上手くいかないので、
書き方が何か違っているのかと思ってました。どうもありがとうございます。 >>126
どんなスクリプトかは関係なく単純な
WheelUp::send, a
のように1行だけのスクリプトも機能しなくなります。
Wheel関係のボタン 中ボタン、ティルト左右、ホイール回転 が全てAutoHotkeyで認識されていない状態です。
つまりAutoHotkeyのウィンドウのメニュー View>Key history and script info
で 中ボタン、ティルト左右、ホイール回転 の履歴が表示されていない状態です。
AutoHotkeyでこれら認識されなくなった時もAutoHotkey以外では問題なく機能しています。 >>129
エレコムのM-LS13ULです。
これをバッファローのものに変えても突然認識しなくなる症状は出ます。
しかし、このエレコムのマウスでも別PC(AutoHotkeyのバージョンは同じ)だと症状は出ません。 >>130
おそらく別ソフトがマウスフックでイベントを乗っ取っている
AHKのフックはOSの機能であるWin32APIのSetWindowsHookEx(WH_MOUSE_LL、WH_KEYBOARD_LL)
他のソフトも利用可能でフックは後から設定したものから順次実行される(途中のフックで入力を破棄すれば次のフックは実行されない)
エレコム マウスアシスタント(原因?)
https://www.elecom.co.jp/support/download/peripheral/mouse/assistant/
> マウスを別メーカーにする→変わらない
> ドライバをメーカー製からwin標準のものに換える→変わらない
> USBポートを換える→変わらない
↑のアプリを終了させずに色々テストしたのでは?
終了しても駄目ならセーフモードで確認 >>131
原因がわかりました。
WizMouseというフォーカスされていないウィンドウでも
マウスでスクロール可能にする常駐ソフトが原因でした。
普段使っているPC(Win8.1)で症状が出て、別PC(Win10)で症状が出なかったのは、
Win10では標準でWizMouseと同じ機能が装備されているのでWizMouseをインストールしていなかったからでした。
(さらに、今調べたらWin8.1もレジストリの設定変更だけでWinMouseと同じ事が出来ました。)
以前WizMouseも疑って、WizMouseの機能を使っている時、AutoHotkeyの
Wheel関係のボタンの認識を見たら問題なかったので完全にWizMouseの線は除外していました。
しかし今回>>131さんの指摘を受けて、マウスフックを使っているソフトを探したところ、WizMouseぐらいしかなかったので
AutoHotkeyがボタンを認識しなくなったタイミングでWizMouseを終了させたところ、一発で認識が戻りました。
ありがとうございました。 フック奪い合いあるあるおつかれ
リダイレクトホイールは真っ先にahkで実装した機能の一つだわ StatusbarGettextって64bitアプリに対しては使えない?
厳密には共有メモリを介しての情報取得系だけど Tb_GetitemRectとか。
64bit版ahkで試して値が返らない >>134
64bit版AHKで64bitアプリのメモ帳のステータスバー取得できるから64bitとかは関係無いな
;メモ帳の行と列を表示
StatusBarGetText, OutputVar, 2, ahk_exe notepad.exe
MsgBox, %OutputVar%
Return
上手く行かないのは管理者権限とか個々のアプリの仕様とかが原因だろ タスクマネージャとかその他一部のウィンドウでホットキーが効かないことがあるのはなぜ?
例えばvk1D & k::Send, {Blind}{Down}をしてもk押下判定になっているみたい
当然、MGLのジェスチャーも無反応だし >>137
UACで弾かれてるんじゃね
スクリプトを管理者権限で実行しな 特定のソフトで、SHIFT押下時だけスクロールを左右キーにアサインする記述って出来ないでしょうか >>139
出来ますよ
まずはwikiのサンプルコード集でも見て勉強しましょう >>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}
では動きません ご教授いただける方いれば教えて頂きたいです >>141
{ArrowLeft} なんて無いから
wikiのキーリストをちゃんと見なさい Adobe Premiere Pro.exe のスペースはなんもくくらんで認識できるんだっけ?
ahk_classで見たほうが確実な気がするけど >>142-143
ありがとうございます
SetTitleMatchMode, 2
#IfWinActive, Adobe Premiere Pro
~Lshift & WheelUp::Send,{Left}
~Lshift & WheelDown::Send,{Right}
で行けました
ただ元々のスクロールも残って送信されるようで、Leftキーの移動と同時にスクロールもされてしまうのはしょうがないんですかね… >>144
他の記述が余計な邪魔してんじゃないか
~Lshift & WheelUp::Send,{Left}
~Lshift & WheelDown::Send,{Right}
少なくともこれだけのスクリプトなら試した限り元のスクロールは送信されてない
ちなみに余談だけど修飾キーはコンビネーションキーにする必要ない
+WheelUp:: でOK 新規タブでエクスプローラを開くコマンドって作れないですかね…。
特定のソフトが起動しているが前面に無い場合、そのソフトをアクティブにしてキーを送信…とするコマンドを作りたくて
IfWinActive explorer.exe
{
Send, ^t
return
}
IfWinExist Run explorer.exe
WinActivate
return
とかやってみたのですが出来ず、
MouseGestureL.ahkでトラックボールに割り当ててみようとしたけど出来ず… >IfWinExist Run explorer.exe
これ合ってるのか?
俺には全く意味分からんのだが
俺が知らないだけならスマン
explorer.exeはウィンドウ無くても常駐してるから
ahk_class で指定した方が良い気がするが
そもそもエクスプローラーのタブは俺も知らない
Setsとやらはどうやら頓挫したみたいだが>>147の環境ではCtrl+t使えてんの? >>147
ファイラーならたいていホットキー設定でできると思うけど、MSのエクスプローラじゃないとダメなの?
Tablacusのようなエクスプローラ互換ファイラーもあるし、なかなか便利だよ >>148
使用しているのはQTTabBarというタブ化ソフトです
>>149
そうですよね…そもそもExplorer.exeはずっといるので駄目ですかね
ahk_class explorer.exe でも動作しませんし、マイコンピュータを開く
Run "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
だとタブではなく新規ウィンドウで開いてしまうので…
やはり無理でしょうか >>151
ahk_classはちゃんとWindow Spyで確認しな
普通にActivateとかはできる
QTTabBarでCtrl+Tが使えてるなら当然Sendコマンドだって使えるだろう
「無理でしょうか」とか言い出す前にしっかりwiki見てウィンドウ指定の方法を勉強しな
色々と書き方を間違ってるだけだから >>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、
起動していなければ起動…という風にもしたいのですがそもそもアクティブ化すら動かない状態なので現状詰まっています
どこかミスが分かる方いればご教授お願いしたいです >>153
その4行のみのスクリプトで何も問題なく機能してるぞ
Winキー+Enter押すとエクスプローラーのウィンドウがあればアクティブになる
動かないとしたら他にも何か余計なもん書いてるんじゃね >>154
ありがとうございます 一旦全て消して打ち直した所無事に動くことが出来ました!
自分の様な使い方がしたい人は稀だと思いますが一応
#WinActivateForce
#n::
IfWinNotExist ahk_class CabinetWClass ;存在しない時
Run, explorer.exe ;エクスプローラを起動
else ;または
IfWinActive ahk_class CabinetWClass ;エクスプローラのクラスがある時
{
Send, ^t ;ショートカットを送信
return
}
IfWinExist ahk_class CabinetWClass ;裏にある時
WinActivate ;アクティブ
return
で動きたいように動いてくれました。スレ汚し失礼しました。 >>155
本当に「動きたいように動いてくれました。」何だろうか?
まあ本人が言うんだから間違いないんだろうけど(´・ω・`) IMEオフってIME_SET(0)じゃない?
wikiにも書いてないしtabに割り当てたいんだけど動かない >>157
それはahk使わなくてもIMEのプロパティでキー設定すればできるしそっちの方が確実
まあTabはそれ以外でも使うから不便になると思うがな
ちなみに余談だけど俺は英数キーをIMEオフに割りあててる >>158
普段はtabキー使うから、IMEオフが必要なソフトでのみtabをIMEオフにしたかったんだよね ahkならソフトでの指定が出来るから
IMEオフはIME_SET(0)でいいのかな >>159
そういうことなら
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。
なぜかテンプレなくなってるな IME.ahk入れていないのにIME_SET()関数使おうとしたんかよ
まあahk標準機能として用意されて欲しいとは思うけどね AHKの便利さを知っている人でも満足できるMac対応代替アプリ知りたい
おすすめありますか(別言語可) ALT+UでF7変換にしたく、LAlt&U::Send,{F7}と打ったのですが、
エラー:lnvalid hotkye が出ました。
どうすれば修正できますか? >>163
基本的に修飾キーは修飾シンボルを使った方がいい
どうしてもコンビネーションキーにしたいならサンプルよく見てスペース入れる >>164
*!U::Send,{F7}
と打ったら出来ました ありがとうございます。 >>155
win7の情報だけどQTTabBarはWindowsの仕様なのかahk_classが2種類存在する。
おそらくexplorerの起動方法によって変わると思われる。
ahk_class CabinetWClass
で反応しないときは
ahk_class ExploreWClass
Win10では2種類存在するか未確認だけど、スクリプトを未修正で使ってる ランダムに複数ファイルを選択状態にしたくてこのソフトを入れたのですが
可能でしょうか?単ファイル版のスクリプトしか見つかりませんでした 「右コントロールと下矢印キーの同時押し」で「PgDnの押下」を行いたいです。
RCtrl & Down::PgDn
という記述だとCtrlの押しっぱなしが検知されて、
実行結果が「Ctrl+PgDn」になってしまいます。
実行結果を「PgDn」だけにする方法はないでしょうか? すみませんフォーラムの方で見つかりました。お騒がせしました いつのまにかswitchがつかえるようになっていた へー
日本語版wikiの更新が止まってから全然追えてないから知らない機能めちゃくちゃありそう v1.1.33.00 がリリースされたが、.32まで問題なかったコードが
cound not locatedみたいなエラーでコンパイルできんくなった LinuxのOpenboxってウィンドウマネージャー使ってたらウィンドウ操作がすごく簡単で真似したくなったんですが、Win10で再現しようとしたら……orz
取り敢えずアクティブウィンドウの位置をウィンドウの中央座標と画面の中央座標が一致するように移動したいんですが、
座標の始点を画面左上から画面中央や画面右下などに自由に変更する方法ありませんか?
一応解像度からタスクバー分引いて数字出してWinMoveで数字決め打ちでなら出来たんですが、
A_ScreenWidthとか変数使うとうまくいかないところが出たりでよくわかりません……
ちなみに再現したいOpenboxの操作は↓な感じです
https://pastebin.com/bgAai2Dk
あとタイトルバー消したり出したりしたいんですが、これはahkで一から作ったウィンドウでないと出来ませんよね?
環境はWin10 Home x64 1909, AHK_U64 v1.1.32.00です。よろしくおねがいしますm(__)m 座標や幅/高さの計算が上手くできないなら、座標の始点を変えたところで意味無いと思うけど... >>177
例えば始点を右下(0,0)としたとき、左上がFHDなら(1920,1080)になるような……
まぁタスクバーが下にあるとしたら引くと1080にはなりませんが
openbox的には右端は<x> -0 </x>なわけですが、こういう指定ができるともっと楽ですね
計算ができないのは変数込の式の書き方がわかってないからかと……人のブログ見た限りでは
WinMove, A,, (A_ScreenWidth - ActiveWindowWidth)
これで画面右端に移動かと思ったら動かなかったです
WinMove, A,, (A_ScreenWidth/4), (A_ScreenHeight/4), (A_ScreenWidth/2), (A_ScreenHeight/2)
これで画面のW/2,H/2というサイズで画面中央に移動ができましたが >>178
左上が0,0で右下が1920,1080だろ?
あとどこのブログ見たのか知らんが変数は%で囲む >>179
囲む時と囲まない時の区別がついてないんですが簡単に言うとどんな時なんでしょうか? >>178
>始点を右下(0,0)としたとき、左上がFHDなら(1920,1080)になるような……
そういう関数作ればいいと思う
>WinMove, A,, (A_ScreenWidth - ActiveWindowWidth)
いきなり ActiveWindowWidth という未知の変数出てきたからエラー出て動かないんじゃないのか?
WinGetActiveStats, , ActiveWindowWidth とか WinGetPos, , , ActiveWindowWidth, , A で
アクティブウインドウの幅取得すれば動くと思う
式の場合は%付けない、文字列の場合は%付けるんだっけ?未だによく間違える(´・ω・`) >>181
レスどもです
関数……なんだろう……
あと未知の変数ですが実際はその上の行でWinGetPosして定義してあるものです、後出しですみません……
^+!h::
WinGetPos, ActWinX, ActWinY, ActWinW, ActWinH
WinMove, A,, 0, %ActWinY%
return
^+!j::
WinGetPos, ActWinX, ActWinY, ActWinW, ActWinH
WinMove, A,,, (A_ScreenHeight - ActWinH)
return
これで^+!hで左端に移動しますが、^+!jでは下端に行きそうですが何も起こりません
パスをコピペしてからエクスプローラーで開く時はこれ↓なのは知ってるんですが
Run, explorer.exe "%Clipboard%"
あとRegExReplace(Clipboard, "foo","bai") >>183
あれ三行でまとまりませんか?……orz
難しいので他のウィンドウ操作系ソフト使おうかと思っても無いんですよね、これというのが…… >>182
^+!j::
WinGetPos, ActWinX, ActWinY, ActWinW, ActWinH, A
WinMove, A,,, % A_ScreenHeight - ActWinH
Return
式の場合はこう
あとWinGetPosはタイトル入れてないから>>182だとそもそも位置とサイズ取得すら出来てない
msgboxとかを使ってちゃんと一つずつ動作確認する癖付けた方がいい
それと質問するときは最初からそのスクリプト貼れ
小出しにするから無駄に長引く こんな糞ゴミ質問者に丁寧に接してくださってありがとうございます
ほんとに、リファレンスは"ちゃんと"読まないといけませんね……
も少しマシな質問出来るようになってから出直してきます、ありがとうございましたm(__)m a.ahkに ^t::msgbox
b.ahkに send,^t
とやっても上手くいきません
やり方間違ってますか? >>188
何が上手く行かないのか知らんが”それのみ”のスクリプトなら
a.ahkを常駐させておいてb.ahk実行すりゃmsgbox表示されるぞ
https://i.imgur.com/TiZycOG.jpg >>189
そこに問題があると思って他を省いてしまいました
#ifwinactiveの記述を消したらちゃんと動作しました
すみません 動作に関することではないですけど
いつの間にか、アイコンがくっきりしたのとボヤっとしたのに原因なんでしょうかねこれ
https://imgur.com/pLyH7uf >>191
ディスプレイ解像度が変わったりするとそうなる
AHK関係無くOSの問題 そうなんですが、ありがとうございます
そして意味不明な日本語でしたねすみません 範囲選択してスクリーンショットするアプリを使用しています。
左クリックのドラッグで範囲選択をします。
実現したいことは、「トリガー押下→範囲選択モードに移行(アプリ側でPrscに当てています)
→隣のモニタにカーソルを移動→範囲選択が終わり次第、トリガー押下時の座標にカーソルを戻す」
です
今回の質問は、下記スクリプト内の「条件式」のアイデアについてです。
試したことは、
・KeyWaitでLButtonのDownとUpを検出→LButtonの判定がKeyWaitに吸収されて範囲選択できない
・WhileとGetKeyStateの入れ子をうまいこと組み合わせる→よくわからないけど失敗
範囲選択モードになったことを示すものはないとして、マウスの挙動、つまり「ドラッグ選択が終わった」ことを認識できるような
条件式のアイデアを頂ければと存じます。
Send, {PrintScreen}
;初期座標記録&隣のモニタにカーソル移動
MouseGetPos, oldMouseX, oldMouseY
MouseMove, (oldMouseX < 0 ? A_ScreenWidth : -A_ScreenWidth), 0, 0, R
;範囲選択が終わるまで待機
While (1) {
;条件式
break
}
;元の座標に戻る
MouseMove, oldMouseX, oldMouseY, 0 説明が分かりにくいんだけど
・トリガー押下→範囲選択モードに移行→隣のモニタにカーソルを移動
トリガーが何なのか分からんがひとまずここまでが一つの動作で、範囲選択自体は手動でマウス動かしてやるんだよな?
そして左ドラッグを離したら「トリガー押下時の座標に自動的にカーソルを戻す」ってことでしょ?
それならトリガー押下したら上記の操作してフラグを Flag=1 とか適当な変数付けといてReturn
~LButton up:: でFlag=1の場合は元の座標に戻ってFlag=0にリセットする
Flag=0の場合(範囲選択モードじゃない時)ならReturnして普通に左ボタン離すだけ
みたいなやり方はどうよ?
待機とかするよりもシンプルだと思うが > ・WhileとGetKeyStateの入れ子をうまいこと組み合わせる→よくわからないけど失敗
その失敗したコード部分を貼らないと
まあループで待つより Hotkey,~LbuttonやSettimer仕掛けて一旦抜けて
フェイズ処理の方が動作の確実性は上がると思う
1シーケンスで終わらないから一見すると面倒に見えるかもだが急がば廻れ
> 範囲選択モードになったことを示すものはないとして
ImageSearchは検討してみた?
なんのアプリ使ってんだが分からんが操作する人間が視覚的に判るような範囲選択オブジェクトは描画されてるわけでしょ
ドラッグ開始の「 部分が透明度低ければピクセル一致で引っ掛けられるかも https://kostrivia.com/5592.html
上のサイトを参考にwindowsのIMEの設定で無変換キーをIMEオフ、変換キーをIMEオンにしてるんだけど、その場合キー名はそれぞれ何になるんだろう?
http://ahkwiki.net/KeyList#Key_ZenHan
見ても載ってなかった >>198
無変換
vk1d
か
sc07B
は試した?
わからんときは、そのURLの「上記以外のキー」ってとこに取得法書いてる >>198
昔のバージョンでは無変換キーは vk1Dsc07B で指定してた
今は無変換キーは vk1D または sc07B のどちらかで指定する仕様に変わった
変換キーや他のキーコードも同じ様に変わった
AHKの仕様が変わってからもうだいぶ経つしwikiのキーリストのページだけでも直した方がいいと思うけど
警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。 必要であれば文章をコピー&ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。
データベースをロックした管理者による説明は以下の通りです: ただいまメンテナンス/大規模更新に向けてのローカル作業中です。
これって今だけ?しばらくしたら誰でも編集できるようになるんかね? wikiもJPももう数年単位で放置されてるからなあ
新しい情報に更新したいならいっそwikiを新しく作った方がいい気がする タスクマネージャーとか、デバイスマネージャーみたいなwindowsの画面?だとautohotkey効かないのって何故?
マウス移動をキーボードでしてるから、これらの画面でも効くようにしたいのだけれど、無理なのだろうか >>202
すまん、>>137に同様の質問あったわ
管理者実行したら解決した
失礼しますた ありがとう、auto hot keyを設定できたけど、今度はIMEのキー設定のほうが無効化されてる。。。 何やりたいのか知らんけど
キー奪いたくないなら ~ 付ければ >>194です
みなさんありがとうございます。
一応解決していたのですがスレに書き込めず断念しました。
以下は「WhileとGetKeyStateの入れ子でうまいことやる」方式ですが、あまりスマートではない気がしますので、
LButtonのホットキーやSetTimerも試してみようと思います。
以下条件式の部分
https://pastebin.pl/view/66a0f0bb Win10の通知を検知する方法ってないですかね?
Window Spyで見ると
新しい通知
ahk_class Windows.UI.Core.CoreWindow
ahk_exe ShellExperienceHost.exe
と表示されてるけど、通常のアプリケーションウィンドウではないため
WinWait, 新しい通知
などでは検知できませんでした
何かスマートな方法ありませんか? 無変換キー+aで0
無変換キー+sで2
(中略)
無変換キー+;で9
という風にしたいのですが、
sc07B & a::Send,{0}
sc07B & s::Send,{1}
(中略)
sc07B & vkBBsc027::Send,{9}
という風に記述した所上手く行きませんでした。
(vk1Dも試しました)
何が原因で上手く行かないのでしょうか?
また、出来れば無変換キーを誤動作しないように、仮想キーに置き換えたいのですが、
sc07B ::vkXXのXXは適当な三桁くらいの数字でも動作するものなのでしょうか? >>209
キー指定に全角が混ざってるからだろ
あとセミコロンも仮想キーコードとスキャンコード両方並べてるし >>210
ありがとうございます、おかげで置き換え以外上手く行きました >>211
間違ってたらスマン、無変換キー単独で押しても何も起こらないようにしたいなら
sc07B ::return
だと思うけど、殺してしまうの何かもったいないような 誤動作させたくなかったらIMEのプロパで無変換キーの割り当て全て無しにしとけばいいだけでしょ >>212
>>213
すみません、私の書き方が悪かったです。
私がしたいのは、無変換をキーキーボード上には割り当てられていない
第二のaltキー的な新たなキーにしたいのです。 タスクトレイにあるアイコンを操作したくて
http://lukewarm.s101.xrea.com/myscripts/
にある 「タスクトレイアイコン操作」 スクリプトの中にある 使用例(既に起動しているAutoHotkeyのトレイアイコンを(全て)ダブルクリックする)
を実行してみたのですが何も起こりません。
なぜでしょうか?
スクリプトは以下です。
https://pastebin.com/zpFL2BA0
Tray_GetInfo(idx,ByRef hwnd,ByRef uid,ByRef msg,ByRef hicon)
のByRefと言うのがよくわからないのですが、この関数を実行すると ByRef hwnd
の位置にある実引数に自動で値が入るのでしょうか?
最後にあるLoopの中に、
msgbox, %hwnd%
を書いても全て 0 と表示されます。 >>214
だからIMEで機能割り当て無くしとけば無変換キー自体は単独では何の機能も持たない
第二のaltキーのように修飾キーとして使える
IME以外にデフォルトで無変換キーに機能割り当てしてるソフトなんてまず無いし
逆にそれでなにが不都合あると言うんだ >>216
すみません、私が理解出来てませんでした。
ありがとうございます。 >>215
ByRef は 渡した変数の内容が変更される可能性があるという認識はあっている
hwndが0になるのは、たぶん Tray_GetInfo( ) の中で
SendMessage,0x417,% idx-1,%lpTB%,ToolbarWindow321,ahk_class Shell_TrayWnd
(0x417 は TB_GETBUTTON)
に失敗しているからだと思う
その直後でErrorLevelを見るとエラーになっていると思う
回避法はわからない
管理者権限では回避できなかった
具体的にどういう操作をしたいのかによって別のやり方もあると思う >>218
回答ありがとうございます。
このスクリプトの更新日を見たら2006年とかなり古いのでwindowsの仕様が変わって
動かないのですかね?
やりたいことはタスクトレイアイコンをクリックしたいだけなのでmouseclickを使っていたのですが、
検索すると>>215にあるスクリプトが出てきたので試してみた次第です。 win仕様もahk仕様も変わってるから難しいと思う
ANSI版(ahk basic)でやってみて動けばラッキー >>219
そのスクリプトのことは知らないけど
Win10でトレイアイコンを操作したいならWin+Bでトレイアイコンにカーソルが行く
矢印キーで選ぶかアプリケーションの頭文字のキー(AHKアイコンならA)で選択して
Enterまたはメニュー出したいときはAppsKey
これらを組み合わせればSendだけで大体の操作できる >>221
Win+Bでタスクトレイにフォーカスが行くのは知りませんでした。
ありがとうございます。 >>222
比較的新しいショートカットだからね
俺も昔はトレイアイコンの画像保存しといてImageSearchでMouseMoveとかしてたけど みんなエディタ何使ってるの?
AHK studio、日本語入力できないとかなんだコレ、、、 下のコードで、a.ini内のパスを相対パスにする方法ゆる募
.\\とか%A_ScriptDir%\scripts\a.batとかは一応ひと通り試したけどだめだった
[test.ahk]
IniRead, val, %A_ScriptDir%\script\a.ini, section, key
If (val != "ERROR") {
Run, %val%
}
[a.ini]
key=C:\AutoHotkey\script\a.bat %A_ScriptDir%\scripts\a.bat
iniread後に
Transform, runpath, Deref, % val
https://www.autohotkey.com/docs/commands/Transform.htm#Deref
.\scripts\a.bat
AttributeString := FileExist(val)
https://www.autohotkey.com/docs/commands/FileExist.htm
スマホからなんで実際には試してない
コピペで動かなかったらすまん 特定のアプリだけミュートにできねえかなぁ
nircmd使う方法しかでてこないけど、オンゲやるとチート対策ソフトに弾かれる可能性あるから使いたくないし >>229
アプリ単位で良いなら、タスクトレイのボリュームアイコンを右クリックして「音量ミキサー」を開けばできるよ
「ファイル名を指定して実行」からsndvol.exeを実行してもOK
スタートメニューから「アプリの音量」で検索すると「サウンドミキサーのオプション」が出てくるから、そっち(アプリの音量とデバイスの設定)でもできる >>230
だからそれをAHKなどで操作したいっつー話なんじゃねえの
知らんけど >>230
もちろん、それでできるけどahkもしくは他の方法でもいいけどショートカットキーでやりたくてね
フルスクリーンゲームやっててyoutubeで音楽聞いてると、いちいちChromeの音量切るの面倒くさいのよ >>232
RunコマンドでSndVol.exe開いて
WindowSpyで調べたミュートボタンをクリックして閉じるとかで良いんじゃないかな?
AutoHotkeyのインストールディレクトリにあるAU3_Spy.exeかWindowSpy.ahkを実行して、
ミュートボタンにカーソルあわせると「classNN」が分かるよ(ToolbarWindow324みたいなやつ)
※WindowSpy.ahkだと、Follow Mouseにチェックつけないとダメかも
なんかコード書いたら書き込めない...(´・ω・`) >>232
https://pastebin.com/h5jg9UNA
こんな感じのを適当なショートカットキーで実行するとか
でも、フルスクリーンのゲームやってる時に音量ミキサー開いたら、フルスクリーンが解除されちゃったりするかな? × AttributeString := FileExist(val)
AttributeとAbsoluteカン違いしてたわすまん
絶対パス取得はfile-loopでA_LoopFileLongPathじゃないと取れないか
というかini内の記述を絶対パスにしたくない(相対記述→絶対パス)って意図だと捉えてたけど
iniは絶対パス記述でAHKで省きたい(絶対→相対)って意味だったらすまん >>233,>>235
レスありがとう、時間あるときちょっと試してみるわ >>236
ありがとう
スクリプトフォルダ内の複数のbatファイルから選択してRunするために、
データはIniファイルに突っ込んでて、
メイン環境なら絶対パスでいいけどUSBやらなんやらで持ち出したときに
動作しないから%A_ScriptDir%のノリでIniファイルに記述したいなと >>238
データは、というかBatファイルのパスをIniファイルに記述してる
bat1 = C:\AutoHotkey\script\1.bat
みたいな
それをAHKからReadしてRunさせてる 変数展開したいならTransform Derefだが
起点が決まってるなら相対のままworkingdir指定でもいい気がするけどね
Run, %val%, %A_ScriptDir% ウィンドウが呼び出したダイアログがアクティブになった事を確認したいんですがうまくいきません
ダイアログの場合って別のやり方が必要なんですかね?
#IfWinActive ahk_exe chrome.exe
~^s::
WinWaitActive, ahk_exe chrome.exe,"名前を付けて保存", 2
if(ErrorLevel == 0){
MsgBox, "OK"
}else{
MsgBox, "NG"
} >>241
「名前を付けて保存」はウィンドウタイトル
あと "" は要らない
最後にReturnする >>242
うまくいきました、ありがとうございます AutoHotkey.ahk − a.ahk
|
− b.ahk
[a.ahk]
a::Gui生成
GuiClose:終了処理
[b.ahk]
b::Gui生成
こんな感じの構成でそれぞれのGuiが別物の場合、bの方のGuiCloseを書くにはどうしたら?
2GuiCloseとかは2つGuiがShowされていたらの話だと思っていて、実際に動作しなかった。 自作DLL(別プロジェクトで動作確認は取れている)をDllCallすると
ErrorLevel -3で失敗してしまうんですが、
なぜ失敗するかの具体的な特定方法ってないですかね?
一応、A_WorkingDir的にDLLは見えているはずなんですけど
もしくはahkスクリプトからluaを実行して結果を取れると解決するんですけど >>247
> ErrorLevel -3
これが具体的な失敗理由ですが?
A_WorkingDirをMsgBoxなどで確認しましたか?
bitの違いは?
・DLLがシステムディレクトリかA_WorkingDir(SetWorkingDirで変更可能)にある
・AHKとDLLの 32bit 64bit の違い >>247
一応公式も置いとくね
https://www.autohotkey.com/docs/commands/DllCall.htm#error
DLLにアクセスできないってエラーだから、32bit/64bit確認、権限のチェック、あとは絶対パスで指定してみては? フックについて理解ができないので質問します。(非エンジニア)
通常はスクリプト読み込み時に、OS標準のAPI経由でOS側にホットキーを登録し、
キー入力時はOS側がAHKから渡されたキーであれば、AHKに処理を回す。
フック使用時は、AHKがそのキーが入力されるかを常に監視して、入力された場合、
その入力をOS側から遮断(横取り)して、直接スクリプトを実行する。(OS側は入力されたことに気づかない)
監視している分メモリの使用量が増加するが、動作は若干高速化する。
このようなイメージでよいでしょうか?
フック仕様のデメリットは、メモリ使用量以外ありますか?
また、以下の認識はあっていますか?
UseHook = InstallKeybdHook + InstallMouseHook もう一つ質問です。
若干意味も理解せず、以下の記述をスクリプトの頭につけています。
皆さんは、どのような理由で、どのように記述していますか?
#Persistent
#NoEnv
#UseHook
SendMode, Input
SetWorkingDir %A_ScriptDir%\scripts
SetTitleMatchMode, 2
#MaxHotkeysPerInterval 100 >>251
まず一通りwikiでコマンドの意味調べりゃ良いんじゃないかな >>252
それは当然調査済みですが、ちゃんとはわかってません。
おそらく追加したほうが良さそうな雰囲気なので入れてます。
ただ理解は曖昧なので、参考のため皆さんの設定を知りたいなと思いまして >>253
こっちだってwiki読んで理解してるだけだからそこに書いてある以上のことは知らん
そもそもなんでwikiを読んで分からないのかがこっちには分からないし
例えば #Persistent なら「スクリプトを常駐状態にする。」ってwikiに書いてあるしそのまんまの機能
これ読んで分からないって余程日本語理解力に問題あるんじゃないかと
「当然調査済み」とか言い張ってるが本当に読んでるのかよ ちゃんと理解しないで「なんとなく」とか「記述した方が良さそうだ」とか闇雲に記述するのはどうかと思う
例えば、常駐させる必要ない自動化スクリプトに#Persistent(#NoTrayIconも)なんて記述するのはアホの極みだ >>255
常駐させる必要ないスクリプトこそ一時的にアイコン表示されるのウザいから
必ず#NoTrayIconを記述してますが何か?
闇雲に記述するのはどうかと思うのは同意 >>255訂正…後出しだけど
X(#NoTrayIconも)
○(に加えて#NoTrayIconも)
誤解を招く舌足らずな表現でスマンかった 読解力に問題があるって言ってもなぁ
じゃあ日本語ならどんな分野のどんな難しい文章もわかるのか?って話になるからな。
例えば、具体的によりくだけた表現に翻訳するには知識が必要となるわけで
知識差は読解力と違うし、同じ日本語でも何言っているかわかんないってことは大いにありえるから
253の気持ちはわかるし、そんな批判するようなことでもないように感じるけどな 「スクリプトを常駐状態にする。」ってこんな簡単な文章がなぜ理解できないのかって話なのに
なんでそこから日本語ならどんな分野のどんな難しい文章もわかるのか?って話に飛んでんのかな?
その発想自体が日本語の理解力足りないってことじゃねえの ん〜だから、知識によって理解が変わるってことを大袈裟に言っているだけで
252 とか 254みたいな批判めいた内容言うこともないだろって話。
#Persistentがどうのとか中身は興味ないから >>260
つまり「常駐」って言葉の意味が分からないとかか?
だったらそういう質問の仕方をしないと相手に伝わる訳もないよな?
そもそも「常駐」の意味だって調べりゃ良いだけだし
ろくに調べもせずに丸投げ質問しておいて、挙句「当然調査済み」とか言ってる馬鹿は批判されて当然のこと >>260
それと>>252のどこが批判めいてるんだ?
どう見てもごく普通のアドバイスだろ
それに対して>>253みたいなこと言えばそりゃ批判されるわ 理解力じゃなくて尋ね方の問題でしょ
このスレは横着者に厳しいので漫然とした聞き方でお薦めを得ようとしてもだめ
理解が及んでないと思う箇所をピンポイントで掘り下げて聞いた方がいいよ 要するにこれ
教えて君五大要素
1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない >>251です
質問の範囲が曖昧でしたね。では、特に以下のことについてお聞きします。
・>>250
・その他、皆さんの設定(常駐スクリプト)
#UsehookやSendMode, Inputが理解できていませんが、これは共にフックが関係しているためです。
フックについての理解が>>250で正しければ、それで解決します。
それから、よければ皆さんの常駐スクリプトの頭を見たいなと。 フック使用時は SetWindowsHookEx でフックチェーンにコールバック関数が登録され、
何らかのキーが入力されたとき、登録されたコールバック関数が呼ばれます
なので'OS側は入力されたことに気づかない'は誤りです
>また、以下の認識はあっていますか?
>UseHook = InstallKeybdHook + InstallMouseHook
あっていません
#UseHook, On
F5::
MsgBox % A_PriorKey ; A_PriorKey を使用するにはフックが必要
Return
これを実行すると、キーボードの履歴は取得できますが、マウスの履歴は取得出来ません
#InstallMouseHook をコードに加えるとマウスの履歴も取得出来ます テンキーでホットストリングを使用したいのですが
どのように指定したらよいのかわかりません。
「-」を2回押して「〇〇○○」の文字入力
:*?Z:--::
Clipboard = ○○○○
Send, ^v
Return
上記で一応やりたいことは出来るのですが
「-」2回入力を「NumpadSub」にしたいのですが
:*?Z:{NumpadSub 2}::
:*?Z:{NumpadSub}{NumpadSub}::
としてもうまく機能しません。
教えていただけると助かります。 >>267
ホットストリングは入力された文字を置き換えるだけだから
テンキーだろうがそうじゃなかろうが - は同じ文字なのでテンキーか否かの区別は無い
テンキーの - のみ置き換えたいならホットキーで2回押し判定するこったな >>267
サンプルコード集 - AutoHotkey Wiki
http://ahkwiki.net/SampleCodes
ここの「1つのキーに3種類以上の動作割り当て」を使うといい
余談だけど、自分はよく使う機能なんで関数にしている
んで、「Switch」が使えると最近知ってスクリプトを書き換えたが同じ変数の羅列が無くなってスッキリするね >>269
外野ですがPastebinしてもらえるとすごい助かります >>268
>>269
参考になりました!長押しいいですね!
早速使います! ホイールスクロールを左右キー(←→)に割り当てているのですが、元々のスクロールも残っているようで、左右キーと同時にスクロールもしてしまいます。
1秒間に何十回も行う動作なのでこういった挙動になってしまうのでしょうか?なんとか割り当てた左右キーを動作させている時は元々のスクロールは動かないように出来ないでしょうか?
宜しくお願い致します。 ~Left:: とかにしてなけりゃ普通は抑制されるはずだけど?
キーリピート殺さないとホイールがチャタってるみたいな状態にはなるかも知れんが
よくあるのが関係ない部分でreturn入れてて挙動不審になってるやつ
最小コードで動作検証してみて
それでも動かないならコード貼って再質問どうぞ >>272
すり抜け対策なら
SetKeyDelayのPressDurationを10〜50msくらいに設定 >>274
すいませんまさに~Left::です これだとスクロールが出ちゃうんでしょうか?
~Lshift & WheelUp::Send,{Left}
~Lshift & WheelDown::Send,{Right} >>276
当たり前だろ・・・
基本中の基本くらいちゃんと調べろよ ああLeftにホイール割当じゃなくてホイールにLeft割り当てなのか
~についてはヘルプをよく読もう
まあ理解したところでコンビネーション使う限りは避けられないだろうけど
~Lshift::からのInputコマンドか
#if getkeystat("Lshift") からの WheelUp::Left あたりかね >>278
コンビネーションとかgetkeystatとか使わずに修飾キー使えばいいだけだろ
このレベルだとどうせ修飾キーの記号すら分かってないだけだろうし Alt+Sキーを押している間、中央ボタンを押している状態にしたいのですが上手く機能しません。
!s::
MouseClick,MIDDLE
や
!s::MButton
や
!s::
Send,{MButton}
を試したのですが動きません
ご教授お願いしたいです。 ・キーリピート対策
・2行以上にまたがるホットキーラベルはreturnが必要
あたり? >>281
alt使ってるせいでMButtonの挙動が変わるな
そういうの面倒なときは無変換キーなどを修飾替わりに使った方がいい >>284
altキー以外ならいけるようになるものなんでしょうか?
winキーで試したところ駄目でした
ctrlはctrl+sと競合してしまいますし… >>285
修飾キーはやめとけってこと
無変換と言ってるのになんで言われたこと試さないんだ AutoHotkeyを使うなら英語キーボードへのこだわりを捨てた方が幸せになれるよ。 >>285
Alt+Sも気づいていないだけで、何かと被ってない?
メニューバーにファイル(F)、編集(E)とかってある中に(S)使ってるのが、いくつかあると思うよ >>286
USキーボードなので無変換キーがありませんので… Mbuttonで試せるものを思いつかなかったので
LButtonでテスト
マウスをスクロールバーの三角矢印に置いて
sとdを同時押しでスクロール
これはうまく動いた
https://pastebin.com/hGTxhZC6 メモ
管理者権限のウインドウを動かすための最新パッチを落としたら動かなかったので保存してあった旧パッチをネットにバックアップしておく
これでタスクマネージャも動かせる
https://www.axfc.net/u/4025809.zip altとwasdキーで矢印キーの役割を持たせたくて!w::Upみたいに書くとaltキーが入力されたままになって結果的にaltと矢印キーの状態になっちゃうんですけどこれの対処法みたいな物はありますか? >>293
リマップを使わずにSendを使いな
実際にリマップがどのような動作するのかwikiをよく読んで
リマップはホットキーに変換される 実行ファイル名だけでRunできるかどうかを確かめる方法って
PATHに含まれるパスの1つずつに実行ファイル名を付け足してFileExistで確認するしかないですかね?
もうちょっとスマートな方法ないかなと てか、なんで直接Runで確かめたら駄目なんだ
パスが通ってれば実行できるし、そうでなければ実行できない
フルパスを知る意味はあるのか? RunWaitで実行して、ErrorLevel判定でだめなん? >>281ですが、やはりUSキーでは特定のキーを押している時に中央ボタンを教えている状態にする…というのは厳しいものでしょうか?
>>283も試し、>>290さんのものもそのまま使ってみたのですが駄目でした(SとD同時押しで左クリック) >>299
修飾キー使うのがダメなんだから無変換が無いならAppsKeyとかを修飾替わりにすれば
とにかく修飾キーを使わない方法自分の環境の中で考えろよ まずホットキー割り当て関係なしに Send,{MButton} は動作した?
とりあえずF1あたりに割り付けて試してみては?
あとさ押してる間中って,{MButton down} {Mbutton up} は考慮せんでいいの?
>281や>290ではキー押してる間 MButtonカチカチ押し直してることになるけど >>301
今
F12::
Send,{MButton}
Return
で試してみたのですがそもそも中央クリックとして反応しませんね…。
MButtonでは駄目なんですかね 調べてみます >>302
だからdownとupをちゃんと書けって
F12押したら押してる間はMbuttonも押したままにしたいんだろ?
そしてF12離したらMbuttonも離す
そういう書き方しなよ そもそも何のソフトで検証してんだ
普通のユニバーサルスクロールなら
>>302のスクリプトでも動作するけど >>302
>反応しませんね
ってのは目視で言ってる?それともAutoHotkeyのログにも反映されてないってこと?
そのあたりが明確じゃないと。
ホイールクリックはされてるんじゃないの?と自分も思うけど
どうにかしたいのは何かのゲームなの? 全てのsendの後に300msの間隔を入れたいのですが 、sendkeyの間全てにディレイを入れるにはどうすればいいのでしょうか? 無変換を空打ちの時は無変換のままで他のキーと組み合わせた時にctrlキーになるみたいなスクリプトって作成可能ですか?vk1D & a::send, ^{a}みたいなのを永遠と続けていくしかないんですかね >>308
こんな感じで行けたけどどうでしょう
#If GetKeyState("sc07B","P")
a::
b::
c::
d::
MsgBox, %A_ThisHotkey%
return
#If >>309
無変換キーをctrlにしたいから6行目をsend,{Blind}^{%A_ThisHotkey%}に書き換えたんですけどshiftキーみたいな修飾キーを同時押しすると反応しません(ctrlとshiftとaをおしてもshiftとaになる)。どうすればいいのでしょうか? SetKeyDelay, は、自分が組んだマクロの前に入れておけばそのマクロだけ動いてくれるものでしょうか?
試した所適応されないのですが、この書き方だと間違っているでしょうか?
;;;googleearthのプロパティ変更
SetKeyDelay, 200
#IfWinActive ahk_class Qt5QWindowToolSaveBits
^n::
send,{Tab}
send,{Tab}
send,{Tab}
send,{Tab}
…以下略
send,{Tab}の間等、全ての間に少しだけ間隔が欲しいです。
SetKeyDelayの数値を20000などに上げてみても速度が変わらなかったので機能していないようなのですが、どこに記述すればいいものでしょうか?
ご教授頂ければと思います。お願いします。 >>311
全てのホットキーに適用したいならそのスクリプトの一番ド頭に書けばいい
余計なもん一切書かずに↓のみのスクリプト新規に作って実行してみ
SetKeyDelay, 1000
^n::
send,{Tab}
send,{Tab}
send,{Tab}
send,{Tab}
Return
ちなみに^nのみに適用したいなら ^n:: の次の行に書けばいい >>311
Auto-executeセクション
>>1で説明されてると思う 質問しといて回答貰ってもなんの返事もしない奴って
他人を利用することしか頭に無いんだろうなあ ウィンドウ切り替えのAlt+Tabを右クリック&ホイールスクロールに割り当てたいんだけど不可能かな?
Alt+tabを押した後、Altはドラッグしたままtabのみクリックをホイールに割り当てないといけないから無理かなさすがに… すいません alttabmenuを使うのが自分のやりたいことに1番合っているようでした >>315
それのために「AltTab」「ShiftAltTab」という専用コマンドが用意されてる
ただし右クリックと組み合わせるとコンビネーションキーの仕様で右ドラッグが出来なくなるなど
悪影響が出るので右クリック使うのはお勧めしない
サイドボタン+ホイール上下などと組み合わせた方が良い >>317
ありがとう!
それと、SHIFT+ホイールスクロールで水平スクロールが動かないんだけど
; Shift +ホイールで水平スクロール
+ WheelDown :: WheelRight
+ WheelUp :: WheelLeft
これで動くって書いてたけどitunesとかエクスプローラで試しても動かないんだよね…
どこが間違っているんだろう >>318
sendコマンドでやる方が良いんでない?
単純なsendで駄目なら他のモード試す
(´・ω・`).。oO(リマップは後々面倒なことになりそうだから個人的には使いたくないな…情弱なんで) >>318
WheelDownの前後に余計なスペース入れてるからエラー吐く
正しく書けば動くけどエクスプローラーはそもそもWheelLeft/WheelRightのAPIに対応してないので
AHK関係なくチルトホイール付きマウスとかでも水平スクロールは使えない
ソフトごとに対応は異なる
>>319
別にSend使わなくても普通に動く >>320
ありがとうございます。
そうだったんですねchromeでのスプレットシートやitunesでも水平スクロールが出来ないのですが、これは水平スクロールをする方法は無いのでしょうか? >>322
GoogleのスプレッドシートはAHK使わなくても元からShift+ホイール上下で横スク出来るだろ
itunesは使ってないから知らん
そもそも個々のアプリの仕様はそのアプリのスレで聞けよスレチ alt-ime-ahkというaltキーでIME変換できるスクリプトを使っていたのですが、
ALTキーがロックされてしまうバグで使い物になりません…。
他にalt単体でIME切り替えできるようにする方法はないでしょうか? alt-ime-ahkってそれなりに市民権得てるスプリクトだよね
初心者が単純にできることならわざわざ複雑にしたものが支持を得たりはしないのでは
あとこの手のものはおま環やOSやAutohotkey.exeのアプデによって問題が出てくることのほうが多い
調べもしないで簡単にバグとか言わない >>324
alt-ime-ahkとやらをググって試したけどロックなんてされないぞ
バグじゃなくてお前のOS設定とか他スクリプトの干渉とかの問題だろ Win+Eのホットキーでエクスプローラーがすでに開かれてる場合そのウィンドウをアクティブにして
そうでない時エクスプローラーを開くというスクリプトを作ろうとしたが挫折してる…
#e::
Process, Exist, explorer.exe
if ErrorLevel<>0
WinActivate, ahk_pid %ErrorLevel%
else
Run, "C:\Windows\explorer.exe"
Return
何かアドバイス等ありましたらご教授いただきたく存じます >>328
プロセスではなくウィンドウクラスで確認する
if WinExist("ahk_class CabinetWClass")
IfWinExist, ahk_class CabinetWClass >>328
329が先に答えたので補足になるけど
タスクマネージャーを見れば分かるがエクスプローラー窓を開いてない状態でも
Windows起動した時点でexplorer.exeはずっと常駐しているのでProcess, Existでは
常に「起動してる」という結果しか得られない >>329
>>330
ちょっと返信遅れちゃったけどアドバイス本当にありがとうございました!
エクスプローラーが常駐してるだなんて知らなかった… >>331
タスクマネージャーからエクスプローラ終了してみな?
Windowsへの理解が深まるよ 代替シェルやファイラーなどを使ってエクスプローラを使わない文化はまだ存在しているのだろうか ファイラーは普通にあるでしょ
今でもシェルまで変えられるかは知らんけど VistaをどうしようもないXPレペルのノートで使ってた頃は少し使ってた>代替シェル
結局当時良さげになってきてたUbuntu10.04に逃げた 裏で動いているitunesの曲の再生や停止を書きたかったのですが、
^!Space::Send {Media_Play_Pause}
のように書いても反応しません。
キーボードに付属しているメディアキーでも反応しないのですが、どこかに設定等があるのでしょうか >>336
そもそもキーボードで反応しないならAHKに関係無くiTunesがメディアキーに対応してないだけじゃね
もしくはキーボード側の設定の可能性もあるがそれもAHK関係無いからスレチ
WMPとかでまず試して動作確認すればいいじゃん
あとはメディアキー使わなくてもほとんどのプレイヤーがスペースキーでPlay/Pauseになってんだろうから
ControlSendでスペースキー送れば良いんじゃね >>337
そうですねすいません。
WMPでメディアキー使っても再生停止出来なかったのでソフトが対応してないのかと思います。ありがとうございます。 >>338
>WMPでメディアキー使っても再生停止出来なかったので
WMPでメディアキー使っても再生できないならソフト側のせいじゃないだろ
論理的な思考力ないのかよ
・If 「WMPではメディアキー反応するけどitunesでは反応しない」→itunesが対応してないだけ
・ElseIf 「WMPでもメディアキー反応しない」→メディアキー自体が何かしらの理由で機能してない
ちなみにWMPや俺が使ってるプレイヤーソフト(AIMP)では>>336のスクリプトも機能してる >>339
WMPがなんらかのせいで対応してない状態になってるっていうことですよ
メディアキーのサービス更新やchrome://flags/#hardware-media-key-handlingだとか色々触ってみたけど結局直らないんでもうソフト側の前でメディアキー死んでるってことなんですよね
ただどれだけ調べても同じような現象は無いし治る方法もないんでもう諦めます >>340
だからその「なんらかのせいで」というのはお前のPC環境の問題であって
他の人はお前のPCの状態なんて触ったことも無ければ知ったこっちゃないわけ
ましてAHKとはなんの関係も無い問題からスレチ
AHKでやるならControlSendでスペースキー送れば良いだけ いまのウィンドウからみて、タスクバー上で1つ隣のウィンドウをアクティブにする処理をしたいんだけど、
何かいい方法ありませんかね?
↓↓絶対もっとスマートな方法あると思うんだけど、思いつかぬ……
やりたいことは例えば、タスクバーの左から順に
(1)エクスプローラー、(2)Excel、(3)Firefox、(4)Google Chrome、(5)メモ帳
みたいに並んで起動しているときに、(前提として、タスクバーボタンを結合していないものとして)
2番目のExcelがアクティブになっている状態でスクリプトを実行したら、
3案目のFirefoxがアクティブになる感じ。
※元々Firefoxが最小化されているか、裏に回っているかに関わらず、タスクバーの該当アプリを押したときと同じ挙動で前面に来てほしい。
※Excelは単に裏に回るだけで、最小化されたりはしない。(これもタスクバーで別のウィンドウが選択されたときと同じ挙動)
【いま考えている方法】
まず、現在のアクティブウィンドウのIDを取得する。……(A)
Win+1など、Win+数字のショートカットで、タスクバーの該当番目にあるウィンドウがアクティブになることを利用して、
Win+1〜Win+9まで順番にSendして、(A)で取得したIDと同じウィンドウがアクティブになれば、
その次の番号のウィンドウがアクティブになったら処理を終了。
【たくさんの欠点】
・問答無用で左から順にアクティブ化するため、最小化していたウィンドウも通常サイズになってしまう。
・重なり順序も変わってしまう。
・処理に時間がかかる。(Ctrl+Tab的な感覚で行いたい)
・9つまでしか使えない。
どなたか良い手法をご存知でしたら教えてください。 >>342
長文すぎて流し読みしかしてないけど
Alt + Tab
Alt + Shift + Tab
絡めたらどう? タスクバーの順番なんて気にしたことすらないな
タスク切り替えはAltTabで何も不都合感じたこともない >>342
ttp://ux.getuploader.com/autohotkeyl/download/72/ >>343
>>344
Alt+Tabだと、アクティブ化した順に切り替えだから
直前のウィンドウならまだしも、4つ5つ前とかになるともう覚えてられないのよね。
タスクバー上の隣なら、常に見えているのでわかりやすいかなって思って。
>>345
ありがとう!
まだ私の環境では動かないのだけれど(ST_AccessibleObjectFromWindowが失敗してる?)、
説明を見るかぎりやりたいことはたぶんこれ。
もうすこしソース読んで頑張ってみる。 >>346
自分の環境(Win7 HP SP1 x64)では、動かなかったので省いたけど
ロダに修正版もあるのでそちらも試してみてください
ttp://ux.getuploader.com/autohotkeyl/search?q=SwitchTask.ahk >>347
まだ挙動がちょっと変だけど、教えてもらった修正版で動くようになったよ。
ありがとう。
ちなみに環境はWin10 Pro 64bit。
エクスプローラーならエクスプローラーだけ、
Google ChromeならGoogle Chromeだけというように、
複数立ち上がっている同一アプリの中でしか切り替わらなかったり、
切り替わる順番も、タスクバー上の隣ってわけじゃなくて今一つ安定しないものの、
やりたいことに少し近づいた気がする!
ソースいじって確認していくしかないか…… 自分はよく使うアプリを利用頻度順にPin留めしておいて、そのうち最初の3つを「Win+1〜3」でダイレクトに切り替えてる(他は素直に「Alt+Tab」で選択) 入力ボックスの作成でアドバイスお願いいたします
したいこと
入力補助用のメニューをコンボボックス上のキャレット位置に挿入
サンプルコード
ttp://pastebin.com/raw/neGABRrF キャレット位置の監視ならびにクリックすることで一応希望動作になりました
他にアイデアなどありましたら、引き続きお願いいたします
SetTimer, 500ms, 500
500ms:
X := A_CaretX ? A_CaretX : X
return
;ComboBox/キャレット位置
GuiControl, Focus, Edit?
MouseClick,, %X%, A_CaretY
Clipboard := "hoge"
Send ^v keywaitでキー指定せずどれかのキーが押されるまで待つっていうのはできませんか? 修飾キーではない3つのキーの組み合わせ(例えば変換キーと無変換キーとKキーみたいな組み合わせ)を使用したい場合はどのようなコマンドを使えばいいのでしょうか? >>354
コンビネーションキーとGetKeyStateの併用 無変換と左クリックでctrlと左クリックの動作にさせたいのですがどのようなスクリプトを書けばよいのでしょうか。
vk1D & LButton::
send,{CtrlDown}
MouseClick, LEFT
send,{CtrlUp}
Return
こういうスクリプトだとドラッグアンドドロップができないんですよね… >>357
MouseClickも押し下げと離すを分けて書いて
間にKeyWaitを入れてボタンを離したらクリックとCtrlをUpする send, {ctrl down}{Lbutton down}
keywait
send, {ctrl up}{Lbutton up} >>359
それだと正常に動作しない
keywait はキー指定しないとエラー吐くし
Sendも一つずつ書いて確実にLButton離した後にCtrl離すようにした方が良い
左クリック離したら{Lbutton up}、無変換離したら{ctrl up}をSendする すまん丸コピペ用ではなくkeywaitの部分は適切に設定してねというつもりだった 無変換キーにEnterキーを割り当てたくて
vk1D::Send {Enter down}{Enter up}
vk1D:Enter
とかを試してみたら、無変換キーを押すとEnterキーとして機能するんだけど
なぜか『�@�@�@』というテキストも同時に入力されるようになった
これは記載方法が何か間違ってるの? 自己解決しました
ATOKのキーカスタマイズと競合していたようです
無変換のキーアクションを全て無効にしたところ、問題なくEnterキーとして機能しました PhotoshopのShift + Alt + Lのハードミックスのショートカットを無効化することは可能でしょうか?
Photoshop上だけで入力がバグってshiftからaltを押すだけでレイヤーやブラシがハードミックスになって困っています。
Shift + Altの組み合わせは用途があるので無効化したくありません。
一方、ハードミックスのショートカットは不要なので消し去りたいです。
autohotkeyのスクリプトは書いてみましたが素人なので全く動作せず。。
どうか助けてください。
OSはwin10 home 64
Photoshopは2020ですが19、17でも同じでした。 >>365
たぶん何もかもダメだと思い消し去りました じゃ一からやり直して書いたもの貼りな
答え丸投げする場所じゃないから >>364
まずは、タスクトレイのAutoHotkeyのアイコンをダブルクリックして、Ctrl+Kでキー履歴を見る。
ShiftとAltを同時に押した瞬間に L が入力されているかどうかの確認。 >>364
そもそもAHK以前の問題でPhotoshopのキーショートカットを無意識に弄っただけじゃねえの
ショートカット無効にしたいならそれもPhotoshop側でやればいいじゃん
使ってないから知らんけどカスタマイズくらいできるんだろ
https://helpx.adobe.com/jp/photoshop/using/customizing-keyboard-shortcuts.html >>369
Shift+Alt+〇 だけは特別みたいよ >>367
申し訳有りません
+!l::return
こんなんしか私の理解では無理でした
>>368
ログの見方がわからず、理解ができませんでしたが、
他のちゃんと動作しているスクリプトと比べると、そもそも動作していないようでした。
サイト上で入力を確認できるものを使ってみたところ、Lは出力されていないようです。
あくまでPhotoshopだけのようです。もしPhotoshop上もLが出力されていないのだったら絶望的だと思うのですが。。
altからshiftを押してもPhotoshop上も問題なく、shiftからalt、または同時押しでショートカットが呼び出されるようです。
>>369
370の仰る通り、設定では変えられないショートカットです。 CCはもってないからわからんけど
サブスクリプションになる前のPhotoshop CS6では +!l::return で普通にキー殺せたよ
昔MSのMouse without BordersのグローバルホットキーがAHKで殺せなかったことならある
技術知識ない人間の妄想だがホットキー管理のレイヤー層みたいなので優先度が違ってるのかもしれんね 俺の、Photoshop CC 20.0.6 でも
+!l::return
で無効にできたぞ >>371
だからAHKでAlt Shift Lを無効にしても意味無いに決まってんじゃん
おま環のPhotoshopの問題なんだから根本的な問題の原因探れよって
これ以上は完全にスレチ すまん Shift+Alt+L がフックできないってことじゃなく Shift+Alt が フォトショ上で Shift+Alt+L として認識されるって話なのか
alt → shift の順で押せばOKなん?
したらこんな感じで Shift+Alt の挙動をブロックしたらいいんかね
sleepの時間は適当に調整して
https://pastebin.pl/view/3fadc078 altから先に押す癖を付けろ
今のところ、そんなアドバイスしかできんわ ごめん Loop { の行は
While (GetKeyState("Shift","P")) {
に差し替えで
https://pastebin.pl/view/f751a89e まぁ、タスクトレイを空っぽにするくらいの勢いで常駐ソフトを終わらせて実験かな 皆さん検証と意見ありがとうございます。
お騒がせして申し訳有りません。
原因が判明しました。
Photoshop上でaltを押すとメニューバーにフォーカスがいってしまうのを防ぐために入れたスクリプトが原因かと思います。
*~Alt::Send {Blind}{vk07}
コイツを停止したらならなくなりました。
しかしaltのシングル押しは乱用するのでメニューバーにフォーカスがいってしまうのは防ぎたいです。
どうすれば良いでしょうか? >>380
{vk07}って何?
Alt単押しを無効にしたいなら何も送らなきゃいいじゃん
チルダ付けてる意味あんの? >>380
photoshop autohotkey 単独alt無効
とかでググれば Photoshopがアクティブか否かでキーの割り当て変えたいなら #IfWin[Not]Active とか #If 〜 とか覚えた方が良い 自宅PCでChangeKeyでCapsLockとカタカナ/ひらがなキーをF13・F14にして、AutoHotkeyで機能を割り当てしてて
会社PCでも同様のキー配列にしたいけど、ChangeKeyは管理者権限が必要で会社PCでは導入できないんだよね
管理者権限なしでキー配列を変更するソフトかAutohotkeyのみでCapsLock類を変更する方法ってないかな?
ちなみに以下を試してみた、らCapsLockキーが押しっぱなしな判定をされて上手く機能しなかった
;CapsLockキーにCtrlキーの仕事をさせる
Capslock::Ctrl
sc03a::Ctrl 今気づいたけどマスクキーの推奨が、vk07からvkE8/vkFFに変更されてるね >>380
単独押しの無効化は、のどかやTAALTなどの外部アプリを試してみては >>380
単独のみを無効にしたいなら"*"はいらない
wikiのホットキーの修飾シンボルの項を読み直したほうがいい 本家wikiに書いてあるけど>>386がレスしているように
windows10 1909からvk07がreservedになっているらしいからついでに変えたほうがいいかも
忘れたころにゲームバーが突然開くようになって面倒な思いをするかもしれない >>386 >>389
無効にしたいなら何もSendしなきゃいいだけじゃないの 皆さんありがとうございます。
>>378のスクリプトを調整すると改善されました。
しかし私の交互に連打するようなキー操作では時折例のバグが出てしまいました。
私でも調整できるようなスクリプトを提供頂き本当にありがとうございます。
vk07は no mappingを意味するらしいです。
vkE8やvkFFに置き換えてみましたが、例のバグは出てしまいました。
altのみを押してPhotoshopの表示と設定を切り替える機能があり、1日何百回も押します。
単独押し無効化をしてもこれは使えるのですが、0.1〜0.5秒程のラグができるので避けていました。
しかしバグよりもマシなので単独押し無効化しラグを容認しようと思います。
外部アプリを試してラグがなかったら、そちらに変更しようと思います。
皆さん本当にありがとうございました。 >>385
>18
OSに起因してる問題なので他のアプリでも無理と思う
英語版Windowsならワンチャン
keystate取れなくてリピート発生してるならタイムアウト張れるかなと試してみたが
Caps+A とか他のキーと同時押しした後はリピートも発生しなくなるから無理やった
*sc03a::
SetTimer,caps_timout,600
Send,{CtrlDown}
return
caps_timout:
Send,{CtrlUp}
SetTimer,caps_timout,OFF
return >>390
LAlt::return
RAlt::return ってことかな?
これだと、他のホットキー(Alt+Dなど)も無効になってしまいよろしくないので
~LAlt::Send {Blind}{vkE8}
のようにDownとUpの間に特定のキーを挟むことでAltならメニューモードへの移行を抑止しているわけ
このような動作は、外部アプリも同様のことをしていますよ >>393
Alt::Return
で単独押しはメニューバーにフォーカスしない
複数キー押しは使える
質問者もメニューバーにフォーカスするのを防ぎたいだけだろ?
何か問題あるの? > Alt::Return
> で単独押しはメニューバーにフォーカスしない
> 複数キー押しは使える
で、同様の動作をしないのはおま環かな
Win7 HP SP1 x64
1.1.33.02 >>395
Win10 1909
AHK U64 1.1.31.00
てか未だにWin7なんて使ってんのかよ
セキュリティ穴だらけのサポート切れてるOSなんか使うなよ ID:I8YcnkKO0 さんへ
OS違いのおま環みたいですね。ご無礼しました。<(_ _*)> >>398
OSも関係ない気がするけどな
L R 指定しなけりゃAlt::ReturnでAlt+Tabなどは普通に使える 確かに右Altだけ元の機能を残そうとか思わなければ、Alt::Returnでいけるね
Photoshopだけのスクリプトにすればこれで良いよね ATOKで無変換キーを押したときに日本語入力OFF、AutoHotkeyで以下のように記載して
『無変換+2』で F2になるように設定してるんだけど、
『無変換+2』でファイル名を変更使用とすると、必ず日本語入力がOFFになる
多分『無変換+2』を入力する際に、先に無変換キーが押された判定になってると思うんだけど
AutoHotkeyの記載方法を変えて回避する方法ってあれば教えて
vk1D & 2::Send,{Blind}{F2} ahk側の問題じゃないのでATOKの設定を変えない限り無理じゃね
IME OFFごとahkでやってしまうことは可能
・ATOKで無変換の設定を外す
・>160のIME.ahkを入れる
vk1D::IME_SET(0) >>401
>多分『無変換+2』を入力する際に、先に無変換キーが押された判定になってると思うんだけど
まず「多分」とか言う前にちゃんと検証してから書き込めよ
その1行のスクリプトのみを動作させる分には「先に無変換キーが押された判定」なんてならんし
それで「先に無変換キーが押された判定」されてるとしたら他に余計な邪魔してる記述があるんじゃねえの
そもそも「ATOKで無変換キーを押したときに日本語入力OFF」というのはAHKでやってるのか、
それともATOK側のキー設定でやってるのか
もし前者ならそれが邪魔してる可能性大だから後者の方法に変えればいいし
ATOK使ってないけどIMEですら出来るんだからATOKでもキー設定くらい出来るだろ >>402,>>403
IME.ahkを調べてみます
>>404
無変換キーを押したときに日本語入力OFFはATOK側のキー設定を利用
vk1D & 2::Send,{Blind}{F2} のみ記載した『テスト.ahk』でも同じ症状になるから、余計な記述が原因ではないはず >>405
じゃあ権限の問題ですり抜けてんじゃね
そのスクリプトを管理者顕現で実行してる? すり抜けもなにも単体押し動作についてはコード記述してないし
ATOK側で 他キーとの同時押し を考慮せず押したら必ず発火するようになってるだけでしょ
本来モデファイヤキーではないんだからある意味当然の動作 >>407
コンビネーションキー書いたら普通は一つ目のキーは乗っ取られるぞ
例えば
Space & 1:: Send,0
としたらチルダを付けない限りSpaceは乗っ取られるから単独押しでSpaceとして使えなくなる
Space::Space
を付け加えるとSpaceも使えるようになる(この場合はSpace単独押しはキー離した時点で送信)
無変換キーにしても普通は同じ
本来乗っ取られるはずのものが乗っ取れてないということはすり抜けてるということ なので管理者権限で実行して正常に無変換キーを乗っ取れれば
vk1D & 2::Send,{Blind}{F2}
vk1D::vk1D
とすることで『無変換+2』を押した時はF2のみ送信して無変換は送信されず
単独押しした場合はキーを離した時点で無変換が送信されて日本語OFFになる ctrl+tabやctrl+shift+tabにもAltTabと似たようなスクリプトってないんですか?
例えばvscodeはctrl+tabでリストが表示されてタブが巡回されるんですけど普通に Send,^{Tab}ってやるとまともに動かなくなって不便なんですよね… >>410
デフォ設定だとそうなんだっけ?
自分の環境だとchrome等と同じ動作だが... >>410
一つずつDownとUpとKeyWait組み合わせて書けば同じことは出来るだろ >>410
ttp://kantaro-cgi.com/blog/tool/vscode_tabmovekey_like_chrome.html >>412
vk1D & f::
send,{CtrlDown}
send,{Blind}{Tab}
Keywait, vk1D
send,{CtrlUp}
Return
僕の力だとこのスクリプトが精一杯で…
でもこれだと思っていたものとは全く違いすぎて詰まってしまいました…
>>413
ありがとうございます。
しかし僕はあくまでもvscodeではリスト表示にし続けたいんです。 >>414
すまんKeyWaitは連続でTab押したいときダメだったな
vk1D & f::
send,{Ctrl Down}
send,{Blind}{Tab}
Return
~vk1D up::
send,{Ctrl Up}
Return
これなら行けんじゃね? AHKからスクリーンセーバーを起動したいのですが
Run, "C:\Windows\System32\ssText3d.scr" /s
のように書くと、何故かファイルが存在しないというエラーが出ます
エクスプローラから見るとちゃんとファイルはありますし
コマンドラインから
"C:\Windows\System32\ssText3d.scr" /s
と入力したらちゃんとスクリーンセーバーが起動します
どうすればAHKからスクリーンセーバーを起動できるのでしょうか? >>417
その2行目コピーして実行したらエラーなく起動したけど >>417
SendMessage, 0x112, 0xF140, 0,, Program Manager 64bit版Windowsで32bit版AutoHotkey使ってない?
だったらSystem32じゃなくてSysnativeにすればいけるはず
Run, "C:\Windows\Sysnative\ssText3d.scr" /s ご返答ありがとうございます
まさに64bit Windowsで32bitのAHKを使っていることが原因でした
ファイルシステムリダイレクタというメカニズムをはじめて知りました
ありがとうございました wikiをみてて思ったんですけ#UseHookのデメリットってなんですか?
反応が早くなるのならとりあえずオンにしとけばいいんですかね? >>423
全てのホットキーに$をつけたときと同じになる(ソフトウェア的なキーボードイベントを無視する)
これがメリットでありデメリット
個別に細かい調整がしたいなら#UseHookは書かない
メリット: $書く手間が省ける
デメリット: 個別に$なしのホットキーにできない #UseHookはON/OFF出来るし複数の箇所に記述することも可能
だからフックするエリアをON-OFFで囲うことでフックしないエリアと別にできる
スクリプトが長くなるとフックしてるエリアか否か分かりにくくなるかもしれない → デメリットかな? >>423
俺もよく分かってないけどとりあえず#UseHook ONにして使ってるよ sysgetで現在のモニターリフレッシュレートを取得したいのですが、どうにもうまくいきません。
どなたか助けて下さい。 左Alt + Ctrl で ShiftAltTab 機能するようにしているのですが
その後にAltキーを離したら、アクティブになったウィンドウに
マウスカーソルを飛ばしたいのですが、下記では上手くいきません。
どのようにしたらよいでしょうか教えて下さい、、
LAlt & Ctrl::ShiftAltTab
KeyWait, Alt
Sleep, 200
WinGetActiveStats, Title, Width, Height, X, Y
MouseMove, Width / 2, Height / 2
return >>428
sysgetにはそんな機能元から無いんじゃね
>>429
ホットキーを一行で表記したコマンドは二行目以降は実行されない(一行で完結してる)
ShiftAltTabは一行表記専用コマンドなので他の動作を追加したいなら>>415を参考に一つずつバラして書きな 英字キーボードでワンキーでディスプレイ切るとしたら、どのキーに割り当てますか?
Pause?Ins?
Functionキーはなんかで使うかもしれないから避けたいです リフレッシュレートの取得ですが、海外本スレでみつけました。
おさわがせ。
VarSetCapacity(DM,156,0), NumPut(156,&DM,36, "UShort")
DllCall( "EnumDisplaySettings", UInt,0, UInt,-1, UInt,&DM )
msbox, % NumGet(DM,120) >>429
ウィンドウ切替時のイベントをフックすればいい
ttp://sites.google.com/site/agkh6mze/howto/winevent windowsアップデートで以下の記述が機能しなくなってしまいました。
どうすれば機能する様になりますかね…。
;Apple_keyboard_wired
#USEHOOK
sc071 Up::Send,{vkF4}
sc072 Up::Send,{vk1D}
#USEHOOK off #Includeが関数の中だとエラーだといわれて使えなくなるんですけど使えるようにする方法ってないですか?
動く
#Include %A_ScriptDir%\hoge.ahk
動かない
aaaaa()
aaaaa()
{
#Include %A_ScriptDir%\hoge.ahk
} >>435
関数内でも使えなくならない
エラーになるのは別の理由
エラーの内容くらいちゃんと読みなさい エラーでググってもわかりませんでした・・・
line text: findtext_Gui(cmd,arg1:="")
error.funcitons cannot contain functions.
細かく書くと
”hoge.ahk”は”FindText.ahk”というImagesearchの便利版みたいなので作るファイルですが、(”hoge.ahk”で”FindText.ahk”を呼び出して動作するようです)
原因も対処法もさっぱりです・・・ >>438
そうでしたか・・・
FindText.ahkはボタンを押すのに便利だと思ったけど別の方法を考えてみますありがとうございました >>437
少なくとも再現できる最少のコード貼ってもらえないとこっちも"さっぱり"なんだが…
>line text: findtext_Gui(cmd,arg1:="")
関数の引数に「arg1:=""」のような「:=」は書けなかったような → 「arg1=""」と修正したらどうか?
動かなかったらスマンね >>440
何かオレ頓珍漢なこと言ってたみたいね、恥ずかし(´・ω・`) 多分FindText.ahkで関数使ってるのにそれごと#Includeした上で関数で包もうとしてるんでしょ
hoge.ahkの#includeを外して
#Include FindText.ahk
aaaaa()
aaaaa()
{
#Include %A_ScriptDir%\hoge.ahk
}
でいけんじゃね
まあ自分ならaaaaa()はhoge.ahk側で関数化するけど ID:4vwGVhL7a
FindText.ahkの使い方が間違っている気がするけど...
>>440
引数のデフォ値のコロンなしは今は推奨されてないよ
> The use of = (without a colon) is permitted for backward-compatibility, but not recommended, and will not be permitted by AutoHotkey v2.
> Regardless of which operator is used, default values which are strings must always be enclosed in quote marks. >>443
どうも
そうだったのか…自分は1.1.33.02使用中だがあらためて付属の英語版ヘルプ読んでみたらそういう表記になっていた
でも中途半端だよな、スクリプトへの引数の数や内容を変数に代入する時は「=」と「:=」表記で内容変わってくるし
個人的には全て「:=」表記に統一して欲しいよ、ややこしくて仕方ない(あと「%」表記も) 01234567890abcdefghi・・・って文字列があったとして
n番目の位置の文字を抽出するってどうやるんですか? >>445
autohotkey 文字列 n番目
でググると3つ目に出てきた、SubStr()を使うと良いのでは? >>442
hoge.ahkの#includeを外して
#Include FindText.ahk をあらかじめ書いておくことで動作しました
ありがとうございました >>430
>>430
アドバイスありがとうございました!
全部バラしてやってみようと思います。 無理だとは思うのですが、エクスプローラにて、
「今現在自分がいる場所のフォルダ名をペーストする」という機能はさすがに作れないですよね…
動画制作の際、フォルダ名を付け、その中にプロジェクトファイルの雛形をコピペするのですが、その際にプロジェクトファイルにもフォルダ名と同じ名前を付けなければいけません。
今現在のフォルダ名、というか一つ上の階層名をコピーというものがあれば実現は出来そうなのですが…さすがに厳しいでしょうか?
宜しくお願い致します。 タイトルバーにフルパス表示する設定にしてwingettitleするか
アドレスバーからパスを取得
substrなりregexなりStrSplitなりで最右の \ から右側の文字列を取り出す むしろタイトルバーにフルパス表示しない設定にしといてウィンドウタイトル取得すれば今いるフォルダ名を取得できる >>451
Explorer関連はShellオブジェクトを使うと大体解決する
選択されたファイル/フォルダまたはカレントフォルダのパスを取得
https://www.autohotkey.com/boards/viewtopic.php?style=17&t=60403 >>452->>454
ありがとうございます
フォルダタイトルを取得してコピペという動作にすればいいのは分かったのですが、その書き方がどれだけ調べても分かりません
;エクスプローラのタイトル取得してコピー
;Alt+Shift+Cでタイトルをコピー
#IfWinActive,ahk_class CabinetWClass ;エクスプローラのクラスがある時
!+c::
WinGetTitle,title,
これ以降のフォルダタイトルを取得、クリップボードにコピー、ペーストの一連の書き方が分からず手詰まってします。
どなたか分かる方いらっしゃいますでしょうか。お願いします。 >>451
1) ファイル作成
今現在自分がいる場所のフォルダ名をペーストする.ahk → %ProgramFiles%\AutoHotkey\Scripts
2) レジストリ登録
3) 実行
ファイル選択 右クリック→リネーム→
■今現在自分がいる場所のフォルダ名をペーストする.ahk
SplitPath, 1, FileName, FolderPath
SplitPath, FolderPath, FolderName
;追加
nName := RegExMatch(FileName, "^" FolderName) ? FileName : FolderName "_" FileName
;リネーム
IfNotEqual, FileName, %nName%, FileMove, %1%, %FolderPath%\%nName%
■レジストリ登録
MsgBox, 262452, AutoHotkey, レジストリに値を書き込みますか?
IfMsgBox, No, ExitApp
RegWrite, REG_SZ, HKCR\*\Shell\リネーム, MUIVerb, リネーム
RegWrite, REG_SZ, HKCR\*\Shell\リネーム, SubCommands
RegWrite, REG_SZ, HKCR\*\Shell\リネーム\Shell\1,, 今現在自分がいる場所のフォルダ名をペーストする
RegWrite, REG_EXPAND_SZ, HKCR\*\Shell\リネーム\Shell\1\Command,, "`%ProgramFiles`%\AutoHotkey\AutoHotkey.exe" "`%ProgramFiles`%\AutoHotkey\Scripts\今現在自分がいる場所のフォルダ名をペーストする.ahk" "`%1" >>456
ありがとうございます。
ただ本当に分からなくて申し訳ないのですが、このレジストリ登録の記述は、vbsでは無いのでしょうか?
.vbsで記述して実行してもエラーが出るので…。申し訳有りませんがご教授いただけるとありがたいです。 >>455
エクスプローラーの設定でフルパスを表示しない(今いるフォルダ名をウィンドウタイトルにする)
WinGetActiveTitleでウィンドウタイトル=今いるフォルダ名を取得して
Clipboard = %title%
にしてファイル名にペースト >>457
AutoHotkey Script(.ahk) です
参考程度に今日の成果物おいときます
ttp://pastebin.com/raw/sNywf1Aj AHKスクリプトの呼び出し用にUSBテンキー買おうかと思ってるんだけど
キーボード側のテンキーと区別して
XNUM1~XNUM9みたいに特別なキーとして振る舞ったり出来るやつないかな >>460
一番簡単なのはプログラマブルテンキーやOrbweaverなど買ってF13〜F24や直接スクリプト実行を割り当て
普通のテンキーで何とかしたいならAHKHID.ahkでデバイス判別 AHKHID.ahkはデバイス一覧取得して判別&選択用の設定部UI作ったら
汎用で使いやすくなりそうなんだけど
そこ作るのが一番面倒くさそうで放置してるわ すり抜けが多発するようになったのでkeyhacに乗り換えます。 右下ら辺にウィンドウとか出さずただ文字だけを表示する様なGUI操作をしたいのですがどうすればいいのでしょうか? ahk osd とかでググるとサンプル出てくると思うが
タイトルバーや枠のないGUI作って背景を透明化 同じ動作を2パターンのショートカットキーに割り当てる方法は、2回同じ記述をするしかないのでしょうか? >>466
同じ動作ならまとめて書くことは出来る
F1::
F2::
Msgbox, F1またはF2が押されました
Return 管理者権限で起動したAutoHotkeyのEdit This Scriptは管理者権限でメモ帳が開かれてしまうのですが何か管理者権限として実行しない対策はないんですかね? Menu, Tray, add, Edit_hogehoge
Return
Edit_hogehoge:
RunAs, (ユーザー名), (パスワード)
Run, notepad.exe %A_ScriptFullPath%
RunAs
Return
メニューに別途エディットコマンド追加してRunAs
メニューの名前はお好きなように >>469
やっぱり直接的な対策はないのですね…
ともあれありがとうございました。 >>470
余談だがメニューにエディットコマンド追加はDefaultにしておけばトレイアイコンダブルクリックでエディタ起動も出来て便利 >>470
あと直接的な対策って意味がよく分からんのだが
そもそもエディタが管理者起動されて困る理由は?
起動時に確認メッセージ出てきて煩わしいってならUACの設定を低くしとけばいいだけだし
むしろ俺はエディタは敢えて常に管理者権限起動してるわ 変換キーとタッチパッドのタップでマウスホイールボタンのタップにしたかったのですが、この記述だと変換を押しながらタッチパッドで移動したあとはMButtonが動作しません。何か対策はありますか?
変換キーはf14を割り当てています。
f14 & LButton::Send, {Blind}{MButton} >>474
ありがとうございます。このコメントを見て前に使っていたパソコンで試したら普通に動作しました
新パソコン HP SPECTRE x360 13
旧パソコン NEC 法人向けパソコン (core i5 の第8世代)
両方ともwindows10でアップデートはしています
全く同じスクリプトでosも同じでも動作が変わることがあるんですね >>475
動作が変わるのは必ず理由がある
そういうのをおま環と言うわけで おま環て言葉は全てを飲み込んでて便利だけど
役には立たないな >>477
おま環かおま環じゃないかの切り分けは大事だろ
トラブルシューティングにおける基本中の基本
現に>>473はその切り分けすら出来ずに質問してたわけだしな まずは、新パソコンと旧パソコンに常駐しているソフトが全く同じなのかどうか すいません、お騒がせしてますね。
解決はできなかったですが、スクリプトじゃなくその他が原因だとわかったのはとてもありがたいです。
2台のパソコンは常駐ソフトは似てますが全部は同じではありません。 タスクビューが1万倍使いやすくなった
#IfWinActive,
!Tab:: ; Alt+Tabでタスクビューを表示
Send,#{Tab}
return
;; タスクビュー
#IfWinActive, タスク ビュー ahk_exe explorer.exe
+!Q::EditMe(A_LineFile, A_LineNumber)
w::up
a::left
d::right
s::down
q::#^left
e::#^right f::LWin
目当てのアプリがないならfから起動できるとなおいいな Autohotkeyのアイコンを右クリックしてopenした時と同じ様な動作をするスクリプトはどうやればいいのですか? >>483
専用のコマンドは無いんじゃないかな
キーボード操作をマクロ化するなら>>221
頭文字「A」の常駐アプリがトレイに複数ある場合はAを複数回押せばいい 今夜はRIZINか
天心がバカンサイ人皇治をボコるの楽しみだな >>483
ListLines
Viewメニュー内のその他の項目も
ListVars
KeyHistory
ListHotkeys
でそれぞれ直接指定可能 >>483
DetectHiddenWindows
SetTitleMatchMode
PostMessage トラックパッドの4本指の左右ジェスチャの仮想デスクトップの切り替えの
にゅるっとした動作の量を測って、何回振ったら何の動作するってやりたいんだけど
仮想デスクトップの切り替え中のアニメーション遷移してるパラメってどこ見ればいいんでしょ トラックパッドの特殊ジェスチャーはAHKであれこれするの無理じゃね
2本指スクロール程度ならキーヒストリーでも検出できてるけど
3本指左右(タスク切り替え)とか4本指左右は何も検出されないし ctrl alt deleteって割り当てるの不可能?
プログラムキーボードでも割当不可だからやっぱり無理なのかね Send, ^!{Del} は反応しないね
でも使うのってタスクマネージャーくらいじゃね?
Run, taskmgr.exe
で起動できるからctrl+alt+delete割りあてる必要も無いんだが IMEがオンの時だけ、
「x」キーと「ー」を入れ替えたい
;;☆Google Chrome
;;☆Microsoft Edge
LAlt & w::Send,^w >>494
>IMEがオンの時だけ、「x」キーと「ー」を入れ替えたい
IME.ahk使えば実現できるんじゃないかな
下3行の意味が分からない >>494
全角のエックスを打てなくなりそうだけど良いの? キーボードが手元にない時にマウスだけでホットキーが出来ないか試行錯誤してます
やりたいことは下記です
「Lボタンを押しながらマウスホイールを下に回転させた場合に発動」
LButtonWheelDown::
LButton,WheelDown::
{LButton}{WheelDown}::
いずれの方法でもホットキーが実行されませんでした
どなたかアドバイスいただけますでしょうか
またマウスでのホットキー実行についてこの方法の方が便利だなどありましたら
そちらも教えていただきたいです >>498
とりあえずホットキー関係とマウス関係のページは読みましたが参考になる記述は見つかりませんでした… >>499
ホットキーの中に必ず書いてある
ちゃんと一行ずつ理解しながら読め みつかりました
&でつなぐんですね…なるほど
ホットキーの出し方はわかったものの機能の実現は出来なかったので続けて聞かせてください
・やりたいこと
デュアルモニター使用時に、マウスを使ってアクティブなウィンドウをモニター間を移動させる
(デュアルモニターだけど横に並べずにお互いに見えない位置に置いている、リビング用とキッチン用モニター)
アクティブなウィンドウをモニター間移動するショートカットはシフト+Win+→キーなのでこれを使う
・書いたコード
マウスを右クリしながら左クリックで発動(発動の仕方は何でもよい)
~RButton & LButton::
Send +#{Left}
Return
・結果
アクティブなウィンドウが目の前のモニターにある時は、他のモニターにウィンドウを移動出来た
しかし、見えない他のモニター上のウィンドウを目の前のモニターに移動させることが出来なかった
タスクバー上で目的のウィンドウをクリックしていったんアクティブにしても
ホットキーを使ったとたん、マウスカーソルの位置がクリック状態になるのが原因
ここまでで力つきました、どなたかアドバイスなどお願いします マウス操作がメインならMouseGestureLを使いなさいと
ahkのスクリプト知識がなくても大概のことができる マウスクリックした段階でクリック位置にフォーカス切替わるのがOS仕様なので
>502の言うようにマウスジェスチャソフト使うか
~外してXbutton12などのドラッグに影響のないボタンに割り当てる方がスマートだと思うけど
どうしても右クリトリガでやりたいなら実行前に Send !{Tab} 入れて失ったフォーカスを戻してやったらいいんじゃね
時間調整は適当にsleep入れる
けど根本的な問題としてディスプレイ設定ををミラー(複製)で使うのではあかんのか? >>502
>>503
マウスジェスチャーをAHKで書くの面倒だなと思ってたんですが
書いて配布してる人がいたんですね、便利、後で試してみます
たしかにデュアルで使う意味あるのかと思われるでしょうが、
HDMI切り替えで更にもうひとつのモニターを拡張?で使う機会があるので、
マウス操作で切り替えが便利なのでした
ありがとうございます 以下のスクリプトについて、改善案を頂きたいです。
https://pastebin.pl/view/0c9f86a2
※PasteBinからコピペして動かしてみてください。
このスクリプトでは、例えば次のように、キーボードをスクリプト実行用の盤面にシフトして運用することができます。
「変換+Aの後R押下::AutoHotkeyをリロード」
「変換+E→C::1行コピー」
「変換+E→D::全消去」
問題点は、
@上記スクリプトにて☆をコメントした部分について、スクリプト登録の際に複数回同じ文言を入力する必要がある。
Atoggle_aが有効な状態でtoggle_eも有効にしてしまうことが可能。
です。
この解決のためにヒントを頂きたく思い、書き込みました。
便利ではあると思いますので、ぜひ使っていただきたいという思いと共に、改善を施せればと思っております。 function内にstaticでフラグ持っときゃいいんでない?
2ストロークキーについては車輪の再開発な気がしなくもないが >>505
俺が自前で2ストロークキーを実装した時は、
Input,key,L1 T10.0,{Space}
で次の1キーが押されるのを待って
if(key=="c") とか if(key=="d") で分岐してたなぁ。 >>507
{
if key = c
ほにゃ
ふが
}else{
じゃあかんの?昔の.ahkにそんな書き方してあるけど
マルチストロークもあった気がするけどどこだろう…… >>505
自分ならこういじるかな
ttp://pastebin.pl/view/raw/c743ddba >>509は、なんかいろいろとおかしいのでスルーしてください。<(_ _*)> 3を押したらF3を出力して、
その後5000msの間、3を押してもF3を出力させない
というスクリプトをつくりたいんだけど
Blockinputで特定のキーの入力だけブロックすることができないから困ってます。
なにかほかに手はないでしょうか send前にif分岐してA_TimeSincePriorHotkeyが5000ms未満だったら弾けばいい >>505です
皆さんありがとうございます。
時間が取れなくなったため、お礼だけ言いに来ました。
頂いた情報をもとに、近いうちに改めて検討してみます。 設定に苦慮しており、助けていただけると嬉しいです。
やりたいこと:テンキーのEnter(NumpadEnter)を押している間、Ctrl+Shiftに置き換えし、
テンキーのEnter(NumpadEnter)を二回押し、2回目を押している間、Ctrlに置き換え。
*NumpadEnter::
Keywait, NumpadEnter,
Keywait, NumpadEnter, D T0.15
で色々試していますが、二度押し&押しっぱなしにしか対応できず困っています……。
よろしくお願いします。 iTunesの再生停止、曲送りを割り当てることって出来ないですかね
Media_Play_Pauseを使っても動かなくて困っています
powermateのような外部デバイスでの再生停止は動くのですが…。 >>517
諦めたんじゃなかったのかw
COMオブジェクト操作したり
https://note.com/takanaction/n/n608bd1c598b9
ショートカットキーを送ったりすれば良いんじゃない?
https://www.autohotkey.com/boards/viewtopic.php?t=62090
メジャーなソフト用のスクリプトはいろんな人が作ってるから、「autohotkey itunes」みたいにググって参考にすると良いかも >>517
>>336-340辺りのやつか?
まずはメディアキー自体が正常に機能しないお前のPC環境の問題を解決しろって
iTunesに限らずメディアキー自体が効いてないってことはahkの問題じゃないんだから >>519
iTunesにメディアキーを送るソフトを使用した所
https://i.imgur.com/0vvO32H.png
このようにFailed to set hotkeyのエラーが出ました。
メディアキーの機能が死んでいるのは明白なのですが、メディアキーを復活させる方法が一向に分かりません。
かなり調べたのですが出てきたこちらの記事を
https://www.reviversoft.com/ja/blog/2014/06/what-to-do-when-your-media-keys-no-longer-work-on-your-keyboard/
試したのですがやはり駄目でした。(Human Interface Device Accessはそもそも動いていた)
windows10のメディアキーが効かない場合に動くようにする方法は無いでしょうか…。
本当に情報がありません。 >>521
そうですよね windowsスレやソフトスレで聞いても誰も分からなかったのでつい質問してしまいました
すいません 当たり前だろ
誰もお前のPC環境全く知らないし
触ってみなきゃ分かる訳ねえんだから >>517
powermateのドライバとかが競合してんじゃないの? ユーザー切り替えした時切り替え前のアカウントで動作させ続けるのは可能?
loopカウントを数えるだけのスクリプトは裏で動いてたけどメモ帳に文字を送り続けるようなやつは切り替えの時点で途切れてる
UWSCでも同じ感じで駄目だったし元のアカウントでのウィンドウのアクティブ化はやっぱり無理かな >>525
>ユーザー切り替えした時切り替え前のアカウントで動作させ続けるのは可能?
それができたらOSの欠陥だと思うけど
どういう理由でアカウントを切り替えて切り替え前のユーザのプログラムを継続させたいいんだ?
ユーザをログアウトせずにあるプログラムだけ別アカウントで動作させることができる
(runas ソフトによってはできない)が
そういう方法と組み合わせて近いことをすることはできないのかな >>526
ユーザー切り替えなのでログアウトは間違い
誤:ユーザをログアウトせずに
正:現在のユーザーのまま >>526
なんか勘違いしてた
切替えた先のユーザが切替え前のユーザのプログラムを確認すると途切れてるということではなく
前のユーザに戻ったときに途切れてるということか >>525
GUIの操作は無理じゃない?
vimとかnanoみたいなコンソール型のテキストエディタのwindows版を使ったら? 裏でGUI操作させたままユーザー切り替えするのは無理そうですね
ありがとうございました 最新のMS-IMEの仕様だと、
Autohotkey IME制御用 関数群 (コピペ/組込用)(IME.ahk)
の更新が必要か? >>531
IMEが有効な時にキーの置き換えを無効にしたくて、特定のアプリでは無効になってくれるのに
メモ帳では無効になってくれません
これってその仕様のせいですかね?
#include <ime>
#If ! IME_GET()
a::b
#If
Return 指定したアプリ以外ではスクリプトを無効にしたいのですが、”#IfWinActive”で指定しても、”#If ! IME_GET()”を入れると指定以外のアプリで実行されてしまいます
指定したアプリ以外の場合は”#If ! IME_GET()”の部分を読まないようにするにはどうすればいいでしょうか
#IfWinActive ahk_exe notepad.exe
#include <ime>
#If ! IME_GET()
a::b
#If
Return
#IfWinActive #If~ は次の #If~ が出現するまで有効、つまり一行目の #IfWinActive ahk_exe notepad.exe は無意味
条件を複数指定したければ式を引数に取る #If を使う。↓こんな感じ
#If WinActive("ahk_exe notepad.exe") && !IME_GET() >>534
やりたいことができました!感謝します!! 複数のスクリプトを起動させている時のリロードは全てのスクリプトがリロードできるのでしょうか? >>536
ABCDの4つのahkが起動している時、Aのahkでreloadを実行すると、BCDのahkもreloadが実行されるのか?
という質問ならノー。 自分だけだよ
ただ親スクリプトのautoexecuteで子スクリプトをまとめて起動して
全ての子スクリプトを #SingleInstance FORCEにしておけばリロード一発で全再起動にはなる >>537-538
ありがとうございます。その方法を調べて試してみます 今まで使えてたんですが、最近のバージョンアップのせいか、気づいたら使えなくなってました。
仕様変更があったみたいなインフォあったらページ教えてくれると嬉しいです。
キーを長押しした場合に分岐する関数です。
この「Time=0.2」の部分が機能しなくなりました。
初期値を指定して省略する、ということをせず、
関数を呼び出す際、省略せずに逐一「,"0.2")」と記述すれば機能するので、
現状すべてそれで修正しました。
また、数値を「Time=0.5」にすると一応分岐が機能するんですが、
体感的にどうも1.0秒くらい押しておかないと長押し判定されないんです。
Hold(Key, SendA, SendB, Time=0.2)
{
KeyWait, %Key%, T%Time%
If (ErrorLevel=0)
{
Send, %SendA%
}
Else
{
Send, %SendB%
KeyWait, %Key%
}
}
F1::Hold("F1", "{F1}", "^{F1}") すみません自己解決しました!
バージョンアップのせいなんかじゃありませんでした・・・
別の関数の都合で以下のようなものを書いていたのですが、
SetFormat, float, 3.0
これ計算結果に対してだけ効果のあるものだと思ってたんですが、
関数の初期値に指定した数値にも影響するみたいでした。
0.5という指定のときに1.0に四捨五入されるのも納得です。
自分がアホでした、スレ汚しごめんなさい。 PageUpをWin+L(ロック)にしたいのですが、上手く動きません
PgUp::#l
で動きません…
これは何が原因なのでしょうか >>542
自己解決しました
DllCall('LockWorkStation') 真にマルチスレッド化する方法は、どうしてもないのでしょうか?
例えばAutoHotkey.exeをコピーして、別で実行してみても、それぞれのスクリプトは疑似マルチスレッド的に動作しています。
PCの一般ユーザーでエンジニアではないです。根本の仕組みがわからないために湧いた疑問なのですが、
何とかして別のソフトのように実行できないものでしょうか? >別のソフトのように実行
同じスクリプトを同時に実行したいってことなら #SingleInstance Off >それぞれのスクリプトは疑似マルチスレッド的に動作しています。
の意味が分からん
真マルチスレッド的な動作と何が違うん? 新しいパソコンで、ジョイパットが反応してくれません
AutoHotkeyのウィンドウ(実行履歴とか変数一覧を表示してくれるやつ)が
アクティブ状態だと何故か普通に反応するのですが、それ以外ではうんともすんとも言ってくれません
この症状に心当たりある人ますか? 検証用に数行だけ書いたスクリプトでやってみてもダメなので#If系は関係なさそうです
一応、JoyToKeyは正常に反応するので、
ジョイパット操作をJoyToKeyで受ける→JoyToKeyが出力したキー操作をAutoHotkeyで処理する
ということは出来そう
ただ、書き直しが面倒なうえに処理がややこしいので、できれば避けたい 検証用といっても、ツールチップでジョイパットの状態を表示しているだけです。
SetTimer, Timer, 100
Timer:
GetKeyState, joyx, JoyX
GetKeyState, joyy, JoyY
GetKeyState, joy1, joy1
GetKeyState, joy2, joy2
GetKeyState, joy3, joy3
GetKeyState, joy4, joy4
ToolTip,%joyx% %joyy% ,0,0
ToolTip,%joy1% %joy2% %joy3% %joy4%,1,25,2
return
joy1::ToolTip,1,1,50,3
joy2::ToolTip,2,1,50,3
Joy3::ToolTip,3,1,50,3
Joy4::ToolTip,4,1,50,3 >>552
試したけどスクリプト自体は何も問題なく動いてる
AHKのウィンドウを出さなくてもX軸やY軸やボタンも取得してツールチップに表示されてる
Chromeやメモ帳などアクティブ時でも問題なし
JTKも常駐させてるけど併用して問題ない
となると貴方の環境で何か別のスクリプトや他の常駐ソフトなどが邪魔してるんじゃない?
ちなみにスクリプトを管理者権限で実行してもダメ? 新しいPCと古いPCの環境の違いを書き出してみるといいよ
多分OSのビルドやahkのバージョンあたりに細かい差異があるんでないの
知らんけど >>546
>>547
例えばAutoHotkey.exeをリネームしたa.exeとb.exeを用意します。
それぞれa.ahkとb.ahkを実行します。
どちらのスクリプトにもループ処理が入っています。
これらのループ処理を両方実行した場合、片方のみ実行するより動作が鈍くなります。
つまり実行ファイルを分けても、それぞれが割り込みあっているのだろうと思います。
これを、完全に別物として実行させたいわけです。 >>555
動作コアを分ける
でググってみたらどうだろ? スレッドとプロセスがごっちゃになってるぽい?
https://image.itmedia.co.jp/ait/articles/0503/12/dt-mthread01_02.gif
>555
exe(プロセス)を分けて動作が遅くなるっていうのは
色んなアプリを一度に立ち上げて動かしてたら1窓単体起動のときより重くなりましたつってるのと同じでは?
>556の言うように手動で任意のCPU割り当てる方法もあるけど
プロセス別のコア割り当ては基本OS側の仕事だと思う
同一プロセス内でのマルチスレッドについては
AHKは擬似マルチスレッドなのでマルチコア対応はしてないと思う >>555
どんなループ処理してんだ
1秒に何百回みたいなループさせてんのか? >>556
検証用のスクリプトは用意していないので、わかりにくいかもしれませんが現状を話します。
何が関係しているかわかりませんから、念の為詳細に書きます。
AutoHotkey.exeでAutoHotkey.ahkを常駐させています。AutoHotkey.ahkにIncludeしているスクリプトがいくつかあり、
そのうち1つがキーボードでマウス操作をする、mouse.ahkです。
あるトリガーキーを押してから、再度そのキーを押すまで、キーの入力をwhile、if、GetKeyStateでループ、監視し続けます。
そこでカーソル移動用のキーを押すと、MouseMoveを発動します。発動間隔は監視間隔なので、20ミリ秒程度の設定になっています。
これとは別に、MouseGestureL.exe(AutoHotkey.exeを改名した別ファイル)も常駐させています。
そこで問題なのが、MouseGestureL.exeを終了させると、AutoHotkey.exe下のmouse.ahkによるマウスカーソルの移動速度が上がります。
このことから、AutoHotkey.exeとMouseGestureL.exeで別プロセス?として実行していたはずのスクリプトですが、相互にスレッドを奪い合って?いるのではないかと思いました。
MouseGestureL.ahkの仕様はわかりませんが、ループ処理がなされているのだろうと推測しました。
ともかく、実行ファイルもスクリプトファイルも分けて、独立したはずのアプリケーション同士が干渉しあっているので、
疑似マルチスレッド動作になっているのではないかと思いました。
以上です。
これを互いに完全に独立した動作にする方法がないかと思い、質問しました。
関係するかわかりませんが、CPUはi7-8700Kです。 そもそもAutoHotkey.exeを改名とかやってることが特殊過ぎてな
意味あんのかそれって感じだし
まだコンパイルしてスクリプト自体を別exeにした方がいいんじゃねえの >>559
>そこで問題なのが、MouseGestureL.exeを終了させると、AutoHotkey.exe下のmouse.ahkによるマウスカーソルの移動速度が上がります。
MouseGestureL.exeも基本常駐じゃないの?終了即再起動することはあるけど終了したままにするケースがよく分からない
ま、何にしてもMouseGestureLが終了したらmouse.ahkの挙動が変わるのが嫌ということなら
MouseGestureLの方にmouse.ahkをIncludeさせればいいのでは?
それならMouseGestureL起動中しかmouse.ahkも動作しないわけだから >>559
自分もMGL使ってるけど同じahkスクリプトで常駐させたいものはMGLのプラグインにして
監視するのには「while」などのループじゃなく「settimer」使ってるな
プラグインにするのは別に薦めないけど、試しに「while」の代わりに「settimer」で監視してみては? マルチスレッド云々以前の問題な気が
まず、マウスの挙動を制御するプロセスス2つ同時に動かすことで干渉しあってる可能性は?
コントロールの奪い合いになってたりしない?
あとmouse.ahkの回し方に問題あると思う
20msの高頻度でMousemoveし続けて必ず時間どうりに動かすのがまず無理だし
ループ監視するよりHotkey、#if あたりで2ストロークイベントにしたほうがスムースに動くんではないか ループ間のディレイをなくす設定ってありますか?
Reloadで中断できるようにDllCallのSleepを小分けにしてループさせてたんですが
WindowsとAHKのアプデ後からループ10回で0.1秒ぐらいのディレイが入るようになりました
現状はこの設定です
#NoEnv
ListLines Off
Process, Priority, , H
SetBatchLines, -1
SetKeyDelay, -1, -1
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
SetWinDelay, -1
SetControlDelay, -1
SendMode Input >>566
実際のスクリプトを見ないと誰も答えられない
検証用に最小限まで削ってから貼ってください winみたいなマルチタスクOSではアプリ層で割り込み禁止にできないし
AHK側の設定をどう変えてもノーディレイにはならない
けどsleepの精度を上げる方法はある模様
http://www.charatsoft.com/develop/otogema/page/02window/sleep.html
AHKで適用できるのか、できてもインタプリタなスプリクトでどこまで
シビアに時間制御ができるのかは知らんけど >>567
上記の設定の後に
Sleep(Loops) {
Loop, %Loops%
DllCall("Sleep", "UInt", 50)
}
Shift::
Send, {Lbutton}
Sleep(20)
Send, {Lbutton}
Return
https://stopwatch.onl.jp
検証サイトはここです
Loop使わず直接1000ms指定だとディレイなし、Loopありだと+100~200ms,設定全削除だと+300~400msに増えました A_TickCount を使おう
ループの中に組み込んで所定時間が過ぎてたらbreakするように組めば
sleepでの時間誤差は考慮しなくて良くなる >>569
↑のスクリプトで検証、ループであってもほぼ一致(+20〜30ms)ブラウザ経由の誤差だけ
他の負荷がかかってるのかも?タスクマネージャーで確認
念のため以下のスクリプトで検証してみてください。
通常は1ms程度の誤差しか出ないはずです。
https://pastebin.com/Rs3N47rb 低スペでもそんな現象にならんと思うし
AHK関係なくハードに何か問題が発生しているのでは? 毎回sleep誤差15msってことは分解能の問題みたいですね
>>573は忘れてくださいw
精度を上げるサンプル(timeBeginPeriod)
https://www.autohotkey.com/docs/commands/Sleep.htm#ShorterSleep >>574
50ms200回で10125まで精度上がりました、ありがとうございます firefoxを83にアップデートしたらfirefox関係のスクリプトが動かなくなった。
調べてると返ってくるウインドウタイトルが
YouTube - Mozilla Firefox とかから
YouTube - Mozilla Firefox と真ん中の棒が変わってた。
このまぎらわしい棒は何だと調べたらem-dashとか言うらしい。 すいません、>>576は間違えて同じもの2回貼り付けただけでした。
こっちが正しい比較です
YouTube - Mozilla Firefox (真ん中がハイフン)
YouTube ? Mozilla Firefox (真ん中がem-dash) だめだ、em-dashが?になって5chだと表示されないみたい。
em-dashはハイフンがちょっと長くなった見た目の記号です >>576
ウインドウクラスで指定すれば?
もしタイトルも必要なら「em-dash」以降は指定しなくても特定できるでしょ
#IF [ウインドウクラス] && [「em-dash」以降を削除したウインドウタイトル]
↑とかで >>579
>#IF 〜
省略し過ぎな書き方でスマン
でも何となく分かるっしょ あ、>>579は何か間抜けな方法だったかも…↓な感じで良かったか?
#IfWinActive, 「em-dash」以降を削除したウインドウタイトル ahk_class MozillaWindowClass
適当なこと言い過ぎだから後は黙っときまつ >>581
youtubeドメイン内のページ全てで動作させたいので、SetTitleMatchMode, 2 でタイトル部分一致にして
#IfWinActive,YouTube - Mozilla Firefox
としてます。youtubeドメインのタイトル末尾は全部 YouTube - Mozilla Firefox で終わってるので。 a up::b
とすると
Line Test:*a up up::
Error:invalid hotkey
のようにエラーが出てしまう。対処法を教えてください >>584
出来ました。ありがとうございます
AutoHotkeyJpのリマップの項を読んでも、いまいち分からないんだけど
リマップしようとすると、スクリプトの実行時に自動的にホットキーに変換されちゃって、それが
a up up::
になって、エラーの原因になっている。って認識でいいんでしょうか? >>577
ついにウィンドウタイトルというかアプリのリソースにUnicodeが使われる時代がきたのか
これまでどおり「-」ハイフンというかマイナスだとなんか問題があるのかねぇ
今回のように障害になることの方が多い気がするなぁ 質問なのですが、1つのスクリプトの中で SetTitleMatchMode,2 と SetTitleMatchMode,3 を混在することは出来ますか?
下のように書いても初めの SetTitleMatchMode,2 のみ読み込まれているようなのですが
SetTitleMatchMode,2 ;部分一致
#ifwinactive 無題
^2::
msgbox, 2
return
#ifwinactive
SetTitleMatchMode,3 ;完全一致
#ifwinactive 無題 - メモ帳
^1::
msgbox, 1
return
#ifwinactive #If系で参照する既定値はAutoexecuteでしか指定できない
スレッドごとの再指定は可能なのでホットキーラベルの中では使える
SetTitleMatchMode,2 ;部分一致
^2::
msgbox, % A_TitleMatchMode
return
^1::
SetTitleMatchMode,3 ;完全一致
msgbox, % A_TitleMatchMode
return >>588
SetTitleMatchModeとウィンドウ判定を使ったユーザー定義関数を自作する
#If 部分一致()
#If
#If 完全一致()
#If >>589,590
ありがとうございます、上手くわけることができました。 GUIのウィンドウスタイルについて教えてください
メッセージボックスのような閉じるボタンのみのGUIウィンドウは作成できますか
よろしくお願いいたします
サンプル
Gui, -MinimizeBox +AlwaysOnTop ;SysMenu+XButton
;Gui, -SysMenu +AlwaysOnTop ;None
Gui, Add, Edit
Gui, Show
MsgBox
ExitApp >>592
解決しました
ttp://www.autohotkey.com/boards/viewtopic.php?t=35803 すいません教えて下さい
zを押してある場所で左クリックしたままにして
zを離したら左クリック解除して他の場所をクリックしたいんですが
200ms以内に離した場合は200ms後に左クリックするようにしたいんです
z::
MouseClick, L, 900, 775, 1, 0, D
Sleep, 200
Return
z Up::
MouseClick, L, 900, 775, 1, 0, U
MouseClick, L, 690, 775, 1, 0
Return
これだと200ms以内にクリックしてしまいました
どうすればいいか教えて下さい >>595
望みが実現しない原因。
Sleep,200 でSetTimer以外のスクリプト全体の動きは止まるが、
z Up::で新たなスレッドが実行されたので、
Sleep,200 の動作が一時停止し、MouseClick,U が行われた。
(z Up::の実行を終えた後、Sleep,200 のスレッドが再び動く)
KeyWaitを使うといいぞ
z::
x1:=900,y1:=775,x2:=690,y2:=775
MouseClick, L,%x1%,%y1%, 1, 0, D
KeyWait,z,T0.2 ;指定秒数 指定の状態になるのを待機する
if ErrorLevel ;時間が過ぎても指定の状態にならなかった
{ ;200ms以上押した場合
KeyWait,z ;このままzキーを押し続けた場合、z::が連続で実行されてしまうので待機処理を入れる
Send,{LButton UP}
;MouseClick, L,%x1%,%y2%, 1, 0, U
MouseClick, L, %x2%,%y2%, 1, 0
}
Else
{ ;200ms以内に離した場合
Sleep,200
Send,{LButton}
;MouseClick, L,%x1%,%y1%, 1, 0
}
Return >>596
ありがとうございます出来るようになりました
ロジクールのlua scriptでやっていた事をautohotkeyでやろうとしたんですが
自動でコマンド間などにsleepが入るとかでちょっと指定時間より遅れるので
#NoEnv
SetBatchLines, -1
ListLines, Off
SetKeyDelay, -1
これを先頭に突けてみたのですがlua scriptより遅かったです
他に方法があったら教えて下さい Loopの使い方が分からないので教えて下さい
やりたい事は指定範囲の色が変わったらマウスポインタをA点(650, 750)に移動させ
色が変わる前にF2キーを押したらそB点(1500, 1000)に移動させてLoopを終わらせたいです
F2キーを押してB点移動した後もLoopが終わらず色が変わるとポインタがA点に動いてしまいます
F2キーを押したらB点に移動しLoopが終わるようにするにはどこが間違ってるか教えて下さい
F1::
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
Loop ;指定範囲が0xFDFDFD色になるか
{ ;F2キーが押されるまでLoopさせる
PixelSearch,,, 1265, 370, 1270, 375, 0xFDFDFD, 3, Fast
GetKeyState, state, F2 ;F2キーの状態を取得
if (ErrorLevel = 0 or state = D) ;0xFDFDFD色になる or F2キー操作でLoopを終わらせる
break
}
if state = D ;F2キー操作ならLoopを終了してF2キーに割り当てた操作をする
Return
Else ;0xFDFDFD色になら 650,750 に移動してLoopを終わらせる
MouseMove, 650, 750, 0 ;A点
Return
F2:: ;F2キーを操作したら 1500, 1000 に移動
CoordMode, Mouse, Screen
MouseMove, 1500, 1000, 0 ;B点
Return 試してないけど怪しそうなとこ
if (ErrorLevel == 0 or state = "D")
if () と if カッコなし は記述ルールの違いが紛らわしいんで
なるべく混在させないほうがいいよ >>599
有難うございます
if (ErrorLevel = 0 or state = D)のカッコを外したらA点に移動しなくなりました
if (ErrorLevel = 0 or state = D)のまま
if state = Dにもカッコをつけたら前と変わらない動作のままでした >>601
勘違いしてました
Dに""付けたら希望通りの動作しました
有難うございました! >>603
現状(v1?)で不満ないんだけど、v2使うメリットって? AppleのUSキーボードをWindows10環境で使用しています。
(左CommandキーはLWin、右CommandキーはRWinとして認識されています)
・LWin単体で押されたときにvk1Dsc07B(無変換)を送る
・RWin単体で押されたときにvk1Csc079(変換)を送る
・↑と被るためWindowsキー単体で押された時の機能(スタートメニュー表示)は無くしたいが、Win+Rなどは残したい
ということがやりたいです。
~LWin Up::
if (A_PriorKey = "LWin") {
Send {vk1Dsc07B}
}
Return
が望みに近いのですが、スタートメニューが表示されてしまいます。
LWin::Return などを加えるとスタートメニューは表示されなくなりますが、Win+Rなども効かなくなってしまいます。
どのように設定すればよいか教えていただけますでしょうか? >>606
LWin::vk1D
LWIN & r::#r
余計な事せずこれじゃダメなの?
コンビネーションキーひとつ書くだけでWin+Dとかも全て利用可能になる >>607
ありがとうございます。
教えていただいた方法で実現できました!
全然話は変わるのですが、マニュアルはどちらを参照されていますか?
vk1Dとかの書き方、自分の探し方だと出てこなかったもので。。。 >>608
基本的に日本語wikiとここしか見てないよ
vk1Dとかの書き方はたまたまAHKのUpdateで記述ルールが変わった時にスレ見てたから
自分は把握してるだけでwikiは古い仕様のままだから直ってない
直せるなら直したいけどロックされてて出来ないんだよな >>609
ありがとうございます。
# 教えていただいた設定に変えて手も慣れてきて、すっごい快適になりました。 長いことバージョンアップしてなくてv1.1.33.02にしたら
・カタカナひらがな
vkF2sc070:: Run, calc.exe
・変換
vk1Csc079:: Run, calc.exe
・無変換
vk1Dsc07B:: Run, calc.exe
各キーに割り当てていたホットキーがすべてエラーになります
なんと書き直せばいいのでしょうか? >>612
ありがとうございます!
直上に書いてあったんですね 自分もvkscって頃にAHK使い出したけど 恐ろしくて新しいバージョン手を出せないっす やっぱり新しいやつのほうがいいのかしら >>614
※新規利用者には最新版を推奨しますが、旧AHK(2009年9月までのVer)の利用者は新AHKへの移行に際して
少なからず改修が必要となります。特に、旧流行らせるページの配布物(MouseGesture等)の多くは
そのままでは動作しません。安定利用できている環境を崩して移行するかどうかは各人の判断による。 hotstringが効かないことがあるのは、バグなんですかね #Hotstring C O K-1 Z
:R:gistp::git stash pop stash@{}
で更に、キャレットを1つ左に移動させたい場合はどうすればよいでしょうか。
試しに
::gistp::
tmp := ClipboardAll
Clipboard = git stash pop stash@{}
Send, %Clipboard%
Send, {Left}
Clipboard := tmp
tmp =
Return
のようにしてもみましたが、Rをつけてもつけなくても(#Hotstring/:R:)、
{}さえ入力されなくなりました。 クリップボードの内容が何十回かに一度ですが書き換えミスが生じてしまいます。
^b::
send, ^c
send, ^t ;firefoxで新しいタブを開く
sleep, 200
clipboard = test
if(clipboard == "test"){
send, ^v
}
return
上記のコードで、ifでクリップボードの中身が"test"であることを確認しているのに、
send, ^t のように、アクティブなタブが変わった直後にペーストすると何十回かに一度は"test"ではなく、
初めのsend, ^c でコピーした内容が貼り付けられてしまいます。
なにか確実にクリップボードの内容を確認するか書き換える方法はないでしょうか? >>619
ClipWait が代入にも有効かどうか試してみたら? >>619
あと、
send, ^v
の後に
Sleep,100 先のsend,^cでの反映が遅くてsleep 200msで間に合わってなくて
"test"代入後に上書きされてしまっているのでは?
clipboard := ""
send, ^c
ClipWait, 2
send, ^t
としてみるとか >>620-622
返信ありがとうございます。
>>622さんの言われるとおりで,^cのクリップボードへの反映にそこそこタイムラグがあるのが原因でした。
^b::
clipboard := ""
send, ^c
ClipWait, 2
send, ^t ;firefoxで新しいタブを開く
sleep, 200
clipboard := ""
clipboard = test
ClipWait, 2
return
と直せば誤動作がなくなりました。
clipwaitはクリップボードの処理が完了するのを待ってくれているのかと思ったら、ただ単にクリップボード
の中身がテキストかだけを確認するような動きなんですね。
なので上記のように clipboard := "" とセットで使わないとまた誤動作してしまいました。 >>620
ClipWait が代入にも有効かどうか下記で試してみました。
rctrl::
s = "aaaaaaaaaaaa" ;実際はもっと長い文字列で試しました
clipboard = %s%
send, ^v
clipboard =
clipboard = test
clipwait
return
上を数百回繰り返しても一度も"test"は表示されなかったので、clipboard = は代入が保証されているようです。
なので>>623(最後に send, ^v が抜けている)も
^b::
clipboard := ""
send, ^c
ClipWait, 2
send, ^t ;firefoxで新しいタブを開く
sleep, 200
clipboard = test
send, ^v
Sleep,100
return
で大丈夫そうです。 タスクトレイの操作について質問させて下さい。
#Bでタスクトレイにフォーカスを移す方法は、windows10では問題ないのですが、
windows8.1だと#Bの後に何か操作するとその後タスクトレイのアプリで右クリックメニューが閉じなくなるバグがあるので使えません。
なのでネットにあった以下のコードを使ってみました。
https://pastebin.pl/view/457a5699
このコードで ctrl+b を押すとタスクトレイのAHKを右クリックできるのですが、なかには無反応のアプリもあります。
そこで、右クリックの代わりにアプリケーションキーを送りたいのですが、
TrayIcon_Button() 関数の中の
PostMessage, oIcons[nIdx].msgid, oIcons[nIdx].uid, %sButton%DOWN,, % "ahk_id " oIcons[nIdx].hwnd
の %sButton%DOWN にアプリケーションキーが押されたというメッセージ(0x0200など)を書き込めば良いのではと
考えたのですがどのように書けば良いでしょうか? >>626
AHKのwikiをみると PostMessage は
PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
となっており、メッセージは第一引数に入れるように見えるのですが、
PostMessage, oIcons[nIdx].msgid, oIcons[nIdx].uid, %sButton%DOWN,, % "ahk_id " oIcons[nIdx].hwnd
はメッセージの %sButton%DOWN が第3引数に入っていて、それなら第一引数の oIcons[nIdx].msgid は一体何?
と全くわからない状態です。 とりあえず
SetFormat, IntegerFast, hex
msgbox,% oIcons[nIdx].msgid
で値確認してから逆引きでmsg調べてみては >>628
試したら 0x40000000000404 とよくわからない大きすぎる値が表示されました。 つうかcallbackだって書いてあったわ
ahk tasktray sendmessage でググったらこんなページ出てきたけど関係ある?
https://stackoverrun.com/ja/q/8775770 >>629
Win+Bのショートカット使う前は自分の場合はトレイアイコンのスクショを画像保存しておいて
ImageSearchを使ってアイコンの座標を右クリックしてたなあ
スマートなやり方ではないけど簡単で確実
試行錯誤をしたいならそのまま続けてください 操作するアイコンやメニュー(なんちゃら機能のon/offとか)が決まってるなら
コマンドid調べてpostmessageで直接操作するっていう方法は駄目なんだろうか?
…なんて思ったりする >>632
そんな方法があるんですね。
例えばタスクトレイのAutoHotKey右クリックメニューOpenを実行したいならどのように書けば良いのですか? ahkのトレイならpostmessage使うまでもない
ListVars / KeyHistory / ListHotkeys から好きなものをどうぞ >>634
ahkというより、汎用的なpostmessageを使ったタスクトレイの操作を知りたいです。 >>636
ありがとうございます。
その方法だと1行書くだけでで済みました。
ただリソースハッカーに Menu の項目が表示されないアプリがあるのですがそういった物に関してはこの方法はお手上げでしょうか? Get Info from Context Menu (x64/x32 compatible) - AutoHotkey Community
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=31971
後は好きなように改編どうぞ
>リソースハッカーに Menu の項目が表示されないアプリがあるのですが
こういうのにも対応してるのかは分からない >625 >無反応のアプリ
>637 >Menu の項目が表示されないアプリ
ってのが具体的に分からんから何とも言えないけど
うちの環境だとタスクトレイ上で>625で動作せず、リソハカでもID取れなかったのはKeepassXCだけだった
あとPythonやNode.jsをexe化してるようなアプリはリソハカでID見えなかった
たぶんネイティブじゃないクロスプラットフォーム系のアプリは窓の作り方自体のお作法が違うのでは 「最初のテキストフィールドに移動」はAHKで実現できますか?
(例えば、Google検索結果を表示している画面でそれを押すと、検索窓にフォーカスがあたる)
CentBrowserにあるショートカットなのですが、AHKで一般化したい事情があります。
WindowSpyで見たところ、ClassNNは画面内すべて同じ値で、テキストフィールドごとなど分かれてはいません。 >>640
CentBrowserをアクティブにして「CentBrowserにあるショートカット」キーを送る(という一連をAHKで実行する)ではダメなの? >>641
CentBrowserが入っていない環境下でその機能を使いたいために、
AHKで実装したいのです。
不意に誰かのPCで作業することになることが多く、
そのために、AHKへの統合作業を進めているところです。 >>642
Chromium系のブラウザだけ考えてもCentにしかない?のなら難しいそうだなぁ
それよりよくあるキーワードをコピーしてGoogle検索で代用になるのでは?
それなら別にメモ帳からエクセルからでもキーワード込みでGoogleに飛ぶ
ブラウザは既定になるけど、指定も可能
これはGoogleだけの話だけど、アクセス頻度が高いサイトが他にあるならそれも追加すればいい >>643
ありがとうございます。
Google検索以外にも、1つ目のテキストフィールドに飛びたい場面は結構ありまして、
そのために共通化したいのです。(Google検索に関しては別途プラグインを用意しています。)
とはいえ、やはりChromeに限らずソフト内部の処理は中々難しそうですね。 1::
3::
5::
(処理)
Return
2::
4::
6::
8::
9::
(処理)
Return
これを、次のようなイメージで表現する方法はありますか?
(Hotkey, Loopあたりを使うのでしょうか)
key_list:=1,2,3,4,5,6,7,8,9
valid_key:=1,3,5
invalid_key:=(key_listのうちvalid_key以外)
(valid_key)::
(処理)
Return
(invalid_key)::
(処理)
Return とりあえずwikiのhotkeyコマンドのページを読んだらいいと思う >>646
逆に、読まないわけないですよね、人に聞くのならば。
当該ページの要約なんてしてしまえば、それこそスレ汚しかなと。 >>638
ありごとうございました。
そのスクリプトでIDを調べればほぼ全てのアプリで直接操作ができました。 >>647
リファレンスじゃなくてコマンドのページを見ろと言ったのだけど
これ見た上で>645の質問するならせめて何がわからないのか言ってくれない?
http://ahkwiki.net/Hotkey ああすまん HotkeyもLoopも調べた上で完成コード貼ってくれって言ってるのね
ちょっとそれは想定外だったわ
ごめんここそういうスレじゃないんだわ >>645
うん、そうだね
LoopなりForなりでkeyを取り出しながらHotkeyで登録していけばいいよ >>644
>Google検索以外にも
どれだけあるのか知らないけど、自分は検索ワード付で飛べるようにしてるサイト100近くあるよ
Googleの検索オプション込で20くらいあるし、各EC・翻訳・類語・電子書籍・地図・レシピetc
価格.comとかちょっと苦戦した所もあるけど、それぞれのサイトごとに作ればいいのでは
1回作ればメンテもほとんどいらないし >>644
UIAutomationでFindFirstを使ってみたら?
公式のフォーラムにUIA_Interface.ahkがあるけど
個人的にはTypeLib2AHKから生成したもののほうが使いやすい スレッド住民の天才プログラマー様、デスクトップ版Amazon Musicがグローバルホットキーで動くスクリプト下さい 前にやってた事なのですが、突然グリーンスクリーンでパソコンが落ちた後起動が出来無くなりSSDのデータの復元も出来ず(.ahkファイルなどが)、元々この辺も詳しく無かったので「こうかな?」とやってみたものの上手く行きませんでした
たぶん皆さんだと「そんな事もわからねえのか」ってレベルだとは思いますが、アドバイス頂きたいです
Win10 64bit Pro
AHK 1.1.33.02
やりたい動作
日本語入力で「を押した時「」を出力し↓を送信して選択を確定し←を送信して「」の間にカーソルを移動
同様に、」を押した時()を出力し↓を送信して選択を確定し←を送信して()の間にカーソルを移動
[::Send,{Blind}[]
Send,{Blind}{Down}
Send,{Blind}{Left}
Return
]::Send,{Blind}()
Send,{Blind}{Down}
Send,{Blind}{Left}
Return
上記の書き方でやると()が出力されますが変換未確定状態で止まります
DownとLeftをscの方で書いてみましたが変わらず
以前は出来ていたので可能だとは思うのですが、どう書けば出来るでしょうか?
よろしくお願いします >>657
もう一つだけ言っとくと、大事なのは改行 相変わらず役立たずが張り付いてんだな
もう引退しろ >>657
とりあえずその書いた通りに自分でキー入力してみて
やっぱり変換未確定になるのでは?それを確定させるにはどうするか
あと、デフォを変えてしまうのは抵抗あるかな。まあこれは好き好きかもだけど
自分なら無変換+[ とか 右Alt+[ とかで作ると思う >>658-659
レスありがとうございます
ahkwiki.netのサンプルコード集とか他にもいくつか見てはみたのですが、自分のやりたい事に合ってる物が見付からず、基本的な部分もどれが合っている物なのかが…
開業の すみません、間違えて途中で送信になってしまいました(しかも誤字あり)
改行の方法が関わってるんですね
その辺で探してみます
>>662
書いた通り未確定状態です
Enterで確定にする方法を前も考えていたのですが、日本語入力オフの時にやると改行してしまうので下で確定と思った様な
試しにEnterにしてみたのですがそれでも変化ありませんでした
また調べていてBlindは同時押しの時に使う物、という事で関係無いのでは…と消した所上の方が「」にはなりましたがやはり未確定状態
前調べた時にBlindがこの状態に有用っぽいと思ったので付けていたのですが、見間違いか見たサイトの書き方で勘違いでもしたのか
この使い方で何年もやっているので不便は無いというかとても使い易かったです
かっこって「」も()も使う時は必ず両方使いませんか?
片方だけ使用する事が無いので、それなら割り当てちゃおうと あ、662さんにお礼書き忘れていました
レスありがとうございます >>663
やりたいこととか関係無いから
もっと根本的にサンプルコード集にあるコードの書き方とお前の書き方で決定的に違うところがあるだろ
どれか一つでもサンプルコード集のコード貼ってみろ >>664
IMEの状態で挙動分けたいならIME.ahkで状態確認してEnter入れるかどうか判定してたんじゃない?
テンプレ >160
なんにしてもバックアップは大事だよー
あとOS入れかえたんならMS-IMEが新方式になってると思われるんで
調子悪いようなら従来方式に戻してみ 愛があるのか意地悪なのか知らないけど、個人的には書いてあげたいところ
ここからIME.ahkをダウンロードして配置→Include
https://w.atwiki.jp/eamat/pages/17.html
スクリプト
https://pastebin.pl/view/390b06d3
下で確定というのがよくわからないけど、これで希望の動作ができているのでは >>666-669
あー、なるほどわかりました!
複数行になる時は::の後ろで改行が必要なんですね
それで出来る様になりました
皆様本当にどうもありがとうございました >>669
IMEとか全然関係無いだろ
お前みたいにトンチンカンな事いって混乱させる方が余程意地が悪い 記号入力系はおれはIME.ahkでIMEがonなら一旦offにしてsendrawで直接文字列入力させてるな
キーボードに無い記号も日本語も扱えるし関数にしとけば記述も楽だ 俺は Clipboard 使ってるなぁ
IMEがどんな状態だろうが、 Send,^v で >>652
>>654
いろいろ試して、とりあえず下記のような形になりました。
ふとした時に最上部のテキストボックスに移動したいことが多いので、特定のサイトというわけではないんですよね。
最初のテキストフィールドに移動β[Chromium]
https://pastebin.pl/view/740eefc4 質問です
func( key )
{
;(ここで色々な処理)
Send, {%key% down}
keyWait, %key%
Send, {%key% up}YES
;(ここで色々な処理)
}
$a:: func( "A" )
$h:: func( "H" )
$k:: func( "K" )
キーリピートさせないため&他にも色々させるためにこの形を取っているのですが
これだと複数キーを押した際にkeyWaitが蓄積されていく形になり
例えば「H」押下→「A」押下→「H」離す だけではHがupされず その後「A」を離した時点で初めて「YESYES」と出るのですね
1キーごとに独立したkeyWaitをさせるみたいなことってどうしたらできるでしょうか?
Inputって今まで使ったことなかったですが、keyWaitのところをとりあえず
「Input, UserInput, V, %key%」
「Input, UserInput, V, %key% up」
「Input, UserInput, V, {%key%}」
「Input, UserInput, V, {%key% up}」
辺りからIf ErrorLevel〜 みたいにしてもInputコマンドのEndKeys引数は(当然かもしれませんが)押下しか検知してくれてないようで… >>675
Threadコマンドで割り込みさせないとか? 普段はチルトにブラウザの戻る、進むを割り当ててるんだけど、右クリック+チルトでタブ移動のショートカットを割り当てたりって出来ないかな? >>677
RButton & WheelRight::Send,^{Tab} >>678
これ右クリックが動かなくなるんですけど自分だけですかね >>679
乗っ取るんだから当たり前だろ
RButton::RButton を付け加えれば右クリ単押し離した時に右クリとしで作動するが右ドラッグは出来ない
~ を使えば乗っ取らないけどタブ移動時にも右クリが送信される
こんなこと俺は人に聞くまでも無くwiki読んで試して自力で把握できたけどなんでお前は出来ないんだ? >>680
なるほど
じゃあどれかを我慢しないといけないんですね >タブ移動時にも右クリ送信
ありがとうございます >>681
ブラウザだけそういう設定にすりゃいいじゃん
ブラウザなら右クリックをドラッグすることなんてまず無いので
ボタン離した時に右クリックでもまず問題ない
やり方はwikiで調べて タブのあるソフトってブラウザだけじゃないし共通で使いたいということのでは?
個人的にはブラウザが一番マウスジェスチャ使うから右ドラッグは必須だな >>683
その場合はマウスジェスチャでタブ移動もすればいいじゃん ごろ寝マウス使ってるんですけどahkだけだとドラッグ操作が不完全みたいなので
ごろ寝マウス専用の常駐キー置き換えソフトも常駐させてます
このような使い方ですと時折操作がおかしくなります
仕方ないのでahkをReloadさせると正常になります
これはお互いに干渉してるのでしょうか? ノートPC使うときは極力マウス操作したくないから
ブラウザはvimiumでキーボード操作
カーソル移動はahkにしてる 質問です 既に定義されてるホットキーを一時的に別の操作を割り当てたいです
例えばお絵かきソフトで、描画のペンツールは常用のホットキーを使い、範囲選択のときだけ変えるような
でそういう別系統操作にしたいときGUI出して「それが出てるときは分岐」みたく出来るかなとイメージしてるのですが難しいでしょうか >>688
ちょっとわかりにくいので具体例を書いて欲しい。 ああすみません
つまり言わば母艦のように使っている元ホットキー群があって、そこにはすでにズラズラとプログラムしてあるわけです
で継ぎ足し建築のごとく、違う系統の操作系をパカッとかぶせるように(使う時だけ乗っ取るように)できないかなと
同じキーから別の挙動を引き出したいとき、定義済なキーをもう一度定義しようとするとエラーが出ますが、それをなるべく母艦スクリプトに手を入れないでやりたいのです パカッと切り替えの判定分をコードで書けるなら #if で分岐
今あるスクリプトに手を加えたくないのなら
母艦?の方をSuspend して別ファイルのスクリプト立ち上げるスイッチスクリプトを作るとか ありがとうございます! suspendで最初に走ってるほうを止めるやり方は知らなかったのでこれでスッキリいける気がします トライしてみますm(_ _)m >>684
今マウスジェスチャでタブ移動してるけどそれが面倒だから右クリ&チルトでもタブ移動出来たらなーっていう感じだったんだけどね
右クリックを使うとやっぱり右クリに影響が出るから他のボタン使わないとなあって感じなんだね
ただチルトと組み合わせやすいボタンって右左クリック以外にないからやっぱりジェスチャで我慢しかなさそうだね ; Smart Wheelup
MouseGetPos, x, y
if(y>80)
Send,{WheelUp}
else
Send,^+{Tab}
とかやれば良いんだよ
縦スクロールバー付近なら縦スクロール
ウィンドウ下部付近なら横スクロール
とか好き勝手できる
他にもカーソル位置見て挙動を変えるというのは
モニタを9分割して起動するランチャの種類を変えるという
メタランチャ的な使い方もできる >>693
多ボタンマウス買えば?
俺はG600に普通のXButton1・2の他F13〜F24を割り当てて、各サイドボタン押しながらホイール上下で
タブ移動、AltTab/ShiftAltTab、Home/End、PgUp/PgDown、拡大/縮小、VolUp/VolDown
などを割り当ててる
サイド12ボタンほどじゃなくてもサイド6ボタンくらいでもahkと組み合わせれば工夫次第で数多くのアクションを
割り当てることができる firefoxでctr+bを無効にしたいのですが、どう書くといいんでしょうか?
ctrl+Bではエラーどす(´・ω・`) ^b ::Return
これでエラーになるんどすが、、、(´・ω・`)、、、 bの後に空白があるからじゃね?
それだと ctrl+b が全てで無効になるけどいいのか? F13以降のキーってどこに割り当ててる?
他のソフトでAHKでF13以降に設定したキーを割り当てたい時に、毎回ChangeKeyでキー1つ犠牲にして送らないといけないのかな
SHIFT+ファンクションでFで13以降とか出来たらいいんだけど >>703
多ボタンマウスやプログラマブルキーボード
SHIFT+ファンクションは直接そこにAHKで機能割り当てすりゃいいだけだからF13とか要らないだろ ^b::<+b
これでlshiftに置き換えされないのはなぜですかね?
>>702
できたどす >>705
それだとCtrl+Shift+bが送られるから
Shift+bに置き換えたいなら Send を省かず書きな
あとSendするコマンドには < は要らない どうも
SENDというのを使ってみましたが、動きませんね、、、
^b::Send,{^}{+}
これでshiftとctrlということですよね? >>707
Wiki読んでと… 明らかに読み込みが足りない質問ばかりだよ
もしくは、他にどんなサイトをググったの?ググっても載ってないなんてことはないでしょう
ついでに>>705の「できた」は>>702の↓が、まだ解決できてないと思うよ
>ctrl+b が全てで無効になるけどいいのか?
firefox以外でもctr+bが効かなくなってない?せめてそこまで確認してどうすれば…くらいじゃないと wiki読んでこれが出来ないならAutoHotKeyというかスクリプトは向いてないな
というより本当に読んでんのかってレベルだが
使用例に似たようなの書いてあるのに出来ないって…… おじいちゃんなんだから
真面目に取り合わないで
適当に付き合ってやればいい >>704
書き方が悪かった 例えばマウスのボタンに「Ctrl+Wした後にEsc」みたいなキーを割り当てたいとして、
AHKでF13にそれを割り当てた後、マウスのソフトでF13を割り当てる必要が出てくるだろ?
その時にChangekeyみたいので一旦F13をどっかのキーに割り当てといて、F13を送信する必要があるわけじゃん
そうやって色んなものを追加していって(今だとプログラマブルキーボードとかRev o mateとかに割り当てたくて)
F18とかF19とか使ってるんだけど、それを毎回insertキーとかをF17に割当→再起動→ソフトでF17キーを送信→また戻すっていうこの所作が面倒だから、
F13〜F21とかをSHIFTファンクションで出せたりするとchangekeyで割当の度に再起動しなくて済むからいいよっていう話
俺はすごい非効率なやり方してる気がするからみんなならもっと良いやり方があるんだろうなと思って聞いただけ a::send,{F13}
b::send,{F14}
みたいなのを作っといて割り当てるときだけ起動すればいいだろ >>712
Changekeyじゃなくて、AHKで
RAlt::f13
とかやっておいて、登録できないの?
strokeitではそれで登録できたけど >>712
マウスのユーティリティソフトなどにF13以降を割りあてる時はFスクリーンキーボードというフリーのソフトキーボード使ってる
とりあえずロジクールのLGSはこれ使ってF13〜F24割り当て可能 >>713-714
各ハードのユーティリティソフトにもよるだろうけどLGSではその方法は無理
AHKを管理者権限で実行してもLGSにF13〜F24を送ることはできず、押した元のキーそのまま入力される
なのでソフトキーボードからF13を入力してる
>>712が使ってるソフトでどうだかは分からないけどね >>716
ほんっっとにありがとう
正にこういうソフトを探してた。言う通りハードキーボードからだとAHKで指定しても物理キーの方が送信されちゃうから困ってた
このソフトならF13以降も出せそうですごい便利だ ほんと助かった 昔の記憶だから不確かかも知れないけど Sleep 挟めば AHK でもいけたはず。(Up/Down を分ける必要があったかは覚えてない)
F1::
Sleep 1000
Send {F20 Down}
Sleep 1000
Send {F20 Up}
Return >>718
いやそう言う問題ではないから
一応今それ試したけどLGSに入力されるのはF1のみでF20は入力されない
弾かれるかどうかはソフトによりけり そうか。昔使ってた時はそれで設定してたんだけど、今のLGSではだめなのね >>720
昔から使ってるけど同じだよ
何か別のソフトと記憶違いしてんだろう うーん、99%LGS だったと思うけど SetPoint の可能性も排除出来ないな。LGS を使ってたのは初代 G403 が発売された頃だから 2016 年頃か
自分自身の記憶が確かなのか興味が出てきたから、仮想環境だけどちょっと検証してみるわ。ありがとう 結論を述べると、当時俺が参考にしたスクリプトが見つかったので検証する必要はなかった(検証したけど)
https://gist.github.com/ryantheleach/2017fa84169f75926913c5c659da462f
動かなかった理由は設定の仕方が特殊だったのをすっかり忘れてた事
上の github のスクリプトに書いてあるけど、>>718 のスクリプトで実際に設定するには、F1 キーを押しながら LGS のクリアボタンを押す必要があった
この方法で LGS_9.02.65_x64_Logitech.exe + AHKx64 1.1.33.02 + Win10 20H2 19042.685 にて実際に設定出来る事を確認した >>723
横からだけど
フックの優先順位をその方法で対策しているんだね
簡単な記述で済むところがいいわー というか物理キーを押すからそちらが認識されてしまうわけで
AHKからのF13〜F20が認識されないわけじゃないんだよね?
GUIでF13〜F20ボタン作るとか(>715のFスクリーンキーボードかまさにそれだけど)
なんならMsgboxで「OKを押すとF13を送信します」とかでもいけるのでは >>712
改行が多いといわれたので、その1
・ahkが対応していないマウスボタンを使いたい
・マウス付属のユーティリティでは使いたいボタンにF13〜F24が割り当てできない
・・・という条件だと解釈
1.マウス付属のユーティリティで使いたいボタンにほぼ使い道の無い「scroll lock」を割り当てる(一度割り当てたら変更しない)
2.ahkで「scroll lock」にやりたい操作を記述する ※
※:一つのボタンで複数の操作したいからフラグを利用して切り分ける(例として2通り)
;shift+F1で操作1が出来るようになる
+F1::sousa:=1
;shift+F2で操作2が出来るようになる
+F2::sousa:=2 その2
;Switch で切り分ける方法
scrolllock::
Switch sousa {
Case 1:
msgbox, 操作 1
Case 2:
msgbox, 操作 2
}
return
;#IF使う方法
#IF (sousa=1)
scrolllock::msgbox, 操作 1
#IF (sousa=2)
scrolllock::msgbox, 操作 2
#IF
条件とかやりたいこととか違ってたらスマン >>726
いや>>723のやり方は”F1キーを押しながらクリアボタン押す”というのが肝みたい
LGSは後から押したキーが入力されるから普通のキーなら先にF1を認識した後でもF2を押せばそのままF2が入力される
けど>>718のスクリプトはF1を押しっぱなしにしなかった場合F1押して離した直後1秒以内にクリアを押してもF20は弾かれてしまう
原理は分からないけど>>725の言うように押しっぱなしにしておくことでフックの優先順位とかが変わるのかもしれない
だからMsgBoxなどでF13〜F24を送信してもやはり弾かれる >>731
wiki行ってページ右上に検索欄あるからそこに知りたい語句(単語)入れてenter >>731
特定のブラウザだったら#IfWinActive,ahk_exe chrome.exe
みたいにやった方が良くない? なんか呼ばれた気がした
教えて君五大要素
1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない できたよおじさん(´・ω・`)!!
#InstallKeybdHook
#UseHook
#IfWinActive,ahk_exe firefox.exe ;firefoxがアクティブ時
^b::Return
#IfWinActive >>736
出来たとか言ってるけど結局は>>733の言う通りにしてるだけ
自分がやりたい事あったら自分で調べる能力付けてくれよ次世代の子供たちのためにもね! 自分でも何を言ってるか分からないのでエスパーの人だけ聞いてほしい
パソコンを新しくしておそらくインストールした?もしくは予めあったソフトを使った?
ので(この時点で謎)起動はできてるんですが、プログラムを書くファイルが見当たりません
スタートアップ時に起動してるのでファイル場所を探したらデスクトップにあることを確認。
通常プログラム各ファイルも一緒にあるはずなんだけど見当たらず。
一体どこにプログラムを書くファイルがあるのか確認できる方法ってありますか?
もしくは新しく作るとか可能でしょうか? >>738
リレーショナルウェブブラウザにログインブートリモートバイアスをダブルクリックして
さかまくエクスプローリングが七つ目のアイコンからインストールされるHDMIを
Ctrlを押しながら黒体輻射の色収差にINすれば確認できるはず
自分でも何を言ってるかわからないのでよかったら試してみて >>738
>プログラムを書くファイル
これをメモ帳としよう。プログラム書けるし
であれば、Win+Rでファイル名を指定して実行を呼び出してnotepadと入力→Enter
これで起動できる。どこにあるかと言うのなら、OSによって違うのかもしれないが
Windowsの中のSystem32フォルダの中 面倒なので新しくインストールし直しました
ただ、アイコンが緑じゃなく編集用のになりました
目的の動きができてるので良しとします >>741
アイコンだけデスクトップにあり、編集できるahkファイルは他の場所にありました。
おそらくアイコンをクリックして起動させる、もしくはスタートアップに登録する目的で
移動したものと思われます。(推測(謎)) Autohotkey.exeのショートカットとahkファイルてことでしょ
編集できるAHKファイルはどこの場所だろうと好きに作って関連付け実行して構わんのだけど
autohotkey.exe直起動で読みにいくAutohotkey.ahkはマイドキュメントの中にあるよ(デフォルト) AHKで作ったGUIのタスクバーが明るすぎて、
常時最前面表示ではダークテーマUIのアプリとの相性がすこぶる悪い。
タスクバーを非表示か色を変えられないかWinSet, ExStyle, を試してみたんだけど、
自分の環境ではウインドウスタイルの設定が上手く機能してくれない。
困ったな。 +ToolWindowでタスクバーに非表示にできなかったっけ? >>745
自前GUIの話ならリファレンスの「GUI」項を参照すれば良いんでない? 英/米それぞれのGUI ウインドウスタイルの項を読んで目当てに近いスタイルで試してみたけれど、
(0x00400000 二重境界を持ち、タイトルを持たないウィンドウを作成します。)
WinSet, ExStyle, 0x00400000, [ウィンドウタイトル名] ではなぜかウィンドウの内容が左右反転のレイアウトになってしまった。
+ToolWindowは不勉強だったので、もうちょっと調べてみます。 何回も申し訳…
OSのタスクバーを消したいならWinHide(表示はWinShow)で出来る
自前のタスクバーの色など変更させるならGUIコマンドで部分的に変更するとかGUI自体を作り直すとか出来そうだけれど、
オレ環で確かめていないので間違ってるかも
そもそもの質問に対する答えじゃない可能性もあるので悪しからず まずはタスクバーなのかタイトルバーなのかはっきりしてくれ あらら…タイトルバーの話だったのか、分からんかったOTZ
やっぱ私日本語理解できない日本人違うのかもよね
私のレス全部削除してもらいたい(;_;) いやごめん質問者が何を想定してタスクバー言ってるのかわからないので
タスクバーていうのは画面下にあるOSのアレのみに対する呼称で個別Window内には存在しない
真にタスクバーの話ならバー内に表示されてる起動中アプリタスクの部分かなと思うけど
そんなところ特定のアプリだけ背景色が変わるとも考えづらいし
アプリ毎のタイトルバーの話ならうちの環境だとAhk GUIでも個人用設定で指定したアクセントカラーになってる
https://f.easyuploader.app/eu-prd/upload/20210117141438_594f47464c48554977666b6459354a51.png 2、3日前から AutoHotKey に初めて取り組み、全く初歩的なことでいろいろ躓いている。
選択部分をクリップボードに取り込んでユーザーが編集し、それを sword に格納したい
が、次のようなエラーメッセージが出て全く次に進められない。
なんでダメなのかさっぱり見当つかないので、誰かアドバイスよろ。
環境は Windows 10 Home x64、AutoHotKey ver.1.1.33.02 U64
A control's variable must be global or static.
Specifically: vsword
---> 045: GUI, Add, Edit, W300 vsword, %Clipboard% >>755
まず自分が書いたスクリプトを貼りましょう SearchBox()
{
sword := ""
backup := ClipboardAll
Clipboard = ; クリップボードをクリア
Send, ^c
ClipWait
;GUIウインドウを生成して表示
GUI, Add, Edit, W300 vsword, %Clipboard%
/*
GUI, Add, Button, y+10 Default, Google
GUI, Add, Button, x+5 GtoEnglish, 英語に翻訳
GUI, Add, Button, x+5 GtoJapanese , 日本語に翻訳
GUI, Add, Button, x+5 Gclose, キャンセル
GUI, Show, , 検索・翻訳アプリ
*/
MsgBox,,, %sword%
Clipboard := backup
Return
・・・ 以下略
ネットで拾ったものに手を加えたものだが、コメントアウトの部分は
DropDownリストで検索エンジンを選択するように変更予定。 エラーメッセージというのは、エラーの理由が書いてあるんですよ >>757
https://pastebin.pl/view/6830562e
閉じるボタンやESCでGUI閉じられるから、キャンセルボタン要らない気が ctrl + 1でwin + 1と同じ動きをさせたいです。
^1::#1
のようにしていますが、対象のウィンドウが複数ある場合、
wn + 1の場合はwinを押しながら1を押下するごとにウィンドウをサムネイル表示しながら切り替えることができますが、
ctrl + 1の場合、最初のウィンドウにしか切り替えることができません。
win + 1の動作をさせることはできないでしょうか? 昔挑戦したけどここで力尽きた(似て非なる挙動でボツ)
Send, {LWin Down}
Send, 1
KeyWait, Ctrl
While (!GetKeyState("Ctrl", "P")) {
If (GetKeyState("1", "P")) {
Send, 1
KeyWait, 1
}
}
Send, {LWin Up} 一般化して
アクティブウィンドウと同一のアプリケーションを列挙して
Zが一番下のものをアクティブにする
でいいんじゃね
んで
^1ならExplorerをアクティブにしてからローテーションする
^2ならNotepadをアクティブにしてからローテーションする v1.1.33.03 - March 1, 2021
●Changes & New Features | AutoHotkey
https://www.autohotkey.com/docs/AHKL_ChangeLog.htm >>763
アップデートしたら「alt::return」が効かなくなった
そのせいかaltに割り当てたホットキーが動かなくなったー、マジかよ 別にLかRをつければ良いだけのような
return表記はそもそも非推奨だし 重大なバグがあったのか分からんけど現在 v1.1.33.03 が落とせなくなってるね
>>765,767
リンク先の説明
>Deprecated: Use the synonym Enter instead to reduce ambiguity.
はキーリマップする時の表記を「return」じゃなく「Enter」にしろって事言ってるように読めるんだがな
で、>>764の「alt::return」はaltキーの本来の機能を無効にするという意味なんだわ 昔は「リターンキー」って呼び名の方が一般的だったよな
いつの頃からか「エンターキー」が一般的になったけど ほんとだ
落とそうとすると02が落ちてくるように戻ってる 「リターンキーはReturnコマンドで使用されているため、Enterと表記せよ」てことやね v1.1.33.04 - March 2, 2021
Removed dependency on the POPCNT instruction, which is not supported by old CPUs (e.g. Core 2).
●Changes & New Features | AutoHotkey
https://www.autohotkey.com/docs/AHKL_ChangeLog.htm v1.1.33.03 の修正点
>Fixed several issues with overlapping hotkeys.(以下に書かれてる詳細略)
このせいなのか?修飾キー(shift,alt,ctrl)の2度押しが動かなくなった
wikiサンプル集の「1つのキーに3種類以上の動作割り当て」スクリプトとv1.1.33.04で確認
なんか俺しかこういうこと言わないから"オレ環"なんだろうか…だとしたらスクリプト見直して書き換え必要かも(´・ω・`) >俺しかこういうこと言わないから
色々ありそうだからまだ様子見でアプデしてない説
俺はそう 取り込んである画像を探すimageserchではなく、
画面内の指定範囲内に同じパターンの画像が複数出てきたら座標を取り込む機能とかってあるのでしょうか?
具体的な使用例としては○○はどれか系のテストを突破するのに使う予定です
数種類画像が合計30個ほど一度に出てくるのですがそれぞれの画像自体は全く同じものなのでパターンみたいなのを認識出来たら突破できそうなので >>776
すみません説明不足でした。
仰る通り設問は毎回変わって、元になっている画像の種類自体は膨大ですので、
画像と設問をキャプチャしてセットで検索するのはできなくはないけど。。。といった感じです。
しかし、テストの設問に設定される画像は必ず30個の中で一番数が少ないもののようです。
例として30個中6種類あるとして、 A=7, B=6, C=6, D=6, E=3, F=2 答えはF このような感じです。
なのでアルゴリズムとしてはすべての画像から最も少ない画像パターンを探してその座標を取るという動作になると思われます。 v1.1.33.05で>>764と>>773が元通り使えるようになったからオレはこの版で様子見だな F1:: Reloadとした場合にリロードされるのはAutoHotkey.ahkだけなのでしょうか?
複数のスクリプトが起動してる時に全てリロードさせる方法はありませんか? >>781
そのAutoHotkey.ahkからrunで実行しているahkが
#SingleInstance,force
なら良いんじゃないかな 多分同一人物だと思うけどおさらい >536-539
その他の代案1
OnMessage()で親スプリクトから子スプリクトへリロード命令を投げる
利点: OnMessage()の使い方を覚えとくと色々応用が効く(かもしれない)
欠点: 子スプリクトに事前の仕込みが必要
代案2
~F1:: Reload を全ての子スプリクトにも仕込んでおく
利点: ホットキーコピペで済むので1番簡単
欠点: 代案1と同じ、リロードホットキー変えた時の修正が面倒
代案3
winget exist、winget ProcessPath、process close、run あたりを組み合わせて親側で子をkillしてから再度runさせる
利点: 親が把握してない手動スクリプトも一気にリロードできる
欠点: exe化してないスクリプトは多分フルパス取得だけじゃautohotkey.exeまでしか分かんないので不十分
コマンドライン文字列を調べる必要がある
ここの Path2_GetCommandLine( ) あたりが参考になるかも
https://w.atwiki.jp/eamat/pages/21.html 普通に親スクリプトにIncludeして1つのスクリプトとしておけば、Reloadしたときまとめてリロードされる。
SingleInstanceも関係ない 複数のスクリプトを常駐させている前提なら、それらを一つのスクリプトにまとめてしまえばreloadに関しては何の問題もないべ >>785
あれ・・・>>784とほぼ同じ事言ってたわ○| ̄|_
一応Includeするんじゃなくて管理しやすいように一つのスクリプトに全文を書くって意味で言ったんだけどね ウィンドウグループを作る前に空っぽにしたいなーと思いつつ
リファレンスを見てもそれっぽいコマンドが見つからずやきもきする今日この頃
作るたびにグループ名変えてもメモリ消費量が跳ね上がりそうで怖い 以下の機能を実装したいと思っています。
「とあるホットキーを押下すると、InputBoxが表示される」
「ただし既にInputBoxが作成済みで、他ウィンドウの背面に存在する場合は、前面に表示させる」
実現する為、以下のように記述しましたが上手くいきません。
-------------------------------
!Q::
IfWinExist,入力ボックス
{
WinActivate,入力ボックス
}
Else
{
InputBox,var,入力ボックス,,,150,110,-320,-300
}
Return
-------------------------------
恐らく、入力ボックスが存在する時はまだこのスレッドが終了していない訳なので、Alt+Qを押下しても何も起きないからだと思われます。
何か良い解決策はございませんでしょうか。
「存在するなら前面に出す」でなく「存在しようがすまいが一度スレッドを閉じて頭からやり直し」でも構いません。
回答がお分かりの方がいらっしゃいましたら、何卒ご教示の程を賜りますようお願い申し上げます。 InputBox表示中に同一スクリプト内から干渉する方法はたぶんない
別スクリプトならいけるのでInputboxを表示するahkを別に作ってrunさせる
もしくは>791のいうようにGUI作る >>791
>>792
ご返信誠にありがとうございます!
GUIは知りませんでした。また別スクリプトとして呼び出すという方法もあるんですね!
早速試してみたいと思います。
貴重なお時間をいただき本当にありがとうございました。
心より感謝申し上げます。 >>790
>入力ボックスが存在する時はまだこのスレッドが終了していない訳なので
とのことなのでSetTimerで疑似マルチスレッド化したら上手くいったっぽい
!Q::
IfWinExist,入力ボックス
WinActivate,入力ボックス
Else
SetTimer, InputBoxOpen, -1
Return
InputBoxOpen:
InputBox,var,入力ボックス,,,150,110,320,300
Return Win+LのスクリーンロックをAppsKey+Lに割り当てようとしていて下記2つを試したところ
ロック自体はできるのですが復帰した後にもう一度AppsKeyを押すまで
AppsKey押下状態が維持されていてlキー単体を押すとロックされてしまいます
> AppsKey & l:: DllCall("LockWorkStation")
> ~AppsKey & l:: DllCall("LockWorkStation")
どなたか解決方法をご存知ないでしょうか >>795
AppsKey & l::
KeyWait, AppsKey
MsgBox
; DllCall("LockWorkStation")
return
AppsKey::Send {AppsKey} CentBrowserの時のみ、ctrl+shift+alt+F2で、右クリック→ディレイ300ms→S送信
という操作を行いたいのですが反応しません。
SetTitleMatchModeを外しても反応が無かったので記述に問題があるのだと思いますが、何処が間違っているか分かる方いますでしょうか?
SetTitleMatchMode, 2
#IfWinActive, Chrome_WidgetWin_1
+^!F2::
MouseClick, right,
SetKeyDelay, 300
send,s
return
ご教授して頂ければ嬉しいです。宜しくお願い致します。 >>798
ウィンドウ指定の方法をよく読もう
あとSetKeyDelayの使い方も多分間違ってる気がする
単に右クリックとsend,sの間をあけたいだけならsleep, 300 >>800
ウィンドウ指定は一旦外してみたいのですが反応しませんでした…。
右クリックはSHIFT+F10で代替できるそうですので
SHIFT+F10→ディレイ→S送信をしたいのですが一切反応がありません。
winキー+F12で送信
#F12::
^F10
sleep, 300
send,s
return >>801
それSHIFT+F10じゃないしSendにすらなってねえし
一つずつ落ち着いて確認しながら書けよ 右クリメニュー出したいなら
Send,{AppsKey}
ウィンドウ指定の書き漏らしは>799
試行錯誤すんのはいいけど出されてるヒントスルーしないで
調べる、ちゃんと読むは徹底しよう まったく的外れな質問かもしれませんが教えてください。
dropboxを使っていてファイルの検索をするとき、通知領域のアイコンをクリックして
検索する文字を入力しているのですが、マウスでクリックするのが面倒で
ホットキーで出来たら便利と思って、どうにかできないかと検索していたら
そのソフトで出来るかもと思ってますが、そのようなことは可能でしょうか?
もし可能であればその設定方法を教えていただけないでしょうか。 >>804
DropBoxクライアントを使いたい場合、ショートカットがない時点で面倒そう(ImageSeachすることになるかも?)
Web版でいいなら
ttps://www.dropbox.com/search/personal?path=%2F&query=検索ワード
のようなものを、GUIを使って組み立ててRunするとか >>804
通知領域のアイコンってトレイアイコンのことでいいんだよね?
Win10ならトレイアイコンにフォーカスするショートカットキー Win+B がある
矢印キーで移動(dropboxの「d」など頭文字で選択も可)、Enterで選択、Appskeyでメニュー
それらのキー操作をAHKでマクロ化すればトレイ関係の操作は一通りAHKで出来る
ただしここは丸投げでスクリプト書いてもらう場所じゃないので>>1のwiki読んで
基礎は自分で勉強する人向け
自力でやってみて分からないことがあれば書いたスクリプトを貼って質問すると返事が付きやすい >>804
DropBox使ったことないので分からないが、トレイアイコンクリックでメニューが出て選ぶ感じなら
↓のスクリプトでcommandID 取得してpostmessageでスマートに
Get Info from Context Menu (x64/x32 compatible) - AutoHotkey Community
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=31971 >>804です。
みなさんありがとうございます。
>>807に教えてもらったサイトですが、なにが書いてあるのか自分にはさっぱりです。 >>808
少なくともあなたには難しいので避けた方がいい
解決策1 日本語Wikiはじめ、日本語サイトに目を通して要領を得る。困ったら助けを乞う。
解決策2 クラウドソーシングサイトに投げてここでシェアする。丸投げする。
現状では知識の無さから(?)質問が漠然としすぎているように見えるため、ボランティアでヒアリングかけたいと思う人もいない感じだと思われる
応援しています >>808
サンプルを交えてかなり易しく案内されているように見えるが...
メニュー周りをAHKで操作したいなら覚えておいて損は無いと思うよ 初心者相手に無茶言い過ぎでしょ
まずは>>1の日本語wikiのサンプルページよく読んでSendの使い方とか基本中の基本から学んでいかないと無理に決まってる インストールして設定すればすぐできるソフトを想定していたようだから
AHKは難しいんじゃないかな、一から学びましょうといっても
ここより気軽に こんなソフトスレで聞いたほうがいいかも知れない
ちょっとした小物系ならコード貼ってくれる人がいた記憶
運が良ければ作ってくれるのでは
気軽に「こんなソフトありませんか?」Part.188
https://egg.5ch.net/test/read.cgi/software/1605620913/ >>804
dropbox使ったことないからどんなアイコンか分からないんだけど
あまり変化しないアイコンならまさにimagesearchでいいんじゃないの?
1.dropboxのアイコンの出た状態で画面のキャプチャをbmp形式で取る
2.アイコンの絵を小さめに切り抜いてahkと同じフォルダに置く
3.AHKでホットキーが押されたらアイコン.bmpをimagesearchしてクリックするスクリプトを書く
の順で頑張ればいい
ImageSearch - AutoHotkey Wiki
http://ahkwiki.net/ImageSearch ついでだから画像ファイル名で指定した画像のある場所を左クリックする簡単関数を貼ってやろうとしたんだけど
「このスレッドにはもう書けません」エラーが出て書き込めないな なんでやねん >>813
だからWIN+Bでトレイの操作は出来るって
それよりも本人がスクリプトを学ぶ気あるかどうかの方が問題 >>816
他のD頭文字の常駐ソフトの数に依る部分がありメンテナンス性に難があるため、ImageSearchの方がいいと思われる。
それに、たかがユーティリティソフトの使い方を学ぼうとする酔狂なのは俺たちくらい。
なので学ぶ気がないことを責めるつもりはないが、対価もなしに作ってくださいは無理があろうと思われるのは同意。 >>817
複数あってもD押す回数で対処できる
メンテナンス性というなら画面解像度の変更やタスクバーの色など環境が変わると使えなくなるのは
ImageSearchでも起こることであり条件は同じ
俺も昔はWin7のころImageSearchでトレイアイコン操作してたが実際に使った上で色々とスマートな方法じゃない
と判断して今はWin+Bでキーボード操作のみで完結させてる
初心者が学ぶことを踏まえてもまずはキーボード操作のみで完結できる方法から入った方が学びやすいだろう AltTabMenuを使えば表示を固定できると記述があるのですが、押しっぱなしにしないと一瞬で非表示になってしまいます。
ショートカットを変えても駄目ですのでAltTabMenu自体がおかしいのでしょうか
それともそもそもAltTabMenuは固定できないものなのでしょうか? >>819
できるけど?
Ctrl+Alt+Tabでも同じような事出来るし >>820
何故か出来ないんですよね…
ただctrlを追加すれば同じ挙動が出来ることを教えていただいたおかげで大丈夫そうです ありがとうございます。 「無変換を押したら次に入力されるキーを2回連続で打つ」みたいなのって実現可能ですか? >>818
常駐ソフト事情によりDを押す回数が変動する可能性があるというところが問題。
そのあたりも対策しておかないと誤爆もあり得る。
ImageSearchならその点、アイコンが変われば動作しないため安全ではある。
学びやすさという点で、キーボードを推すのは同意。 >>822
どこで読み違えたのか、「2回F12を押したら任意の関数を走らせる」という
質問と無関係なスクリプトを作ってしまったが供養
https://pastebin.com/ZiNX0B9w
肝心の質問の内容については、組み込み変数A_PriorKeyがA_ThisHotkey(無変換)でなくなるタイミングをWhileとかで監視しておいて、
A_PriorKeyを2回Sendすればいいと思われます。
(英語検索したら答え出てきそう) >>823
常駐ソフトの数なんてそんな頻繁に変わるようなものじゃないから問題ない
実際ImageSearchをやめてキーボードマクロに変えてから誤爆なんて一度もしたことない >>822
くそほど雑だが
vk1D::
Input, Input_key, L1
send,%Input_key%
send,%Input_key%
Return windows起動後に、絶対autohotkeyがタスクトレイに出ないから毎回タスクマネージャーからプロセス切ってもう一回.ahk起動しないといけないんだよね
(そうすればタスクトレイに出てくる)
タスクスケジューラで管理者権限実行してるけどそれが悪いのかな? >>827
常駐用の.ahkファイルは「AutoHotkey.ahk」って名前にしてAutoHotkey.exeと同じフォルダに置いてる? >>828
名前はそうだけど、フォルダは別の所に置いてた
exeと一緒の所においてみる >>829
>名前はそうだけど、フォルダは別の所に置いてた
それインスト時に自動的に作られたフォルダのことだったら移動しても無意味かも…
まず、タスクスケジューラではどの時点で起動させてるのか?
「システム起動時」になってるなら「任意のユーザーのログオン時」にしてみるとか(逆の場合も)
または、タスクスケジューラは止めてスタートアップフォルダにahkかexeのショートカット置いてみるとか
C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
自分は>>829のような運用していないので間違ってるかも >>830
試してみた
タスクマネージャーは「任意のユーザーのログオン時」で「最上位の特権」にしてる
"C:\Program Files\AutoHotkey\AutoHotkey.exe"と同階層にAutoHotkey.ahkを置いて、それをタスクマネージャーでログオン時に設定
→このファイルを開く方法を選択してください と出て開けない
(普通に.ahkをダブルクリックすれば開けるし、autohotkeyが入っているのでahkの関連付けは出来てるはず タスクマネージャーから.ahk起動だと出来ない)
"C:\Program Files\AutoHotkey\AutoHotkey.exeをタスクマネージャーで指定して実行
やはりタスクトレイには表示されない
ただAutoHotkey.ahkはきちんと動いている。ただタスクトレイにのみ表示されない
確かスタートアップフォルダだと管理者権限で実行出来なかったんだよね
それでタスクマネージャーでする方法しかなくてそっちで管理者権限+スタートアップで起動したくてやってる それと本当によくわからないのが、
"C:\Program Files\AutoHotkey\AutoHotkey.ahk"をタスクマネージャーに設定するとファイルの関連付けが出来なくて開けないのに、
"D:\_Soft\Autohotkey\AutoHotkey.ahk"だとタスクマネージャーからでも実行できる
同じ.ahkなのにも関わらずパスで関連付けが変わることなんてあるのか…?何かがおかしいよね >>831
AutoHotkey.exeと同階層にAutoHotkey.ahkを置いたらAutoHotkey.exeを実行するだけで
自動的に同フォルダにある「AutoHotkey.ahk」を読み込むぞ たぶんahkを直接指定してるのが原因じゃね
プログラムにexeのパス、引数にahkファイルを指定したら行ける気がする >>834
exeと同一フォルダに「AutoHotkey.ahk」ってファイル名で置いてるなら引数にahkファイルを指定する必要も無い
もう一度言うがAutoHotkey.exeを実行するだけで自動的に同フォルダにある「AutoHotkey.ahk」を読み込む とりあえず、「タスクスケジューラ」と「タスクマネージャー」をごちゃ混ぜに書くのやめよう みんなAhk2Exeが同梱されてるのにコンパイルしないんだ >>837
AutoHotkey動作環境下(関連付け済み)だったら拡張子ahkなファイルならダブルクリックで起動するし
ちょっとした編集して試してまた編集…って出来るからわざわざ面倒くさいコンパイルなどしてられない
だからAutoHotkeyをアップデート(上書き)する時は本体exeとヘルプファイルだけしかしてないな >>833ー>>835
そう、それで今スタートアップに管理者権限にしたAutoHotkey.exeを置いたんだけどスタートで実行されない
普通にダブルクリックしたりexe起動なら実行されるし、タスクスケジューラからだと実行される(タスクトレイには出てこない)
ちなみに管理者権限じゃない.ahkならスタートアップに置いたら実行されるから管理者+スタートアップフォルダに置くっていうのが実行されない原因なんだと思う
それで、タスクスケジューラからだと何故かタスクトレイに出てこないっていうのが今回の問題なんだよね…。ちょっと一回他のスタートタスク消してみる
>>836
ごめん間違えてた 全部タスクスケジューラ
>>837
よく中身をエディットするのでコンパイルしたくないんですよね Program Files\にautohotkeyインストールしてるならAutoHotkey.ahkは
roaming(C:\Users\ユーザー名\AppData\Roaming\AutoHotkey)に置かなきゃダメじゃね?
それかマイドキュメント直下に作るか
http://ahkwiki.net/Usage#AutoHotkey.exe.E3.81.AE.E5.AE.9F.E8.A1.8C
Program Files以下は権限が面倒だから D:\_Soft作ってんのならインストール先そっちで統一したら?
そしたら"D:\_Soft\Autohotkey\AutoHotkey.ahk"でもいけるでしょ スタートアップのショートカットからでは起動できないのは誰でもそうなるから
結局問題はタスクトレイに出ないってだけ?
Windowsは昔からタスクバータスクトレイ周りは糞だからそんなこともあるんじゃね? まさかahkのどっかにNoTrayIcon記述されてるとかw 色々弄ってたら治った!と思ったら次は管理者権限がいらないスタートアップに登録してる方の.ahkがスタートアップ起動しなくなった…。
スタートアップに欲しいのが
・管理者権限欲しい.ahk
・プログラム起動用ショートカットの.ahk(管理者いらない)
の2つで、権限欲しい方は今タスクスケジューラ弄ってたらきちんとタスクトレイにも出るようになったんだけど、
そしたら何故かスタートアップにショートカット置いていた方の.ahkが動かなくなった
スタートアップにおいてる
https://i.imgur.com/qdhKmZX.png
タスクマネージャーのスタートアップにすら出てこない
https://i.imgur.com/81ElW13.png
ショートカットじゃなくて直接ファイル置いてみたけどスタートアップにも出てこない 片方管理者+片方管理者無しの.ahkは起動出来なくなったりしたのかなあ
スタートアップに置いてもシステムのスタートアップにも出てこない状態って何か原因分かる人いないでしょうか
>>840
.ahkはまとめています 先程exeと同じ場所に置いたら?ってのがあったのでおいただけなので、やっぱり.ahkは纏めることにしました。
>>842
さすがに見直したけどそこは大丈夫! いや違うわこれ autohotkeyを入れ直したら、管理者権限無しで開いた.ahkも管理者権限で起動してしまうようになった
ショートカット使って開いたテキストエディタが管理者権限で起動しちゃうからファイルドラッグできなくなった
多分.ahkが全て管理者権限で起動しちゃう状態になったからスタートアップでも起動しなくなっちゃったんだと思う
これって仕様かな? >>844
>>840の指摘と関連するが、Program Files内にインストールすると問題の切り分けに時間がかかりそうだから
バックアップ取っていったんアンインストールして、zip版使ってどうなるか確認してみたら?
自分はずっとzip版だし、AutoHotKey.ahkのショートカットをスタートアップに放り込んで問題なく起動する >>839
君がさっき>>831-832で言ってたのは「AutoHotkey.ahkをタスクスケジューラーで実行」だろ?
元々別フォルダに置いてたなら.ahkファイルを実行してたのだろうし
俺が言ってるのは「AutoHotkey.ahkを実行」ではなく「AutoHotkey.exeをタスクスケジューラーで実行」な
最初からそれをやってると言うなら君はもう少し正確に書くことを心掛けた方がいい >>843
俺が教えた方法を完全無視するならもう知らんわ
ちなみに俺はタスクスケジューラーからAutoHotkey.exeを管理者権限で実行して
トレイアイコンも問題無く表示されるけどな >>845
君が問題無いのは管理者権限不要な用途に限定されてるからだろう
管理者権限で実行するならスタートアップじゃ無理 >>839
AHKのプロセスがちゃんと起動するのが前提だけど「タスクスケジューラ」から
「ログオン時に開始」で起動して、プロセスは常駐してるのに「タスクトレイ」に
登録されないっていう問題ならば、「タスクスケジューラ」の「ログオン時に開始」
する設定の「詳細設定」で「遅延時間を指定する(K)」を有効にして「30秒」くらいに
するとうまくいかないかな?
他のアプリで同じ状態になったときの動作からの類推なのであてずっぽうだけど、
「タスクスケジューラ」でログオン時に自動起動すると、デスクトップシェルとして
動作するエクスプローラより早く、指定されたプログラムが起動されることが
あるみたいで遅延起動が必要になる場合があるみたい XPで動いてたスクリプトを10に移植してるんですけど簡単にメール出せる方法ありませんか?
outlook expressが10だと使えないみたい outlook expressって数十年ぶりに聞いた気がする
懐かしすぎる >>851
もはや完全にメーラーの話なんでAHK関係無くてスレチだが
素直にメールソフト乗り換えた方がいい
ただしWin10標準のメールは使い勝手悪いからフリーで使いやすいのいくつか試して自分に合うもの選ぶんだな
ちなみに俺は今はThunderbird使ってる >>851
そもそもメールソフトを介す必要があるのかどうか。
「autohotkey send email directly」とかで検索すると色々あるから試してみるとよさそう。
何ならPython経由してもいいだろうし AutoHotkey v3.0-alpha.1 - Switching to JavaScript (not really)
AutoHotkey v3.0-alpha.1 implements JavaScript in place of AutoHotkey's original language (which I've always thought of as unnamed).
I fully intend to bring the development of v2 alpha to an end within a few months, by releasing a beta.
公式フォーラムから3行抜き取った >>857は1行目公式フォーラムのスレ名
2行目は1ページ頭のレスの1文
3行目は2ページ頭のレスの1文
英語が苦手だからもっと別に情報あるかもしれんけど読み取れた中身はこんだけ キー押下でクリック 押上でもクリック
一度のクリックで二度クリックしたことにしたいと思い
3 up::
send 3
~3::Return
しかしこれだとキー押下中ずっとキー入力が発生してしまう
押下し続けても一度の入力だけにする方法はありますか? ~3::Return を 3:: にしてキーリピートをぬっ殺す
具体的には A_ThisHotkey A_PriorHotkey A_TimeSincePriorHotkey
あたりを使って判定文作ればいけると思う >>860
3::send_twice(A_ThisHotkey)
send_twice(key) {
Send, % key
KeyWait, % key
Send, % key
} AHKでUSBキーボードの「Sleep」「Power」キーの機能をスクリプトありますか?
上に書類置いた時に押されちゃうと電源落ちちゃって困るもんで…
(kbのキーを壊せというのはナシ) >>866 キー名は何を使えばいいんですかね?
ちなみに
Sleep::return ⇒機能せず(コンパイルエラーではない)
Power::return ⇒ コンパイルエラー(キー名無し)
Shutdown::return ⇒ 同上 >>866
キー名が無いんだろ
出来ないこと言うな APCI機能はAHKで殺すの難しいんじゃね
Menu→View → Key history and script info でキーコード取れるならいけるかもだが
OSの機能かBIOSでぬっ殺すのがよさげ
http://qa.elecom.co.jp/faq_detail.html?category=&id=2783 >>864-865
直リンしないので「キーボード 操作制限 防塵 透明 クリアケース ハードカバー」でggって欲しいんだけど
最初の方に出て来るキーボード全体を保護するようなハードカバー被せとけば?
ちょっとしたメモ書きならこの上で書けるから便利だし誤爆も無くなると思う
スレ違いスマン 困難ということがわかりました。皆さん回答ありがとう。 Ctrl Alt DeleteのショートカットをAHKで作ることは不可能でしょうか?
send, {lcontrol}{lalt}{delete}や
#t::Send,^!{delete}
では駄目でした。ご教授お願いしたいです。 ■質問
Chromeとかのウィンドウのスクロールは可能?
DllCall("GetScrollInfo"系を試したけど、うまく動かない… >>873
普通にWheelDownじゃアカンのか? >>872
単にタスクマネージャー起動したいだけなら
Run, "C:\Windows\SysWOW64\taskmgr.exe"
すればいい >>874
いや、
たとえば、ページ最上部から、何%とか、何ピクセルの位置までスクロール、って感じでやりたい。 >>876
何%とか必ず決まってるならその回数分WheelDownを繰り返せば?
決まってないならそんなスクリプト論理的にやりようないでしょ Chrome以外のウィンドウではその方法でスクロール調整できてるの? >>878
AHKのGuiコマンドで作った独自ウィンドウはできた。(海外の掲示板を参考に)
ピクセル単位でスクロール可能。
C#とかでも、多分可能。
でも、普通のアプリケーションのスクロールバーは、エラーで、できなかった… >>863
keyの部分をかえて使ってみたけど
3にしたらなにもうてないし
ほかのきーだとやっぱり押されている間はキー入力が発生しつづける >>880
だからKeyWait使えって
3::
Send, 3
Keywait, 3
Send, 3
Return >>880
関数の使い方が分かっていないのかな?
3にしたいなら変えなくてもそのままコピペでいいはずだけど >>882
#usehookを一番上に付けたらできるようになった
たすかった >>875
タスクマネージャーを起動したいのではなく、Ctrl Alt Deleteを押した際の画面を出したいのです。
トラックボールドライバの不具合や、マウスジェスチャツールがキーをフリーズさせてしまうことがあります。
その際にCtrl Alt Deleteを押せば解除されるので、頻繁に使うキーなのです。それを1キーで行いたいのですが…。 ホットキーで「[shift]+[:]で入力する[*]」を["]に,
「[shift]+[2]で入力する["]」を[@]に置き換えたくて
*::
Send, "
Return
"::
Send, @
Return
というスクリプトを書いてみたのですが[shift]+[:]も[shift]+[2]も@の入力
になってしまいます.
sendで生成した入力を無視させる方法とかありますか? >>888
君は[shift]+[:]と[shift]+[2]を押すんだろ?
だったらその押すキーを指定しようね >>890
#UseHook入れたら解決できました!ありがとうございますm(_ _)m テンキーで出来るから良いと思ってるんじゃないかな
それか、[alt]+: なんかのホットキーで「*」入力させてるとか
どっちにせよahkで何とでもなることだから心配することはない >>892
888です
あそこでは重要なところだけ抜き出すためにあの書き方でしたが,実際はもっと長い
スクリプトでノートPCをなんちゃってUS配列にしようとしてました
>>894
`:::では置換元としてうまく指定できなかったのでsc028::で指定しました
*はそのまま*::でも指定できました 無変換キーを右Shiftキーにリマップしたいけどできない
根本的に間違ってる気がするけど、どうしていいかわからんからヒントが欲しい
;--------------------------------------------------
;@
vk1D::
send, {RShift Down}
Loop{
if !GetKeyState("vk1D", "P"){
send, {RShift Up}
MsgBox, キーアップ
break
}
}
return
;--------------------------------------------------
;A
vk1D::
send,{RShift Down}
KeyWait, vk1D
send, {RShift Up}
MsgBox, キーアップ
return
;--------------------------------------------------
@A共に
[無変換]だけ押して離すと「キーアップ」が表示される
でも[無変換]を押しながら[a]を押すと「キーアップ」が表示されないし、[A]じゃなくて[a]が入力される >>897
普通のリマップではダメな理由あるならまず先にそれを説明すべきかと
少なくとも大文字小文字はリマップで出来る >>900
普通のリマップでもなんでもいいからできればいい
AHK使い始めたばっかで無知ですまん、その普通のやり方を教えて欲しい
ちなみに本来の目的は
ゲームで右Altを修飾キーとしてよく使う
↓
押しづらいから[無変換]を使いたい
そんでエディタとかで検証しやすいからShiftに置き換えて質問した >>901
日本語wikiの「リマップ」の項目よく読んで
たった一行で済む一番基本中の基本のスクリプト >>902
vk1D::RShift
ってこと?
これで[無変換]+a 押しても「a」が出力される
Auto-execueセクションになんか記述が必要だったりする? >>903
考えられる可能性としては
管理者権限で弾かれてるとか
もしくは無変換キーをChange Keyなどで弄ってるとか
vk1D::z
で無変換押してz入力出来るか? >>905
管理者権限で実行してるし、レジストリ関係は弄ってない、Win10でAHKのバージョンも最新版
vk1D::z
でz入力もできる
おま環ってことがわかっただけでも本当に助かった
常駐切ったり他PCで試したりいろいろやってみる
親切にありがとう解決したら報告するよ 何度もすまない
>>897>>903解決した
vk1D & 1 にも割当してたのがいけなかったみたい
vk1D & 1::
send, {RAlt Down}
send, 1
send, {RAlt Up}
Return
を消したら
vk1D::RAlt
で期待通りの動きしてくれた
二度目になるけど905ありがとう 恐れ入ります 見よう見まねで何種類か作って使用しているのですが
SetTitleMatchMode, 2 (中間一致)が適切に機能してくれず困っています
#Include を使って何枚かのファイルに分けているのですが
最初のファイルの先頭にSetTitleMatchMode, 2 を書いて全体に機能させないと動きません
動画のHULUを見るときのスキップ(矢印キー)をマウスのボタンに置き換えるだけなんですが、
SetTitleMatchMode,2
#IfWinActive, Hulu
XButton1::Send,{Left}
XButton2::Send,{Right}
SetTitleMatchMode %orig%
#IfWinActive
return
これだと動かないのですがこの機能だけ部分一致にするにはどのように記述すればいいのでしょうか 補足
部分一致にしなければならない理由は
見る番組ごとにウインドウのタイトルが変わってしまい
かといってクラスとかは他のウインドウと同じなので識別出来ず
タイトルに必ず入っているHuluの文字列で識別したいためです >>909
じゃあ全て部分一致のままでいいじゃん
SetTitleMatchMode は基本的にAuto-executeセクションに書くものだし >>908
特定のウィンドウだけ部分一致で判定、というのは#IfWinActiveでは無理なので代わりに#Ifを使ってください
#If Hulu_IsMyWindow()
XButton1::Send,{Left}
XButton2::Send,{Right}
#If
Hulu_IsMyWindow() {
WinGetActiveTitle title
Return InStr(title, "Hulu")
} >>911
ありがとうございます!
2段落めが全くわかりませんが貼り付けてやってみます!
>>910
まあそうなんだけどどこかで誤動作しないかなとか SetTitleMatchMode は2かRegExで使ってる人が多いと思うよ
ファイル編集するソフトの場合 無題 - メモ帳 みたいな表記が多いし
誤爆が怖いなら
#IfWinActive,メモ帳 ahk_class Notepad
みたいに条件重ねてやるといい >>911
丸コピーの貼り付けでうまく動作しました
ありがとうございました
>>913
なるほど正規表現と決めておけば汎用性高いかもしれないのでそれも試してみます
ありがとうございました >>914
>>912で
>まあそうなんだけどどこかで誤動作しないかなとか
などと言ってるのに>>911の関数を何の細工もせず丸々コピペって…
出来るだけ誤爆率低くしたいんならウインドウクラスで少しでも絞り込む方が良いと思うのに>>913無視なんだな 皆さんデバッグってどうやってますか?
ブラウザクリックして、保存、加工の長時間のループ処理をやらせているんですが、
どこの待ち時間を減らそうかとかどこで固まっているかを分かるいい方法ってありませんか?
今は要所にMspbox入れて確認してますが現在どこを実行中とかリアルタイムで分かるデバッガーみたいなのありませんかね? >>916
A_TickCount
OutputDebug
ListLines
ListVars
DBGpクライアントを利用したインタラクティブデバッグ
http://ahkwiki.net/Debug
今だったらVSCodeでやるのがポピュラーかな
https://qiita.com/eyuta/items/d5d2e87a693d5f65924c
まあうちはいまだに秀丸だけど >>915
動くかどうかやってみたので丸コピーでした
誤動作が心配だったのは全体を部分一致にしてしまうことでした
クラスを入れてもブラウザの他のウインドウも同じなので、、、。
最終的には正規表現に落ち着きました
ありがとうございました
正規表現、身構えちゃって .* で囲んだりとかしたけど結局
そのまま文字列入れるだけで大丈夫だった
まだよくわかっていませんが多分完全一致にする場合は
^と&で囲んだりしようと思います。 >>916
917の言うように、
VSCodeに拡張機能入れて、ブレークポイント付けてデバッグしてる。
流石はモダンエディタ、サジェストもされるし、使わない理由なし。 >>916
SciTE4AutoHotkey というAutoHotkeyに特化したエディタは昔からあることはある
が、更新は2014以降止まったままだけどGUI作成ツールとかの付録有り AHKで修飾キーの押しっぱなしに有効な対策はないでしょうか?
昨日押しっぱなしが知らないうちに発動して痛い目に合いました。
Firefoxで自分で入力した行を 無変換+マウス左クリック で消すスクリプトを以下のように書いて使っていました。
vk1Dsc07B & lbutton::
mouseclick, l, , , 3 ;三回左クリックして行を選択
send, {del} ;delで削除
return
しかし、いつの間に無変換が押しっぱなしになったようで、この状態でブックマークサイドバーのスクロールバーを何度もドラッグしたところ
ブックマーク選択→Del
がスクリプトにより何度も行われて気付かないうちにブックマークが何個か消えてしまいました。
Firefoxはブックマークはゴミ箱に移らず消去されるので何を消してしまったかわからない状態です。
https://did2memo.net/2013/10/03/autohotkey-ctrl-key-is-stuck/
このページを見たところ結局どういった方法が押しっぱなしに有効かいまいちわかりません。 スレチだけどfirefoxのブックマークって自動バックアップされてたはずだから
最近のじゃなければ戻せそう >>923
知らなかった、自動でブックマーク保存されていたんですね。
これで消してしまったブックマーク探してみます。 あれ?
はっちゅう君
要求は中止されました。SSL/TLSのセキュリティで保護されているチャネルを作成できませんでした
ってのが出てきて、起動できない >>922
BlockInput Send ; 管理者権限が必要
sc07B & LButton::
KeyWait LButton
; BlockInput On ; 代案
SendInput {LButton 3}
SendInput {Del}
; BlockInput Off
return
ホットキーすり抜け再現スクリプト(要管理者権限)
https://pastebin.com/yHS3MAtF >>927
ありがとうございます。
#InstallKeybdHook を書くのは効果があるのでしょうか?
今まで #InstallKeybdHook を書いていなかったので本日追加したのですが、
https://did2memo.net/2013/10/03/autohotkey-ctrl-key-is-stuck/
を見ると #InstallKeybdHook を書いても押しっぱなしが起こるのでいろいろやられているようですが、
押しっぱなしを0にするほどの効果はないということでしょうか? >>928
>>928
ホットストリングやキーボードフックを利用しないと設定できないホットキーではフックは自動で使用されます。
今回の場合、#Install***Hookを新たに書いても変化はありません。
どの程度の効果なのか分かりませんが、フックを使っても問題は発生します。
再現スクリプトと同じように、自分の環境でも以下の対策で問題発生しなくなりました。
BlockInput - Send中の横槍を防ぐ
SendInput - Sendを高速に処理できるモードにする >>929
>今回の場合、#Install***Hookを新たに書いても変化はありません
https://sites.google.com/site/autohotkeyjp/reference/commands/-InstallKeybdHook
に #InstallKeybdHook のメリットは
・#HotkeyModifierTimeout の設定にかかわらず修飾キーの状態復元が確実に行われる
とあるのですが、これは #InstallKeybdHook を書かなくても
a::
send,abc
return
のようになんらかのホットーキーを設定した時点で「#HotkeyModifierTimeout の設定にかかわらず修飾キーの状態復元が確実に行われる」
となるので #InstallKeybdHook は必要ないということでしょうか?
それと、BlockInput Send は http://ahkwiki.net/BlockInput では (2000/XP以外では無意味) と書かれているのですが
win8.1やwin10で効果はあるのでしょうか?
また書くとしたらAuto-executeの所に書くのですか? >>930
落ち着いてよく読んでください。
ホットキーを設定した時点ではなく
リマップ、ホットストリング、「キーボードフックを利用しないと設定できない(無変換やマウスボタン)」ホットキーではフックは自動で使用されます。
a::Send,abc はフックを使わなくても設定できるためフックの自動使用はされません。
#InstallKeybdHook、#InstallMouseHookコマンドを書く理由
キー入力を履歴に残したいデバックなどの場合に、フックが使われているのか考慮しないで済む。
#HotkeyModifierTimeout を考慮しないで済む。
以上のことから、とりあえず使っておけば問題が減ると覚えておいてください。
BlockInput
https://www.autohotkey.com/docs/commands/BlockInput.htm
BlockInputは読み込まれる位置ならどこに書いても大丈夫です(2000/XP以降で有効)。
>>927 >>931
ありがとうございます。
BlockInputは管理者権限がいるのでスタートアップに組み込むのは面倒くさそうなので、
とりあえずおいておいてAuto-executeセクションに
#InstallKeybdHook
sendmode, input
を書いたのでこれで様子を見てみます。 ControlSendで貼り付けができない
clipboard = %変数%
ClipWait
controlsend, ,%変数%
ならクリップボードの内容を入力できるのだがこれだと遅い
controlsendでctrl+vで貼り付けする方法がわからない
+{Ins}以外でたのむ
+{Ins}だとマイクラではりつけできないんだ >>933
controlsend, ,^v, A
ウィンドウ指定必要では? レスには書かなかっただけで
ControlSend, ,^v{enter},Minecraft* 1.16.5
とウィンドウしていしてるんだ
^vを書いても貼り付けされない
テキストにウィンドウ指定しても同様だった o::
Loop,1
{
FileReadLine,comando,minecraftコマンド1 - コピー.txt,%A_Index%
sleep,100
clipboard = %comando%
ClipWait
sleep,100
ControlSend, ,t,Minecraft* 1.16.5
sleep,300
ControlSend, ,^v,Minecraft* 1.16.5
}
return
これを使っているんだが 1.1.33.07 - April 21, 2021
Fixed tray icon freezing and becoming blurry after screen DPI changes.
Fixed hotkeys disabled by #InputLevel erroneously suppressing keys. >>935
PressDurationがデフォのままだと一瞬すぎて反応しないとか
SetKeyDelay, 10, 100
とかにしてみたらどうだろう >>938
SetKeyDelay, 10, 100
上につけたらコマンド貼り付けできた
ありがとう >>939
どういたしまして
ま、PressDuration100msはかなり余裕見て長めに言ったので連続して複数キー素早く入力したい場合は
適宜自分の環境や使用ソフトに合わせて反応できる範囲で短くするといい
10ms程度でも十分な場合もあるので 自分なりに調べて色々試しても解決の兆しが見えないので質問させて頂きます
Loop{
PixelSearch, FoundX, FoundY,719, 475, 721, 540, 0xA145A3, 30, Fast RGB
if GetKeyState("XButton2"){
if (ErrorLevel=0) {
send {Lbutton down}
send {Lbutton up}
}}
}return
これにXButton1を押した時に右クリックが反応するパターンを追加するにはどうしたらいいんでしょうか。 if GetKeyState(){...} をそのまま下にコピペしてXButton2とLbuttonを書き変えりゃいいんじゃないの >>942 前試してダメだったんですけど今試したら動作しました ありがとうございます 1.1.33.08 - April 23, 2021
Fixed non-zero SendLevel events erroneously being suppressed in cases not covered by the v1.1.33.07 fix:
・When there's a matching context-sensitive hotkey with a higher #InputLevel and no enabled global variant.
・When there's no matching key-down hotkey, but there's a key-up hotkey with a higher #InputLevel. 最近、Windows7をWindows10にした
そしたら、Winset, Region で描画範囲を制限したとき、消したいところが半透明でなにか残っている
Win7では完全に消えていたのに、どしたらいい? >>946
過去スレからコピペしてちょっと改造したのをwin7時代から使ってるけど、自分のもwin10ではタイトルバー含むウインドウ枠が完全に消えていない
完全に消す手段あるのか分からんけど個人的には偶にしか使わないし必要な情報は見れてるから諦めている
アドバイスにならなくてスマンね >>947
Win7からWin10にしてから、もういろいろとトラブルだらけ、トラブルが増えたよ
このウインドウ枠が消えないのもしょうがないのかなあ
もうWindows7に戻りてえ windowsキーの押しっぱなしについて質問です。
先日質問した、無変換キーの押しっぱなしは
#InstallKeybdHook
sendmode, input
を書いてから一週間一度も出ていないのですが、なぜかAHKスクリプトにはwindowsキーを使ったスクリプトは1つもないのに、
いつの間にか windowsキー の押しっぱなしにが二日連続で起こりました。
windowsキーが押しっぱなしになっている時は Fキー などを押すとショートカットで検索ウィンドウなどが表示されます。
解除するには一度windowsキーを押せば解除されます。
固定キー機能はオフにしています。
AHKにwindowsキー を使ったスクリプトを書いていないのにwindowsキーが押しっぱなしになるようなことはあるのでしょうか? >>949
世のキーボードユーティリティはAHKだけではないよ でもキー押しっぱなし問題が無いキーボードユーティリティは無いよね >>951
だからこそ、質問の回答として「AHK以外のキーボードユーティリティを利用しているケース」を提示しているのでは? >>950
AHKの他にキーボード操作を弄るようなアプリは使っていません。 >>953
オレには何が原因なのか全く分からんが、↓のアラート出すスクリプトで監視してなるべく事故を防ぐとか?
押しっぱなしが発生したら、(全ての)修飾キーを強制的にkey up発生させるスクリプト実行させる…とかすれば良いかも
AutoHotkey スレッド part8
https://pc12.5ch.net/test/read.cgi/software/1243005818/176-182
オレのところでは監視はしてないが修飾キー押しっぱなしになったら全ての修飾キーを強制的にkey up発生させるスクリプト実行させてるな
最近は殆ど発生しないが以前は発生する時はよく発生した >>949
Ctrlと勘違いしてない?
Ctrl + F
win7、win10 > 検索ボックスを選択する。
Windows ロゴ キー + F
win7 > コンピューターを検索する
win10 > フィードバック Hub >>955
使っているのがwin8.1なので
win+F で画面右側に検索チャームが出ました。 >>954
ありがとうございます。
リンク先の監視コードは全体的に三項演算しだらけでよくわからないのですが特に
%A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%
とあるのですが、組み込み変数 A_LoopField を%%で囲んでいる?
何をしているのでしょうか? A_LoopField == "Shift" だとしたら
Shiftという名の変数に値を入れるという意 >>958,959
ありがとうございます、なんとなくわかりました。
例えば A_LoopField == "Shift" なら
・shiftが押されていなければ変数shiftに0を代入
・shiftが押されている && 1つ前のループ時にshift==0(押されていなかった) ならshiftに現在の時刻を代入
・shiftが押されている && 1つ前のループ時にshift!=0(既に押されて時刻が代入されている) ならshiftに代入されている時刻をそのまま再度代入
のような感じですか。 >>954
全ての修飾キーを強制的にkey up発生させるスクリプトというのは
Send, {Ctrl up}
Send, {Alt up}
Send, {Shift up}
のように、Up部分だけを修飾キー分用意しているスクリプトでしょうか?
自分も修飾キーが押しっぱなしになったときの解決策として、上記のような修飾キーをkey upさせるスクリプトを
作ってみたのですが、押しっぱなしが発生したときに実行しても、押しっぱなしが直りません
参考までに、どんなスクリプトか教えていただけると助かります >>962
押しっぱなしバグはreloadじゃ直らんだろ いつの間にかAutoGUIが統合開発環境になっとる ごめん、書けた
カレンダーをキャレット位置に表示して、OKを押したら
日付を貼り付けるコードで、メモ帳では機能するのですが、
それ以外のプログラムではエラーが出て機能しません。
どこを修正したらよいでしょうか?
教えてください! 966続き
CoordMode Caret, Screen
Gui, Add, MonthCal, vDate
Gui, Add, Button, Default Section gDateTime_OK, OK
Gui, Add, Button, gDateTime_Cancel, Cancel
Gui Show, x%A_CaretX% y%A_CaretY%
return 966続き2
DateTime_OK:
Gui,Submit
FormatTime, timeString, %Date%, M月d日(dddd)
backup := ClipboardAll
Clipboard = %timeString%
Send, ^v
Sleep, 120
Clipboard := backup
Sleep, 120
ExitApp >>967
の下から3行目を
Gui, Add, Button, gCancel, Cancel
にしたら動くっぽいけど >>970
貼り付けミスでした。すいません。。
下記のコードは入れております。
メモ帳では動くのですが、他のプログラムでは
起動出来ないので原因がわかりません。。
DateTime_Cancel:
GuiClose:
GuiEscape:
ExitApp エラーが出るタイミングとエラーの内容を書いた方が良いんじゃないかな? あと、
Gui Show, x10 y10
で実験してみるとか >>973
Gui Show, x10 y10
上記のコードでは、どのアプリでも機能しますが、
キャレット位置にGuiを出現させたいと思っております。
エラー内容です。キャレット位置が所得出来てない気がするのですが
メモ帳では機能するので、原因がわからず困ってます。
Error: Invalid option.
Specifically: x y
Line#
011: Gui,Add,Button,Default Section gDateTime_OK,OK
012: Gui,Add,Button,gDateTime_Cancel,Cancel
---> 013: Gui,Show,x%A_CaretX% y%A_CaretY%
014: Return
017: Gui,Submit >>974
原因は「キャレットが取得できないアプリがある」で決定
対策としては取得できない時は、適当な数字を入れてやる
って感じかな >メモ帳では機能するのですが、それ以外のプログラムではエラーが出て機能しません。
エラーが出るウインドウ名をボカシて言わないからここまで長引くんだよなぁ
おそらくブラウザとかだろうな…あ、エクスプローラ(ファイラーの)もファイル名変更してる時のedit部分は
フォーカス失うとエラーは出ないが日付の貼り付けは出来ないね(実験してみた) >>974
キャレット位置が取得できない場合も当然あるので、その場合の条件づけをする
自分ならカーソル位置に表示するかな
CoordMode, Mouse, Screen
MouseGetPos, X, Y
IfNotEqual, A_CaretX,, Gui, Show, X%A_CaretX% Y%A_CaretY% NA
Else, Gui, Show, X%X% Y%Y% NA >>975
>>976
機能しないプログラムはVSCODEやThunderbirdのメール本文でした。
キャレット位置は結構所得出来ないものなのですね。
>>977
コードを参考にして、現在はGUIをアクティブウィンドウの中央へ
WinMoveで無理やり動かしすようにしました。
このスレでは色々勉強させてもらってます。本当にありがとうございました! 両方共まさにブラウザですやん
VSCodeはElectron(Chromium)だし >>979
ブラウザはキャレット位置の所得が難しいんですね。
ClipboardHistoryはAHKで記述されてると思うのですが、
これはキャレット位置が所得できてますよね。
コードを見てみたのですが、さっぱりわかりませんでしたw ClipboardHistoryってblank-noteってページのやつ?
ベクターからDLして実行してみたけどVSCodeのキャレット位置は取れてなくない?
うちではマウスカーソル位置でポップアップする
Thunderbirdは知らんけどFirefoxもマウス位置だったよ >>981
おっしゃる通り、blank-note氏のClipboardHistoryです。
確かにキャレット位置は所得出来てなかったですね。
設定でキャレット位置出現にしてもVSCODEやThunderbirdはマウス位置でした。
勘違いしてすいません。。
AHKではキャレット位置所得が難しいことがはっきりわかりました。
わざわざご確認をいただきありがとうございました。 どうもいいことなんだが気になってしょうがない
Xキャレット位置所得(しょとく)
〇キャレット位置取得(しゅとく) JP配列のノートに自宅ではUS配列を繋げてるんですが
JP用スクリプトとUS用スクリプトをグローバルホットキーで切り替えるにはどうしたらいいですか?
イメージとしてはShift+F12でJPとUSをトグルして切り替えるような感じです
キーボードを認識して自動切替が理想ですけどそれはさすがに無理そうなので >>985
動作確認済み。
is_usはAuto-executeセクションで定義されたし。
[AutoHotkey.ahk]
is_us := false
#If, is_us==false
#Include, us.ahk
#If, is_us!=false
#Include, jp.ahk
#If
[jp.ahk]
0::MsgBox, jp
[us.ahk]
0::MsgBox, us >>986
usとjpが意味上で逆なのは見逃していただいて #If (!isUsKeyboard)
; jp用スクリプト
#If (isUsKeyboard)
;us用スクリプト
#If
+F12:: isUsKeyboard := !isUsKeyboard
JPとUSでスプリクト切り替える意図が書かれてないけど
単純にOSのキー配列設定はJPのままでUSキーボードを使いたいってことなら
ULE4JISおすすめ >>986
これはどこにis_usの切り替えを書けばいいですか?
>>988
目的は、US配列の場合はLAlt、JP配列の場合は無変換キーを使ってijklでカーソル移動をしようとしています
試しに以下を書きましたがロード時にJP、USのメッセージボックスが立て続けに出るだけで
それ以降shift f12を押してもメッセージボックスが出てきません
#If (!isUsKeyboard)
Msgbox, JP
#If (isUsKeyboard)
Msgbox, US
#If
+F12:: isUsKeyboard := !isUsKeyboard まずは#Ifとホットキーのヘルプ読んできて
http://ahkwiki.net/-If
http://ahkwiki.net/Hotkeys
>988ではトグルの +F12::を#If の外に置いてるからShift+F12でメッセージ表示したいならこう
#If
+F12::
isUsKeyboard := !isUsKeyboard
msgbox,% "isUsKeyboard : " isUsKeyboard
Return
USとJPそれぞれの#If範囲内の挙動を確認したいなら>986のようにホットキー作って
#If (!isUsKeyboard)
0::Msgbox, JP
#If (isUsKeyboard)
0::Msgbox, US
Includeでファイル分けるかは好み(やってることは>986も>988も同じ)
LAlt or 無変換 のカーソル移動は面倒なことになりそうな予感 >>988,990
---------------------
#If (isUsKeyboard)
Msgbox, US
←ここを空けて
#If ←こことくっ付ける
+F12:: 〜 ←ここをくっ付ける
---------------------
横から悪いが、教えるんなら↑みたいな紛らわしい書き方しない方が良いんでは? >>990
動きました
ありがとうございます
USとJPで共通の位置にあるのがLAltと無変換でホームポジションから動かさなくてよいのでそうしようと思った次第です >>991
>>988,990
スマン、wikiでもそんな書き方してるね
>例3) 文脈に依存しないホットキー
>
>#If
>Esc::ExitApp
自分はいつも↓のように一セットで考えてるので…
---------------------
#If (ほげほげ)
〜
#If
--------------------- >>993訂正
---------------------
#If (ほげほげ 1)
〜
#If (ほげほげ 2)
〜
#If
--------------------- #endifとみなすか新しい#If定義とみなすかって話?
Ahkには#endifの記法はないので、あくまで #If からが次の塊って認識
次スレ立てられなかったんで誰かお願い
(全部貼ると怒られるので>1の変更箇所抜粋)
AutoHotkey スレッド part29
!extend::vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
■配布元
http://ahkscript.org/download/
■前スレ
AutoHotkey スレッド part28
https://egg.5ch.net/test/read.cgi/software/1585906506/ 以下新しいテンプレです。ミスで立てられなくなってしまったので、どなたかスレ立てをお願い致します。
!extend:checked:vvvvvv:1000:512
!extend:checked:vvvvvv:1000:512
!extend:checked:vvvvvv:1000:512
↑スレ立てする時は3行にして下さい
■配布元
https://autohotkey.com/download/
■前スレ
AutoHotkey スレッド part28
https://egg.5ch.net/test/read.cgi/software/1585906506/
■日本語解説等
AutoHotkey Wiki
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://hdd.s300.xrea.com/ahk/
AutoHotkeyJp(過去ログdatあり)
https://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
https://www6.atwiki.jp/eamat/
■スクリプト投稿
Autohotkey専用うpろだ
https://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
https://pastebin.com/
■その他のテンプレ(5chのURL規制が厳しいのでpastebinに退避しました)
https://pastebin.com/raw/cGhVqtYT
※テンプレここまで このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 404日 1時間 2分 1秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。