■ リマップ・ホットキー割り当て
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/pub/MyScript/ の「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} にする。
>>9 入れるつもりが忘れてました。
次スレ建てる人は前スレを
>>1へ追加をお願いします。
● 分からない理由 ●
1. 過去ログを読まない。
2. 読んでても肝心な所が見えてない。
3. 検索能力が低い。
4. そもそも検索する気がない。
5. 類推という概念がない。
6. それ以前に普通に頭が悪い。
<わからない11大理由>
1.読まない …現行スレ、テンプレ、取説などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
10.開き直る …自分の思うようにならないと開き直る。
11.2ちゃんねるをお客様相談室だと思っている。
★教えて君五大要素★
1 読まない (文盲)
2 調べない (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない (馬鹿)
5 人を利用することしか頭にない (死ね)
YES → 【見つかった?】 ─ YES → じゃあ聞くな死ね
/ \
【探した?】 NO → なら、ねぇよ
\
NO → 死ね
■回答できるレベルの人へお願い■
このスレは親切な人が多いと思うけど、もう日記に対する検証&レスは、
たとえ対処法をわかっている人がいても、レスは一切やめにしてくれないか?
こいつがやってることは
「適当にコード作ってみたけど動かない。動かない原因を調べるのも面倒だし、
学習する気もない。どうせここに書けばおまえらが修正するだろうから誰か直して」
ってことだ。しかも、一度だけならまだしも、何度も繰り返している。
これまでに、このスレではこの手の質問者は居なかったと記憶する。
いつまでもこんなクズにつきあう必要はない。
汎用性のないコードでスレが汚されるのは、結果的に良質な情報が
埋もれる原因になって迷惑だし、横から見ていても参考にならないし、
なによりも見ていて不快でしかない。
うんうん、じゃあID:0gt728Ga0が
【初心者】AutoHotkey スレッド【お断り】
を立てて、続きはそっちでやっとくれ
総レス数 981で前スレ落ちたんだけど・・wなんで?
980超えると24時間書き込みが無いと落ちる
17 :
名無しさん@お腹いっぱい。:2012/04/07(土) 14:01:21.40 ID:NkYcATpD0
あれ、ahkのサイトがかわった?
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
[板名] - スレタイ
ahk_class SunAwtFrame
V2Cというアプリをspyで調べるとV2Cを特徴付ける情報が無いので
#IfWinActive ] - ahk_class SunAwtFrame
で一応で動くもののいつか誤動作しそうで怖い…
c:\v2c\v2c.exeで引っ掛ける方法ないですか
設定 > 一般 > 板名・スレタイをタイトルバーに表示する
20 :
名無しさん@お腹いっぱい。:2012/04/08(日) 12:39:53.86 ID:QmZe/Aab0
Rightキーを入力している間、Alt+Ctrlが入力しているようにしたいのだけども単純に
Right::Alt
Right::Ctrl
だとエラー吐くし
Right::^Altみたいに修飾シンボル+キー名だと修飾シンボルが無効になってキー名前だけの効果しか出ない
wiki見てもA&Bみたいな同時押しはできないと書かれているし、上みたいに1キー入力で2キーの同時入力みたいな事はできないんですかね
>18
AutoHotkey_L なら
#IfWinActive ahk_exe v2c.exe
でいけると思う
以前にも書かせていただいたのですが、
Autohotkeyによってキーを離した情報が失われることがある、ってことはありませんか?
またそういうのが起こる確率を下げる構文とかありませんか?
(たとえば#InstallKeybdHookをいれれば起こりにくくなるとか?)
新PCにしてキーボードも変えたのに、相変わらずゲーム(複数タイトル)中ではキーの押しっぱなしが
よく起こるんです。もう一度そのキーを押してやれば解除されるのですが。
>>23 キーのDown/Upの間隔が短いと(人間が操作する想定以上に速いと)
ゲームクライアントがDownだけ受け取ってUpを拾いきれなくて発生している可能性がある。
setkeydelayで第二引数の値を大きくするか、下のように個別にSleep入れる。
send, {a down}
sleep, 200
send, {a up}
※やってることはどちらも同じ。
レスサンクスでした。
Sendとかスクリプト内で設定できる方法のようですね。
スクリプトをバインドしているキーで「キーの押しっぱなし」が起こるのなら
わかりやすいのですが、なにも設定してないだろう、ほとんどのキーで起こるっぽいんですよね。
(修飾キーなしのWキーのみとか、WASD CVキーも同様)
ゲーム中だけ起こるっぽいです。
有名な既知の解決法はないみたいですね。
前のPCから引き続いて使用している常駐ソフトって数えるぐらいしかないので
Autohotkeyじゃないかなとめぼしを付けているのですが違うのかな。
いろんなタイプのAutohotkeyだったり管理者として実行にチェックいれても変わらず。
>なにも設定してないだろう、ほとんどのキーで起こるっぽいんですよね。
Autohotkeyで何も設定していないキーで発生する時点でAutohotkeyは関係ない。
スレ違いだけど疑っているソフトがあるならそれらを終了させた状態で発生するか確認してみては。
IntellipointやSetopointといったマウスやキーボード用のユーティリティ(最近はドライバと言ったほうが一般的?)
を使っているなら「それらをアンインストールしてWindowsを再起動してから」試したり。
WM_HSCROLLやWM_VSCROLLを使ったスクロールがどうも気に入らなくて
他の方法を探してたら
ScrollWindow
http://msdn.microsoft.com/ja-jp/library/cc410994.aspx ScrollWindowEx
http://msdn.microsoft.com/ja-jp/library/cc411017.aspx といった関数がありましたが初心者の自分には使い方がわかりません
というか、この関数が自分の目的にあってるかどうかもわかりませんので
助けを求めに来ました
以下は適当に試した失敗コードです
VarSetCapacity(rect, 16)
hwnd := WinExist("A")
DllCall("GetClientRect", "UInt", hwnd, "UInt", &rect)
DllCall("ScrollWindowEx", "UInt", hwnd, "Int", 8, "UInt", &rect, "UInt", &rect, "Str", "SW_ERASE")
DllCall("UpdateWindow", "UInt", hwnd)
>>28 ウチもちょっと自信ないんですけど
"SW_ERASE"は文字列じゃなくてマクロで定義された定数なので
そこは UInt , 0x0004 なんじゃないかと
>>29 レスありがとうございます
たしかにそこはそのとおりですね
あとdxとdy二つを渡すべき所で一つだけだったりミスがありました
ScrollWindowの場合は
DllCall("ScrollWindow", "UInt", hWnd, "Int", 0, "Int", -8, "UInt", &rect, "UInt", &rect)
で、壊れたままでもとりあえず目に見える結果は出ますが
MSのページでは「Exの方を使え」っと書いてますからね
でもそのScrollWindowExのやつは同じようなコードでもうんともすんとも言いませんし…
まぁ公式フォーラムでもこの関数を使ってスクロールしてるスクリプトが一つもいない以上は
WM_HSCROLLやWM_VSCROLLで生きるしかないってことかも知れませんし、気長に考えてみます
すいません初心者質問で恐縮なのですが、Sleep実行中にファンクションキー以外のキー(A,B,Spaceなど)が効かなくなるのですが、Sleep実行中にキーボードのボタンを効くようにする事ってできるのでしょうか?
すいません書き忘れました
OSはWindow7、ソフトはAutoHotkey_Lです
よろしくお願いします
説明不足でしたすみません
MouseGestureLを使ってまして、ネトゲの技発動中などに回復ボタンを押してHP回復したいのですが、技の時にSleepを使ってるので、その間Sendコマンドが効かなくて回復できないって感じです
文章力なくてすみません。重ね重ねよろしくお願いします(*_ _)
IMEをONにせず入力した時、その半角文字をコピーしてIMEをONにして打ち直そうと以下2つの案を試しましたが、
以下を設定しても%clipboard%がそのまま表示されてしまいます。
なにかよい対処法はあるでしょうか?
案1
::#a::%clipboard%
案2
#a::
Send, %clipboard%
return
IMEの再変換機能だとダメなの?
>>34 過去ログにそれ用のスクリプトあげてる人いたよ
ちょっと今ログあさってる時間ないけど
●もってるなら探してみ
再変換できるなら再変換で問題ないし、
IMEがonになっていれば、案2で問題ないような気が。
googleIMEでしか確認してないけど。
IME_SET(1)してないとかいうオチじゃないよね?
便乗ですが、変換済みの文字を、再変換未対応のアプリで何とかする方法
ってないもんですかね。
「メモ帳を新規に起動して、そこに貼り付けて全選択した上で再変換」というのは
思いつきましたが、エレガントさに欠けることこの上ないので、それ以外の方法でw
>>31-33 ネットゲームの規約で禁止されている行為であるため、アドバイスできません。
そうですか・・レスありがとうございました。・゜・(/Д`)・゜・。
規制解除されたので備忘録
#Persistent
SetTimer,NoSleep,60000
return
NoSleep:
if WinActive("ahk_class XXXXXXXXXX")
{
DllCall( "SetThreadExecutionState", UInt,0x00000002 ) ;ES_DISPLAY_REQUIRED
}
return
ゲームパッドで操作するゲームでディスプレイが省電力入るの防ぎたかったので適当に書いたら動いた
1分おきにタイマー回して、特定アプリがアクティブな時はスリープ防止のAPIを呼び出す
DllCallでAPI呼び出すと出来る事一気に増えるねコレ
すみません、3行目は"ifWinActive,じゃなくて#ifWinActive,です
>>42-43 #IfWinActive と #If は同等なので入れ子にできません。
#IfWinActive,ahk_class TMeryForm.UnicodeClass
;中略
#If (KeyMap=1) ; ここで #IfWinActive,ahk_class TMeryForm.UnicodeClass は無関係になる。
;中略
#If
;中略
#IfWinActive
;↓なら想定通りに動くと思う
#IfWinActive,ahk_class TMeryForm.UnicodeClass
^e::Send,{Enter}
^i::KeyMap:=!KeyMap
j::send, % KeyMap ? "{left}" : A_Thishotkey
+j::send, % KeyMap ? "+{left}" : A_Thishotkey
^j::send, % KeyMap ? "^{left}" : A_Thishotkey
; 以下略
>>44 丁寧な解答ありがとうございます、意図通りに動きました
変更したキーマップは他のウィンドウでも有効なのに肝心の^iが効かなくて困ってましたが納得しました
GUIウィンドウ以外の場所が選択された場合に、
GUIウィンドウを消去させる事ってできますか?
左右のクリックに条件指定して「Gui,Destroy」させる方法を
思いついたのですが、これはなるべく避けたいです。
これ以外の案を知っていたら、知恵を貸して下さい。
Lのv2.0に移行に例えば下記みたいな修正が必要だけど
AAA = aa%bb%cc%dd%ee
↓
AAA := "aa" . bb . "cc" . dd . "ee"
v1.0でこの書き方をすると処理速度が落ちてしまうけど
v2.0だとこの書き方での速度面も最適化されているのだろうか?
(一応短いソースで確認した限りは同じくらいに見えたけど念の為)
>>46 SetTimerで監視するのどう?
>>47 それだっ!
それなら思い通りに動いてくれそうだ。
ありがとうございます。
一応解決してるみたいだけど、私はいつもこうやってるよ
「GUIウィンドウ以外の場所が選択」はGUIウィンドウが非アクティブになると解釈して
非アクティブ状態になったら"OnInactivate"に飛ばす処理
OnMessage(0x6, "OnInactivate")
この関数の中にやりたい処理内容(今回の場合はGUIの破棄かな)
OnInactivate(wParam, lParam) {
……
}
50 :
42:2012/04/23(月) 03:14:21.78 ID:v6JiF24U0
42です。先日はお世話になりました
度々すみませんがまたよくわからない状況になってしまいました、また何か間違ってるのでしょうか?
一度
>>44の!KeyMapに切り替えるとreturnで区切られても他のウィンドウに引き継がれてしまいます
returnは強制的に他のものから分断してくれるのではないのですか?
今以下のようにまとめてるのですがそれぞれが!KeyMapを使用しています
;; Mery
SetTitleMatchMode, RegEx
Exit
#ifWinActive, ahk_class [TMery|TFind|TReplace]Form.UnicodeClass
〜〜〜
#ifWinActive,
return
;; エクスプローラ
#ifWinActive, ahk_class CabinetWClass
〜〜〜
#ifWinActive,
return
;; 「開く」ダイアログ
#ifWinActive, ahk_class #32770
〜〜〜
#ifWinActive,
return
;;以下略
.ahkもあげておきます。よろしかったら添削お願いします
ttp://www1.axfc.net/uploader/File/so/78126
>#ifWinActive,
>return
これいらない。
変数"KeyMap"をウィンドウごとに違うものにする。
ざっと見ただけなのでよく分からんけどこういう事かな。
#ifWinActiveはその下に書かれたホットキーの発動条件になるだけで
ifとかとは性質が全く違うよ。
52 :
名無しさん@お腹いっぱい。:2012/04/23(月) 11:59:39.47 ID:Dcd2Y7sZ0
現在のカーソル(マウスポインタ)の形を取得するにはどうしたらいい?
具体的にはブラウザ上(Firefox)で今どんなポインタになっているかを取得したいんです
hoge:=DllCall("LoadCursor","UInt",NULL,"Int",IDC_CROSS,"UInt")
と書くらしい(?)事は分かったんですがパラメータが分かりません
>>51 そうだったんですか、流行らせるページだけで理解するのは難しいようですね
変数の指定が上手く出来ないので解決できませんでした
もう少しリファレンス見て出直してきます、ありがとうございました
>>52 MouseGestureL.ahkの人の人が調べてる。その人のコードは、
hCursor := DllCall("user32.dll\LoadCursor", "Ptr",0, "UInt",idCursor, "Ptr")
パラメータは、どこから調べてきたのか知らないが、MG_Edit.ahkのL176〜L193あたり。
参考にならずにすまん。
55 :
47:2012/04/23(月) 23:29:33.26 ID:0kNYzI5h0
前の続きで悪いが…
v2って速度面の向上に対してのアナウンスってあったっけ?
下記の記述で速度面の実験をしてたんだが
1.
A := ""
Loop, 1000000
A .= A_Index . "`n"
msgbox, end
2.
Loop, 10000000
A := RegExReplace("ABCD", "(.)...", "$1")
msgbox, end
v2はv1に比べ、1の記述で2倍、2の記述で5倍も速度が上がっていたんだが
具体的に何が変わっただろうか
正規表現の処理速度が向上したと
フォーラムのどっかに書いてあったような気がする
57 :
47:2012/04/24(火) 23:33:26.91 ID:s/liIH2C0
選択した文字列が日本語かどうかの大雑把な判定が欲しいんですが
F12::
ClipboardLast := Clipboard
, Clipboard :=""
Send, ^c
ClipWait, 3
If ErrorLevel
return
If StrPut(Clipboard, "cp0")=StrPut(Clipboard, "UTF-8")
MsgBox, 1Byte
Else
{
Temp := Clipboard ; ←VarSetCapacity
, StrPut(Clipboard, &Temp, "cp932") ; Shift-JIS
If StrGet(&Temp, "cp932")=Clipboard
MsgBox, ja
Else
MsgBox, unknown
}
Clipboard := ClipboardLast
return
矢印の所のTemp := ClipboardはもともとVarSetCapacityが来るべき所ですね
ところで、
VarSetCapacity(Temp, StrPut(Clipboard, "cp932"))
VarSetCapacity(Temp, StrPut(Clipboard, "cp932")*2)
VarSetCapacity(Temp, StrPut(Clipboard))
VarSetCapacity(Temp, StrPut(Clipboard)*2)
のどれでもうまくいきません
なにかアドバイスお願いしますm(。_。)m
正規表現で[ぁ-ヶ亜-K]じゃダメなん?
文字列をGoogleTTSとかに渡す予定だったので
「TTSが読めない文字が入ってるか」が判定基準でした
それで、とりあえずShift−JISでのダメ文字が入ってるか判定してみようとしてました
正規表現はよく知らないんで再度すみませんが
[ぁ-ヶ亜-K]だと「仮名や漢字含まれてるか」の判定だとはわかりますが
「日本語で読めない文字が入ってるか」もしくは「Shift-JIS文字か」の判定も簡単に出来ますか?
文章を読み上げるスクリプトでも作ってるの?
とりあえずSJISでってなんだよ
相手が認識できる文字一覧をきっちり調べるのが第一でしょ
あとは
・文字列内に認識できない文字が含まれていないこと
・文字列全体がすべてが認識できる文字で構成されていること
のいずれかでチェックかけるだけかと
ループでも正規表現でもやることは変わらんね
速度とコード量はかなり違うけど
MouseGetPos,,,h,c
PostMessage,0x114,1,%h%,%c%,ahk_id %h%
で水平スクロールさせようとしたんだが、上手くいかない窓が多いねコレ。
もしかして、取得するハンドルやらコントロールやらは、
窓ごとに個別設定しなければいけないのか。
だとしたら少しメンドーだな…
スレの皆さんはどのように対応しているのかな?
参考までに教えてもらえると助かる。
64 :
名無しさん@お腹いっぱい。:2012/05/01(火) 16:54:59.65 ID:ipX6gbjY0
サブルーチンを作るとき
「関数」として作成していますが
「ラベル」として作成するメリットって何かあるんでしょうか?
お手軽という点に尽きるんじゃないの
タイプ数が若干減るし括弧書かなくても済む
67 :
名無しさん@お腹いっぱい。:2012/05/01(火) 19:40:46.75 ID:Cyiv6h820
Menuとかは関数でなくラベルで指定しないといけないんじゃないっけ
>>66 ありがとう。
自身で作ってみようと考えてたけど、予想以上に複雑で俺にゃ無理だな。
未熟さを痛感したわ。
おとなしく、紹介されたスクリプトを使うことにするよ。
>>68 プログラミングは単純なパーツを組み上げて複雑なモノを造る
いわばレゴブロックの様なモノ
最初から大作考えるより、単機能なモノから発展させていった方が、挫折せず勉強出来ると思う
おれは発展の余地は充分すぎるほどあるんだが
現状不満はないから作る必要がないばっかりにまったく技術が進展しないな
たくさんの高度なスクリプトを見てみたいわ
そうすりゃなんか戦力になるのが見つかるかもしれないなぁ
なんだこいつ
72 :
名無しさん@お腹いっぱい。:2012/05/03(木) 00:06:12.85 ID:OOBVf7bu0
>>65 >>66 >>67 ありがとう。
サブルーチン=GoSub了解。
ラベルに優位性がなければ関数に統一し
実現できないことだけラベルという方針で進めます。
>>70 意訳すると
使い始めたばかりの初心者です。特に望むものは無いんですけど何となくインストールしました
でも皆さんのすごいスクリプトを見れば何かやってみたくなると思うので晒してください
パクります
74 :
名無しさん@お腹いっぱい。:2012/05/04(金) 19:55:36.42 ID:TyZlBxC20
後述のコードを実行し
1)WindowsのCtrl+cでクリップボードに文字列をコピー
2)#cで1度だけテンポラリに別の文字列を格納
3)#vを連続して実行
の手順を実行すると「2」の内容がペーストされることを期待してますが
空白文字や「1」でコピーした文字列がペーストされる場合があります。
なぜ、このような動作になるのかご教授頂けないでしょうか。
75 :
名無しさん@お腹いっぱい。:2012/05/04(金) 19:59:43.36 ID:TyZlBxC20
■実行したコード
global global_tmp
;カーソル行の文字列をテンポラリに格納
#c::
BlockInput, on
SendInput, {Home}+{End}
clipboard_saved := ClipboardAll
Clipboard =
SendInput ^c
ClipWait, 1
global_tmp := Clipboard
BlockInput, off
Return
;テンポラリの内容を次の行にペースト
#v::
BlockInput, on
clipboard_saved := ClipboardAll
Clipboard =
Clipboard = %global_tmp%
SendInput, {End}{`n}^{v}
Clipboard =
Clipboard := clipboard_saved
BlockInput, off
Return
でたご教授
77 :
名無しさん@お腹いっぱい。:2012/05/04(金) 20:12:14.83 ID:TyZlBxC20
SendInput を SendEventに変更すると多少改善したけど、まだ問題を解消できない。
(あと、退避していたクリップボードの内容を戻す処理を修正しました)
;カーソル行の文字列をテンポラリに格納
#c::
BlockInput, on
SendInput, {Home}+{End}
clipboard_saved := ClipboardAll
Clipboard =
SendEvent ^c
ClipWait, 1
global_tmp := Clipboard
Clipboard := clipboard_saved
BlockInput, off
Return
;テンポラリの内容を次の行にペースト
#v::
BlockInput, on
clipboard_saved := ClipboardAll
Clipboard =
Clipboard = %global_tmp%
SendEvent, {End}{`n}^{v}
Clipboard := clipboard_saved
BlockInput, off
Return
send に変更して Setkeydelay で各パラメーターを大きくしてみては
^vの送信直後、貼り付けが処理される前に
クリップボードを戻してしまっているのではなかろうか
解決しました。
SendMode Input
をスクリプトの冒頭で行なっていたのですが
これを削除することで問題が解消されました。
「SendEvent」「SendInput」「SendPlay」は
SendModeの影響を受けないと思い込んでいたので
投稿したコード内に記載が漏れていました。
>>78 ありがとう。解決のきっかけになりました。
>>79 そうですね。そんな感じの動作をしています。
81 :
sage:2012/05/05(土) 12:45:13.51 ID:Qaej308K0
mac wireless keyboard を windows につないで使いたいのですが
かな -> 変換
英数 -> 無変換
のマッピングがうまく動作しません。
vkE9sc071 Up::Send,{vk1Dsc07B Down}{vk1Dsc07B Up} ;Apple英数 -> 無変換
vkFFsc072 Up::Send,{vk1Csc079 Down}{vk1Csc079 Up} ;Appleかな -> 変換
「かな」を押しても「英数」を押しても「変換」になってしまいます。
いろいろ調べたのですが・・・ご存知の方がいらっしゃれば教えてください。
83 :
名無しさん@お腹いっぱい。:2012/05/05(土) 22:16:00.42 ID:Qaej308K0
> 英数 -> 無変換 のマッピングができてないから
そのとおりでした orz
当方window7 64bit ultなのですが
>AutoHotkey_L (内部Unicode、64bitバイナリ、オブジェクト指向、COM対応など)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ こちらのリンクより左上のDownloadよりダウンロードしたインストーラよりx64版のAuto hot keyをインストールしたのですが起動すると
Error at line 47. Line Text:#z Error:Duplicate hotkey. The program wiill exit.
というエラーメッセージが出て起動できません。UACやアンチウィルスは切っていますしアンインストール後ダウンロードページ↓の方にあるリンクよりx64版をインストールし直しても同様のエラーが出ます。
解決方法はありませんでしょうか?
47行目でのエラー。
ラインText:#zエラー:複製のホットキー。
プログラムwiill出口。
日本語もおかしいし簡単な英語も読めないとかどこの国の人だよw
まずスクリプトを見直せ。
>>84 Autohotkey.exeを実行するとそのエラーが出るってこと?
その場合はAutohotkey.iniが自動で実行されているので
Autohotkey.iniを修正するか中身を空っぽにすればいい。
http://ahk.xrea.jp/Usage.html >単にAutoHotkey.exeを実行するなど、Script Filenameを指定せず起動した場合は、
>起動時の作業ディレクトリのAutoHotkey.iniが読み込まれる。
>ファイルが存在しない場合、My Documentsディレクトリ内のAutoHotkey.iniが読み込まれ、
>それも存在しない場合はMy Documentsディレクトリ内にAutoHotkey.iniを作成してよいかを
>問い合わせるダイアログが表示される。
>>84 一応レスするが
そのエラーが出る時点でインスコに問題はない。
おまいさんの書いたスクリプトが腐ってる。
要はホットキー定義の重複だ。
正味の話、そのエラーメッセージが分からんなら、
使わない方がいいんじゃないかね
ツールチップの書式設定をする方法てのは無いんかな?
ツールチップはOSの設定依存で書式とかはない
枠線のないGUI窓作って好き勝手にコンポーネント置くなり
自前描画でテキスト書くなりする必要あり
用途にもよるが、
DllCallゴリゴリで現窓やデスクトップに直接描画するのもアリ
Gui,Font みたいに簡単に設定が出来るならば、と考えてたんだが。
DllCall のゴリ押しもする気になれんし…
Gui でオプションいじって、それっぽく見せるのが一番楽そうだな。
ありがとう。 参考になったわ
感激した。
ぼちぼち作り始めようかなと思ったら、完成形がそこにあった。
ありがとうございます。
スクロールバーを操作させることは出来るでしょうか?
10%スクロールダウンとか
相手による。
通用する相手でもDllCallと構造体分からんと無理
>>95 あれ、classってahkで使えたっけ?
AutoHotkey_Lだで
a = 5でIf(10 > a > 0){が真でIf(10 > a > 1){が偽になるのが不思議だったんですけど
もしかして((10 > a) > 0)って左から順番に処理されてる?
>>100 てか不等式ってそういう書き方できたっけ?
(10 > a && a > 0)
みたいな書き方しかできないと思ってた
(10 > 5 > 1)
=(True(=1) > 1)
=(1 > 1)
=False
ああやっぱり左からなんですねthx
>>101 (10 > a > 0)の方が馴染みがあるので使えるならこっち使いたかったんだ
多分この書き方できないのが普通
104 :
42:2012/05/13(日) 01:25:38.87 ID:bgX6yvDt0
すみません、42です。何度も何度も情けない限りですが、自力解決出来そうにないのでまた助言いただきたく思います
キーマップを!KeyMapに切り替えた状態で2ストロークキーを定義できません。%KeyMap ? "" : A_Thishotkeyの使い方を分かってないせいかと思うのですが……
流行らせるページのMyScriptのサンプルコードを↓のようにして
>>50の.ahkに追加しようとしたのですがErrorが出ました。
^::: ;first key
Input,InputChar,C I L1 T2,{Esc},o,k ;second keys
if ErrorLevel=Match
{
if InputChar=o ;actions
Send,^f
else
if InputChar=k
Send,a
}
return
みなさんどういったところで勉強されたんでしょう、流行らせるページだけなんでしょうか?
>>104 見た範囲で思った事だけど
呼び出しホットキーの"^:::"は"^*::"にする
Inputの"EndKeys"に{Esc}は使えないんじゃない?
押されたKey別に分岐するなら、Matchリストは余分な気がする
^*:: ;first key
Input,InputChar,C L1 T2 ;second keys
if InputChar==o ;actions
Send,^f
else if InputChar==k
Send,a
return
おっと{Esc}は使えたみたいだ
「 : 」で修飾キーを使う場合は仮想キーコードで指定する
^vkBA:: ;first key
if KeyMap
{
Input,InputChar,C I L1 T2,{Esc},o,k ;second keys
if InputChar=o ;actions
Send,^f
if InputChar=k
Send,a
}else{
Send,^{vkBA}
}
return
よく分からんけどこんな感じ?
>>105 それでは機能しないようです
Errorは出ないのですが完全に無視されてしまいます
あと^*::だとCtrl+Shift+:と認識されるみたいです
>>107 if KeyMapの行で「This Line doesn't contain a recognized action」と言われてしまいます
仮想キーコードについては気付きませんでした、ご忠告ありがとうございます
「This Line doesn't contain a recognized action」
については
>>2 の最後 を参照
Send, % KeyMap ? "a" : A_Thishotkey ; KeyMap
は三項演算子を使って書いているだけで
If KeyMap
Send, a
Else
が True なら Send, a 、 False なら Send, %A_Thishotkey%
110 :
109:2012/05/13(日) 06:28:43.31 ID:yYaYR1m50
途中で書き込んでしまった
Send, % KeyMap ? "a" : A_Thishotkey ; KeyMap
は三項演算子を使って書いているだけでIf文に置き換えると
If KeyMap
Send, a
Else
Send, %A_Thishotkey%
となる。
>>109 テンプレを忘れるなどと、大変失礼しました……
Errorは出なくなりましたがこちらも完全に無視されるようです
>>110 なるほど、おぼろげながら分かりました。流行らせるページの「?:演算子(条件)」のことですね
if KeyMapはif !KeyMapにはしなくていいんでしょうか、やってみても駄目でしたが
>>108 教えてもらった仮想キーコードの方で解決しただろうけど
*を使う場合は、"LCtrl + *"だった。これは失礼
訂正 "LCtrl + *" → "LCtrl & *"
>>111 >if KeyMapはif !KeyMapにはしなくていいんでしょうか、やってみても駄目でしたが
! 演算子(論理否定)
http://ahk.xrea.jp/commands/__Not.html >みなさんどういったところで勉強されたんでしょう、流行らせるページだけなんでしょうか?
オレの場合はAutoHotkeyを流行らせるページのリファレンスを意味が分からないところが
殆どだったけどとりあえず全部のページに目を通した。
んで、一度目を通しているおかげでやりたいことに必要なものが漠然とわかってくるので
あれとこれとそれを組み合わせればいけるんじゃね?みたいになって
あとはパズルみたいに組み立てたり、入れ替えたり、試行錯誤してそれとなく使えるようになった。
115 :
42:2012/05/13(日) 14:04:32.17 ID:bgX6yvDt0
ちなみに読みやすくするとこうなる
ホットキーラベル
↓
^i:: KeyMap := (!KeyMap)
↑ ↑
代入先の変数 代入される式
>>115 o,kが他のホットキーと被ってる。
Suspendで一時的にホットキーを無効にしてみたら?
>>117 一通り見ましたが真と偽の概念が理解できないのでなんとも……
新たにKeyMapじゃない変数を定義した、ということでしょうか
>>118 2ストロークキーの開始と終了にSuspend, On・Suspend, Offを入れたら出来ました!
一から十まで本当にありがとうございます
Ctrl2連打を割り当ててるOrchisが呼び出されてしまいますがそちらはおいおい解決法を探っていくことにします
これ以上ここでお世話になっていたら教えて君を通り越してダメ人間になりそうですので……
みなさんレスくださいましてありがとうございました。もっと自力でやれるように頑張ります
プログラミングに一切ふれていない人がahkをいじり出すと
ところどころで詰まってしまうと思う
マニュアル目次 - 日本語プログラミング言語「なでしこ」
http://nadesi.com/doc/ まずこのあたりでプログラミング初歩の全体像をつかんだらいいかと
昔、ひまわりに手を出して挫折したの思い出した…
日本語プログラミングって逆に分かりにくくね?
なんか超怪しいプロセスがーとおもったらspy立ち上げっぱなしだった。
もうちょっと名前何とかしてくれよw
>>122 AU3_Spy.exe を自分の好きな名前に変更すればOK
>>42 KeyMap:=!KeyMap
↑はKeyMapが1(真=True)なら0(偽=False)へ、0なら1へ入れ替えを行なっている(真偽を反転させている)。
これをIf文に置き換えると
If KeyMap = 1 ; = 1 を省いて If KeyMap だけでもOK
KeyMap = 0
Else
KeyMap = 1
もしくは
If KeyMap = 0 ; または If !KeyMap でもOK
KeyMap = 1
Else
KeyMap = 0
続く
If KeyMap
とした場合、KeyMap が「0」や「空の文字列」以外なら真(True)となる。
つまり、KeyMapに数値(例えば 100、-9999、0.01など)や文字列(例えば「あ」など)
が代入されていたら真(True)です。逆に
If !KeyMap
とした場合、「0」や「空の文字列」が真(True)となる。
なので0か1(真か偽、OnかOff)で分岐する場合は
If KeyMap = 1 や
If ( KeyMap = 0 && KeyMap = "" )
とするより、
If KeyMap や
If !KeyMap
と記述するだけで事足りる
キーマップを3つ以上用意するなら(1→2→3→1 と入れ替えるなら)
If KeyMap = 1
KeyMap = 2
Else If KeyMap = 2
KeyMap = 3
Else
KeyMap = 1
↑を三項演算子に置き換えると
KeyMap := KeyMap = 1 ? 2 : ( KeyMap = 2 ? 3 : 1 )
xboxコントローラーのキーリマップしているんですが上手くいきません。
Joy7::
GetKeyState, state2, Joy5
if state2 = D
WinActivate, ahk_class Shell_TrayWnd
return
だと、左上のボタン押している間にセレクトを押すと対象のウィンドウをアクティブにするというもので上手くいきました。
次に、左上と右上のボタン同時押ししている間にセレクト押すと別の対象のウィンドウをアクティブにするという意図で、
該当部分を
GetKeyState, state1, Joy5 & Joy6としたのですがエラーがでます。
ただしい記述を教えてください。
ぶしつけな質問で恐縮ですがよろしくおねがいします。
自分で試行錯誤してたら上手いことできたわ
Joy7::
GetKeyState, state1, Joy5
GetKeyState, state2, Joy6
if state2 = D
WinActivate, ahk_class Shell_TrayWnd
if state1 = D
if state2 = D
WinActivate, ahk_class Skyrim
return
&とかなんかでもうちょっと短縮できるんだろうな。
AutoHotkey v2.0-a030以降でWinGetListがちゃんと使えてる人いたら
その部分のサンプル見せていただけませんか?
2系は殆ど話題になってないんで、
使用感や互換性・試行錯誤したをつらつら書くだけでもありがたいかも。
同意
ジョイスティックのX軸0〜100をZ軸の0〜50に
Y軸をZ軸の51〜100に割り当てることって出来ますか?
2軸を1軸に合体させたいのですがこのソフトで出来るか教えて下さい。
ジョイスティックの置き換えは無理
・入力信号を殺せない
・別信号を出すことができない
ただ監視して特定の信号があったときに色々できるだけ
元の信号はスルーのみ
どうしてもやるなら、仮想ジョイスティック用意してそいつを操作することになる。
それでも元の信号は殺せない
>>131 ありがとうございます。
元の信号は殺せなくても構いません。
ゲームなどのソフト側で仮想ジョイの軸を割り当てればOKなので。
気になったのは「別信号を出すことができない」という部分です。
このソフトだけでは仮想ジョイに出力出来ないという事でしょうか?
Windows 7 で拡張子が .scr のプロセスが起動しているのを同定するには
どうしたら良いでしょうか。Process, Exist, .scr をタイマーで呼びだしてみましたが
これだけでは上手くいきませんでした。
136 :
133:2012/05/19(土) 09:16:50.23 ID:G3vmTF3w0
MouseGestureLで設定画面を出す動作割り当てはどうすればいいんでしょうか?
Run,%A_ScriptDir%\MG_Edit.ahk
または拡張スクリプト編集の中の
;----- ユーザー定義サブルーチン --------
^e::Gosub,MG_Edit
>>138 おお、実行ファイル指定するより軽く立ち上がった
ありがとうございます。
流行らせるページ跡地などを読みながら使ってます。
コピー Send,{Ctrl down}{Insert}{Ctrl up}
貼り付け Send,{Shift down}{Insert}{Shift up}
切り取り Send,{Shift down}{Delete}{Shift up}
これを使ってみたところ、コピーと貼り付けは、だいたいのアプリで使えるのですが、
切り取りが結構な割合で機能しないんです。
個人的にCtrl+C、Ctrl+X、Ctrl+V、が押しにくいので、無変換+任意のキーで使いたいのですが
上記のやり方以外にCtrl+C、Ctrl+X、Ctrl+Vを設定する方法などがありましたら教えてもらえないでしょうか。
>>140 ・setkeydelay で間隔を大きくしてみる。
・一行で記述せず、別々に分けて間にSleepを自分で入れる
Send,{ctrl down}
Sleep,50
Send{Delete down}
・blockinput, on → 対象ウィンドウをアクティブにする → Sendでキーを送る → blockijnput, Off
・Send,{ctrl down}{delete}{ctrl up} ではなく Send,{ctrl down}x{ctrl up} にしてみる。
途中で書き込んでしまった
・setkeydelay で間隔を大きくしてみる。
・一行で記述せず、別々に分けて間にSleepを自分で入れる、例えば
Send,{ctrl down}
Sleep,50
Send{Delete down}
Sleep,100
Send{Delete down}
Sleep,50
Send,{ctrl up}
・blockinput, on → 対象ウィンドウをアクティブにする → Sendでキーを送る → blockijnput, Off
・Send,{ctrl down}{delete}{ctrl up} ではなく Send,{ctrl down}x{ctrl up} にしてみる。
>>142 試させて頂きました。
sleepのほうはファイラでフォーカスが移ってしまう場合がありましたが
Send,{ctrl down}x{ctrl up}はエディタでもうまくいきました。
丁寧にアドバイスして頂きまして、ありがとうございまいした。
今回のケースは関係ないかもしれないけど
SendInput や SendPlay に変更しただけで
全然動かなかったものが、あっさり動くときもあるので覚えておくといいよ
Send(デフォがSendEvent)で普通に動いても、別モードで違いでスムーズさが変わったりすることもあるんで
どうも動作がぎこちないなーってときにも変えてみるといい
そういうのを考慮すると、#IfWin〜 #If 〜 で
窓変化に対応して SendMode 切り替えるオプション欲しいなと思ったりする
SendInput〜とか書けばいいんだけど、面倒
Process,WaitClose って上手いこと効かないね。
Guiを表示した時にあらかじめGui,Add,Editの欄に
変数を入力させておくにはどうすれば良いでしょうか?
設定をGuiで行えるように奮闘してるんだけど
表示させる度に設定した数値が0に戻ってしまう
これじゃ、使い勝手が悪すぎる。
; (1) 初期化時に設定
Gui, Add, Edit, vEdit1, Hoge Hoge
Gui, Show
; (2) 初期後に何らかのイベントで設定
Gui, Add, Edit, vEdit1 w200
Gui, Add, Button,, Change
Gui, Show
Exit
ButtonChange:
GuiControl,, Edit1, Fuga Fuga
Return
>>148 次の行に Gui,Add,UpDown をつけていたのが原因のようです。
教えて頂いたやり方で、いろいろ試してみたらできました。
ありがとうございます。
Process,WaitClose効かないなぁといろいろ試してみて、
一番最初の行に書いてみたら上手くいった。
なんでだろう?
エスパーしてみる
そのコマンドにたどり着く前に、どこかで「待ち」が発生して
処理がとまってるのではないだろうか。
154 :
152:2012/05/23(水) 03:46:15.14 ID:8+R9Q+6K0
よくわからんなりに考えてみたんだけど、return と書かれている行より前だとProcess,WaitCloseを認識して後だと認識してない様子。
想定通りに動いてるのはこんな感じの.ahkなんだが
Process,WaitClose,AGE.exe
ExitApp
#SingleInstance, Force
#Persistent
#InstallKeybdHook
#UseHook, On
<^$vk1D::Suspend, Toggle
return
Pause::
ExitApp
#IfWinActive ahk_class ARCGameEngine
Esc::
WinKill,A
WheelDown::Send, {LButton}
~RButton & LButton::Send, !{Enter}
#IfWinActive
Esc::
WinKill, ahk_class ARCGameEngine
^!Up::
WinActivate, ahk_class ARCGameEngine
return
^!Down::
WinActivate, ahk_class Shell_TrayWnd
return で、
<^$vk1D::Suspend, Toggle
return
の下に持ってくると動かないからreturnが原因?
更にreturnがなんなのかわかってない悪寒
こんなのに振り回された連中が哀れ
別に誰も振り回されてはいないだろ
あるあるネタだろうとは思ったがコード貼るまでスルーしてたし
Windows7で一時間アイドルが続くとPCを休止状態にするスクリプト使ってます。
スクリプトから休止状態になったPCを復帰させ、そのままキーボードやマウスにふれないでいると、一分たたないかくらいで、また休止状態に移行してしまいます。
最後にExitAppを入れてタイマースクリプトを停止させているんですが、
それでもアイドルのタイマーがとまらないようで、復帰後マウスかキーボードにふれないとすぐに休止状態になってしまいます。
休止状態から復帰させたら、一度アイドル時間のカウントをとめて休止状態に移行しないようにすることってできないでしょうか?
使っているスクリプトはこれです。
#Persistent
SetTimer,OnTimer,1000
return
OnTimer:
If A_TimeIdlePhysical <3600000
{
return
}
else
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
ExitApp
exitappにたどり着く前に休止してるからじゃね?
サスペンドする前に、settimer,OnTimer,Off 入れたらどうなるかやってみて
シフトロック機能つけると
大文字入力、範囲選択の時そこそこ便利だな
開いてるショートカットにぶっこんでおくと良い
>>160 これでやってみましたがうまくいきました。ありがとうございました。
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
settimer,OnTimer,Off
ExitApp
今まで使っていたsettimer off無しのスクリプトでもタスクマネージャーで確認するとそのタイマースクリプトは停止されていたんですが、
どうして休止状態になってしまってたんでしょうかね?タイマーがひそかに動き続けてたってことでしょうか。
いやつうか
else
{
settimer,OnTimer,Off
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
ExitApp
}
のほうが良くね?動いてるんならいいけど
dllcallの中で休止処理してるから戻ってくる前にマシンが眠っちゃってるじゃないかと思うんだが
デスクトップの壁紙とデスクトップアイコンの間に
画像(GUIウィンドウ)表示ってできないでしょうか
WinSet,Bottom だとデスクトップアイコンの上に来てしまってダメでした
>>163 そうですね。そっちにしときます。
どうもです。
>>164 背景画像変更するのと変わらんような気がするが
頻繁に変わらないなら画像加工して、COM叩けばいいし
ユニコード版とANSI版でメッセージの番号が違うようですが、
相互に番号変換できるのでしょうか?
また、両方の番号が載っているサイトやツールはないでしょうか?
歴史的経緯で番号体系には意味無さそうだし
変換テーブル用意するしかないね
番号の定数はVisual-C とか MINGW とかのヘッダファイルに定義がある
>>166 デスクトップより小さい画像も表示させたいので、
できれば背景画像(?壁紙)は変更したくないんですが
やっぱ変更する系の方法しかないですかね?
壁紙を変えるとしたらDllCall()でSystemParametersInfo関数使う方法しか知らなくて
それだとBMPしか使えないし…、
>頻繁に変わらないなら画像加工して、COM叩けばいいし
ちなみにこちらの方法だと、どういう作業になるんでしょうか
壁紙と別の画像を合成して表示とか?
>>168 そのヘッダファイルに定義はどうすれば見るようになるのですか???
foo、bar、bazとtitleの異なる複数のウィンドウが起動するアプリを#IfWinActiveでclass指定しているのですが、
fooだけを除外したい場合はどう書けばよいのでしょうか?
;Minimize Window
か
WinMinimize で普通のウィンドウは大抵最小化するんだけど、
Terapadとか一部のアプリとかは最小化せずに
タイトルバーを縮小化した状態になってタスクバーに最小化で格納されないんだがどうすればいいかな
>>173 二度手間になってしまってすみません 主にAviutlです
プラグインごとに窓があり、ahk_classはAviUtlで共通ですがtitleはプラグイン名なので全てバラバラです
表示できる窓は数十枚に及ぶので、除外したくないタイトルを指定するのは厳しい気がします
とりあえずチャプター編集だけ除外にしたいのですが、どう指定すればよいでしょうか?よろしくお願いします
#If WinActive("ahk_class AviUtl") and !WinActive("チャプター編集")
>>173 後者の方で無事できました、ありがとうございます。
前者は、紹介されたページの該当部分をコピペしたところ
missing close quoteのエラーがでて反映されませんでした。
EpgDataCap_BonのEpgTimer.exeのコマンドIDを調べたいです。
窓コンやResource Hackerで調べたのですがわからなかったです。
ソースは付いています。
調べる方法ありますか?
なんか無限ループに入ってたり突然終わってしまうスクリプトがあるんだけど、
検証のために各行ごとにここまでは動作したってのをファイルに書き出したいんだけどいい方法ない?
ダンプコマンドとか無いのか探したんだけど見当たらないもんで。
outputdebugじゃだめなのかい?
デバッガ使ってブレイクポイント設置してステップ実行すりゃいい
Win+TabをF10に設定する方法を教えて頂けないでしょうか
#Tab::Send,{F10}
>>183 ごめんなさい逆でした・・F10を押すとWin+Tabです
そのままの意味なら
send,#{Tab}
でも、意図がよくわからん
F10を押している間にWin+Tabを連打してほいなら↓のようにする
F10::
send,{lwin down}{Tab}
SetTimer, Tabrenda, 350
keywait, F10
SetTimer, Tabrenda, off
send,{lwin Up}
return
Tabrenda:
Send,{Tab}
Return
>>1のリンク先を参考に自分の好きなようにいじるといいよ
>>185 ありがとうございます!連打のほうでばっちりです
クリップボードを使わず、選択範囲(青くなっているところ)を取得する方法ないですか?
ControlGetの Choice、List,Selected、Selected あたり
スマホの音声認識が結構正確でおもしろいんだけど
音声認識とAHKと組み合わせれば結構簡単にPCでも同じように声で操作できるんじゃないかなと思うんだけど
PCで使えるフリーの音声認識のDLLとか無いのかな?
「メモ帳」でメモ帳を起動して
「閉じる」で ALT+F4を送って
「検索」→「検索ワード」でGoogle検索とかその程度の事で良いんだけど
ソフトではもう普通にありそうな気もするけど
スクリプトならいろんな融通の利く活用ができそうな気がするから
可能なら誰かできる人おねがいしたいです
音声認識ならSAPIから出来るんじゃねーの?
ホットキーを割り当てた結果、WinキーやCtrlキーを押しながらバシバシ操作する事が増えたんですが、
そうするとユーザー補助の固定キー機能が有効になってしまって暴発することが多くなってしまいました
どうやってもユーザー補助を無効にすることもできず、困っています
この問題を回避する方法は何かないでしょうか?
それはスレ違いじゃね?
>>どうやってもユーザー補助を無効にすることもできず
んなこたねーよバカ
Windows 7 なら
コントロール パネル\すべてのコントロール パネル項目\コンピューターの簡単操作センター\固定キー機能をセットアップします
書き忘れていました、XPのユーザー補助です。sethc.exeをアクセス禁止にしても無理でした
そんなにレアなケースではないかと思いましたが、AutoHotkeyを運用する上で
修飾キーを押しっぱなしにするような割り当て方は根本的に間違っているんですね
使い方を改めます。失礼しました
xp 固定キー でググる
>>195 XPでも7同様のコントロールパネルから設定できるよ。自分もXPでもそうしてたし。
もっとよく探せクソが。
口悪いなw
ショートカットキーを無効にして無いんじゃね
外さなきゃいけないチェックは一つじゃないよ
タダのツンデレです
ああそうか・・・修行が足りないな
>>197 伝わってないようですが、
>>195のsethc.exeとはユーザー補助のオプションの事です
それはそうと割り当てをやめたら症状が出なくなったので少し実験をしてみたところ、
原因が特定できました
#a::
BlockInput, On
Sleep, 100
BlockInput, Off
return
こんな感じでBlockInputとSleepを併用してるものを修飾キーを使ったホットキーに割り当て、
それを3秒以上押下すると固定キーがオフからオンになってしまうようです
(BlockInputのみやSleepのみだと変化無し。ちなみに固定キーを解除するにはWinキーを2回押す)
バグなのか仕様なのかよくわかりませんが、ご報告まで
ユーザ補助の当該機能は機能をオフにできるし、皆そうしろと言ってるのが分からんのか
「オフからオンになってしまう」とはっきり書いたつもりですが、
どうも文意が伝わらないようですね
忘れてください
まぁそう言うならもう忘れるよ
ゆとりって表現能力低いからまともにコミュできんのな
書かれた文を見落とすのはさすがに文盲としか言いようがない
解決するしないはおいといて、質問者側に謙虚さがあれば協力してくれる人が多いんじゃなかろうか。
的はずれなレスだったにせよ、協力しようと思ってレスしてくれた方へのお礼の一言もなく、
逆にぷぎゃーするのはいただけない。
208 :
189:2012/05/31(木) 06:38:53.29 ID:V43s8X0P0
>>190 >>191 SAPIって音声合成だけかと思ってました
でもやっぱりあんまり精度はよくないみたいですね
弄ってみます、ありがとうございました
文章読まねえ奴をぷぎゃーするなはさすがに…
かなり我慢強く丁寧にレスしてたと思うよ
>>209 丁寧なレスをしているからこそ各々のレスに対してお礼の一言すらないのが気になったんです。
あと、謙虚さとは書きましたが、我慢すればいいと書いた覚えはありません。
以後、Romります。
スレ違いなレスをして申し訳ありませんでした。
>>211 全員で間違った答えしか出して無いのに何をお礼しろとw
固定状態のオンオフと
固定状態のオンオフの切り替えがshift連打でできる機能自体のオンオフが
混同されてるように見えるんだよね
指摘するまえに質問者がもういいって言い出したから指摘するの止めたけど
ほじくり返そうとしてるみたいだから言っておくけど
頑張ってはいたが意図が伝わってない感はあったな
ただまあ、正しくなかったにせよ親身になってレスしてたならお礼も言うだろうけど
回答者側が全員頭から質問者側のチョンボだと思い込んで
それ以外の回答を完全切り捨ててたからな
終始罵倒状態でトンチンカンレスを繰り返されたあげくお礼まで言わさせられるのは気の毒だ
終始罵倒?回答者がツンデレなだけじゃないかと。
質問者がそれを気に食わないからもういいですって流れになった感じがするんだけど。
>>214 むしろ回答は一応正しかったと思う
ただ質問者が、shiftがロックされてるのは解除できるからこうすれば解除できるよって言われてると誤解してたように見えるのと、
(
>>203のレスですでに説明したって言っているのとそれ以前の状況説明からしてそのように考える)
その誤解に回答者が気づかなかったのか、スルーしてたように思う
AutoHotkeyは悪くないのにAutoHotkeyの問題だと決めてかかり、
回答は正しいのに質問が理解されていないと決めてかかる。
こんなやつは一生Windowsの固定キー機能に悩まされてればいい。
めんどくせえ、基地外だとわかった時点でスルーしろよ
だって質問者が勘違いしたまま自己擁護に舞い戻ってるんだもの
あんなアホな勘違いしてるのは本人ぐらいだからバレバレだよ
ただの自治厨なんだが自演認定されちったか
ツンデレもあんま回数重ねるとただの罵倒に見えますよって言いたかったんだが
質問者の説明が上手くなかったのはまあ事実だな
自分もどっちが勘違いしてるのかわかんなかったし
AutoHotkeyは悪くないって断言してるのはBlockInputとSleepでoffがonになるって話に
再現性がないのを確認したってことか?
みんなしてダラダラ引っ張ってんのはそこが気になってるからじゃねえの
いやいやいや、ちゃんと答えてただろ
勘違いしてるのは質問者
AHKは全く関係ない話
正しい回答に対しておかしなレスしてたから、面倒になりそうだなーっておもって眺めてたけど
やっぱりスルーが正しかったみたいだな
>>185 これの連打じゃなくて例えばAlt+XでX押す毎にスクロールして
Alt離すと決定みたいなのってできますか?
>>223 できるけど、先ずは自分で試して失敗したスクリプトを書き込んでみては?
人を利用することしか頭にない
MButton & WheelUp::を使うと他のアプリで中クリックが使えなくなってしまうのは仕方ないんでしょうか
~MButton & WheelUp::
たとえばあるコマンドを実行中に他の特定のキーを押せなくする、みたいなことってきないでしょうか?
Space::
send,space}
#IfWinActive
途中で書き込んでしまいました。すいません。
いま使ってるコマンドがこれで
Space::send,+{space}
これを実行中にはFキーを押せなくしたいんです。
>>228-229 テキストエディタ上ではこれでそれっぽく動くかもしれないけど、他アプリでは動かない可能性がある。
質問するときに具体的な環境やアプリ等を書かないと様々な環境を想定しないといけないから面倒くさくてレスつかないよ。
$space::
Hotkey,*f,f_Disable,on
Hotkey,*f up,f_Disable,on
send,{shift down}{space down}
while getkeystate("space","P")
sleep,20
send,{space up}{shift up}
Hotkey,*f,f_Disable,off
Hotkey,*f up,f_Disable,off
return
f_Disable:
return
>>230 説明不足ですいません。
フォトショップで頻繁に使うショートカットが+space(手のひらツールに切り替え)なんですが、これを押した状態で誤ってfキーを押してしまうと
+fの組み合わせでキーが押されてしまうのでそれをなんとかしたかったのです。
試してみましたが、問題なく動きました。ありがとうございました。
非アクティブウィンドウの座標を取得する方法ってないでしょうか?
いまウィンドウのタイトルバー部分をミドルクリックして動かす下記のスクリプトを使っていますが、
if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0)
の部分を、非アクティブウィンドウのタイトルバー部分をミドルクリックしているときに残りのコマンドを実行する、という形にしたいのです。
今のままだと、一度マウスポインター下にある非アクティブウィンドウを左クリックしてアクティブ化しなくてはいけない状態なので
WinActivate, ahk_id %WindowUnderMouseID%が無意味になってしまっています。
Mbutton::
CoordMode, Mouse, Window
MouseGetPos, ClickX, ClickY, WindowUnderMouseID
WinGetPos, x, y, w, h, ahk_id %WindowUnderMouseID%
if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0)
{
WinActivate, ahk_id %WindowUnderMouseID%
tooltip test
}
return
>>232 やりたいのはこういうことかな?
Mbutton::
CoordMode, Mouse, Screen
MouseGetPos, ClickX, ClickY, WindowUnderMouseID
WinGetPos, x, y, w, h, ahk_id %WindowUnderMouseID%
if ( ClickX > x and ClickX < x + w and ClickY > y and ClickY < y + 24) {
WinActivate, ahk_id %WindowUnderMouseID%
tooltip test
}
return
関数などが分かるなら、Mousegesture.ahk から MG_HitTest関数とMG_GetMousePosInfo関数を
自分のスクリプトにコピペして
If MG_HitTest()="Caption" ; マウスカーソルがタイトルバー上にあるか否かで分岐させる
過去ログから
CoordMode,Mouse,Screen
MouseGetPos, x, y, h, c,
if (2 = DllCall("SendMessage",UInt,h,UInt,0x0084,UInt,0,UInt,x | y <<16,UInt) )
tooltip,test
return
「テキストファイルから1行ずつ引数をもらって実行して、実行した行はもう実行しないようにする」って可能でしょうか?
FileReadLine に+1ずつしていくやり方だと、ahkスクリプトを実行する度に1行目からやり直しになってしまうので
引数をもらった行は削除とか出来ればいいのですが
読んだら消すか空にすりゃいいんじゃねーの
ちゃんとやるなら排他モード利用して
>>236 すみません、実行中も他のProgramから、テキストが逐次追記されていくので、排他モードは無理です
FileReadLineで返ってくるのが空だったら、消すように分岐するってことですよね
そうすると追記とバッティングしちゃうかなと思うので、やはり行ごとに何かアクション出来ればいいのですが
>>235 非常駐型なら処理行数をIniファイルに書き出して(IniWrite)
スクリプト実行時にIniファイルから読み込ませる(IniRead)とかは?
>>238 なるほど、変数を共有させたい場合はiniファイルを使うんですね
勉強になりました、ありがとうございます
ahkからテキストの編集っていうのは考えない方がいいのですね
基点がA_WorkingDirの相対パスから、絶対パスに変換する簡単な方法ありますか?
A_WorkingDirがC:\www/xxx
相対パスが../../yyy/aaa.exe
を
C:\yyy\aaa.exe
って変換させたいです。
>>235 追記に使ってるソフトにもよるけど、こんな感じで書き込めるなら。
[引数1]
A=B
[引数2]
A=B
をiniに書き込む。
テキストファイルとして1行目を読み込んで[]を削除し、引数1を渡す。
そしてinideleateで[変数1]セクションを削除。
繰り返し。
でどないや。
>>240 shlwapi.dll の関数使えばいいじゃないかな
意味分からんなら別レス待つよろし
ちなみにエラーは
Run,%Fullpath
というところみたいでした。
い、いまから調べてみます!
うーん
Run,%Fullpath
Run,%Fullpath%
Run,% Fullpath
この動作の違いはわかりますか?
それと、動作を確認するならrunをtooltipに書き換えるといいかも。
>>243 最近のはフルパスを取れるコマンドがあるから、関数の代わりにそっちを使うといいよ
;リスタート部分だけ
WinGet, pid, PID, A
WinGet, FullPath, ProcessPath, A
WinClose, A
Process, WaitClose,% pid
Run,% FullPath
突然の話題ですいません。
AutoHotkeyを流行らせるアップローダ跡地に発表してある
タスクバー上でホイールを回転するとタスクを切り替えるスクリプト115.zipを
AutoHotkeyのフォーラムで紹介させていただきました。
また,このスクリプトを次バージョンのMouseGestureL.ahkの中でも
設定例として掲載したいと考えております。
出典は明らかにして掲載しますが,作者の方の連絡先が分かりません。
この記事を読まれて問題等ございましたら,ご指摘ください。
Shirubadappuru
MouseGestureLで、たとえばブラウザのジェスチャとMouseGestureLで
設定したジェスチャ両方を有効にすることってできる
失礼
両方を有効にすることってできるやり方ある?
ブラウザの方で使いたいジェスチャにMG_Abort()を割り当てる
MouseGestureLに一本化するんじゃだめなの?
俺はJaneやFirefoxにホットキーを設定してMouseGestureLからホットキーを送る方法で使ってるけど
>>250 いけました
でも右クリック↑だったら、RB_U じゃないとだめで RB_U_ だったら上手くいかないね
これが他のアプリで微妙に違和感
>>251 はじめはそれ考えたんだけど、ファイラでドラッグがうまくいかなかったり
自己完結できるほうが誤動作とかないからいいかなと思って
二人ともサンクスです
参考にしてもうちょい試してみる
右クリックのジェスチャをブラウザのものにして
第四以降のボタンのジェスチャをMousegesture.ahkで行うという手もある
テキストを改行させて表示させたいんですがどうやったらいいですか?
^1::
s = a\r\nb
MsgBox %s%
return
これだと「a\r\nb」と表示されてしまいます。
a
b
と表示したいのですが。
Guiでコントロールごとに色を変えることはできますか。
Gui,Colorで色を変えるとそのGui上のすべてのコントロールの色が変わってしまいます。
このボタンは赤で、となりのラベルの背景色は緑で、…と言ったことは無理なのでしょうか。
アクティブなウィンドウを非表示にして、非表示にしたウィンドウの一覧を表示って、どう書きますか?
流行らせるページの「タスクトレイに最小化」が、ahkLだと上手く動かないことが多いので、似たスクリプトをとりあえず作りたいです
こちらif文とloop文が分かる程度のものですが
元ネタのスクリプトを理解して修正する方がずっと早いと思うが
>>258 ありがとうございます。難しそうだけどやってみます。
開いているタスクの一覧を表示して左クリックしたらプロセスをkillするにはどうすればいいですか?
AutoHotkey_L用の「タスクトレイに最小化」って需要あるだろうから探せばどっかにあるのかと思ってたけどやっぱ無いの?
過去ログ見て文字化けは直したけど、最小化後しばらく放置して元に戻そうとすると落ちるという現象は相変わらず
修正版あるなら誰か恵んで
「敷居が高い」を「ハードルが高い」のような意味で使うのは本来、誤用なんだぜ
敷居が高い(しきいがたかい)… 相手に不義理をしたり、また、面目がない
ことがあったりして、その人の家に行き難くなる。また、その人に会い難い状態。
↓以下、江戸時代あたりの誤用から始まってすっかり定着した言葉うんたらかんたら
しょぼい質問ですみません
#X::WinMinimize,A で最小化を実行するとデスクトップの左下にバーだけの小さいのが残ってしまうんですが
最小化ボタンを押した時のようにタスクバーに入れるにはどのようにすればいいのでしょうか?
>>268 PostMessage, 0x112, 0xF020,,, A, ; 0x112 = WM_SYSCOMMAND, 0xF020 = SC_MINIMIZE
>>269 遅くなってすみません。ありがとうございました
271 :
名無しさん@お腹いっぱい。:2012/06/23(土) 15:34:07.76 ID:4/n2S9UX0
autohotkey_lを使っています
クリップボードに入っている画像をいったん別のところにおいて
cilpboard:="test"
のようにして更新したクリップボードの中身を貼り付けできるようにし、
処理が終わったら元の画像をクリップボードに格納するということはできますか?
>>271 ClipSaved := ClipboardAll
で退避しておいて、処理が終わったら
Clipboard := ClipSaved
で戻す
273 :
名無しさん@お腹いっぱい。:2012/06/24(日) 19:52:55.93 ID:T5LAAjhk0
autohotkey_Lのドキュメント読んでて、menuのラベル指定に関数内ラベルが使えるってこと初めて知ったんだけど
これ昔からできたの?
うん割りと前から
関数内ラベルって?
windows7に乗り換えたんだけど
ウィンドウズキー使ってるホットキーが動作しない
わかる方いませんか
UACは無効、バージョンは最新でした
他の設定は動作してます
>>276 動かないときはまずコードを晒す、これ基本
OSのせいだと思ってるようだけど実際どうだか分からんし
Win+Lはトラップできなくなったよ
すみません
ソースです
#h::left ;Win+Hに←キーを割り当て
#j::down ;Win+Jに↓キーを割り当て
#k::up ;Win+Kに↑キーを割り当て
#l::right ;Win+Lに→キーを割り当て
>>279 それ、文法的に意味成してないんじゃないか?
#h::Send, {Left}
これで試してみて
ローカルのpage.htmlをAHKのGUI内にレンダリングすることってできませんよね?
Lなら標準機能で出来るんじゃね
コンパイルができない
AHK_Lでコンパイルなしでは問題なく動く状態
ソースは1000行超えしてるので端折ります
UTF-8で書いてるけど、コンパイルすると甚だしく文字化けしてたり、
foo("テキスト", "aaa")
みたいな関数で、「"aaa"" は変数じゃないよ!」とか言われるから
文字化けが全ての根本的な問題?
これってどういう原因が考えられるのかな
>>283 ASCII部分が互換性のある文字コード同士でも
文字コードを間違えると隣のASCII文字を巻き込むことはあるから日本語がおかしくなるだけじゃすまないことはありえるのではないかと
>>284 ありがとう。書いてすぐだけど自己解決してしまった。
文字コードをUTF-8にしてたつもりだけど、UTF-8(BOMなし)だった
全てのahkファイルをUTF-8(BOMあり)に変換したら問題なくコンパイルできた
Web系だとBOMなしの方がよく使うからつい思い込んでしまっていたよ
質問です。
1::
MouseGetPos, prevX, PrevY
MouseClick, left, 0, 1200, 1, 0
MouseMove, prevX, prevY, 0
return
のように、1を押すと画面端をクリックして元のマウスカーソル位置に戻るものです。
ですがマウスを激しく動かして居る途中に1を押すと画面端をクリックした位置のまま
戻って来ないのですが、別の書式または何か解決策などありませんでしょうか?
win7-64でv1.0.48.05.L61を使っています。
waitを入れてみたら?
>>286 単純に考えると
BlockInput, MouseMove/MouseMoveOff
を使ってユーザ操作をブロックすればいい。
解除コマンド忘れるとえらいことになってパニクるので
コマンドリファレンスを熟読してからやること
面倒に考えると、
画面上の特定位置がツールバーのボタンだとしたら
キーを送ったり、ウィンドウメッセージを発行することで、
アプリに機能呼び出しを通知する
機能呼び出しの見つけ方(と諦め方)はアプリによって様々なのでコツが必要
労力は前者>>>>後者だけど、後者の方がスマート。
ただし座標クリックでしか機能呼び出しができないなら、
前者がファイナルアンサーとなる
289 :
281:2012/06/29(金) 00:09:44.42 ID:sQxBPpZ50
>>282 AutoHotkeyJpをざっと眺めてみたのですが見当たりませんでした
どうか教えて頂けないでしょうか、お願いします
>>290 おお、こんな機能があったとは・・・ありがとうございます!
たまには本家も見ないと遅れてしまいますね
>>286 1::
KeyWait ;離されるまで待機
BlockInput, On ;全ての入力を無効化
Sleep, 100 ;Wクリックの暴発を防ぐ
MouseGetPos
MouseMove
MouseClick
KeyWait ;離されるまで待機(クリック系の直後に必ず入れておく)
Sleep ;Wクリックの暴発を防ぐ(クリック系の直後に必ず入れておく)
MouseMove ;元の位置に戻す
BlockInput, Off ; 全ての入力を有効化(忘れると何も出来なくなるが何かの同時押しで解除できたと思う多分)
return
これでマウスをガシガシ動かしつつボタンをカチカチしながら割り当てたキーをバシバシ連打しても平気になる
でもここまでやってもたまに誤爆する(お手上げ)
MouseClick→MouseClickDragの場合はスピードは2以上にしてないとよく空振りする
Autohotkeyにショートカットキーを設定して
マイクをミュートにすることってできませんか?
(スカイプのマイクミュートにdeleteやPauseを設定できない)
たしか昔「これじゃないかな?」と思って、設定した覚えがあるのですが
ちょっと試して無理だったのでそのまま止めてしまいました。
今度はそのやり方さえ忘れてしまいました。
マイクミュートってできますか?
デバイスはサウンドブラスターを使っています。win7です。
よろしければおしえてください
z:: ; プレイヤーを5秒分巻き戻す
Send,^+d ; 巻き戻し開始
Sleep,2500 ; しばし待つ
Send,^p ; 巻き戻し解除&再生開始
return
というスクリプトでzを三連打すると同時に実行されてしまうんですが
多重起動させずキューイングして計15秒分巻き戻すようにするオプションみたいの無いですか
>>294 Skypeなど特定のアプリがアクティブのときにやりたいならImageSearchでも
WinGetPos, , , width, height, A
ImageSearch, x, y, 0, 0, width, height, <Skypeのマイクミュート画像>.bmp
MouseClick, LEFT, x, y, 1, 0
>>295 こんな感じとかで
z::
if !(thereafterFlag) {
thereafterFlag := 1
startTime := A_TickCount
endTime := startTime + 2500
SetTimer, timeWatch, 100
Send, ^+d
return
}
endTime += 2500
return
timeWatch:
if (A_TickCount < endTime)
return
thereafterFlag =
SetTimer, timeWatch, Off
Send, ^p
return
ということで疑問に答えたので質問です
#Include で特定のディレクトリ以下のファイルを全てインクルードする方法はないのかな?
#ついたコマンドはまず最初に読み込まれるから、スクリプトの中からは制御出来ない
あえてスクリプトの中でやるなら、最初にフォルダの中のahkファイルを検索して、スクリプトの中に#includeを書き込んでから一度だけリロードみたいな
>>298 ありがと。やっぱりあらかじめahk記述を書き込んでリロードしかないかな
起動時にタスクトレイをオフにしておいてリロード後のタスクトレイをオンにすれば
リロードの気持ち悪さもある程度は防げるけど
#Includeで単一ファイルじゃなくてディレクトリも指定できたらよかったんだけどな
ディレクトリ内のファイルを#includeでズラズラと書きだすだけのスクリプト書けば?
それならスクリプト側では単一ファイルインクルードするだけだし
更新するのは#includeだけを記述したこのファイルだけで済む
ってか、#includeで読み込んだファイル内の#includeって読めないんだっけ?
読んでくれないならごめん
#Include先のahkファイルに書いてある#Includeも読めるよ
けど、その#Includeをまとめて書いてあるahkファイルを読み込むには、やっぱり結局は全体をリロードするしかない
ディレクトリチェック用ahkスクリプトと本来ahkスクリプトを分離するっていう方法もなくはないけど
1.本体と独立したクッションahkスクリプトで先に#Include専用ahkファイルを作成
2.クッションahkから本体ahkをRunして、クッションahkを終了させる
3.すでに#Include専用ahkファイルが作成されているため、リロードなしにそのまま読み込める
けど結局は2度のプロセスを実行させることになってリロードするのと大差ない感じ
面倒な二段構えよりファイル追加する毎に編集した方が早いとおもうけどな
includeの順序で挙動変わる場合はファイル名工夫したりせにゃならんし
個人的には関数やクラスにしてstaticで初期化処理書くのが楽かな
その際は #Include <ライブラリ名> でやる
変数aが空の値だったら、0とか1とか(とりあえず小さい数)を複数の変数へ代入ってどうやりますか?
a+=0 , b+=0 , c+=0 , d+=0 , e+=0
という書き方だと上手く行かなかったです
a+=0
b+=0
...........
という感じに書いてますが、変数が多いと長くなってしまうので、
出来れば数行で書きたいのですが
それは加算代入(+=)な。代入は(:=)
まとめて書く場合はこう
a := b := c := d := e := 1
>>305 おお、「,」つかわなくてもこんな書き方があるのですね
変数が空かの判定が不用なので、0を加算してみたのですが、一行で代入出来るならif文と組み合わせて使わせてもらいます
画面描画とかはできるのかな?探してみたけど分からなかった
前面に線を表示させるような感じ
画面に格子上に線をUIとして入れてみたいんだ
どなたか教えて下さいませ
>>307 線を入れるだけなら、gui使ってこんな感じでは(colに好きな線の色を)
#Persistent
col=101010
Gui,Color,%col%,
Gui,+LastFound +0x02000000 -0x0CC00000 -Border +ToolWindow +AlwaysOnTop
s_width := A_ScreenWidth
s_height := A_ScreenHeight
hs_height := A_ScreenHeight //2
Gui,Show,y%hs_height% x0 H1 W%s_width%
格子状にしたいなら、ループ分を使うと楽かもです
例えば横線ならGui,Show〜の部分を以下に置き換えで(線の間隔をgridで指定してください)
grid=100
loop % A_ScreenHeight // grid
{
Gui %A_index%:Color,%col%,
Gui %A_index%:+LastFound +0x02000000 -0x0CC00000 -Border +ToolWindow +AlwaysOnTop
grid += 100
Gui %A_index%:Show,y%grid% x0 H1 W%s_width%
}
>>304 こう書けば1行で書けなくもない。
a:=a ? a : 0 , b:= b ? b : 0 , c:= c ? c : 0 ,
a+=0って正確にはa:= a + 0 って計算だから、変数が空だとエラーになる。
1行の式なら補完してくれるんだけど。
>>309 定数のBIT-OR(要は合計)なんでばらして考える
>>304 += は第二引数を取るんで(日付の単位とか)、
カンマ区切りだと、不明な単位が指定されてエラーで空白になる
てなわけで += -= *= /= に関してはカンマ区切りで並べるとうまく動かない
その他の式はカンマ区切りでガンガン書けるんで、
どうして一行にしたいんなら関数にすりゃいいかと
a =
b = 100
Func(a),Func(b)
MsgBox, % a "`n" b
Func(ByRef var) {
If var is not Number
var = 0
}
312 :
304:2012/07/03(火) 07:19:19.89 ID:kbeJs+9X0
どちらも動きました!
>>310 おお、完全に一行で書けますね
これは凄い
?は難しくてあまり使ってなかったのでこれを機会に使わせてもらいます
>>311 なるほど、「,」とは相性悪いんですね
勉強になりました
Functionもさっぱりしてていいですね
>>308 16進数の数を32桁の2進数に直したのが元の数字なので、
32個のスイッチを持ってて、
>>311さんの仰るとおり
1つ1つのスイッチを合計した値です
ただこれ面倒なので、他のウィンドウのスタイルを調べてコピペでいいんじゃないかなと
>>311 >>312 合計した値だと思って
0x02000000 → 0x02000000
0x0CC00000 → 0x04000000 + 0x08000000 + 0x00400000 + 0x00800000
という意味だと考えていました
けれどそれでも、0x02000000と0x04000000がウィンドウスタイルにないように見えるため
うーんとなってしまっていたりします
何か盛大に勘違いしてしまっているかものかもしれません
変な思い込みを指摘してもらえるとうれしいです
WS_CLIPCHILDREN と WS_CLIPSIBLINGSだな
forced for GUI window WS_CLIPSIBLINGSってなってるのが関係あるんかな
確か流行らせるページ管理人さんの虫眼鏡スクリプトでも同じ指定されてた
そのスクリプトを改造してる時にこれいらなくね?思った
ソース見てみたらこんなん書いてあった
// The styles DS_CENTER and DS_3DLOOK appear to be ineffectual in this case.
// Also note that WS_CLIPSIBLINGS winds up on the window even if unspecified, which is a strong hint
// that it should always be used for top level windows across all OSes. Usenet posts confirm this.
// Also, it seems safer to have WS_POPUP under a vague feeling that it seems to apply to dialog
// style windows such as this one, and the fact that it also allows the window's caption to be
// removed, which implies that POPUP windows are more flexible than OVERLAPPED windows.
, mStyle(WS_POPUP|WS_CLIPSIBLINGS|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX) // WS_CLIPCHILDREN (doesn't seem helpful currently)
>>311 そうなん?
例えばカンマ使わないこういう書き方でも、変数が空だと空のまま。
foo = (a+=0) * (b+=0) * (c+=0)
逆にカンマ入った加算代入式でも、変数に数値が入ってれば処理してくれるから、カンマはあんま関係ないんでない。
>>315 ああ、これがAHKの機能だと思ってるのかな。
スタイルはOS側の機能で、プログラミングで使うためのものだから、AHKのテキスト調べても詳しくはない。
ネットやプログラムのスレで調べたほうがいい。
1::
send,{1}
hotkey,1,off
return
1 up:: hotkey,1,on
例えば↑のような感じに
ボタン押しっぱでも連続入力しないように定義してて
これだけなら問題ないんだが、コレ以降の行に
#ifwin〜〜系のコマンドを入れると 「1」を押した時にエラーが起こる。
理由が分からんです。
どなたか対処法を教えてください。
>>316 なるほど、スタイル指定はOS側のでしたか
思い込みを綺麗に突いてくださってありがたい限りです
すっかり納得。
>>318 こっちの環境では問題なく動作してしまいました
そのホットキーの記述ではなくて、#If以下にミスはないのかな
エラー文を記述したら誰かがいいアドバイスくれるかもです
320 :
317:2012/07/03(火) 23:21:12.46 ID:5xs67ex/0
>>319 #If以下に何も記述しなくても、#Ifがあるだけで
『 nonexistent hotkey variant (ifwin)』のエラーが出てしまいます。
他の環境で正常に動いてるなら理由はなんだろ?
自分はwin7-64 AutoHotkey_L v1.1.07.03です。
とりあえず、こんな感じで自己解決しました
1::
if (!aaa){
aaa := 1
send,1
}
return
1 up:: aaa := 0
>>320 原因分かりました
そのホットキーが、#IfWinActive, ... 〜 #IfWinActive
で囲まれているんじゃないかな?
Hotkey, キー名, Off
みたいにHotkeyコマンドでホットキーラベルをオンオフしたりするとき、
もちろんすでに対象のホットキーラベルが存在しなきゃいけない
けれど、#If ... でホットキーラベルが囲んであると、Hotkeyでは探せない対象になる
それで、「存在しないよ!」ってエラーが出た
#If ... 系の中にホットキーラベルを記述していると
サブルーチンからホットキーラベルを探したり呼び出したりするときにはそれらは無視されるみたいです
#If (式) 使ってるのに Hotkey コマンド併用するのが、俺的には意味分からん
ON/OFF 自体「式」でするもんだと思うんだが
>>322 変更するキーを変数で指定したいときはHotkeyコマンド併用せざるを得ないと思う
324 :
名無しさん@お腹いっぱい。:2012/07/04(水) 21:51:47.03 ID:8qMJSjkq0
Numpadに再生ソフトの各キーを割り当ててるが よく使う一時停止とキャプチャソフト[fraps]
のスクリーンショットキーでしばらく作業してるとデスクトップのアイコンがドラッグ状態になって
explorer自体がおかしくなってしまうんだが 解決策は何かないか
OSは7 64bit 再生ソフトはどのソフトでも GOM PLAYERとか
スクリプト見ないと何とも言えないけど、ドラッグ状態になるって事は、左クリックor右クリックが常時押し下げ状態になってるんじゃないの
タスクトレイのAutohotkeyアイコンのメニューにあるEdit This Scriptを選んだ際に
terapadで開くようにする方法ってありますか?
レジストリ書き換えればいいんじゃないかな
多分ここにあるどっちか
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AutoHotkeyScript\Shell\Edit\Command
HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Edit\Command
>>326 327さんが言ってくれてるようにレジストリ変更でもあり
けれども個人的にはAHKスクリプトでエディタを呼び出すほうがおすすめ
Run, <エディタのパス> <AHKスクリプトのパス>
好きなホットキーで呼び出せて、わざわざタスクトレイ右クリックしてとか煩わしい動作もなくなる
何より、そもそもAHKなのだからホットキーを利用したほうがいいよね
特定のウィンドウがアクティブになったときに
特定の動作を自動実行させることってできるかな
SetTimerでずっと監視させておくことくらいしか思いつかない
ずっとSetTimerを働かせておくのはどうも気持ち悪い気がしている
>>331 なるほどSetWInEventHookか
うまくいけたよ。参考になった。ありがとう
ifWinActive ahk_class
に反応させて別のahkファイルを読み込ませたいのですが、
どのようにすればいいでしょうか?
#Includeはスクリプト読み込み時に全て読み込まれるから
その#Includeに何らかの処理を絡ませることは無理
けれど、何らかの方法で対応できる場合もしばしば。
どのような状況でifで読み込ませるかどうか決めたいのか分からないけれど
#Includeでahkファイルをとりあえず読み込んで読み込み先のahkファイルでifやら絡ませて
実質的に読み込んでるかどうかを分岐させるという方法はいかが?
335 :
名無しさん@お腹いっぱい。:2012/07/07(土) 14:00:52.83 ID:4/lKoPV30
>>331の方法、昔やったときはプログラム起動時とかに取得できなかったのに
今やったらちゃんと取得できたわ
windowsのバージョン上がったからかな
AHK_LでCapsLockにctrl割り当てる方法がやっと出来た
持ち運びたいからレジストリいじるのもアレだしで無理やり作った
単打にしか対応してないから、Ctrl+aのあとに続けてCtrl+bは押せない
#if capskey=1
~*a::return
~*b::return
~*c::return
~*d::return
~*e::return
~*f::return
~*g::return
~*h::return
~*i::return
~*j::return
~*k::return
~*l::return
~*m::return
~*n::return
~*o::return
;〜(略
#if
sc03a::
capskey=1
send,{ctrl down}
while a_thishotkey = "sc03a" {
sleep,50
}
send,{ctrl up}
capskey=0
return
悪くはないけど、sleep, 50 のような処理はなるべく避けたほうがいいと思うの
あと、正直原因がよく分からないのだけど、こっちの環境ではうまく動作しなかった
記述としては間違っていないように見えるから、こっちのAHKスクリプトとどこかで干渉したからかもしれない
sleep, 50 のような監視は、ちょっと気持ち悪いだけじゃなくて実際に問題もちょっと起きるよ
例えば、テキストを入力していて、^s を送信してすぐにまた文章を入力する場合
sleep, 50 以内に次のキーを打ってしまうと、それに対してもCtrlを添加させてしまう
だから、次のキーが打たれたら強制的にCtrlをUpさせたほうがいいと思うよ
ついでに、Ctrl押し下げのキャンセルもできた方がいい
例えば、CapsLockをもう一度押し直すことでCtrl押し上げの挙動にしたりね
sc03A::
If (ctrlDown) {
ctrlDown =
} else {
ctrlDown := 1
}
return
#If ctrlDown
*a::
Send, {Blind}^a
ctrlDwon =
return
*b::
Send, {Blind}^b
ctrlDwon =
return
; ...
#If
#If の中の変数代入はミス
× ctrlDwon =
○ ctrlDown =
CapsLockの挙動は環境で割とまちまちだよ、たぶんBIOS依存とかあると思う
お手持ちのPCで動くものを使うのはいいが、出先で同じ動作を望むのは難しいんじゃね
CapsLockはAHKでは押し下げた瞬間のみ取得できる、ってのは環境による変化はないと思う
むしろそれ以外のパターンなんてあまりない気が
だからそれを想定して作っておけば、普通に同じ挙動をしてくれるはずだよ
たぶん他のスクリプトとキーフックが干渉したんだろう
キー番号が違うとかはないよな、多分
>340
うちの環境で前にKeyHistoryで確認した時は、押下げ、押上げの状態自体でたらめでだったよ
オルタネイトかモーメンタリかの問題以前に値が不定なので対処のしようがなかった
レジストリ変更しちゃってるから今は確認できないけど
うーんちょっとよく分からない
「CapsLockは押し下げ瞬間時のみ取得できる」っていうことが環境によって本当に違うの?
それ以外のパターンなんてない気がするのだけど
押し下げ押し下げの状態、なんてものがそもそもCapsLock(sc03a)には存在しない
「押し下げた瞬間」しか検知できない
押し上げが全く検知できないから、押し下げ押し下げ状態がでたらめに動作しているように誤認しただけなのでは
押し下げ押し下げって連呼しまったけど、押し下げ押し上げの間違い
>押し上げが全く検知できないから、押し下げ押し下げ状態がでたらめに動作しているように誤認しただけなのでは
ああ、そういえば確かにそうだったかも
ただ、押し上げが検知できない(押しっぱなしになる)から、
2回目以降の「押し下げた瞬間」の検知も上手く行ってなかった気がする
なるほどね
capslockをautohotkeyでどうにかctrlのように振る舞えないかと前に悩んだことがあったけど
そもそも論として無理だったのか
だからテンプレに載ってるのさ
一応、CapsLockで擬似的にCtrl-<key>を送信するならできるよ。一度だけね
上のスクリプトだと、CapsLockを押し下げた瞬間から、Ctrlがずっと押されっぱなしになっている
つまり、CapsLockが押し下げられているときにCtrlが押されている状態のような、本来の修飾キーの挙動になっていない
ただ実際には「CapsLockを押し下げている間だけCtrlをDownして、CapsLockを離したらCtrlをUpさせる」ことは本当は可能だよ
ただし単体入力だけ
CapsLock(Ctrl)を押し下げままaを押して次にbを押すといったように、CapsLockを押し下げたまま二度以上連続して入力することは無理
連続入力はできないけど単体入力ならできるから、それでもいいって人にならオッケーではある
上のスクリプトのCapsLock-Ctrlスワップ方法よりは利便性高いはずだけど、ニーズあるかは知らない
ThumbRemap の x64 化に成功している人がいるかもしれないと思い、質問いたします。
下記は ThumbRemap を Synaptics タッチパッド専用にしたスクリプトの一部です。
タッチパッドに触れると TouchPad 変数に 1 が返され、普段 は #If, TouchPad で
拾って動的にキーバインドを変更しています。
(下記スクリプトではタッチパッドに触れるとメッセージボックスが出ます)
これは AHK_L x86 を使用していれば Windows が x86 でも x64 でも正常動作する
のですが、AHK_L x64 では動作しません。これを AHK_L x64 で動かす方法は
あるでしょうか。のどか (窓使いの憂鬱の派生版) では Synaptics タッチパッド
コントロールの x64 化に成功しているのですが、ソースコードを読んでもイマイチ
理解できませんでした…。
350 :
349:2012/07/09(月) 15:21:55.75 ID:Xz7BUKJM0
#Persistent
TouchInit:
VarSetCapacity(IBuf, A_PtrSize * 4)
VarSetCapacity(OBuf, A_PtrSize * 2)
NumPut(0x01000000 | 10 , &IBuf)
NumPut(0x01000000 | 729, &IBuf + A_PtrSize)
NumPut(0, &IBuf + A_PtrSize * 2)
NumPut(~0 - 1, &IBuf + A_PtrSize * 3)
TouchPad := 0
SetTimer, TouchCheck, 10
TouchCheck:
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "UInt", 0xC0000000, "UInt", 3, "UInt", 0, "UInt", 3, "UInt", 80, "UInt", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "UInt", 0x80006004, "Ptr", &IBuf, "UInt", A_PtrSize * 4, "Ptr", &OBuf, "UInt", A_PtrSize * 2, "UInt", 0, "UInt", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
TouchPad := NumGet(&OBuf + A_PtrSize) & 0xFF
If TouchPad > 0
Msgbox, % TouchPad
Return
選択範囲をGoogle翻訳してツールチップに表示する.ahkください
てめーで書けよカス
まあ質問が悪いからこれはおっしゃる通りだ
ていうか、検索結果をツールチップみたいな小さい範囲に表示してもうれしいことにはならないと思うが
質問ならいいんだよ、例えどんなレベルであっても
クレクレは不要
>>348 どんなのだろう?
色々試したけど、押し下げしか判定出来なかった
できるなら知りたい
ホットキーですが
押すたびに キー1 キー2 キー3 みたいに切り替えて入力させることってでいきますか?
1秒未満間隔で連続して押すと1、2、3と入力され
1秒以上の間隔で連続して押すと 1、1、1と入力される
A_PriorHotkey と A_TimeSincePriorHotkey あたり
みてやりゃできんじゃね
>>356 はいよ
if ((A_TickCount < prevTime + 1000) && turn) {
if (turn == 2) {
;Send, ここでキー2を送信
turn := 3
} else if (turn == 3) {
;Send, ここでキー3を送信
turn =
}
} else {
;Send, ここでキー1を送信
turn := 2
}
prevTime := A_TickCount
return
>>358 素晴らしい!
全角スペースによるエラーで少々戸惑いましたが
思惑どうりの結果です
ありがとうございます
ここに書くには全角スペースじゃないとインデントできないしね
ここでの視認性を優先してたや
皆Lと1.0.48.05どっち使ってる?
俺1.0.48.05
両方
nonLじゃないと動かないスクリプト使ってるわけでもなければL一択だろうけどね
ところで質問
他ソフトを使ってマウスホイールでの加速スクロールを使ってるのだけど
例えばGVimでは加速が効かない。他の有名エディタではTeraPadとかでも
エキストエディタ側でスクロール量が固定になってる場合に加速が効いてない様子
AutoHotkeyでどうにかしてそういうエディタに対しても加速スクロールを対応することはできるのかな
自分で書いたくせに読み返す気力も起きないくらいアレな状態のスクリプトをL用に書き直すのが面倒だから無印
自分も無印
描き途中で投げ出して、でも半端に使えるからIncludeしてるファイル群を
端からチェックする気力なし
ここを見るとみんな活用してるみたいだけど、スクリプトを配布してる人って少ない気がする
実際どんなスクリプトを使ってたりしてる?
日本の話じゃない?
英語フォーラムとか外国には色々あるしとか思うとちょっと晒しにくい
単発で簡単なスクリプト載せてるブログはあってもahkファイルを配布してるとこは
利用者数考えると少ない気がする
数行、ないしはせいぜい数十行のような小ネタスクリプトを書いてる人も多そうだしね
ある程度の長さがあるコードじゃないとahkファイルで配布する気にならないのかも
一つのソフトウェア的に配布しててある程度の人が使ってるのって日本語圏ではかなり少ない
MouseGestureL.ahkとかDvorakJくらいじゃないかな
autohotkeyで作られた日本語対応スクリプト一覧でもあれば
たしかに便利かも
むしろ日本語対応してないスクリプト一覧のほうが少ないんじゃないか
ChromeがアドレスバーでEnterキー→新しいタブで開きたいけど
Alt + Enterを押すのがどうしても慣れないので
AHKで実現できないかなぁ?
Chrome Toolboxじゃいかんのか?
AHKでも楽勝にできるけど拡張でできるなら拡張でやった方が自然
Chromeで思い出したけどChromeでPostMessage使うと便利だよね。
ページエンコーディング変えたり、タブを移動を左右に移動させたりできる。
ttp://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/chrome_command_ids.h?view=markup Shift+PageUp/PageDownでタブを左右に移動
+PgUp::PostMessage, 0x111, 34033, 0,, A
+PgDn::PostMessage, 0x111, 34032, 0,, A
^n:: ;Ctrl+nに割り当て
DetectHiddenWindows,On ;非表示のウィンドウを対象に含めるようにする
ControlSend,,space,ahk_class GomPlayer1.x ;対象ウィンドウにspaceキーを送信
return
バックウィンドゥで再生中のGomPlayerを早送りしたり静止したりしたいのですがうまく機能しません
何が問題なのかわかる人教えてください
そもそもgomだとだめなのかしら
{space} じゃないかな
; 個人的な意見だけど、コマンドを説明するコメントは冗長かと
>>374 楽勝にできるんですか ぜひ書いて頂けないでしょうか
>>378 まず書いてみなよ
貼ってくれたら修正するよ
>>378 自分で一度書いてみるのがいいよ、ホント
間違えまくっててもいいから書いてみるといい。そしたらきっと誰かが親切に直してくれるよ
>>376 >>380 DetectHiddenWindows, On
ControlSend, ahk_parent, {Space}, ahk_class GomPlayer1.x
return
これでGomへ正常に送信できたよ
けどahk_parentってのがよく分からない。何なんだろうかこれは
382 :
376:2012/07/12(木) 23:32:38.43 ID:G4AQ718k0
v2使ってる人はどのくらいいるんだろ
とりあえずコマンド類を関数に変えて、見た目すっきりさせたけど
ウィンドウやファイル関係とかの関数だと、対象が見つからないと警告でるな
あとSuspendのPermitが効かない(仕様変わったんだっけ?)
v2なんてあったのか
前にコマンド廃止するっていうのは見たけどずっと放置されてるものと思ってた
v2は使ってる人大分少ないと思うよ
Lが使ってる人も多くてかつ機能面もそこそこ使いやすいから
そこに落ち着いてる人が多いんじゃないかな
コマンド類が関数に変更されたのは初めて知ったけどそれはいいな
v2ってやっぱ少ないんかな、リファレンスも中途半端な感じだし
コマンド名や引数変更の詳しい説明が無いせいで、かなり詰んだ
関数は仕様変更と言うよりは、途中からコマンドとの併用が可能になったよ
ややこしいから全部書き換えたけど、Suspendだけコマンドで書かないと
Permitが効かないし、命令の最初に"Suspend"を書くのもダメ
未だ更新で直らないって事は、バグなのかな
読み返すとちょっと失礼な文だった
v2のくだりは
>>385に向けたものです
388 :
349:2012/07/13(金) 12:48:45.65 ID:4T1Mp1IL0
v2 使うには、まず該当フォーラムを見つけるところから始めないとだからなぁ。
まあアルファフェイズのうちは注目されないだろうね。
389 :
378:2012/07/13(金) 18:06:16.18 ID:Pc1/qAH20
>>379 >>381 書いてみました!
マウスを上部付近に置いた時だけていうのが悲しいですが・・・
Enter::
IfWinActive, ahk_class Chrome_WidgetWin_1
{
MouseGetPos, , OutputVarY
If OutputVarY < 60
Send, !{Enter}
}
else Send, {Enter}
return
マウス関係なしにオムニバー上のEnter→Alt+Enterするようにはどうしたらいいでしょうか?
リモートデスクトップを最大化した時に、AutoHotKeyのグローバルホットキーが利かないですが有効にする方法はあるでしょうか?
>>390 リモートデスクトップではなくVMPlayerでした。
>>389 #IfWinActive ahk_class Chrome_WidgetWin_1
Enter::
ControlGetFocus, Focus, A
If (Focus == "Chrome_OmniboxView1")
Send, !{Enter}
Else
Send, {Enter}
Return
ControlGetFocusでアクティブなコントロールを取得すればいい。
あと、アプリ別の指定は#IfWinActiveを使った方がいいよ。
>>392 ほんとに有難うございます!
>あと、アプリ別の指定は#IfWinActiveを使った方がいいよ。
のはどうしてなんですか?
今までなんとなく全部IfWinActive〜式でやってましたが・・・
確かに#IfWinActiveのほうを良く見ます
メリット、デメリットあるのでしょうか?
>>386にちょっと間違いがあったので訂正
>命令の最初に"Suspend"を書くのもダメ
"Suspend()"または"Suspend("")"と関数風に書くのがダメ
あとSuspend("Permit")だけが使えない
>>393 アプリ毎に制御するのが一般的だからでは?
>>393 1.ホットキーラベル内でIfを使って条件付けする方法
2.ホットキーラベル外で#Ifを使って条件付けする方法
一般的には1の方が使われる大きな理由としては、その方がスクリプトが見やすくなること
・1の方法
#IfWinActive aaa
Enter::Send, a
#IfWinActive bbb
Enter::Send, b
#IfWinActive
・2の方法
Enter::
IfWinActive, aaa
Send, a
IfWinActive, bbb
Send, b
Else
Send, {Blind}{Enter}
return
上記みたいに、対象アプリケーション毎に独立した記述できた方が明らかにメンテナンス性が増す
ホットキーラベルの数が増えれば増えるほど顕著になってくる
本当は他にも理由あるけど、複雑なスクリプトを組むときじゃないと全く関係して来ない
一般的なホットキーの使用としては気にするのはそれくらいでいいと思うよ
あと、上のスクリプトで書いたように、ChromeのURL入力コントロールがアクティブじゃなかった場合に
Send, {Enter}
としているけど
Send, {Blind}{Enter}
とした方がいいよ。一応
じゃなければChrome上で ^{Enter} や ^+{Enter} などを送信できない。そんなに使う機会ないけどね
>>393 1) いつでもキーを乗っ取ることになるんで、
なにも変更したくないウィンドウの場合でも、
Send で再度送ってやらないといけない
2) 新たな定義加える場合、Else If をずらずら書く必要がある
#if だとブロック毎コピペでき、位置も余り気にしなくていい
コンパイルした物をメインアイコンとトレイアイコンをオリジナルに変更する方法が知りたいので教えて下さい。
リファンスとか色々探しても未だわからないのでお願い致します><
menuとかそれっぽいのですがエラー出るし。。
アイコン変更した場合コンパイルするとアイコン画像はexe中に組み込まれるんでしょうか?
v2が正式版になったら
autohotkeyjpの中の人はどこまで頑張れるだろうか
400 get !
>>397 Menu, Tray, Icon, icon.ico
をスクリプトの中に書けばタスクトレイアイコン変更
コンパイルしたexeファイルのアイコンは、コンパイラを使ってコンパイルするときに指定できるよ
タスクトレイアイコンはexeに組み込まれないから注意ね
ちなみに、アイコンをつけるくらいのを作ってることになるけどどんなの作ってるのかな?
公開するならぜみ見てみたいところ
>>394-396 本当に有難うございます。目から鱗です
今までずっとIfWinActive方式でダラダラ書いてたので
これから#IfWinActive方式に直します
そういえば変な症状が・・・Excelのセル上でF2キーを押して、編集状態にして
Homeキーを押すと、普通は入力された文字列の先頭にカーソルが飛ぶはずなのに
そうならずに、なぜかセルが確定されてしまう奇妙な症状がおこってました
Excelを対象にしたIfWinActive文も、HOME::のホットキーも全く書いてないのに・・・不思議でした
Suspend Hotkeysすると正常な動作に戻るので
やはり何か間違いがあるんでしょう
ひょっとして(#)IfWinActive方式の違いに関係あるのかな
>>401 あああ・・・構文悪いのかと思ったらそういう事だったんですか。
それ程大した技術も知識も無いので
単に特定ツールのキーマップ変更とかos全体でのランチャーユーティリティとか
マウスジェスチャーの強化とか
ツール単位でマウスとかのキーボードとかのコンビネーションの変化と
クリップボード関連の強化程度の簡単な物です。
基礎部分が既に出来ているので機能追加の実験でトレイにH並んだり
EXEアイコン有る方が区別付きやすいから付けたい程度です。
>>403 なるほど、H並びすぎを防ぐためね
AHKを実行ファイルにしてまで配布してるところて
日本じゃ全然見ないから見てみたいなって思ってたや
>>402 誰も言及できないのは、結構判断に困る内容だからだったりします
少なくとも、(#)Ifの方式でそういう違いが出てくるということはまず間違いなくない
Home:: のホットキーが全くないということだけど
正直そうじゃないとAHKではフックされてないはずなのが難しいところ
だから、その説明からは原因が全然判断できない、というのが本音
AHKタスクトレイアイコンを右クリック→Open→ツールバーのView
から、Homeを押した時に何がAHKで起きているのかを確かめてみるといいよ
英語で意味不明だよー何言ってるのこれーってなったらまた質問してくださいませ
>>404 あとコア(機能として取り敢えず完成している部分)もH.exeだとアイコン諸々もやっぱりHでファイルとしても見にくいって所でもありますね。
キーマップ変更とかウィンドウ取得で制御奪えるのは普通に分かるんですが
少し変わった制御で制御されているタッチパネルのスワイプとかってahkって制御出来るものでしょうか?
やりたい事としては、まぁ逆なんですが
現状でTwitterアプリがTLでスワイプ対応している物が殆ど無いので
ウィンドウ取得してスワイプの制御取れるなら外から対応出来るんじゃないかと思うので。
やっぱり擬似的?にクリック→クリック無効的に→ドラッグで擬似的にスワイプ処理作ればいいんですかね。
正規の処理がタッチはどうやっているか知らないんでマウスジェスチャー的になら作れそうなんですが
普通?どうやるもんですか?
WinMoveStep(XD,YD) {
WinGet,win_id,ID,A
WinGetPos,x,y,,,ahk_id %win_id%
Step := 22
x := x + (XD * Step)
y := y + (YD * Step)
WinMove,ahk_id %win_id%,,%x%,%y%
return
}
1::WinMoveStep(-1,0)
2:WinMoveStep(1,0)
3::WinMoveStep(0,-1)
4::WinMoveStep(0,1)
というキーボードでウインドウを移動させるスクリプトを発見して使ってみたのですが
タタタとスムーズに移動させたいところ タ、タタタとなってしまいます
初期の遅延をなくすにはどうしたらよいでしょうか
お知恵をください
>>406 それはautohotkeyの問題じゃなくてキー押下一般の話だね
メモ帳で文字キーを長く押すとわかるだろうけど、キー入力がリピートし始めるまでの時間がネックになっている
じゃあどうすればいいかというと、
キーを押し下げている間は任意のリピートとsleepをさせる
loop,
{
WinMoveStep(-1,0)
sleep,100
}
こんな感じに
あとOSの設定でもなくせるから、せっかちさんなら全部そう言う動きに変えちゃってもいいかもね
>>407 1::
loop,
{
WinMoveStep(-1,0)
sleep,100
}
と記入したところ、
押したら最後、どこまでも窓が移動してしまいます(;_;)
>>408 どうググったらよいでしょう?
あたりまえだろ
1::
Loop {
〜
} Until !GetKeyState("1", "P")
return
取りあえず日本語解説読めよ
Chromeといえば
ブックマークをLButtonのみで新しいタブで開く
というのはさすがにAHKでも実現不可能でしょうか?
これを実現してくれる拡張もないからあれば便利なのにな
autohotkey_lの最新版の変更ログに
Fixed key-down/key-up hotkey pairs to suppress input correctly when only one hotkey in the pair is enabled.
こう書いてあるんだけど、これってどういうこと?
それと、
Changed the default script codepage to ANSI, as the previous behaviour was a common source of confusion.
これって日本語のスクリプトはansiだと必ず文字化けしてしまうのか、それともshift-jisを使えるの?
>>412 chromeのブックマーク上にマウスカーソルがあるかどうか
判定できるような気はしないから、
たとえばchrome上でalt+shift+lbuttonを押すと
1.右クリック
2.open new tabの項目までカーソルキーでフォーカス移動
3.enter押下
こんな処理を書けばいいと思うよ
>>412 413のようにカーソル動かす必要無いと思うけど?
ブックマークだけ出したいならそれが出来るだろうし
ブックマーク内の何かを開きたいならguiを作るか何か個別に作らないとムリだと思う
簡単なソース書ける簡単にミニマムテスト出来ると思うよ
newタブで新規タブ開かせてブックマークマネージャー開かせれば
新規タブにブックマーク表示させる事が出来る訳なので後はボタンをどう割り振るかだけの話だと思う。
ジェスチャー化するとか中クリック wクリックの亜種化で1ボタン化するとか
ショートカット化して1ボタン化とか。
兎に角カーソルで座標取る必要も無くショートカットキーとしてこの2つの機能が有るので
バッチ的にやるだけで実現出来ると思うよ?
やりたいこととしては違う???
>>413 > Fixed ...
キーの押し下げ押し上げ時のペアの挙動をしているする時に
一方のホットキーしか定義していないと正しく動作しないことがあった
それを修正したよー
> Changed
デフォルトスクリプトの文字コードをANSIに変えたよ
前の状態は混乱の元だったからね
原文は今読んでないけど、基本的にUTF-8(BOMあり)でやった方が何かといい気がするよ
完全に1クリックだと機能潰すからせめて1キーなら2アクション3アクションなどの
ダブルクリックとかにするなりしないと面倒かと。
←1クリックだと誤爆多いだろうし
→だとコンテキスト無くなってしまう。
Send,^
Send,^+o
実際にこれで開く訳なんで
要はこれをキー割り振りするだけで変態的な何かしたいならその部分だけ考えればいいだけかと。
←1キーにしろ→1キーにしろ1キーで実用化するよりデメリットの方が大きいからマウスだけで何かしたいとしても
それ以外のチョイス取るべきだと思う。
420 :
402:2012/07/16(月) 00:32:29.27 ID:eEwy8/IB0
>>404 有難うございます。
原因わかりました・・・
~F2::
IfWinActive〜〜〜
Else
{
Suspend, On
Send, {F2}
Suspend, Off
}
return
という風に、二重にキーを送ってました
#式に変えればこういうプログラムのミスも起こりにくくなりますね。
それと、昔なんかの雑誌にElseの後は
Suspend, On(Off)
しろよって書いてあったのでずっとそのとおり使ってたんですが
これも
>>395教えてくれたとおり、Send, {Blind}{F2} 一行でいいのでしょうか?
意味はよく分かっていませんが・・
suspend 発行するのは、ahkで発行したキーを再度拾って
無限ループになるのを防ぐためだろうけど、スマートではない
キー定義にフック使えば再度拾われること考えなくてもいい
フックの確認/設定方法はマニュアル読むこと
そもそも ~ を使う「乗っ取らない」ホットキーで、キーを再送信するのが必要とする機能だとは思えないし
今後 #IfWin〜使うなら、ますます不要になる
キー押しで画像表示(アイコンサイズ程度)したい場合コマンド的にはSPLASHか何かですか?
XButton1::Send, {LButton}
XButton2::Send, {RButton}
初歩的なことで申し訳ないのですが、長押しもできる様にするにはどのように記述すればいいのでしょうか?
試したけどリターンするって症状は出ないな。ちなみにホットキーはそれだと無効にならんよ
ctrl::vk103d
こんな感じで適当な存在しないキーに置き換えるといいかも知れない
>>427 無効になりました、ありがとうございます!
よく見たらEnterが入力されたのではなく無効化が効いてなかったようです
では何故Enterだと思ったのかと言うと、!F4::returnで無効化自体使えるのか試したときにEnterらしき動作をしたためCtrlもそうなのだろうと勘違いしてしまったのです(CtrlとEnterの動作が似てるソフトなので)
!F4::returnとCtrl::returnは似てこそいれど違う動作だったんですが……
もしよろしければこの疑問も解消してはいただけないでしょうか?
もしかしてこちらこそreturnキーとして機能していたのでしょうか
タコススカード短いな
>>428 !F4::returnとCtrl::returnは明確に意味が異なるよ
AHKではこの記述でのreturnは、通常キーと修飾キーで挙動が異なる
・通常のキー
!F4::return
→!F4無効化
・修飾キー
Ctrl::return
→Ctrl「単独キー」無効化。Ctrl-x のような2キー同時押しは無効化されない
→実質的に、何も無効化されていないのとほぼ同じ
→本当に「単独キー」での動作が無効になっているのかどうかは
Winキーをreturnしてみれば確かめられるよ
だからCtrl::returnは期待したような動作をしてくれない
>>427さんの方法でも無効キーにできるけど、基本的にはおすすめしない
あとで見た時、訳わからんキーが記述されていてメンテナンス性が落ちるから
ということで、Ctrlを無効にしたいんだったらこう記述しよう
Ctrl::return
Ctrl Up::return
加えて、returnキーという言い方はちょっと変だよ
returnは無効キーにリマップすることを表しているんじゃなくて
単純にラベル内の処理を終了させることを表しているようなもの
さらに小言を言うなら、Ctrlはいったいなぜ無効にさせられるんだろうと思った
>>420 ・{Blind}について
Send, {Blind}{F2} と言ったけどそれは間違っていた
実際にはそこの記述では{Blind}しなくていい
{Blind}は修飾キーをそのままSendするための指定
https://sites.google.com/site/autohotkeyjp/reference/commands/Send ・Suspendについて
基本的には
>>421さんが言ってくれている通りだけどイメージしにくいかもしれない
その雑誌が伝えようとしていたのは、以下の様な挙動を防ぐため
記述は以下のようにしているとする
F2::
If ~~~
Else
Send, {F2}
return
もしElseの場合だったとすると、Send,{F2}を辿る
するとSend, {F2}で、F2を検知して再び上記のホットキーラベルに入ることになる
そして再び実行されたF2ラベルでまたSend, {F2}して、もう一度F2ラベル実行して…
というように無限ループに陥る
これはElseの場合に
「このホットキーを動作させた、元のホットキーラベルと同じ値をSendしているから」
このようなループに陥る
元のキーをSendするときにはこういう問題を何らかの方法で解消しなければならない
ただこの場合は、If~~~ をラベル内で使っているからこういう面倒な問題が発生しているわけ
だから、#Ifでもし囲んでおけば、そもそもElseで元のキーを送信する記述を必要としない
→#Ifで囲んでおけば元のキーをSendする必要がないため、Suspend不要
>>430 えっと、Ctrl+〜ではなくCtrlを無効にしたかったので問題ありません
架空のキーについては横に説明でも書いておきます、ご忠告ありがとうございます
ReturnキーというのはEnterキーの別名(厳密には違うんでしょうが)だと聞いているので、そちらの意味でReturnキーと
すいません
「;」にホットキーを割り当てるにはどうすればいいんでしょうか
>>432 残念ながら両方共君の思い込みが激しく効いてる
自己解決につき取り下げます
Return キーと言うものはない
そう刻印されていて、全く同じ機能のあるキーボードを持った機種はある(った)けど、
AHKの中にはそういうものはないし、キーリストに載ってない
あくまで Return は復帰コマンド以上も以下もない
まあ、AHKは、
send,{return}
でしっかりエンターが送信されるけどな
>>438 では何故return=Enterと処理されたんでしょうか?
returnと送ったらEnterを送ったのと同じ扱いを受けたので、「あぁ、EnterキーがReturnキーだった名残がここにも」と思ったのですが
どうせスクリプトの書き方がおかしかったとか
試したときに押したキーがおかしかったとか
全く関係ない動作を、スクリプトでEnterが送信されたのと勘違いしたかだろ
ていうか、国産機以外でリターンキー付いてたPCなんてあったっけ?
海外産のAHKには最初から関係ないキーだと思ってたけど
存在しないキーを指定する方法に固執する意味も分からん
Ctrl::return
Ctrl up::return
って言ってるだろうに
質問してそれに対する回答を耳から通り抜けさせる不思議
>>441 こんなですが
Alt+F4くらいミスタッチしませんよ
!F4::return以外正常に動作しています
#ifWinActive, ahk_class TTVPWindowForm
a::Send,{left}
c::Send,{Home}
d::Send,{down}
f::Send,{right}
j::Send,{left}
k::Send,{down}
l::Send,{up}
m::Send,{Home}
s::Send,{up}
`;::Send,{right}
ctrl::vk103d
!F4::return
> Ctrlの話はもう終わりましたが
だからそれがお前の思い込みだって言われるだろ
そんな訳分からん返しされても笑えない
さらに言えば上のように記述しても普通にreturnで無効キー扱いされてる
その記述の中以外が腐ってるから!F4にも影響してるとしか思えない
ああ、一個見つけた
!F4::!return
って書き方だと、altf4でReturnする
>>444のスクリプトはこっちじゃしっかり動いてるから、そう言うことじゃないかね
後ろで見てでもしなきゃ正確なところは分からんし、誰もはっきりしたことは言えてないんだろうよ
AHKのバージョンも書いてないし
AHKはReturnがダブルミーニングされてるから、、紛らわしい使わないほうが吉かもってことで
>>443 固執してるか?
さっきから!F4 !F4連呼してるように見えるが
正確には送られるのはAlt+Returnだな
ついでに一個見つけた
F12::~*Return みたいな書き方だと、~と*とEnterがSendされたみたいなことになる、Returnは別のキーでもいいけど
さすがAHK、隠しコマンドもばっちりだ
>>447 存在しないキーを指定しなくてもいいのに
わざわざそのキーを指定しちゃう方法取るとか頭湧いてるってことだろうよ
まああなたは自分が出した方法だから受け入れたいのか知らないけど
教えられる側の性格問題ってこうも重要なんだなって思った
>>446 思い込みと言うより、現状の架空のキー方式で間に合ってるので辞退してるだけです
それとも教わったからにはそれを採用しなければいけないんでしょうか?
それは少し押し付けが過ぎると思います
あと
>>444の.ahkはそれしか書いていないテスト環境です
>>447さんも!returnじゃないと再現しないそうですからうちの環境のせいですかね
ちなみにvista 32bit でv1.1.07.03です
(単発の方が多いようですが)歓迎もされてないようですし諦めます
みなさんお付き合いいただきありがとうございました
TTVPWindowFormって何のアプリのClassだっけ?
とりあえず #ifWinActive〜だけ削除して窓全域で動かしてみたが
!F4::return も !F4::!return もちゃんとキー無効になったよ、Enter挿入なし
XP / AHK 無印 1.0.48.5
まあおそらく皆はAHK_L 基準で話してるだろうから、L固有のバグだったり?
452 :
402:2012/07/17(火) 22:20:27.31 ID:slyimChx0
>>431 >>421 分かりやすい説明ありがとうございます!
一応、無限ループ防止のためフック使うようにしたほうがいいと思い
ホットキーの先頭に#UseHook入れましたよ。問題なく動いてます
#Ifに書き直したらホントにすっきり爽快ですね
>>450 >もしよろしければこの疑問も解消してはいただけないでしょうか?
って言うからいくつかの可能性を考えてやってんだろうが。
歓迎されてないのは、後出し情報で質問してるくせに
自分の納得する答え以外に対して、「そんなことわかってますよ」的な態度だからだ。
いきなりお前の不手際だろと決め付けるのもどうかと思うけどね
いいぞバッドエナジーが満ち溢れておるわ
#IfWinActive でウインドウ(アプリケーション)の指定の方法で、変な混同がないように
きちんと指定する方法ってありますか?
現在 window_spy でトップに表示される
ahk_class クラスネーム かあるいは そのままタイトルバーの文字
のみを#IfWinActiveのあとに書いているのですが、これでいいのでしょうか?
PCゲームのValve社のゲームなどはすべてahk_class Valve001みたいなので
タイトルの文字だけで指定してやるしかないっぽいのですが、
「Counter-Strike」と「Counter-Strike Source」があって
どちらとも別々にしたいので、僕はタイトルの文字だけで#IfWinActiveで
バインドを分けていて、いまのところ上手く行ってる気がするのですが
なにか不安です。うしろにSourceが付いているか否かだけですし
なにかの拍子でほかの方面にも不具合が出そうでなんか怖いです。
Window Title と WinText しかパラメーターがなくて第三以降のパラメーターが
指定できないっぽいですし。
初心者なので簡単なことしかわかりませんが、なにかいい方法ありませんか?
おしえてください。現状のタイトルバーの文字だけをただ書いて指定する簡単な
方法でいいのでしょうか?
ahk_exeをフルパス指定で使えばいいよ
>>457 これでできたのかな・?
わかりませんが、とりあえず一回動作確認できました。まじっすか。こんなことできるんですね。
WinGet, , Processpathってのもそんなに知られていない便利な機能みたいですね。
どうやるかわかりませんが。ありがとうございました。いまのところ出来た気がします
>>458 SetTitleMatchMode とかよくみるのですが、この文字列をどこに置いたらいいのか
わからないんですよね。IFwinactiveからみてどこにおいたらいいのか
ググってサンプルを見ればいいって話になるかもしれませんが。
レスありがとうございました。ぐぐってみます。
コマンドが実行されればどこでもいいよ
一番最初の行rとか
ahk_exeなんて知らなかったよw
WinGetしないで
#IfWinActive ahk_exe firefox.exeみたいに使うのかな?
日本語解説には載ってないんだよね。
あれ?ahk_exeってもしかしてGetProcessModuleNameEx使わなくていいのか
確か前スレでもahk_exeって出てきてたのにw
便利だから日本語サイトにも載ってるといいんだけど
もう更新されてない?
知らなかった
クラスが起動毎に変わるアプリとかを指定するのに便利そうだね
なんてこった
スクリプト書き換えてこよう
勘違いしてた
別にAHK単体でプロセスのフルパスを取得できるわけじゃないんだ
出来るよ
Autohotkey_L だけに実装されてる機能だっけ?
Lのほうが総合的にみていいのかな。
総合的に見なくても悪いところはないんじゃないかな?
旧版ローカルなスクリプトを抱えてる人がまだ使ってるだけで
autohotkeyにあってautohotkey_Lに無い機能は無いよ
autohotkey+アルファがautohotkey_L
互換性の問題は普通にあった気がするけど
無印向けに作られたものでLで動かないスクリプトも普通にあったような
基本は上位互換だけど
unicodeとかx64とか対応あたりで互換性に問題が出るスクリプト多数
って話じゃなかったかな
皆さんて元々C言語とか使えるプログラマーなのですか?
文系がこういうのを自在に操れるようになるにはどういう勉強をしたらいいんですか?
つまりももいろクローバーとももいろクローバーZみたいなものか
>>474 スクリプト言語とプログラム言語の違いをまず分かるといいかも
AHKscriptはスクリプト言語の初級レベルなので文系でも大丈夫だと思う
autohotkey.jpをじっくり読みながら、人の描いたスクリプトを読み取っていくのが基本で、
あとは自分の使いやすいように改造してみればすぐ覚えられるんじゃないかな
文系理系ゆうのは日本だけ
己の不得手分野を肯定してシャットアウトするのに都合のいい区分けなだけ
って、どっかの誰かが言ってた
AHKは日本語解説わりと充実してるしまずは一通り読み込んでみるといい
あとは気合でなんとかする
>>474 既存のスクリプトをコピペして自分に合うように改造していったら自然に書けるようになるよ
>>476>>478 そうです!コピペから始めてだいぶ自分の思うような事ができるようになりました
AHKを弄ってて楽しいと感じているので
違う言語とか書けるようになったらさらに楽しいだろうな〜と少し思ったので聞いてみました
>スクリプト言語とプログラム言語の違い
というのもさっぱり分かりませんが
ようはAHKなんかプログラミング以前でC言語とかはるかに難しいという事ですかね^^;
AHKで何かしたいと思ったら、流行らせるページかautohotkey.jpに行ってコピペして
パラメータ変えるだけで結構実現できますよね
Windows、C言語のプログラミングもそういうサイトがあって、コピペして
パラメータ変えるだけで結構いろんなソフトが作れたりするんですか?
子供電話相談室みたいですみません
うーん実現したい程度の問題だと思う
AHKは一行リマップスクリプトでも実用的な記述にできたりするけど
複雑なスクリプトを自分で描く場合は、コピペとかでは全く無理
言語に限らずコピペで可能な範囲は相当限られてるよ
>>480-481 凄く参考になりました
クリリンとフリーザだともう生物として別物だねw
やっぱり相当な差があるのですね
プログラムを書いていれば幸せかぁ・・・うらやましいです
ahkもプログラムも良くわからないけど
ahkはバッチに近いですよね
基本的に単行実行出来るけど複雑になると把握出来ていないと動かない
プログラムの場合単行実行する方法自体が元々無いと思う
リマップとかみたな事をするにはプログラムでは複数行必ず必要でしょうし
どれかのプログラムだけでって事になるともっと複雑かと
自分はAHK勉強中でコピペで済ませたいとは思いますが
コピペと言うより似た動きのソースからどう動くのか割り出して作り出さないと
動きにくいなーとかって思いましたね。
結局意味分かってないとコピペじゃムリだと思います。
書くのが面倒だからコピペしているだけで分からないからコピペしているではoutかと。
複数アプリで同述リマップ使う為の方法教えて下さい。
例えばこれが元で hoge1 2 3と増やせば一応同じですが
#IfWinActive,ahk_class hoge1
down:: send,i
ソース肥大と汚いのでグループ化したいのですが
GroupAdd,hoge,ahk_class ToolList
#IfWinActive,ahk_class hoge
down:: send,i
だと反応しないようなんですが
多分使い方間違っているんだとは思いますが・・・どうすればいいんでしょうか?
ahk_groupはアクティブ系のコマンドでしか使えなかったような
#IfWinActive ahk_group wingroup
という表現では利用できないはず
https://sites.google.com/site/autohotkeyjp/reference/commands/GroupAdd 複数ウィンドウを条件にする方法は色々あるよ
#If WinActive(wintitle1) or WinActive(wintitle2)
のように#IfWinActiveではなく#Ifを使って条件式を書くとか
SetTitleMatchMode, RegEx でウィンドウ一致条件を正規表現にして
#IfWinActive (wintitle1|wintitle2)
のように記述するとか
正規表現が嫌いなら上の方法がいいかもね
いや普通にできるんじゃない?
グループ化したwindowの指定はahk_classじゃなくてahk_groupを使うのでそこの間違いを訂正する
それで動かなければ毎度おなじみのAuto-executeセクションの問題な気がする
>>485-486 サンクス
ミニマム状態でもテスト出来る内容なので簡単試せるんですが
ちょっと今から出る関係で試せないですが、何となくイメージは掴めたので
帰ってきたら試してみます。
出る前に一瞬試したら反応したのでahk_groupで反応するみたいです。
ちょい動作変な部分があるので後は帰ってきてからで・・・。
本当だ
ahk_groupで試してみたら問題なく動いた。失礼
#IfWinActive, ahk_class Chrome_WidgetWin_1
LButton::Send, ^{LButton}
とか
LButton::return
などとしても普通の左クリックが送られてしまうのですがどうしたらいいですか?
他のキーは完全に乗っ取ってくれるのですが・・
LButton::Send, {Ctrl Down}{LButton}{Ctrl Up}
これでできるかも
サンクスです!でもダメでした
やっぱりLButtonだけは乗っ取れないみたいです。
二重にキーが送られてしまいます
LButton::
IfWinActive, ahk_class 〜
と書けばできそうですがスマートじゃないみたいだし…
ahk_groupで動くのは間違いないのですが
出る前に変だと思った部分はどうもキー複数実行すると元にキーマップが一時的に復活するみたですね。
複数行でウィンドウフックしているとキーは完全のっとれているので何かやり方が有るのか
変数みたいに差し込むような方法あるんでしょうかね?
取り敢えず自分の無知もあるので調べて改善してみます。
解決しました単行キーでは問題ないようですが複数行キーの場合
そのキーひとまとまりとして最後にリターン仕込まないと元のキーを最後に打つみたいですね。
ケアレスの気もしますが
複数で個別にフックしている時はリターン無しでも元のキー打たなかったので分かりませんでした。
普通リマップで複数行書く場合は最後にリターンする物なんでしょうか?
まぁキー抑制出来ているから当面それでいい話でもあるですが。。
#IfWinActive, ahk_class Chrome_WidgetWin_1
LButton::
#IfWinActive
~LButton & MButton::
↑こう書いていたのが原因でした
~LButton & MButton::のスレッドを消したらうまく動くようになりました!
この場合にLButton & MButton::のホットキーも生かすようにするにはどうしたらいいのですか?
「~」を取ってLButton & MButton::と書いたら、すべてのアプリケーションで
左クリックが無効になってしまいました
まずリファレンス読んだ方がいいような気がする
すみませんもう少しヒントお願いします
LButton & MButton:: の部分を
LButton Up & MButton::にすると
Error: Invalid hotkey が出てしまいますが話がずれてますか?
コンビネーション(同時押し)キーなのに key up が定義できるわけがない
というか、スクリプトを断片的に貼るのは構わんけど、
「どういう動作をさせたいのか」をまず述べるのが先じゃね?
あと、マウスはアクティブ窓かどうかだけで判断するのは非常に危険
一個下にあるブラウザのリンクを非アクティブなままクリックするってことはよくあるケースだし
↑のケースに対応するには #If のサンプルコードを読むといい
~の意味は分かってるかな?
何気にみんなが行き詰るコンビネーションキーの罠にハマってる気がする
同じ問題に引っかかった、あるいは諦めた人って他にもいそうだ
個人的には
>>498のupの意図はよく分からないけど
~の意味・・システムにスルーする事だと思いますがアヤフヤです
> コンビネーションキーの罠
コンビネーションキーだからダメだったのでしょうか
#IfWinActive, ahk_class Chrome_WidgetWin_1
LButton::return
#IfWinActive
~LButton::Tooltip, LButton
確かにコンビネーションキーやめてこう書くと思い通り
Chromeのウィンドウでクリックを乗っ取ってくれるようになりました
> どういう動作をさせたいのか
Chromeのウィンドウでブックマークバーをクリックした時だけCtrl+クリックに置き換えたいのと
LButton & MButton::のコンビネーションキーをできれば生かしたいという事です
マウスフック関係は扱い難しいんだよ、コンビネーション絡みなら余計
運用方法を見直して、違和感の少ない代替手段を探したほうがいい
ブラウザの共通標準動作として中クリックが新しいタブなんだけどそれじゃとダメなの?
ダメだ譲れないってことなら、コンビネーション側のトリガを変えて代用
LButton Up & MButton::
↓
MButton & LButton::
マウスフックとコンビネーション絡みはなんとかしたとして
けど本当はChromeのブックマークバーを検知するのが最も面倒なのでは
上で話してる実現したい動作は一応書ける
けど、マウス下にブックマークバーがあるかどうかを検知するいい方法が思いつかない
もしそれだけが目的なら素直にChrome拡張で
ブックマークを新しいタブで開く拡張を探すか
>>506さんが言ってくれているように中クリックを使うか
>>506-507 有難うございます
> マウスフック関係は扱い難しいんだよ、コンビネーション絡みなら余計
よく分かりました。両立は不可という事でどちらかのホットキーは諦めたほうがいいんですね。
> けど本当はChromeのブックマークバーを検知するのが最も面倒なのでは
仰るとおりです。そこまで深く考えずに始めてしまいましたが
とりあえずバーの位置だけは決まっているので
MouseGetPos,,yして75 < y < 100だったらCtrl+クリックを送るなどで
様子を見ようと思っていました(フォルダの場合は使えない)
せめてマウスオーバーしたときに色が変わってくれればあり難いんですが
それも無理みたいです
>両立は不可
いや、実際にはできるよ。ただしコンビネーションキーを使って実現するのは多分無理
フォルダじゃなくてブックマークバーにそのまま置いてあるの限定でいいのかな
というと、固定的なブックマークでそうしたいんだろうか
もしそうならやっぱりChromeで解決できる
googleへのブックマークを新しいタブで開きたいなら、そのブックマークのURLを以下に編集
javascript:window.open("
http://www.google.com/")
>あと、マウスはアクティブ窓かどうかだけで判断するのは非常に危険
>一個下にあるブラウザのリンクを非アクティブなままクリックするってことはよくあるケースだし
確かにあるよね。てことはマウスだけは#IfWinActive(個別)に書かないで
#IfWinActive(条件無し)でマウス下ウィンドウを調べて条件作ったほうがいいってこと?
>>509 有難う〜
いざとなったらブックマークをエクスポートしてエディタで置き換えればいいですね
>>509ってChrome拡張スレでも言われてたよね、試さなかったの?
#IfてLだけ?
いまいち違いが分からん
外部で設定INI持つ方法誰か教えて下さい。
IniRead, OutputVar, Filename, Section, Key , Defaultで制御するんだとは思うのですが。
構文エラー出ているので動かない感じに・・。
IniRead, 代替, INIのファイル, INIファイル内の設定名, ini内でのキー名
っていう認識で
ahk
IniFile := A_ScriptDir . "\ini.ini"
IniRead, CUP1,%IniFile%,CONFIG,CUP
Up:: %CUP1%
ini
[CONFIG]
cup=P
で駄目なんですが何が不味いのでしょう?
iniで制御出来ると後で楽なので知りたいんです。。
CUPの大文字小文字は?
あと、ahkの方のIniReadの記述をどこに書いているかも気になる
構文エラーがなんて出るかもここに書くといいよ
そのためのエラー表示だから
>>515 リマップに変数は使えなかった気がするから、
Up:: %CUP1%
この部分をHotkeyコマンドでやってみたらどうだろう
Hotkey, Up, Key1
Key1:
Send, %CUP1%
Return
1. リマップはスクリプトファイルの読み込み時に解釈されて、
Sendを用いた数行のスクリプトとしてロードされる
2. スクリプトの文法が正しいかが完了したら、ホットキー等の準備を行う
3. autoexec を実行する
4. キー入力イベントでSendコマンドが実行される
(1)でこけてるわけで、文法違反
リマップは定義はスクリプトロード時のマクロみたいなものなんで変数などは使えない
#IfWin〜で変数が使えないのと同じ理由(2 の部分だけど)
って訳なんで、実行時に変数参照したいならリマップは諦めてSend でチマチマやればいい
もっと楽なのは #Include で定義を外部ファイルにしてやれば(1)の段階で解釈してくれる
INIの「=」と、AHKの「::」くらいしか違いがないわけだし
>>516 スクリプトは殆どこのままの状態ですね
だから順番も順番
>>517-518 サンクス
知識足りないので即分かったとは言えないですが
試してみます。
>>517 試しでコピペでどうなんだろうで試したらサックリ動きました
なるほど直接キーマップにsendに変数は与えられないけど
hotkeyとして文字列となった物になら変数も受け入れられると言う事なんですね。
この部分の差が構文エラーとなっていた訳ですか納得しました。
スクリプトがこのままということはやっぱりAutoExecを考慮していない
ちゃんとリファレンス読もうよ
あと、そこでHotkeyコマンドする意味は正直よく分からない
普通に Up::Send, %cup% で問題ないはず
問題無いはず出はなく問題無いならそれで通っているはずで
hotkeyを使う理由は518が答えてくれていると思います。
若しくは518さんの言うとおり#Include使うかのような気がします。
いずれにしろ通っている案方が正しい訳で
Up::Send, %cup% だと構文エラーなのでその時点で問題かと
実際に組んでエラーが出ないと言うなら又話が変わると思いますが・・・。
いや普通に一文Sendで動いてるけど。あとエラー内容は?
Hotkeyを使った理由を知りたい
ていうかAutoExecは一応ちゃんとしておいた方がいいよ
ということでリファレンス読もう
Hotkeyコマンド使った理由は自分の言葉でってことね
少なくとも
>>520の説明は正しくない。キーリマップとSendをごっちゃにしてる
よく分からんけどコピペでなんだか動いたはなるべく避けたほうがいいよ
とりあえず動いたなら難しいこと考えたくないーならまあそれでもいいかもしれない
動けば正義という意味ならたしかに間違いじゃないが
変数まずいのはリマップだけなので、
Hotkey, Up, %CUP1%
か
Up:: Send, %CUP1%
でいいと思う。>517がわざわざ分割した意味がよくわからん
ごめん勘違いしてたわ
Hotkey, Up, %CUP1%
は結局 %CUP1%内のラベルに飛ぶからダメだった
動的に飛び先変えたい時以外はあんま意味ない
Up:: Send, %CUP1%
あ・・・というか元の奴まで遡ったらsend打ってないポカやってますね。
失礼><
遠回りしましたが勉強にはなりました。
勉強に近道などない
L公式サイトが404
トップだけでなく中も同じ
さて
あ、本当だ
ディスク障害でも起きてデータぶっ飛んだのかもな
いまだにバイナリ版が落とせなかったりするし
サーバーが悪意ある攻撃を受けたらしい
今のところ過去のバージョンはぶっ飛んでて手に入らなくなってる
まじか
本家AHKを使ってます。
今、特定のアプリAがアクティブなときに、
別の特定のウィンドウが存在している場合、
F1を押すとTooltip A、別の特定のウィンドウが存在していないときにF1を押すとTooltip Bとなるようにしたいのですが
#ifwinactive ahk_class A
ifwinexist ahk_class A
F1::tooltip A
else
F1::tooltip B
return
これだとduplicateのエラーがでてしまいます。原因は何でしょうか?
#ifwinactive ahk_class A
ifwinexist ahk_class A
F1::
tooltip A
else
tooltip B
return
こうか?
いやIfWinExistはF1::のあとでしょ
■ 超初期のAHK版
F1::
IfWinActive, XXX
{
IfWinExist, YYY
Tooltip, A
Else
Tooltip, B
}
Else
Send, {F1}
Return
■ #IfWin〜版
#IfWinActive, XXX
F1::
IfWinExist, YYY
Tooltip, A
Else
Tooltip, B
Return
#IfWinActive
■ AhkL版
#If WinActive("XXX") && WinExist("YYY")
F1::Tooltip, A
#If WinActive("XXX") && !WinExist("YYY")
F1::Tooltip, B
#If
これはわかりやすい
回答ありがとうございました。
F1のあとにIf分岐を入れたらできました。
あともう一つ質問なんですが
ADOBE社のAfter EffrectsとPremiereのフローティングウィンドウのクラスが両方共
ahk_class DroverLord - Window Class
になってまして、クラスからだと区別が付けられないので質問したような分岐をつけたんですが
こういった場合、質問したような分岐を設ける以外にAfter EffectsとPremiereのフローティングウィンドウのアクティブ判定を別々にさせることなんて無理ですよね?
今使っているスクリプトはこんなかんじです。
#ifwinactive ahk_class DroverLord - Window Class
Xbutton1 & wheeldown::
ifwinexist ahk_group AfterEffects
send,{Pgup}
else
send,{Left}
return
WinGetのProcessNameはどうかな
Lならahk_exe
少し前に出てた話題な気がするが
>>542 それでやってみましたがうまくいきました。どうもです。
>>543 それも便利そうですね。Lが自力で使えるようになったら試してみます。
一応変更したスクリプト書いておきます。else if はただのelseでもいいんですけどわかりやすいんで。
どうもでした。
#ifwinactive ahk_class DroverLord - Window Class
Xbutton1 & wheeldown::
WinGet, AEAP_Floating, ProcessName, A
if (AEAP_Floating = "AfterFX.exe")
send,{Pgup}
else if (AEAP_Floating = "Adobe Premiere Pro.exe")
send,{Left}
return
TTBaseというソフトのプラグインのsnc.dllを使っていて
同梱のsample.cを参考につくったのですがどうにも動きません
教えてください
テキスト中RegExMatch()でヒットした箇所を処理し、
それから続けてRegExMatch()でヒットした箇所を処理し、、、と
RegExMatch()を複数回繰り返しながら処理を進めていくことはできますか?
例を出すと↑のテキストで"Reg"にヒットしたら変数xを1ずつインクリメントする、というようなものです
ie = %A_ProgramFiles%/Internet Explorer/iexplore.exe
Gui, Add, Edit, vValue x4 y8 w440 h24
Gui, Add, Button, Default x450 y8 w46 h24 , G O
Gui, Show, xCenter yCenter h39 w500
ButtonGO:
Gui,submit
test = %Value%
Run, %test%
入力フォームに入れた変数で起動するランチャを作ろうと思ったのですが、うまく行きません。
%ie%と入力してGOを押しても変数が展開せずそのまま"%ie%"を起動しようとします
(ゆくゆくはieと入力して起動するようにしたいのですが、ここでつまづきました)
Run, %A_ProgramFiles%/Internet Explorer/iexplore.exe
のようにするにはどうすればいいのでしょうか?
レベルの低い質問ですが、どうかよろしくお願いします
>>549 こんなかんじでいかが
ie = %A_ProgramFiles%/Internet Explorer/iexplore.exe
Gui, Add, Edit, vValue x4 y8 w440 h24
Gui, Add, Button, Default x450 y8 w46 h24 , G O
Gui, Show, xCenter yCenter h39 w500
ButtonGO:
Gui,submit
test = %Value%
StringReplace,test,test,`%,,All
Run, % %test%
551 :
547:2012/07/29(日) 09:02:33.99 ID:3isWafeE0
スクリプトはこんな感じです
WinGet,hwnd,id,Snarl
VarSetCapacity(cd,(512+260+32+1)*4)
str:="/title=a /text=b /timeout=5 /icon= /soundfile="
InsertInteger(0x100,cd)
InsertInteger((StrLen(str)+1)*2,cd)
続く
552 :
547:2012/07/29(日) 09:05:10.17 ID:3isWafeE0
InsertInteger(&str,cd)
SendMessage,0x4A,0,&cd,,ahk_id %hwnd%
Return
InsertInteger()はヘルプのDllCall()項に記載されてるもの
strやVarSetCapacityで確保された領域は、他のプロセスからはアクセスできないので、
VirtualAllocExを使ってTTBase上にメモリを確保しないとダメよ
呼び出し先DLLの機能をスレで聞くのはお門違いなんで、汎用的なことだけ
・ x64, x32の区別は付いているか?
ポインタ引き渡すところで精度きにしているか?
Ahk x 64 → Dll x32 とかしてないか?
・ 引き渡す文字はANSIかUnicodeか調べてあるのか?
・ 凄く昔の関数の Insert〜 つかうより NumPut/Get使うべきでないのか?
>>550 StringReplaceを使えば変数を展開してくれるんですね
実際に使用する時は引数SearchTextも空でいけそうですね
本当にありがとうございました
引数SearchTextは空にするとエラー出るのか
そのまま入れておきます
>>555 StringReplaceは「%」が邪魔なので外しただけですね
「%ie%」じゃなくて「ie」だけで起動できますよ
その場合StringReplaceは有ってもなくてもどちらでも
空でも動かすような構造にしてるなら、if文で分岐させたりしてみてください
if(test) {
ここに処理内容
}
ボタンに画像を表示させたいのですが
↓だと,カーソルを持って行ったときに画像が消えてしまいます。
ツールチップが出るか文字の他は透過で,画像はそのまま表示の方法を教えてください。
Gui, Add, Button, x150 y150 w64 h64 ghoge, Chrome
Gui, Add, Picture, x150 y150 w64 h64 , C:\Program Files\Google\Chrome\Application\chrome.exe
解決しました。
Gui, Add, Picture, x150 y150 w64 h64 ghoge, C:\Program Files\Google\Chrome\Application\chrome.exe
Gui, Add, Text , x150 y150 w64 h64 BackgroundTrans, Chrome
簡易的なマウスジェスチャを作りたい関係でソース改変で作っているんですが↓の奴で
http://d.hatena.ne.jp/ka8823ge/20060219 二つ分からないんですが
{
mg_active=1
で{が閉じられていないってどういう理由でしょうか?
MouseClick,R,,,,,U
の,,,,って部分って何を意味しているんでしょう??
どうも{のせいで書き足すと構文エラー出す気がしているので理由と意図が分かれば何とか出来そうだとは思うので。。。
4〜106でひとまとまりだったって事ですか。なるほど。
マウスジェスチャーではあるんですがキーボードとのコンビネーションジェスチャーに改変しているので
マウスのみだとちょっと違うのと機能足して作っている関係でジェスチャー機能だけシンプルな奴が欲しかった関係で
これを改変しています。
普通はマウスのみの方が操作が軽いんでしょうけどツールでショートカット使う状態での使用設計なので
キーボード乗っ取る方が負担少ないんで・・・
mousegesture.ahkとかからソース抜き出そうとしたんですが面倒だったというだけでも有りますが・・・。。。
,,,,,って単にオプション空欄って事ですかね?
もうちょっと色々試してみます。
>>562 MouseGesture.ahkなら設定の「新規ボタン定義」でキーボードのキーを追加することは出来るよ
L版は使ったことがないから出来るかどうかわからんけど
アクティブウィンドウをキャプチャしたいんですが
Send, ^{PrintScreen}
Send, {Ctrl Down}{PrintScreen}{Ctrol Up}
いずれもモニタ全体のキャプチャしかしてくれません。
どのようにしたらいいんでしょうか?
CtrlじゃなくてAltじゃね?
CtrlじゃなくてAltじゃなかったけ?
>>566-567 有難うございます
これは恥ずかしい
仰るとおりSend, !{PrintScreen}で動きました
AHKerにはよくあること
「変数が空の場合」というのを表現するには
If (Var == "") でいいのかな
一応動いたんですがもっとちゃんとした表現があるのかなと思って・・・
あるウィンドウをマウス操作を一切受け付けないようにすることはできますか?
"PlayedTopWindow."というソフトにはその機能があるんですが、
ちょっと取り回しが悪いのでできたらahk内の機能のみで実行したいんです
もう1つ
WinGetTextでクラス名を指定する方法はありますか?
音楽再生ソフトの再生中の曲の項目だけ抜き出してツールチップで表示したいのですが
if Var =
でも動くかも
>>575 一応読んだつもりだったんですが。
操作を一切受け付けないのではなく、マウス操作を受け付けない方法です
ちなみに例に上げたソフトでは、前面にマウス操作を受付ないウィンドウがあった場合
その下のウィンドウをマウス操作できます。マウスの透過?
controlsendeのようにwintitleの他にclassを指定したいんです
質問の意図が伝わっていて尚載っていたならすみません
577 :
575:2012/08/03(金) 00:39:59.11 ID:o/jf6lFP0
>>576 ほれ
Run, notepad.exe,,,pid
WinWait, ahk_class Notepad ahk_pid %pid%
WinSet, TopMost
WinSet, ExStyle, +0x00080020
>>572 アクティブウィンドウでCtrl+q押して対象ウィンドウを指定
^q::
WinGet, Wnd, ID, A
Return
#If (Mouse() = Wnd)
RButton::
LButton::
Mbutton::
XButton1::
XButton2::
Return
#If
Mouse() {
CoordMode, Mouse, Screen
MouseGetPos, , , hwnd
Return hwnd
}
579 :
名無しさん@お腹いっぱい。:2012/08/03(金) 06:08:35.40 ID:njTmGH5X0
やっぱり空を表現するのって""でいいのかな
よくわからず慣習的にやってるけど
580 :
576:2012/08/03(金) 09:56:31.39 ID:eqHNgnf20
>>577 ありがとうございます
望んでいた動作になりました
しかしウィンドウスタイルも見ていたのですが、探し方が足りなかったのかな
0x00080020で検索してもかからないし……
>>578 試しみましたが、後半部分がどういうことなんだろ
マウスカーソルがどこにもない時(?)スクリーン上での絶対座標のウィンドウハンドルを取得して
Return hwnd……すみません。ちょっと理解できませんでしたが、ありがとうございました
知識が足りない、探し方が粗いみたいなので自分でも試行錯誤してみますが、
よろしかったら引き続きウィンドウとそのウィンドウの中のClassNNを指定してテキストを抜き出す方法をお願いします
画像表示したいんですが
SplashImage, C:\tool\JPN.BMP,B,,,tiptitle1
こいつだとは思うんですけど直指定では無くスクリプトのルートか以下に入れるって表記的にどうするんでしょう?
別口の方法が有るならそれはそれで知りたい所です。
後、後々の可能性として知りたい事なんですけどこの画像に対してボタン反応って付けられる物ですか?
(ボタンランチャーみたいな事ですね)
582 :
580:2012/08/03(金) 11:29:19.24 ID:eqHNgnf20
^q::
if toggle_state = 1
{
toggle_state = 2
SetTimer, Ttip, 1000
}
else
{
toggle_state = 1
SetTimer, Ttip, Off
ToolTip,
}
return
Ttip:
WinGetText, musicnumber, ahk_class iTunes
CoordMode, ToolTip, Screen
ToolTip, %musicnumber%, 1000, 0
return
とりあえずこんな感じで1秒毎にテキスト拾ってきて画面右上にツールチップで再描画するようにしているんですが
これだとメニューバーの中身からボタンからツールチップから何から何まで拾ってきて画面が埋まっちゃうんですよね
ClassNN:Static11、Static12、Static15にそれぞれ残り時間、経過時間、曲名があるのでそれだけを抜き出したいんです
SplashImageってwinset使って透明付けた後に半透明処理とか出来ないんですか?
多分出来るとは踏んでるのですが半透明かけると透明切れるのですが何か方法ってありますか?
585 :
580:2012/08/03(金) 14:00:32.68 ID:eqHNgnf20
>>583 すみません。WinGetTextと思い込んでたので指摘に気付きませんでした
>>575 ありがとうございました
>>583 ああ・・・あれそのまま記入すると良いんですか成る程
guiコマンド使うのか・・・頑張って気長に組みます^^;;
色々できますなぁ・・コレ。
なんて優しいスレッド
最近みんな優しいね
ほかのスレに比べてここは見てるだけでも楽園だ、心が洗われるよ
AHK便利ですよね。
これがなかったらWindowsなんか捨ててやる
> If !Var
これだと、Varに0が入ってても通るから注意
ウィザード級プログラマの私もこのスレには助けられています
多分探していたのこっちだった・・・%A_ScriptDir%
これだと多分スクリプトの位置に追従すると思うので。
そう回答されてるように思うんだが
は・・・本当だ・。。
何いってんだ俺。。。申し訳ない。。。
何かで見た事有る気がするんですけど
カナキーって正常動作しないぽいんですか?
自前改変ソースなんで絶対正しいとは思わないんですが
他のキーだと動作するソースキーマップだけ変えてみると多分誤動作しているぽい
多分キーダウンしたままの状態?
まぁ今は使わなければいいだけなので興味本位の方が大きい疑問です。
そんなバカな、と思ってやってみたら確かに取れないわ
無変換/変換はupキー取れるけど、半/全とカナ/かな キーはダメだわ
XP 32bit AHK無印 1.0.48.05
Up取れないのはどの環境でも共通
といってもそれだけだから大抵は大した問題にならない
「どこか」も何も、毎スレのテンプレに載ってるという...
あー、半/全 や かなキーもLock系分類なのか
>>597 やっぱまんまそう言う事だったんですか。納得。
別口の話の質問なんですが
(今はguiでbmp展開したいのですがやり方が分からないから取り敢えずSPLASH使っている)
ahkによってSPLASHを開いて(bmp)その開いた物を他のアプリが有る時だけ開いて最小化したら一緒に最小化するような事ってどうやればいいんでしょう?
例えば電卓が有る時だけ画面に表示させるような感じです。
最小化で画面からは消えるウィンドウ化で又出現
タイマーで電卓の状態監視して、最小化してたらSPLASHウィンドウに最小化命令
上級者向けにイベントフックでやるやり方はスレ内検索
成る程
試してみます。
似たような動作を何百回も繰り返すにはどうしたら楽ですか?
ブラウザで、とあるURLを開かせ、ページ内のボタンを押させ、今度はそれとは別のURLを開かせ・・・
という動作を250回ぐらい繰り返させたいのですが、
全ての動作をiniに書きまくる以外にそうさせる方法はないですかね?
32bit xp, autohotkey v1.0.48.05です
処理内容がある程度固定なら、データクラスとその処理関数作って、それを配列にするとか?リスト処理的な
605 :
604:2012/08/05(日) 03:56:08.75 ID:tR3HzIH/0
データクラス → データ配列 (Lでないなら)
>>603 /*
その手のツールを作るということは、
本人の意図はどうであれ、DoS攻撃ツールを作っているということになる。
*/
似たようなってのをパターン化して、パターン内違いを変数化すればいいだけ
250回あって250パターンになるか、50パターンになるかは腕しだい
(正規化すりゃいいだけだけど...)
1.1.08.01 - August 3, 2012
Debugger: Fixed max_depth being either half the intended limit or unlimited.
>>604-606 処理内容は全く同じでURLが別々という感じです。
仰られている内容について全然知識がないのでまずそれについて調べてみます。
どうもありがとうございました!
250回も同じ事するのはサイト管理者側からすれば迷惑でしかないはずだけど
というか250回も同じ事をしたいとかいうその思考から直したほうがいいのでは
別の対処方があるとしか思えない
皆厳しいね。たった250回じゃないの。そんなにやかましく言うような事でもないと思うんだが
というかその250回が同じサイトと誰か言ったか
思慮が足りてなさそうな感じだったから釘さしてるだけでしょ
悪意のない人間の迷惑行為ってたちが悪いし
デリケートに反応されるような内容だって自覚がある人間なら
質問の仕方ももっと慎重になってるはず、疚しい目的じゃないなら尚更
でもまぁ不確定因子がいたほうがかえって免疫力がつくと言いますし
ブラウザの自動化はuwscの方がいいんじゃねぇの?
webページだとかボタンだとかならiMacros楽だよ
それ自体は制御構文持たないから、なにかプログラミング言語を使えないと駄目だけど
AHKでやるこたないだろとは思う
ie オブジェクト操作するならahkでも何でも変わらんように思えるけど
まぁ、個人でデータぶっこ抜く程度ならいいけど、配布はするなよ
サーバ攻撃ツール配布したって訴えられる可能性が無いとは言えんので
リザイズ不可能なウィンドウをリサイズ可能にすることは出来るでしょうか?
ウィンドウシェードでも作ってる?
可能な場合もあればアプリケーション側でなにかやってる場合
リージョンも使えない場合があるから
どっちとも言えない
少なくとも通常は大きさ変えられないダイアログなんかも
リサイズはできている
可能ってことだからMouseでD&Dしてリサイズ出来るようにってことじゃない
全部が全部じゃないけどウィンドウスタイルいじれば出来ると思う
んなあほな
と思いながら見たらやっぱり嘘だった
そのブログの人もそれを乗せるあなたも、人に言う前にまず自分でよく確認しようね
>>617 WinMoveでWidthとHeight指定すればいいよ
#Up:: Resize(0,-50)
#down:: Resize(0, 50)
#Left:: Resize(-50,0)
#right::Resize( 50,0)
Resize(W,H) {
WinGet,work,MinMax,A
IfNotEqual work,0, return
WinGetPos,x,y,width,height,A
WinMove,A,,,,% width+W,% height+H
}
>>621 うちの環境では動作するけどね。たぶん環境依存なんだろう
そういうのはレジストリでやるもんだと思ってた
>>623 うそーまじでか
散々言われているようにLock系のキーはUpを取得できないはずだけど
Upを取得できないのは物理キーボードでなくOS側の問題なのだから
正直そこで環境の違いがあるとは思えないんだけどなあ
まあうまくいったならうそつけーと言っても仕方ないし良かったねという話だけど
仮に出来る環境が有ったとしても
大多数がngなら出来てよかったねって位かと。。。。
まぁそれはそれとして
ウィンドウの通常状態と最小化状態ってどうやって調べるんだろう。
>>625 キーヒストリを眺めてみたら、CapsLockの場合は押し下げ状態(d)のみ取得できるけど、リマップでCtrlを割り当てると、Up/Down両方ともに取得出来てるね
WinWaitActive系使えばいいのかな・・・
あとで組んでみよう。
やっぱ色々出来て飽きないな
バッチとかvbsより日常を改善出来る分こっち方が面白い。
winget 調べたらMinMaxて有りますね応用します〜。
settimerとかで監視を何とか使えるようにはなったんですが
例えばですがsend,2送るコマンド入れ込んだとして
+時間与えると 時間/回与えますけど-時間だと一回
プロセスIDで同種を種類判別した場合だと同アプリ(複数起動出来るカルクとか)
だと-時間でIDごとに一回に出来ますが
同IDを最小/最大化化等した場合で最大化した時毎回timer/1回出すようなのってどんなイメージで作ればいいんですかね。
簡単に書けば
カルク監視してを最小化してアクティブにするたびに「2」を送り込むって事ですね。
日本語入力状態がなんであれ、半角の英数字を入力したいのですが、
全角半角の状態を判断ってできますか?
クリップボードを汚したくないので、クリップボード経由は考えていません。
autohotkeyじゃないけどgoogle imeの裏機能使えばいいよ・・・
多分goolgeimeの内部仕様が実際打鍵されたキーを格納して使うみたい形取っているから
候補の一部にダイレクトに打鍵されたキーも候補に有ると思うんだよね
たまたまそのダイレクトに打鍵されたキー変換する設定見つけたから使っているよ。
半角のつもりで全角打ってしまった時とか
全角の中で半角英文混ぜる時継ぎ目無く打てるから便利かな
同時に google GOOGLEみたいに変換かませば全角になるし
便利だと思うんだけど誰も知らないぽいんだよね・・・ベータの頃から有る機能なんだけど
ずっと無くならない所を見ると仕様ぽいし
googleimeでしか出来ないようなので結果的に離れられなくなってしまった。
acc.ahkとcom.ahkってのがあると色々便利なことが出来そうなんだけど、
ぐぐってもみんな 404 Not Found で見つからない。
ミラーURLを知ってる or 手元に持ってる人が居たら教えてもらえませんか?
まあ確かに何言ってんのか分かんない
とはいえGoogle日本語入力は十分メジャーIMEだしこういう方法もあるよという話するのはいいと思うよ
ただやっぱり何を言いたいのかは俺も読み取れない
レスの調子を見るに教える側に回れる人じゃないと思う
落ち着けよな別にこれを使えって訳ではなくそう言う方法も有るってだけだ
これはかなり不思議な仕様だから実際どういう物か見ないと意味は多分分からないとは思うけど
と言うか素で直ぐ分かる人間なんて居ないのは分かるが。
googleimeだと変換前の状態であるなら全角で表示している状態と違う
打鍵された半角に変換出来る方法が標準機能で有るって事だよ。
googleime使える環境なら別にスクリプト組む必要も無いかも知れないだけって話
まぁ別に教える側じゃないそうだから別にそれ以上なんも言わないけど。
モスバーガーの食い方か
それって、MS-IMEでファンクションキーで変換するのとなんか違うのか?
キーボードショートカットでも出来るやつのことでは?
ていうか具体的な操作法書いてないから何の話してるのか分からん
>>637 具体的に、入力中にこのキーを押したりするとこうなる、というように流れで言うと
みんなにとって分かりやすいと思うよ
スペース押したときの変換候補内に全半英数もあるよっていいたいんかと解釈したがちがうんかね
だとしたらimeのon/off状態も不明な前提で、変換候補の何番目にあるのかもわからん半角英数を
どうやってahkで選ぶつもりなのか皆目わからん
トグルじゃないIME Offのショートカット設定しておいて事前にsendで投げるとか、F9だかF10だかを
送っとくって話しならまだわかるが
自分なら、imeでテンキー経由の数値を半角で表示するように設定しておいて、
numpad1とかを発行するようにするな
みんな
>>630の意味がわからないんだぜ、きっと。
ime on/off のタイプミスなら againtyper でも使うといいよ
on 時に半角入力にしたいなら、なにかキー押す手間考えてもF9, F10 使う方が妥当かな
自前で作るなら結構面倒で、imm や tsf の状態監視したり
現窓やキャレットの有無、無操作時間とかも考慮しないと、
使い物にならないと思う。
それには標準コマンドじゃ到底できなくて、dllと構造体ゴリゴリいじって、
何語で書いてるのか分からんなぁ、って感じになるはず。
mousegestureLでジェスチャの割り当てRB_LB__RB__ってできないんですね。
なぜなのか教えてください。詳しい人。
>>644 つか、質問者(>631)の意図としてはAHKで半角英数任意文字列を
自動で投げたいってことだろうし
AHK使わなくてもGoogleIMEなら手動でも打ち直ししなくて平気だよ!
ってレスは明らかに的が外れてると思う
ちょっと前に居た彼のことを思い出してしまうな
まあIME.ahkでFA
数少ない日本語で分かるスクリプトだし
>>645 RB_LB__RB__は出来ないがRB_LB__X1B__ならできます。
ただ,RB_LB__の動作の後にRB_LB__X1B__が実行される形になります。
本来の動作が優先される仕様になってせいだと思います。
条件式を駆使して作れるかもしれないけれど恐らく使いにくいのでは。
>>649さん
おーありがとうございます。
>RB_LB__の動作の後にRB_LB__X1B__が実行される形
RB_LB__になにも登録して無ければ問題ないですよね
>本来の動作が優先される仕様
これはRB_LB__RB__ができない理由ですか?本来の動作ってなんなんでしょ。。
RB__はコンテキストメニュー表示です。
LB__についてはマウス操作が出来なくなる恐れがあるのでこの辺は
あまりお勧めしません。
652 :
名無しさん@お腹いっぱい。:2012/08/09(木) 10:09:55.25 ID:gOrnUuS20
>>651 単一押し下げは使おうと思ってませんよー
RB__のコンテキストだってmousegestureLでトリガ与えれば問題ないですよね
たとえばLB_RB__は機能するのに。RB_LB__RB__はなんで機能しないのかの理由がよくわかりません。。
>>653 RB_LB__RB__とすると実際は
RB_LB_★_★_RB__
★のところでキーが2つ離され
MG_Timer(ms) やMG_Wait(ms=0) が
そこを待機させるコマンドになっていないということでは。
うーん
リアルナビで動作見ててRB_LB__までは行くんだけどその後右クリックしても反応してくれないって感じなんですよー
途中で両方離さないから待機は必要ないと思います。
RB押し下げLB押し下げRB押し上げまではちゃんと動くんだけど、その後RB押し下げが反応しない。。
>>645 基本的にMouseGestureLは最初に押し下げたキー(今回はRB)が離された時点でジェスチャ認識を打ち切る仕様だから。
RBが離された時点でジェスチャの認識が終わり、ジェスチャとしては「RB_LB__」までしか認識しない。
この時、RB_LB__に該当するジェスチャ設定がないときは右クリックを再現する。
>>649の言うとおり、タイマーやらなんやら使えば対応できると思うけど面倒くさい上に使いにくくなると思う。
つか、MouseGestureL.ahkの話題はスレ違い?
いや、ここでいいんじゃないか
AHKくくりで問題ないし、それまで分化してしまうとただひたすらここが過疎化してしまう
まあ公開されてるAHKスクリプトで、ある程度使ってる人いるのはこれくらいしかなさそうだけど
>>657さん
645です。なるほどーと思って試してみましたが、
RB_LB__Lとやった時には
RB押してLB押して「RBのみ離して」左にスクロールするジェスチャで動作するみたいです。
これってRB離されてもジェスチャ認識されるってことですよね。。
しつこくってすみません。
右クリを押しながらカーソルで円を描いたら自作の関数呼びたいんですが
それを検出するコードってないですか?
必要としてるのはこの機能だけなんでフルセットなMouseGestureL.ahkは出来れば使わずに済ませたいです。
(すでに別のジェスチャツールを使っているので)
40,42行目がくるくるを検知した時に実行してる内容だから
その変に気をつけて手を加えれば多分すぐできるよ
>>660 ほんとだ、上下左右へのドラッグは認識するけど、RBは認識しないね・・・
ウソ言った代わりじゃないけど、解決する方法を考えてみた。
ジェスチャ登録はRB_LB__にして、動作設定で最後のRB入力を待つようにしてみればどうかな。
「keywait,Rbutton,t1 d」でRBの入力を待ち、
ErrorLevelで判定して本来の動作設定、って感じで。
テンキーの「=」「(」「)」ってホットキーを割り当てることって出来ないのかな
=()をそのままホットキーラベルにしてもやっぱりできなかった
>>664 そっかーありがとうございます。不思議ですねえ。コード見てみるしかないですかねw
wait系は個人的にあまり好きじゃないので他のジェスチャで代用します。
RB_LB__LB__のジェスチャがリズミカルで好きなんでRB_LB__RB__も登録したかった。。
KeyHistory見てもよく分からないんだよね
NumLock→Alt+Numpad6→Alt+Numpad1→Numlock
てな感じ。もはや普通のキーじゃなかった
バックグラウンドにあるアプリにキーイベントが送れません
例えば、Win+R でバックグラウンドにある Firefox に F5 を送信しようと、
以下のように書いてみましたが、F5(ページ再読み込み)は効きませんでした
ControlSend を MsgBox に変えるとメッセージが出るので実行はされてるようですが、
キーイベントを送るにはどうすればいいでしょうか?
#r::
IfWinExist, ahk_class MozillaWindowClass
ControlSend, , {F5}
Return
上以外にも例えば以下のようなのも試してみましたがダメでした
WinGet, hwnd, ID, ahk_class MozillaWindowClass
ControlSend, , {F5}, ahk_id %hwnd%
670 :
649:2012/08/11(土) 14:14:26.83 ID:zkAPXQNJ0
>>666 656のは設定項目の変更は必要なくmg_wait()も,
もう少し小さい値でも動くみたいです。
これも作りかけで,mg_wait()を使いますが
RB_LB__LB__の対のLB_RB__RB__です。
[RB__]
G=RB__
Default=Mg_wait(300)
[LB_RB__RB__]
G=RB__RB__
Default=if (GetKeyState("LButton", "P")) {【TAB】;LB_RB__RB__の時の動作 【TAB】msgbox,,,★★★,2【TAB】}else if !(MG_Executed>1){【TAB】Send,{RButton}【TAB】}
>>669 IfWinExist, ahk_class MozillaWindowClass
ControlSend, , {F5}
この記述でも、
WinGet, hwnd, ID, ahk_class MozillaWindowClass
ControlSend, , {F5}, ahk_id %hwnd%
この記述でも、書き方としては間違っていなく、本来は正しく動作するはずです(実際に動作確認もできた)
ということで、MozillaWindowsClassが他のウィンドウと被っている可能性はいかが?
例えばThunderbirdを利用していると、Thunderbirdでも全く同じウィンドウクラスが使われているため注意が必要
Control系は動いたらラッキーって感じのコマンドだったような
1.ClassNN省略
2.ClassNNを指定
3.ahk_id %hwnd%の代わりに %Controlhwnd%を指定する
1<2<3 の順で成功率は上がる、ハンドル取得が面倒だけど3が一番確実
>>672 AutoIT3 Window Spyを使えば ahk_idは分かるけど
Controlhwndはどうやって取得するの?
>>671-672 ありがとうございます。
Thunderbird 等 Mozilla 系アプリは他に使ってないのですが、
再確認したところ、
>>669 のままで動きました。
もしかしたら何か凡ミスをしていたのかもしれません。すみません。
しかし、
>>669 と同様のスクリプトでも Leeyes だとうまく動きません
具体的には、フォルダモード(Ctrl+N)でフォルダを開いてる状態で、
そのフォルダに画像ファイルを移動しても、自動更新が無効だと反映されませんが、
これをバックグラウンドのまま、手動で反映させるために、以下のようにすると、
#r::
IfWinExist, Leeyes -
ControlSend, , {F5}
Return
Leeyes がバックグランドだと、Win+R しても F5 が効かず、
Leeyes がフォアグラウンドだと、Win+R すると、F5 が効きます
ControlSend を WinMove, , , 10, 20, 380, 380 に変えると WinMove するので、
他のウィンドウに命令が行ってることもないと思います
>>674 ちなみに、自動更新を有効にすればいいと思うかもしれませんが、
それだと移動したファイルが一覧の最後尾に追加され、自動ソートされないので、
AHKで他の操作と同時に F5 を呼び出したいと思ってます
フォアグラウンドじゃないと効かないアプリは割とある
対象を特定することで動く場合もあるが
アプリ側で非アクティブ時は無視するように作ってるとしたらどうにもならない気がする
>>673 MouseGetPosとかWinGetとか Dllcall()でハンドル取得API呼び出しとか
一手間ニ手間かける必要あり
面倒って書いたのはそういう意味
>>674 凡ミスが原因の可能性あり
Leeyesのウィンドウタイトルをよく確認してみるといいよ
Leeyes<space>-<space> (半角スペースを<space>と記述した)
ではなく、
Leeyes<space><space>-<space><space>
が正しいLeeyesのウィンドウタイトル
少なくともこちらの環境ではそれで問題なく動作した
流れに乗って質問。
ControlSend,ahk_parent, {F5}, ahk_id %hwnd%
っていう記述をたまに見かけるんだけど、ahk_Parentなんてどっかに説明あったっけ?
>>673 流行らせるページより
>コントロールのウィンドウハンドルは、MouseGetPos、WinGet、ControlGetコマンドや、DllCall()関数による各種APIの呼び出しによって取得できる。
モディファイアキー(シフト類)+アルファベット+アルファベットなど
トリプルコンビネーションキーっていまでも使用できませんか?
過去質問したときに5行ぐらいのスクリプト書いていただいたんですが、
それを設定すると、それに含まれる二つのコンビネーションが潰れるので
結局わがままながら使用しなかったという記憶があるのですが。
>>680 Lじゃないほうの英語ヘルプにも書いてある
>>677 確認し直しましたが、うちの Leeyes Ver 2.6.1 はスペース1個でした
実際、「Leeyes<space>-」で WinMove できてますし、
「Leeyes<space><space>-」だと WinMove できませんでした
>>676 > アプリ側で非アクティブ時は無視するように作ってるとしたら
この可能性も考えましたが、結果的には、
ControlSend, TAcvTreeView1, {F5}
とすることで、うまくいきました
>>673 に関連して、解決に至った過程をメモしておくと、
下のようにして、全コントロールに F5 を送信して、
TAcvTreeView1 に送ればいいことがわかりました
WinGet, cList, ControlList
Loop, Parse, cList, `n
{
MsgBox, 4,, Control #%a_index% is "%A_LoopField%". Continue?
IfMsgBox, No
Break
ControlSend, %A_LoopField%, {F5}
}
MsgBox, %cList%
>>683 なるほど確かに。WinMoveできていたんだったね。誤ったアドバイスをしてしまったすまない
どのControlを対象にしたほうがいいのかはこれまでも悩ましい問題だったから
そのチェック方法は様々な場面で使えて便利そうだ
PC買い替えで64bit版AHK_Lに移行中なんだけど
秀丸上でIME_GET()の値が取れなくなっちゃった
DllCall("GetGUIThreadInfo") で値が取れなくなってるっぽい
ControlGetで取得したコントロールハンドル突っ込んだら一応解決したけど
64bit版でGUIThreadInfoを取得する方法はないのかしらん
lp〜はポインタ構造体だからx64だとポインタ変数の示す領域に8バイト確保されてないと
便乗して質問します
autohotkeyにしか触れたことがなくて
ポインタとかいまいちピンとこないのですが、
どういうものを読めばそのポインタを自在に使えるようになるでしょうか
>>687 ポインタ自体はC言語勉強したらいいんだけど、API叩くとなるとWindowsプログラミングの作法的なものも知らないといけないから
真面目に勉強しだすと泥沼にハマるかもw
>>688 JAVAもC#も意図的にポインタ隠蔽してるんだし
もう変数の住所みたいな表面的な理解でいいような気がする
>>686 d
HANDLE(4バイト) → Ptr(8バイト)になるってことか
明日から旅行なんで帰ってからじっくり取り込むわ
ポインタは int(32bit)と書いてあるテキトーなサイトもあるので注意
まぁ、32ビットの世界じゃ間違いじゃないんだけどx64だと大違いなんで
個人的偏見でいうと、hspとかvbの解説しているサイトで多い感じ
692 :
名無しさん@お腹いっぱい。:2012/08/14(火) 13:30:41.78 ID:UVTxMy1z0
任意のタイトルバーが変わった時に、指定の文字の場合、そのウィンドウを全面表示させるスクリプトを考えています。
基本できているのですが、「任意のタイトルバーが変わった時」はタイマーをしかけています。
もっとクールな方法をといろいろ探して以下のサイトに出会いましたが、
タイトルバーが変わった時のイベントが分からなかったので断念しました。
なにかいい方法はないでしょうか?
監視をAutohotkey(SetTimer や Loop 等)でするか、
他で監視するかの違いだけなんじゃないの?
そこまで気にする必要はないんじゃないかと思うのはオレだけですか。
以下のサイトって?
695 :
名無しさん@お腹いっぱい。:2012/08/14(火) 14:22:45.07 ID:UVTxMy1z0
hogeさんとこか
windowsのイベントフック呼び出してるだけだしタイトルバー変更通知とかはないんじゃないかね
あったとしても RegisterCallback()でゴニョゴニョするのはSetTimerよりよっぽど面倒だと思うよ
ぶっちゃけタイトルチェックなんてポーリングで十分だし、Coolなやり方とやらに
変にこだわってないでできる方法でやったらいいと思う
WinGetText, Output
StringSplit, Var, Output, `r`n, %A_Space%
Var0が要素数ですが、要素数から2を減じた要素を指定したい場合は
どうすればいいのでしょうか?
例)Var0が20のとき、Var18を指定したい
temp=Var0
temp:=temp-2
msgbox, % Var%temp%
StringSplit も RegExMatch() の O オプションのように、(疑似ではない)配列で返してくんないもんかねぇ
分割した要素の分だけしか上書きしないんで気持ち悪い
str = あ|い|う|え|お
StringSplit, arr, str, |
MsgBox, %arr0%`n%arr5%
str = あ|い|う
StringSplit, arr, str, |
MsgBox, %arr0%`n%arr5%
メインキーボードに既にテンキーが存在して、それとは別にUSBテンキーのみにキーを割り当てることってできますか?
すまん自己解決できないのね
すでに言ってるように基本的にはできないけれど
NumLockオンオフで使い分ければ数字キーのみ別に割り当てられる
あとテンキーに割り当てたいだけならDresskeyが使いやすい(AHK製)
http://ahk.wktk.so/
どうやってもaltを組み合わせたsendが実行できないアプリがあるんですがなんとか動かす方法無いですかね?
Toon Boom Animateというアプリなんですが、これがどうやっても
Lwin::send {Alt}{Ctrl}
のキー操作をうけつけてくれないんです。
アプリ側でaltの処理が特殊な設定になってるらしくて、Toon Boom側が制御しているキーボードショートカットの変更ですら
デフォルトでaltを組み合わせて使うキーボードショートカットは変更できないという謎仕様です。
こういう変なアプリをAutohotkeyで制御したことがあるという人はいませんかね。
その何とかってソフトはまったくわからんが、
その書き方だと、
Send, {Alt Down}{Alt Up}
Send, {Ctrl Down}{Ctrl Up}
ってなるけど意図通りなんだろうか
すみません
loop
{
}
return
でループさせた場合、特定のキー押下でループ停止(blake?)する方法を教えて下さい
loop
{
if (GetKeyState(特定のキー))
Break
}
return
LoopX:=True
While(LoopX) {
Tooltip, %A_Index%
Sleep, 250
}
#If (LoopX)
Space::LoopX:=False
#If
>>707 だと GetKeyState 以外の処理に時間がかかる場合にキーを拾えない可能性がある
補足
前判定でいい場合は Loopよりwhile 使うほうがスマート
while GetKeyState("特定のキー")
{
}
return
おっとリロってなかった
タイミング重視だと708のほうがいいね
ただ人力手動キー押しだと最短でも300msくらい
また、キャンセル処理など意図的に止めたい場合は自然長押しか連打になるので
用途によっては可視性優先でも問題ない場合もある
その辺は使い分けで
ありがとうございます。
少し足りませんでした。
^z::
loop
{
send, a
sleep 100000
send, [Enter]
}
return
実際とは違いますが内容はこのような感じです。
これをスリープ中問わず指定したキー押下でスクリプトを停止させたいです。
Sleep中は時間立つまで戻ってこれないからその書き方で即時Abortは無理
sleep,100を1000回繰り返して都度Breakチェック
2重ループにするかタイマーで別スレッドにするかはお好みで
スリープ復帰後キャンセルで取りこぼしさえ防げればいいのなら>708方式で
Sleep直後の行にBreak判定を突っ込めばおk
かつてのMouseGesture使わせてもらっているのですが
L(ANSI)にしたらやはりおかしな事に。
設定ウィンドウが崩れてしまいます
なんでANSIにしたの
なんとなく互換性が高そうと思ってw
>>712 遅レスだがキー押下と同時にスリープやめるなら、以下のようにやれば二重ループは不要。
100秒間キー押下を待つったけど結局押されなかった(ErrorLevel := 1)になって再度ループ。
ErrorLevel := 1
While(ErrorLevel) {
Tooltip, %A_Index%
KeyWait, Space, D T100 ; 単位は秒
}
MsgBox, Abort!
ErrorLevelに代入とかもうね
ん?変なことしてるかな?
突っ込みどころがあったら教えてくれ
>>705 書き方おかしかったですかね。
alt down、ctrl down と
alt up 、ctrl up
と分けて書いたらうまくいきました。どうもです。
本当にそのレベルだったのかよ!
複数のahkファイルを起動中にタスクトレイアイコンがその数だけ表示されるのを1つにまとめられない?
何個もあるの鬱陶しくて
メインの一つ以外notoray付けて、メインのトレイアイコン右クリックでahk.exe一覧表示とか
右クリックメニューに一覧表示させるのをそのメインの.ahkファイルに書くってことですかね
めんどくさいので全部#NoTrayIcon付けてEverythingで検索することにしました
どうせReloadかEditくらいしかやってないんだしこれでいいやぁー
任意のウィンドウ(ahk_class XXXX)で
ホットキーを全て無効にするにはどうすればいいですか?
すべてのホットキーを#IfWinNotActive ahk_class XXXXにまとめるぐらいしか思いつきませんでした
もっとスマートな方法ないかな
任意のウィンドウがactiveならsuspendを使い、
そうじゃなければsuspendを解除する、
というのを100ミリ秒毎にloopで回せばよさげ、と思いついた
>>717 遅レスで申し訳ない。
sleepをkeywaitに置き換えてwhileで停止できるのを確認。
ErrorLevel := 1
While(ErrorLevel) {
send, a
KeyWait, Space, D T100 ;
send, [Enter]
}
return
さんくす。
^i::KeyMap:=!KeyMap
!down::Send, % KeyMap ? "{down 5}" : A_Thishotkey
このコードをIEやIronで実行すると、Ctrl二連打で呼び出しにしているOrchisが出てくるんですが何故でしょう?
↓を離してからすぐにAltを離さなければ出てこないのですが……コードにCtrl入ってませんよね
#MenuMaskKey を熟読、過去レスも検索
半分くらいしか理屈が分かりませんがとりあえず問題解決できました
誘導ありがとうございます
{Blind}について質問です
下記(1)のようなカーソル移動の場合、{Blind}がなくてもカーソル移動が可能ですがなぜつけるのでしょうか?修飾キーの自動復元の説明が難しくてわかりません。
{Blind}が無いとカーソル移動が出来ない場合があるのでしょうか?今、(2)のようなキーボードのリマップをしているのですが、関連がありそう気になります
(1)sc07B & I::Send, {Blind}{Up}
{Blind} のあるなしのスクリプトの双方で、
{Shift} も同時押ししながら無変換使ったカーソル移動してみれ
そういうこと
734 :
名無しさん@お腹いっぱい。:2012/08/23(木) 12:58:17.70 ID:sHA/lmEA0
>>733 違いがわかりました。ご丁寧にありがとうございます。下記が(2)になのですが、※修正後→Send, {Blind}{)}
PgDn & F12::
modifiers := get_modifiers()
Send, %modifiers%{)}
Return
get_modifiers() {
modifiers := ""
if (GetKeyState("Shift", "P")){
modifiers = %modifiers%+
}
return %modifiers%
}
一つのホットキーで実行中の3つのahkファイルをサスペンド(トグル)するのは無理でしょうか?
~付きでやればあるいは
1つのahkのホットキーから2つ目以降のサスペンド用キーを送信すれ
指定時間内に設定したキーAを複数回入力されたら設定したキー入力Bを返す、この時キーAの入力はPC上には反映されない
といった感じのスクリプトを作ることは可能でしょうか?
具体的にはNum1を1秒以内に2回入力すると数字キーの1を返す、この時Num1の入力はPC上に反映されない、みたいな挙動です
ホットスリングのBオプションのようなBackspaceでキーAの入力削除、といった形ではなく入力自体を無効化したいのですが、そのような方法が見つかりませんでした
$Numpad1::return
でフルキーボードの横についてるテンキーとかなら普通は無効化されるはず
独立テンキーだと最近はNumLock非連動タイプのものが多いので
Numpadと違うコード吐いてる可能性あり
= () , 00 000 などの普通のテンキーにはない拡張キーは
複数キー(Alt+十進テンキーコード)を組み合わせて投げてくる
まずは KeyHistoryで確認してみ
なぜわざわざ複数のahkファイルに分割するんだろうか
単一にまとめればいいのに
単一にまとめると相互干渉するんだが、解決出来ないので分割してる
ということは公開されてるahkファイルでも使ってるんかね
みんなは何を使ってるんだろう
autohotkeyのデザインをあしらった壁紙ってのありませんか?
ごちゃごちゃしてギトギトした色のものは嫌なのですが、
シンプルで見やすいのが希望なのです。
基本的に闇雲にコピペしない派なんで、干渉しなようにいじっているうちに原型を無くし、
最終的にはアイデアだけもらったライブラリとなり lib フォルダに放り込まれる
壁紙てw
分割してても干渉するんですが……
ウィンドウ指定はちゃんとしてるんだけどなぁ……
分割して干渉しないのは、変数やサブルーチンくらいなもんだ
統合して、ホットキー定義が重複して動かないってのなら分割したまま複数動かしても
あまり意味がない
AutoHotKey_Lである特定の条件でアンダースコア出力が \ に化けて困っています。
やりたいことは単に"_yyyy_MMdd"という文字を出力するのみ。
WinXP SP3端末では正常動作。
WinXP-(RDP接続)->Win7(32bit)も正常。
WinXP-(RDP接続)->Win7(64bit)のケースで、"\2012\0826"のように化けてしまいます。
(長すぎるそうで、、続く)
>>750です。(つづき)
仮想キーやスキャンコード指定など試しましたが、NGでした。
直接問題のWin7(64bit)機にAHKLを導入して試したところ、こちらは問題ないようです。
解決策があれば教えていただけるとありがたいです。
事象はわかるけど、
何をやろうとして、どこにAHKがあってしてどんなスクリプトを動かしているかがまったく書いてない
>>752さん。Replyどうもです。
すみません。
目的は単にファイル名に年月日情報を付けるといったものですが
RDP接続経由で渡らないキーがあるということに困っています。
AHKLは、WinXP機(RPDのClient側)のみで動かします。
Host側はWin7(32bit機と64bit機の2台)です。
(つづき)
::_td::
FormatTime, CurrentDateTime,,_yyyy_MMdd
SendInput %CurrentDateTime%
(以下、略)
return
どうもキーのシフト側は渡らないようです。
"(ddd)"という書式は、8日9 と出力されてしまいます。
※64bit機へのRDP経由でなければ発生しません。
L ってひとくくりに言われても、A32.exe / U32.exe / U64.exe の3種ある
x64 OSではどれでも動くから何を使ってんのか書かないと判別できない
特に文字化け問題なら、ANSI版とUNICODE版どっち使ってんのか、
スクリプトのファイル形式がS-JIS(ANSI)とUTF-8どっちなのか、そこはっきりさせないと
あとAHK_Lのバージョンもわからない
AHK乗ってるのはXP機か、てことは書いてないけどたぶん32bit版か
なら A32.exe / U32.exe のどっち使ってんのか書いて
>>750,754です
---------------------
AHKL v1.1.08.01 (Helpより)
HKCR\AutoHotkeyScript\Shell\Open\Command
"C:\Program Files\AutoHotkey_L\AutoHotkey.exe" "%1" %*
---------------------
(つづき)
(つづき)
これまで本家AHKを使用してきましたが、これを機にAHKLに切替えようと、U32を
意識し導入したつもりですが、関連付は上記exeのようです。
ScriptはUTF8に書き換えました。日付書式(ddd)は正しく漢字を返すようです。
キーマップの状態によってカーソルの色を変更することは出来るのでしょうか?
検索かけても「カーソル位置の色を拾う」の方が引っ掛かるし、リファレンスにも見当たらなかったです
しかし何でも出来るAHKの事だから手があるのではないかと思っています
簡単ではないし完璧でもないことを踏まえた上で、
なまずIME のソースを読むとヒントあり
読む気がないなら諦める
SetCaretColorね…
あれは、XP時代に活用してた。
パッと見で努力と見返りが(当方にとっては)釣り合ってなさそうと感じました……やめときます
情報ありがとうございます
64bit環境でThumbRemapを試している方が前々スレ辺りから居ますが、
ALPSで試している方居ますか?
Win7、LIFEBOOK SH76(ALPS製pad)、AHKVer1.0.48、ApntEx.exe起動済 で下記エラー
a label must not point to a function.
Line#
---> 001:{
改変するにも勝負の土俵にすら立てていないのが悔しい
心当たりのある方、アドバイスをもらえませんか
何でも出来るなんていうからできるまでゴリゴリやる覚悟かと思ったら、あっさり諦めててワロタ
>>758 Lは A32/U32/U64のうち、インストール時に選択したタイプが AutoHotkey.exeとしてコピーされるぽい
インストールフォルダ開いて、exeのファイルサイズや更新日時の比較でどれが導入されてるか判別可能
XP機1台、Win7x64機2台あったから試してみた
AHKL v1.1.8.1
RDP v 6.1.7600.16722 (C:\WINDOWS\system32\mstsc.exe)
・XP SP3 x86 (ThinkPad W500) → (RDP) → Win7 x64 (AsRock Z77 PRO4-m)
・XP SP3 x86 (ThinkPad W500) → (RDP) → Win7 x64 (ThinPad x230T)
>754のスクリプトを ANSI / UTF-8(BOM付) / UTF-8(BOMなし) でそれぞれ保存して
XP機のAutoHotkeyA32.exe / AutoHotkeyU32.exe にドロップして実行
(実行前に全PCの常駐AHKは終了済。また直前試行スクリプトの常駐状態も必ず確認し終了させ
他スクリプトの影響は完全回避)
スプリクト3種*exe2種 の 6系統すべてホストx1、クライアントx2 で正常に動作したよ
ちなみにx64機上で直接AHK起動した場合はどうなるの?
AHKはインストールしなくても動くから、XP機のAHKフォルダコピーしてきてU32.exeにスクリプトドラッグして試してみ
>>761 SetCaretColorってVista以上では使えなかったっけ?
それとも今は代替案使ってるんだろうか
>>750,758です
FileStamp確認しました。U32ですね。
AHKL v1.1.8.1
RDP v 6.0.6001.18589 (C:\WINDOWS\system32\mstsc.exe)
・XP SP3 x86 (ThinkPad SL510) → (RDP) → Win7 SP1 x64 (ThinkStationS10)
うちのはRDPがちょっと古いですね。
>>751 であげた通り、x64機での直接起動では問題ないです。
>>764さんの環境では動くんですね。う〜ん何がいけないんでしょう?
>>763 Alps は DllCall のポインタを直すと動きます。
>>765 使えるけど、独自キャレットが増えて、用途が狭くなった感じ。
XPってより、他アプリの環境により使わなくなった。
起動してても問題ないけど、汎用性が低くなったから・・・
類似ソフトあるけど、SetCareColorほど使い勝手が良くないから使ってないかな。
>>767 アドバイスに合わせ直してみていますが、
(何故か)エラーは出なくなったものの、ウンともスンとも反応無いです
DllCall("C:\Windows\System32\Vxdif.dll\IOCTL_SetMouseMonitor","UInt",myhwnd,"UInt",1,"UInt",0,"UInt",0xBCD,"UInt")
ちなみにNewtonPadも動かないのですが、
このパソコンだとそもそもが動かないなんてことは無いでしょうか?
hwnd は ptr
起動しているすべてのAHKにメッセージ送るとき、
下記のようなスクリプトにしてるんだけど、
PostMessage, 0xCC99,,,, ahk_ class AutoHotkey
だと、自AHKにしか送られて来ないんだけど、何故かわからん。
スマートなスクリプトにしようとしたら、はまってしもうた…
DetectHiddenWindows, On
WinGet, ahk_id_list, list, ahk_class AutoHotkey
Loop,%ahk_id_list%{
list := ahk_id_list%A_index%
PostMessage,0xCC99,,,,ahk_id %list%
}
DetectHiddenWindows, Off
772 :
767:2012/08/29(水) 12:15:25.94 ID:drwxfVcD0
>>769 DllCall("vxdif.dll\IOCTL_SetMouseMonitor", "Ptr", myhwnd, "UInt", 1, "UInt", 0, "UInt", 0xBCD, "Ptr")
773 :
763:2012/08/30(木) 01:11:11.60 ID:as/L5gcR0
>>770,772
本当にありがとうございます
まず、指摘の通り書き換え → 従前のエラー(a label must〜)復活
なので、ThumbRemap.ahkの、Thumb_Init_Driver()呼び出し(初期処理)の直後にThumb_ALPS.ahkの内容をコピペ
→ エラーは出なくなったが、キーの反応無しorz
Apoint.exe、ApntEx.exeは動いているし、Vxdif.dllもフルパスで書いてみましたが同様
コードを1行ずつ読んでいますが、問題は無いように思っています
- Dll・関数がみつかったか、引数・戻値の型はあってるのかは、ErrorLevel
- 引数の値が妥当なものかどうかは、A_LastError
を見りゃある程度わかるんだから「あってると思う」なんて曖昧な書き方すんな
>>774 確かに
ごめんなさい、親切に甘えてました
問題点の切り分けくらいは自分でやってきます
>>771 自己レス。完全なる勘違いか。
> WinTitleに「ahk_id 0xFFFF」を指定すると、存在する全てのウィンドウにメッセージを送信する
この一文から、条件に一致するウィンドウ全てにメッセージを送るものだと勘違いしてた。
1つだけに送るんだね。
キーマップ切り替えの一番冴えたやり方募集中
確実で(AとB、どっちなのか間違えない)、押しやすくて(ホームポジションに近く、使う指も少ない)、覚えやすい(印象的で、タッチ数が少ない)と良いです
目下考えてるのは、
一、Vimのノーマルモード、挿入モードの如くiとEsc
一、空いてる二つのCtrl+〜にAとBをそれぞれ割り当て
一、特定のキーでトグル
一、特定のキーを2ストロークキーの始動キーにしてAとBに分岐
ちなみに変換/無変換はIMEの切り替えに使用中です
切り替え方式は好みと慣れじゃないかね
無変換のdown中しかキーマップ変えない
キーを離したらデフォルトに戻るので間違うことがないため
押下状態に至るまでの連打の回数でキーマップ変えてる
押す回数に応じた音階変えたBeepならしてる
>>750,766で、64bit機へのRDP経由でHotStringが渡らない現象で質問したものです。
まだ解決していないのですが、AHKLに変更してから別の現象が発生しています。
#IfWinActive, .* - 受信ボックス - Lotus Notes
(中略)
return
#IfWinActive
タイトルに日本語を含んでいると反応しなくなってしまいました。何か見落としているのでしょうか?
そのスクリプトで、
MsgBox, 受信ボックス
とかやってみたかえ?
A_TitleMatchMode 、A_TitleMatchModeSpeed
あたりをチェック
自分も最近移行組なんで未検証なんだが
Unicode版だと RegExもダメ文字完全対応なんだっけ? 「`」 とかも
>>750,779です
Script(UTF-8) ------------------------
::mymsg::
Msgbox,TestMessage
Msgbox,受信ボックス
return
Result ------------------------------
TestMessage
(虫腕)嶺ソ。(糸間)(小奥)ャ(糸雲)ッ(糸雲)ケ
** ()内は2byte文字、カタカナは半角
予想通りの結果ですが、どう対処していいのかわかりません。(本家では動いていたのに)
ご教示お願いします。
取り合えずテンプレ全部読め
>>781 ダメ文字は無い。
ただ、文字エスケープは別の話と分かってる上での話だが
>>781さん
A_TitleMatchMode=RegEx
A_TitleMatchModeSpeed=Fast
Slowに変えてみましたが変わらずです。
>>782 utfにbomをつけてる?
最新のバージョンではbomなしだと文字化けした気がする
>>785さん、皆さん
お手間とらせてすみませんでした。 BOMというものを知りませんでした。
普通に秀丸のSaveDialogにありました。(お恥ずかしい)
ありがとうございます。
あとは、64bit機 RDP越えの問題が解決すればいいのですが、、、
SJISで普通に文字化けせず、UTFだと文字化けしてしまう罠
>>777 というかどういうタイミングでキーマップを切り替えたくなるんだろう
大量にキーバインドを使いたいエディタ上ならそれこそVimやら使えばいいし
それ以外の場面なら普通にちょこちょこホットキー付与するだけで十分な気がするが
>>788 えーとですね、両手が使える状態のキーバインドと左手のみでフルコントロール出来るキーバインドを用意してるんです
今どっちなのか分からないと誤操作であらぬ画面に行ってしまったりするもので……
左手フルコントロールはさすがにその考えを改めたほうがベターな気がするけど
左手のみでもある程度の操作ができるようにしたいだけなら左手デバイスでも素直に使ったら
Dresskeyでテンキー使うとか
オナニー用途か…
>>789 今どっちかわからないなら、
どちらかのモードに変更するキーをそれぞれ設けておいて
(toggleするキーを用意しないってこと)
それを癖のようにおせばいいと思うよ
>>792 二番目ですね
切り替えだけに二つ取られるのもなんですが確かにそれが最適かもしれません
>>4 このChangekey使ったやり方、神だな。まじでほんとにすばらしくいいわ。
hCur:=DllCall("LoadCursorFromFile",Str, "my.cur")
DllCall("SetSystemCursor", Uint, hCur, Int, 32512)
上のようにカーソールを変更した後
元の標準矢印のカーソールに戻したいのですが
どうすればよいでしょうか? よろしくお願いします。
元のを再指定すりゃいいんじゃない
元のは何とかは聞かず自分で調べること
バイナリファイルを読み込んで正規検索、ひっかかったらルールに則って書き換え
ってのを繰り返すマクロ組もうと思ってるんだけど
Autohotkeyでバイナリファイルを編集するにはどうすればいいんだ?
pythonでよくね?
pythonさわったことないよ!
FileOpen でバイナリモードで開いて、ごにょごにょすればいい
ちなみに正規検索ってのが正規表現検索のことなら、バイト単位での処理はできないと思ったほうがいい(Unicode版の場合)
AHKだとファイル処理は面倒くさい割りにできることが少ないんで、
他の慣れた処理系があるならそっちで書いて呼んでやればいいかと
MouseGestureLで軌跡有効時に
中クリックをMG_Abort()でスルーさせてドラッグしてるときだけ
軌跡を無効にすることってできるんでしょうか?
MB_始動のジェスチャが無ければナビ・軌跡は表示されません。
有ればMB_Hoge_の最初にMG_StopTrail()を割り当てれば軌跡を
一時的に非表示にできる。
MG_NaviEnabled := 0 , 1でナビ表示切り替えも可能。
804 :
763:2012/09/04(火) 18:01:04.02 ID:h/YIs6JO0
>>774さんのアドバイスに合わせ調査しました
DllCall直後の ErrorLevel 及び A_LastError
ErrorLevel -3/A_LastError 0 でした
vxdif.dllのフルパスを入れてもアクセスが上手く行かず
805 :
続き:2012/09/04(火) 18:06:03.27 ID:h/YIs6JO0
vxdif.dllの中身にIOCTL_SetMouseMonitorがあること、
myhwndに中身が入っていることは確認しているので、
このドライバに正しくアクセスさえできれば問題解決しそうなのですが、
これはもはやスレ違いでしょうか
AHK_L x64 を使ってるんだよね?
807 :
763:2012/09/04(火) 23:30:16.19 ID:vQcoC/UB0
無駄にスレを流してしまいました
>>806 素のAHKをずっと使っていました(StrPとPtrの違いがわからずポインタの意味も不明でした)
指摘を受けAHK_Lのリファレンスを見てPtrを理解、改めてAHK_Lで試したら正常動作しました
大変失礼いたしました Resくださった方ありがとうございます
誘導されてきました。
CapsLock→大文字・小文字切り替え
Shift+CapsLock→無反応
のPCを使っています。これを、
CapsLock→ランチャ(bluewind)の起動
Shift+CapsLock→大文字・小文字切り替え
こう動作するように変えたいのです。CapsLockを
無効にするだけなら簡単なのですが。何か方法はないでしょうか?
以下、自分で試してみた結果です。
レジストリ変更でCapsLock→F1
bluewindの呼び出しキーをF1に
ahkでShift+F1→Send,{CapsLock}
これをやってみたところ、ランチャの呼び出しはできますが、Shift+CapsLockをしても
日本語入力が有効になるだけでした。
何かうまい方法が無いでしょうかね。
+f1::
if GetkeyState("CapsLock", "T")
SetScrollLockState, AlwaysOff
else
SetScrollLockState, AlwaysOn
return
CaspLockキーの押し下げ状態がいらないならわざわざレジストリ変更する必要はない
sc03A::
; send, {bluewind hotkey}
return
+sc03A::
if getkeystate("capslock", "T")
setcapslockstate, off
else
setcapslockstate, on
return
あらかじめ指定した座標の範囲をキャプチャ(クリップボードにコピーするだけで可)するのは
AHKでは無理でしょうか?
>>811 Screen clipping.ahkというのを利用すれば
たぶん出来る。
使ってないけどScreen clipping.ahkは
http://www.autohotkey.com/community/viewtopic.php?t=50813 のDownload:
- Radial menu v4.zip (portable application)
の中のRadial menu v4\Utilitiesにあります。
Screen clipping.ahkこれを起動して見れば分かると思うけど,
Ctrlを押しながら座標を指定するスクリプトを作れば
コピーできます。1から作るにはScreen clipping.ahkを研究すれば出来ると思います。
GUIで透明なフォーム作って X1=100 Y1=100〜X2=400 Y2=400 に配置して
Send,!{PrintScreen} とか?
または
1.Send,{PrintScreen}
2.クリップボードから画像取り出し
3.任意範囲のみトリミング
4.クリップボードに書き戻し
2〜4の間はコマンドラインでパラメータ指定できる画像編集ソフトに投げる。
ImageMagickとか探せば結構あるんじゃね?
(ImageMagickがクリップボードの画像に対して操作できるのかは知らないが)
>>814 有難うございます。凄いですねこれ。
でもなぜか私の環境L(v1.1.08.01) Win7 64bitではCtrl+マウス→緑色で範囲選択できるのですが何度やってもクリップボードは空でした・・・
>>815 有難うございます。良さそうなのですがこれもクリップボードは空でした #s::CaptureScreen("100, 100, 400, 400", False, 0)
??私の環境がおかしいのかも。皆さんの環境では動くのでしょうか
>>816 なるほど!超賢いですね。アイデア有難うございます。やってみます
想定している用途はブラウザのウィンドウ内の特定の場所をコピーするという物なので相対座標です
Gui, Show, X100 Y100 W300 H300
WinSet, Transparent, 0, ahk_class AutoHotkeyGUI
Send !{PrintScreen}
とやってみたら、透明化にならないGUIがキャプチャされてしまいました(^^;)
モニタ上では透明になっています。
Altなしの Send {PrintScreen}を送るとちゃんと透明になっていますが・・・
どうすれば透明なままキャプチャできますか?
Alt+PrintScr はアクティブ窓の内容をクリップボードにいれるんで、
透明GUI撮っても下のレイヤーは取得できないよ
ライブラリ使うのが面倒or動かないならスクリーンショットユーティリティ叩けばいい
自分は似たような用途ではirfanviewをコマンドラインで呼んでる
>>817 >>815をAHKLで動かす場合、DllCallやNumputを書き換えないと使えないと思う
無印だと問題無く動くよ
ヘルプ読みながらアプリの操作したいのにヘルプウィンドウが邪魔なんで背面に送りたい。
ヘルプウィンドウ(hh.exe?)がアプリの前面に出しゃばって邪魔なアプリ(例: Flexible Renamer)を
http://goo.gl/2BHz1 を参考にして「ahk_class HH Parent」を指定したスクリプトを作ってみたのですが
変化なしでした。AlwaysOnTop は多分OS全体での最前面表示なんだろな。
zオーダーがヘルプ・アプリの順で固定なのを解除したいです。アドバイスお願いします
F1やメニューからヘルプ呼ぶんじゃなくて、
exeのあるフォルダの .chm 直接起動すればいいじゃないかな
823 :
821:2012/09/12(水) 00:46:11.60 ID:azcPIRsl0
>>822 その発想はなかった。完璧です。ありがとうございます。
824 :
名無しさん@お腹いっぱい。:2012/09/12(水) 13:51:07.41 ID:fit+XEaNO
826 :
名無しさん@お腹いっぱい。:2012/09/12(水) 14:39:38.73 ID:fit+XEaNO
Classそのものはサポートしてないと思うが。
functionやオブジェクトで一部それっぽいのがあるだけで
>>829 へー、AHKLにclassの機能が追加されていたんだ
知らなかった
クラスはあるいけど、
クラス定義=振る舞いを定義するインスタンス生成ってことを分からないと罠に嵌まる
コンストラクタもどきはあるけど、あくまでインスタンスのクローン
クラスの継承って概念はなく、基準(base)オブジェクトの振る舞いを利用するって感じ
なのでメンバ変数を弄ってるつもりが、基準オブジェクトを操作してることになったりする
構文的にはjava系統っぽいけど、挙動はjavascriptに近い印象
ついでに言うと、オブジェクトの機能はクラス定義のできる前から進歩していない
結局は関数に自分自身と引数を並べて invoke してるのは同じで
メソッド用の関数を用意する手間が省けるくらい
(とはいっても省ける手間は膨大だけど)
833 :
名無しさん@お腹いっぱい。:2012/09/14(金) 21:43:38.32 ID:v+jtKif6O
みなさん、オブジェクトとかCOMを
ふだん活用できていますか?
aからzに長押し時に大文字になるようにしたいのですがkeywaitだと2つのキーをほぼ同時押しすると後に押したキーが先にsendされます なにかアドバイスが欲しいです
同時押しするとキー状態変化待ちのスレッドが複数できる
>>7 みればわかるが、同時に動くスレッドは1個で
あとから始まったスレッドの処理が優先されるからそうなる
これを解決するのは結構面倒で、
長押しの判定方法とキー発行タイミングによってやりかたが変わってくる
キーdownとupにホットキーを設置してdown時の時間記録し、
up時に時間を評価してキー発行するのが妥当だろうけど、
キーリピートのことを考慮する必要があって中々面倒
キーup前でも一定時間たてばキー発行するケース(keywaitのTオプション利用)だと、
一定時間経過したかどうかの判定をスレッド止めずに行うにはタイマーが必要で、
対象のキーが多いとなると、これもまた厄介
上記以外でもコマンド数個でシンプルにとはいかないだろう
836 :
名無しさん@お腹いっぱい。:2012/09/15(土) 20:00:22.77 ID:COoqJWeN0
>>835 dさんの長押しime起動2を使用したのですが、
dさんはahkと相性が悪くて自作しようと思いました。
キーup前でも一定時間たてばキー発行したいのですが、やはり複雑そうですね、、
837 :
名無しさん@お腹いっぱい。:2012/09/16(日) 11:36:00.49 ID:Ah/692xO0
指定キーを押すと
「Aキーを送る、1秒待つ、Bキーを送る、1秒待つ」 という動作を繰り返し
もう一度指定キーを押すと繰り返しをやめる
そんなスクリプトがあれば教えてください
人を利用することしか頭にない
そのまんま置き換えればいいだけ
>>837 c::
keywait, %A_Thishotkey%
flag := flag = 1 ? "off" : "1"
settimer, ab, %flag%
return
ab:
send, a
sleep, 1000
if flag = off
return
send, b
sleep, 1000
return
esc::exitapp
2点教えていただけますか?
1) 以外すべてのキーを表現する方法
a::
Send,a
Return
b::
Send,b
Retnrn
<ab以外なんでも>::
Send,x
Return
<ab以外なんでも>の部分の指定の方法が分かりません。
2) 文字列の選択を解除する方法
C-cを押したとき、選択された文字列をClipboardに入れ、その後選択を解除したいのですが、
その方法が分かりません。Esc以外の方法(Escで解除されないソフト対応方法)を知りたいと
思っています。
以上、よろしくお願いします。
>1) 以外すべてのキーを表現する方法
全部記述するか
loop, n
Hotkey, スキャンコード or 仮想キーコード(16進数で指定)Label
>2) 文字列の選択を解除する方法
カーソルキーをSendすればいいんじゃね
回答ありがとうございます。
1)はやはり簡単な方法はないんですかね。loopのやり方は理解できていないので、
全記述を検討します。
2)はこの方法も考えたのですが、カーソルの位置が変わります。右行って戻すのも
考えたけど、カーソルが行末にあると使えない。DllCall()を使えばできるのかなぁ
と思っていますが、WindowsのAPIが分からず、さっぱりです。
選択範囲の解除だけど、汎用的な方法は無いよ
まずは、地道にウィンドウ毎・入力欄毎にキー操作で解除する方法を調べて、
その結果通りになるように処理分岐をチマチマ書いていくだけ
その過程でウィンドウやコントロールのクラス名である程度挙動がグルーピングできると思うんで、
効率のいいor保守性の高いコードに変えるのも手
大抵はキー入力(←→)で解除できるけど、
解除後のキャレット位置はエディタによって結構違う
コピー後の選択を解除するオプションを持つものもある
vi系など全く思想が異なるものもある
どれを対象にしてもいくつかのキーやコマンドで事足りるんだろうけど、
それを調べる&検証するのがもっとも時間がかかるし、恐らく終わりがない
(アプリのver upであっさり動かないってこともザラ)
ちなみに dllcall は魔法の呪文ではないよ
「半角/全角」キーを押し下げている間だけ、マウスカーソルを特定の位置(600,0あたり)に持っていき、
離した瞬間もとの位置に戻る・・・というスクリプトを書きたいんですが、
この「押し下げてる間だけ」というのはどう表記すればいいんでしょう。
押した瞬間::MouseGetPos,hogeX,hogeY
押し下げてる間::mousemove,600,0,0
押し上げたら::mousemove,hogeX,hogeY
――って感じになるんじゃないかと考えたのですが
>>848 a::
MouseGetPos,hogeX,hogeY
mousemove,600,0,0
keywait, %A_Thishotkey%
mousemove,hogeX,hogeY
return
通常のキー(aなどのLock系以外のキー)なら↑でいいけど
半角/全角キーは
>>4 のQ1にあるようにF13とかに置き換えないと無理
>>849 すばやい返答ありがとうございます、無事できました!
a_thishotkeyというのは直前キーの変数なんですね、勉強になります
後段については、すでに「変換」キーを「半角/全角」いて、それを押したいので、
>>4の方法は難しそうですね
そこまでこだわりがあったわけではないので、適当に他のキーにマッピングしたいと思います
ちなみにこの関数の用途は、押してる間だけ上置きのタスクバーを表示させる・・・です
長押しと通常押しの区別ってどうやるの?
Esc::
KeyWait,Esc,T0.5
if (ErrorLevel=1){
動作1
}else{
send,{Esc}
}
return
って書くとescapeがループするお;
$Esc::
例えば
F1キーを押して放し、1秒以内にAキーを押すと、Ctrl+Rが入力できるような
スクリプトはどうすればできるのでしょうか?
F1::
Hotkey, a, MyLabel, On
Sleep, 1000
Hotkey, a, Off
Return
MyLabel:
Send, ^r
Return
こんな感じ?
1秒以内にAが押されなかった場合に1秒遅れでF1をSendする必要があるならその処理を追加記述
F1::
KeyWait, {F1}
Input, , T1, a
If ErrorLevel != Timeout
Send, ^r
Return
>>852 できますた
どうしてこうなるのかよくわからんのでフックというものを勉強してきます
やりようがいくらでもあるのが悩ましいところだな
タイマーと#If組み合わせたりする手もあるな
フラグ使って時限キーマップみたいな感じ
複数キーを一括設定できるのと、スレッドが止まらんのがメリットかな
Windows7でのロック状態(アプリを起動したままログオフ)を検知したいんだが良い方法が見つからない!
ImageSearchで出来そうだけど出来れば使いたくないし・・・
お願いします、なにか良い方法無いですか
サイトのURLをゲットするにはどうしたらいいでしょう?
タイトルならWinGetTitleとかでいいみたいだけど、WinGetUrlみたいなのはないんでしょうか?
861 :
860:2012/09/23(日) 12:09:07.60 ID:/UlIQ70R0
自己解決しますた
どうやって解決したの?
簡単に考えればCtrl+L→Ctrl+Cだけど
その通りww
IEとChromeならControlGetTextでとれた気がする
866 :
862:2012/09/23(日) 21:18:36.92 ID:NjkvYQ/60
なるほど
>>854とか
>>855を応用すればダブルクリックの挙動をもっと簡単にできるかと思ったら無理だった
ホワイ?
コードを書きましょう
そしたらきっと適切なアドバイスがくる
>>854だとこうかな?
LButton押してから1秒以内にLButtonでミドルクリック
LButton::
Hotkey, LButton, MyLabel, On
Sleep, 1000
Hotkey, LButton, MyLabel, Off
Return
MyLabel:
Send,{MButton}
Return
通常のクリックが乗っ取られるのは仕方ないとして、なんでダブルクリックも無反応なんだろう
HotkeyはラベルをOn/Offするコマンドじゃなくホットキーを割り当てる設定なので、
Hotkey, LButton, MyLabel, Off
ではなく
Hotkey, LButton, LButton, On
じゃないかと
でもってSleep中はホットキー(LButton)自体が動かなくなる仕様なので[要検証]、
MyLabelが実行されることは無い
と推理
LButtonにはすでに「LButton::」が割り当てられてるんだから
重ねて別のラベル割り当てても動かないよ
「LButton::」を使わず普通のラベルにして最初にHotkeyコマンドで割り当て、
「MyLabel」をOnにする前に最初のラベルをOffにする。→MyLabelの中で戻す。
もしくは
>>857の言うようにタイマーとフラグを使うべし。
>>871 訂正します
LButtonにはすでに「LButton::」が割り当てられてるんだから
重ねて別のラベル割り当てても動かないよ
>>857の言うようにタイマーとフラグを使うべし。
ダブルクリックは結構めんどいよ
とくに、シングルクリックやドラッグ殺さず、
かつダブルクリックのみ乗っ取り置換となると
Q-Dir_Portable_Unicode 5.36においてキーリマップをしようとしたのですが一部Sendコマンドが効きません。
効くものと効かないもので差が分からないのですが原因はなにが考えられるでしょうか?
当方の環境はVista x86 v1.1.08.01です。
こちらにahkファイルをうpしてありますので確認お願いします。右側にコメントアウトでダメって書いてあるのが効かないコマンドです。
ttp://www1.axfc.net/uploader/File/so/83980
エクスプローラの表示切替ボタン(下記スクショの赤枠部)を^iで押したいんですがどう取得したらいいんでしょう?
WindowSpyで見ても座標でしかいけそうにないと思うのですが、ウィンドウを最大化すると時折下記スクショのようにタイトルバーが消失することがありy軸が確定できません
座標でやる場合タイトルバーの有無の取得をどう考えたら良いのやら……
今こんな↓です
^i::
WinGet, Size, MinMax
if(Size=1) ;最大なら
{
ControlClick x116 y80
Send,{Tab} ;フォーカスをファイルに戻す
}else{ ;違うなら
ControlClick x116 y110
Send,{Tab}
}
return
ttp://i.imgur.com/WEK55.jpg
>>875 エクスプローラーのショートカットキーを送るのはダメかな?
"表示"を出すショートカットキーは ALT+v だから、例えば表示設定を"詳細"に切り替える手順は
ALT + v → d
>>874 autohotkey.exeを管理者としてみては?
方法は「管理者として実行」でググる。
>>876 どうもです
トグルで切り替えたいのでその方法は避けたいですね
でも^iを押す度送るキーを切り替えれば良いかな? ちょっとそっちでも検討してみます
>>875 AHK_L 用
; 詳細とアイコンを交互に切り替えてみる
^i::
viewMode := Shell_GetCurrentViewMode()
; FVM_ICON = 1, FVM_DETAILS = 4 他は FOLDERVIEWMODE で検索
v := viewMode == 4 ? 1 : 4
Shell_SetCurrentViewMode(v)
Return
; 表示状態を取得する。hWnd に指定が無い場合は、アクティブなエスクスプローラ
Shell_GetCurrentViewMode(hWnd = 0)
{
If (hWnd <> 0 || (hWnd := WinActive("ahk_class CabinetWClass")) <> 0)
{
win := ComObjCreate("Shell.Application").Windows
Loop,% win.Count
{
ie := win.Item[A_Index - 1]
If (ie.HWND = hWnd)
Return ie.Document.CurrentViewMode
}
}
}
下に続く
続き
; 表示状態を変更する。viewMode = 表示状態、iconSize = アイコンサイズ、デフォルトは-1(変更なし)
Shell_SetCurrentViewMode(viewMode, iconSize = -1, hWnd = 0)
{
If (hWnd <> 0 || (hWnd := WinActive("ahk_class CabinetWClass")) <> 0)
{
win := ComObjCreate("Shell.Application").Windows
Loop,% win.Count
{
ie := win.Item[A_Index - 1]
If (ie.HWND = hWnd)
{
ie.Document.CurrentViewMode := viewMode
If (iconSize != -1)
ie.Document.IconSize := iconSize
Return
}
}
}
}
全角スペースでインデントしてるので、コピペするときに半角スペースに置き換えてね
おぉぅ、シェルからいくわけですね
自分では絶対これは書けませんです……感謝です
FVM_THUMBNAILとFVM_LISTのアイコンサイズが共用のようで辛いですね
ふむ、勉強になった
ahk的引数にするなら hwnd でなく WinTitle がいいかもしれん
特定のキーを押したら、50回上方向のスクロールする方法ってありませんか?
Space::
Loop,50
{
MouseClick, WheelUp
}
これだとLoopにならず、押している間だけ上スクロールとなります。
>>883 loop内にsleepを入れていないから、押している間だけスクロールしている、ように見えるのでは?
おおう・・・忘れてた、ちょっと恥ずかしいw
さんくす
無事解決w
>>877 ダメっぽいです。キー自体は送られてるようなんですが……
aがよくてwがダメってなんなんでしょうね
ホットキーでSkypeのログイン状態を変更したいのですが良い方法はないでしょうか
Aを押すと1が入力され
もう一度Aを押すと2が入力され
もう一度Aを押すと3が入力され
もう一度Aを押すと1が入力され(初めに戻って繰り返し)
るスクリプトはどう書けばよろしいのでしょうか?
a::
if hoge < 3
hoge++
else
hoge = 1
tooltip, %hoge%
return
>>889 ありがとうございます
そして申し訳ございません
誤解が生じるような記述をしたようなのでもう一度書き直します
Xを押すとCtrl+Aが送られ
もう一度Xを押すとCtrl+Bが送られ
もう一度Xを押すとCtrl+Cが送られ
もう一度Xを押すとCtrl+Aが送られ(初めに戻って繰り返し)
るスクリプトはどう書けばよろしいのでしょうか?
x::
hoge++
if hoge = 1
send, ^a
else if hoge = 2
send, ^b
else if ( hoge = 3 ) {
send, ^c
hoge = 0
}
keywait, %A_Thishotkey%
return
ヒント無視して丸ごとよこせつってるようなバカ相手にすることないのに
さすがにこれはひどいな
馬鹿そのものよりもそれの相手をする奴の方が害悪って事か
あとからあとからわいてきちゃうからな
>>894 害悪というのは言い過ぎだよ。
ただ、気を付けてくれるとありがたいというのはある。
さすがにPZCumRJj0を罵るのは筋違いじゃないか?
クレクレが鬱陶しいなら無視すれば済む話
過去にクレクレしたのに書いてもらえなかった奴が嫉妬してるんだろw
>>891 わざわざ二度もお手数掛けましてどうもです
おう、もうくんなよ
割りとシグマさんは最強の名を関するだけはあるんじゃないか
ミスしました
何かしらキーが押された時に反応して、処理を実行させたいのだけれども、
全てのキーにホットキーを割り当てるのは、野暮ったいので出来れば避けたい。
一括して定義する方法は無いでしょうか?
Inputで拾える文字も限られてるし、ホットキー羅列以外に無いよ
羅列がいやなら、LLHookか直接入力拾うかだけど羅列と同等
やはり、難しいのか…
地道に羅列でやってみようと思います。
参考になりました。サンクスです。
あんまり詳しくないから見当違いのこと言ってたらごめんね
loopで仮想キーコードを格納しまくって、入力した文字がそのうちのどれかなら始動とかはできないかな?
だからそのキーコードを拾えるイベントって何よって話で、
全キー拾えるようなイベントはどうすべきかって話だろうに
>843の方法でLoopで順繰りにHotkey指定すりゃいいんじゃないの?
やってることは羅列と変わらんけど
dllをahkから呼び出せて使うだけでいいのならいいんだが
レジストリ変更して別dllを指定しているのなら需要は残念ながらないだろう
CapsLock -> F13 、と実質的な違いがあまりない(というかkbjpn.dll置き換えこそ通常は抵抗があるだろう)
なるほど、そりゃそうだな
912 :
名無しさん@お腹いっぱい。:2012/10/01(月) 02:33:50.33 ID:KlSP7lEq0
>>903 A_TimeIdlePhysicalは?
913 :
名無しさん@お腹いっぱい。:2012/10/01(月) 04:23:24.46 ID:KlSP7lEq0
Inputの説明のページにWait for the user to press any key.ってサンプルがあった。
Input一度も使った事が無かったw
特定のソフトの背景色を変えたり出来ませんか?
例えばエクスプローラを黒板的配色にしたり
915 :
名無しさん@お腹いっぱい。:2012/10/01(月) 19:13:30.47 ID:+yPMiaEy0
1.5に対応した正規表現で検索できるアドオンはあるでしょうか?
>>914 そういうコマンドはないね
エクスプローラとかOSの設定変える方が確実
>>915 誤爆かぇ?
アクティブウインドウを、横幅そのままに、
縦をディスプレイ最大サイズにしたいんだけど、
そういうスクリプトは可能かな?
TTBaseのWindowTateMaxっていうのを入れて同じことやってたんだけど、
AHK内で完結させたいなと思って。
WinMoveとA_ScreenHeight
どうもありがとう!
920 :
名無しさん@お腹いっぱい。:2012/10/03(水) 16:57:34.07 ID:EGuRnLqt0
ahkと.NET、どっちが実行速度速いですか?
Youtubeのプレイヤー部分のコントロールの座標と縦と横のサイズを拾いたくて
MouseGetPosでコントロールのウィンドウハンドル取得→ControlGetPosで座標とサイズ取得
ってゆうふうにしてたんだけど最近うまく座標を拾えなくなった(サイズはOK)
AHKのバージョンは変わってないからブラウザ側の仕様変更っぽい(ブラウザによっては拾えることもある。IEは×DonutQは○)
(サイズはOKだからないとは思うけど)ウィンドウハンドルがちゃんと拾えてないのかと疑って
流行らせるページのMouseGetPosのとこに載ってたより確実に取得する方法も試したけどそれも駄目
どうしようもなくなってるんだけど、同じような症状の人or対応策知ってる人いない?
環境が書いてないから何が何やら・・・
最近はGPU支援がついたりでFLASHも色々変わってきてる
WnGetでコントロール一覧取得して、お目当てのがないなら
AHKじゃとれないんじゃないのかね
IEならCOMつかってDOM解析して色々やれば出来るかもしれんし、そうでないかもしれん
すまそ
環境は
OSはWindows Vista Service Pack 2 (x86)
AHKは1.1.08.00と1.1.08.01
ブラウザはIE9、Chrome、Iron、DonutQそれぞれ最終更新版(昨日の時点)
んで、教えてもらったWnGetでコントロール一覧取得試してたら気付いたんだが
@コントロールのウィンドウハンドル、クラス名はちゃんと取れてる
AControlGetPosで取得したサイズは一定のピクセル量ズレた値が取得される(ズレ幅はソフトによって異なる?)
っていうことみたいなんで、あとはソフト毎にズレ幅修正するように対策してみる
ありがとう
AHKを使って本命の作業の作業時間を軽減しようとしてるのに
AHKばかりに時間を費やしてる始末。目的と手段が。。
だがそれがいい
任意日付の3ヶ月後の日付を算出したいのですが、
EnvAddでは月の計算ができずうまくいきません。
任意日付が2012/10/5なら2013/1/5、
任意日付が2012/11/30なら2013/2/28(対応する日がなければ末日)、
のように算出したいです。よい方法はないでしょうか。
たとえば特定日付が存在するかチェックできれば、プラス3ヶ月した後に存在する日まで戻せば良いのですが
チェックする方法がわかりません。
>>927 >たとえば特定日付が存在するかチェックできれば、プラス3ヶ月した後に存在する日まで戻せば良いのですが
>チェックする方法がわかりません。
FormatTimeの"間違った部分を含む部分は出力されない"ていう特性を利用するのはどうかな?
FormatTime, TimeString, 20130115, yyyyMMdd
StringLen, length, TimeString
OutputDebug, %TimeString%:%length%
FormatTime, TimeString, 20130230, yyyyMMdd
StringLen, length, TimeString
OutputDebug, %TimeString%:%length%
>>928 こんな方法があるとは気づきませんでした。
これでうまくいきそうです。ありがとうございました。
Gui表示でグループボックス内の背景色を変更したい時には、
どうすればいいのでしょうか?
多分、Gui,Colorを使えば出来そうな気がするんだけど、
AutoHotkeyJpの説明を眺めてても使い方がイマイチ分からない。
コントロールの背景色を指定するだけじゃ駄目なん?
%キーを割り当てようと思い
エスケープシーケンスを使って下のように書きましたがうまくいきません
どうしたら良いのでしょうか
+sc006::`%
send,% "%"
でよくね?
セミコロンをsticky shiftに割り当ててらっしゃる方は、
セミコロン自体をどこに割り当ててるのでしょうか?
>>934 sticky shift autohotkey
でググる
無変換を押している間はAlt+Spaceが押され続けるという設定にしてるんですが
vk1Dsc07B::
SendInput {alt down}{Space down}
keywait, vk1Dsc07B
SendInput {alt up}{Space up}
return
これを無変換キーを押しているときにCtrlが押されたら
AltとSpaceを押し上げ、更にCtrlが押し続けられる、という動作に変更したいのですが
何か良い方法はないでしょうか?
例えばAキーとBキーを同時している最中にCキーを押すとその時点でAキーとBキーの押し上げ判定が発生し、
Cキーを押すのをやめない限りはCキー押し下げ判定は続く、という動作をさせたいのです。
vk1Dsc07B::
SendInput {alt down}{Space down}
while getkeystate("vk1Dsc07B", "P") && !getkeystate("ctrl", "P")
sleep, 50
SendInput {alt up}{Space up}
return
>>937 動きました。ありがとうございました。
あと一つ質問なんですけど、ペンタブレットのサイドスイッチみたいな、キーボードマウス以外のボタンをAHKで制御することってできますかね?
ペンタブレットのドライバ制御だと割り当てられるボタンが少なすぎて不便なんですよね。
割り当てられるボタンが少ないというのは
ペンタブ側ソフトだと登録可能なショートカットキーが少ないということだろうか
AHKでホットキーを設定するのはペンタブのボタンでは無理
使わないキー(Ctrl+Shift+Alt+A など)をペンタブ側のソフトで登録しておいて
AHKではそのキーが押された時の詳しい挙動を指定しておけばいいのでは
^+!a::function()
>>939 できないですか。具体的にやりたいことがペンタブのペンのサイドスイッチに無変換キーを割り当てて、
無変換キーの中に
>>937の人に教えてもらったものを入れたいんですけど、ペンのボタンを押しているだけなんでgetkeystateもkeywaitも機能しなくなってしまうわけです。
なのでペンタブのボタンのキーステイトがとれたら、もしくはペンタブのサイドスイッチに直接ショートカットが割り当てられないかなと思ったんですが。
最初からペンタブでやりたいことを全て書くようにしたほうがいいよ。
それとペンタブにも出来るものと出来ないものがあるかもしれないので隠したり後出しにせず、最初から全て書く。
答える方もエスパーしないといけないので面倒になってレスがつかなくなるし、二度手間にならずに済む。
以下、Wacomのペンタブの場合。
他のメーカーのは持ってないので判らん。
f12::f13
を記述したスクリプトを実行し、ペンタブ設定でのサイドボタンのキーストロークの割り当てで
F12を押すと {F13} となるので名前を適当に付けて登録する。
あとはスクリプトに↓に書き換え(または追加)。
f13::
SendInput {alt down}{Space down}
while getkeystate("f13") && !getkeystate("ctrl", "P")
sleep, 50
SendInput {alt up}{Space up}
return
raonicはすごい勢いでランキング上げてるやん
これはやばいかもしれん
ごめんなさい、まちがえました
>>941 すいません。やりたいことが違いました。
今現在サイドスイッチにCtrlを割り当て使ってるんですけどこの状態だとサイドスイッチを押してもキーボードのCtrlを押した時のようにCtrlのキーステイトがとれないので
>>937で教えてもらったスクリプトが使えない状態でした。ペンタブのサイドスイッチをキーボードのCtrlキーと同じように動作させることは不可能でしょうか?
使っているペンタブはワコムのものです。
※ 実機持ってないから、適当な事を書く
デバイスのユーティリティでキーアサインしたキーをAHKで拾えるかどうか確かめる
具体的にはCtrl に割り当てたなら、AHKで「Ctrl::MsgBox」とかしてダイアログが出れば拾えてる
拾えない場合は、AHKでは無理なので諦める
次に、デバイスのボタンDOWNとUPに同期してキーDOWN,UPが発行されるか確かめる
上の例だと「Ctrl Up::MsgBox UP!!」みたいなホットキーがボタンUPで動けばOK
これが動かないと押し下げ中のキーステート管理は無理なので諦める
上記の両方がOKならあとはAHKでお好きなように
※ どうしても諦められない場合・・・玄人用
ツールのキーアサインをしないで、直接入力を使ってデバイスの信号を解析すれば実現できるかもしれない
デバイスマネージャでがHID系と登録されていればおそらくいける
ただデバイスがどのクラス(UsagePage,Usage)に属していてどんな信号が流れているかは分からないので、
やる場合は根気が必要
ヒントは WinAPIの RegisterRawInputDevices と WM_INPUT、
AHKでは DllCall と OnMessage、NumGet/Put、VarSetCapacity
ただ、
この手の機種依存情報は汎用スクリプトを語るこのスレよりも、
デバイスのスレやブログやまとめサイトなどに情報が集約されていてることも多いということを言っておく
6+/FxQ700には無理だろw
>>937 と
>>941 の違いをよく見て、
>>945 のリンク先を参考に
>>937 をちょこっと修正すればいけるんだけど
それすら出来ないならAutohotkeyで弄るのは諦めたほうがいいと思う
スレチかも知れないけど
autohotkey的なものをubuntuで使うとしたら何がいい?
wineだとだめだ
autohotkey的なものの定義によるだろうね
キーリマップはcommon lispベースのアプリがあった気がする
>>950 スキャンコードから文字へのリマップができたらいいと思ってる
そのままahkスクリプトつかえるIronAHKってどうやって使うの
単純なリマップだけでいいのならxmodmapがいいんじゃないかね
IronAHKは使ったことないから分からない
修飾キー付きのキーをリマップを簡単にしたいならAutoKeyが使いやすかったよ
上記のペンタブについて、興味湧いたから調べてみた
手元にあったWacom Bamboo CTH-460で調べてみたが、普通にペンボタンのUpを問題なく取得できた
試してないがBambooでできるのならIntuosでもさすがにできるだろう
試した手順
1.ペンボタンにF12を割り当て
2.AHKで「F12」、「F12 up」にそれぞれホットキー割り当て
3.両方共問題なく反応した
つまりF13やらをペンボタンに割り当てればそれでおしまい
つまり
>>946 さんの紹介したややハードな方法はやらなくてよい様子
このスレの住人は本当にいい人が多いなぁ
ありがとうございます
昔は紫切断が頻繁にやっている人が多くて
偽装緑が増えてバッファしまくりになってたことあるんだよ
んで、やっと偽緑についての解説サイトができて
解消されたんだよ
ごばく
>>944ですがペンタブのサイドスイッチのキーステイトが取得できないのでうまくいきません。
vk1Dsc07B::
Send {alt down}{Space down}
loop
{
Sleep, 15
Getkeystate, Aclick, vk1Dsc07B, p
Getkeystate, Bclick, ctrl
If Aclick = u
break
Else if Bclick = d
break
}
Send {alt up}{Space up}
return
無変換キーを押している間はAlt+Spaceでツール一時切り替えし(Clip Studio Proのズームツールです。)、
無変換キーを押している最中にCtrlキーを押すとズームツール切り替えを停止して、Ctrlキーの消しゴム一時切り替えツールに変更させたいのですが。
ワコムのペンタブのサイドスイッチにCtrlキーを割り当てた状態で無変換キーを押したままサイドスイッチを押した場合はbreakされない状態です。
キーボードのCtrlキーを押した場合はbreakされます。サイドスイッチに割り当てたCtrlをキーボードのCtrlと同じように動作させることはできないでしょうか?
ほぅ、便利そうなツール&情報だな
普段使わない F12〜F24とかにマッピングして、#InputLevel で制御すれば
(多重キーマップみたくなるけど)もっとスマートに設定できそう
Hid Macrosでできるのか?
ともあれキワモノ設定は使用感を上げることには基本的にならないから
そろそろもっとシンプル(あるいは常識的、なおかつまとも)な設定にすべき
なぜ無変換を押したまま別ボタンでCtrlを押し下げしたいのか分からない。かなり分からない
そしてkeystateが取れないのなら、取らなくてもいいようにスクリプトの変更をまず考えるのが当然
ペンボタン→F13
F13::(Alt押し上げ、Space押し上げ、そしてCtrl押し下げ)
手にしたい挙動が分からないからこれを求めているのかは知らないが
昔HidMacros使ってたけど最新ドライバのペンタブには一切反応しないよ
ドライバを610あたりまで戻せるなら、ペンタブからのキー入力は
仮想HIDキーボードデバイスとして動作してたからHidMacrosに限らず何でもいけた
ただ610はWin7が出る前のドライバだから7で使うには不具合満載
Clip Studio Pro を持ってないので、とりあえずPhotoshopで試したらいけた方法を。
但し、キーボードのCtrlの場合、Ctrlを離すとキーを何も押していない状態になる。
サイドボタンを押して離した場合は無変換キーを押していた状態に戻る。
特殊な使い方なのでもっと試行錯誤すればどちらを押しても同じ挙動にすることができるかもしれない。
ちなみにSaiでは動かず(SaiがAhkよりもOSに近いところでキーを取得するためahkで乗っ取れないキーや組み合わせがあるため)
サイドボタンに F13 を割り当てる(
>>941 参照)
vk1Dsc07B::
Send {alt down}{Space down}
loop
{
Sleep, 15
Getkeystate, Aclick, vk1Dsc07B, p
Getkeystate, Bclick, ctrl, p
Getkeystate, Cclick, f13
If ( Aclick = "u" || Bclick = "d" || Cclick = "d" )
break
}
Send {alt up}{Space up}
if ( Cclick = "d" ) {
send, {ctrl down}
keywait, f13, L
send, {ctrl up}
}
return
>>959 ちょっと調べてみますどうもです。
>>961 ペンタブサイドスイッチにF13を割り当て
F13::
send {alt up}{space up}{ctrl down}
return
としてみましたがダメでした。
説明すると長くなるんですけど、自分の手癖でボタンの切り替え時に不具合がでるので今の設定にしたいんです。
これでキーボードのCtrlとサイドボタンの挙動が一緒にはなった
vk1Dsc07B::
Send {alt down}{Space down}
loop
{
Sleep, 15
Getkeystate, Aclick, vk1Dsc07B, p
Getkeystate, Bclick, ctrl, p
Getkeystate, Cclick, f13
If ( Aclick = "u" || Bclick = "d" || Cclick = "d" )
break
}
Send {alt up}{Space up}
if ( Cclick = "d" ) {
send, {ctrl down}
keywait, f13, L
send, {ctrl up}
}
if getkeystate("vk1Dsc07B", "P") {
keywait, ctrl, p
gosub, vk1Dsc07B
}
return
>>963 それでClip paint studioでも動きましたが、この設定はF13に
f13::
SendInput {alt down}{Space down}
while getkeystate("f13") && !getkeystate("ctrl", "P")
sleep, 50
SendInput {alt up}{Space up}
return
を入れないとダメですよね?最初におかしな質問してしまった自分が悪いんですけど
サイドスイッチにはCtrlキーを割り当てておきたいんです。サイドスイッチにCtrlを割り当てたままでは無理ですかね?
>>965 すいません。
f13::send {ctrl down}
f13 up::send {ctrl up}
にしてそのスクリプトを使ってみましたが問題なく動きました。F13の設定はこの設定で良かったんでしょうか?
ありがとうございます。これでやっと絵がかけます。
結局keystate取れてるじゃないか。もう何が何だか
F13::Ctrl
>>968 リマップだとダメでした。Ctrlを押し続ける判定がこないんでだめみたいです。
サイドスイッチにCtrlを割り当てたときはキーステイトとれませんでした。
>>967 >F13の設定はこの設定で良かったんでしょうか?
挙動に問題がなければいいんじゃないかと。
gosub, vk1Dsc07B
の部分は戻ってくる必要がないので
goto, vk1Dsc07B
の方がいいかも。
体感出来るほどの差は感じられないのでどっちでもいいんだけどね。
>>970 そうですか。どうもありがとうございました。
ツールチップのx座標指定でツールチップの左端ではなく、
右端の座標を指定するにはどうすればいいのでしょうか?
>>952 xmodmapでできた
感謝
でも装飾キー付きのができないのが難点だな
>>972 一旦、Tooltipを表示して横幅を取得し、移動させればいいんじゃない
tooltip, hoge
WinGetPos, x, y, w, , ahk_class tooltips_class32
winmove, ahk_class tooltips_class32, , 300-w, 300
;ToolTip, hoge, 300-w, 300 ; でもいいけど
特定のアプリでホイールを操作した時だけ別のキーコードを送りたい場合どうすれば良いのでしょうか?
$WheelDown:: ;ループしないように$を付けてみた
;$WheelUp:: ;DownとUpを共通のスクリプトで行いたいが出来ないためコメントアウト
WinGetActiveTitle, OutputVar
if (%Outputvar% = hoge hoge) ;hogeとhogeの間のスペースでエラー
MouseClick, Right
else
MouseClick, WheelDown,, A_EventInfo ;フックしていないかのような動作を行いたい
>>974 なるほど。大変参考になりました
ありがとうございます
>>976 こんなそのものズバリな方法があったんですね
勉強になります
ありがとうございました
マウス系の操作なんで #If のサンプルも読んでおけ
980 :
名無しさん@お腹いっぱい。:2012/10/09(火) 04:05:07.50 ID:K+QgA1wq0
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
983 :
名無しさん@お腹いっぱい。:2012/10/10(水) 03:33:30.02 ID:wuic37gVO
ドットネットとAHKどっちが簡単ですか?
何をしたいのかにもよる
AutohotkeyLでCloseボタンを非表示にしたいのですが
Gui , +ToolWindow で表示したタイトルバーにボタンが表示されないウィンドウを
GUI, Minimize で最小化させると 画面左下に小さい長方形のタイトルバーが残ります。
PostMessage, 0x0112, 0xF020,,,A でも同じでした。
Gui , -Caption や Gui , +ToolWindow を外したGui だと正常に最小化されます。
Gui , -Caption の他に回避方法は無いでしょうか。
コンビネーションキーの機能を多用しているのですが、モディファイアキー(?)に
使っているキーのみの動作に若干でも支障がでていないか不安です。
ゲームでも使用しているので気になります。
チルダを使えば万事なんの問題もないのでしょうか?
たとえば x & F1 みたいにxをモディファイア的な動作にしたいのですが、
1.チルダさえつけておけばxのみの動作にまったく問題ないのでしょうか?
2.後のキーのF1のほうはチルダなどなんの手当もしなくてもOKなのでしょうか?
おしえてください。
>>986 1&2は問題ないけど、別の問題がある
3. 乗っ取らないので第一キーを押した段階で普通にキーが発行される
x を第一キーにしたら x が出力されるし、キーリピートもする
4. チルダを外したらキーUpまでキー発行は遅延されるし、キーリピートは発生しない
※ キーUpの直前まで第二キーが押されたかどうか監視するため
無変換などの非文字キーなら支障は限定的だけど、通常の文字キーだと反応性が悪くて辟易するはず
>>987 なるほど、ありがとうございます。
3について、そういえばそうでした。
最後の文にあるように非文字なら限定的ならうまくいくっぽいですね。
4はなるほど遅延の意味はこうだったのか。
そうかそうか3があるかぁ・・。そう考えるとすげー限られるなぁ。
逆にファンクションキーをモディファイアにするか。それでも意図しない
ファンクションキーの操作が発生するんだろうけど。
ありがとうございました。
>>985 閉じるボタンとかはOSが描画するところだからなぁ、左上のアイコンも消えていいなら↓
Gui, -0x00080000 ; WS_SYSMENU
Gui, Add, Button,, Close
Gui, Add, Button, x+10 yp+0, Exit
Gui, Show
Exit
ButtonMinimize:
WinMinimize
Return
ButtonExit:
ExitApp
990 :
985:2012/10/11(木) 07:46:42.52 ID:UkkmrnVc0
>>989 有難うございました。
希望通りの動作になりました。
とりあえずここを使い切ろう