1 :
名無しさん@お腹いっぱい。 :
2013/05/05(日) 12:47:38.90 ID:QdZjR4QB0
■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理です。
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。(
ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると「〜 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、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, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:
http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q3:GUI作るのめんどくせ〜〜
A3:公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q4:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
※ AutoHotkey_H(AutoHotkey.dll)を利用すると真のマルチスレッドが利用可。
Q5:AHK、AHKLx86、AHKLx64の共存は出来る? A5:それぞれを違うフォルダ(ディレクトリ)にインストールすれば共存できます。 但し、インストーラーを使って最後にインストールしたAutohotkey(Normal or x86 or x64) に対してahkファイルの関連付けが行われますので、レジストリエディタ(Regedit.exe)や FileTypesMan等のツールを使って関連付を変更してください。 ahkファイルをAHK Normal、ahlファイルをAHKLx86、ah6ファイルをAHKLx64といったように 別々の拡張子に関連付けが可能です。 それぞれに関連付けしたファイルに対してドラッグアンドドロップを有効にするにはレジストリの [HKEY_CLASSES_ROOT\ファイルタイプの名前\ShellEx\DropHandler] の (規定) のデータを {86C86720-42A0-1069-A2E8-08002B30309D} にする。
>>1 AutoHotkey.dllが404だしもう開発してなさそうやね
次から削ったほうがいいかも
AHKportableは採用外?
今autohotkeyもどきを描いてて スクリプト(ユーザーが書く部分)を scala によって scala または java のコードに自動変換してそれをコンパイルするというフローで進めてるんですが ベターな案ってあります?
>>14 コンパイラそのものを書くことになり大変なので勘弁
16 :
980 :2013/05/07(火) 05:15:59.39 ID:IV6ZnMW00
前スレの
>>980 です。コード貼ってくれた方ありがとうございましたー
貼られたのを元にいろいろ見てたのですが、やっぱ自分にはできそうもないので一旦諦めます><
このソフトが自由自在に使える人が羨ましいですほんと・・・
>>15 コンパイラが用意されてる言語をスクリプトとして利用する。
追加機能はプリプロセッサで処理。
プリプロセッサを作るだけならそんな大変でもない。
>>17 そうですね
プリプロセッサみたいなものを作る方向なんです
そのものになるかはちょっと微妙ですが
AHKをつくるにあたって こういうところがAHKを使っていて不足、みたいなところがあったら聞かせていただけないでしょうか? 今考えていることの一つは if文で } の位置 を行末におけるとか 一文にに命令かけるとか、普通のプログラミング言語っぽくしたほうが使いやすいかな、というところです
一行いいね いっそ全部JavaScript互換で
AHKで一番のクソ仕様は&でコンボキーにした場合修飾キーが死ぬってとこだと思う しかもwinactiveでくくっても死んだままが続くっていう。 だから前スレ915でスペースで殺さない方法としてワンショットモデファイヤする場合冗長なスクリプトになっちゃってるんじゃないかな
たとえばaを修飾キーにして、Bで何らかの動作をさせると a & b::send,なんちゃら ってかくじゃん? この場合aが修飾キーになって、入力を受け付けなくなる。 a up::send,aで回避できるといえばそうなんだけど(実際ワンショットモデファイヤってそういうものだし) これ#ifwinactiveでくくった先でも&のほうが優先されて、押しっぱなしは入力を受け付けない。 ソフトによってはサスペンドさせないと致命的な動作をする。 たとえばアクションゲームとか、押しっぱなしで移動を行うもの。 コレを回避するにはAHKファイルを2個走らせるとかいう力技もあるんだけど動作が不安定で、ワンショットモデファイヤのサンプルスクリプト書いてる人はだいたいコレをプログラマブルに回避してるっぽい。 毎回サスペンドさせればいいっちゃそれでもいいけどなかなかスマートにはいかないね
#ifだと多分大丈夫
#If GetKeyState("a") b::send, c #If 定義が冗長っちゃ冗長だが
キーリピートも擬似的に再現してるってのが結構キツイね downとupを書き込まずにキー本来の動作をさせるってどうすれば出来るんだろう。
いや、キーリピートがあるのが本来の動作なわけだが
AHKのキーリピートは内部で連打処理してるんじゃなかったっけ 見た目的には同じ動作だけど
ゲームで Esc & h :: Send, {right } 動作の 押しっぱなしが効かなかったことがあるそのへんかね
本来の動作させないとゲーム関係はめちゃくちゃな動きするな ロックマンっぽい横スクロールゲームとかダッシュ連発して動けなかった。 指定キーdown、指定キーupでうまく動いたけど
"名前を付けて保存" ダイアログを出しているアプリケーションなどを 特定する方法ってないですか? Chromeの出した"名前を付けて保存"ダイアログだったら 〜を実行 のように処理を分けたいのですが。
WinGet, OutputVar , ProcessName, 名前を付けて保存
autohotkey は内部的にreg だか dll使ってるけど このコマンドを使うと〜みたいな記述を本家でつい先日見かけたんですが 場所がわからなくなってしまいました 心当たりある人いますか?
左手入力の配列って皆どうしてるんだ さっぱり思いつかない
前スレ後半でちょっと話題になってたが、鏡面反転がよさげだ
スクリプト中でマウス使って範囲を指定するのですが、 エクスプローラ上でマウス使って範囲選択するときのように 該当範囲を点線(実線でもいい)で表示したいです。 何か良い案か関数かコマンドありませんか? 今のとこ位置合わせに使ってる下のを流用するつもりなんですが、 重いしスマートじゃないしで。 そもそもAHKって描画機能はないよね? 普通は外部ツールと連携してるんでしょうか 久々に更新履歴見たらGUIが作りやすくなってるねー CoordMode, Mouse, Screen SetTimer, beam, 1000 beam: MouseGetPos, msX, msY If( msX+1=mnX AND msY+1=mnY ) ;マウスが動いてない時 Return mnX:=msX+1 mnY:=msY+1 ToolTip,% "x= " mnX "`n" "y= " mnY Gui, 3:+LastFound -Border +ToolWindow +AlwaysOnTop -Caption +0x02000000 -0x0CC00000 +E0x00080020 Gui, 3:Color, 0x00FF00 WinSet, Transparent, 255 WinSet, Region, 0-%msY% 0-%mnY% %msX%-%mnY% %msX%-800 %mnX%-800 %mnX%-%mnY% 1280-%mnY% 1280-%msY% %mnX%-%msY% %mnX%-0 %msX%-0 %msX%-%msY% Gui, 3:Show, NA x0 y0 w1280 h800 Return
AHKに描画機能ってのは、どうなんだろ? マウスジェスチャーでは線引けるけど、あれはどういう処理してるか分解したことないからわからない
マウスジェスチャーで軌跡が描かれるって感じですか? 流行らせるページの人のだよね。API使ってそうだ見てみます
線じゃねーじゃんw gdi.dllで文字取り出してるのはすごいんだけど、 表示させ方がAHKのGUIっていう同じ方法でした。
長方形なら、Region より TransColor でボーダー以外を透過するほうが軽そうな気がする。 Gui, Color, Red Gui, +LastFound WinSet, TransColor, Red Gui, -Caption +Border Gui, Show, NA h100 w100 Gdip.ahk ってのを使えば簡単にいろいろ描画できるらしいが、詳しくは知らない。
慣れてくるとキーボードカスタム楽しいな 常駐ソフトもかなり減ったし
>>41 すばらしいアイデアをありがとう
Gdip.ahk色々便利に使えそう、そのうち使おう。
最終的な表示方法は同じみたいだから
今回は41使いますサンクス
Autohotkeyってgosubで引数に式入れてサブルーチンに渡すことって出来る? ググり方が悪いのかもしれないけど調べても具体例がなかった
素直に関数じゃアカンの?
つーかまんま関数じゃないのかソレ
もしかして複数行の式を渡そうとしてるのかな
MouseGestureL で、 AutoHotKey で定義してあるキー入力を 発生させることって出来る? 要は、あるマウスジェスチャーをしたら Ctrl+R を発生させるようにして、 その Ctrl+R を AutoHotKey に拾わせる(AutoHotKey に設定してある Ctrl+R の動作をさせる) という具合。 普通に書くと AutoHotKey は反応せず、そのまま Ctrl+R が送られるようで・・・ おんなじマクロを AutoHotKey と MouseGestureL に書くのがめんどいのです。
>>48 デキルヨー
MG_Userのとこがスッカラカンだから好きに書き込めばいい。
もしくはあたらしくインクルードでahkファイルを追加してやればいい。
ただし、上位に来ない記入をしないとマウスジェスチャー側が機能しなくなる
ついでにgosubでくくればマウスジェスチャーのほうでも普通に読みこんでくれる。 慣性ホイールとかはマウスジェスチャーに組み込んでおくと捗る
>>49 レスありがとう
教えていただいたのって、マクロの使い回しですよね?
キーの使い回し(なんか表現がおかしい・・・)はできないもんですかね?
#includeでも別プロセスでもキーボードだったら仮想キー発行でホットキーラベルには飛べるはずだけど $^r:: ってやってるなら$はずす control-r はダミーで実はマウスX1なんですとかだったら知らん
>>52 指摘ありがと
自分の説明が絶望的にダメだったことに気がついた
MouseGestureL で、
RB_L に
Send, ^r
と記述しておいて、上記イベント発生時にAutoHotKey の
^r::run, hogehoge
の行に書いてある run を実行したい、ということです
それはGosubじゃだめ? RB_Lの条件内にgosub,Ctrl_r ^r::gosub,Ctrl_r Ctrl_r: run, hogehoge return で出来るんじゃないの?
Ctrl+r を拾う側がキーボードフックを使っていなければ
>>52 も言っているように飛べる。
キーボードフックを使っている場合、SendLevel と #InputLevel を調整すればいい。
SendLevel, 1
Send, ^r
>>55 SendLevel, 1
を使って希望通りの動作をさせることができました。
ありがとう
>>54 AutoHotKey 側の処理はもう書いちゃってて、あとから MouseGestureL を使い始めたので、
gosub だと都合が悪かったです。
でも、参考になりました。
ありがとう
同じような質問ですが、 サイドボタンの戻る/進む暴発防止のために autohotkey上でXButton1にScrollLock等無難なキーをリマップして、 MouseGesture.ahk上でScrollLockを新規ボタンに設定して、そのキーを使った動作定義を作りたいのですがうまく動作しません。 XButton1を押せばScrollLockキーが押された状態になるのですが、 XButton1を押しながらマウスジェスチャをしても設定した動作が発動しない感じです 上のレスを参考にして、autohotkeyのAuto-executeセクションにSendLevel, 1を設定したのですが同じでした どうすればいいのでしょうか
>4
>>57 SendLevel - AutoHotkey Wiki
ttp://ahkwiki.net/SendLevel >すべての新たに開始したホットキーまたはホットストリングスレッドではホットキーまたはホットストリングのInputLevelに等しいSendLevelを開始する。
ということなので、Auto-execute セクションで SendLevel を指定しても無駄で、
#InputLevel を設定すればいいらしい。面倒くさい仕様だね。
InputLevel を変えたくない場合は、
SendLevel, 1
Send, {ScrollLock down}
と
SendLevel, 1
Send, {ScrollLock up}
に分ければいいんじゃないかな。
>>59 うまくいきました!
これでマウスユーティリティソフトに頼らなくていいので
USB環境でもMouseGesture.ahkを使えるようになりました
本当にありがとうございました
s::a a:: Send {Enter}nn{Enter} return sを押した時に、nnではなくaを入力させるにはどう修正すればいいですか?
62 :
61 :2013/05/20(月) 00:06:19.36 ID:XgcPbxYC0
解決したから無しで
今関数で1つのキーをダブルクリックした時にsendで送るルーチンかいてるんですがエラーが出て読み込んでくれません。 何が足りないんでしょう・・・? Doubleclick2(double, single, keypush){ Global WClick if(A_TickCount<WClick){ sendinput % double WClick = 0 }else{ WClick:=A_TickCount+300 keywait,%A_thishotkey%,T0.4 if(errorlevel==0){ sendinput % keypush }else{ sendinput % single keywait,%A_thishotkey% }
ああ、自己解決しました。 関数閉じ忘れてた
関数ライブラリスクリプトを使っているのですが あるahkファイルが参照するライブラリディレクトリを指定するにはどうすればいいのでしょうか 保存場所が離れている複数のahkファイルで1つのライブラリディレクトリを使いたいので。 usbに入れて出先で使うことを想定しているので、ライブラリディレクトリをマイドキュメントに置けないし ahkファイル毎に置いて煩雑になるのも避けたいのです
#Include *i %A_ScriptDir%\ インクルードとスクリプト本体のいる場所からの相対パスの合わせ技でポータブル環境でも無敵
#Includeも一応試したつもりだったんですが もう一度試してみます
試した感じでは #Include "ディレクトリパス" では#Includeを記述する際の基準ディレクトリを変えることはできても ライブラリディレクトリを指定することはできなかったです
ライブラリまで持ち歩きたいのならAUtohotkeyportableをDLしたほうが早いと思う。 batでポータブルexeに引数で渡せばいいよ。
転載自由ってなんだ まとめサイト用ってことか
関数作ったんですけど渡す変数が多くてこんがらがりそうです。 たとえば a::kansuu("","","","","",) みたいな事になってます。 これって"",で空欄の関数渡すところにコメントアウトで目印付けられませんか?
>>72 a::kansuu("" ;コメント1
,"" ;コメント2
,"") ;コメント3
ならできるけど
kansuu("" /*コメント1*/,"" /*コメント2*/,"" /*コメント3*/)
kansuu("" ;コメント1,"" ;コメント2,"" ;コメント3)
はできない
a::kansuu("","","","","",) ;kansuu("コメント1","コメント2","コメント3","コメント4","コメント5",) とかは?
>>71 書き込めない人用だから、書ける人がこっちへ転載してくれって意味かと
つか立てるなら避難スレってスレタイに書いといてほしかった
>>72 行バラせばできる。長くなるけど
kansuu("" ;引数1
,"" ;引数2
,"" ;引数3
,"") ;引数4
あとは関数側で必須の因数以外は省略可能にしておくといいと思う
kansuu(x, y, w="", h="",WinTitle="A",WinText="") {
WinMove WinTitle, WinText, x, y, w, h
}
>>75 俺はコレだな。
あとは関数そのものを分解して減らすか
func(arg1,/**/ arg2,/**/...) この書き方って仮に可能だとしても、そのうち邪魔に感じると思うw
過去ログにあった以下のスクリプトを実行すると、以下のエラーを吐いて機能しません
ttp://hibari.2ch.net/test/read.cgi/software/1280482227/913 >■ エクスプローラで選択中のファイルのフルパスをコピー
> COMをりようしているので、特殊フォルダがあってもOK
>
>SetTitleMatchMode, RegEx
>#IfWinActive, ahk_class CabinetWClass|ExploreWClass
>#c::
> FileList:=
> For window in ComObjCreate("Shell.Application").Windows
> If ( window.hwnd == WinExist() ){
> For item in window.document.SelectedItems
> FileList .= item.path "`n"
> Break
> }
> Clipboard:=FileList, window:=item:=
> Return
Error:0x80008045
Source:(null)
description:(null)
HelpFile:(null)
HelpContect:(null)
Specifically: hwnd
→ If ( window.hwnd == WinExist() ){
Continu runnning the script ?
Windows Vista Service Pack 2 (x86)
AutoHotKeyL v1.1.10.01
MSDNなどを調べて、windowがShellWindows objectらしくて hwndやdocumentといったメソッドやプロパティ?は持たない、という所まではわかったんですが そこから先に進めません どのように修正すれば・・・・・ というか、そもそもどこが悪いんでしょうか?
これじゃだめ? F1:: send,^c ClipWait 2 MsgBox % Clipboard Return
>>81 ありがとうございます。それで行けました
>>79 の特殊フォルダがあってもOK、の部分が惜しい気がしましたが
ふだん使っているフォルダを幾つか試してどれも大丈夫だったので
これを使わせていただきます
にしてもすごいシンプルになったな・・
google 日本語入力で ひらがなを入力中かどうかの検出ってできます? アルファベットを打ちたいのに ひらがなをうっちゃたときにF9で売ってしまったものを英字にしつつ 英字入力モードに直したいのです
IMEfunk.ahkってのとはまた違うのか a:: Send,^+{Left} Backup := ClipboardAll Clipboard = Send,^x{vkF4sc029} ClipWait,1 Send,%Clipboard% Clipboard := Backup Return っていうのがそのまま使えるんじゃね
駄目だ思いつかない。 キー二連打に動作を割り当てたら、最初の1打目は絶対実行されるよね ダブルクリックした時は最初のキー命令を破棄することって出来るのかな もしくは 1打目からタイム計測してタイムアウトで1打目、タイムアウト前に2連打してたらダブルクリック動作 ていうふうにしたいんだけど書き方が思いつかない
A_TimeSinceThisHotkey A_TimeSinceThisHotkey A_TickCount あたりを適当に組み合わせればおk
ahkでrunでアプリを起動するとそのアプリの作業ディレクトリ?がahkのあるところになってしまって アプリで相対パス指定したものがわやになってしまうんですが解決する方法はありますか
>>88 Runコマンドの第2引数で作業ディレクトリ指定できないか?
見落としてました ありがとうございましたm(_ _)m
MouseGestureL の、設定画面をマウスジェスチャで表示させたいのですが、 どんなコマンドを発行すれば良いのでしょう? 教えていただけませんか?
他のプログラムでは可能なんですが、IEだけ ahk_exe 【プロセス名】 でウィンドウ指定ができないのは仕様でしょうか (例)、 WinActivate, ahk_exe iexplore.exe Process, Exist, iexplore.exe とかだとうまく行くのでプロセス名が間違っているということはないと思います
Window Spyを起動した状態でWinActivate実行してみ
>>95 タスクマネージャー見ると分かると思うが
IEの場合互換性の為?に x32 と x64 の同名プロセスが同時に起動する
WinActivateで使ってない方のIEを最前面にしてるから効いてないように見えるだけ
そういう場合は 絶対パス または ahk_class で確実に指定した方がいい
○WinActivate, ahk_exe C:\Program Files\Internet Explorer\iexplore.exe
×WinActivate, ahk_exe C:\Program Files (x86)\Internet Explorer\iexplore.exe
>>97 32bitプラグイン使ってたら即32bitIEに切り替える仕様だからな> 64bitIE
遊び心でゲームとか作った人いる?
>>96 >>97 遅くなってすみません
そういうことでしたか。ありがとうございました
>>100 ああ、こういうの欲しかったんだよ。ありがたくもらっとくわ
あと、拡張子にk抜けてんぞ
OutExtension でもダメなのを追記です というか3つの差がまずわからないです
>>103 SplitPath, InputVar , OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
変数の名前で認識してるわけじゃないんだから、この順番に従わないと…
SplitPath,clipboard,,,,OutNameNoExt
これでやってみ
できましたできました、ありがとうございます このパターンは空にすべきか、を略すか昔迷った記憶がありましたわ
InputVar, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDriveとかは変数だからそれをただ指定しても意味ないよ
何番目の引数かが問題
そのサイトでは
SplitPath, 第1引数, 第2, 第3, 第4, 第5, 第6
の例えば第一引数に変数名InputVarを分かりやすくするために仮に当ててるだけ。変数名は基本何でも良し
x::
cb=%ClipboardAll%
Clipboard=
Send,^c
ClipWait,0.1
;SplitPath,clipboard,OutNameNoExt
;5番目の引数なら名前は何でもいい
SplitPath,clipboard, , , , OutNameNoExt
;If !ErrorLevel
;ErrorLevel関係ない
If OutNameNoExt <>
;Run,
http://www.google.com/search?q=%OutNameNoExt% ;文字化け防止の為""で囲む
Run, "
http://www.google.com/search?q=%OutNameNoExt% "
Clipboard=%cb%
cb=
return
でしたね 変数名は勝手に決めていいもんでしたね 頭が固かったです、cbっていう変数は自分で決めたのにそれに気づけませんでした ありがとうございます
あ、すまん。もう解決してたか。リロードしてなかったわ
いえいえ、ありがとうございます
正規表現ってマッチするかを最短で検索してると思ってたけどどんな仕組みになってるの? 例えば、IfにRegExMatchを入れてマッチした文字列の取得ができた場合の分岐を作った時、マッチの条件が複雑だと 単純なマッチ条件のRegExMatchを前に挟んだ方が処理が速い時があるんだが。 If (RegExMatch(A, "(.*)あ(.*)い$", String)) より If (RegExMatch(A, "い$") && RegExMatch(A, "(.*)あ(.*)い$", String)) の方が速いみたいなこと言ってます。
タスクトレイアイコンって2つに増やせられないのかな 増やすにはahkファイルもう一つ走らせなきゃいけないんだろうか まぁ要するに、 If (GetKeyState("NumLock","T") == 0) Menu,Tray,icon,%A_ScriptDir%\Numlockicon\shutdown.ico else Menu,Tray,icon,%A_ScriptDir%\Numlockicon\shutdown_colour.ico return NumLock:: If(GetKeyState("NumLock","T") == 0) { Menu,Tray,icon,%A_ScriptDir%\Numlockicon\shutdown_colour.ico TrayTip , , NumLock On, 10 ,1 SoundPlay,*64 SetNumLockState, on }else{ Menu,Tray,icon,%A_ScriptDir%\Numlockicon\shutdown.ico TrayTip , , NumLock Off, 10 ,1 SoundPlay,*16 SetNumLockState, off } return でNumlockキーの状態をタスクトレイに通知したいんよ。 でもコレだとAHKファイル2コ消さなくちゃいけなくて二度手間なんよね・・・
MinimizeTo1Tray.ahkがトレイアイコン2個表示してたな
忘れてましたが、
>>112 は何回も繰り返しマッチ確認して、マッチしないパターンが多い時ほど処理が速いと言ってます。
正規表現の検索も実際はもっと複雑に入れてます。
>>118 んー正規表現の検索の問題だと思うので多分違います。
少し長いですが分り易く書きます。もし初歩的な事でしたら悪いです。
例えば、一万行あるテキストを一行ずつ巡回し、巡回行に特定の条件を満たす文字列が含まれていれば、
改行区切りで変数に格納していく下記の様なスクリプトを書いたとします。
(以下の正規表現部分の"複雑な検索"は複雑な検索パターンがあると見なして下さい)
Var := ""
LoopRead, Test.txt
{
If (RegExMatch(A_LoopReadLine, "複雑な検索", String))
{
Var .= String[1] . "`n"
}
}
MsgBox, % Var
仮にRegExMatchでマッチしたのが100行あったとします。
すると残りの9900行はマッチしてない訳ですが、このマッチしてない判定が最短で行われていない時があります。
例えば"複雑な検索"の最後に"あ$"があったします。
すると末尾が"あ"であるかの単純なチェックを先に行わず、いきなり複雑な検索パターンのマッチ確認に入り、結果的にマッチしないパターンの判定に時間が掛っている気がします。
なので下記のようにした方がマッチしないパターンが多い場合は処理が速くなるのですが、この辺りは皆さんも意識しておられるのでしょうか?
If (RegExMatch(A_LoopReadLine, "複雑な検索", String))
↓
If (RegExMatch(A_LoopReadLine, "あ$") && RegExMatch(A_LoopReadLine, "複雑な検索", String))
正規表現はその名のとおり検索パターンの表現方法であって、 最短でマッチングするという保障はないんじゃないの。 そもそも、パターン文字列をパースしてってのは結構なコストのかかる処理でなんで、 決まりきったパターンで最速でやりたいなら自前ロジック組んだほうが速いこともしばしば。 (ただAHKはインタプリタなんで速くはない) あと、* や + などのはデフォルトで「貪欲」にいくんで最長マッチで行くはずなんで、 こいつらも遅くしている要因のひとつかと。
>>112 「い」が末尾に付く文字列以外の場合、後者のIf文はまず末尾の一文字調べるだけで却下されるからじゃないか
あ、もう
>>119 で結論出てたのか。スレ読んでなかった
まぁ、検索でもなんでも「一度に多条件で絞込み」するよりも「一条件で絞込みを繰り返し」にした方が探索コストかからんよね
一度目で棄却されれば二度目以降の絞込み処理がカットされるわけだから
エンジン側で最適化してくれるかどうかって話でしょ 詳しい訳じゃないが正規表現は前から順々に評価するだけだろ(a|bと[ab]程度の差異は吸収してるだろうが) ワンライナー縛りがなくて速度気にするなら、先読みで効果があったとしても分けるのが普通で確実じゃないの
>>120-123 ありがとうございました。
正規表現の説明はとても参考になりました。
書き方が冗長的というかスマートな方法があるのかなと気になってましたが、
そういうものなんですね。
回答からして、この様な書き方で速度を面を気にする事が余り無いようにお見受けしたというか
ちょっと意外でしたが、ロジックの組み方の違いと言うよりは、やる機会がそんなに無い?って感じでしょうかね。
自前ロジックの回答があったのでこの限りではないかもしれませんが。
スマートな方法かどうか分からないけど 自分なら比較的高速なgrep探してきて grep "単純な検索" 対象のテキスト.txt | grep "複雑な検索" みたいに絞り込んでからパースだけAHKでやる。 パースしやすい形式に置換で対応できるならついでにgrepで置換。
もう解決してるっぽいけど。 複雑な検索は後からちょっと変えたいときとかにも困るから、 なるべく小分けにするのが普通かも あと、正規表現は 「前から順に」 検索してく。貪欲に。 この感覚をしっかり持たずに長い正規表現書くとミスマッチする
"あうお$" って正規表現は、 行末が"お"で、その前の文字が"う"で、その前の文字が"あ" って感覚だと思うけど、 実際は 最初の文字が"あ"で、次の文字が"い"で、次の文字が"う"で、行末 と検索される。 この感覚の違い
2段目"あ"、"い"、"う"じゃなくて"あ"、"う"、"お"でした。
なんかもう削除したいw "あうお$" って正規表現は、 行末が"お"で、その前の文字が"う"で、その前の文字が"あ" って感覚だと思うけど、 実際は 文字"あ"から始まって、次の文字が"う"で、次の文字が"お"で、次の文字が"\r\n" と検索される。 この感覚の違い
遅くなりました。
>>125 なるほど、正規表現に別のツール使う発想ですか。
grep名前だけ知ってましたが、今度使ってみようかと思います。
>>126-129 細かい説明有り難うございます。
どちらにせよ、複雑な検索は小分けする方が良いようですね。
F1 & F2:: のF1のように1回でもホットキーで修飾キーにしたものは無効になり使えなくなりますが、 a & F1:: !F1:: のように前に何らかの修飾キーをつけた場合にはそのホットキーは普通に使えるようになります ところが修飾キーがctrlとshiftの時だけは使えるようになりません この例で言うと^F1::、+F1::が機能するようにするにはどうしたらいいですか
おおっと a:: は F1:: に直してください
そのキーには皆苦しめられてるんよね
>>133 違います
ahkでF1::のキーラベルを登録した状態
(キーとして認識される→○、されない×)
× F1
× Ctrl + F1
× Shift + F1
○ (元々修飾キーじゃないキー) + F1
○ alt + F1
という状況なのを
○ Ctrl + F1
○ Shift + F1
にするにはどうすればいいのか、ということです。
強いて言うならF1&という書き方を使わないこと。 #If(getkeystate("F1","P")) F2::なんたらかんたら #If か、どこぞにあるワンショットホットキー用AHKで設定をし直す のどちらじゃないかな
F1 Ctrl + F1 Shift + F1 ↑押した時だけ反応して他のキーと同時押ししたときには無視させたいって事か。
やっぱりそうですか…根本的な解決法はないんですね
F2::〜
F1 & F2::
F3 & F2::
Send,{Blind}{F2}
return
みたいにしているので大丈夫っちゃあ大丈夫なんですが、
上述の通り修飾キーの中でaltだけキーの通り方が違うので修飾+ファンクションキーを多用するテキストエディター使う時に面倒くさいんですよね
1モディア〜の人みたいにしようにも、F1からF8まで同様のことしているので逆にしんどそうです…
慣れるしか無いか
>>133 ,136 ありがとうございました
>>137 説明下手ですみません。ホットキー云々言ったのがややこしかったですね……
ahkでF1+F2でキーラベルを作った場合、
(F1を押す→当然何も押されてないことになる)
ctrl+F1を押す→ctrlだけ押されたことになる(F1認識しない)
shift+F1を押す→shiftだけ押されたことになる(F1認識しない)
alt+F1を押す→[alt+F1]が押されたことになる
ctrl、shiftの時にもalt+F1の時みたいにしたいということでした。
なるほどそういうことかスレ汚し失礼しました。
ついでに言うと、キーの機能が残るものと残らないものは、押し込んだ時じゃなくて離した時に動作するかどうか。 win、shift、alt、ctrl、まぁ要するに最初から修飾キーになってるものは押しっぱなしじゃなくて離した時に初めて機能するから、これらは&でくくっても機能が死なない。 &でくくるとキー機能が死ぬのはキーリピートするキーね。
>>142 これとか前スレ>951、実行してみたけどエラーが出たりホットキーが効かなかったりします
UTF-8にBOMついてないのが原因のようでファイル保存し直したら動きました。
win7 x86 ahk_L v1.1.10.01
これからスクリプト上げてくださる人は↓のどれかに留意してもらえるとありがたい
わかってしまえばなんてことないんだけどハマると混乱するんだわ
・UTF-8 BOM付きで保存する or includeファイル、ラベル、変数等に日本語名称を避ける
・動作環境(スクリプト作成時のAHKバージョン)を記載
AutoHotkey_L のスクリプトの文字コードを utf-8 にするときは BOM を必ずつけるようになった
http://blechmusik.hatenablog.jp/entry/20120718/1342540247
>>144 ありゃ、すみません。わかりやすいかなと思って日本語ラベルにしてたのが裏目に出ちゃったようで
次の機会があればSJISでいけるように英文字ラベルでうpります
>>144 情報ありがとう
DLしたAHKファイルをUTF-8BOMにサクラエディタで別名保存したらきっちり動いた
Numlockとか何に使うのんってなってたからすげー楽になった。これはいいわ。
てかラベルに日本語使えたんだな。初めて知ったよ
それとdelキーが無効化されてたけどもったいないから
Numpaddel::
Cliptemp := ClipboardAll
Clipboard =
Send,^c
ClipWait,1
SplitPath,clipboard,,,,OutNameNoExt
TrayTip , ,次のワードをGoogle検索します`n%OutNameNoExt%, 10 ,1
Run,
http://www.google.com/search?q=%OutNameNoExt% Clipboard := Cliptemp
return
で、選択範囲をGoogle検索にかけるようにしてみた
うーん、スレッドの順位付けってどうすればいいんでしょうか。 例えばmenu,addでサブメニューを作った時、その他の操作が効かなくなるんですけど、 Thread, Priority,nでどうにかできるんでしょうか あとこれは範囲指定はどうすれば出来ますか?
AutoHotKey で、MouseGestureL みたいにカーソルの形状(指の形とか)を 判別する方法ってある? やりたいのは、ブラウザでリンクの上にカーソルがあるかの判別がしたい。 誰か、わかる人いたらおねがいします。
>>148 A_Cursor
通常は Arrow, 手の形は Unknown
>>147 AHKではmenu,addで作ったメニューが表示されてる間は他の操作は効かない
メニュー上で右クリックした場合のイベントを拾いたい、とかは同一スクリプト内ではできないので
スプリクト分けて別プロセスでやってやる必要がある
>>150 うへぇ、そんなことになってたのか。了解です。ありがとうございました。
AutoHotkey_LPortableイミフすぎる('A`) runでAutoHotkey_LPortable.exe動かしても引数受け取ってくれない。強制的にData内部AutoHotkey.ahk起動しやがる
portable版って通常版と何が違うん?
あ、書き方間違えてるだけだった・・・(´・ω・`)
お騒がせしてすみません
>>153 勝手に64OSか32OSか判断してくれる以外違いは無さそう。
AutoHotkey_LPortable.exeってもしかしてPortableApps.comのやつ? 公式ページで配布されいるzip版のほうがバージョン新しいよ。
APPフォルダ内のexeは公式の奴を入れてるんで多分そのへんは最新です
アクティブウィンドウのプロセスフルパスはどうやって取得することができるでしょうか?
160 :
名無しさん@お腹いっぱい。 :2013/05/31(金) 21:17:58.10 ID:CBuYuZ6s0
menuaddの件で聞いたものですが、ahkを分解してメインのahkからサブメニューのahkを呼び出すことは出来るようになりました ただ、これってサブの処理が終わってもタスクトレイに溜まっていくんですけど、処理を終えたら呼び出したahkそのものを終わらせるっていうのは出来ないんでしょうか?
消したい方にExitAppのホットキー設定して、もう一方でそのキーを送るか process, closeで無理やり消す?
あ、そうか。スクリプトの最後をreturnじゃなくてexitappで消せばいいのか。やってみます
なんとなく作った。IMEの状態を間違えて打った時に、入力文字の削除、IMEの切り替え、再入力をキー一発で行う ;10秒以内のキーログを変数UsrInputに記録し続ける。10秒毎に上書き ;指定したキー(カーソル移動系+再入力ホットキー)を押す度にタイマー、変数の中身リセット Loop { Input, UserInput, V I T10, {LButton}{Tab}{UP}{Down}{Left}{Right}{Pgup}{Pgdn}{Enter}{RShift} ;{Space}(必要に応じて) } ;UserInputを元に直近で入力した文字をIMEを切り替えて打ち直す >+BS:: ;入力した文字数取得 KeyInpLen := StrLen(UserInput) WinGet, hWindow, ID, A ;IME ONの時 if cf_IMEState(hWindow) ;指定したウィンドウのIMEの状態を取得。ONの時 1、OFFの時 0を返す { Send, {ESC}{vkF3sc029}%UserInput% } ;IME OFFの時 else { ;入力文字数分BackSpace。"Ctrl+shift+←+BS"だと記号が混じってた時にそこで止まるため Send, {BS %KeyInpLen%}{vkF3sc029}%UserInput% } return
cf_IMEState(hWindow) ;指定したウィンドウのIMEの状態を取得。ONの時 1、OFFの時 0を返す { ; WM_IME_CONTROL = 0x0283 ; IMC_GETOPENSTATUS = 0x0005 bufCurrentDetectMode := A_DetectHiddenWindows DetectHiddenWindows, On buf := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint",hWindow), "UInt", 0x0283, "Int", 0x0005, "Int", 0) DetectHiddenWindows, %bufCurrentDetectMode% Return buf }
guiでフォルダ参照って出来ないですか? ファイルダウンロードとかで小窓出ますよね、あんな感じで。 今相対パス取得関数を使って指定フォルダと指定ファイルの相対パスを取得できるguiを考えてるんですがここでつまづいてしまって
>>166 FileSelectFolderとFileSelectFile
おおお、素早い回答有り難うございます! チョット組み込んでみます。
ゲームのキーボードコンフィグが出来なかったんでAHKを使ってみたいと思ったんですけど、何から始めればいいんでしょう?
ウィンドウをきっちりばっちりモニタにあわせて四隅や半分にできる関数作ったけどwin7では標準搭載されてるのに作った後気がついて凹んだ
Win7標準だとそこまで細かくは出来ないでしょ? 好きなようにやりたいと思ったらやはりスクリプト書かねば まあDivvyっていう優秀なソフトもあるけと
Win7のそのショートカットだけど、なんかいつの間にか死んでるんだよね俺。 いつの間にか使えなくなってた。ahk終わらせてても出来ないからたぶんレジストリレベルで変なことしたんだと思う だからahkでWin7のショートカットをもう一度作りなおすはめになったんだよな・・・
>>176 エアロスナップ レジストリ
あたりで検索すれば、該当キーが見つかると思う
win7のエアロスナップは低解像度マシンだとストレスにしかならないので切ったわ
>>177 サンクス。治った。
だけど結局やっぱりAHKで書いたスクリプトを使うことになった
四隅に4分の1に出来れば神機能だったとおもう。
Gui,Editで作った入力欄に打ち込んだ文字数が欄一杯になったらGuiウィンドウと入力欄を自動で 大きくしたいんだけどどうしたらいいかな Gオプションで入力欄の文字をその都度取得、再描画ってところまでは来たんだけど 文字数は計上できてもその文字の幅を図る方法が分からなくって…… 文字数*xで計算しようにも、半角、全角、アルファベット、平仮名、漢字で文字の幅はまちまちだし もっとスマートな方法ないですか?
AHKを長年使ってきてwin8の64bitにしたらAHKLというものがあることを知った 日本語を含む文字列の取り扱いが断然便利とあるが煽りでもなんでもなく想定が思いつかないので例を2、3教えてほしい
>>181 変数やラベルに2バイト文字が使えるから日本語でgosubとか”%変数%”とかできる
だから日本人には視認性が良くなる。
まぁ、使い道はそんなもん。もちろん下位互換はない。あと注意点としてはUTF-8BOM形式で保存すること。
機能的にLで追加されたのは配列くらいじゃないかなー
全角カナを半角カナに変換する方法なんてありますか?
>>181-183 スクリプト内部で日本語ラベルはそうそう使わんが、二バイト文字列を扱う機会はままあるよ
RegExでWinTitle判定する時とか、FileLoopで日本語パスが交じる時とか
メッセージ出す時に`(0x60)を含む語をエスケープが必要だったのがなくなった
msgbox,チ`ェック完了
とか、それまではやってたけど
>>180 文字列分解して文字種類ごとに違う幅を足し算していくとか?
>>180 Editの右端をPixelSearchして黒見つけたら延ばせばいいんじゃない
つい最近同じような処理をしたくて考えた汚い方法。 幅を調べたい文字列だけからなるコントロールを作成し、その幅を取得している。 MsgBox, % StringWidth("num は既存の GUI 番号と被らない値を指定すること") StringWidth(string, num=99) { Gui, %num%:Add, Text, HwndHandle, %string% GuiControlGet, out, %num%:Pos, %Handle% Gui, %num%:Destroy return outW }
>>187-189 ありがとうございます。
色々なアプローチの仕方があるなー
参考になります
>>189 成る程。幅指定なしで新しくGui作って自動調整されたところで、コントロールの幅自体を取得か
今回はこれをお借りしようと思います。
>>189 ちょっと返させてもらってGui,Fontのオプションも指定できるようにしました
おかげでうまくいきました。入力文字幅に入力欄、ウィドウ幅がぴったし追従できるようになりました
文字幅と入力欄幅ぴったりでも入力欄幅の調整の必要がある位置で日本語入力(変換前)→決定だとか、
貼り付けだとかで複数文字が一気に入力欄に入る動作をするとスクロールがずれて前の方が隠れてしまいますが、
まぁこれは仕様でどうしようもないでしょう。Home押してやると文字列の頭から尻までキチン表示されてるし
ありがとうございました
193 :
181 :2013/06/06(木) 06:30:38.30 ID:JnIUwoeP0
なるほど!合点がいきました みなさんありがとうございました
マウスオーバーでマウスカーソルが合ったウィンドをアクティブにしたいんですけど、そういうサンプルスクリプトないですかね?
ControlClick, X100 Y100, ahk_id WinTitle X100 Y100の部分を定数ではなく 変数をしていするにはどうすればいいんでしょうか?
ControlClick, X%変数名% Y%変数名%, ahk_id WinTitle でおk
アクティブなウィンドウの指定位置のコントロールを取得するのは DllCall("WindowFromPoint", Int, X, Int, Y,Ptr) でいけると思いますが そのウィンドウが後ろに隠れている場合に うまく取得する方法はないですか?
Windows7の64bitでSend,{Volume_Up}だとボリュームコントロールできないのですが、WindowsXPとなにか違うのでしょうか?
>>200 なくなった。
send,{Blind}{Volume_up}
ならいける。
そういや Sound コマンドが少し前に Vista 以降でも使えるようになったね 1.1.10.00 - May 11, 2013 Revised SoundSet, SoundGet and 'WaveVolume commands to better support Windows Vista and later.
>>200 >Send,{Volume_Up}
Windows7 pro 64bit AutoHotkey_L Ver1.1.10.01
で問題なくメインボリューム上がった、キーボードフックも関係なし
Versionの問題じゃない?
自分の環境でも Send,{Volume_Up} で音量変更出来ている。 Win7 Home Premium SP1 64bit AutoHotkey_L v1.1.10.01 Sound 系のコマンドが使えるようになったのは今日知った。かなりうれしい。
タスクバーの常駐通知アイコンを変更する方法ってありますか? (他のアプリケーションのアイコンではなく、ahk本体のアイコン) 複数のahkファイルを同時に開いた時にわかりやすいようにしたいのですが
Menu,Tray,icon,
207 :
205 :2013/06/12(水) 15:51:56.91 ID:z5n+srdR0
コマンドラインで実行が成功する「echo aaa | clip」をAutoHotKeyでやるとどうも動作しない感じです。 どこが悪いのでしょうか? Run, echo aaa | clip, , Hide Run, "echo aaa | clip", , Hide
cmd.exe
cmd /c echo aaa | clip
コマンドプロンプトはSpyのNow Under Mouse Cursorでマウス直下のクラスが見れないのですが、なぜでしょうか?
子クラスが存在しないから
>>213 なるほど、ありがとうございます。
3ペインにわかれているアプリがあって、カーソル下のコントロールをとって、
そのコントロールにスクロールキーを送ることによって、
マウス下のペインにフォーカスがあたってなくてもスクロールさせる処理をしているのですが、
このアプローチだと出来ないってことですよね。
どうしたものか…
RedirectWheelをやりたいってことかな? ペインそのものがないんだからWindowに直接送っちゃえばいいよ ControlSendがダメなら、PostMessageでWM_MOUSEWHELLかWM_VSCROLL送ってやればいい
面白いautohotkeyのスクリプトや 読んでためになるスクリプトはありますか?
ttp://www.donationcoder.com/Software/Skrommel/ ここに結構面白いスクリプトあるよ。古いけど。
お気に入りは DetachVideo。
マウスカーソル下にあるコントロールを新規 GUI に表示するスクリプト。
Flash Video などに使用してブラウザを多窓しなくてすむようにするのが
メインだけど、Flash 以外にも使えるので使い道は色々。
任意のウィンドウにツールバーを追加する Barnacle が最近気になっている。
WinGetPos, , , width1, , ahk_id %window1% If (width1 < 300) 〜〜〜 WinGetPos, , , width2, , ahk_id %window2% If (width2 < 300) 〜〜〜 WinGetPos, , , width3, , ahk_id %window3% If (width3 < 300) 〜〜〜 これを数多く10や20まで繰り返す場合に Loopとかで処理する方法もあるんでしょうか?
>>218 A_Index で繰り返し回数カウントすればいい
ttp://ahkwiki.net/Loop Loop,20
{
window = window%A_Index%
WinGetPos, , , width%A_Index%, , ahk_id %window%
If (width%A_Index% < 300)
}
>>219 ありがとうございます。
width%A_Index%のほうはそのまま使えるけれど
window%A_Index%はそのままでは使えないんですね
221 :
216 :2013/06/15(土) 00:11:45.60 ID:hIFLltr70
>>217 ありがとう
detachvideo、これはすごいね
勉強してみます
>>217 ここのLabelControlがちょっと気になった
FireFoxのVimperatorのヒントモードとかKeySnailのHoKみたいなものをFireFox以外にも適用したいところだが
AHKでのその可能性を感じた
なんとかできないかな
sc028 & E:: sc028 & S:: sc028 & D:: sc028 & F:: While (GetKeyState("sc028 ", "P")) { MoveX := 0, MoveY := 0 MoveY += GetKeyState("E", "P") ? -8 : 0 MoveX += GetKeyState("S", "P") ? -8 : 0 MoveY += GetKeyState("D", "P") ? 8 : 0 MoveX += GetKeyState("F", "P") ? 8 : 0 Sleep, 10 MouseMove, %MoveX%, %MoveY%, 1, R } Return 斜め左上、左下だけうまく動かないんですが うまく動く方法を教えてください
マウス操作はこのスレのアップローダにあるからソレ参考にしてみればいいんじゃね
年末か年始くらいだっけ このスレにも報告に来てたぞ
ちょいと質問 ウィンドウの移動をタイマーで監視して自動で定位置に戻すスクリプトを走らせてるが、一つ問題が モニタの電源OFF時は監視の必要がないんで、先頭でreturnしたいが電源のオンオフ状態を取得する方法が関数にないことに気付いた MSDNも見たが、GetDevicePowerStateは引数にディスプレイハンドルが必要で今度はそっちの取得方法が大変でよく分からず投げた もし簡単にモニタの電源状態を取得できる方法あったら教えて欲しい。検索してもありそうで無いな、ちょっとびっくり
232 :
229 :2013/06/17(月) 23:32:46.62 ID:onGiwNyB0
>>231 ふむ……簡単にはできそうにないか。あれば後々何かに使えそうだったが……
とりあえず退席時の判別はA_TimeIdlePhysicalで間に合わせることにした。レスthx
モニター電源と監視のon offを同じアクションで行えば?と思ったけど モニタ電源のソフトスイッチってあるんかね
235 :
229 :2013/06/18(火) 17:05:35.24 ID:rVBhisZf0
>>234 AHKでモニタ電源落とすことはできるけど、自分はハードスイッチ派だしなぁ
>>233 おぉ、すごいなコレ。電源オンオフメッセージを感知して動くのか
しかし、やはりハードスイッチでのオンオフは認識しない模様。電気代ほぼ変わらんし、もうスイッチ押すのやめた方がいいのかな
マルチモニタ環境で全部じゃなくて任意のモニタの電源を落とすことは可能? ウィンドウズの仕様で無理なんでしょうか
>>235 ディスプレイの主電源切ったらPCからは未接続状態に見えるんじゃね?
WMIのWin32_DesktopMonitorでモニタ情報取得して接続されてるかの判別をするとか
238 :
229 :2013/06/18(火) 20:57:42.95 ID:rVBhisZf0
>>237 だめだ、モニタの電源切ってみたが28のパラメータすべて変化なし
(怪しそうなStatus、Availabilityもともに「OK」、「3」の値のまま動かん)
俺のモニタ(LCD-MF234XNR)固有の問題かも知れない
まぁでも
>>233 の方法がかなり使いやすいからソフトスイッチに切り替えるわ、情報d
240 :
236 :2013/06/18(火) 21:49:38.57 ID:T1tf3gyeP
サンクスです〜 スレチな質問ですみませんでした
標準入出力を使う外部ソフトウェアtest.exeに autohotkeyから値を渡し その結果をautohtkeyの変数に格納するにはどうすればいいですか
123
漏れメモ 特定アプリ用スペシャル設定は#IfWinActiveすればいいのか AU3Spy.exeはこういうとき使うのね
>>241 俺ならAHKでWSHを呼び出す
command := "test.exe"
exec := ComObjCreate("WScript.Shell").Exec(command)
While !exec.Status
Sleep 100
return exec.StdOut.ReadAll()
>>229 だがもう一つ質問
「二次元画像詳細検索」ってなエロ画像管理ご用達サイトで情報収集してるがその効率化に知恵を貸して欲しい
画像が大量すぎてちまちま検索してられんから、自前サーバに一瞬画像上げてAHKでURL一斉POST → 自前GUIに表示、としてるがもはや上げるのすらだるくなってきた
てなわけでPOSTメッセージに直接画像を貼付したいがWinHttpRequestだとどこに画像データ埋め込むのかわからん
HTTP解析の基礎のような気もするが……なぜか検索しても出てこない。知ってる人いたらぜひ
>>247 無論Loop末端にSleep置いてる
ISPにも睨まれたくはない
CoordMode, Mouse, Screen を あとから CoordMode, Mouse, Window に切り替えたいんですがそういうことってできないもんですかね? 自分でこんなかんじに書いてみたんですが動きません。 F1:: CoordMode, Mouse, Screen MouseGetPos, ClickX2, ClickY2, MP if ( ClickX2 < A_ScreenWidth and ClickX2 > A_ScreenWidth - 200 and ClickY2 < A_ScreenHeight and ClickY2 > A_ScreenHeight-50 ) { msgbox screen return } else { CoordMode, Mouse, Window MouseGetPos, ClickX, ClickY, MP WinGetPos, x, y, w, h, ahk_id %TEST% WinActivate, ahk_id %TEST% if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0) { msgbox window return } return }
>>250 気付きませんでした ただrelativeになおしてもmsgboxは表示されません。やっぱり途中で切り替えるのは無理なんでしょうか。
普通に途中で切り替えできるよ if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0) で指定している範囲がディスプレイの左上で且つ、 対象ウィンドウの上部だけっていう極めて狭い範囲が指定されているから、 対象ウィンドウが画面左上に表示されてるとtrueにならない。 変数の値が分岐の条件式で合っているかどうかをifで分岐させる前に確認してみるといい 前略 msgbox, %ClickX% %ClickY% %ClickY% %ClickX% if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0) 後略
前半の分岐すっ飛ばして説明してたわ
なので
>>252 は忘れて
何れにしても、途中で切り替えは出来るよ
if文を書く前に、msgboxやtooltipを使って変数の中身(値)を確認したほうがいいよ
>>249 勝手読みだけど多分こうだと思う
CoordMode, Mouse, Window
WinActivate, ahk_id %TEST%
MouseGetPos, ClickX, ClickY, MP
WinGetPos, x, y, w, h, ahk_id %TEST%
>>244-245 ありがとうございます。どちらもokです。
ただ、コンソール画面が一瞬表示されてしまうのですが、それを抑える方法はありませんか。
>>246 そのスクリプトおもしろそうだから見たい
特に「自前GUIに表示」をちょっと流用したいなw
自鯖にあげるのがめんどいってのはどういう状況なんだ
公開フォルダにハードリンクかシンボリックリンク作るだけじゃだめなの?
盛大に勘違いしてたらすまん
Windows7にてAutoHotkey_L 64bit(Unicode)版 v1.1.11.0 を使っています。 Windows Vista以降ではアプリケーション毎に個別の音量設定が可能ですが、 AutoHotkeyのスクリプトでAutoHotkey.exe自身の音量を変更するにはどうすれば良いのでしょうか? SoundSetWaveVolumeを使うとスピーカーデバイスの音量(いわゆるマスター音量?)が 変更されてしまい、スピーカーと全てのアプリケーションの音量が変更されてしまいました。 SoundSetで行うべきものかと思いいろいろやってみましたが、 MASTERやWAVEを指定しても結果は同じとなり、他に何を指定すべきかわかりませんでした… 解決法がありましたら教えてもらえませんでしょうか。
>>258 Win7 だったら、
SoundSet, 50 ; AutoHotkeyボリューム50%
とかでダメ?
私は逆に AutoHotkey のボリュームだけ変わっちゃって、困ったことがあるくらい。
>>259 レスありがとうございます。
引数のComponentTypeを略すとデフォルトでMASTERを指定したことになってしまうので
スピーカー&全アプリケーションのボリュームが変わってしまいますね…
過去ログを見る限り、Vista/7のサウンド周りに対応していなかった頃の
かなり古いバージョンのAutoHotkeyであれば
自アプリケーション(AutoHotkey,exeのみ)の音量が変わっていたようですが、
現バージョンでそれを実現する方法が未だにわからない状況で…
262 :
246 :2013/06/26(水) 04:43:24.67 ID:7MAD5nkU0
263 :
246 :2013/06/26(水) 04:52:53.85 ID:7MAD5nkU0
マウスジェスチャー、ワンショットモデファイヤ、プログラムランチャ、大概の事は出来たけどなんかまだ面白いスクリプトが欲しい
無いなら自分で作りましょう。
>>266 アイディアがなー・・・
なんかこう、実用面ではすでに満たされてるんだけど、まだなんか欲しいって気分、わかんない?
DialogSetterやTTBaseプラグインを移植しようと躍起になってた頃もあったな 今にしてみりゃわざわざAHKでやることもなかったんだけど
ちょっとわかる アイディアもないし困ってもないんだけどなんかまだ出来るんじゃないだろうかという変な飢えがある
>>265 有用そうなマイスクリプトでも公開すればいいかと
便乗して誰か上げてくるかもよ
最近mousegestureL.ahkを導入したんですが、 これ使うと普段設定用のAHKとこれ用のAHKの2つのプロセスができてしまうんですが、 これは正しい動作ですか?
272 :
名無しさん@お腹いっぱい。 :2013/06/27(木) 14:57:23.02 ID:ztjL/cl90
環境をまず書いて ポータブルかインストールか すでに別のAHKファイルは走ってるのかどうかとか
普段設定用のAHKにincludeしないで別々に起動してりゃ別プロセスになる
>>272 すみません、インストールで、デフォルトのahkファイルが走ってる状態で、
それとは別途mousegestureL.ahkを関連付け起動する感じです
>>273 まさにそういうかんじです。別プロセスになるのが普通なのですね、ありがとうございました
include使う場合フォルダ構成変えることになりそうなのでこのままでやってみます、ありがとうございました
ImageSearchはモニタに表示されている画像しか検索できないとのことですが 仮想デスクトップ等使った場合 モニタ外でも手前に表示させていれば検索に引っかかるでしょうか もしくはモニタを圧迫せずに極力裏に近い状態で 画像検索のマクロを働かせる方法はありませんか 現状隅っこにウィンドウを小さくして走らせてるがやはり気になる 画面を広々と使いたい
現在アクティブなコントロールって取得できる?
>>263 楽するために苦労する典型わろち
スパゲティーは要らないw
自分のですらソース読む気にならん
機能追加する毎に新しい実装したりでぐちゃぐちゃ
>>267 クリップボード管理おすすめ
履歴管理、パスワード挿入、メモ機能に、
コピー文字列を数値計算、連番挿入、
google、HDD検索、正規表現用にエスケープ、
ファイルパスをファイルコピーの状態へ、
とか。
フォルダ構成を維持したままテキストにあるファイル(ワイルドカード含む)をコピーしたいって聞いたらこのソフトで出来るって言われたんで DLして早速試してるんだけどよく分からねーのです 雛形みたいなものないですか?
>>279 正規表現面白そうだけど書き方がさっぱりわからんたい
>>278 そか。まぁ楽すると言うより、自作の関数→関数ってのが多すぎて階層辿るのに苦労するって意味だけどね
亀になるが
>>246 は自己解決。画像のMD5投げれば詳細は取得できることに気付いたからPOSTする必要すらなくなった
一応報告まで
288 :
275 :2013/06/29(土) 06:12:27.05 ID:tunUwd120
しくしく(/_;)
>>288 対象のウィンドウを階層を変えずにアクティブにして操作したいって事だよね?
ウィンドウをアクティブ=最前面 これはOS仕様なのでどうしようもないから。
WinGet + WinSet で対象より上の階層のウィンドウを常に最前面表示にすれば行けるんじゃないかな?
ウィンドウのZオーダーを変更しないアクティブ化はできないこともない が、標準操作ではどうしようもない。直接API呼び出してオプションを指定する必要がある。面倒だからアクティブ化関数だけ _WinActivateNoZOrder(WinTitle) { ; 対象ウィンドウのハンドルを取得 WinGet, hwnd, ID, %WinTitle% ; Zオーダーの変更指定(不要) hWndInsertAfter := NULL ; 位置・サイズの指定(不要) X := NULL, Y := NULL, Width := NULL, Height := NULL ; オプションの指定。値は SWP_NOSIZE 0x01 | SWP_NOMOVE 0x02 | SWP_NOZORDER 0x04 の論理和(サイズ変更なし、位置変更なし、ウィンドウ順序変更なし) uFlags := 0x07 ; ウィンドウのアクティブ化実行 DllCall("SetWindowPos", "UInt", hwnd, "Int", hWndInsertAfter, "Int", X, "Int", Y, "Int", Width, "Int", Height, "Int", uFlags) }
なるほどー参考になります。 Win32API関数とウィンドウメッセージも一通り覚えておかないと駄目ですねw
常駐しないAHKスクリプトが起動しているかの状態取得はどうすればできますか? リファレンスのウィンドウ指定辺りを調べたのですがわかりませんでした… すみませんが教えてください
DetectHiddenWindowsかな
win8のAlt+Tab関連の問題は解決しました? 検索してもうまいこと出てこないんですけれど
お尋ねします。 Process, Close, で指定したアプリを終了した場合 終了したアプリのアイコンが、タスクトレイに残ってしまいます。 アイコンが残らないように終了させる事は出来ますでしょうか? よろしくお願いします。
お騒がせです。 WinCloseを代替案とし、無事解決しました。
298 :
名無しさん@お腹いっぱい。 :2013/07/18(木) 18:51:20.85 ID:Y13lsdmh0
Multimonmanというスクリプトなのですが、そのままではすぐにフリーズしてしまい、 使い物になりません。 >> DllCall("MoveToEx",UInt,hdc_target_%pmonitor%,Int,markx-4,Int,marky,Str,0) という部分を >> DllCall("MoveToEx",UInt,hdc_target_%pmonitor%,Int,markx-4,Int,marky) に書き換えると正常?に動作するようです。 Windows APIに詳しくないので、なぜこうなるのかよく分かりません。 このあたりに詳しい方はいらっしゃいますか?
StrでNULL指定は出来ないからPtrにすればどうかな DllCall("MoveToEx",UInt,hdc_target_%pmonitor%,Int,markx-4,Int,marky,Ptr,0)
markyで終わりにして、引数2個省略しても一応動くようですが、 これだと何か副作用があるんでしょうか? あと不思議なのは、このスクリプトが公開されているってことは、 日本以外のWindowsではそのままで動くんでしょうか? AHKのコンパイラのバージョンの違い?
> DllCall("MoveToEx",UInt,hdc_target_%pmonitor%,Int,markx-4,Int,marky,Ptr,0) で上手くいくことは確認しました。どうもありがとうございます。
>>300 >これだと何か副作用があるんでしょうか?
たまたま動いていただけで、戻り値も取得出来ていたかどうか怪しいよ
>>300 そのスクリプト1 Hour Softwareのだよね?
AHK無印製だからAHKLのユニコード版だと正常に動かない事があるよ
AHK無印かAHKLのANSI版なら普通に動作すると思う
DllCallの無印からLへの書き換えの仕方、どっかにまとめてる人がいたけどどこだったか忘れたな
>>302 戻り値は使わないのでどうでもいいのですが、
何か予想外のところに値が書き込まれたりして誤動作すると困りますね。
Ptrの代わりに0を指定しても動くことは動くのですが、
0はNULLの意味になりますか?
>>303 Ahk2Exe.exeしか使わないのでよく分からないのですが、
AutoHotkeySC.binのサイズから考えて、Unicode 32-bit.binが
EXEファイルに組み込まれているようです。
ANSI 32-bit.binを一時的にAutoHotkeySC.binにRENAMEして
コンパイルすればいいんでしょうか?
>>305 わざわざRENAMEしなくても
Ahk2Exe.exeはコンパイルに使うbin選べたと思うよ
>>306 引数付けずに起動するとメニューがでるんですね。初めて知りました。
アイコンの変更なんかもソースファイルの中に書くのではなく、
ここで指定することもできるんですね。便利だ。
autohotkeyとjoytokeyがコンフリクトしてるようなんですけど併用してる人どうしてます?
コンフリクトってホットキー被ってるだけじゃないの? joytokeyで設定してるjoyボタンはAHK側で触らなきゃいいんじゃね
変換キーを押しながらマウスポインターを動かすことはできないのかな? CADでミドルクリックを使うから使わない「変換」に割り当てて マウスレスで使いたいんだけどなー 変換を押しながらポインタを動かそうとしても、途中でロック?されて動かせなくなる・・・ (Windows8環境)
>>310 スクリプト書かないと推理しか出来ないのだが?
KeyWait 入れて無くて連打してるのが原因じゃないのか?
元のキー::割り当てキー という超シンプルなものです alt,Ctrl,windowsキー,Alt 以外のキーを押しながらポインタを動かそうとすると同じ症状になる ということは仕様なのかぁ・・・
キーリピート殺してないからじゃね
MButton:: m := GetKeyState("MButton") Msgbox, GetKeyState(MButton)=%m% と書くとマウスホイールを押したままの状態でも 常に0が返ってくるのはどうしてですか?
すみません。 文章(半角も含む)を打つときはCapslockをON それ以外はCapslockをOFFにしたいのですが、 AutoHotkeyで自動にするにはどうしたらよいでしょうか・・・?
>>317 文章を打つ時っていう条件があまりに漠然とした状況ではないかと・・・。
メモ帳やエディタなんかで入力している時だけが文章?
ブラウザでコメントを入力してる時は?名前入力とコメント入力ってどうやって判断するの?
ブラウザのURLの所にだって、URLだけじゃなくて検索用の文章を入力することもあるよね。
それとも、別の判断で例えば5文字以上の入力ならそれを文章ってことにして、その段階で
CAPSをONにしてみる?それとも、入力スタートしたところからCAPSオンと判断して再入力?
適当に、メモ帳やエディタの時だけって考えて、メモ帳かエディタがアクティブウィンドーの時には
>>4 を参考にしてCAPSをONにして、他がアクティブなときは、CAPSをOFFにする。
CAPSのコントロールに関しては、IMECTRLだっけ。そんな感じのスクリプトを参考にして。
つか、CAPSキー押せばいいだろうと思った
一文字でもなにか入力したらCAPSオン、マウスを動かし始めたらオフにしたいんですよ 確かにCAPSキー押せばいいんですが、自動でできないかなと思いまして…
ならマウス側のカーソル位置をトリガーにして組んでみたら? mousegetposとsettimer使えば出来そうな予感 あ、おれは作らないからね?
>>320 ・・・・・
文字入力時には、CAPSオンで、マウス移動時にはCAPSオフってこと??
文字入力って、キーボード入力ってことだよね。
俺の理解力が足らないのかもしれないけど、CAPS押しっぱなしでいいんじゃないのかな。
マウス移動時にキーボード入力がないならCAPSオフでもCAPSオンでも関係ない気がする。
マウス移動のときにCAPSオフにしたいってのなら、
SetTimerで定期的にマウス位置をMouseGetPosで取得して、前回の取得位置と異なっていれば
CAPSをオフにする(
>>4 参考)ようなスクリプトを作ればいい。
文字入力時に強制的にCAPSオンのほうは思いつかんわw
アルファベットキーの26文字だけだから、全キーにホットキーとして割り振っておくか?
>>320 文字入力を感知したいなら "Input" を使えばいいと思う。
Capslock の状態取得は "GetKeyState"、状態切り替えは "SetCapsLockState" で可能。
>>4 の方法はリマップ・ホットキーの話だから、今回は関係ないのでは?
CapslockをOFFにする理由が知りたいな
>>320 自分で答え出してるじゃん
キー入力を検知してオン
マウス移動を検知してオフ
CAPSオフにしておかないといけない理由を教えて。
質問だけど#IfWinActive で複数のアプリを指定したい場合どうするの? #IfWinActive a r::e #IfWinActive b r::e としてしまうとr::eを二度書かないといけないので困ってる
>>326 #If WinActive("a") or WinActive("b")
r::e
#If
#Ifというのがahklにはあるから後は普通のif文 もしautohotkey.jpとか〜流行らせるサイトを使ってるなら情報が古いから wikiを参照した方がいい
AutoHotkeyJpて情報古かったんだ
330 :
326 :2013/07/27(土) 18:49:21.26 ID:+ORtMnVQ0
当方AHK使用者なので
何度やってもうまくいかないのは
>>327 がAHK-L用という罠かしら
>>328 AHK-Lのことだね
AHKでは不可なら使ってみるよ
二人有難う
ahkでもグループ化すればいけるんじゃね
>>329 Jpの方は古くないって。そんな事言ったらあのwikiもほとんど更新されてないし、本家参照しろって事になる
古くはないけど書いてないことも多いなと SoundSetについて言及はあったっけ?
>>334 vista以降対応の話ならたぶん無いだろうね。更新されてないわけだし
wikiって管理人の編集履歴が表示されてないだけであちこち更新されてるぞw
チョット知恵を貸してくれませんか wasdでゲームキャラを移動させるとして、aが押されてる間にdが押されたらaの判定を消す、wが押されてる時にsが押されたらwの判定を消す aが押されてる間にdが押されたらsを優先してaの判定を消し aを押したままdを離すとaが押されたことに戻す この条件付けが思いつきません 十字キーって基本的に上下左右同時押しは出来ないじゃないですかアレを再現したいんです
あ、出来ました。失礼しました。スルーでお願いします
先日
>>310 にて質問させて頂いた者です。
タッチパッドのドライバがsynapticsということで、smartsenceの項目が
オンになっていると同様の症状が発生するという記事を見て設定しなおしたが改善されず。
alt,ctrl,function,windows等の一部のキーを押しながらの場合はポインタを動かせるので
スクリプト次第でなんとかなるのかなと思いまして調べてみましたが、スクリプトについて無知ですので迷走状態です。
どなかたご教授頂けないでしょうか?
sc079::MButton の後にどのようにwaitkeyを挿入すればよいのかわからないです。
>>326 亀レスだけど、SetTitleMatchMode で RegEx を指定すればAHK(ノーマル)でも出来るよ
SetTitleMatchMode, RegEx ; この一行はAutoexecセクションに記述
#IfWinActive a|b
>>339 Win7でもキー押しながらだとタッチパッド効かないな。
Windows 7 Home Premium SP1 64bit
Synaptics PS/2 Port TouchPad
KeyWaitの問題ではない思う。
レジストリをいじって「変換」キーを使っていない特殊キー(RAltなど)に割り当て
(
>>4 を参照)、AutoHotkeyで RAlt::MButton としたら動くのかな。
操作性は少し変わるが「変換」キーを押すたびにMButtonの押し下げ状態を切り替える
やり方なら問題なく動作した。
(例)
sc079::
if(!GetKeyState("MButton"))
Send,{MButton Down}
else
Send,{MButton Up}
return
タッチパッドドライバのパームチェックでキーボード操作中はポインタ無効にされちゃうってことか 何言ってるのかさっぱりわからなかったがようやっと合点がいった AHK側でどうにかできる問題じゃないからレジストリでキー割り当て変えるしかないんじゃね
MouseGestureLを常駐させておくとWhiteBrowserというソフトのサムネイル上で右クリックしただけで 「405ミリ秒以内に2001回のホットキーを受信しました 続けますか?」 というメッセージが出て はい・いいえどちらのボタンを押してもWindowsごと不安定になります MouseGestureLにはWhiteBrowserのジェスチャは全く登録していません 何が原因なんでしょうか? AHK_L最新64bit@Win7
>>343 >>5 > Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
> A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
> 先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
>
> #UseHookで全部にキーボードフックを適応する方法でも可。
>>344 ありがとうございます
先頭に#UseHook書いても変わらず同じ症状が出ます
ホットキーの前に$を書こうにもホットキーらしき行::が見当たりません
MouseGestureLのどこに書いたらいいんでしょうか?
#Includeで特定のもの以外の変数が使えない仕様になってるのって何で? 素人考えだけど、仕組み的にできないわけはないだろうからわざとそうしてると思うんだけど ini読み込ませたりする時にA_ScriptNameとかが使えないのが地味に不便
345>> 基本から分かってないようなので 同梱のヘルプドキュメントとwikiを読みましょう。 > 同梱のヘルプドキュメント 5.2.6.「XX hotkeys have been received in the last XXXXms.」エラーの対処方法(XXは環境による)
>>347 ありがとうございます
ヘルプに書いてあったんですね失礼しました
ですが・・・
#HotkeyInterval 2000
#MaxHotkeysPerInterval 3000
「初期化処理」の中に記述してもやはりエラーが出ます
WU_とWD_はジャスチャ定義に登録していません
他に回避できる方法ないでしょうか?
テンキーでマウスを動かしたいんですがどうすればいいでしょう? 他のフリーソフトは常駐が増えて嫌なのです
テンキーのキー入力をフックしてmousemove
ahkのLじゃない初代を使っています。ini操作でハマっています。 スクリプトの設定をiniで保管してるのですが、 iniを操作している途中で停電してPCが強制切断すると、 iniファイルにヌル0x00が混入するようです。 混入した後は、 ・前半のiniは読めるし書ける ・途中に出てきた0x00以降に存在する項目は読めないし書けないがエラーも出ない という状態になって、気づくのがずいぶん遅れたりします。 そこで、指定したファイルに、0x00が含まれているかどうかをチェックしたいのですが、 この用途にちょうどよい方法はありますでしょうか。
>>351 適当に返事してみよ。
どういう処理で読みだしてるのかわからないからあれだけど・・って
IniRead使ってるのか。
その条件(0x00が混ざりこむ)のが正しいなら一番面倒くさくないのは
Iniファイルを一度全部バイナリモードでバッファに読み込んで、0x00をなくして
もう一度Iniファイルに書き戻してから、IniファイルをIniReadで読み込んで解釈
するのが一番楽かね。ダーティハックってのは理解してるw
でも、不正終了で混ざりこむのは0x00だけじゃないと思うし、停電する環境をなんとか
するか、、不正落ちしたときには、不正落ちしたことを認識して前回の異常でない場合
のIniファイルを読み込むように作り直すことだと思うぞ
>>352 ああ、Lじゃないと0x00を判断しづらいのか。
バッファに読み込んだファイル内容を StringLen で長さをバイト単位で求めて
それをiniファイルのファイルサイズと比べて、違ってたら変な文字の混入が判断
できるんじゃね?
>>353 早速ありがとうございます。
ふだんは安定して全く困らないのですが、毎年この時期だけ、
落雷でこの現象にはまります。
そうですinireadでチマチマやっています。
StringLenとfilegetsizeで比べて、おかしかったら警告を出すようにします。
>>354 >>353 方式はあまりにダーティすぎる(しかも、StringLenの仕様を知らずに適当に書いてた)から
もうちょいまともな方法で
iniファイルの書き出しを始めるときに、どこかにテンポラリのファイル(たとえば、マイドキュメントのの myahk.lck)とか
を作って、書き出しを終了したときに、そのファイルを削除する。
でもって、起動時にそのファイルがあったら、iniファイルを開いたままで落ちた証拠だから、警告を出して
そのロックファイルを削除して終了する。
のほうが、変な仕様の狭間に落ち込まないし、一般的な方法でわかりやすいと思う。
>>355 ありがとうございます。一連の流れを関数にして実装してみます。
その前に無停電電源装置(UPS)を導入することを激しくオススメする。
落雷多い地域だとUPSくらいじゃどうにもならないんじゃね 前に宇都宮の某工場にメンテで行ったことあるけど、デカイの来ると UPSルームごと落ちるっつってたっけ
お前の家は工場規模なのか?w
スタートアップでfoo.ahkを実行させた後にfoo.ahkのGUIをカスタマイズするbar.ahk実行したい場合、 どうやるのがオススメですか?
foo.ahkのGUIをカスタマイズするbar.ahkを、なぜ別体にしなければならないのか、 詳細を書かない限り誰もわからない
bar.ahkは単体で別の物に適用することもあるからです
ファイルの中身を言ってくれないと
SetClipboardData(hBitmap) { DllCall("GetObject", "Uint", hBitmap, "int", VarSetCapacity(oi,84,0), "Uint", &oi) hDIB := DllCall("GlobalAlloc", "Uint", 2, "Uint", 40+NumGet(oi,44)) pDIB := DllCall("GlobalLock", "Uint", hDIB) DllCall("RtlMoveMemory", "Uint", pDIB, "Uint", &oi+24, "Uint", 40) DllCall("RtlMoveMemory", "Uint", pDIB+40, "Uint", NumGet(oi,20), "Uint", NumGet(oi,44)) DllCall("GlobalUnlock", "Uint", hDIB) DllCall("DeleteObject", "Uint", hBitmap) DllCall("OpenClipboard", "Uint", 0) DllCall("EmptyClipboard") DllCall("SetClipboardData", "Uint", 8, "Uint", hDIB) DllCall("CloseClipboard") } これが64ビット版AHKLで動かないんだけど(32ビットでは動きます) どこ直せばいいんだ?
>>363 ただ単に複数のスクリプトの起動順を制御したいだけなんですが・・・
>>366 それならrunはさんで順番にでいいんじゃないの?
早すぎたらsleepかませてさ
>>364 このソースを見て説明なしって思う人は・・・
放置されてるのか、誰も返事ないのはかわいそうだからエスパーしておくと
(unsigned) intとポインタとは別物だっていう昔からのルールに引っかかってるだけじゃない?
ハンドルの型は、普通ポインタだと思うんだ。AHKだとPtr型っていうのかね。
つまり個人個人でレベル差があり、それを考慮しない質問は レベル範囲外の人にとっては雑音でしか無く、印象が悪くなり、 せっかく書いてもムダ弾で終わる確率が上がるってこと。
370 :
名無しさん@お腹いっぱい。 :2013/08/02(金) 13:25:52.62 ID:rSeKqUXR0
すまんなDllCallとかいうのがあるのすら今はじめて知った
すまん、
>>368 の最初のほうは言いすぎた。
よその夏を見ていてちょっとイラついてた。
質問する時にレベル範囲外の人間を考慮してどうするんだ・・・
説明が必要かどうかよりコピペ丸投げすんなって話じゃないの dllcallのUnicode&64bitポインタ修正関連は自分もハマったけど この辺は何度も書き込みあるから過去ログ漁ればヒントになるんじゃね
アホかw 答えたくないか答えられなければ答えなければいいだけ
マウス変えたとたん XButton1 & RButtonのコンビネーションが効かなくなったよ 対策ないかな? マウスのメーカーは違うけど両方ともドライバはWindowsなんだが・・・ こういうコンビネーションてあんまり使うべきじゃないのかな
379 :
377 :2013/08/06(火) 13:03:19.09 ID:kRO5DUyj0
自己解決しました runしたらできました
コードリフレクションって無理? reflection, blurblurblur(100) で blurblurblur(100) を実行、みたいな
左Windowsキー単独押下はなかったことにして、 左Windowsキー+左Altキーが押された時に左Windowsキーの 役割をさせたいのですが、うまくいきません。 どのように設定をかいたらよいでしょうか?
>>380 ・方法1
自分で構文解析し、
%functionName%(param)
のようにする。引数の個数が不定の場合は困る。
・方法2
別のスクリプトファイルに書き出してそれを実行する。
ライブラリに入っている関数ならこの方法が簡単。
グローバル変数などを使っている場合は面倒。
>>381 Lwin up::return
Lalt&Lwin::Lwin
でいけるんじゃね?
質問です メルティブラッド買ってきたんですけどコレゲームパッドでしか1Pできないんですよね キーボードでやりたくてwasdにjoyXjoyYを設定したいんですけどどうすればいいんでしょうか?
>>384 autohotkeyじゃ出来ないのでppjoyでやればいいよ
388 :
名無しさん@お腹いっぱい。 :2013/08/09(金) 21:04:54.17 ID:V7J/R1Rm0
質問があります。 vk1Csc079 & K::Return vk1Csc079 & S::TwoKeyPlus("K","sc00C") TwoKeyPlus(InBase,HE){ if GetKeyState(InBase,"P") Send, % "{Blind}{" . HE . "}" } とし、変換キー+K+S としても何も打ち込まれません。 SをA,D,Fのいずれかに変えると"-"が打ち込まれます。 KをJ,Lのいずれに変えてもS同様打ち込まれませんが、U,H,Mの いずれかに変えると"-"が打ち込まれます。 アルファベットのキーの違いで動作が異なるのでしょうか?
390 :
名無しさん@お腹いっぱい。 :2013/08/09(金) 23:07:36.53 ID:V7J/R1Rm0
>>389 答えていただきありがとうございます。
いろいろと調べてみます。
デバイスの専用ドライバがドラッグロック非対応で困ってるんだけど(ロジクールのt650)、 ahkでなんとかできるかな? ダブルクリックの2回目で、長押しかつちょっと動いたら、 →左ボタン押し下げ固定 →もう一度クリックで押し下げ固定解除 って感じだと、普通のダブルクリックでの誤爆が制御できなさそうで…… もっとうまい方法ないかな?
ちょうどクリックロックなら前作ったのがあった。 単クリック長押しでドラッグモード。 Lbutton:: If(dandd == 1){ dandd := 0 sendinput,{Blind}{Lbutton up} TrayTip , , 左クリックのロックを解除, 10 ,1 keywait,%A_thishotkey% }else{ sendinput,{Blind}{Lbutton down} keywait,%A_thishotkey%,T0.75 If(ErrorLevel == 1){ dandd := 1 TrayTip , , 左クリックのロック, 10 ,1 keywait,%A_thishotkey% }else{ sendinput,{Blind}{Lbutton up} } } return マウスジェスチャーに仕込むならgosubとかに変形させればいけると思う
こっちはクリックロック中に右ボタン押したら解除。 Rbutton:: If(dandd == 1){ dandd := 0 sendinput,{Blind}{Lbutton up} TrayTip , , 左クリックのロックを解除, 10 ,1 } sendinput,{Blind}{Rbutton} keywait,%A_thishotkey% return
クリックロックってOS標準でついてなかったっけ? 手元に7と8しかないんで確証ないが、たしかXP以前にもついてたような
>>394 え、まじで?それは知らなかった
あんまり作った意味なかったかなぁ
最近のマウスにはボタンがいろいろ付いてるけど Xボタン2以上のボタンを指定するにはどうしたらいいんすか? 標準でタスク切り替えになるボタンをカスタマイズしたい・・・
alttabとかshiftalttabをつかえばいいよ でも挙動怪しいから自分で打ち込んだほうがいいかもしれないけど
サンクス ホットキーみたいなのはないんですね
ボタン1を押すとマウスカーソルを操作し続け、ボタン2を押すと止めるというスクリプトを書いたんですけど もし、ボタンが認識されなくなったり、スクリプトを改造したときうっかり止めるコマンドを無効化してしまった場合 どうやってスクリプトを止めたらいいんでしょうか 例 joy1:: SetTimer,auto,100 return joy2:: SetTimer,auto,off return auto: MouseClick,left,100,100 return
WheelrightとWheelleftってもしかして動かない?
vista以降なら動くはず
>>399 Suspend、Exit 等をホットキーに設定し忘れた場合
マウスが動くなら通知領域のアイコンから終了。
無理なら Ctrl+Alt+Del 押すとスクリプトは一時停止するので
タスクマネージャー、ログオフ、再起動で停止させるしかない。
>>402 ありがと
とりあえず先頭に esc::Pause を入れとくことにしたよ
あと、Suspend使うと止めるボタン効かなくなるからみんな注意しろよな
404 :
名無しさん@お腹いっぱい。 :2013/08/19(月) 09:23:10.14 ID:4RM237Gp0
asd
時代遅れなアプリケーションで デュアルモニタ環境で 座標値がマイナス値になる場所にウィンドウを置くと スクロールが出来なくなるソフトがあるんですが AHKを使用してスクロールを可能にするアイデアないでしょうか?
リダイレクトホイールの要領でSendMessegeで直接 WM_MOUSEWHELL投げる マウスの座標は適当に正の値にかきかえてやればいい
>>406 ありがとう〜
CoordMode,Mouse,Screen
MouseGetPos,m_x,m_y
htarget := DllCall("WindowFromPoint","int",m_x,"int",m_y)
WheelDown::
SendMessage, 0x20A, -120 << 16, ( m_y << 16 )|m_x,, ahk_id %htarget%
というように書いてみましたがこのままではマイナス値で動きません・・・
> マウスの座標は適当に正の値にかきかえてやればいい
というのはどういうことでしょうか?
座標書き換えたらそれこそ動かないんじゃね
>>407 アプリにもよるけど案外ホイールスクロール時はマウス座標は見てない場合が多かったりする
100,100とか適当に固定値入れてみて試してみ
410 :
405 :2013/08/21(水) 01:16:18.56 ID:PqN5Ln+x0
>>409 サンクスです
SendMessage, 0x20A, -120 << 16, ( 100 << 16 )|100,, ahk_id %htarget%
座標を無視してくれるアプリの場合↑これでも動くはずだということですよね?
無理でした・・・これだともう打つ手なしですか
スクロールできればいいなら WM_MOUSEWHELLの代わりにWM_VSCROLL(0x115)投げるとか あと>407 AHKなしの環境でも動かないなら多分意味ないかもだが WM_MOUSEWHELLのマイナスXY座標値はバッファサイズの問題で変換が必要だった ; lParam: XY座標 CoordMode,Mouse,Screen MouseGetPos,mx,my,hwnd,ctrl,3 my += (my < 0) ? 0xFFFF : 0 mx += (mx < 0) ? 0xFFFF : 0 lpalam := (my << 16) | mx WindowFromPoint使う場合はわからんけど、POINT構造体はLONG型だからやっぱ変換の必要があるのでは
>>411 遅れて申し訳ない・・・
週末ちゃんと取り組んでみます
ホントに有難うございます
AHK_L+MG_Lでマルチタッチのピンチイン/ピンチアウトに動作割り当てしたいんですが そもそもマルチタッチ自体を判定できないからどうやっても無理なんでしょうか?
414 :
名無しさん@お腹いっぱい。 :2013/08/24(土) 15:44:31.89 ID:cNQA4occ0
マルチタッチ判定は無理じゃないかな
どうすればマウスオーバーでマウスカーソル下のウィンドウをアクティブに出来るだろう? windowsの設定でもそりゃできるけど、環境をポータブル化したいからwindowsの機能に頼るのはちょっと都合が悪い
#Persistent SetTimer, WatchCursor, 100 Return WatchCursor: MouseGetPos, , , id, control WinGetTitle, title, ahk_id %id% ;ToolTip, prev%prevtitle%`nnow%title% If(title != prevtitle){ prevtitle := title SetTimer, WindowActivate, -500 } Return WindowActivate: MouseGetPos, , , id, control WinGetTitle, title, ahk_id %id% WinActivate,%title% return 勉強がてらマウスオーバーでウィンドウアクティブの基本動作作ってみた。あとは任せた
OSの設定を簡単にOn/Offできるようにするのが楽なんじゃないかな
AHKで静的変数はどうやって作れるのでしょうか?
関数文{ static,変数名 } こんなかんじで行けたはず。てか関数内部の変数はglobal書かないと勝手にスタティックになるんじゃねーっけ
勝手にスタティックになるんですか それはいいですね
ならないよ 関数内のデフォルトはlocalだ
便利だなーAHK
FirefoxやInternet Explorerで表示するhtmlページ中で、マウスがテキストボックス上にある場合を判断したいのですが、スパイで見てもコントロールクラスが表示されません。 他の方法でマウスがテキストボックス上にある場合を判断することは出来ないでしょうか?
無理だなあ グリースモンキーでやったほうがいいんじゃない
俺も四苦八苦試してみたけどそもそもテキストボックスを認識できない様子。 ダイアログまでしか取得できなかった
やりたいことにもよるけど ブラウザ操作は、AHKとVimperator(とそのプラグイン)を組み合わせるのが融通きく印象
というかFirefoxならVimperatorなりKeySnailなりだけで充分な気ガス IEは……
429 :
名無しさん@お腹いっぱい。 :2013/08/30(金) 23:52:24.84 ID:Kq8gd9900
Vimperator側でhotkeyつくってAHKで呼び出すとか? その発想はなんでなかったんだ俺
内部のことは内部で判定させて処理を外に投げるのがいいな 幸いFirefoxは柔軟に内部状態を判定できるし、Vimperatorだと複数キーストロークも扱いが簡単でいいな 例えば、ghで左モニタ、giで右モニタにウィンドウを移動させてる
訂正 glで右モニタ
>Firefoxは柔軟に内部状態を判定できる どうやるのかくわしく教えて
「マウス座標取得」とかで調べてみたら?
Win7でスタートボタンだけ消すって出来ないのかなぁ WinHide,ahk_class Shell_TrayWnd WinHide,スタート ahk_class Button(タスクバーだけ消すとボタンが残るので) って書いたら消せるけどタスクバーは残したいからスタートの方だけにしたら消えてくれない
>>434 WinHide,ahk_class Shell_TrayWnd
WinHide,スタート ahk_class Button
sleep, 1000
Winshow,ahk_class Shell_TrayWnd
ってやったらWin7のスタートボタンだけが消えた。
というか Winshow,スタート ahk_class Button を実行しても
スタートボタンが出てこなくなった。
Windows再起動したら復活すると思うけど。
こっちだと消えない…ボタンがちょっと縮んだ感じになって残っちゃう
ボタン消したいのは自分の我侭だから素直にタスクバーを完全に消しちゃおう
>>435 ありがとー
基本タスクトレイは左において自動的に隠してる。 これが意外と便利なんだ
438 :
435 :2013/09/01(日) 08:17:43.04 ID:Ro7Yaky+0
>>436 いつもは「タスクバーを自動的に隠す」を有効にしている状態だからなのか
>>435 でスタートボタンが消えたけど(カーソルをタスクトレイがあるところに近づけるとタスクトレイだけが表示される)
無効にしてから試してみたら消えなかった。
んー? send,{%A_thishotkey% down} でもキーリピートしない。なんでや
AHKって変数内容をスクリプト文として解釈させるってできましたっけ? help_nara = 鹿せんべい help_kyoto = 生八つ橋 addr = kyoto tooltip help_%addr% ; <=コレを help_kyoto変数と解釈させて"生八つ橋"を表示させたい キー押下時に、最前面プロセス名でtooltipのヒント内容を変えたいのですが、 スマートに出来ないかなと…
スクリプトにラベルはりつけて if (islabel(labelcheck)) gosub % labelcheck else send % labelcheck みたいにすれば? ラベルがあるならgosub,でラベル内の処理をする
%help_%addr% とかじゃないの?
hoge := help_%addr% tooltip %hoge%
444 :
440 :2013/09/01(日) 15:07:19.89 ID:/gH2/QrZ0
>>441 ラベルなら直接変数化できるのか
ところで 例中の単発の % はどういう風に使うモンなんでしょう?
>>443 なんかトリッキーですが出来てますね
ありがとうございました。
446 :
440 :2013/09/01(日) 15:50:50.86 ID:/gH2/QrZ0
tooltip % help_%addr% これでいいよ
最大化⇔元に戻す これを一つのキーで実行できますか?
できるよ Maximize: WinGetActiveTitle, Title WinGet MX, MinMax, A If MX WinRestore, A Else WinMaximize, A return
>>449 丁寧で迅速な対応に満足しております。
機会があればまたお願いします。
この度はありがとうございました。
なんか。サポートセンター思い出しちゃったよ
ヤフオクw
おめでとうございます!! 450さんから「非常に良い」と評価されました。
1.1.13.00 - August 27, 2013 Ported StrSplit() from v2 alpha.
GUI作成についてお助け下さい 以下のスクリプトの、上下の間隔を空けたいのですが、どうすればよろしいでしょうか? よろしくお願いします Gui, +AlwaysOnTop Gui, Show, h100 w100, てすと GUI, Add, Text,, ( あいうえお かきくけこ さしすせそ ) return
>>456 言葉足らずに申し訳ありません。
複数行テキスト改行時の間隔設定をお聞きしたかったのです。
やはり分割でXY指定しか出来ないのですね。
今まで通りXY指定で作成します、有難うございました。
「行間」って言葉があってね 一行ごとに小さな空白フォントを挿入とかでも出来るかな
`n使えないのか
非アクティブウィンドウにCtrlSendでキーを送ると そのウィンドウがアクティブになってしまうんですが 非アクティブにしたままキーを送る方法ってありませんか?
アクティブにならないよ そのアプリ側の仕様か記述方法が悪いかのどちらかじゃね
すみません 確かめてみたらアプリ側のせいでした ありがとうございました
以下のコードに、ローカルに保存されたhtmlを表示させる事は出来ますでしょうか? よろしくお願いします Gui, Add, ActiveX, w500 h500 x0 y0 vdoc, browser doc.silent := true ComObjConnect(doc,"IE_") IE_DocumentComplete(doc) { doc.Document.Body.Style.Overflow := "hidden" } Gui, Show, w500 h500 Center, HTML Gui return GuiClose: Gui, Destroy ExitApp
>>463 Gui, Add, ActiveX, w500 h500 x0 y0 vdoc, HTMLfile
FileRead, html, Z:\foo.html
doc.write(html)
Gui, Show, w500 h500 Center, HTML Gui
return
GuiClose:
Gui, Destroy
ExitApp
質問です 現在マウスオーバーで最前面に出てるプログラムにマウスが乗っかったら隠すって処理を書いてるんですが、タイトルが全部入っちゃうとタイトルが少しでも変化するとプログラムが動かなくなります 例えばfoobar2000なら2000の部分だけタイトルを抜き出すことはできませんか? 今こういう処理をしています MouseGetPos, , , id, control WinGetclass, window, ahk_id %id% WinGettitle, title, ahk_id %id% class = %title% ahk_class %window% ;対象ウィンドウのウィンドウクラス名 WinActivate,%class% SysGet,titlehigh,4
ウィンドウ指定の方法ぐらいは読んだの?
読みました タイトルマッチモードは設定してあります 要するに変わったタイトルと前のタイトルの一部がマッチしてればという動きをさせたいんです
>>465 このスクリプトだとタイトル指定関係なく目的の動作しないと思いますが・・・。
全部書くと長いと思うし落ちてたスクリプトを改変してたので気が引けたんですが、全部書いたほうがいいのかな・・・? SetTitleMatchMode,2 #WinActivateForce #SingleInstance FORCE TrayTip , , マウスオーバーで隠す, 10 ,1 MouseGetPos, , , id, control WinGetclass, window, ahk_id %id% WinGettitle, title, ahk_id %id% class = %title% ahk_class %window% ;対象ウィンドウのウィンドウクラス名 WinActivate,%class% SysGet,titlehigh,4 #Persistent ;初期設定 WinGetActiveTitle, lastATitle WinActivate, %class% WinSet, AlwaysOnTop, ON, %class% WinActivate, %lastATitle% flag = 0 SetTimer, OverHide, 100 ;100ms毎にマウス位置をチェックし、ウィンドウを隠すか判断。 return OverHide: WinGetPos, x, y, w, h, %class% x1 := x + w y1 := y + h y += %titlehigh% ;タイトルバーをマウスオーバー判定から除く。
;対象ウィンドウがなくなってれば即終了。 IfWinNotExist, %class% ExitApp CoordMode,Mouse,Screen MouseGetPos, xPos, yPos If xPos between %x% and %x1% If yPos between %y% and %y1% { WinSet, AlwaysOnTop, OFF, %class% WinSet, Bottom, , %class% flag = 1 } else gosub RestoreOnTop else gosub RestoreOnTop return RestoreOnTop: If flag = 1 { WinGetActiveTitle, lastATitle WinActivate, %class% WinSet, AlwaysOnTop, ON, %class% WinActivate, %lastATitle% flag = 0 } return
うーん、もうちょっと悩んでみます。 ありがとうございました
想定している状況がよく分からんが、タイトルを使わずにクラスだけで指定するか、 ID または PID を使うわけにはいかないのかな。
PIDですか、試してみます。 想定してるのは動画なんかを最前面表示にしておいて、作業するかんじです マウスカーソルが動画本体に触ると、最前面から消えます。 ウィンドウタイトル部分だけつかめるようにしています。さわれなさすぎても不便なので。 1:ほかのランチャからこのahkファイルをホットキーで呼び出す 2:マウス下のウィンドウをまずアクティブにして最前面に持ってくる 3:監視開始、マウスカーソルが触ると消える 4:ウィンドウタイトルやウィンドウクラスが消えると、処理終了
あ、そうか、Ifでクラスだけか、特定タイトルでタイトルコミで判定するか分ければいいだけのことか・・・ すみません解決しました。ありがとうございました
便利なのか不便なのかわからんスクリプトだな
>>464 嬉しい素晴らし過ぎます!
本当に有難うございます!!!!!
run,AutoHotkey.exe パス名.ahk,,,pid でrunコマンドでahkファイルを呼び出してpidをとってきても process,close,%pid% だと呼び出したahkスクリプト消せないのね 呼び出した先のプロセスどうやって消そう
呼び出した先のahkのほうがキーフックは優先されるっぽい つまり、呼び出した先でExitAppのホットキーつくればそれでいい マウスジェスチャーとかで停止命令は俺もわからん
ahkwiki、ウィンドウ指定の方法より参照 process,close,ahk_pid %pid%
Processコマンドでウインドウの指定はできないだろ
>>478 消せるよ。スクリプトが間違っているか、何かが干渉しているんじゃない?
;-- 例
Run %A_AhkPath% fuga.ahk, , , pid
Sleep, 3000
Process, Close, %pid%
;-- fuga.ahkの中身
Loop {
ToolTip, %A_Index%
Sleep, 100
}
GUI作成についてお助け下さい 一つのスクリプトに、複数のGUIをホットキーに設定して呼び出したいのですが GuiClose:やButtonOK:が重複してしまいます。 解決策をご教示下さい。
基本的にGUIとかはいくつかのahkとして別にしたほうが不具合ないぞ サブメニューとか常駐ものは骨になるahkファイル内部に書き込むよりahkファイルを別にしておけばキーフックも生きるし、処理後にexit処理かけばいい。 要するにahkを呼び出すのを階層化するといい。おれはこうしてる
>>483 こんな風に、Guiごとにラベルを付ける
Gui, 1:New, +LabelHoge
Gui, 2:New, +LabelFuga
そうするとこんな風に特殊ラベルも変化する
HogeClose:
FugaClose:
ちなみに、ラベル付けなくても 2GuiClose: みたいにGui番号で区別されてたはず
>>484 そうなんですよね、今までは不具合無くその方法で運用していました。
ですが最近、一つのスクリプトに結合した方がスリムかな?、と思い質問させて頂きました。
>>485 有難うございます。
今からチャレンジしてみます。
>>485 遅ればせながら、無事出来ました。
アドバイス有難うございました。
Chrome AuraだとOmniboxのコントロールの取得が出来なくなってる Chromeのことは拡張でやれってことか…
guiに文字を表示する時に文字列中の「&」がうまく表示されないのはなんででしょうか? 例えば Gui, Add, Text, , & だと何も表示されません Gui, Add, Text, , &&&&& というように&を重ねれば&の数÷2個表示されます。この場合「&&」 URLを表示したい時等に地味に困るので指定したそのまま表示したいのですが どうすればいいんでしょうか
すみません。自己解決しました wiki呼んでアクセスキー指定のためだと分かりました そういう仕様だと正式に分かったので(&&は絶対に&になる)予め文字列を置換してから表示するようにします
>>492 こっちの方がコピーも出来るし面倒無いかも。
Gui, Add, Edit, ReadOnly, &&&&&
みんなAHKファイルごとに変数を渡すのってどうやってる? 一度クリップボード経由で別のahkファイルに渡すのはできたんだけどこれはスマートなのか・・・?
最初に一発渡せばいいなら起動時のパラメータで指定 やりとりあるならOnMessage使えばいいんでね
AHK_LにてMPC-HCにグローバルホットキー機能をつけてやりたいんですが、 何故かアクティブなウィンドウに送ってしまいます バックグラウンドのウィンドウにSendするにはどうすればいいんで? Alt+Sでいつでも再生/一時停止したいです
>>497 おおなるほど!
DetectHiddenWindowsの使い方初めて知りました、ありがとうございます!
厚かましいですがもう少しお教え願います
#ifWinExist ahk_class MediaPlayerClassicW以下にそのように記述したら
アクティブなときに無視されることがしばしば
処理が追い付いてないとかですか?
>>498 スクリプト書いてくれないと推理しか出来ないが
たぶんAuto-executeセクションでDetectHiddenWindows指定してないから?
;--[Alt+S] MediaPlayerClassic 再生/一時停止--
DetectHiddenWindows,On
#ifWinExist ahk_class MediaPlayerClassicW
!s::
ControlSend,,{Space},ahk_class MediaPlayerClassicW
#ifWinExist
Return
スクリプト内に記述すると、スクリプトのエラー表示を一切出さなくする事って出来ますか?
#ErrorStdOut すみません、これで正しいでしょうか?
既に設置済みのEditボックスに、変数の内容を反映するコマンドがあったら教えて下さい。 Gui, Add, Edit [, Options, Text]で、TEXTに変数を指定してみましたが この方法では新たにEditボックスを設置してしまうため、望みの挙動にはなりませんでした。
WinMinimizeで最小化してもそのウィンドウがアクティブのままの時がたまにあります ウィンドウを確実に非アクティブにするにはどうすればいいのでしょうか
505 :
435 :2013/09/08(日) 21:10:54.55 ID:5KfimBXf0
もしかして、古いk-lite codec packをインストールしている状態で LAV Splitter単体をインストールしたなら再生できなくなるよ その場合はk-liteとLAVの両方をアンインストールしてから 最新版のk-lite codec packをインストールね。 とここまで書いて思ったんだけどvlcで見れないなら関係ないか・・・
間違えました
常駐中のスクリプトに設定したホットキーを、別の常駐中のスクリプトからSENDしたいのですが、どうも上手くいきません。 Sendする別のスクリプトの記述例ですが DetectHiddenWindows, On ControlSend, ahk_parent, {m}, sample.ahk - AutoHotkey これや DetectHiddenWindows, On ControlSend, , {m}, sample.ahk - AutoHotkey ahk_class AutoHotkey これもダメです。 何か記述が間違っているのでしょうか?
>>503 ありがとうございまし。
おかげでほああがああああああああああああ
>>503 はどうやら目覚めてはいけないものを起こしてしまったらしい
ワロタw
511 :
名無しさん@お腹いっぱい。 :2013/09/08(日) 22:51:07.03 ID:lTaxyh4N0
なんだこのながれw
有難うございます 試してみます!
複雑なやりとりをしたい場合には OnMessage, PostMessage は便利かもしれないけど,
ホットキーラベルを実行したいだけなら単に Send すればいいと思う.
Send しても認識してくれないならたぶんキーボードフックが原因.
>>48 , 52, 55 あたり参照.
>>514 有難うございます!。
OnMessage と PostMessageは私には難し過ぎて、少し挫折していたのですが
#UseHookを無効にした所、あっさりと出来ました!。
皆さん、これからもよろしくお願いします。
OnMessageは俺もよくわからんのだけど、 例のOnMessage(0x5555,"MsgHandler") のばあい、 0x5555にMsgHandlerの中の関数を格納して他に渡すって解釈でいいの? てことは0x5555はたとえば0x1234や0x9876でもいいの?
>>516 PostMessageが送る側
OnMessageは受け側(PostMessageが送ったものを受け取る側)
0x5555の部分は送る側と受ける側を同じ値にすれば送受信できるので
0x1234や0x9876でもOK。
PostMessageで送ったデータをOnMessageが受けたら、
OnMessageの第2引数で指定している関数が実行される。
つまり、
>>512 のリンク先のサンプルは
F12を押すと、receiver.ahk のトレイアイコンに
PostMessage で指定した値が表示される。
TryaTipの部分をTooltipやMsgboxに変更し、
PostMessageの各引数の値を変えて試すといい。
へぇ〜
>>512 のリンク先に
>文字列の受け渡しになるとちょいと面倒になるけど
ってあるけど、wParamとlParamに文字列入れるだけじゃ無理なの?
519 :
名無しさん@お腹いっぱい。 :2013/09/09(月) 22:22:45.15 ID:HNm+9wKs0
「カタカナ」キーを「Ctrl」に割当てたいのですが、 vkF2sc070 :: Ctrl にすると、 Ctrlキーがいつまでたっても押しっぱなしの状態になってしまいます。 何か良い方法はありませんでしょうか?
横レスだけれど
>>518 の言うとおりにやってみた
PostMessage / SendMessage
http://l.autohotkey.net/docs/commands/PostMessage.htm ;; sender.ahk
F12::
NewTitle:="foooo"
SetTitleMatchMode 2
DetectHiddenWindows On
;; PostMessage, 0x5555, 11, 22, , receiver.ahk ahk_class AutoHotkey
PostMessage, 0x5555, 0, &NewTitle, , receiver.ahk ahk_class AutoHotkey
return
これで38274912が表示されるのは何故なんだろう
文字のやり取りはこういう風にしてる ---- send.ahk ---- SendText("hoge", "recv.ahk") SendText(text, script) { DetectHiddenWindows, On SetTitleMatchMode, 2 IfWinExist, %script% ahk_class AutoHotkey { ControlSetText, Edit1, % text PostMessage, 0x5555 } } ---- recv.ahk ---- OnMessage(0x5555, "MsgListener") MsgListener() { DetectHiddenWindows, On ControlGetText, value, Edit1, ahk_id %A_ScriptHwnd% ; これ以降で受け取った文字を処理 MsgBox, % value }
>>520 返信ありがとうございます。
カタカナキーは押しっぱなしにしていると、
その間何回もDownコマンドが送信されているんですね。
F2070 d 0.03 not found
F2 070 d 0.03 not found
F2 070 d 0.03 not found
F2 070 d 0.03 not found
また、キーを離してもUpが送信されていないため
押しっぱなしの状態になると言う事が理解できました。
書き途中で送信してしまった・・・。 キー自体を変更することは盲点でした。 やってみます。ありがとうございました。
エクスプローラーとかで、ファイル名をfirefoxで検索するキーを作れます?
>>526 迅速な対応にありがとうございました。
機会があればまたお願いします。
追記 自分で試した範囲だと、 デスクトップの上辺にも、はみ出せるソフトとしては、Massigra(ver 0.45)を知っていたので そのウィンドウスタイルとウィンドウEXスタイルをコピーしてGUIに適用してみたのですが、だめでした
530 :
521 :2013/09/10(火) 21:57:26.68 ID:zTWKrrZr0
>>522 なるほどそうやって文字列を受け渡すのか
勉強になったよありがとう
ゲーミングマウスのボタンはさすがに認識できないよね・・・ scとかで取れたら夢が広がりまくりングだけど
>>531 マウスのドライバユーティリティ(SetPoint等)の設定がAutohotkeyより先に認識するので
「使わないキー」か「F13〜F24」などの仮想キーに割り当ててから、それに対してAutoHotkeyで割り当てすればいい。
2.2 マウスのサイドボタン3個目以降にもホットキー割り当てたい。
ttp://ahkwiki.net/Faqs
マジか、ザックリググったけど見つからなかった・・・ 考える人は考えるもんだなぁ ありがとうやってみる
レジストリを変更しない方法で 無変換キーにAltを割当てないのですが、うまくいきません。 vk1Dsc07B::lAlt にすると 1D 07B s d 8.63 not found 1D 07B h u 0.16 not found A4 038 i u 0.03 LAlt のように、無変換キーがUpされたタイミングで、 AltもUpされてしまう動作しかしないのですが、 これを解決できる方法はありますでしょうか?
vk1Dsc07B::send,{Lalt down} vk1Dsc07B up::send,{Lalt up} でどうじゃろうか
536 :
名無しさん@お腹いっぱい。 :2013/09/11(水) 11:41:31.64 ID:ZVMVhCIw0
動画編集ソフトでテンキーショットカット使いたくて設定してみたんだけど、 押しっぱなしで誤作動しちゃう 下の例だと、 NumpadPgUp:: SendInput,+^{PgDn} ; これで最初は前に進むんだけど、押し続けてるうちに逆に戻っていってしまいます 指南いただけんでしょうか #IfWinActive ahk_class TClipEditForm.UnicodeClass #NoEnv ; SendMode Input ; SetWorkingDir %A_ScriptDir% ; SetTitleMatchMode,2 #InstallKeybdHook #UseHook NumpadUp:: SendInput,+^{PgUp} ; NumpadPgUp:: SendInput,+^{PgDn} ; #IfWinActive
537 :
名無しさん@お腹いっぱい。 :2013/09/11(水) 11:53:53.73 ID:Gbvm4IX00
Inputやめてみるんだ。判定が速すぎて誤作動起こすことがある。
ファイラーなどで、選択したファイルを指定のexeに送るコマンドを 教えていただけませんか?
ファイラーのヘルプ見ろ
540 :
名無しさん@お腹いっぱい。 :2013/09/11(水) 14:15:49.10 ID:ZVMVhCIw0
>>537 ども。結局Send外して
【NumpadUp:: +^PgUp ;】
のように戻したら解決しました。
ただ、元々Sendを付けた理由が
>>6 の『CtrlとShiftが押しっぱなしになる』の対策というものでした
単体で押すときは起こらないんですが、
数秒押しっぱなしの時なんかは高確率でロックが発生してしまいます
Win7の固定キー機能とかテンキーマウスは無効です
#InstallKeybdHook付ければAHK側の原因が解消されるということは、
それ以外に何か原因があると考えていいんでしょうか?
>>540 原因は
>>537 が既に答えている。
突っ込みどころ一覧
*いらない設定が多い
*記述の順序が変
*SendModeの違いを理解していない
*行末の謎の;不要
;--初期設定(Auto-executeセクション)--
#NoEnv
#InstallKeybdHook ;修飾キー付きのホットキーではないなら不要かも
;--ホットキー--
#IfWinActive ahk_class TClipEditForm.UnicodeClass
NumpadUp::+^{PgUp}
NumpadPgUp::+^{PgDn}
#IfWinActive
Auto-executeで思ったんだけれど autohotkeyの動作を安定させる設定としてどういうものがある?
544 :
名無しさん@お腹いっぱい。 :2013/09/11(水) 21:47:50.74 ID:8EAZSNut0
104キーボードを使用中なのですが、 `をAlt+`に、 Alt+`を`に入れ替えたいのですがどうしたらいいでしょうか。 `::Send, !` で前半はできたのですが、後半ができません。
Process, Priority,, High SetTitleMatchMode,2 AutoTrim,off SetWorkingDir,%A_ScriptDir% #MaxHotkeysPerInterval 2000 #UseHook #NoEnv #InstallKeybdHook #SingleInstance FORCE あたりじゃない?
>>545 ほうほう
AutoTrimは見逃していたよ
参考になりました
autotrim設定の効果って= 系の時だけだよな コマンドによって引数の前後空白扱いがマチマチなのが少し気持ち悪い
549 :
名無しさん@お腹いっぱい。 :2013/09/11(水) 23:44:59.15 ID:8EAZSNut0
>>547 104キーボードだとなんかおかしな挙動してます。
Suspend Hotkeysだと`が入力されますが、
解除すると空のスクリプトでも必ずIMEのON/OFFになって上書きできません。
LのUnicode 32bit版 v1.1.13.00です。
VK SC Type Up/Dn Elapsed Key Window
-------------------------------------------------------------------------------------------------------------
F3 029 i d 4.26 not found
F3 029 i u 0.00 not found
>>549 ごめんキーボードフック使ってた。
常用してたから失念。
#UseHook
`::Send, !`` ;「`」→「Alt + `」
!@::Send,`` ;「Alt + `」→「`」
>>550 やはり変わりません。
思い当たるところといえば終了させてますがYAMYをインストール済みであること、
USBキーボードなのでドライバが標準HIDキーボードなことくらいです。
>>542 どもども
早速、そちらの内容に変更してみました
結果、残念ながらロックは再発してしまいました
他にも+^を使ったキー(文法同じ)が多数あるんですが、
そちらをガチャガチャやってると数秒で発生するようです
NumpadClear:: Left ;
このキーはコマ送りのキーなんですが、
+^のロックがかかっていると先頭に戻ってしまいます
ロックしてしまったときに自動的に外すような方法、
あるいは、
ロックになっていても同じ動作ができるような書き方はないでしょうか?
NumpadUp:: Send,{Lshift down}{Lctrl down}{PgUp} NumpadUp up:: Send,{Lshift up}{Lctrl up} これでもだめなら NumpadUp:: while(GetKeyState(A_thishotkey, "P"){ send,Send,{Lshift down}{Lctrl down}{PgUp} } Send,{Lshift up}{Lctrl up} return とか、やりようはいくつかある もしかしたら優先度の問題かもな
NumpadUp:: Send,{Lshift down}{Lctrl down} while(GetKeyState(A_thishotkey, "P"){ Send,{PgUp} } Send,{Lshift up}{Lctrl up} return もしかしたらこのほうがいいかも。
>>553-554 どもども
3つ試しましたが、いずれも押しっぱなしにすると1秒くらいで変になります
前進⇒前進⇒前進⇒後退⇒別の誤作動⇒ストップ
見たところ、Sendで入れると処理が追いつかなくなって別の処理が起きてしまう、
a;:Upの形式で入れると表面的には問題ないがロックが発生してしまう、という感じのようです
ポン、ポンと押す分にはどちらも動くんですけど、
押しっぱなしだとおかしくなります
ううむ。。。
>>557 もちろんキーボードフックは使ってるよな?
後はこれ試せばいいんじゃない?
*Send処理を速くする
SetKeyDelay,-1
SendMode,Input
*割り込み禁止にする
Critical
*スレッドの優先順位を付ける
Thread, Priority, 数値
>>558 SetKeyDelay,-1 SendMode,Input
こちらを冒頭に入れ、
Critical
こっちを関数の最初に組み込みました
ボタン押した瞬間にループみたいになってAHK終了しないと操作できなくなりました・・・
>>559 キーリピートが早くてCriticalでせき止められていたスレッドが一気になだれ込んだんだなw
>>535 ありがとうございます!
しかしやはりうまく動作しませんね。
あきらめてレジストリをいじることにします!
大量のウインドウグループに対して、複数のホットキーを割り当てているのですが ホットキー毎ににウインドウグループを記述しているので、スクリプトが肥大化してしまいます。 もっとスマートな方法があれば教えて下さい。 よろしくお願いします。
>>560 ロックかかった状態でも普通に作業行えればとりあえずいいんですけど、
a::b を、+^や^付きの状態でも常にbで出力する方法は無いもんでしょうか?
*a::bではだめでした
AutoHotkeyに適してるキーボードってなんだろ スペースバーが短くて親指でいろんなキー押せるやつかな
プログラマブルキーボードとか F13〜F20が余分についてるだけでも大分捗るだろうね
最下段全部ワンショットモデファイヤ化しちゃう感じでつかってる
このスレのアップローダーにあったOSMを俺なりに改造したもの使ってる。 Space単推しは判定させずに、上げた時反応するようにしてる 仕組みだけ書くわ 俺が使ってるのはコレに連打でキーリピート発生させるとかごちゃっててここには書ききれそうにない
#MaxHotkeysPerInterval 2000 #UseHook #InstallKeybdHook Space:: keywait,%A_thishotkey%, T0.5 if ErrorLevel flag := 1 return Space up:: If(flag = 1) flag := 0 else send,{Space} return w::Spacedown("{Up}") a::Spacedown("{left}") s::Spacedown("{down}") d::Spacedown("{right}") Spacedown(key){ Global flag If (GetKeyState("Space", "P")){ send,%key% flag:=1 }else send,{%A_ThisHotkey%} }
>>565 Functionキーはホームポジションを崩さないと押せない位置にあるし、
親指で押せないから、やはり暇してる親指に仕事させるためにも
無変換、変換がついた日本語キーボードがいいかな。
>>570 そこを考えてHHKBJP Pro買った
>>562 外部関数にして、ホットキーの発動検出以外は全て外に逃すとか。
ちなみに俺のは、関数で逃しても、メインの発動部分+αで20000行になってるw あまりに長すぎるので、なんかおかしくなって、参照したいときは、 調べたいキー:: で検索して、F3を何回か押して、該当箇所を見つけて編集してる。
>>572 返信有難うございます
結局代案として、ウインドウグループのみを記述したスクリプトを用意し
それを#IncludeAgainで別のスクリプトに送る事にしました。
>>573 どんな設定をするならそこまで増えるんだろう?
まだ使い始めたばっかりなので、
無変換 & N;; Send, {Del} ・・・のような使い方しかしてない
私にはショートカットの代替的な使い方しか思いつかないんだけど、
みんなや
>>572 氏は他にもどのようなスクリプトを書いてるの?
WSHでやることもAHKに任せる感じ?
2万行か…もし消えたら軽く死ねるなw
関数合わせても1000行ないわw
調べたら700行ちょっとだったわ 小物ツール類を合わせても1000行に届かないw
メインだけで二万とかスパゲティ過ぎて絶対メンテしたくないレベルw
うちは常駐ahkは#includeと\LIB全部足しても6000行程度だな、うち半分はコメント行
>>576 簡易プログラミング的なことやバッチ処理は単体ahkでやっちゃう事が多いわ
GUIも一応作れるしexe化もできるから小物作るには便利
WSHはオブジェクト回りがよく分からなくてほとんど使わないなあ
一番長いであろうサブルーチン用まとめファイル見てきたらぴったり900行だった
コピペックスがwindows7、64bitで使えなくなってたからコレで作りたいんだが、テキスト文章をドラッグして選択時っていう条件が認識できるんだろうか・・・ ちょっと調べたけどなかったんで質問です
>>583 コピペックスでググってもなんだかわからん。
条件の前にとりあえず何したいかぐらい書けよ。
585 :
名無しさん@お腹いっぱい。 :2013/09/13(金) 11:25:08.22 ID:t4nfJq000
ああ、ごめん説明足らずだった テキストを選択してワンクリックでクリップボードに選択テキスト文を送るソフトで、その名前がcopipex ところがコレがwindows7で使えないから、ahkで作ろうと思ったんだ やりたいこと:選択テキストを自動コピーする で、今躓いてるのが、マウスでドラッグした部分のテキスト選択 単純にドラッグ後フラグを立ててワンクリックでctrl+cだとファイルとかまでクリップボードに送ってしまうから、どうなのかなって
587 :
名無しさん@お腹いっぱい。 :2013/09/13(金) 11:57:19.93 ID:t4nfJq000
>>586 あ、クリップボードだけで行けたんだ・・・
ありがとうなんかできそうな感じ
そういうソフトってctrl+cを送ってるだけだから、意外と単純なもん
すみません、お尋ねします。 Reloadコマンドを、別の起動中のスクリプトに送信する事は可能でしょうか? よろしくお願いします。
できるよ、方法はいくらでも
reloadコマンドそのものを送信するということ? sendmessageで数値を送って、受け取り側でreloadを実行すればいいと思う sendmessageの使い方はすぐ上のレスに出ているよ
リロードメッセージを送るか、#SingleInstance FORCE
ディスプレイ画面の左端にマウスカーソルが行った時に runで実行させる方法教えて頂けないでしょうか
Mousegetpos と SysGet, Monitor, MonitorWorkArea でなんとかならんだろうか。もしくはマウスジェスチャーのコーナー設定
>>593 死ねカス座標トレボケアホカス自分がやりたいことを理論的に過剰してみろよウンコウジ虫
>>591 >>592 返信有難うございます、どうやら深く考え過ぎていただけでした。
単純にホットキー設定したReloadコマンドの送信で解決しました。
お騒がせしました。
>>489 だけどFirefox風のXPathの使い方わかる人いません?
単語選択はマウスダブルクリックで可能ですが、 これをキーボードだけで行いう場合、 どのように実装するのでしょうか? 単純にクリック2回でSendしても、 キャレット位置でのダブルクリックにならず、 今マウスがある場所でのダブルクリックになってしまいます。
キーボードショートカットで調べてみればいいよ
send,{Ctrl down}{left}{shift down}{right}{Ctrl up}{Shift Up} で単語選択 やってることは見ての通り。単語先頭にカーソル移動してシフトで単語末尾まで選択
エディターでの話なのかブラウザとかのテキストの話なのか
>>599-601 ありがとうございます!
なるほどー。アプリに設定されている
ショートカットキーを利用すればよかったのですね
んでプロセスIDごとにそのキーを変更しろと。
603 :
598 :2013/09/18(水) 04:18:24.38 ID:XwSk0UVl0
結局、単語選択のショートカットがないアプリでもやりたかったため、 以下のように実現しました。かなり強引ですが・・・ F13 & w:: CoordMode,Mouse,Screen CoordMode,Caret,Screen MouseMove, %A_CaretX%, %A_CaretY% Send, {LButton 2} return
そもそもダブルクリックで単語選択ってのもアプリ側で用意してる機能だから、 いずれにしろ汎用性はないわな
どっちも採用すればいいんじゃない? #Ifwinactiveあるんだし
"next ero video!"と叫ぶとd:\ero\からランダムにファイルを開くスクリプトお願いします
夏休み終わってるのに…とおもったら、後期開講前で暇なのか?
>>606 もし作るとしても、近所中に響き渡るような大声でないと認識できないようにするわな。
しかも発音チェックが厳しくて(r入ってるし)何度も叫ばないといけないとか…。
windowsって音声認識ソフトが無料で入ってたような気がするけど勘違いだったっけ?
テキストのコピーとペーストをGUIのボタンでやりたいのですが、 単純にSend,^cとやると当然ですが、GUI上なのでできません 直前のウィンドウを取得するにはどうすればよいでしょうか?
タブ付きのGUIで、起動する時に指定したタブを表示させる事は出来ますか?
>>611 |を2つ追加で無事出来ました
有難うございました
AI的に、入力した文字列が日本語っぽくなら自動的に全角モード に切り替える、いわゆる「りかなー」の賢いバージョンを考えるひとが いませんか。
半角文字をIMEオンにして打ち直しするスクリプトは過去ログ探せばある あとはお前がトリガになる日本語っぽいかどうかを判断する部分を書いて足せばおk
どなたか、わかる方がいたら教えて頂きたいのですが、 F12:: retVal := functionA() if(retVal == "hoge") { ;; なんかの処理 return } ;; 違った場合の処理 return この時、既に functionA を実行中だったら、functionA は実行しないで、 処理を終了するといった排他は出来るでしょうか? functionA では、Clipwait を使っているため、時間がかかる場合があり functionA を実行中に F12 を押して、functionA に入るとどうも処理が正常に 行われないまま、返ってくるようでして・・・ 2回目の(functionA が実行中に実行された)プロセスでは、functionAが正しい値を 返さないようなのです。
functionAの中で処理中フラグ立てる functionA() { static busyflg if (busyflg) return -1 else busyflg=1 ;内部処理 busyflg=0 return 戻り値 } staticにしちゃったけど関数実行前に知りたいならbusyflgはglobalにしておく
>>615 なんていうか、排他処理の魔界にようこそ って感じだけどw
説明書こうとしたら、
>>616 がほぼ同じこと書いてた。
static busyflag := 0 で初期化しておかないとだめだと思う。
実用レベルでは、
>>616 の方法で問題ないんだけど、ごくクリティカルなタイミングでfunctionA実行中に
度functionAが実行される場合があります。
排他処理に直接的に対処する方法は、AHKだけでは見つけられませんでした。
Win32APIのCreateMutex()あたりを使えばよさそうですが、詳しくは知りません。
代用として、スレッドの優先順位を上げて、functionA実行中はキーボードからのスレッド割り込みを
無視させる方法です。functionA実行中のホットキーを全て無視してなかったことにしてしまうので
副作用が大きいかもしれません。
functionA() {
Thread, Priority, 1
;; なんか処理
Thread, Priority, 0
return "なんか"
}
次は、一番まともそうな方法で、functionAの間は割り込みを保留させます。
ただし、この方法は2回目のfunctionAも実行してしまいます。しかし、正常に動作するはずです。
functionA() {
Thread, Interrupt, -1 ;; 割り込み禁止
;; なんか処理
Thread, Interrupt, 15, 1000 ;; 割り込みを標準状態に戻す
return "なんか"
}
Criticalではいかんのか
>>618 Critical使っても、Thread, Interruptと同様で2回目も実行しちゃうのよね。
けど、Thread Interruptよりわかりやすいな。
長い処理なら外部スクリプトにしてRunで実行 #SingleInstance, Ignore で排他制御
>>616 >>617 ありがとう。
やっぱり排他フラグ使うのがいいんだね
関数が汎用で他の箇所では排他いらないから(なぜかはよくわかんない)
ちょっと工夫してやってみます。
ちなみに、やってるのは Chrome の URL取得なんだけど、
Ctrl+L で、URL入力欄(?)にフォーカス移して、Ctrl+C でクリップボードに取得してから
値を返してる。
URL入力欄からフォーカスを戻すのがうまくいかないけど、Tabを何回か送ることで調整してます。
他にいい(URL取得する)方法って無いかな?
622 :
609 :2013/09/21(土) 15:20:41.50 ID:xaxPWIKl0
>611 ありがとうございます コピー、ウィンドウを取得もGUIのボタンクリックでやりたいのです……
Alt+Tabでフォーカス戻せば?
>>622 どういう処理をさせたいかまとめて書いてほしいな。
わざわざめんどくさい方法でやろうとしてる場合あるし。
>>621 Ironを使っているけれどアドレスバーにマウスカーソルをあわせて
Window Spyを動かすと
>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: Chrome_OmniboxView1
こうなった
Chromeでもこれを使えばいいんじゃない?
>>625 レスありがと。
でもそれだと、今開いてるページのURLって取得できないよね?
というか、説明が悪かったね、ごめん
操作を記録して自動でスクリプトに置き換える事できる?
628 :
609 :2013/09/21(土) 23:38:32.21 ID:8LRTHYfb0
>>623 やはりAlt+Tabしかないですかね
Atomでやると処理が追いつかなくてSleepをかなり取ってやんないといけないのでもうちょっとスマートな方法があればと思い質問しました
>>624 わかりにくくてすみません
エディタやブラウザ等で選択した文字列をホットキーではなく、GUIのボタンを押してコピーやペーストをしたいのです
ボタンを押すとGUIがアクティブになってしまうので、GUIがアクティブになる直前のウインドウが取得できればいいなと思っての質問でした
>>628 とりあえずこれでうまくいくはず。
;例1--GUI(テスト)以外の一番上のウインドウを取得--
SetTitleMatchMode,RegEx
WinGetTitle,WinTitle,[^テスト|スタート]
以下略
;例2--GUIを一瞬消してコピペ--
Gui,Add,Button,,Copy
Gui,Add,Button,,Paste
Gui,Show,,テスト
Return
ButtonCopy:
WinHide,テスト
Send,^c
WinShow,テスト
ToolTip % Clipboard
Return
ButtonPaste:
WinHide,テスト
Send,^v
WinShow,テスト
Return
Esc::
ExitApp
>>628 俺も似たようなの使ってるわ
ボタンじゃなくてホットキーだけど
ペースト先はguiでいいのかな?分からんからとりあえずguiに
#ifwinexist("guiのタイトル")
;お好きなのを
^c::
;+c::
;^+c::
temp = %ClipBoard%
ClipBoard =
Send, ^c
ClipWait, 1
if ErrorLevel{
ClipBoard = %temp%
SoundPlay, *16
}else{
;ペースト作業
Send, ^v
}
return
#if
>>629 ありがとうございます!
ご掲示が無ければ決して到達できていなかった答えです
二つとも近い所まではいけてたんですが遠回りばかりしていました
まさに目から鱗でした
とても参考になりました
>>630 ありがとうございます
632 :
609 :2013/09/22(日) 12:02:38.22 ID:GOYh0/mR0
>>631 は私です
>>629 もしよろしければ補足で教えて頂きたいんですが、
[^テスト|スタート]
って「テスト」もしくは「スタート」でないを意味すると思うんですが(きちんとその通り動作しますし)、
正規表現の[}は文字クラスなのに文字列にマッチしてるのは何故でしょうか?
スレチならすみません
AHK独自の正規表現かもと思い質問させて頂きます
その通り動作してないはずだぞ
>>632 とりあえず [^テスト|スタート] は「テ」「ス」「ト」「|」「ス」「タ」「ー」「ト」でないって意味だよ
「テスト」もしくは「スタート」でないなら !(RegExMatch("テ ス ト ま た は ス タ ー ト", "(テスト|スタート)") とかかな
文字「列」の否定系マッチって正規表現だけだとできないよね?
否定先読み
>>632 正規表現間違ってますねwお恥ずかしい限りです。
>>632 >>635 さんに教えてもらったこれで大丈夫なはず?
SetTitleMatchMode,RegEx
WinGetTitle,WinTitle,^(?!テスト$|スタート$).+$
638 :
609 :2013/09/22(日) 17:52:44.49 ID:Jjf6FiNn0
>>633-637 みなさんありがとうございます
テストの段階でうまくいっていたので不思議だったので質問しました
その後も色々テストするとよくわからない動作をしますね
左がGUIのタイトル、右が[^テスト|スタート]の「テスト」部分で、下にあるウインドウタイトルが「テスト」として
テスト、テス→GUI
テス、テスト→直前のウインドウ
がそれぞれマッチします
まあ期待通りに動いているんで気にしないことにします
本当にありがとうございました
>>635 >>否定先読み
俺も初めて知ったわありがと
スレチかも知れませんが教えて下さい。 AutohotkeyのProcess, WaitClose,コマンドは100ミリ間隔でチェックしますが コマンドプロンプトのstart /waitコマンドの場合だと、何ミリ間隔でチェックしているのでしょうか?。 よろしくお願いします。
641 :
名無しさん@お腹いっぱい。 :2013/09/25(水) 21:48:21.17 ID:YAzwl9yO0
ブラウザ限定の処理であること、読み込み済みやフォーカスの判定、送信ボタンのクリックetc. あらゆる点でJavaScriptでやったほうがよさげ
やること自体は初歩的なんですけど質問させてください #IfWinActive, でソフトごとに同じ入力信号を違う挙動を変えたいと思ってます 基本構造は単純に Explorer1を別に設定して ・#IfWinActive ahk_group Explorer1 でまとめて複数ソフトで Aという挙動 ・#IfWinActive ahk_class X でxというソフトでのみ Bという挙動 ・#IfWinNotActive を使って、上の「Explorer1とソフトa以外」で Cという挙動 という風に分けたいのですが、何かNotActiveで重複否定みたいに 「これとこれのソフトでない時」とうまくやれないんですかね? 多分、Explorer1を構成してるソフト群とソフトxを合わせて新たにExplorer2を設定して、 それを上記のNotActiveすれば確実なのは分かるんですが 確認する上で重複否定のほうが確認修正がしやすいかなと思いまして
>>643 これでできないかな
#If WinActive("ahk_group Explorer1")
A
#If WinActive("ahk_class X")
B
#If !WinActive("ahk_group Explorer1") && !WinActive("ahk_class a")
C
#If
>>644 ありがとうございます
試行はまだなのですがミスが有ったので訂正します、大したものではないですが
Explorer1を別に設定して
・#IfWinActive ahk_group Explorer1 でまとめて複数ソフトで Aという挙動
・#IfWinActive ahk_class X でxというソフトでのみ Bという挙動
・#IfWinNotActive を使って、上の「Explorer1とソフトx以外」で Cという挙動
#If winactive外に書けばいいんじゃないの? 全体に適応されるよ
#IfWinActive ahk_group Explorer1 A #IfWinActive ahk_class X B #IfWinActive C
C #IfWinActive ahk_group Explorer1 A #IfWinActive ahk_class X B
>>646 なんとなくおっしゃってることは理解できます
ただうまく噛み砕いて言葉に出来ないというか・・・
>>647 上から優先して判断されていくから
#IfWinActive ahk_group Explorer1
A
#IfWinActive ahk_class X
B
(ココ)
#IfWinActive
C
↑ココのところまで進んだのなら
#IfWinActive の時点で自動的に Explorer1とahk_class Xは弾かれたという、自動的にNotActiveという理屈ですか?
>>642 配布し複数人が使うことを想定していますので、
何か方法はないかと考え、URLを思いついた次第ですが、
JavaScript(ブックマークレット)という技術があるのですね。
ありがとうございます。参考になりました。
h["無題 - メモ帳 ahk_class Notepad"] := 1 みたいなハッシュってないですか
AutohotkeyL64版です。Gui,Add,Pictureでまず背景画像を配置し、その上からPNGを透過で配置します。 この上のPNGをGuiControl,Moveで動かすと、背景を引き連れて動いてしまいます。 この背景の左上に 123 456 789 この画像を載せると 透透 絵絵 こうなりますが、この上の画像を右に動かすと 123 絵絵6 789 こうなってしまうということです。 112 4絵絵 789 解決法はありますでしょうか。
>>651 ブックマークレットはJavaScriptの1つの使用形態
ブラウザが限定されるけどGreaseMonkey(GM)とかでもできる
GM側でキーバインド付与してahkから呼び出すこともできる
ただURLにしろGMにしろページ固有の動作なのでahkから呼び出すのは向いてないかな
>>654 ブックマークレットみたいな感じで、
URLにJavaScriptを記述できると勘違いしてました・・・。
GMでは使用者のブラウザに依存しますし・・・・
URLパラメータで渡せないサーバーサイドで動くサイトの結果表示を
AHKでやるのは困難みたいですね・・・。
AHKのexeを配布して、「はい終わり」とシンプルにやりたかったのですが。
サーバーサイドならパラメータ渡せばいいでしょ。 なんで諦めたのかよくわからんが。
>>655 ahkはあくまでWindowsのユーティリティだからな
ブラウザ依存は嫌だからとブラウザ介さず直接サーバとPOST通信するだけならまだしも
HTML解析までするのはちょっとahkの管轄外かと
そういうことならC#とかPythonとかお好きな汎用言語でやればいいよ
IfExistでは、1つのファイルの存在を確認出来ますが これをの複数の指定したファイルの存在を確認する事は出来ますか?
ワイルドカードつかえるから複数のファイルも一応対象だよ パターンマッチに共通項のないファイルは無理 if文+FileExist関数使えばいいんでね if FileExist("hoge") || FileExist("hage") || FileExist("haga") みたいな
>>659 早速試してみましたけど、これ素晴らしいです!
スクリプトの行数も減り、非常にスマートになりました。
有難うございます。
>>642 IE限定でいいなら、IEオブジェクト作ればいい。
ie := ComObjCreate("InternetExplorer.Application")
ie.Visible := true
ie.Navigate( "
http://www.yahoo.co.jp/ " )
While ( ie.Busy )
Sleep, 50
MsgBox, ページロード完了
ie.document.getElementById("srchtxt").value := "Autohotkey"
MsgBox, これで検索実行します
ie.document.getElementById("srchtxt").form.submit()
While ( ie.Busy )
Sleep, 50
MsgBox, 検索結果がみえてますか?
ie.Quit()
あとはWSHのJScript 丸ごと使える script.controll とか
マウス中ボタンと右ボタンでAltTabMenu開いてるんですが、左クリックではなく誤ってキーボードを押してしまって閉じると、Altが押しっぱなしになってしまいます。 何かいい方法はありませんか? ~MButton & RButton::AltTabMenu #IfWinExist ahk_class TaskSwitcherWnd ~!LButton:: WinWaitClose, ahk_class TaskSwitcherWnd Send, {Alt Up} Return
>>662 自分も前にAltTabMenuの罠にはまったなw
OSがVista以降なら「Ctrl + Alt + Tab」でメニューが常駐できるショートカットキーが追加されたのでAltTabMenuが必要なくなった。
~MButton & RButton::Send,^!{Tab}
Autohotkey備え付けのAlttab関係は信用ならんからな
試しにXPでAltTabMenu使ってみたがやっぱり挙動おかしいな
>>663 ありがとうございます!
こんなに便利なショートカットキーが追加されていたんですね!知らなかった…orz
Taskchange(key){ global TaskFlag If (TaskFlag == 0){ sendinput,{Blind}{Alt Down}{tab} TaskFlag := 1 }else sendinput,{Blind}{%key%} } で、押しっぱなしのキー開放時に TaskFlag:=0 送ってやってフラグ初期化って形で俺はやってる !^{tab}とかも試したけど俺の環境じゃちゃんと動いてくれなかった
AHKでパスワード自動入力とかしたいけど、 ソース見たらバレバレ。何か良い方法ないかしら?
パスワードをtxtにして暗号化圧縮 スクリプト起動時に解凍パスワード入力 回答したテキストを読み込んで変数に収納 テキスト消去 パスワード入力やろうとしてこんなん組んだ 変数見られたらバレるけど
>>667 上手く動かないこともあるんですね
ちょっと勉強してみます!
>>669 なるほど!暗号化圧縮ファイルを使う手ですか
とても参考になりました。
指定したキーの無効化する方法でお尋ねします。 a::returnにするとaを無効化出来ますが、この方法以外でもキーを無効に出来ますでしょうか? 出来ればif文で分岐しながら、指定キーを無効化してみたいです。 よろしくお願いします。
どういう分岐するのかしらんけどもa::で式を書き始めた時点でもとのaという機能は失われるよ。
例えばinireadから得た値が1を返したらaを無効 2を返したらbを無効みたいな感じ何ですけども...
a:: If(変数==1) return else send,a return b:: If(変数==2) return else send,b return みたいなかんじ?
>>674 AHK_Lなら #If を使えばいい。
ttp://ahkwiki.net/-If ;--テスト用--
F1::INI = 1
F2::INI = 2
F3::INI =
;-----------
#If INI = 1
a::Return
#If INI = 2
b::Return
#If
>>675 >>676 出来ました〜〜正にこれです!!!
ちょっと改変して目的の動作を確認しました!!
感謝しますありがとうございます!!!
実行中のスレッドを一時停止(Pause)ではなく終了するにはどうすればいいのでしょう。 F1で実行中のスレッドをESCでストップしたい場合、 ESC:: 停止フラグ=True Return F1:: 処理1 IF (停止フラグ) Return 処理2 IF (停止フラグ) Return 処理3 IF (停止フラグ) Return Return とすれば出来るのはわかりますがあまりに冗長です。
exit
>>678 IF (停止フラグ)
Return
を関数にして呼び出せば1行で済むじゃん。そうじゃなくて?
>>680 判定を所々に差し込むのがスマートじゃないって事
>>678 スクリプト落としてもかまわないなら Reload ExitApp
特定のスレッドを停止は判定差し込まないと無理かと?
>>681 訂正
Reload× 以降の行の実行を続けるので。
現在フォーカスしているブラウザのURLを取得する方法って何があるでしょうか? 今はURLにTAB移動してCtrl+Cでやっているのですが、 もっとスマートな方法があれば・・・
>>683 どのブラウザ使ってるか分からないけど、例えばChromeならCtrl+Lで[アドレスバーに移動]ってショートカットがある
それとCtrl+Cを組み合わせる
それかブラウザによっては、「URLをコピー」ってショートカットキーが設定されてるから、それをそのまま利用する
[タイトルとURLをコピー]ってのもあるから、使ってるブラウザで確認してみるといい
Chromeにはなかったかもしれないけど、拡張を入れればできるようなものがあったと思う
ちょっと前にも同じような質問があったような気がする
>>684 今使ってるブラウザはFirefoxで、実はこいつも
Ctl+Lでアドレバーに飛べるんで、それで移動してコピーしてます。
でも、その操作だとページ内のテキストボックスからフォーカスが移動しちゃって・・・・
要はブラウザのURLを読み込んで、
テキストボックスにIDとパスワードを入れる。
っていうスクリプト作ろうと考えてます。
>>685 ありがとうございます。ちょっと探してみます。
こいつか ID:CkNK7VAT0
>>686 Firefoxならcustomize_titlebar_v2等でタイトルバーにURL表示させるとかは?
>>686 少し前と同じ質問っていうか、同一人物だと思ってたんだけど違うの?
AHKだけだと、どうもできそうにない(というか向いていない)から、greasemonkeyあたりでスクリプトを組んで
それを呼び出すためにAHKを使えば? って話になったと思う。
IE限定でIEオブジェクトをどうのこうのっていう方法も誰か書いてた気がする。
Mousegesture_Lにチャタリング防止を組み込むことってできますか? 外部のソフトだとチャタリング防止が効きすぎてマウスジェスチャーが誤動作するんで
不可能ではないと思うが、誰もやってないので、あんたが作る必要がある
>>690 直接聞いてみたら?
AutoHotkey Community が、最近、表示がおかしいけどね…
別の所に掲示板作ってほすい
経験的に言ってチャタリング起こったらさっさと買い換えたほうが精神衛生上よろしい
実行中のflashから表示されてるテキストを引っこ抜くみたいなのって出来ますか? それに応じて何かさせたりとかしたいんですが あるいは画面キャプチャ->OCR的なものを通す->テキスト取得->それに応じて何かする みたいなフレームワークがあったら教えて下さい
autohotkeyよりjavaじゃないかなそう言うのは
AHKの標準コマンドでは荷が重そうな、込み入った処理をしたいとき、
キーの入力処理だけAHKに担当させて、
実際の処理はコンソールで動くJavaを呼び出したく、調べてみました。
ahk java で、唯一出てきたのが、この動画でした。
http://www.youtube.com/watch?v=EX0iT0NTTjw Javaソースを用意して、AHKの変数に入れて、javacを呼び出して、
sleep750msecの後に、java.exeでclassを実行しているようです。
上記は、runを2度経由して実装していますが、この方法以外に、
dllなどをつかって、なにか便利な呼び出し方法ってありますか?
補足です。 上記の方法で試したところ、Javaが実行されるまで2秒かかりました。 これを、もうちょっと短縮したいです。 私のAHKで培った知恵では、前回コンパイルしたタイムスタンプをみて、 既存のclassがあればコンパイルを省いて時間節約、くらいしか思いつきませんでした。
>>699 ありがとうございます。やりたいことは1でした。
紹介していただいたURLの方法で、標準入出力でデータのやりとりをして、
コンパイルについては、
>>698 で書いた方法で実装してみます。
横からレスをして申し訳ないのですが
>>699 の2を使えるようになるには何を読めばよいのでしょう?
>>699 ,701
dllcallの実装知らないけど、単にLoadLibrary呼んでるだけなら、C#でふつうに作ったDLLはCのとは違うから呼び出せないよ。
COM化するか、あるいは逆P/Invokeの一手間がかかるはず。
それほど難しくはないけど、おすすめはしない。
いろいろやってみたのですが思ったような動作を得られないので 伺いたいのですが ControlClick x120 y155 R 上記の命令で該当箇所を右クリックしたいのですが どう書いても左クリックになってしまいます ,を入れたりRightにしてみたりしましたがお手上げです どうにか右クリックを動作させる方法をご教示ください
>>704 まずWikiなどのリファレンスを 全部 読む。
,が抜けている
>コマンド名の直後は、空白文字で区切れば、カンマを省略してもよい。(第1引数に空白を指定する場合を除く)
○ ControlClick ***, ***, ・・・
○ ControlClick, ***, ***, ・・・
× ControlClick *** *** ・・・
コマンドのオプションが抜けてる、指定の必要が無い場合は,だけ書いておく
ウィンドウ指定の方法参照
ttp://ahkwiki.net/Window ControlClick, x120 y155, WinTitle,, R
>>705 ありがとうございました!
wintitleの指定をきちんとしてやることによって
右クリックで無事動作するようになりました
こんな時間に回答いただき感謝しておりますm(_ _)m
これってもしかして、コンパイルしないと引数は渡せない? メッセージとか面倒なことはしたくないのだけれども…
引数はまったく問題なく渡せる 「メッセージとか面倒なこと」になる状況が書いてないので、 これくらいしか答えられないな
例えば下のスクリプトを test.ahk だとして arg = %1% Msgbox, % arg Return コマンドプロンプトで test.ahk hoge と入力しても コンパイルしない限りは"hoge"てメッセージ出力されないんだけども
関連付けが壊れてんじゃないの? 再インストールしてみたら?
autohotkey.exe test.ahk hoge
>>710 さんくす
インストーラ使用の環境と自分の環境でレジストリの差分とってみたら
自分の環境
HKEY_CLASSES_ROOT\AutoHotkeyScript\shell\open
"C:\bin\AutoHotkey\AutoHotkey.exe" "%1"
インストーラで書き込まれる関連付け
HKEY_CLASSES_ROOT\AutoHotkeyScript\shell\open
"C:\bin\AutoHotkey\AutoHotkey.exe" "%1" %*
だったので %* を追加したら引数を受け取ってくれました
Gui,Add,DropDownListでお聞きします inireadの変数を取得して、それを起動したDropDownListに反映するにはどうすればよろしいでしょうか? よろしくお願いします
すいません、何とか解決したみたいです。
715 :
素人者 :2013/10/07(月) 06:42:12.30 ID:JGplrY450
; AutoHotKeyのパージョンは、1.1.13.00です。 ; OSは、Windows7です。 ; デスクトップの画面を表示した時にWindowsClassが3つも存在するのです。 ; 以下のように、#IfWinActiveの右に3つ書くとエラーになってしまいます?。どのような書き方 をすればエラーが出なくなりますか? sc001 & sc07B:: ; Escキー & 無変換 キー #IfWinActive,ahk_class Progman,ahk_class #32770,ahk_class WorkerW return #IfWinActive
みんなはいつどうやってAHKに出会った?
>>717 CTRL+CAPSを入れ替えるのに、altimeを使ってたんだけど、altimeが何かのプログラムと衝突して
不具合が出た(なにだったかは覚えてない)ときに、これにたどり着いた。
窓使いの憂鬱もなんか微妙にダメだったんだけど、その理由は全く覚えてない。
長い間英字キーボード使ってたから、その関連で何か嫌な点があったのかも。
>>715 コマンドの置く位置と引数が間違ってる ,は次の引数指定
このコマンドは2個しかないのに,3つ目指定してるからエラーがでる。
#IfWinActive [, WinTitle, WinText]
複数条件指定は
>>716 の通り
#IfWinActive, WinTitle, WinText
ホットキー::
・・・・
#IfWinActive
ゲームのキーコンフィグができなくて
確かVistaでマスタ音量の調整がしたくて入れたような XPで使ってたソフトがVistaで使えなかったんで 最初にAHKの存在を知ったのはNewtonPadだったかな
半角/全角キーが遠すぎて小指が引きつったので無変換に割り当てたのが最初だった気がする いま思えば他にもキーカスタマイズソフトなんて山ほどあったろうに どうしてAHKにしたのかな・・・
3つある引数を何とか1行に納めたいと、色々いじくりまわしている内にこんな状態にになってしまいま した。 仕方ないので、 #IfWinActive,ahk_class #32770 ; #IfWinActive,ahk_class Program Manager ; #IfWinActive,ahk_class WorkerW sc01c & sc02E ; Enter & C キー msgbox OK Return #IfWinActive ; デスクトップ限定解除 複数指定の方は分からないので、上のスクリプトで良いとしました。 こんな書き方でも、文法的には間違っていないものなのでしょうか? 回答くださって有難うございました。
複数指定するなら#Ifだ んでこういう風に書く #If WinActive("ahk_class #32770") and WinActive("ahk_class Program Manager") and WinActive("ahk_class WorkerW") 処理むにゃむにゃ #If return
あ、違うわ。orだ(・ω<)てへぺろ
726 :
素人者 :2013/10/07(月) 19:50:06.51 ID:JGplrY450
#If WinActive("ahk_class #32770") or WinActive("ahk_class Program Manager") or WinActive("ahk_class WorkerW") return #If WinActive andの文字をorに変えて、最後の2行を上の用に変更したら、正常に動作をしました。 2CHには、「名無しの お腹いっぱい」さんみたい人がいて助かりました。散々苦労したのが、アッと言う間に解決してしまいました。 本当に有難うございました。
; AutoHotKeyのパージョンは、1.1.13.00です。 ; OSは、Windows7です。 ;マッチキーの書き方が間違っているのは分かるのですが、どのような書き方をすれば正常に動作 をするでしょうか? sc001 & sc07B:: ; Escキー & 無変換 キー Input,格納変数名,T1,{sc079},enter ; 引数のマッチキーを受け付けない? ;以下省略
>>688 タイトル取得しかできないのなら、タイトルをURLにすればいいじゃない!
素晴らしいです。私にはまったくそのような発想は出てきませんでした・・・。
これでやりたい事が実現できそうです。
ありがとうございました。
;Inputコマンドの第4引数であるマッチキーは、A〜Zキーのみ可能なのですか?Enterキーを書いた ら受け付けず、タイムアウトの処理されてしまいます。こう言う場合どう書くのでしょうか? sc001 & sc07B:: ; Esc & 無変換 キー 練習用 Input,格納変数名,T1,{sc079},Enter ; Enterキーを受け付けず、Timeアウト処理される? IfInString, ErrorLevel,EndKey: ; { msgbox,エンドキー Return } If ErrorLevel=Match { msgbox マッチキー; Return } If ErrorLevel=Timeout { msgbox,Timeout } return
Input の解説を読むと、第4引数はどう見てもマッチキーではなくマッチリストな件
>>730 コマンド解説読み直せ
Input,格納変数名,T1,{sc079},Enter
意味:
1秒以内にE n t e r と文字キーを入力する。(Enterキーではない)
終了キー {sc079}
すいません書き間違えました。マッチキーじゃなくてマッチリストでした。 画面に書いてあるスクリプトを実行すると、 Esc & 無変換キーを押してすぐ変換キーを押すと「エンドキー」表示され、Enterキーを押した場合キー 入力を受け付けず結果的に1秒経過して、「Timeout」と表示されてしまいしまいます。 3分岐したのに2分岐しか出来ないのです。
>>733 >>731 は書き間違えじゃなくて間違って理解してる事を指摘してるんだよ・・・。
さっさとコマンド解説読み直せ
ttp://ahkwiki.net/Input Input , OutputVar, Options, EndKeys, MatchList
EndKeys 入力を終了させる「キー」
MatchList 入力を終了させる「文字列」
735 :
名無しさん@お腹いっぱい。 :2013/10/08(火) 18:02:24.82 ID:Jd4hkV2w0
リファレンスを見直してみました。 OutputVar 入力されたテキストを格納する変数名。 EnterキーはLF(`n)として記録され、そのほかの非文字キーは無視される。 っと、書いてありました。 これを指摘しているのすか? だけど、If文で比較しているのは、ErrorLevelとMatcを比較しているのであって、OutputVarと比 較しているのとは違うように思えます。 すいません。素人の浅はかさでした。申し訳ありません。
Internet ExplorerってUserCSSを一つしか用意できなくて しかもドメインごとに指定できないじゃないですか なので、 ^r押すとそのページのドメイン(できればサブまで)を取得して そのページ用のCSSを用意していたらそれをIEで指定したファイル名(default.css)にリネームして再読み込みさせる という風にしてみようかと思ってるんですが、 もっと良い方法ってなにか無いですか?
IEをつかわn…
今メインで使ってるFirefox24と比べてメモリ消費がダンチなもので…… セーフモードでもIE11には太刀打ちできませんよ
Proxomitronでも使えばいいんじゃね?
今時メモリなんてFirefoxに1GBぐらい使わせてやっても特に困らんだろ
>>739 Windows8.1だからかAdd to BlockFileにURL入力しても消えちゃうんですよね……
これから類似ソフト試すより
>>736 の方が勝手も分かってるし楽だろうと思いまして
>>740 1GBしかないんで……
ユーザcssで「@-moz-document url/domain」相当のことやりたいんだろうけど、 ローカル取得が出来たら出来たで、クロスドメイン問題とか更なる色々問題が起きるよ。 オミトロンを Program Files に入れててUAC効いちゃってるだけってオチなら、 インスコフォルダを %Userprofile% の直下にでも置けばいい。 それよりもStylish 使える FX や Chrome 使うのが一番だと思う。 あ、ahkのこと全然書いてない。 無理やりやるなら、COMオブジェクト作ってIE起動するスクリプトで、 ページロードとロード完了を検知して、DOM操作してbodyタグにclass設定してやるのと、 ユーザスタイルシートロードするようにインターネットオプション設定するってところかな。 CSSはbodyタグのclassで親子セレクタで何とかすれば 「@-moz-document url/domain」みたく出来なくもない。 でもやっぱりスレチかな
>>742 741ですが全く分からないので736を突き詰めてみたいと思います
みなさま相談に乗っていただきありがとうございましたm(_ _)m
OSの種類 Windows7 64ビット版 AutoHotkeyのバージョン1.1.13.00 Input,格納変数名,T1,{sc079},`; MatchListのキーにエスケープの文字`を書いてもセミコロンキーを受け付けてくれません? どういう書き方をすればMatchListで設定したセミコロンキーを受け付けるんですか?
いいから君はリファレンスを上から順にきちんと読み込んで咀嚼して基礎体力つけてからおいで 今の状態じゃ解答もらってもチンプンカンプンで理解できてないでしょ 答える側としてもそれなりに考えて解答してるんだから >723,733,735みたいな返答されると心が挫けるんだよ セミコロンの件はエスケープしなきゃいいだけの話だが Inputみたいな入力横取りコマンドは扱いも難しい 初心者自認してる人間がいきなり使おうとしてもハマるだけだと思う
リファレンスを読んでいても途中で挫折しまいそうな状態です。 基礎体力が付いたらまたやってくることにします。 有難うございました。
Input, key, T1, {sc079}, `;
または
Input,key,T1,{sc079},;
が正解。どっちにするかは、書き方の好みの問題かね(カンマの後ろに半角空白付けたいかどうか)
ちなみに
>>744 の何処が不味いかは、Wikiの、Inputの説明の所じゃなくて、エスケープ文字の説明の所に書いてあるよ
リファレンスを読む時は、関係ありそうなページを片っ端から読むくらいの気持ちで頑張って
,`; と書いても別に問題なく動作するんだけど
もう質問はしないと思っていましたが、たまたま回答を見たらあったので試してみましたら、なんと正 常に動作をしました?。こう回答が有るとリファレンスを読む気が増してきます。 有難うございました。 有難うございました。
>>748 エスケープ必要ない所でカンマ付けても無視されるんだっけか
なんで
>>744 は失敗したんだ
セミコロンに関しては空白なしでエスケープつけたらダメじゃね、うちでも動かなかったよ win7 AHK_L 1.1.08.01
スペース; 以外は全て動作する。
753 :
名無しさん@お腹いっぱい。 :2013/10/10(木) 17:37:58.74 ID:ExImmAja0
回答をもらって試す時に、今まで試していた;Input,・・・・ ;や";"やsc027や"sc027"が4行位書 いてありまして、これを消して試したら正常に動作をしました。 まさかこんな事が原因で、正常に動作をしないとは全く知り得ませんでした。 結果的に回答を頂いたおかげで正常に動作するようになりました。 有難うございました。
ウインドウグループのプロセス版みたいなのって作れないですよね? 複数のプロセス監視したいです...
755 :
名無しさん@お腹いっぱい。 :2013/10/11(金) 00:16:11.90 ID:STG+5wLS0
プロセスの有無で何したいのかによるな キー定義変えたいなら、非表示窓含めて#IfWin~使えばいいし 無いなら起動するとか、有るなら殺すとかなら タイマーつかってシコシコifかけばいい ただし、複数監視でwait系のものは避けた方がいい
>>741 そもそもWindows 8ってメモリ1Gで動くのか
・・・と思って調べてみたら、最低要件がx86で1GB、x64で2GBか。
ギリギリのタイトロープで勝負するより出来るならメモリ増設した方が良くないか?
それだけ貧弱ならスワップしまくってイライラしないかなぁ
質問者は仮想環境じゃね
Win7だって、メモリ256MBでも起動はするぞ インストールの時は384MBくらいにしないとダメだったが
VISTA以降なら1Gとか絶対嫌だわ つーかXpでも嫌
全角空白を半角%E3%80%80に置き換えたいんだけどどうやればできる? Stringreplaceでそのまま%E3%80%80って入れたらエラーになるし、 変数に放り込んでからStringreplace使っても同じ。 A_SPACEみたいな特殊関数ないんでしょうか?
AHKとちょっとずれた質問だけど、改行込みの長文の読み書き削除させる時は一つのiniファイルでセクション沢山作るよりもテキスト毎に分けた方が効率がいいかな?
↑の補足ですがテキストビューア的なものを想定しています
>>761 適当にエスパーしておくと、一つの実行ファイル(か、それに相当するahkファイル群)に対しては
一つのiniファイルを使うべき。
C言語用の設定ファイルを Clang.ini、単純なテクストファイルを txtfile.ini とかなんかにするのは
やめたほうがいい。
超エスパーだけど、これ正しい解釈なのか?w
これでリロード出来ないのですが、どうすれば良いでしょうか? Reload, .\sample\sample.ahk
>>763 ありがとうございます。
頂いた回答ですと、これが単純なテキストファイル扱いになるのか判断できませんので補足します。
扱うものは文章群ですが、そのスクリプト内でだけ使う事が目的で他のテキストファイルと互換性は要りません。
そのスクリプト内で文章をツリー状に管理して、文章の追加・読込・更新・削除・並び替え的なことをしたいのですが、
この場合は一つのiniで全ての文章情報を記録するのは好ましくないでしょうか?
またはこれ以外の管理でお勧めはありますか(当方素人なのでむずかしい事はできませんが)?
>>760 %E3%80%80って文字列に置換するってこと?
%はそのまま記述できないから、エスケープ文字の`をつけて
`%E3`%80`%80
>>764 reloadは引数なしで自分自身をリロードするから引数いらない
sample.ahkってのを実行したいなら、runコマンドを使う
>>766 返信ありがとうございます
Reload対象のスクリプトが#SingleInstance Ignoreなので、Runコマンドは使えないのです。
何かいい方法は無いでしょうか?
>>765 何をしたいのかが多分わかった。
アイデアプロセッサか、アウトラインエディタみたいなことをしたいわけね。
構造がツリー型だと仮定していいんだったら
自分だったら、一つの文章群をプロジェクトとでもいう単位にして、そのプロジェクトに含まれる各文章は
文章ごとにファイルにする。で、プロジェクトに含まれるファイルをすべて同一のフォルダーに入れておいて
、各文章のつながり方を、project1.struct と名前の付けたファイルに保存しておく。
起動時にproject1.structの構造を読みだしてから、編集作業を行って
データ構造が変化したときや終了時にに、project1.structに書き出す。
てな感じでメイン部分は実装すると思うけど、xmlじゃだめ?
正直AHKには荷が重いような気がしたり…
>>768 はい、大体その通りです。
iniファイルで纏めるくらいならファイルは分けたほうがいいんですね。
xmlは使った事ないので良さそうなら調べてみるつもりですが、この様な処理の場合はどんな面で有利なのでしょうか?
>>769 今の単純な仕様でいいなら、xmlなんてわざわざ勉強してややこしくする必要はないけど
将来もう少し拡張した機能を付けたいとか、何かと統合したいっていうなら、標準仕様に
乗っかったほうが楽。
その辺は自分の目標とプログラム技術の兼ね合いかな。
>>770 分かりました。いい機会なのでxmlを勉強するところから始めて考えを纏め直してみます。
>>767 同時実行を1個にするためにだけ Ignore にしているなら
#SingleInstance Force にして Run する
どーしても、Ignoreじゃないとダメっていうなら、対象スクリプトをKillしてRunとか
PostMessage/OnMessage使ってIgnoreしてるスクリプト自身がReloadするとか?
でなんとかする
>>766 ありがとう。
思い出してやってみたけど、やっぱり%25%E3ってなってしまう。
""付きと無しでやってみたんだけど同じ。
ごめんなさい %25E3%2580%2580 こうなってしまう。の間違いでした。
ごめんなさい。 OperaVer17のバグで全角空白とかの日本語処理が駄目駄目なだけでした。 失礼しました。
>>766 >>772 ありがとうございます!。
外部スクリプトから、以下のコマンド送信で出来ました!。
PostMessage, 0x112, 0xF060,,, sample ;sample.ahkにalt+f4を送信
Run, autohotkey.exe sample.ahk ;sample.ahkを再起動
Ignoreなら、終了してからRunするだけで良いんですよね。
こんな単純な事なのに、全く気が付かないとか自分が馬鹿過ぎました。
お騒がせしました。
本家スレ探していたら、Reloadコマンド送信ありました。 DetectHiddenWindows, On SetTitleMatchMode 2 PostMessage, 0x111, 65303,,, sample.ahk - AutoHotkey こちらで運用してみようと思います。 ありがとうございました。
AHKを数年使い込み、キーマクロ、ファイル一括操作、画像監視&認識、 文字列処理系の小物スクリプトなら、思った通りに「とりあえず問題なく動く」レベルに 作れるようになった。速度も問題なし。 この状態で、過去に挫折した言語(C・Java)を再開したところ、 自分でも驚くほど理解が早くなってた。 AHKのおかげで、やりたいことをプログラムに置き換える作業に慣れたからだと思う。 と同時に、他言語の switch case を使ったときの「ソースの可読性」がとても良く感じた。 AHKでif〜elseifの羅列をなくしたいのだけど、なんかいい記述方法ありますか?
数式に置き換えるのならなんだっけ?三項演算子だっけ? あれはahkでも使えたと思う。俺はまだ使いこなせてないけど
(a == 1)? 0 : 1 ↑これのこと?
782 :
名無しさん@お腹いっぱい。 :2013/10/15(火) 21:54:36.72 ID:O3m6FE360
>>778 処理を関数にして、かつhashにいれる
(またはclass化)
で、名前呼びだしすれば代替出来る
てかhash(dict,map,assoc-array)有る処理系ならどれでもできる
javaが一番面倒そう(クラスとインスタンス作らなきゃいけないんで)
autohotkeyのソースに変換するプログラムでも導入しないかぎり switchは使えないでしょう lispのマクロのようなものが使えれば一番よさそうだけれど
マウスジェスチャーの方で非アクティブウィンドウを掴んで移動っていうのが面白そうだったのでやってみたけどなんかコレじゃない windowmove: WinGet,hw,ID,A MouseGetPos,x1,y1,Mc CoordMode,Mouse,Screen If(hw <> Mc){ hw := Mc } While GetKeyState("LButton","P") = 1{ MouseGetPos,x2,y2 WinMove ahk_id %hw%,,x2 - x1, y2 - y1 } return ちょっとマウスジェスチャーLで使えないか頑張ってみたが、残念ながら挙動が怪しす 非アクティブウィンドウ選択して動かそうとしたらアクティブウィンドウの左上に一旦ウィンドウ合わせてから動きやがる・・・ どうしたもんかアイディアください
それちょっと試したんだけどちょい望む挙動が違う 非アクティブをアクティブウィンドウにせずに動かしてみたいんです 動かすのはできたんだけど最前面アクティブウィンドウを基準に座標とっちゃうみたいなんですよね wingetposで取得したほうがいいのかな
AHK で打鍵カウンターを作成したいと考えています。 GetKeyState コマンド/関数が検知できるのは指定したキーのみです。 英数キーのいずれかが押下されたことを検知させるにはどうしたら良いでしょうか。
788 :
名無しさん@お腹いっぱい。 :2013/10/16(水) 22:51:01.45 ID:XQvDH8YS0
~*1:: ~*2:: (中略) ~*0:: ~*a:: ~*b:: (中略) ~*z:: count++ Return Pause::MsgBox,, %count%
メーカー独自のマウスの拡張ボタンをホットキーに使いたいんですが ホットキー名はどのように調べればいいですか? 押すとAltTabメニューが出てくるボタンに別な事をさせたいです !Tab::だと不可でした・・・
>>789 メーカー名を書かないと無理
書いても無理な場合が多い
>>789 2.13 特殊なボタンなんだけど、どうやってキーコード調べればいいの?
http://ahkwiki.net/Faqs #InstallMouseHook マウスフックを使用するスクリプト実行
↓
AutoHotkey.exeのメインウィンドウ
↓
Key history and script info
押されたキーをホットキーにする
>>787 英数だけなら Input コマンドでいいんじゃない?特殊キーは無理だけど。
常時監視する場合の負荷とかはわからん。
GUIボタンを作ってWinGetActiveTitle でマウス下のウィンドウを取得して その後キーを送出しているのですが アプリによっては引っかかる感じがあったりします なにかキー送出したらGUIボタンからフォーカスをパージするようなコマンド有りますか?
そんなピンポイントの機能は無いよ Alt+Tab発行してからキー送出すりゃいんじゃない
いろいろ試したけど ムリでした〜 キーは送れているしまぁもうちょい勉強します
かざぐるマウスが死んだからユーザーが増えそうですね。
>>797 こっちに多く流れてくるようならMGL.ahkスレを建てた方がいいかもね
脳弱の受け皿が決壊したか……
auのIS04が発売されたときのAndroid板みたいな雰囲気になることに期待
>>800 docomoのT-01Cは大丈夫だったの?
かざぐるマウスに何があったんだ? 調べる気もないけど
サイトごとお亡くなり 窓の杜からも削除された模様 受け皿はマウ筋だと思うけどな
現状だとOpenMauSujiかな
windows8の動作が怪しいとユーザーから指摘を受けていったってどこかでみた>かざぐる その対応に疲れてしまったのかな
本業が忙しくて8に対応できるだけの余力がなくなったんでしょ
かざぐるを使ってないから知らんけど、だからって消さなくてもよかったのに。 win8はクソだから一生対応する気はありません って書けば済んだ。 プログラマってまじめな人が多いけど、消す選択って究極だな。
消さないとこれからずーっと 「Win8以降対応してください!!!!」 「はよ対応せいやコラ、こっちは困っとるんじゃ」 「ユーザー見捨ててとんずらとか許せない!」 みたいな書き込みをされる 何様
愛用のStrokeItが話題にもあがらない悲しさ マウスボタンはAHK、ジェスチャはStrokeIt、ボタン型ランチャはClaunchでマウス派最強セットと思ってたのに
なんもかんもひとまとめAHKファイルでスッキリ ある程度わかってくるとやっぱソース書くほうが楽しいね
もうすぐデュアル環境になるからちょい暇な時間があるとそれ専用のahk構想を練ってる 実際にやり始めるとただの作業だけど構想の段階って楽しいよね
ワンクリックで俺環境、みたいなの作るの楽しいよね
動画を見る時にVLCメディアプレイヤーを使ってるんですが VLCが起動してる状態で動画ファイルをダブルクリックしてもVLCが前面に出てこなので ファイルが渡された時にアクティブになるようにAHKで出来ないでしょうか?
>>813 ソフト側の問題
1つだけ実行を許可 のチェックを外せばいい
Autohotkeyで指定したフォルダを開けなくする事って出来ますか?
816 :
名無しさん@お腹いっぱい。 :2013/10/19(土) 01:41:58.60 ID:LqpKEtRw0
#If GetKeyState("vk1Dsc07B","P") *f::LButton ....省略..... #If という具合に無変換キー+【f】でマウスの左ボタンを割り当てたんだけど、fキーの設定をさらに分岐させたい *f:: if GetKeyState("Space","P"){ Send,{Blind}{4} }Else{ Send,{Blind}{LButton} } return 前者だとドラッグできるんだけど、後者だとキーリピートが働いてクリック連打になる どのようにしたら前者と同じような挙動になるか分かる?
}else{ Send,{Blind}{LButton down} keywait,%A_ThisHotkey% Send,{Blind}{LButton up} } 的な
818 :
816 :2013/10/19(土) 02:10:41.39 ID:LqpKEtRw0
>>817 そのままじゃ動かなかったけど、
*f::
if GetKeyState("Space","P"){
Send,{Blind}{4}
}Else{
Send,{Blind}{LButton down}
keywait,f←ココを変えたらうまく行った
Send,{Blind}{LButton up}
}
return
}
これで寝れる! ほんと有り難う!
タイトル指定で行けない?
マウスで選択してもタイトルは「無題 - ペイント」のままなんです 昔のオフィス製品もこんなかんじで・・・ マウスで移動することは出来るのですが AHKから場所を移動したいです
>>820 *Window Spy でウインドウ探す
*表示タイトルで認識するか試す 今回は「ツール」
*PixelSearch ImageSearch で探す 今回は「ImageSearch」
フォルダのサイズを取得したいんですが、一度に取れるコマンドってありましたっけ? 地道にfile-loop回帰処理でfilegetsizeで1ファイルづつ足し込みするのがいいのかな
>>824 俺はそれでやってる。
ファイルが10000個以内なら、1秒以内に結果が出る。
フォルダサイズの取得はFileSystemObjectのGetFolderでも出来るみたいだけど うちの環境じゃシステム関連のフォルダでエラーが出る UACは無効にしてるし所有権の問題かな?
>>825-826 d
素直に回すのが良さそうですね
4G超えてないかの判定用なんでサイズ超過した段階でループ抜けるようにして時短してみます
Autohotkeyで「BearMouse」で言うところの、 マウスカーソルを指定の場所(ボタン)へ移動させる、 「アシスト」または「オートクリック」 のようなこと再現できないっすかね? 実際にボタンを押す必要はなく、移動だけ出来れば満足なんすよ。
いわゆるチューチューマウス機能かな、今はOSの標準機能にもあるけど マウスのプロパティ - ポインタオプション - ポインタを自動的に既定のボタン上に移動する ahkでやるなら、タイマーかWinWaitActiveで ahk_class #32770ダイアログが出るのを待って ControlGetPosでフォーカスのあるコントロール位置取得してMouseMoveかな
>>829 ヒントをありがとう。
>マウスのプロパティ - ポインタオプション - ポインタを自動的に既定のボタン上に移動する
これがダイアログによっては移動しないので困ってる。
気になり調べてみたら、そういうダイアログに限って
ボタンなどのControlが取得出来ないことが分かった。
一応、ダイアログの「Title」、「Class」、「Position」、「Size」は
取得できるので、ポインタを指定のボタンまで相対移動させるようにすれば
希望の動作を達成出来そうなので、ガンバッてみるよ。
if ErrorLevel <> 0の演算子<>は等値の==とは違うのでしょうか 検索してもなかなかわからないので教えて頂けると助かります
違うというか魔逆 <> は !=
>>832 勘違いしてました…リファレンスの非等値をよく読んでおきます
すばやい回答ありがとうございました
指定したフォルダ以下のファイルとフォルダをコピーしたいのですが そのときに特定の拡張子のファイルを除外するということはできますか?
そういうのはもういっそ他のソフトを使ってしまうほうがお手軽で正確かも realsyncやfastcopyでoptionを設定してそれをAHK上でrunして走らせるとかのほうが速いと思う
.ahkの拡張子のファイルを開いている時にF5キーを押すと上書きしてリロード、というのをやりたいんですが #IfWinActive,*.ahk F5:: Send,^s reload #IfWinActive return ではダメなようです。ワイルドカードの指定に問題があると思うのですが、どう記述すればよいのでしょうか。
>>834 fileloopで、まずはリストとしてフォルダ内ファイルを全部読み取って、
条件フィルタを作って、該当する不要品は飛ばし、引っかからないファイルだけ処理する。
>>835 の方法でもいいけど、俺は、この手の小細工は全部ahkでやってる。
なんだかんだで作業中にいろいろ出る細かすぎる条件指定が、
一度作っておけば、自分の裁量で、いくらでも追加できる。
ControlGetFocus, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText] を使うにあたり、SetTitleMatchMode, 3でahk_id *****を指定できるのですが、 ウインドウの誤爆回避として「ウインドウタイトル」と「ahk_id *****」同時指定したいのですが 一気に指定することできますか? やはり、一つ一つ的を絞って行くしかないですかね?
ahk_id ならIDなので一意なんで複数条件指定する必要は無いかと ahk_class なら分からんでもないが
>>839 ご指摘ありがとうございました。まったくもってその通りです。
コピペばっかりしてたので、「ahk_id」か「ahk_class」かなんて確認してませんでした。
ちなみに、「ahk_class *****」を使う場合、
>>838 の質問どうなりますか?
842 :
834 :2013/10/22(火) 00:03:38.34 ID:wy4a26ms0
>>835 >>837 なるほど、他のソフトと連携させるという手もありますね
試してみたらfileloopでなんとかいけそうなのでやってみます
ありがとうございました
風呂で顔洗ってるうちに自己解決しました。 F5:: ;ahkが開いている時は、F5キーで上書き保存後にリロード SetTitleMatchMode,RegEX #IfWinActive,* .ahk Send,^s reload #IfWinActive return これで動きました。
>>843 解決したようだけど一応書いておく。
ウィンドウ指定ではワイルドカードは使えない。
設定変更して正規表現が使える。
どうでもいいけどそのコードだと常駐ahkと違うスクリプトの編集中も誤爆しない? %A_ScriptName% に限定したほうがいい気がする ああでもそうすると#includeファイル変更後のリロードができなくなるか 個人的には編集中ファイルのスクリプト実行はエディタに登録したほうが無難な気はする 自分は常駐以外の小物ahkもちょこちょこ作るので秀丸のF5押下にスプリクト起動を割り当ててる
>>845 あんま大物つくらないんでメモ帳で作ってたけど、そろそろエディタ入れたほうがいいかな。
誤爆については、むしろ常駐以外を編集してる時に適用したかったのでこれでいいのです。
常駐のみの時は
#IfWinActive,常駐.ahk
Send,^s
reload
#IfWinActive
return
でやっていたので。
いや、>843の例では常駐ahkがリロードされるだけで編集中のahkの実行には ならないと思うんだけど、それでいいの?
>>844 その説明では多分わかってないよこの子
>>843 ではワイルドカードのまんまの表記であって
正規表現ではちゃんと動かないといってあげないと
そもそもホットキーラベル以降に#IfWinActiveやSetTitleMacthModeしてること自体おかしいんだけど
関数の引数が多いときに改行で見やすくすることはできませんか? 何か工夫の余地がないでしょうか
>>849 そういう質問をする場合は、どんな引数を与えてるのかを書いた方がいい。
いまのコードを全部晒せば、引数ではなく別の受け渡し方法で解決できるかもしれないから。
それぞれ独立して常駐で動くいくつかの*.ahkを、 どれか一つに複数#Includeしてまとめること簡単に出来ます? また、それぞれでトレイアイコン右クリックメニューに 1〜2行独自メニュー追加してるのでそれぞれちゃんと表示させたいです。 (位置はとりあえずどうでもいいです) 今はその複数の*.ahkを一つ(A.ahk)を除き、 全て別スクリプトとしてまとめたものを新しく作成(BCD.ahk)、 A.ahk内でBCD.ahkを#Includeしてやり過ごしてるんだけど、 個別に#Includeできるんならそうしたいと思ってるんです。
>>851 質問の意図がよく分かんないけど
1つずつIncludeしたらいいんじゃないの?
右クリメニューも再現されるだろ
初期化処理のところで躓いてるならIncludeする各ahkファイルでGoto 文末
>>851 現在すでにA+BCD で動いているならコンフリクトの問題はないってことだろうから
手間なく移行できるんじゃね
問題になるのはたぶん個別ファイル冒頭の初期化処理部分
それぞれinitルーチン化して、A.ahkの頭で呼んでやればいい
質問があります。 2バイト全角文字の変数から多分岐しているのですが、AHKでは一般的ではないでしょうか?。 暫く使用してみた感じでは、特に不具合等はないみたいなのですが、環境次第で問題あったりしますか? よろしくお願いします。
バージョンによっては2バイトで変数名書いたりしたらダメ あとUTF-8とBOMつけて保存しないと文字化け起こす
>>856 使用しているバージョンはAutohotkey_L 1.1.13.0でした。
これからはUTF-8でBOM付きで保存するように気をつけます。
有難うございました。
>>853-854 サンクス。
なるほど、各スクリプトの冒頭部分が肝心のようですね。
もうちょっとtry & errorでガムバッテみます。
各スクリプトの中身をを晒そうかと思いましたが、
例え一部でもかなりの行数になるのでやめときました。
すみません、もう1つだけ質問があります。 エスケープキャラ(`)を違うものに変更したいのですが、どの記号がいいでしょうか? ついこの前までは(?)を使用していたのですが、スクリプトを追加している内に (?)を使用するスクリプトがある為、使えなくなってしまいました。 よろしくお願いします。
>>859 多言語と同じように「\」等に変更するなら分かるが
それ以外なら変更する必要性がない
よく使われる記号にするのはデメリットしかない。
記号は使わない。 ただ、自分で決めたルールが使えないと何やってるかわかんないとかいうことにならないためにコメントアウトでメモ書いとくのが一番わかり易いと思う。;これな
エスケープキャラの件、納得しました。 皆さん返信有難うございました。
>>858 テンプレにある専用アプロダにプラグイン形式のahkがあるから参考にしたらいいよ
まだあるか分からないけどワンショットモディファイアキーの奴とか
常駐ではなく、一度だけ有効なホットキーは作成出来ますか?
変数の扱いで何時も填ってしまうのだが、 誰か、バカなワタシでも分かるように説明して下さい。 「=」とか「:=」とか「hoge」とか「%hoge%」とか、 同一スクリプトに混在してると、訳分からん状態に陥ってしまう。 ところで、このautohotkeyってautoitと同じプロジェクトチームで作ったんだよね? なんでautoitと同じスクリプトの仕様で作らなかったのか不思議だ。 と言うより、何でどちらかに仕様統一して作らなかったのかが不思議だよ。
ifとかの条件文では=は等しいを表す :=は変数の中身を渡す。 hogeは変数名。%hoge%は変数の中身を使う hogeという箱に10という数字が入ってる場合 %hoge%では10 hogeではhoge になる Aにhogeを:=したら10が入る Aに%hoge%を=しても10が入る Aにhogeを=したらhogeが入る って認識だけどあってるよね?
きっとautoitの書式を改良しようと思ったんだろ
何処かで見た記憶では、autohotkeyはautoitの分派だったような気がする。
WikipediaのAutoHotkeyの記事を見てくるといいと思うよ
>>868 説明ありがとう。
っていうか、その説明をもっとかみ砕いて欲しかった…
例えば、「こういう場面ではこの表記しかできない…」とかね^^(情報後出しすまない)
いつの間にか「あれっ?どうだったっけ?」となるもんで^^
>>869-870 なるほど
>>868 見にくすぎるので解説だけ書いておく
答え合わせは自分でしてくれ。
------------------------------------
= 文字列の代入 変数は展開されない
:= 式の代入(計算結果) 変数は展開される
%文字列% 変数展開
------------------------------------
Ver = %AAA% ;同じ意味
Ver := AAA ;同じ意味
Ver = 1 + 2 ;結果「1 + 2」
Ver := 1 + 2 ;結果「3」
AAA = 1
Ver = %AAA% + 2 ;結果「1 + 2」
Ver := AAA + 2 ;結果「3」
どうでもいい訂正w Ver× Var○
間違えやすい部分 関数に関して 関数の呼び出しでは()内は式として扱われる 文字列として扱う場合は ”” で囲う必要がある Add(AAA,"AAA") ;変数展開 と 文字列
>>873 あ、サンクス、そうか:=じゃないと計算適応されなかったんだ・・・
>>873-874 ありがとう。
つまり、
関数1("AAA")
と
hensu := "AAA"
関数1(%hensu%)
は同じで、
hensu = AAA
関数1(%hensu%)
と表記しても良い。
逆に、
関数1(hensu)
という表記は間違い。
で、合ってます?
すいません、間違ってました。 hensu = 123 + 456 msgbox %hensu% ;「123 + 456」と表示 hensu := 123 + 456 msgbox %hensu% ;「579」と表示 kansu("AAA") ;「AAA」と表示 hensu := "AAA" kansu(%hensu%) ;空白表示(間違った記述) hensu = AAA kansu(%hensu%) ;空白表示(間違った記述) hensu := "AAA" kansu(hensu) ;「AAA」と表示 hensu = AAA kansu(hensu) ;「AAA」と表示 kansu(string) { msgbox %string% } これが正解ですよね。
>>877 正解だが補足がある。
式でも %Var% による展開は有効なので二回展開することになる。
間違った記述というわけではない。
Add(Var){
Return Var
}
BBB = 二重展開
AAA := "BBB"
MsgBox % Add(%AAA%)
間違えまくりw 訂正 Add(Var){ Return Var } BBB = 二重展開 AAA = BBB MsgBox % Add(%AAA%)
>>879 あれ?()の中で「%付き(%AAA%)」使えるの?
う〜む、複雑すぎてもう限界かも…
他にif文でも同じ意味なのに数種類の表記方法有るみたいだし…
あー、autoitにartohotkeyメイン機能のkeyremap機能有れば最高だったのになぁ…
代入に = と:= どっちも使えるから最初は分かりにくいのかもね だったらしばらく:=だけ使えばいいよ。関数の引数の記述でも迷わないで済むし 文字列リテラル 変数 = ""で括らずそのまま記述 %%で括る or 頭に%「半角スペース」 := ""で括る 変数名をそのまま記述 こんだけ理解してりゃ弄ってる内に覚えるけどね
>878の例でいうと AAA = BBB hensu = AAA kansu(%hensu%) ;「BBB」と表示 %hensu% が展開されて kansu(AAA) と書いたことになってさらに変数AAAが展開されて「BBB」と表示される
>>879 は
関数Addに変数AAAの中身を渡している→Add("BBB")
で% (%「半角スペース」)はまた別で、その後の式を展開しますよ〜ってものなんで
関数Addの返り値、変数「Var」を展開したBBBがMsgboxで表示される
>>883 の中段のレスが分かり難いから、
書き方を変えてもう一度レス欲しい、
という意味。
上から目線で書き直せかよw
hensu%hensu2% := 1 + 1 とか使えるようになると楽しくなるよね
連想配列のほうがいいとは思うが hensu[hensu2] := 1 + 1
hensu%hensu2%の方が記述は楽でわかりやすいんだけど hensu[hensu2]は% (%「半角スペース」)でも使えるしForループ使えるし汎用性高いんだよな 悩みながら併用してるわ
Left:: CoordMode,Mouse,Screen MouseGetPos,X,Y CoordMode,Mouse,Relative MouseClick,LEFT,100,150,,0 ;X100 Y150をクリック CoordMode,Mouse,Screen MouseMove,X,Y,0 return Right:: CoordMode,Mouse,Screen MouseGetPos,X,Y CoordMode,Mouse,Relative MouseClick,LEFT,200,150,,0 ;X200 Y150をクリック CoordMode,Mouse,Screen MouseMove,X,Y,0 return こういうコードを作りました。対象はゲームです。 ですが、LeftとRightを高速で連打してると、いつの間にか マウスがX100 Y150またはX200 Y150の位置に居座り 元の位置に帰って来ないようになります。 確実に元の位置に戻すにはどう工夫すればいいのでしょうか?
ああ、視点変更をキーでやりたいのかなコレは いつの間にかってことはその前に何かの操作を挟んで割り込みが発生してるとかそういうのじゃないかな ログ確認してみてはどう?
>>894 ありがとう
Left(Right)キーで任意の座標をクリックして、元の座標に戻るという単純なことをしたいです
ログを確認すると
MouseClick,left,100,150,,0 (0.03) のあと
CoordMode,Mouse,Screen
MouseMove,X,Y,0
return
が実行されずにRightキーのスレッドが始まってる箇所がありました
高速に連打すると、一つのスレッドが終わるまえに次のホットキーを押すと
途中でもそのスレッドが終わってしまうんでしょうか
ヒントになるかどうか分からないが… 「MouseGestureL.ahk」Helpより >4.3.4.カーソル移動の発生 >「MG_Move()」関数を使用すると、マウスカーソルを指定座標に移動できます。 >引数に横・縦の座標を指定するとその座標に、引数を省略するとジェスチャ開始位置に移動します。 > >「RB_L」のようにカーソルを移動するごとに繰り返し発生するジェスチャは、 >連続して実行し続けるといずれ画面端に到達してしまうため、連続実行できる数に限りが有ります。 >しかし、動作の後に「MG_Move()」を付ければ、動作が実行される度にカーソル位置が元に戻るため、 >ボタンを押したままいくらでも繰り返し実行できます。 【MouseGestureL.ahkの1810行目から】 -------------------------------------------------- MG_Move(x=-1,y=-1){ global CoordMode,Mouse,Screen SetMouseDelay,-1 if(x=-1){ x:=MG_X } if(y=-1){ y:=MG_Y } BlockInput,On MouseMove,%x%,%y%,0 BlockInput,Off } --------------------------------------------------
Blockinput なるほどそういうのもあるのか
Gui, Destroyについてお聞きします。 以下のスクリプトで、Gui, Destroyをした場合、Newで作成したGuiがDestroyされず困っています。 解決策をご教示下さい、お願いします。 a:: Gui, Destroy Gui, Add, text, w200 h200,sample1 Gui, Show Gui, New Gui, Add, text, w100 h100,sample2 Gui, Show return
>>896 ありがとうございます!なるほど
今回のケースではSuspendでもいいのかな?と思いましたが
BlockInputとの使い分け(というか違い)がいまいちよく分かっていません^^;
>>898 3通りやり方がある
;--Gui, New を利用した場合--
F3::
Gui, Destroy
Gui, Add, text, w200 h200,sample1
Gui, Show
Gui, ラベル:Destroy
Gui, ラベル:New
Gui, Add, text, w100 h100,sample2
Gui, Show
Return
;--その他 1--
F4::
Gui, Destroy
Gui, Add, text, w200 h200,sample1
Gui, Show
Gui, ラベル:Destroy
Gui, ラベル:Add, text, w100 h100,sample2
Gui, ラベル:Show
Return
;--その他 2-- F5:: Gui, Destroy Gui, Add, text, w200 h200,sample1 Gui, Show Gui, ラベル:Default Gui, Destroy Gui, Add, text, w100 h100,sample2 Gui, Show Return
>>899 Suspendはよく分からないけど、BlockInputは文字通り
入力装置からの入力をブロックする機能だよ。
つまり、BlockInput,OnとBlockInput,Offに挟まれた区間は、
マウスやキーボードからの入力が出来なくなるから、
人間の不注意で起こりうる"誤爆"を防止できる。(C-A-Dのみ有効だったと思う)
>>900 >>901 なるほど、ラベルを付けて別GUIとして処理するのですね。
結局Newにラベル付けする事で、無事解決しました。
有難うございます、今後ともよろしくお願いします。
>>902 ありがとうございます!
よく理解できました
Array := Object() array[1] := "abcd" array[2] := "wxyz" Loop % array.MaxIndex() MsgBox % array[A_Index] For index, value in array MsgBox % "Item " index " is '" value "'" ↑は問題ないんだけど、 ↓の場合、「Loop」と「For」の部分はどう書いたらいいでうか? helpには見あたらないのです。 array[1, 1] := "11" array[1, 2] := "12" array[1, 3] := "13" array[2, 1] := "21" array[2, 2] := "22" array[2, 3] := "23" とりあえず、直接以下のように指定すれば問題なく見れます。 MsgBox % array[1][2] MsgBox % array[2][3]
ループを二重にすればいいんじゃないの ただA_Indexは内側のしか取れないから外側のを参照するために保存しとかないとダメだね Forの方がいいかもね For, i in array For, j in array[i] msgbox, % array[i,j]
Loopで表示させた項目を無効化(選択不能に)させることってできる? これだとDisableのせいでエラーになっちゃうんだけど Menu, test, Add, Test Menu, test, Add Loop, parse, var, `n, `r { Menu, test, Add, %A_LoopField%, LoopTest Menu, test, Disable, %A_LoopField% } Menu, test, Show
guicontrol?
>>906 なるほど分かりました、ありがとう。
とりあえず、j のMaxIndex取得する関数も作ってみました。2次元配列専用ですけど。
test_Array := Object()
test_Array[1, 1] := "11"
test_Array[1][2] := "12"
test_Array[2][1] := "21"
test_Array[2, 2] := "22"
MaxIndex_i := test_Array.MaxIndex()
MaxIndex_j := Get_MaxIndex_j(test_Array)
MsgBox, test_Array[i, j] の i と j のMaxIndexは: %MaxIndex_i% , %MaxIndex_j%
For i in test_array
For j in test_array[i]
msgbox, % "test_Array[" i ", " j "]は: " test_array[i,j]
Get_MaxIndex_j(array)
{
j := 0
For i in array
For j in array[i]
if i = 1
j += 1
if i > 1
return j
}
array[i][j]とarray[i, j]両方使えるみたいだけど、どう使い分けるんだろ?
>>909 Get_MaxIndex_j()関数が
何か間違ってるような気がするので
手直しお願いできますか?
何で結果が違うんでしょうか? Get_MaxIndex_j(array) { Index_j := 0 For i in array For j in array[i] if i = 1 Index_j += 1 if i > 1 return Index_j } と Get_MaxIndex_j(array) { Index_j := 0 For i in array if i > 1 return Index_j For j in array[i] if i = 1 Index_j += 1 }
自分で考えろうぜぇ
>>913 使えるかどうかは自分で調べればいい
#InstallKeybdHook フックを有効にしたスクリプトで KeyHistory で押されたキーを調べる。
調べたキー名/仮想キーコード/スキャンコードで割り当て
割り当てても動作しない/見つからない場合
joytokeyで「F13〜F24」などの仮想キーに割り当て、それに対してAutoHotkeyで割り当てれば良い。
joytokeyで上下左右を十字キーに割り当ててもそれはNumpadupとかのテンキー側みたい(´・ω・`) 誤動作起こすのどうにかしたいな・・・
「Xbox 360 ワイヤレス コントローラー用デバイス ドライバ」を併用して ×ボタンも問題なく使えてる。
マウスドラッグでAuto copyしてくれるようなものはあるでしょうか?
>>917 このソフトは自分でスクリプト書くのがメインだぞ
できるできないでいえば、できる
つくってみたことはあるけどドバドバクリップボードにコピーして使いにくかったから結局ミドルクリックでコピーに落ち着いた ヒントだけ書くとLbutton down、Lbutton up それぞれMousegetposしてXY座標を比較してドラッグかどうかを判定、分岐してクリップボードにコピーすればできる
マウスホイールでChromeのタブ切り替えをしたいです PostMessage, 0x111, 34016 PostMessage, 0x111, 34017 で以前切り替えできていたのがChromeのバージョンが変わり できなくなってしまいました Send,^{Tab}ではなくて 非アクティブ状態でもタブ切り替えできるようにするにはどう書けばいいんでしょうか?
Controlsendをつかおう。
ありがとうございます!
923 :
920 :2013/10/30(水) 01:31:53.46 ID:6Pa6N45j0
MouseGetPos,,,window ControlSend,ahk_parent,^{Tab},ahk_id %window% これで動かないのですが・・・どこが間違えてるんでしょうか?
>>923 アプリによって挙動が違うから
ahk_parent 有り無しで試せばいい。
ControSend使うなら該当Controlをちゃんと指定した方がいいよ
>>924 ahk_parent無しでも動きませんでした
>>925 該当Controlはどのように取得できるのでしょうか?
WindowSpyで見るとタブ部分のClassNNは空欄になっています
Forcusのありそうなコントロール(ブラウザだったらブラウズ描画画面)を当たりつけて試してみたら? もしくはMouseGetposでコントロールのhWnd取得して直指定するか
×Forcus ○Focus
Menu, MenuName, Add , MenuItemName, Label loop, 0 { Label: MsgBox, OK return } 〜〜〜〜〜〜〜〜〜(中略)〜〜〜〜〜〜〜〜〜〜〜 Gosub,Label Menu、HotkeyやSetTimerでは上のようにループ囲いのラベル割り当ては問題ない けど同じようにGotoかGosubにラベルを割り当てると「Error: A Goto/Gosub must not jump into a bleck that doesn't enclose it.」ってエラーになる なぜGotoとGosubだけこんな仕様なんだろうかわからん
ローカルラベル扱いなんじゃないの? むしろループの中に飛べる方が本来はおかしいしできたとしてもやるべきじゃない
どうしてもloopさせたいならgotoやsettimerを組み合わせてループさせる方が安全かもな
>>926 改めて確認しても全く問題なく動く
余計なコードが混ざってる等の単純なミスかそっちの環境書いてみれば?
------------------------------------------
Win7 x64
AutoHotkey AutoHotkey_L Ver1.1.13.01 Unicode
Google Chrome 30.0.1599.101
------------------------------------------
F1::
MouseGetPos,,,window
ControlSend,,^{Tab},ahk_id %window%
Return
>>932 ありがとうございます
環境については全く同じです(※AHKLは32ビット版です)
↓だけ書いたahkファイルを新規作成してこれだけ実行してみました
--------------------------------------------------------------------
#IfWinActive, ahk_class Chrome_WidgetWin_1
F1::
MouseGetPos,,,window
ControlSend,,^{Tab},ahk_id %window%
Return
--------------------------------------------------------------------
F1を押すと{Tab}は送られているらしくリンクを順番に選択していきますが
やはりタブ切り替えにはなりません・・・
手動でキーを押すと切り替えはできます
Ctrlが送られてないんですかね^^;
試しに
ControlSend,,^f,ahk_id %window% ;ページ内検索
と書いてみたんですがやはり何も起こりません
どういう原因が考えられるんでしょうか
>>933 別のキーボードショートカットを試してみては?(Ctrl+PageDown)
Ctrl+Tab だとカーソル選択位置によっては画面内のフォーカス移動をしていたので
以下のスクリプト方が安定して動作した。
----------------------------------------------------
Ctrl+Tab または Ctrl+PageDown - 次のタブに切り替えます。
ttps://support.google.com/chrome/answer/157179?hl=ja ----------------------------------------------------
#IfWinActive, ahk_class Chrome_WidgetWin_1
F3::
MouseGetPos,,,window
ControlSend,,^{PgDn},ahk_id %window%
Return
あとはSetKeyDelayの問題かも?
>>934 本当にありがとう
やはり手動でCtrl+PageDownを押すとタブ切り替えできるのに
AHKLだと単なるPageDownになってしまいます
---------------------------------
#IfWinActive, ahk_class Notepad
F1::
MouseGetPos,,,window
ControlSend,,^p,ahk_id %window%
return
---------------------------------
メモ帳にF1を何回か押していると 「p」というテキストが入力される場合と
たまに印刷ダイアログが出てくる場合が混在します
>>936 ;SetKeyDelay,10,-1 ;反応しないなら遅くする(初期値)
#IfWinActive, ahk_class Notepad
F1::
MouseGetPos,,,window
ControlSend,,{Ctrl Down}p{Ctrl Up},ahk_id %window%
Return
#IfWinActive
あとは #InstallKeybdHook でフックを使う
>>937 まさにそれでした!
2番目のパラメーターを10にしたら完全に動くようになりました
ディレイを入れてる分 若干カクカクするように感じますがこれで行くことにします
環境が同じなのに
ディレイを入れなくても問題ないケースと
ディレイを入れないと問題が出るケースもありうるんですね
ホントにほんとにありがとうございました!
>>931 >>931 別言語だとラベルにもローカルとかグローバルとかあるんか・・・
ループをさせたいわけじゃなくて、MenuとかGUIとかでラベルを使う時すぐ下にあった方が個人的に書きやすい
でそこのラベルを別のとこからちょっとGosubで使いたいな、って時に使えなかったってだけ
でもなんか別のやり方を見つけたほうがよさそうだな
>>940 ホットキーラベルの直後とかにラベル貼っつけるのは可能よ
んでそれをほかから呼び出すのも可能
関数だと競合を避けるためローカル変数に強制的になるから一度globalコマンドでどれをグローバル変数とするか書かないいといけない
loop内部にラベルはさすがにやったことねーっす
>>940 他言語のことは知らんけどahkの場合、関数内ラベルは
ローカル扱いだったはず
ahkのgotoはgosubコマンドがサポートされる前の名残で、
あんま積極的に使うコマンドじゃないと思ってる
エラー発生時点で終了処理後abortしたいときは関数の尻の方にexitラベルつけてgotoしたりもするけど
見境なくジャンプすると処理体系追えなくなるしバグの元になりやすい
別のスクリプトから、起動中のスクリプトの指定ラベルに飛びたいんですけど 良い方法ないですかね?
指定ラベルを「実行」したいだけならば、 なんらかのアクションを伝えればできる。 ウインドウメッセージで送るとか、 特定のファイルを常時監視しておき、片方から指示命令を書き出して、 戻り値が必要なら、その値をファイルに書き出して終わらせるとか
Pidからexeのフルパスって取得できませんか?
できるよ
LButton & WheelDown:: 〜処理 のように、同時多しリマップを1つ書いただけで、 LButton が単体の動作をしなくなってしまいました・・・。 クリックしながらホイールダウンでウィンドウ最小化 を 実現しようとしているのですが、 やはり、F13以上の普段使用しないキーを使う以外の方法はないのでしょうか?
マウスジェスチャーツール総合スレで質問したら誘導されてこっちに来ました。 質問です。 MGL.ahkにpluginスクリプトを追加して使ってるのですが、 pluginスクリプトを複数入れる場合、それぞれのスクリプトで変数名が ダブらない名前にしないとそれぞれのスクリプトがまともに動かなくなります。 関数の引数に於いても同様なので手直しが面倒です。 こういうのはどうしようもないのですか?
>>949 引数ってのは実引数を指してるのかね?
何れにしろプラグインでサブルーチンじゃなく、関数を使って
グローバル変数を使わないように書けばいい
もちろん関数名とかラベルは被っちゃダメだけどな
プラグインならできるだけ関数内で処理を終わらせるってのと 変数名_スクリプト名(プラグイン名) みたいな書き方で統一すると自作プラグインとか拾い物プラグインで競合しなくていいよ かなり冗長にはなってしまうけど、どうせエディターの入力補助使うだろうし
>>948 LButtonを最初に持ってくるのが良くないんじゃね
ホイール動作は、Ctrl+Tab や Ctrl+Alt+Tab 、音量調整とかに使うのが一般的だと思う
ウィンドウ最小化は通常のジェスチャーに組み込めばいいじゃん
自分は8方向だから少数派だと思うけど、右+/down でウィンドウ最小化
右+/up で最大化・元に戻すのトグル、右左+/down で全てのウィンドウを最小化って感じ
>>948 コンビネーションキーの場合、一つ目のキー自体のもともとの機能は無効化される。
4.2 コンビネーションキー
ttp://ahkwiki.net/Hotkeys 通常の修飾キー以外とWheel系を組み合わせるのはやめた方がいいかも
GetKeyStateで入力がうまく取れないから(自分の環境だけ?)
↓動くけどスクロールが若干ぎこちないかも。
WheelDown::
If GetKeyState("LButton","P")
Send,#d
Else
Send,{WheelDown}
Sleep,40 ;キーリピート調整
Return
※インデント全角スペースなので注意
~LButton & WheelDown::
>>953 , 954, 955
皆様ありがとうございました。
>>955 さんの書き方で解決できそうです。
~とか、こんなに使える修飾を今初めて知りました・・・w
MGL.ahkで「マウス下のウィンドウにスクロールを送る」という機能を 実現するにはどうすればいいですか 今まではWheelAccel使ってましたが加速は要らないので・・・
>>959 ありがとうございます
WheelRedirectがWheelAccelの加速部なし版と考えていいんですね
違うけど 拡張全部そぎ落として一番のコア部分がそれ 先に書いたように行儀の悪い一部のソフトで動かなかったりマルチディスプレイで問題が出たりする
行儀の悪い一部のソフトでもマルチディスプレイでもちゃんと動くようにするなら WheelAccelをカスタマイズするのがいいんですかね
>>960 つか、MGLのヘルプの4.3.3に載ってるんだが…
もっとも、この方法も跡地のスクリプトも、どっちも満足できなかったけどね。環境のせいかもしれんが
スクリプト書けないから何を修正すればいいかはさっぱり分からんのだけどさw
ホイールリダイレクトのソフトはたくさんあるけど、結構複雑なんだろうなーという感想しか出ないw
ahk付属のテキストエディタSciTEは他のエディタ使うより何かと便利なので重宝してるんだけど、 InternalAHK.exeとかいう曲者のせいか起動が非常に遅く、たまにイラッと来ること有る。 そこで、このInternalAHKをSciTEから切り離したい。 と言うか、とにかくこの起動の遅さを何とかしたいんだけど、何か手はある?
>>964 に追加
今、ahkでツールチップだけ表示するスクリプトをexe化してInternalAHK.exeと入れ替えてみたんだが、
起動のスピードはさほど変わらなかった…この遅さは何が原因なんだろ?
>>963 ありがとうございます。
やはり専用ソフトでホイールリダイレクトしたほうがいいと思うのですが
ウィンドウごとの細かいカスタマイズができるAHKはやはり便利ですよね
優れたAHKスクリプトが公開されるといいのですが・・・
>>966 無いものは作ればいい
むしろ作る事が楽しいと思うのだがw
>>966 ヘルプの3.14の中に設定があるよ
ホイール操作をターゲットコントロールにリダイレクト
キャンセル押されるとErrorLevelに「1」が格納されるから
>>967-968 やってみたらできました・・本当にありがとうございます
Firefoxも問題なくスクロールできています
マウス直下にあるウィンドウに Windows7のショートカット(縦に最大化 Win + Shift + ↑)を 送る処理を書いたのですがうまく動きません。 MouseGetPos, , , WinHdl, , ControlSend, , #+{Up}, ahk_id %WinHdl% どうも#キーとの同時押しができないみたいです。 上記の場合、{Up} キーが送信できていません。 #+{Up} を +{Up} にした場合、正常に動作します。 この動作はAHKの仕様でしょうか?
sub_hoge: for 〜 for 〜 if hage return } } } return こんな感じでforで二重にループしてる中で 条件hageによりループ途中でreturnしてるんだけど、 問題有るとしたら、どんなことがあり得るんでしょう? 今のところ問題なく動いてるから知らんぷりしても良い?
昔の言語だとスタックが溜まりっぱなしなことがあったけど、 いまはガベージとして破棄するとかで大丈夫なんじゃね? 途中で抜ける関数を100万回くらい呼ぶサンプルコードを作って、 メモリ消費量が右肩上がりで増えるかどうかを確認してみたら? 俺も結果を知りたいからテストしたら結果を書いてもらえると助かる。
Gui, Buttonについてお聞きします。 ボタンにSendを割り当てたとして、GUIボタンをクリック押し込みするとキーは送信されず クリックを離した時点でキーを送信しますが クリック押し込み状態でも、キーを押した状態とするにはどのような処理をすれば良いでしょうか? よろしくお願いします。
レスありがとう。 大丈夫と言う意見戴きました。 うう、サンプルコード… 素人にはそっちの方が大変だ。期待に添えなくて申し訳ないっす。 とりあえず今動かしてる分にはメモリ使用量が突然高くなるなどの 現象は起きてないようなのでこのまま様子を見るつもりす。
>>975 別に問題ないよ
returnの代わりにgotoでサブルーチン外に出て戻ってこないとかだと問題だが
979氏、レスありがとう。 問題ないと言う、976氏と同意見なのでとても安心っす。
>>981 種別を色々変えてもそうなるの?
ウィンドウクラスでダメなら実行ファイル名にするとか
>>977 Button だとおそらく無理なので Text や Picture などでボタンを作ればいい
今回は画像用意するのめんどくさいのでText
F1::
Gui,Add,Text,w100 h38 Center Border gTextButton,`nButton
Gui,Show
Return
TextButton:
ToolTip
ToolTip % A_GuiEvent
If A_GuiEvent = DoubleClick
ToolTip % A_GuiEvent
Return
MouseGestureLの設定方法に関してはマウスジェスチャスレのほうでやってもらったほうが良くないか ここに作者いないしサポート求められても正直困る 自分でプラグイン書きたい人のコード添削なんかはここでいいと思うけど
>>983 なるほど、ボタンでは出来ないんですね。
サンプルコードまで書いて頂きまして有難うございました。
>>981 他のマウス系ツールと併用していてたりしない?
例えばトラックボール+Wheel Ball+Autohotkeyスクリプト
という組み合わせの時に擬似マウスホイール操作
(トラックボールのボタンを押しながらボールを回転)すると
頻繁にそのエラーが出てたので
#HotkeyInterval 6000
#MaxHotkeysPerInterval 300
というように設定してた。
エラーの状況からして #MaxHotkeysPerInterval の値を
もっと増やさないといけないだろうけど。
ちなみに現在はTW.ahk(本来はトラックポイント用)を改造して
Wheel Ballと同等な操作感にしたものを使っているけど
#HotkeyInterval と #MaxHotkeysPerInterval を記述しなくていいようになった。
>>982 実行ファイル名で登録しても駄目です
notepadなどでもテストしてみて問題なく登録は出来ていると思います。
>>986 #HotkeyInterval 6000
#MaxHotkeysPerInterval 300
にしても変わりませんでした
常駐ソフトも全部終了させてMouseGestureLだけにしても同じです。
問題が起きるソフトとはWhiteBrowserだけです
このアプリでサムネイル上で右クリックすると、こうなります。
このソフト、なんか他にも挙動がおかしい部分があり、たぶんこのソフトに原因があると思いますが・・
>>988 サンクスです。
#UseHook
#HotkeyInterval 6000
#MaxHotkeysPerInterval 20000
にしてみました
5回中3回は2秒ぐらい遅れますが右クリック成功
後の2回は
>>981 と同じ症状が出る感じで安定しません
この対象アプリだけ右クリック(RB_)を感知したらすぐにスレッドを終了させるようにすれば行けるかも?
と思ったのですがどこを弄ればいいのか分かりません。
MG_Abort()
MG_Cancel()
をこのアプリに割り当てても駄目です
>>981 は0.374秒の間に2001回の異常なキー入力が有ったので中断しているってこと。
つまり、WhiteBrowserを右クリックするとWhiteBrowserが異常な仮想キー操作を行っている可能性がある。
なので作者さんに聞いた方が解決するんじゃないかな。
ここはAutoHotkeyのスレであって アプリ(MouseGestureL)の質問されても困るのだが・・・。 ここの住人が全員使ってるわけでもないし。
全く関係ないわけじゃないし別にいいんじゃないの? 2,3日で1スレ埋まるようなスレでもないし
>>990 微妙にスレ違いですみません サンクスです。
MouseGestureLを切ると 右クリックも問題ないため
MouseGestureLだけで解決できるかと思っていましたが難しそうですね
作者氏に聞くかWhiteBrowser使用を止めたいと思います。
他にも挙動がおかしな所がありますし
>>974 ありがとうございます。
アドバイスを参考に似たコードで試してみました
F13 & z::
SetKeyDelay, 1000, 1000
MouseGetPos, , , window
ControlSend, , {Ctrl Down}{p Down}{p Up}{Ctrl Up}, ahk_id %window%
return
やはり動きません。
Ctrlは押されて離されるのですが、Pが送信できていないようです。
AHKのKeyHistoryを確認してみましたが、ログがありませんでした。
(ControlSendの入力はログに残らない?)
>>994 違うショートカットキーを試して何をしたいのかよくわからんけど
setkeydelayのそれぞれの値は50〜100くらいにすれば概ね動くようになるよ
1000(1秒)とかにしたら動作がもたつくだけ
それはおいといて縦に最大化させたいだけなら↓でもいける
MouseGetPos, , , window
wingetpos, x, , w, , ahk_id %window%
winmove, ahk_id %window%, , x, 0, w, A_ScreenHeight
AHKでアプリごとに設定したショートカットがいい加減覚えきれなくなってきたんだけど .ahkファイルを読み取ってショートカットやコメントを読みやすい HTMLの一覧表にコンバートしてくれるツールってないですか?
ahkで自作したまえ RegExもFileRead/Apendもサポートされている
>>994 ControlSendの入力はControlに直接送っているのでログに残らない
ショートカットに関しては根本的なところが間違っている
Windows7のショートカット(縦に最大化 Win + Shift + ↑)
これはOSの機能であって対象Controlの機能ではない
直接対象に入力しても送り先が間違っているので機能するわけがない。
ショートカットを実行したいだけなら Send,#+{Up}
マウス下のウインドを対象にしたいなら
>>995 のように機能自体を書く
MGL使ってるんだけど、pluginのscript内で「menu, tray, icon, 〜」したiconを MGL本体のtray iconとは別に独立したtray iconとして表示させる事出来ます? (プロセスがMGLの一つに対し、tray iconを二つにする、という意味) 今の状態だと、MGL本体のtray iconがpluginのscriptで 記述したiconに変わってしまうので宜しくないんですよ。
あああ、もうこのスレも終了なので新スレの方でもう一度質問書かせて下さい。 どうぞ皆様お願いします。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。