FAQ Q:CapsLock(英数)キーの割り当てがうまくいかないよ A:日本語環境だとLock系キーの動作は不定。 OS側がキーUp/Down情報が正しく返してこないので対処のしようがない。 OSのローカライズ段階で発生してる問題なので、窓使いの憂鬱やChange Keyのように ドライバレベルで弄らないとダメだが英語圏では問題ないらしいので今後のサポートもあまり期待できない。 対処としては前述のソフトで、CapsLock(英数)キーを別のキー(F13〜F24など)に割り当ててから AHKで利用すべし。 Q:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ A:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]なため。 対処としてはこれらの文字の"直後"に「`」を記述する(例:「線形`代数」)か、 #EscapeCharでエスケープ文字を別のものに変えるべし。
Q:Shift, Ctrl, Alt, Winキー以外のキーを修飾キーとしてキー割り当てしたいよ (例:無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたいよ)など A:Remap機能は記述が簡単になる反面、細かい指定がしにくい。 流行らせるページのHotkeys, キーリスト, リファレンス→Send, #IfWinActive, GetKeyState()なども参照すること。 なお、例の場合は以下のように記述する。 sc07B & I:: Send, {Blind}{Up} sc07B & K:: Send, {Blind}{Down} sc07B & J:: Send, {Blind}{Left} sc07B & L:: Send, {Blind}{Right}
わからない七大理由 1. 読まない ・・・説明書などを読まない。読む気などさらさらない。 2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。 3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。 4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。 5. 環境のせいにする ・・・自分が悪いのではなく環境が悪いと責任転嫁する。 6. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。 7. バカだから ・・・バカだから。
英語読めません><
必要な人は今の内に流行らせるページを保存しておいた方がいいかもね
一部の人間以外、みんなわかっていると思うが、 流行らせるページに出てる広告は xrea.com が出してる広告だぞ。 どんなに広告クリックしたって流行らせるページ管理人には一円も入らない。 そもそも、直訳でもないし、管理人の作ったスクリプトも多いだろ。 こんな下らないことで管理人にやる気を無くされると困るので言っておく。 日本語の流行らせるページがなければオレは AHK を使う気にならなかったと思う。 オレにとってはとてもありがたいページだ。 無くなると非常に困る。
11 :
10 :2008/01/28(月) 20:56:28 ID:mX8zLuSg0
あまりのアホ臭さに、ついカッとなって書き込んでしまったが、 本当は無視した方が良いんだよな。
導入しようとしていきなりつまずいたんですが, 「Ctrl+,」にホットキーを割り当てるにはどうすればいいんでしょうか? ^,:: Send,{Down} としても反映されないし, ^`,:: Send,{Down} のようにカンマの前でエスケープを入れるとエラーで読み込んでくれません. どなたか解決方法をご存知でしたら教えてください.
^,::Send,{Down} でも ^,:: Send,{Down} Return でも普通にカーソル下を押したように動作するけど?
15 :
13 :2008/01/29(火) 01:25:19 ID:XdQ+yieA0
>>14 いま自宅のPCで試したら問題なく動きました.
なぜか会社のノートPCだと「Ctrl+,」が動かなくって困ってたんですが・・・・
なぜなんだ(´・ω・`)
明日また格闘してみます.
レスありがとうございました.
5ボタンマウスのサイドボタン押したら アプリ毎に独自のAHKで作ったコンテキストメニュー出すようにしたらめちゃ便利になったぜ。
タブ一覧をフルパスで出すことは可能ですか?
任意ウィンドウにファイルパスをドロップするのってAHKで実現するとなるとやっぱDllCallあたり? 秀丸上で再編集した AviSynthスクリプトを VirtualDub で開き直したいんだが 秀丸(マクロ起動)→ AHK → CDrop.exe → VirtualDub みたいな感じになってイマイチ美しくない。 CuteExec + CDrop 的なことをAHK単体でできるとスマートになるんだが
"を,に変更しようとして下記を実行するとエラーになります。 "のエスケープ方法はありますか? RegExReplace(str, """, ",") → ダメ RegExReplace(str, "\"", ",") → ダメ
つRegExReplace(str, """", ",") 流行らせるページに書いてあった気がするぞ
特定のタイトルを含むダイアログがポップしたら 即走り出すスクリプトってどう書けばいいんですか?
WinWaitでひたすら待機するか、SetTimerで定期的にウィンドウチェックする
マウスとトラックボールで使う設定を切り替えたいのですが、 特定のキーを押したら設定ファイルを切り替えることはできますか?
いくらでもやりようはあるんでは 全部メインINIに書かんでも必要な時に単体AHKで走らせるとか どういう形で利用したいか次第だけど
ホットキー押下で処理が実行できるように、 マウスを任意のポジション(画面右端など)に持っていくと任意の関数を呼び出すことってできますか?
SetTimerで定期的にカーソルの座標をチェックする
>>27 なるほど!頭が固かった。
ありがとうございます。
#Persistentを入れたら、よく分からないのですがGUI関連の動作が変になります。 画面表示させると、タスクバーにウィンドウタブが出るのに、画面が表示されません。 何か注意事項があれば教えてください。
AHK晒す方が早い
なにかRegExReplaceの挙動が変です。 clipboard := RegExReplace(clipboard, "$", "_") clipboardは「aaa」 aaa____________ ※「_」が永遠につきます。 これは私だけでしょうか?
どこかでループに入ってるだけじゃないの OnClipBoardChangeとかでそれやるとそうなると思うけど それにしても挙動がおかしいわけじゃないので精進あるのみ
普段は無変換をAltにして、変換中の文字列がある時は 無変換のままにするには、どうしたらいいでしょうか? ImmGetContext ImmGetCompositionString ImmReleaseContext で何とかしようとしたんですが、ImmGetContextが HIMCを返してくれず、つまってしまいました。
>>11 そうかもしれんが
とりあえずグッジョブ!!
オレも同じ気持ちだ
DetectHiddenWindows On GoSub ~ScrollLock ; react to initial state ; ... further code here ; --- end of autoexecute section --- ~ScrollLock:: ; toggle by create/destroy a hidden window If GetKeyState("ScrollLock","T") Gui 1:Show, Hide, ScrLk Else Gui 1:Destroy Return !T:: ; toggle by create/destroy a hidden window AltT := !AltT If AltT { Gui 2:Show, Hide, Alt-T TrayTip, テンキー&横スク, ON!!!!!!!!!!!!!!!, 10, 17 } Else { Gui 2:Destroy TrayTip, , OFF!!!, 10, 17 } Return #IfWinExist ScrLk ; below the HotKeys are active when CapsLock is ON !z::MsgBox ScrollLock ON ;... #IfWinExist Alt-T ; below the HotKeys are active when Alt-T toggle is ON !z::MsgBox Alt-T ON 2::Send {BS} 3::Send {Numpad7}
4::Send {Numpad8} 5::Send {Numpad9} q::Send +{Tab} w::Send {Numpad4} e::Send {Numpad5} r::Send {Numpad6} t::Send {Tab} a::Send {Numpad0} s::Send {Numpad1} d::Send {Numpad2} f::Send {Numpad3} x::Send {,} c::Send {NumpadDot} v::Send {NumpadEnter} WheelUp:: ; Scroll left. ControlGetFocus, fcontrol, A Loop 4 ; <-- Increase or decrease this value to scroll faster or slower. SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINERIGHT. return WheelDown:: ; Scroll right. ControlGetFocus, fcontrol, A Loop 4 ; <-- Increase or decrease this value to scroll faster or slower. SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINELEFT. return ;... #IfWinExist ; below the HotKeys are active when all toggles are Off !z::MsgBox ScrollLock/Alt-T Off ;...
>>32 これはバグでしょう。
クリップボード「c\windows」
clipboard := RegExReplace(clipboard, "\\", "_")
→ c_windows
clipboard := RegExReplace(clipboard, "\\", "\\\\")
→ c\\\\\\\・・・無限に
どの正規表現ライブラリで実行してもこんな結果にならない。
というか、最初のマッチ文字は置換対象文字の影響を受けないのが正規表現の仕様のはず。
だから、スクリプトの書きミスで再帰的に その行が実行されちゃってるんじゃないの? clipboard = c\windows clipboard := RegExReplace(clipboard, "\\", "\\\\") ExitApp これだけをAHKとして実行したら無限になんかならないよ?
>32も指摘してる通り OnClipboardChange: イベントでループしてんじゃないの? てか検証して欲しいなら どういう条件でコードが実行されるのかイベントやラベルも含めて晒せよ あと、OSとAHKのバージョンもな。 それと本当にバグを見つけたんならここだけで話終わらせないで公式に報告汁 適当な機械翻訳でもサンプルソースとかで意図さえ伝わればフィードバックしてもらえるよ。
意図しない挙動をして質問する時は、
>>40 の言うように
その環境と再現する最小の例を出さないと、要エスパーになる
まあ、処理系のバグのせいにする時は、99%凡ミスしてるんだけどなw
流行らせるページって公式に許可取ってるの? 勝手に本まで出して。
>>42 公式サイトのトップページからリンクされてる
勿論それが許可を取った証拠にはならないが、公認されているのは間違い無いな
流行らせるページって本当に流行らせたかったら サイトデザイン変えるのが先だろうと思ってしまう
つーか、GPLな物の本を出すときに許可をとる必要あるの?
このレスの速さw 本人常駐かよ。
ID:dA0g5f860
ちょっと調べれば間違いだと分かることで難癖をつけたり、
やたら他人の財布の中身に執着するし、前スレの奴かもな。
>>45 つーか、大体のPC系の解説本って無許可なんじゃね?
AHK付属させるとかじゃなければメールで知らせる程度だろう てか、某厨雑誌とか断っても既にメディアにプレスしてしまったから 掲載させろとか言ってくるんだぜ?w
GPLだからなんの問題もないよ。 世の中にあるlinux解説サイトとかlinux本とか 全部linusの許可もらってるとでも思ってんのか。
5ボタンくん再臨だな
52 :
35 :2008/02/05(火) 06:38:40 ID:fCMPtgDt0
華麗にスルーですかそうですか 自分でやってみるよ…
本なんて出てるんだ。
っつーかあの日本語はオタ特有だよね。
大量にあるのに何が言いたいか相手に伝わらない。
英語ヘルプの方が分かりやすい。
>>35 も何が言いたいのかさっぱりわからん
いいたいことは分かるが検証するには量多すぎて付き合いきれんw
あれ本て言うのか、、
>>52 SandS、スクリプト書いてupろだに上げた者だが、Inputで入力拾ってるので色々動作に制限は出てると思う。
ここ(の過去スレ)で要望が出たからサンプルとして書いたけど、
たしか要望した本人も「結局使えない」て結論に至っていたような。
とりあえず SAS_Initルーチン内の sas_EndKeys に {Numpad0〜9}とかを追加してみたらどうだろう。
ちなみにうちはノートPCなので動作確認はしてやれない、テンキーついてないしね。
てか、普通のSpace&1とか押しても ! にはならないな。当時使ってたPCでまともに動いてたのかも覚えてないわ。
それと、>35のリンク先で、変換/無変換キーにIME ON/OFF割り当ててるけど
これってAHK使わなくても IMEのキーバインド変更機能でいけるような…
(キーカスタマイズできない昔のMS-IMEしか入ってない環境では自分もやっていたが)
>>33 みたいな日本語を書く人はちゃんと学校を出たのかと心配になる
58 :
35 :2008/02/05(火) 18:54:52 ID:fCMPtgDt0
>>53 >>35 も何が言いたいのかさっぱりわからん
確かに読み直してみると日本語でおk状態でした
>>56 >>これってAHK使わなくても IMEのキーバインド変更機能でいけるような…
仰るとおりです。リンク先画像の赤いキーはレジストリ書換とIMEのプロパティで実現してます。
ホント全く説明になってないよね、面目ない…
やりたい事の全容ですが、
1, 変換キーを絡ませた同時押し
2, 無変換キーを絡ませた同時押し
3, S&S
4, 8ボタンマウスのキーを絡ませた同時押し
のワンショット・モディファイヤ(以下W.M.)、それにマウス側の各トグルキーで2配列追加して
まぁ計6配列切り替えてキーボードを使いたいって感じです。
で、まぁ、一応全て動作して、それなりに満足してます。
今悩んでる、というか多分出来ないんだろうけどなんか代替手段ね〜かなと思ってるのは
1, 上記のトグル状態をキャレット及びマウスポインタに反映させれないか?(今はTooltip使ってる)
2, W.M.で割振ったキーが、別の修飾キーを同時押しした際に思ったように動作しない
(例えばW.M.で割振った{+}キーとShiftを同時押ししてもShift+{+}のようにアプリ側が認識してくれてない)
という2点です。何かヒントになるものありませんかね?
IME の On/Off の切り替えじゃなくて IME を Off にすることはできるでしょうか? (On/Off に関係なく)
onだったらoff,return offだったらreturn
??? On/Off 関係なく IME を Off にしたいんですけど。。。
>>59 ほいよ、 これで IME_SET(0) でおk
IME_SET(setSts, WinTitle="")
{
ifEqual WinTitle,, SetEnv,WinTitle,A
WinGet,hWnd,ID,%WinTitle%
DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
;Message : WM_IME_CONTROL wParam:IMC_SETOPENSTATUS
DetectSave := A_DetectHiddenWindows
DetectHiddenWindows,ON
SendMessage 0x283, 0x006,setSts,,ahk_id %DefaultIMEWnd%
DetectHiddenWindows,%DetectSave%
Return ErrorLevel
}
例えば無変換なら vk1Dsc07B::IME_OFF("A")
なんか忘れてない?
質問です。 Edit コントロールに入力した文字列を utf-8 として取得したいのです。 クリップボード経由 Transform,,Unicode で出来そうなのですが、 もっと直接的な方法はないでしょうか。
ControlGetは?
>>62 ありがとうございます。最高です!
回数を指定してキーを送る時に、IME がオンの時に困っていました。
1000 文字とか送るので (マクロの止め方がわからないし。。)
68 :
65 :2008/02/07(木) 21:31:30 ID:Zlfk3GsS0
>>66 レスありがとうございました。
なんとか自己解決できそうです。
こんな感じでいいのでしょうか。
EM_GETLINE := 196
buf_size := 100
VarSetCapacity(buf, buf_size)
DllCall("RtlFillMemory", "Uint", &buf, "Uint", 1, "BYTE", buf_size &0xFF)
DllCall("RtlFillMemory", "Uint", &buf + 1, "Uint", 1, "BYTE", (buf_size >> 8) & 0xFF)
DllCall("RtlFillMemory", "Uint", &buf + 2, "Uint", 1, "BYTE", (buf_size >> 16) & 0xFF)
DllCall("RtlFillMemory", "Uint", &buf + 3, "Uint", 1, "BYTE", (buf_size >> 24) & 0xFF)
DllCall("RtlFillMemory", "Uint", &buf + 4, "Uint", 4, "BYTE", 0)
c := DllCall("SendMessageW", "Uint", IdEdit, "Uint", EM_GETLINE, "int", 0, "Uint", &buf)
DllCall("RtlFillMemory", "Uint", &buf + 2*c, "Uint", 2, "BYTE", 0)
; UNICODEを utf-8 に変換
69 :
名無しさん@お腹いっぱい。 :2008/02/08(金) 12:45:20 ID:4jp9yaxv0
なまず氏の ダメ文字対策ライブラリ(mbstring.ahk)を見てるんだけど >MBS_StringTrimLeft(ByRef outputVar, ByRef inputVar, count) inputVar も ByRef型なのは何でなんだろ? 試しに inputVar を ByVal型にして見ても同じ動作はするみたいだけど (WinXP sp2 Ahk ver.1.0.47.05) 敢えてByrefにしているのは何か訳があるのだろうか? inputVar と outputVar 同じバッファを指定するとまずいのかな。 AHKオリジナルは StringTrimLeft, buf, buf, 1 としても問題ないことになってるので 同様の使いかたをしたいのだが。 軽くテストした感じでは希望通りの結果が得られたけど、不定動作になることもあり得る?
なまずってのはアフィ厨じゃないんだな。珍しく
流行らせるさんのMouseGesture2の MouseGesture.iniでDGInterval=0が初期値なのはなぜだろう X1ダブクリが効かなくて悩んだのでメモ 他で不具合が出るのだろうか
あとフォーカスを持ってないコントロールの上での ホイールUPのみ、ホイールDOWNのみで起動したいアクションがうまくいかない フォーカスを持っているコントロールに送られてしまう
あああああorz
ごめんなさいごめんなさいごめんなさい
>>71 readmeに書いてあったああ
>>72 アクティブにしてからsendでできたあああ
ごめんなさいごめんなさいごめんなさいorz
75 :
名無しさん@お腹いっぱい。 :2008/02/08(金) 19:26:07 ID:4jp9yaxv0
ahk2exe コマンドライン /icon を指定しないとエラー吐いて終わるようになってるね。(2007/11/21 ver) 何気に不便だ。
>75 Version 1.0.47.05 のこと? ならないよ。正常作動。
77 :
名無しさん@お腹いっぱい。 :2008/02/08(金) 20:11:44 ID:4jp9yaxv0
GUI立ち上げて Custum icon の項をクリアしたらいけました。お騒がせしてスマソ そういえば以前もはまったんだったわ、これ。 Ahk2exeって GUIで指定した過去の.icoのパスをレジストリに記憶していて コマンドライン時も参照するんだよね。テラマギラワシス
>>71 MouseGesture2はMG_Edit.ahkいじって直さないと厳しい。
ジェスチャ指定の方向ボタン押すと別の方向が入力されたり、
条件定義のどれかor全てに一致が反映されなかったりする。
.ahkいじって直すといい。AHKを知るのに役立つからそれが狙いかも。
ahkで作ったテキストボックスに日本語を入力しようとすると妙にもたつくというか表示されません。 解決法はありますか?
未解決だね AutoItのGUIは日本語徹っぽいな しかし今から覚えるのまんどー
>>80 ありがとうございました。別の方法を探して見ます。
5ボタンマウス買ったので早速いろいろやってみようと思ったら Xbutton1:: MsgBox, Xbutton1 Pressed Xbutton2:: MsgBox, Xbutton2 Pressed が全く無視されちゃうんですがJoy?同様イベントとしては発生しないんですか?
logitecのマウスだとsetpointの設定によっては サイドボタンはXButton1とかじゃなくなってるよ。 設定かえればいける。 MSのマウスは知らない。
なるほど、意味はわかったけどIntelliPointの設定とAHKが連携してくれない。 Browser_BackやNumpadDivなんかに割り当ててみても反応しない。 画面を4分割してサイドボタンクリックしたときのマウスカーソルの位置で 仮想デスクトップを切り替えようと目論んでいたんだけど・・・ ともかくありがとうございます。
ahkのトレイアイコンをダブルクリック、ctrl+k でキーヒストリ見れるよ。
RegExReplaceで改行の「_」にしたいのですが、 str := RegExReplace(str, "`r`n|`n|$|\z|\Z", "_") とやっても目的どおりになりません。 元データ aaa bbb ccc 理想 aaa_bbb_ccc 実際 aaa bbb ccc_
>>86 Str = aaa`r`nbbb`r`nccc
str := RegExReplace(str, "`r`n|`n|$|\z|\Z", "_")
MsgBOx, %STr%
ExitApp
ばっちりaaa_bbb_cccになったよ
>>88 ありがとうございます。
実際の処理は下記になっています。
change := RegExReplace(clipboard, MyText1, MyText2)
MyText1、MyText2はGuiのEditで、「`r`n|`n|$|\z|\Z」を入力しました。
置換対象は改行が入っているクリップボードです。
Guiから「`r`n|`n|$|\z|\Z」の入力で、「`r`n」が正しく判断されないのでしょうか?
再現した。 GUIからSUBMITされた`r`nは既にエスケープされてる StringReplace, MyText1, MyText1, ``r, `r, 1 StringReplace, MyText1, MyText1, ``n, `n, 1 これ入れたら上手くいった もし正規表現によるGUI置換スクリプトなら 素直に「\r\n」を利用すればいい気もする
なにか人として足を踏み入れてはならない変態領域に突入しつつあるような悪寒・・・ ; 無変換キーとのコンビネーション ; 半角/全角 vkF3sc029/vkF4sc029 (IMEのON/OFFで発生するイベントが違うが、Sendコマンドで送信する場合はどちらでも同じ) ; 変換 vk1Csc079 ; 無変換 vk1Dsc07B ; ひらがなカタカナ vkF2sc070 ; IME for VJE vk1Dsc07B & vkF2sc070:: Send,{Ctrl Down}{BS}{Ctrl Up} ; +かな 確定取り消し ; カーソル移動 vk1Dsc07B & U:: Send,{Home} vk1Dsc07B & O:: Send,{End} vk1Dsc07B & I:: Send,{Up} vk1Dsc07B & L:: Send,{Right} vk1Dsc07B & K:: Send,{Down} vk1Dsc07B & J:: Send,{Left} vk1Dsc07B & Q:: Send,{PgUp} vk1Dsc07B & E:: Send,{PgDn} ; 編集 ; Cut, Copy, Paste vk1Dsc07B & A:: Send,{Shift down}{Delete}{Shift up} vk1Dsc07B & S:: Send,{Ctrl down}{Insert}{Ctrl up} vk1Dsc07B & D:: Send,{Shift down}{Insert}{Shift up} vk1Dsc07B & G:: Send,{Del} vk1Dsc07B & H:: Send,{BS} vk1Dsc07B & M:: Send,{Enter} vk1Dsc07B & N:: Send,{End}{Enter} vk1Dsc07B & `;:: Send,{Enter}
俺はTypeMatrix風中央配置してみた TY=Tab、GH=Return、BN=BS 片方BTab、ShiftReturn、Delもいいかもしれん…
先生教えてください。二つのスクリプトを瞬時に交互に切り替えしたいのです。 例としては、PauseキーでAutoHotkey2を読み込みAutoHotkey1をアンロード、 逆にScrollLockキーでAutoHotkey1を読み込みAutoHotkey2をアンロード、 って事をしたいのですがおせーてください。 つまらない物だけど置いていきます。 ScrollLockでサスペンド、Pauseでサスペンド復帰+リロードです・・・ vk91::Suspend on pause::Suspend vk13::Reload
Autohotkey1.ahk Pause:: { run, Autohotkey2.ahk ExitApp } Autohotkey2.ahk ScrollLock::
95 :
名無しさん@お腹いっぱい。 :2008/02/18(月) 00:09:02 ID:WTKVYZXY0
Locks系の挙動は二バイト圏OS環境下では不定だぞ。他のキーに割り当てたほうが無難じゃね? 何がやりたいんだか知らんが、わざわざ2つに分けて行き来しなくても 一個のスクリプトでフラグかなんか立ててスイッチングすればいいんじゃね?
AHKで、特定のアプリケーションが起動しているときにスクリーンセーバーを 抑制する処理がかけるかとおもってやってみたんですが、実行結果をみたりする ウインドウを最前面にした状態じゃないと、WM_SYSCOMMANDが拾えないようです。 これはそういう仕様なのでしょうか… OnMessage(0x112, "WM_SYSCOMMAND") ; WM_SYSCOMMAND return WM_SYSCOMMAND(wParam, lParam) { OutputDebug SYSCOMMAND w:%wParam% l:%lParam% if ( wParam = 61760 ) { ; SC_SCREENSAVE OutputDebug SC_SCREENSAVE received if ( 判定 ) { OutputDebug screensaver cancelled return 1 ; screensaver cancelled } } }
どうやら、SC_SCREENSAVE はアクティブウインドウだけが 受け取れるようです。別の方法を模索します。 失礼しました。
有難う先生、出来ました。やはりLock系の挙動怪しいです、無効化してみます。 一応メモ。 Autohotkey1.ahkは Pause:: { run, Autohotkey1.ahk ExitApp } vkF0:: Send, ] ScrollLock::return Autohotkey2.ahkは ScrollLock:: { run, Autohotkey2.ahk ExitApp } Pause::return
わざわざ2つのahkファイルに分けてる意味がわからん。 hotkeyコマンド使うだけじゃあかんの?
まあ、追々洗練されていけばええやろ まずは目的の成就じゃ
自分が最近気に入ってるのはこれ。IMEのワンキーオンオフやつなんだけど、 シングルタップでオフ、ダブルタップでオンになるようにしてあるので、 トグルのようにどっちだっけ?ということもないし、オンにするキーとオフにするキーを 2つ用意しなくてもよいので、102キー等、キー数に限りのある人には便利かも。 ~SC79 Up:: IME_chk := A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 300 IME_wnd := DllCall("imm32\ImmGetDefaultIMEWnd", UInt, WinActive("A"), UInt) DetectHiddenWindows, On SendMessage, 0x283, 0x006, IME_chk,, ahk_id %IME_wnd% DetectHiddenWindows, Off Return
特定のアプリにキーを送らないようにするのってどう書けばいいの? アクティブじゃなくてもキー監視してるようなアプリにALT押しても伝わらないようにする、みたいな
ALT押した瞬間にそいつのProcess落として 上がったら再起動みたいなことを考えたけど 騒がしすぎるな
104 :
名無しさん@お腹いっぱい。 :2008/02/19(火) 19:03:06 ID:Ro3kfoUW0
AutoHotKeyの起動ができなくなりました。 ^0:: MsgBox OK! return AutoHotkey.iniというファイルに上記コードだけ記述してAutoHotkey.exeを実行すると、 Note: The hotkey +AF4-0:: will not be active because it does not exist in the current keyboard layout. このようなダイアログが出て起動できません。アドバイス求ム。
105 :
名無しさん@お腹いっぱい。 :2008/02/21(木) 14:46:40 ID:Oj5PAiTN0
少し教えてください。 AHKで全てのキー入力を受けつけないようにするには、どうすればいいでしょう? どこかで見たような気がするのですが、失念してしまいまして。。。
すいません、BlockInput,On でした
clipboad中にある複数行文字列の各行頭に_をつけたいのですが、 RegExReplace(clipboard, "(^|\A)", "$1_")ってやってもうまくいきません。 「$」でも各行の先頭として扱われるはずなんですが・・・
RegExReplace(clipboard, "\n", "$1_") 根本的解決かは分かりかねます
>>107 RegExReplace(Clipboard, "m)^", "_")
RegExReplace(Clipboard, "(^|\n)([^$])", "$1_$2")
げ、リロードしてなかった。なにそれm)なんてあったのか AHKのおぷすおんかorz
正規表現で""の間の文字を取得したいのですがどうすればいいでしょうか?
これだとよく分からないな RegExReplaceでhtmlファイルから""で挟んであるファイルパスを取得したいのですが "をエスケープする方法が分かりません、教えてください
>>114 すみませんでした、まさか上にあったとは・・・
集中して作業してるときに裏で定期的に2chブラウザを更新させたいんですけど アクティブの時はちゃんと動作するのに非アクティブのときは動作してくれない #Persistent SetTimer,OnTimer,180000 return OnTimer: DetectHiddenWindows,On ControlSend,,{F5},jane return こう記述して動かしたんですが打開ヒントください
DetectHiddenTextをつかったらどうだろうか
118 :
名無しさん@お腹いっぱい。 :2008/02/23(土) 12:49:34 ID:BM2S2vTo0
ControlSendはあんまり確実じゃないし、PostMessageで直接送ったほうがいいかも
#Persistent
SetTimer,OnTimer,180000
return
OnTimer:
PostMessage,0x0100,0x74,,,jane
return
としてみたけど
>>116 と同じorz
IfWinNotActiveでWinActivate噛ますと動くからキーは送られてるはずだけど
これだとバックグラウンドじゃなくなって作業に集中できない
Sleipnirで試したら非アクティブでも動作したから
Janeがめんどくさいアプリなんだろうか
120 :
名無しさん@お腹いっぱい。 :2008/02/23(土) 17:54:35 ID:BM2S2vTo0
controlのwhndを指定してないからじゃないの?
俺も以前それやろうとしたけど、非アクティブのままではどうしても無理だったよ
そっか janeというかdelphiと相性悪いんかな ありがとうこれは諦めるしかなさそうだな
0x0100が間違いなだけ
0x0290にしてみたけどダメだった これ以上は昨日今日触り始めたにわかには見当がつかない
もれは「U」でスレ更新にしてんだけど ControlSend, THogeTextView1, u, ahk_class TMainWnd これで出来たような気がするよ
と思ったら最小化してるとダメだった
SmartGUI Createrなんてこんなのあったんだな。。。 これでGUIの簡単なアプリケーションが簡単に作成できると思う?
紙媒体で売られていないかもしれない、という可能性は頭にないの?
AutoHotKeyのキーワードの強調表示や、自動インデント機能のついたフリーのテキストエディタ はありませんか?EdVixと言うのを流行らせるページの作者は使用されていらっしゃるようですが あれはAutoHotKey用のキーワードリストがあらかじめ登録されてないので、1個ずつ登録 しないといけないと思うので、大変そうだから あらかじめAutoHotKeyの文法やキーワードを 内包してあるようなエディタがあれば非常に助かるのですが、皆さんはどのエディタを使って コードを書いていますか?もし無ければTerapadで頑張るしかないかなぁと思っているのですが・・・。
>>131 レスありがとうございます。
\Extras\Editorsの中身のフォルダ名はそのままテキストエディタ名になってるように
見えますが「vimとかLinuxにあるテキストエディタだし・・・」、普通はココにあるテキストエディタ
でしか使えないんですかね?
それを
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1092315194/72-73 で秀丸でも使えるようにAutoHotKeyでスクリプトを作成されてらっしゃるんですよねぇ?
しかし秀丸はシェアウェアで、5000円弱と結構高い・・・。それと私は
>>130 で
>AutoHotKeyのキーワードの強調表示や、自動インデント機能のついたフリーのテキストエディタ
>はありませんか?
と書かせて頂いた様に、フリーのテキストエディタを使いたいのですが、無理でしょうか?
>>125 ControlSendrawでうまくいったようないかなかったような
>132 vim は windows でも使えるし。 というか AutoHotKey 自体が windows 用のソフトなんだから windows で使えないエディタの Syntax ファイルなんて同梱するはずないだろ。 あと言われたところちゃんと見てねーだろ。 Extras/Editors/Syntax
AHKでスクリーンセーバーの終了を監視したいのですが、どのようにしたらよいでしょう? スクリーンセーバーのクラス名を調べる方法が分からず、行き詰まっています。
>>134 あ、VimってWindowsでも使えるんですか!?なるほど。
それから、Syntaxの中は後で見てみます、今からでかけるので・・・。
>>135 スクリーンセーバー起動中にPrintScreenキーでキャプチャ出来ない?
そのキャプチャした画像に対してチェックしてみたらクラス名分からない?
これは久々の大物だぞ
ワロタ
>>135 アクティブウインドウのクラスとかを記録し続けるスクリプト書けばいいんじゃない
140 :
135 :2008/02/24(日) 13:17:57 ID:ApIFf8DK0
>>136 スクリーンのキャプチャはできるのですが、それを利用してクラス名を調べる方法がわかりませんでした。
>>139 アドバイスとても参考になりました。なのですが、以下のスクリプトではタイトル、クラスともブランクで、
idは0x0となってしまい、やはり同定できませんでした。
#Persistent
DetectHiddenWindows, On
SetTimer, CheckClass, 1000
Return
CheckClass:
WinGetActiveTitle, title
WinGetClass, class, A
id := WinExist("A")
FileAppend, %title% %class% %id%`n, list.txt
Return
うちで
>>140 動かしていくつか見てみたら
3D テキスト D3DSaverWndClass 0x2e0628
3D パイプ D3DSaverWndClass 0x6504be
Screen Saver WindowsScreenSaverClass 0x1e067e
ブランク スクリーン セーバー ブランク スクリーン セーバー 0x6f04be
とか記録できたよ
>>141 情報ありがとうございます。
そうすると、当方の環境の問題のようですね。
もうすこし調べてみます。
ありがとうございました。
143 :
名無しさん@お腹いっぱい。 :2008/02/24(日) 15:00:24 ID:VNi/LdKj0
>>132 秀丸用強調定義の変換スクリプト作った者だが、
マジレスするとExtras/Editors/Syntax にシンタックスリストのデータがあるので、
それを加工して自分の好きなエディタで使えるように強調表示用ファイルを作ればよい。
今からエディタ選ぶならEmEditorFreeが面倒なくていいんじゃね?
Extras/Editors に EmEditor用定義入ってるし。Free版で使えるのかは知らないが。
>>143 お疲れ様です!
Syntaxの中に確かに色々ありますねぇ・・・。なるほど・・・っていってもどうやって強調表示用
のファイルを作るのか私には分かりませんけど、例えばこれを加工すればTerapadでも
強調表示出来たりするんですか?
EmEditorFreeをとりあえず試してみます。
AutoHotKey・・・もっと普及してれば色々なエディタがデフォルトで対応してくれたりするのかな?
例えばVBとかHTMLとかは大体のエディタで対応してくれてるじゃないですか?
DOSのBatとか・・・。
んなグダグダ言ってるくらいなら自分で作って配布すりゃあいいじゃん
良いの見つけました。Notepad++って言うエディタです。 これならフリーで、しかも AutoHotkey\Extras\Editors\Notepad++\Run this to install syntax file for Notepad++.ahk ファイルを実行すれば簡単にインストールまでしてくれて、すぐ使えてイイ! エディタが無くて困っている人はとりあえずこれがいいんでは? ただ入力補完まではしてくれないみたいなのが、ちょっと残念・・・。 IfとかLoopとかで改行したら自動的に1個インデントしてくれて、 } で自動的に1個インデントを 削除するとか、そういった機能は無いみたい。惜しいですねぇ・・・。
見つけましたってw
>>146 プロボクサー相手に『このバンデージの巻き方、ステキでしょ?』ってはしゃいでる様で観ている方がつらい。
釣りじゃないなら(釣りでも)カンベンしてくれ
Notepad++いいね、ちょっと使ってみよう
>>146 d
なんでjaneは非アクティブだと動かないんだ
>>147 そうね、ExtrasのEditorの中にあるもんね。そこから調べて言ったのは言うまでもありません。
>>148 それは「ココの住人は皆プロ(少なくても私よりは)なんだから、そのぐらいとっくに知ってるし、
代替のもっといいエディタを知っている」とかそういう意味ですか?
別に釣りじゃないですよ。
>>149 とかいいねって言ってくれてるし、こういう情報を書き込む事で
有益だと感じる人もいるのでは?貴方にとっては有益でなくても。
meadow(Emacs)やxyzzyに、akh-modeをインスコするのがいいんでない? キーワード強調だけじゃなくて、インデントや補完も効いてるよ ちょっと挙動が怪しいときもあるけどね つうか、本体に設定が同梱されてるんだから、 それを見つけたとかあんまり大げさに言わないでくれ ってことでないの? 質問する前に説明書くらい読めよって
×akh-mode 〇ahk-mode で、Emacsのは本体同梱のよりも、 ググったら出てくるwebのが新しかったんで、そっちがいいかも
まぁ見ればわかるようになっているものを、さも「自分が発見しました!」てな感じで書込んだら
回りは萎えるわな。Notepad++ってそれなりに有名なエディタだし。
エディタ側で用意するのはメジャーである程度枯れた言語でしょ
AHKは開発途上で関数やシンタックスも逐次追加されてってるから追っかけて対応するのは大変
自分もそう思ったから 強調ファイルの配布ではなく、変換スクリプトにしたんだけど。
>>153 >ahk-mode
おお、いつのまにそんなものが。xyzzyでがんばってる人もいるんだな。
何となくあっち界隈の人はahkみたいな言語体形はpgrしてるんだろうなって偏見があった
unix界隈で有名なprocmailもpgrしてあげて。
AHKには#NoTrayIconという素晴らしいコマンドがあるのを発見しちゃいました! なんと、これを使うとタスクトレイにあるアイコンが表示されなくなるのです(びっくり!) まだ知らない人も多いと思うので、皆さんも試してみてはいかが? 私はこれで浮いた時間をコスメに使って彼のハートをげっちゅです!
あっそ
面白いと思ったんだろうな…
すぐ弄れなくなって逆に不便
わがままな私を許したまえ・・・・ Notepad++もダメですた。。。 立ち上げるたびにいちいちAutoHotKeyモードにマウスでセットしないといけないし、 なんか使いにくい・・ス・・・。 Terapadでキーワード強調や自動インデント利いてくれれば最高なんだけど 皆さんがAHKスクリプトを書くのに愛用しているエディタとか、紹介して下さったりは・・・しないですよねぇ・・・?
xyzzyでahk-mode使って書いてるよ
>>152 でも書いたけど、強調だけじゃなくてインデントや補完もしてくれるよ
けど、インデントがおかしくなったりもするんで、
試してないけどmeadow(Emacs)もどうぞ
xyzzyに移植した人がベースにしたのよりバージョンが進んでるから、
もしかしたら解決してるかも
もし導入するなら、wikiがあるから読んでみて
notepad++使ったことないけど 普通ファイル拡張子に対応してモード切りかえてくれるみたいな 機能あるんじゃないの? そのくらい自力で設定できないとvimもemacsも使えないと思うけど。
>>162 その嫌味ったらしい文章いい加減にせーよ
もし自覚無しに今までのような文を書いていたとするなら正直、性格に大きな問題があると思う
わざとやってるならもうシラネ
>>162 自分で道を切り開く気概がないのなら、おとなしく金を出して秀丸かEmのシェア版をつかっとけ。
気概があるのなら
>>131 のスクリプトをTeraPad用に書き換えてうぷしたら結構な人数から感謝されると思うが。
ひどいのが湧いてるんだな
だから揶揄したつもりだったのに
エディタの話題自体は悪くないと思うし、他の人の参考になるかもしれんから一応レスするが いいかげんクレクレの姿勢はやめてんか('A`) 今見てみたけど、サクラや寺の.kwdファイルって1行1ワードの単純表記じゃん。 これだったら Extras/Editors/Syntax/*.txt をほとんど無加工でkwd転用できんじゃねーの? (寺には任意文字列の強調指定機能自体は存在しない が、プリセット済言語のキーワード編集は可能なので他の言語枠潰せばOK) 入力補完の形式も同じ、サクラや秀丸ならそのままシンタックスファイル突っ込めば補完してくれる。 サクラや寺なら補完タンも使える。 インデントは、C言語風のインデントとか適当に指定しておけばそれっぽい動作になる。(寺でのやり方は知らん) 以上、頼むから人に聞く前にちっとは調べてくれよ。
しかしほんとに AutoHotKey 使えてるんだろうか、この人。
Janeをバックグラウンドで操作できないって人 AIRAってソフト使うといいよ.NET製だけど Jane専用のAIRA Jってのもある
質問です。 Menu,m,show でメニュー出ている間、そのスクリプトは完全に停止してるんですよね。 それが嫌なら別スクリプトでメニュー出せってことですよね。
詳しい方、教えてください。 ジョイスティックの接続確認をしたく、以下のようなスクリプトを書いてみました。 1:: Msgbox, % GetKeyState("JoyName") しかしこのスクリプトではジョイスティック抜去後もジョイスティック名が返ってしまいます。 接続前、あるいはスクリプト再起動後は(期待通りに)ブランクとなります。 しかし最終的には常駐スクリプト内のタイマーで接続確認をしたいので できればスクリプトの再起動は行いたくないのですが, 他によい方法はないものでしょうか。
「TPanel」というコントロール上のテキストを取得したいのですが、 ControlGetText,var,TPanel,A とやっても、ErrorLevelは0で成功していますが、テキストは取得できませんでした。 何か他に方法はないでしょうか?
根本解決じゃないけど、ステート取得部分だけを別スクリプトにするとか。
>>174 #persistent
settimer, timer
maxNumDev:=DllCall("winmm\joyGetNumDevs") ;サポートするジョイスティックのデバイス数
timer:
AllJoyNames=
loop, %maxNumDev%{
JoyName=%a_index%JoyName
AllJoyNames:=AllJoyNames . a_index . GetKeyState(JoyName) . "`n"
DllCall("winmm\joyReleaseCapture", UINT, a_index-1) ;キャプチャをリリースするジョイスティックのIDを指定
}
tooltip, %AllJoyNames%
return
接続されるジョイスティックの数わかってたらmaxNumDevは決めうちした方が良いかも
>>174 キャプチャリリースしたくない場合は
#persistent
VarSetCapacity(ji, 16, 0)
joyNum=1 ;何個目のジョイスティックをチェックするか指定
settimer, timer
return
timer:
mmresult := DllCall("winmm\joyGetPos", UInt, joyNum-1, str, ji) ;ここで指定するジョイスティックのIDは0から始まるので注意
KeyName=%joyNum%JoyName
JoyName:=GetKeyState(KeyName)
JoyName:=(!mmresult) ? JoyName:"" ;mmresultが0の場合No Errorなので、それで判断する。
tooltip, mmresult=%mmresult% JoyName=%JoyName%
return
見たいに自分で名前管理するしかないかも。
タスクトレイのAHKのアイコンからバルーンヘルプ出してくれる機能って無いですか?
xyzzyというエディタで、右クリック+下方向ドラッグのマウスジェスチャーをしたとき、 Ctrl+w を送信して当該タブを閉じたいのですが、どうすればいいでしょうか?
RButtonでMouseGetPosとって 放されたときとの差分が閾値を越えたらSend
>>182 ありがとうございます。
頑張って作ってみたのですが、うまく動作しません><
~RButton::
WinGetTitle, Title, A
StringGetPos, pos, Title, xyzzy
if(pos = 0) {
MouseGetPos, x1, y1
Loop {
GetKeyState, stat, RButton
if(stat = "U") {
MouseGetPos, x2, y2
dy := y2 - y1
if dy > 20
send, ^w
Break
}
}
}
return
馬鹿みたいな質問で悪いんだけど、 a:: send,F5 ってしたい場合、どうすればファンクションキーのF5にできるの?
JANE擬似バックグラウンド操作悪足掻き #Persistent #WinActivateForce SetTimer,OnTimer,90000 return OnTimer: IfWinActive,Jane { BlockInput,On ControlSend,,{F5} BlockInput,Off } Else { BlockInput,On WinGet,ID,,A WinSet,AlwaysOnTop,ON,ahk_id %ID% WinActivate,Jane ControlSend,,{F5},Jane WinActivate,ahk_id %ID% WinSet,AlwaysOnTop,OFF,ahk_id %ID% BlockInput,Off } return 自分なりに頑張ってみたけどいい方法あったら情報求む!
janeバックグラウンドでもControlSendRawで動いたけどなあ 俺だけか
動きません
JaneDoe Viewでしか確認してないが、PostMessageでちゃんと操作できる。 タスクトレイに入ってるいる場合は、DetectHiddenWindows, Onで。 ウィンドウタイトルは適当に変更。 PostMessage, 273, 58, 0, , JaneDoe ; タブを閉じる PostMessage, 273, 82, 0, , JaneDoe ; スレ新着チェック PostMessage, 273, 29, 0, , JaneDoe ; スレ一覧更新 PostMessage, 273, 81, 0, , JaneDoe ; 新着までスクロール PostMessage, 273, 133, 0, , JaneDoe ; 更新チェック PostMessage, 273, 205, 0, , JaneDoe ; 次のタブ PostMessage, 273, 206, 0, , JaneDoe ; 前のタブ
追記。 メニューは表示しておかないとダメだった。
>>190 おお。
これは凄いViewで非アクディブ時に動作した
メニューのコマンドIDの調べ方が見つからなかったから
教えてもらった操作以外できない無能な自分
jane styleではこの技使えないっぽいね コマンドIDがない?
コマンドIDが違うんだろ。
窓コンなど使ったんだけど調べることができなかった どういうふうに調べたらいいんだい?
StyleはViewと違うコンポーネント使ってるから無理だってさ
でもいい加減Jane以外のブラウザ出てきても良いと思うんだがなぁ
生JANEでもむりぽ
ControlGetText,dat,TMemo1,Jane Doe Style IfInString,dat,dat落ち { ControlSend,,^w,Jane Doe Style } ControlSend,,^r,Jane Doe Style
ある非アクティブなウィンドウを左クリックでアクティブにした瞬間の カーソル位置を取得したいのですが、何か方法ありませんでしょうか? #IfWinActive ahk_class xxxx Lbutton::MouseGetPos,Xpos,Ypos return これだと一度アクティブにしてからクリックしないと取れないんですよね…
~Lbutton:: MouseGetPos,Xpos,Ypos IfWinActive, ahk_class xxxx { msgbox,x=%xpos% y=%ypos% } return
すみません、もうひとつついでに質問させてくださいー 非アクティブなウィンドウを左クリックしてアクティブにした時、 左ボタンを押した瞬間(ボタンを離す前)のウィンドウの相対位置を取れないものでしょうか? もしくは「ドラッグし始めの座標」とか… ボタンを押し込んだ場所から多少離れた場所にドラッグしてボタンを離しても、 ボタンを押し込んだ場所をクリックした事にする・・・という感じのスクリプトを組もうと思ってまして、 その際ウィンドウバー部分は除外する、という風にしたいのです。
いまいち文意が取れない
~Lbutton up:: でもう一度MouseGetPosして計算するなり、MouseClickでポジション戻してやるなり すればいいんじゃね?
>>205 スンマセン
~Lbutton::
MouseGetPos,XposA,YposA
return
#IfWinActive ahk_class xxxx
{
~Lbutton up::
MouseGetPos,XposB,YposB
if ( Abs(XposA-XposB) <= 100 ) && ( Abs(YposA-YposB) <= 100 )
{
MouseClick,Left,XposA,YposA,,0
; Msgbox 0,,IN A1=%XposA%,%YposA% B1=%XposB%,%YposB%
}
else
{
; Msgbox 0,,B-OUT A=%XposA%,%YposA% B=%XposB%,%YposB%
}
return
}
こんな感じでボタンを押しこんだ場所と離す場所の差分を取って
許容範囲内だったら押し込んだ場所をシングルクリックさせます。
しかしその際、非アクティブのウィンドウ(class xxxx)を左クリックでアクティブ化すると
XposA・YposAで取れる座標がスクリーン左上からの絶対座標になってしまって…
このXposA・YposAをウィンドウ(class xxxx)の相対座標値で取れませんでしょうか?
現在はCoordMode,Mouse,Screenで絶対座標値のみにして処理するようにしてるんですが、
これだとウィンドウ内の特定位置を除外、という風に出来ないのでどうにかならないものかと…
ちょっとごめんね ウインドウのペイン分割のスプリッタてあるじゃない あれをキーボードで自由に動かすってのはAHKでできるのかな? スプリッタのコントロール指定してメッセージ?送ればいけるもんなのかな
すいません。 AutoHotkeyを流行らせるページ でまだまだ勉強中ですが、 MiddleClickのSingleClick、DoubleClick、TripleClickで動作を変えたいのですが、 方法がわかりません。 ヒントで良いので何か助言いただけないでしょうか? ちなみに現状はSingleのみ変更できてる状況で #IfWinActive ahk_class hoge { MButton::F1 }
211 :
209 :2008/03/04(火) 14:59:06 ID:8GxbdjTU0
>>210 うわ。そのままですね。
ありがとうございました。
思い通りの動作ができました。
212 :
名無しさん@お腹いっぱい。 :2008/03/05(水) 09:24:33 ID:b/T8K1QR0
以下のコマンドで空ディレクトリが削除できるはずなのですが、何故かできません。 FileRemoveDir, ディレクトリ名, 0 別プロセスがひっかかってる可能性を考慮して、ログオンおよび再起動直後にもやってみましたが、 やはりダメでした。いったい何が問題なのか、ご意見下さい。
ControlSendでSendMode Playのように送ることはできないのでしょうか?
>>212 何から実行してる?
ファイラーからならそのファイラーが作業ディルとしてつかんでたり
AHKに作業DIRとして送られてるかもよ
対象フォルダが日本語でダメ文字で引っかかってるとかってオチじゃないよな? もしくは制限ユーザーログオンで削除権のないフォルダ消そうとしてるとか
216 :
212 :2008/03/05(水) 11:39:38 ID:NmUtjMzI0
"FileRemoveDir, ディレクトリ名, 1"とすると削除できることが分かりました。
どうもディレクトリ内のファイル/サブディレクトリの有無の判断ができていないようです。
なのでそれを明示的に判断できればいいと思うのですが、どうやればいいのか。。。
>>214 消去したいディレクトリは絶対パスで与えています。
また上述のように、無条件削除の場合は実行可能でした。
なのでパス指定や作業ディレクトリの件は問題ないと思うのですが。
>>215 アカウントは管理者権限です。
消去したいディレクトリは英数字のみでスペースは含まれていませんが、ピリオドが入っています。
しかし上述のように無条件削除の場合は実行可能ですので、
AHKはディレクトリとして判断していると思います。
217 :
212 :2008/03/05(水) 11:52:07 ID:NmUtjMzI0
>>216 FileRemoveDir, ディレクトリ名, 0
Msgbox, %ErrorLevel%
とすると、エラーレベルは1が返ってくるので、やはり内容物の判断ができていないようです。
うちではちゃんと動作するけどなぁ
212です。解決しました。 実はスクリプトの上流で、自分自身をSetWorkingDirしており、それがロックしていました。 複雑なスクリプトではないのですが、ディレクトリ内ファイルのLoopに慣れておらず見落としていました。 大変おさわがせしました。 ありがとうございました。
> スクリプトの上流で もうね、あほk(ry
PostMessageの引数msg、wparam、lparamの値はどう調べて設定すればいいのでしょうか? このスレのログを見ましたが、さっぱり分かりません。
>>221 流行らせるページのリファレンス見れ、参考になりそうなサイトのリンクもある
IntelのGraphics Controllerの明るさとかのスライドバーを操作したいんだけど 矢印キーだと1づつしか動かせないしPgDnは移動しすぎだしで10刻みでやりたいんだけど Loop:10とかやってみると妙にゆっくりしてるし 横の数値をControlGetTextしてポッチの位置を予想してMouseClickDragさせると キー操作より早いけどなんかしっくりこない
225 :
名無しさん@お腹いっぱい。 :2008/03/06(木) 08:54:13 ID:BV4oMbN/0
ahkのexeを元のテキストファイルに戻すにはどうしたらいいですか?
>>223 それでもわからないです。
アクティブでないソフトにキー連打を投げようと思っているのですが、
とりあえず、1つ投げようと思い、
PostMessage,0x0100,52,0, ,ok.txt - メモ帳 ;0x0100 = WM_KEYDOWN 52 = Rキー
こう書きましたが、動作しませんでした。
どうすればできるでしょうか?
>>225 公式にあるますよ
Other DownloadsのとこのScript Decompiler
>>227 ありがとうございます、そのものずばりがありましたね。
229 :
名無しさん@お腹いっぱい。 :2008/03/08(土) 00:04:58 ID:xH0DTZtbO
Send,{a DOWN} Sleep,2000 Send,{a UP} こう書いたのですが、aが押されません。 どうすればできるでしょうか?
Send,a
マウスカーソル直下のクラスにキーを送るには何を使えば良いんですか?
まずマウスカーソル直下のクラスを取得して、その取得したクラスに向けてキー入力を送信すれば良いんじゃないでしょうか。
233 :
名無しさん@お腹いっぱい。 :2008/03/08(土) 07:37:52 ID:xH0DTZtbO
>>230 あー、いや、押しっぱなしにしたいんです
何のために? 押しっぱなしにしてもキーリピートは発生しないから一回押下するのと変わらないはずだよね?
>>234 キーリピート発生するものだと・・・
じゃあ高速でa連打してるようにするしかないか。
ただ単にShift+a-zを楽にしたかったのですが、諦めます。
やりたいのはキャプスロックなの?
>>237 メモ帳にRなんか連打して何がしたいんだ
そもそもRなんてショートカットキーあるか
動かないのもしょうがないだろ
テキスト入力したいならコマンドが違う
>>238 なにがしたいんだって、それは練習作業の「たとえば」の部分だろ。
おまえはツッコミ処が違う。
ただ、
>>237 みたいに、初回に書き込んだ後、なにも経過を書かず、
アンカーだけで督促するようなゆとりには、アドバイスなんかしたくないが
>>239 ゆとりみたいな催促ですみません。
書く前まではあまり進展がなかったのですが、
入力するキーを変えたり、キーコードをVK_Rなどにしたり、メモ帳以外のソフトに投げてみたり、
WM_CHARAで投げてみたり、KEYUPを追加してみたり、SendMessageで投げてみたり。
少なくとも上のことはしました。
でも反応がないです。
他に試すものはありますか?
公式が落ちててDLできないや
>>240 何がしたいの?具体的にやりたいこと書いたほうがいいよ。
Oblivionってキーカスタマイズできないの? 不便すぎて死ぬ。
244 :
名無しさん@お腹いっぱい。 :2008/03/08(土) 22:15:46 ID:mQS6JGYG0
>>242 >アクティブでないソフトにキー連打を投げようと思っているのですが、
そっくりそのままの意味ですが同じボタンを約1〜5万回押さなければならず、
普通にSendで送ってもいいのですがやってる時間がもったいないので、バックグラウンドで放置して投げようかと思っていた次第です。
>>116 あたりからの流れ見りゃいいんじゃねぇの?
非アクティブウィンドウに Postするサンプルならホイールリダイレクトあたり探せば出てくるんじゃね?
>>244 キーリピートならループ処理じゃね?
Loop, 50000
Send, a
何がしたいのなんて関係なくね? 要はできるかできないかだけ 教えてやればいい
>>249 ソフトによってキーメッセージの受け取り方が違ったりすることはザラだし、
質問者が物凄い効率の悪い方法でやろうとしていて、
その効率の悪い方法について聞いてたりすることもあったりするから、
目的をはっきりさせた上で、自分が試したことを書くってのが答えやすい質問なんじゃない?
お望みのことはこれでできるけど応用は勝手にやっておくれよ
PostMessage, 0x100, 0x41, 0, Edit1, ahk_class Notepad
ゲームを操作しながら他の作業ができるようにスクリプト組めますか? また、どの関数使えばいけますか? ControlSendは動いてくれませんでした。
あるウィンドウで任意のキーが押されたとき、常に特定のエディットにフォーカスして 押されたとおりのキーを送りたいのですが、どうするのが上手い書き方でしょうか? 今のところ、↓のように全部のキーを書く方法しかわかりませんでした。 #IfWinActive HogeHoge HogeSendKey(x) { ControlFocus, Edit1 Send, %x% } *a:: HogeSendKey("{Blind}a") *b:: HogeSendKey("{Blind}b") *c:: HogeSendKey("{Blind}c") *d:: ......
1.0.47.06
Caps LockをCtrlに対応させたく思い、 vkF0sc03A::vkA2sc01D や CapsLock::Ctrl や CapsLock::^ としてみましたが出来ません。どうすればいいのでしょう。 教えてください。よろしくお願いします。
mayu とか KeySwap とか併用が前提だな
同じキーでSHIFT状態によって別な文字が入る(例:1と!)のを逆転させる方法はないものかって ずっと心の片隅に引っかかってたけどやっとこさ見つけられて(NT系限定だけど)とってもハッピー SendしてからRemapすればよかったのか !::Send, 1 1::!
>>254 自分はChgKeyというソフトで無変換に変更してから、
AHK上で無変換キー(SC79)としてつかってる。
(ちなみに英語キーボードなので無変換は空キー)
259 :
名無しさん@お腹いっぱい。 :2008/03/11(火) 18:46:36 ID:8hd1Vj+m0
ALT+左ドラッグで表示画面移動 →ホイールドラッグで実現したく、 MButton::Send, {Alt} down {LButton} down MButton up::Send, !{LButton} up など試しましたが、押した瞬間しかALTが押されていないようです。 どこを変えたらよいか教えてください。
ちょっと質問します。 "アクティブウィンドウ以外を最小化"を行いたく、以下のようなスクリプトを書いたのですが、、、 WinGetActiveTitle, title WinMinimizeAll WinActivate, %title% なぜか自分の環境ではWinMinimizeAllが効かずこの方法は断念しました。 それとは別に、一瞬にしてもアクティブウィンドウは最小化させたくはないので(上記のスクリプトはきっとチカチカする) できればループ処理でアクティブウィンドウ以外を最小化させたいのですが、 全ウィンドウのコレクションを取得する方法が思いつかず、かつ見つけることもできませんでした。 AHK達人の皆さま、お知恵を拝借できないでしょうか。
Winget list
キー操作じゃなく ControlClick, X座標 Y座標, Jane Doe Style, , LEFT, , NA ってな感じにツールバーボタンをクリックしてやる操作だと Janeをバックグラウンドで動かせるな ツールバーにないのはスキンで追加したりして
マウ筋から乗り換え中ですが、躓きました。どうかアドバイスお願いします。 マウス右ボタン+ホイール上下で、キーボードの「カーソル上or下」を送信し、 右ボタンを放したときに、右クリックメニューを{ESC}で消す動作を想定しています。 RButton & WheelDown::Send,{Down} RButton & WheelUp::Send,{Up} ひとまずこれで操作はできたのですが、ホイール操作後に右クリックを離すと、 (当然ですが)右クリックメニューが出てしまいます。 マウ筋でいうところの「アクション終了後に実行」に相当する機能で ESCを送信すれば解決しそうなのですが、それに相当する機能がどうしても わかりません。 このあと、右クリックを離したときに {Esc} を送信するには、 どう書けばいいでしょうか。 それと、マウ筋の「トグル動作」に相当する機能は、 AutoHotkeyでも可能でしょうか。
調べてもわからなかったので質問します。 X単打→A X長押し→B といった風に、特定のキーの単打と長押しで動作を変える方法はあるでしょうか。 教えていただけるとうれしいです。
流行らせるページのマウスジェスチャ2なんだけど explorerにRB_LB_でAlt+F4を送るようにしてあるんだけどマウス直下じゃなくてアクティブウィンドウに利くようになってる。 もちろん設定のアクティブウィンドウをターゲットにするはチェックしていない。 また、ブラウザなどが持っているマウスジェスチャが一部が利かなくなったりする。 どうにかならないだろうか。
Alt+F4の前にWinActiveを書けばいいと思う
WinActivateか
RButton & Wheelup::send {Left} と記述したら、これ以外の右クリック関係が効かなくなってしまいました 以前の動作と共存させるにはどうしたらいいですか?
まずは落ち着いて流行らせるページを読んだ方が良いと思うよ
アフィを踏まないようにな。
>>264 KeyWaitで時間指定してErrorLevelで判断すれば多分出来る
~RButton & Wheelup::send {Left} としたら動くようになりましたが、アクション後に右ボタンを離したらコンテキストメニューが出てしまいます 出さないようにするにはどう記述すればよいですか?
KeyA & KeyB:: { Some Script } $KeyA::Send,{KeyA}
なんか、 RButton:: MouseClick, R,,, 1, 0, D KeyWait, R MouseClick, R,,, 1, 0, U return ってやってもドラッグがうまくいかないな、なんかやり方ある? どうも、押下時点でメニューとか出るんでKeyWaitがうまく行ってないのかな?
なまず日記のmigemo_isearchを使っている人に質問です。 「[MIGEMO] I-search:」ウィンドウが開いているときに ブラウザ内のどこかにフォーカスが移ると、検索ワードの 入力待ちから抜けられなくなりますよね。 そこで、とりあえず、自分でフォーカスを移した場合に ついては以下のようにして逃げていますが、根本的な 解決策が知りたいです。 #IfWinActive ahk_class IEFrame ^s::MIS_IEMigemoISearchForward() #IfWinActive ahk_class migemo-isearch ^s::MIS_MigemoISearchNextForward() Esc:: AppsKey:: +f10:: MIS_MigemoISearchClose() return *LButton:: MIS_MigemoISearchClose() MouseClick, Left return *RButton:: MIS_MigemoISearchClose() MouseClick, Right return #IfWinActive
>>273 ありがとうございました m(_ _)m
>>274 う・・・わ、恥ずかしい。今ごろ気付いた
R待ってても意味無いよな。RButtonだろ俺
ナンダヨー ニヤニヤ スンナヨー><;
xx分をxx時間xx分に換算する関数を作ろうと思い、できたのがこんなんです。 Conversion(origin){ min := Mod(origin, 60) h := Round((origin - min) / 60) Return, (hr ? h " h " : "") min " min" } いまいちかっこわるいのですが、こんなもんでしょうか。
簡単なので言えばこんなのとか conv(i){ t = 2000 t += %i%,Minutes FormatTime FormdT, %t%, HH 'h' mm 'min' return FormdT }
型定義か、オブジェクト作成が出来ればいいんだけどね static 変数使えば、private変数みたく出来・・・ないか ま、そこまで求めるような処理系をやるような言語ではないしな
WinGetコマンド等でExclude Titleを指定できますが、 ここで複数タイトルを指定するにはどのようにすればいいでしょうか?
>>281 AddGroupでグループ化して、ahk_groupで除外するというのを試みたのですが、うまくいきませんでした。
長押しと独自キーリピートのサンプルクレクレ
Inputbox に数式を入れると、結果を返すだけのツールを 作ったんですが、激しく仰々しくって・・・。もっと簡素に書けませんか? vk1Csc079 & i:: InputBox, suushiki, 数式を入力,,, 300, 110, , ,, FileAppend, Output:=%Suushiki%`r`n, c:\Enzan.ahk FileAppend, Msgbox`,`%Output`%, c:\Enzan.ahk Run, c:\Enzan.ahk Sleep, 500 FileRecycle, C:\Enzan.ahk return (一行しか式を書き込めないので、拡張性に乏しいです)
なんでFileAppendなんか使うん?
FileAppendしか思い付かなかったので・・。行数制限は外したが。 vk1Csc079 & i:: Loop, 20{ InputBox, Suushiki, 数式を入力(Canselで入力終了),,, 300, 110,,,,,Y:= If ErrorLevel = 0 { FileAppend, %Suushiki%`r`n, C:\Enzan.ahk } If ErrorLevel = 1 { FileAppend, %Suushiki%`r`n, C:\Enzan.ahk break }} FileAppend, Msgbox`,`%Y`%, C:\Enzan.ahk Run, C:\Enzan.ahk Sleep, 500 FileRecycle, C:\Enzan.ahk return
>>284 fenrirスレとマルチのうえあっちはほったらかしかよ。死ねよクソガキ。
俺には付いていけん発想だ 炊飯器に乗って隣の家に行くような
289 :
284 :2008/03/16(日) 23:26:39 ID:bN/A5LaO0
ID調べる粘着さんに誤爆をマルチ呼ばわりされてしまった。
>>288 ダイヤログボックスに数式を入れて結果を入力させるのが目的です。
上の文ではMsgboxを使っていますが、使用時はクリップボード&貼り付けにしています。
Google窓やCals.exe等では、結果の閲覧までなので一歩進めて入力までやりたくて・・。
これはひどい
291 :
284 :2008/03/16(日) 23:59:55 ID:bN/A5LaO0
Gui,Edit を出して変数に格納するのですか? そうだとしても外にAHKを書くためにFileAppend以外に方法はないと思うのですが・・・。
まあ、もう少し付き合うけど 変数に入れてそれをLoop, Parseするのでは何がいかんのか?
結果をほかのものに渡すだけならクリップボードを使えば良いだろ。 ClipBoard= %Suushiki%
標準出力でもいいんじゃね
>そうだとしても外にAHKを書くためにFileAppend以外に方法はないと思うのですが・・・。 FileAppend以前にわざわざ外にAHKを書く意味がわからない。 fenrirスレ見てきたけど、IDなんか調べなくてもまんまマルチじゃん。 しかも向うではツッコミ入れられてから誤爆とか言い訳してるし、お前本当クズだな
数式ならはやらせるページのあぷろだにいくつかあった気がするが
>>271 遅くなりましたが、ありがとうございます。
298 :
271 :2008/03/18(火) 06:36:36 ID:DBpKlb6a0
Loop の回数を入力して2重ループでキーをsendするマクロを使っているのですが; たまに回数を間違えて終わるのを待つのがつらいです。 マクロを強制終了する方法はあるのでしょうか?
^ESC:: ExitApp とか適当にホットキー設定しておけば? マルチスレッドで動いてるはずだから多分大丈夫じゃね? 本当にどうしようもない時はタスクマネージャからプロセスの終了で強制終了汁
連打だったら、こんな感じで 規定回数orフォーカスずらしたら終わるようにしてるなぁ renda(key, cnt) { WinGetClass, oCls, A Loop, %cnt% { IfWinNotActive, ahk_class %oCls% Break, Send, {%key%} } return }
GetKeyStateで適当なキー押下を調べて 押されてたらBreakするとか
UWSCのMOUSEORGみたいに、 特定のウインドウにキーを送る関数や方法はありますか?
ありまくり
・マウスの中ボタンを押すと、(中ボタンを放した瞬間)検索開始 ・マウスの中ボタン+ホイール↓で、検索の次候補(F3) ・マウスの中ボタン+ホイール↑で、検索の前候補(shift+F3) という動作をさせたいのですが、 MButton::send,^f MButton & WheelDown::send,{F3} MButton & WheelUp::send,+{F3} この3行のうち、下の2行を入れると、 先頭の「中ボタンを押しただけの動作」が無視されてしまいます。 希望する動作にするためには、どう書けばいいでしょうか。
単独と&の組み合わせって駄目じゃなかったっけ。 前試して動かなかったような記憶が。
MButton Up::send,^f でできると思う
マウスボタンの配置を入れ替えることはできますか? a::b b::a ↑キーボードはできたんですけど
指をクロス
>>311 Windowsの設定で左利き用にするのではだめなのか?
314 :
311 :2008/03/23(日) 09:32:42 ID:h6Mm6xGhO
右←→X2を交換したいんです ロジのトラックボール(ST-45UPi)を購入した ので親指に左右クリックを集めて使いたいなと SetPoint+UberOptionsで実現できそうなのですが できればSetPointとか使いたくないんです。
間違い左←→X2です
SetPointつかったほうがいいんでないかい
319 :
311 :2008/03/24(月) 11:25:36 ID:Ns5Ryq4zO
>>318 ありがとう。すごく参考になりました。
一応結果を書いておきます。
飛び先にはいくつか方法が書かれているけど,↓がベターだとおもう。
*LButton::
MouseClick, right,,,,, D
KeyWait, LButton
MouseClick, right,,,,, U
return
*RButton::
MouseClick, left,,,,, D
KeyWait, RButton
MouseClick, left,,,,, U
return
KeyWaitの効果??でマウスジェスチャー,範囲選択も標準同様に動作できた。
ちょっと不満なのは右クリするとコンテクストメニューが表示されたり
されなかったりする。それ以外は期待通りでした。
(再現も規則性があって,右ダブルクリックすれば回避できるけど)
>>316 自分の環境だと突然ALTやCtrlが押された状態になってイライラするから
使いたくないんです。原因もわからないし・・
XPSP3日本語版はキーUp/Down情報が正しく返して(
>>3 )くれる・・・わけないよなぁ
Setpointの押しっぱなし回避のため、Alt/Ctrl/Shift upとSetpoint再起動のスクリプトを書いておくがよろし
>>319 スレチだけど、押しっぱなしの件うちも起こるなぁ。>Setpoint
まぁ、ごく稀になんで我慢して使ってるけど。MouseWareの頃はこんな事なかったのになぁ。
どれかが押されたままになったら、そのキー(キーボード実体)を適当にポンポン叩いてると
しばらくすれば直るんだけど。
俺は
>>321 をやってみようかと思う。アイデアどうもありがとう
>>321 をやるなら、ホットキーは^!+z::みたいにするのがおすすめ。
押しっぱなしの症状出ていても起動するようにな。
Ahkファイルを右クリックしたとき出る「edit script」で使用するエディタを変更する方法は何かないでしょうか?
>>324 俺は↓のレジストリのnotepad.exeの部分を書き換えてる。
他の方法もあるかもしれないけど。ちなみにOSはXP
HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Edit\Command
「フォルダオプション」の「ファイルの種類」で .ahk->詳細設定->Edit scriptいじってもできるよ。
あとは、Menu, Tray, 〜で全部書き換えてしまうとか
雑談していいか?デジ絵業界のこと全く知らんのだが、プロにもAutohotkeyは流行ってるの?浸透する余地はあるの?
プロや同人者じゃないけどフォトショやイラレくらい普通に使うっしょ。ビジネスでも個人でも。 スクリプトに免疫ある云々以前に自動保存は危険だから そうそう需要があるとは思えんし (保存する気は無いけどちょっと試してみた、っつーような状態でオリジナル更新とかされたら泣ける。 MS-Officeみたいに保存でアンドゥバッファがクリアされるようだとかなりアウチな状況になる) 329のブログの人は元々uwscとかやってるから、浸透させたいとかそういう意図じゃなく 単純に自分が使ってるものを公開してるだけじゃないか?
VAIOノートのボリューム変更が面倒(ミュートボタン+十字キー)なので、ahkでボリュームを変更しようと考えました。 しかし、VistaのせいかVAIOのせいか、XP機では問題なく動作していたコマンド「SoundSet」がまったくききません。 これはVistaで音量管理が変わったせいでしょうか。それともVAIO固有の問題でしょうか。 他にVista機を使ったことがないので、ボリューム関係の命令が通常は問題なくVistaでも動作するのかどうかお教えいただければと思います。
イラレを普通の人が使うか?まぁいいや。俺的には糞キーだった無変換と 変換キーがAHKで超活躍したのに感動して、ネタ探しにこのスレに居着いてる。
無変換は使う人は使うらしい。 うちの親父がひらがな確定するのに使ってた。 AHK立ち上げたまま貸したから誤爆しまくってた。
ドロー系ってイラレくらいしか市販ソフトで選択肢なくなってるじゃん 簡単なものならInkscapeとかでも良いけどちょこっと凝ったことやって 印刷所に渡すとかならイラレ一択だよ 普通の人でもちょっと凝ったチラシ程度は作ったりするでしょ?
作業上、定型処理があってマクロが無い場合、
何らかの補助ツールを用いてバッチ的に処理したいと思うのは
当たり前なんじゃないの?
エクセルとかの事務処理ツールは大抵マクロがあるけど、
オーサリングとか描画とかのツールには無いことがあるし。
その場合、キー送信って方法はわかりやすい手法だと思う。
でも浸透はしてないと思う。
>>332 アプリケーション毎に音量を変えられる Vista の仕様には対応してないとか。
つまり、AHKのプロセスのみの音量が変わるだけ。
システム全体のボリュームを変更したい場合は以下のようにして逃げろと書いてある。
@AHK互換モードで動かす
Aボリューム変更キーを変更してシステム全体のマスタ音量を変えるようにする
ttp://www.autohotkey.com/docs/commands/SoundSet.htm > [Remarks]
> On Windows Vista, SoundSet and SoundGet affect only the script itself
> (this may be resolved in a future version).
> There are at least two ways to work around this:
>
> 1) In the properties dialog for the file "AutoHotkey.exe" (or a compiled script),
> change the compatibility setting to "Windows XP".
> 2) Have the script send volume-control keystrokes to change the master
> volume for the entire system. For example:
> (以下略)
>>334 俺も無変換に機能を割り当ててウハウハ気分。
だが、あるとき「あれ?ひらがなにならねぇじゃん」というシーンがちらほら。
・・・あれだけ邪魔扱いしていた無変換キーを、
無意識のうちに微妙に使ってたことに驚愕した。ごめんよ無変換君
まぁ最終的に ~ up で支障のないように割り当てちゃったけど
>>336 コミスタみたいな漫画描き用ツールは使ったことないからわからんが
adobe系ならアクションで操作記憶できるし、jsも使えるからな
外部のソフトでどうこうしようって需要はそんなには高くないんじゃないかな
自分はjsわからんからAHKで適当にやらせちゃったりしてるけど。
>>336 なるほど、Volume_Upを送ればいいんですね。助かりました。
AhkがVistaの仕様に対応してくれると面白いんですがね。
>>337 変換中にひらがな なら、Ctrl+u、或いはF6使うとか?
Ctrl+u,i,o,pに慣れたんで、変換中は無変換キー使わないです。
無変換キーは、なまず日記(2005-09-16)参考で(Alt複数回押しが元ネタ)
2度押しでF24キー送ってランチャの呼び出しキーにしてるのと
テンプレにもある無変換+IJKLで↑←↓→にして使ってる。
すみません。全くの初心者です。 マウスのX2ボタン+ホイールで水平スクロールさせたいのですが、つまづいてます。 下の表記ではダメなのでしょうか?どの様に表記すれば良いでしょう? XButton2 & WheelUp:: ControlGetFocus, fcontrol, A SendMessage, 0x114, 0, 0, %fcontrol%, A XButton2 & WheelDown:: ControlGetFocus, fcontrol, A SendMessage, 0x114, 1, 0, %fcontrol%, A
「アクティブウィンドウのアクティブコントロール」だと 実際はどこにフォーカス当たってるのかわからんよ マウス下のコントロールハンドル送るほうがまだ確実 MouseGetPos,,,,ctrl,3 PostMessage, 0x114, 0, 0, ahk_id %ctrl% もしこれでもダメなら対象のコントロールがスクロールに対応してない (見当違いのコントロールをつかんでしまっている)か、 スクロールハンドルも指定してやらないといかんとかだと思う
Mousegesture.ahk使え
%00%01%12みたいにエンコードされたURL文字列をデコードしたいのですが、
変数に入っているURLをデコードするには、どのようにすればいいでしょうか。
AutoHotkey本家サイトで、下記のサンプルらしきものをみつけたのですが、
AutoHotkey自体にまだ慣れていない状態で。たとえば %abc% という変数に
入れたURLを変換するには、どのように書けば動いてくれますか?
uriDecode(str) {
Loop
If RegExMatch(str, "i)(?<=%)[\da-f]{1,2}", hex)
StringReplace, str, str, `%%hex%, % Chr("0x" . hex), All
Else Break
Return, str
}
http://www.autohotkey.com/forum/topic18876.html
これってクリップボード拡張機能があるの? あるんだったらいくつまでため込んでおけるの?
クリップボードをどうにかできる機能はある。拡張は各自で行う。 己の好きなだけためられるようなコードをかけばOK
cbhistory%num% = cbhistory%num-1% とか偽配列に溜め込んでいけばいくらでも
例えばあるキーを押したら「○」と入力されるようにするには クリップボードを使わずにできるの?
できるけど全角文字はOSや入力先コントロールによっては化けるよ
他のスレでAHKを勧められたんで使ってみようかと思っています。 iniファイルに設定を書けって言われたんで記述しようかと思ったんだけど 落としたzipにはiniファイルがありません。 これは自分で作れってことですか?
練習ならデスクトップで、右クリックして [新規作成]→[Autohotkey Script] と選択して新規ファイル作る。 さらに出来たファイルを右クリックして [Edit Script] を選んで編集する。 たぶんメモ帳で編集となる。 何か書いたら*保存して*からダブルクリックして実行。 後はがんばれ。
自分も新参なんでそのへんよくわからんですが、 最近のAHKは、ini ファイルあれば読み込むけど、勝手につくったりはしないのでは。 適当な名前(AutoHotkey.ahkとか) を適当なところに置いて起動時に実行させたほうが、 エディタで編集もしやすいし良いような。
zip版でも.ahk起動でなかったらini作られると思うけど
AHKでiniファイルを作って使用する場合 その設定はシステム全体に共通するものになってしまうんですか? ある特定のソフトではその設定を無効にすることってできますか?
>>357 システム全体に共通のものにすることも
特定のソフトだけに適用させることも
特定のソフトだけを除外することも
皆できます。
>>358 そのやり方の書いてあるサイトを紹介してくれませんか?
>1
さすがに春とは言えひどいのがわくなw
いちいちあおんな
>>350 やっぱり化けますか。
クリップボードに文字入れてペーストするしか方法ないのかな。
365 :
名無しさん@お腹いっぱい。 :2008/03/31(月) 23:53:39 ID:I9uPmNx00
変換キーをシフト+コントロールにしたいんだけど vk1Csc079::^+ だとうまく動かないんだけどSend使ってもダメだった。 どうやったら出来るの?全然違うことやってるかな…
>>開発途中のため、構想されている機能のうち極一部しか実装されていません。 意気込みはいいが、これじゃな…
今日は・・
ぬるたん、何やってんのw
エイプリルフール? じゃないのね・・・ さすがスクリプトオタク
;# MobileSOS.ahk
Gui, 1:+ToolWindow -Disabled -SysMenu -Caption
Gui, 1:Color, FF0000
Gui, 1:Show, X0 Y0 W%A_ScreenWidth% H%A_ScreenHeight%
Gui, 2:+ToolWindow -Disabled -SysMenu -Caption
Gui, 2:Color, 000000
Gui, 2:Show, X0 Y0 W%A_ScreenWidth% H%A_ScreenHeight%
Loop
{
Gui, 1:SHOW
Sleep, 200
Gui, 2:SHOW
Sleep, 200
Gui, 1:SHOW
Sleep, 200
Gui, 2:SHOW
Sleep, 200
Gui, 1:SHOW
Sleep, 800
Gui, 2:SHOW
Sleep, 200
}
Return
Esc::ExitApp
http://www.forest.impress.co.jp/yashiro/2008/mobilesos.html
>>365 AHK勉強中です、正しい書き方でないだろうし
もっとよい記述があると思うんだけど一応書いてみました。
vk1Csc079::
Send,{Shift Down}{Ctrl Down}
loop
{
sleep, 10
GetKeyState, vkstate, vk1Csc079, P
if vkstate=U
{
Send, {Shift Up}{Ctrl Up}
break
}
}
return
>>371 すばやいな
でも、SOSは・・・ーーー・・・だとおもうんだ
画面の特定の場所(たとえば右上)にマウスオーバーしたら、 特定のアプリを最前面表示、みたいにやりたいんですが、 どこかにそういうスクリプト公開されてますか?
画面端だけならMouseGesture.ahkにある
なるほど。ちょっと見てみます。
* * * + うそです n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
ナ ゝ ナ ゝ / 十_" ー;=‐ |! |! cト cト /^、_ノ | 、.__ つ (.__  ̄ ̄ ̄ ̄ ・ ・ ミミ:::;,! u `゙"~´ ヾ彡::l/VvVw、 ,yvヾNヽ ゞヾ ,. ,. ,. 、、ヾゝヽr=ヾ ミ::::;/  ゙̄`ー-.、 u ;,,; j ヾk'! ' l / 'レ ^ヽヘ\ ,r゙ゞ゙-"、ノ / l! !ヽ 、、 | ミ/ J ゙`ー、 " ;, ;;; ,;; ゙ u ヾi ,,./ , ,、ヾヾ | '-- 、..,,ヽ j ! | Nヾ| '" _,,.. -─ゝ.、 ;, " ;; _,,..._ゞイ__//〃 i.! ilヾゞヽ | 、 .r. ヾ-、;;ノ,.:-一'"i j / ,.- 、 ヾヽ、 ;; ;; _,-< //_,,\' "' !| :l ゙i !_,,ヽ.l `ー─-- エィ' (. 7 / : ' ・丿  ̄≠Ξイ´,-、 ヽ /イ´ r. `ー-'メ ,.-´、 i u ヾ``ー' イ \_ _,,......:: ´゙i、 `¨ / i ヽ.__,,... ' u ゙l´.i・j.冫,イ゙l / ``-、..- ノ :u l u  ̄ ̄ 彡" 、ヾ ̄``ミ::.l u j i、`ー' .i / /、._ `'y / u `ヽ ゙:l ,.::- 、,, ,. ノ ゙ u ! /_  ̄ ー/ u / _,,..,,_ ,.ィ、 / | /__ ``- 、_ l l ``ーt、_ / / ゙ u ,./´ " ``- 、_J r'´ u 丿 .l,... `ー一''/ ノ ト 、,,_____ ゙/ / ./__ ー7 /、 l '゙ ヽ/ ,. '" \`ー--- ",.::く、 /;;;''"  ̄ ̄ ───/ ゙ ,::' \ヾニ==='"/ `- 、 ゙ー┬ '´ / \..,,__ 、 .i:⌒`─-、_,.... l / `ー┬一' ヽ :l / , ' `ソヽ ヾヽ l ` `ヽ、 l ./ ヽ l ) ,; / ,' '^i
SubMakeTxt: (処理) FileAppend,%Text%,hoge.txt Return このようなサブルーチンで、処理の最中に再び同じサブルーチンが呼び出された場合、 最初に呼び出された方を打ち切って新しく最初からやり直すというのはどう書けばいいんでしょうか。 やりたいのは「さっきのやめて新しい条件でhoge.txt作って」という感じのことです。
そいつをコンパイルEXE化しといて 呼出し毎にまずプロセスを落としてから処理に入るとか
偉い先生、教えてください。 スクリプト起動中に Hotstring の設定を書き換えられますか? たとえば #Hotstring C ↑ ↓ #Hotstring C0 などとトグルしたいんですが。
AHKでマウスのスクロールボタンを押した 動作を設定したいんですがそれってできます? テンプレにある流行ページ見たんですが ボタン押しのキーリストがありませんでした。 やりたいことはスクロールボタンを押したまま スクロールさせてアプリを切り替えたんです。
× 切り替えたんです。 ○ 切り替えたいんです。
下の二行で頭がくらっと来た。
エディタや入力部分等で選択している範囲の文字列中の一番右側の数値を1増やすのってどうやればいいんですか? file-01.txt を選択して実行すると file-02.txt になるような感じです
>>386 正規表現で数字部分だけ引っこ抜いたらどうでしょう
Alt や Ctrl や Shift を素早く二回押しして クリップボードとかを立ち上げようと思っているのですが、 こういう「連続押し」はどうすれば良いのでしょうか? (窓使いの憂鬱スレで聞いたら「AHKが得意だよ」と言われてやって来ました)
>>389 どうもありがとうございます。
これに何か書き加えれば
連続押しでアプリを呼び出したりできるんですね。
ちょっと勉強してみます。
詰まったらまた質問させて頂きますので
その時はお願いします。
リファレンス見てて Exp() ネピア数eのべき乗を返す関数 を見たときに自分の限界を感じた 商業科卒でろくな数学教わってこなかったから 単語調べても説明文から理解できないという詰みっぷり 例題とかどういう時に使うのかないから プログラミングできなくてもこれ使えばなんとかなるかなフフンって思ってた自信が崩れた 理系の学校に行っとけばよかったと思ったよ後の祭り
>>389 のURLで紹介されていた
~CTRL::
if A_PriorHotkey <> %A_ThisHotkey%, return
if A_TimeSincePriorHotkey > 400, return
;some action
return
に、現在クリップボードを呼び出すショートカットである
Ctrl+D を試しに割り当てて呼び出したいのですが、
どうすれば良いでしょうか?
(高校中退の僕にはプログラミングは難し過ぎでした)
リファレンスの Send の項を見て来い わからないんならお前には無理、あきらめろ
>>391 eなんて理系でも使わないとこじゃまったく使わねぇよw
ってか何でそんなもんを調べてるんだ?
「米の炊き方が知りたいのですが鉄の熱伝導率を調べても私には意味がわかりませんでした」って言ってるようなものだぞ
"e"をネピア数っていうんだ。知らんかった。一応理系の大学でたけど。 てか、数学をコテコテいじるようなところじゃなかったしな。 自然対数の"底"って書いてあれば、高校数学程度って分かるんだが。 数Uくらいか?(ってか今、数Uってあんのか・・・?)
>>394 ちゃうだろ
米の炊き方なら目的がはっきりしてるから鉄の熱伝導率なんて知識が
米を炊く時に必要かそうでないか判断できる
知らないものを調べることになんか疑問あるかね
何か思い立ったときそれが必要だったとして知らなかったら不可能として諦めて損になる
日本語でおk
何か不幸な生い立ちでも?
Cを始めるときにC言語辞典読破してからハローワールドするみたいな
>>396 お前にとってeが必要になる可能性が高いかどうかくらいは今でも判断つくだろ?
おおよそ不必要なら、さっさと基本的な事をマスターして、その後で覚えたらいいやん。
覚えたらeやん
つくしが引っ込んだぞ、おい
ゴメン
404 :
名無しさん@お腹いっぱい。 :2008/04/06(日) 21:06:22 ID:FTx5YlaY0
神様 あるウィンドウがクリックされた時に、 そのウィンドウにあるメニューバーの特定のメニュー項目がdisabledならば、 クリックされなかったことにしてreturnしたいのですが、 どこかにサンプルなどないでしょうか。 たとえばIEがクリックされた時、IEのメニューバー->編集(E)->コピー(C)が disabledならクリックイベントが発生しないようにしたいです。 エロかっこいい神様、どうかおながいします。
コピー限定だけど、Disableかどうかにかかわらずとりあえず実行して クリップボードが変更されたなら実行、そうでないなら放置、でいいのでは。
例は、分かりやすく書いただけなので、「コピー」とは別物です。 フックとかしないとだめなんでしょうか。 エロカッコいい神様、どうかおながいします。
$^f::Send {Right} として、MS Word 上で ^f のキースクロールをくりかえすと、 たまに (数百回に一回ぐらい) Ctrl-F が入力されてしまうんだけど、 こんなもんなのだろうか? ^v::Send {PgDn} でも Ctrl-V が入っちゃう。Sleep を入れるともっと悪くなるよ orz
AutoHotkeyでも、こういうソースコードっぽいソースを書く人もいるんだな
素人質問ですが、教えてください。 @ ;右クリック+ホイール↓ = タスク切り替え ~MButton & WheelDown:: AltTab ;右クリック+ホイール↑ = タスク切り替え(逆順) ~MButton & WheelUp:: ShiftAltTab A ~MButton & WheelDown:: AltTab ~MButton & WheelUp:: ShiftAltTab @の方法で記述すると、ダイアログにアイコンが表示されるんですが Aだと表示されず、中央ボタンを押したらアプリが切り替わります。 ですのでホイールの意味がまったくないんです。 どこが違うんでしょうか?Aでも@のような操作がしたいんですが。
@のMButton→RButtonに置き換えてください。
IMEが入力中かどうかを判別する方法はありますか? 変換や確定のSpace,Enterとそれ以外を分けたいんです。
IME状態を得るのなら探せば幾つか・・と即レスするところだった。 MS-IMEやATOKがはたらいているかどうか、見るスクリプトは見たことないなぁ。
OnかOffかという状態をみるだけならなんとでもなるんですけどね…
416 :
414考え中 :2008/04/08(火) 18:36:01 ID:/9Ax63ok0
AutoHotKey Threadの
>>591 で言われているPixelSearchを
実際に使ってみた。やれないことはなさそう。
>>413 ;0XC56A31 ←ATOK変換時の色(青) 0XFFFFFF ←未確定時の色(真っ白)
X2:=A_CaretX + 5
Y2:=A_CaretY + 1
PixelSearch, Px, Py, A_CaretX, A_CaretY, X2, Y2, 0X0F0400 ,0
if ErrorLevel = 0
IMEFlag=1
Msgbox, %IMEFlag%
>>413 に書いてある内容だけ実現したいなら、
"窓使いの憂鬱が"の方が向いている
だが、Vistaだと厳しいな
AutoHotkey から Text Services Framework (TSF) は使えないのだろうか?
最近いじり始めたばかりだが マウスジェスチャの動作書くのって 素人じゃ難しいかな? どっかに詳しく書いてあるといいんだが。
>>419 マウスジェスチャならはやらせるページの作者がかなり高性能なものを作ってくれてる
それをいじるなり参考にするなりすべし
421 :
419 :2008/04/09(水) 23:30:39 ID:Y/Kzcbh10
一応それ入れて中見てみたけど もう自分にはチンプンカンプンでした。 a::bみたいな簡単には行かないんですね。
RButton →←::〜 みたいな書式なら楽だな ってか、マウ筋みたいだ
マウ筋をAHKに移行したいのだがマウ筋でつくった設定が膨大すぎてやる気が起きんw
425 :
419 :2008/04/10(木) 23:29:26 ID:zeB47hBY0
>>424 これは具体的にどうすればいいんでしょう?
ラベルで振り分けるようにしてみました.
マウ筋 に近い挙動にしたつもり.これをincludeして,
設定ファイルにはMG_****(****にはジェスチャの動作を入れる)なるラベルを書けばいいです.
プログラム名とかも指定できて,次のような感じ.
426 :
419 :2008/04/10(木) 23:30:29 ID:zeB47hBY0
include? 設定ファイル? ahkに上の文章を書き込むだけじゃダメ?
自分で試行錯誤できないなら止めとけよ。
::無変換+E ~vk1Dsc07B & e::Edit こんなんやってるんだけどIMEオン時にひらがな、カタカナ、半角カタカナと切り替わるんだけど この切り替わるのを無効に出来ないですか?
>>428 IME側の設定を変えるのが良いかと思う
~消して、IMEがOnかOffかを調べてOnだったら無変換送らないようにするとか
>>429 あーそこ忘れた。
ありがとう
430もありがとう
メインスクリプトAとサブスクリプトBがあって、それぞれ共通の変数cを使いたいんだが いわゆる戻り値という形で変数を使いたい場合はどのようにすればいいかな? 今はその方法がわからないので、iniに読み書きすることでどうにか対応してるけど もっとスマートな方法があったら教えてくれないか 一応スクリプト晒す A ;回数入力-確認 ;c ループ回数 runwait B.ahk iniread,lc,ahk.ini,変数,c msgbox,ループ回数 %c%
つづき B ;回数入力 ;d ループ回数 loop { inputbox,d,回数入力,繰り返す回数を入力(1-999) ;Cancelを押した場合 ;iniに0を書き出してmsgbox出してループ脱出終了 if errorlevel<>0 { iniwrite,0,ahk.ini,変数,c msgbox,終了します return } ;1〜999の数字を入力した場合 ;iniにdを書き出してループ脱出終了 if d between 1 and 999 { iniwrite,%a%,ahk.ini,変数,c return } ;1〜999以外の数字を入力した場合 ;msgbox出してループ戻り else msgbox,回数は1-999の間で入力 } Bはいろいろなスクリプトで使いまわしたいので それぞれ独立した形でどうにか実現したいんだ・・・
Bを関数化して汎用ライブラリにすりゃいいんじゃないの? AなりCなり好きなメインスクリプトから Includeして使えばいい
>>434 (・∀・)デキター
どうもありがとう
そんな行はないぞ。手を入れてないか?
変数内の文字列で条件分岐したいのですが、 Tabってどうやって検索すればよいのでしょうか。 \tでも`tでもないんですね。
>>437 FavoriteFinder.ahk の94行目を global List, FAV_DIR に変更したら一応動いたんですが
リストが取得できていないようです。
手を加えたのは12行目のMigemoOpenのところだけです。
;; EBWinで辞書検索 #s:: clipboard= Send,^c ClipWait SetEnv,word,%clipboard% run,C:\applications\EBWin\EBWin.exe /C=1 /S=%word% return
>>439 気になったので調べてみたよ。
Files = %Files%%fn%`n
と
ret = %ret%%FAV_DIR%%item%.url`n
を
Files := Files . fn . "`n"
と
ret := ret . FAV_DIR . item . ".url`n"
に変える。
`nが何故か消えちゃって全部つながっちゃうのが原因だったみたい。AHKのバグなのかな??
しかし、作者さんの言うように検索がどうもうまくいかないみたい。
訂正: ret = %ret%%FAV_DIR%%item%.url`n の方は修正しなくても大丈夫みたい
>>442-443 ありがとうございます。
まだ使い始めたばかりなんですが色々できて面白そうですね。
Send系で、^や+等の特殊キーやアルファベットの大文字等のShiftを押しながら入力する文字が化けることってない? ^vで貼り付けをしたはずが単にvだけだったり、括弧()を入力したはずが89になったりとか… Delayの値を増やしても時々発生するしバグなのかな
;Mac用ユーティリティ Smart Scroll X にlogiマウスのフリースピンっぽいことができるスクロールに慣性つける機能があるけど ;Win用ユーティリティでそれができるものがたぶんないと思うので作ってみたがが・・できたものは別物orz ;ホイールを速く回せば連続スクロールに変わり逆回転で止める(連続スクロール中に速度を変えることもできない・・ ~WheelDown:: Wheelstate:=1 ; スクロールUpの停止条件 If (A_EventInfo > 2) ; ホイールの速度が設定値を超えると連続スクロール Loop, 100 { ; 暴走対策・・ Sleep, 30 ; スクロール速度調整用のウェイト Acceleration:=A_EventInfo*A_EventInfo*A_EventInfo ; スクロール加速度・・とりあえず3乗してみた Loop,%Acceleration% { if (Wheelstate=0) ; WheelUpが入力されるとスクロール停止 return ; breakしないでもいいんだろうか? send,{WheelDown} }} return ~WheelUp:: Wheelstate:=0 ; スクロールDownの停止条件 If (A_EventInfo > 2) Loop, 100 { Sleep, 30 Acceleration:=A_EventInfo*A_EventInfo*A_EventInfo Loop,%Acceleration% { GetKeyState, Wheelstate, WheelDown if (Wheelstate=1) ; WheelDownが入力されるとスクロール停止 return send,{WheelUp} }} return ; これをもっとまともにできないだろうか・・?
~WheelUp::以下の GetKeyState, Wheelstate, WheelDown を消し忘れてた・・・それ以前の問題だろうけど・・
1) スクロール速度用の変数をグローバル変数でもつ 2) ホットキー設定では、スクロール速度の変数だけを操作して、何も送信しない("~"はつける) 3) タイマで一定のサブルーチンがコールされるようにする 4) 3)で呼ばれるルーチン内で指定の速度分のスクロールをPostMessageで利用して送る ex) PostMessage,522,%wParam%,%lParam%,%cls%,ahk_id %hwnd% って感じかなぁ。 トラックポイント派なので検証できず。
450 :
名無しさん@お腹いっぱい。 :2008/04/19(土) 15:49:36 ID:7DcoF6RP0
zを押したら jとvをタイプしてくれるようにするには どう書けばいいのか教えてください
::send,jv
なまず日記が復活して、楽しみにさかのぼって読んでたら・・・ もう面白いスクリプトは書いてくれなさそうで残念だ。
>>449 よくわからなかったが・・それらのキーワードをヒントに調べてみると
どうやら
>>1 のなまず日記の中で(3)(4)らしいことやってるようなのでそのあたり参考(むしろパクリつつ)作り直してみた・・・
1;
#Persistent
#MaxHotkeysPerInterval 300
FreeScroll("init",0) ; タイマ0でないと遅くなる・・
FreeScroll("setDefault",1.5,120,1) ; 加速度"1.5",最小スクロール幅"120",スクロール開始速度"1"
return
WheelDown::
FreeScroll("down")
return
WheelUp::
FreeScroll("up")
return
FreeScroll(dir = "", param1 = "", param2 = 0, param3 = 0)
{
static WheelDownCounter ; down方向のホイール割り込み回数
static WheelUpCounter ; up方向のホイール割り込み回数
static Acceleration ; スクロール加速度
static MinimumScrollValue ; 最小のスクロール量(1ノッチ
static FreeScrollSpeed ; 連続スクロールに切り替えるホイール速度
global FreeScrollState ; 連続スクロールの状態 0=通常スクロール,1=連続スクロール開始フラグ,2=連続スクロール中
global ScrollValue ; スクロール量(速度)
global cntrl ; スクロールコントロールウィンドウ?
if(!dir){
if(WheelDownCounter || WheelUpCounter){ ; ホイール入力があったとき
CoordMode,Mouse,Screen
MouseGetPos, posX, posY, window , cntrl, 3 ; PostMessageのために位置とウィンドウを取得
; WinActivate, ahk_id %window% ; ホイールでウィンドウをアクティブにする・・しかしスクロールがガクガクになる
;2 ScrollValue := Round((WheelDownCounter ** Acceleration) * MinimumScrollValue * -1) ; スクロール量の計算 ScrollValue := ScrollValue + Round((WheelUpCounter ** Acceleration) * MinimumScrollValue) ; スクロール量の計算 Critical WheelDownCounter = ; ホイールDownカウンタをリセット WheelUpCounter = ; ホイールUpカウンタをリセット Critical, Off Gosub, FreeScrollCheck ; 条件が面倒なので外に出した・・ }} else if(dir == "init"){ ; 初期化 Critical if(!Acceleration) Acceleration = 1.5 ; 1で加速なし if(!MinimumScrollValue) MinimumScrollValue = 120 ; アプリによってはこれより低いとスクロールしないらしい if(!FreeScrollSpeed) FreeScrollSpeed = 1 ; 大きいほどスクロール切り替えに要する速度が速くなる Critical, Off if(!FreeScrollState) FreeScrollState = 0 ; タイマ0でないと遅くなる・・ if(!param1) time = 0 SetTimer, FreeScrollHandler, %time% }else if(dir == "setDefault"){ ; Defaultの設定 Critical if(param1 != 0) Acceleration = %param1% if(param2 != 0) MinimumScrollValue = %param2% Critical,Off
;3 if(param3 != 0) FreeScrollSpeed = %param3% }else if(dir == "down"){ WheelDownCounter++ if(WheelDownCounter > FreeScrollSpeed && FreeScrollState == 0) ; 連続スクロールのホイール速度取得 FreeScrollState := 1 ; 連続スクロールの開始フラグ }else{ WheelUpCounter++ if(WheelUpCounter > FreeScrollSpeed && FreeScrollState == 0) ; 連続スクロールのホイール速度取得 FreeScrollState := 1 ; 連続スクロールの開始フラグ } if(ScrollValue == 0) ;スクロールしないときは終了。これがないとスクロールバーがアホになる・・ return WinGetPos,winX,winY,winW,WinH, ahk_id %cntrl% ; コントロールの真ん中の座標・・? if(posX == "") posX := winX + winW // 2 if(posY == "") posY := winY + winH // 2 wparam := (posY << 16) | (posX & 0xffff) lparam := ScrollValue << 16 PostMessage, 522, %lparam%, %wparam%, , ahk_id %cntrl% ; メッセージを送りスクロールする if(FreeScrollState == 0) ; 通常スクロールのときはメッセージを送ったあとスクロール量をリセット ScrollValue := 0 sleep,20 ; 増やすとスクロールは荒くなるが重いウィンドウでのスクロール停止が早くなる return } FreeScrollCheck: { ; 通常スクロール以外の条件分岐 if(FreeScrollState == 0) ; 通常スクロールならさっさと抜ける
;4 return if(FreeScrollState == 2 && FreeScrollValue > 0 && ScrollValue < 0){ ; 連続スクロールUpをWheelDownで止める ScrollValue := 0 FreeScrollValue := 0 FreeScrollState := 0 return } if(FreeScrollState == 2 && FreeScrollValue < 0 && ScrollValue > 0){ ; 連続スクロールDownをWheelUpで止める ScrollValue := 0 FreeScrollValue := 0 FreeScrollState := 0 return } if(FreeScrollState == 1 && ScrollValue != 0){ ; 連続スクロール開始時 FreeScrollValue := ScrollValue ; FreeScrollValueは連続スクロールの方向を保持しているような・・ FreeScrollState := 2 return }} FreeScrollHandler: ; タイマハンドラ FreeScroll()コールするだけ { FreeScroll() return } 長くなってしまった・・ スクロールがガクガクならずにホイールでウィンドウをアクティブにするにはどうすれば・? 他にもなにかあれば・・
457 :
409 :2008/04/23(水) 22:41:57 ID:FJVhdogM0
$^f::
BlockInput On
Send {Right}
BlockInput Off
return
としたら
>>409 の問題現象が出なくなった。こんなもんで良いのだろうか…
AHK Version 1.0.47.06
>>445 同じ問題のように思えるので、BlockInput を追加して試してみてくれるとうれしいな。
エクセルの永遠のテーマである 「入力」モードから、「編集」モードに行く時、 F2押さないと、移行しないっていう面倒な仕様。。 ぐぐるとみんなあの仕様にイライラしてて でも解決策ないみたいで。 autohotkeyなら、 入力開始したら、左下ステータスの文字を判定して、すぐ編集モードに移るのができそうな気がして。 もし「超々々々々」気が向いたら、誰かあの仕様を回避するスクリプト書いてくれませんか
F1ヘルプさえヌッコロしとけばF2編集は別に苦痛じゃない。 Windows標準ショートカットなので慣れれば忘れることもそうないし。
F2の何が面倒なんだ? 選択項目編集としては標準キーバインドじゃん せいぜいF2から他のキーに変えたいなら分かるが モード移行は自覚的に行いたいし自動的に 編集モードとかのほうが糞仕様だと思うが
Vimのノーマルモードくらい非編集時に英数字キーに機能が割り当てられているわけではないし、 こういった直接入力の要望が出てくるのはそんなに不自然なことではないと思うけど… 作ってやれよと言うつもりは毛頭ないけど、なんでも頭ごなしに否定するのはどうなのさ。
Ctrl+何かにF2を割り当てるような定義じゃ駄目なのか、それほどせっかちさんなのか
セルを上書きしたい場合は、一度内容を消すのかな?
AHKで、エクセル中は無変換キーあたりをF2に割り当てたらどうよ?
>>458 うちの会社はこうだが、何をぐぐったんだ?みんなってお前一人だろ。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
SendKeys "{F2}"
End Sub
Vistaに導入する際に、UACは特に気にせずインスコしても動きますか? 導入時の注意事項があれば教えてください。 又、mousegesture.ahkをVistaで使ってる人、問題点などないでしょうか?
CUIのツールが標準出力に吐き出した値を拾って ahkのGUIでその数値を加工して表示し隊のですが どうすれば標準出力から拾ってこれますか?
スレチだけど、Windows Script HostとかPowerShellを使うほうがいいような
>>467 そのCUIのツールは、リダイレクトで結果をファイルにはき出させて、
AHKからそのファイルの中を見る
とか・・・
>>466 基本、あまり問題は起きない。
マウスジェスチャもつかえる。
でもこれまで遭遇した問題は、
ホットキーをランチャーがわりにして、
メッセンジャーを立ち上げようとしたときにものすごいディレイがあるとかだったかな・・・・
とりあえずオフにしてる。
471 :
466 :2008/04/28(月) 17:56:50 ID:mttKTXzzO
>>470 ありがと。勢いインスコしてみたがmousegesture.ahkは問題ないみたい。
会社のXPマシンと、ウチの旧XPマシンで2ヵ月ほど前にmousegesture.ahkを導入したらマウスジェスチャ無しで操作するのが厳しくなっちゃって…。
1年程前に買ったVistaマシンはフリーソフトで汚さないwって決めてたんだけど、マウスジェスチャできないから旧マシンを使う頻度の方が高くなっちゃってたんですよ。
これで快適にVistaが使えます。
>>468 ,469
ありがとうございます
こういう用途にはahkは向いてないみたいですね
おとなしく標準出力以外の出力方法があるソフトを探すか
他のスクリプト言語に切替えます λ..........トボトボ
規制中なので携帯から簡単に。 cmdret.dllを使うと楽。
474 :
467 :2008/04/29(火) 00:23:17 ID:TKo6PHKn0
>>473 おお、こういうのがあるんですね
Forumのサンプルコード見ながら頑張ってみます
ありがとうございました
AHKでコンパイルした実行ファイルを2つ起動していると、 片方で#IfWinActiveが効いた瞬間にもう片方が動作 しなくなってしまうのですが、なぜでしょうか。 Reloadすると動作するようになるのですが、いちいち面倒です。
Menu, Showで表示させたメニューなんですが、 キーボードでEscapeキーを押すと消えてくれますが、 Send,{Escape}で消えてくれません。解決策はあるでしょうか?
>>476 別のAHKスクリプトからじゃないと消せないんじゃないだろか。
{ESC} でいいんじゃまいか
>>465 そのVBAは矢印キーでセル移動するだけで必ず編集modeになるな
酷すぎるw
AHKスレらしくエクセルのdll呼び出してずばっと解決してくれる神はおらんのか?
482 :
481 :2008/05/03(土) 10:39:01 ID:4YTov+QA0
483 :
名無しさん@お腹いっぱい。 :2008/05/03(土) 15:49:27 ID:cnmVYKra0
ウィンドウを垂直方向・水平方向それぞれに 最大化・リストアのトグルをするには どうすればいいでしょうか? 窓使いの憂鬱でいうところのWindowVMaximize, WindowHMaximizeを実現したいのですが・・・
WinGetPosで直近のサイズを取得してクラスやタイトルと一緒に保存、 WinMoveで縦なり横なりを最大化したサイズに変更 戻す時は直近のサイズをまた取得してどちらかがマックスだったら 保存してあるサイズに戻す、とか
486 :
481 :2008/05/03(土) 21:45:23 ID:4YTov+QA0
思い付きで機能追加しまくったんで使いもんにならなくなってた。
ttp://www11.axfc.net/uploader/20/so/He_97128.zip DLKey=ahk
・日本語入力確定の為に[Enter]押しても次のセルに移ってしまう。
・「編集開始1発目のキーが [BS]か[Del]でセルクリア」が不完全。
・[F2]自動モードOff時は「[BS]か[Del]でセルクリア」もOffにした。
・[F2]自動モードをOffにした時、[F2]のホットキーまでOffにしていたので、[F2]で
編集モードに入った時、「自動でカーソル位置の変更」が機能しなかった。
Excel2000しか試せないからExcelのバージョンによって挙動が違う場合は正直お手上げ。
>>485 全く機能が働かないならバージョン違いによる可能性大。
487 :
481 :2008/05/03(土) 22:15:29 ID:4YTov+QA0
Excelのバージョン違いによるタイトル違いの可能性を忘れてた。 125:SwitchMode: 126: Hotkey,IfWinActive,Microsoft Excel - <-ここが違うと全部だめ 127: SetHotKeys(Excel_Label,Excel_HotKeys) あと、設定にあるクラス名が一致してれば ある程度は動くはず。
>>486 458じゃないですが、いただきました。
Excel2000と2003で今のところ問題なし。というほど色々弄くってはいないけど・・・
便利ですねー。今まで無変換キーにF2を割り当てていたのだが、これ使おうかなぁ。
ただ、AHKのスクリプト3つ(内1つはMousegesture.ahk)走らす事になるからちと悩みどころ。
とりあえず様子見てみます〜。
490 :
481 :2008/05/04(日) 00:47:24 ID:35cVLblb0
>>488 それ作りはじめに思った。
全文字キー1個1個打ちながら、こんなのタイマー回してExcel見つけたらスレッドフック
かけちった方がはえーなって。処理する必要ないときはスルーすれば済むし。
>>489 2003はOKと。報告d。
#Includeで他のスクリプトのケツに読み込んで、このスクリプトの1番上に適当なラベル名を
付けて、他のスクリプトの起動時にGosubで呼び出せば多分問題なく使えるとおも。
Shift+テンキーの「.」でカンマ「,」を出そうとしていますが +NumpadDot::, と記述してもDelete(デフォルトの動作)になってしまいます。 どうすればよろしいでしょうか、お知恵を拝借したいです。
NumLockオフったら
493 :
名無しさん@お腹いっぱい。 :2008/05/04(日) 22:34:17 ID:ydz3yyO/0
Spaceと数字のコンビネーションでプログラムを実行しようと 下のように書いたのですが、単にSpaceを入力するとき キーリピートが利きません。 キーリピートが利くようにはできないでしょうか? Space & 1:: Run, "c:\path\to\exe" ~Space:: Send, {Space} ~*Space:: return
~Space & 1:: Run, "c:\path\to\exe" だけでいいだろ
>>494 ありがとうございます。できました。
が、当たり前かもしれませんがSpaceを押して1を押す前の間に
Spaceが入力されてしまうんですね。
Spaceを押して直後に1が入力されればSpaceはモディファイアのように働き、
何も入力されなかったときだけSpaceを入力するようにはできますでしょうか?
なんでSpaceなんて一番使用頻度の高いKeyを修飾keyとして使うという発想が沸くのかが疑問だ…。
今Windows標準のデフラグソフト「ディスク デフラグ ツール」を起動させてCドライブの
デフラグが終わったら表示されたウィンドウを閉じて次に自動的にDドライブのデフラグを開始
させるような一見簡単そうなスクリプトを組んでいます。Windows標準のデフラグが2つ同時
や1個目終了ご2個目等のように実行できない為、退席時間が長い場合に有用だと思っています。
スクリプトを晒します。
#persistent
run, %SystemRoot%\system32\dfrg.msc, C:\WINDOWS\system32
;sleep, 2000
setKeyDelay, 200
SetTitleMatchMode, 2
;ifWinActive, ahk_class MMCMainFrame
winWaitActive, ahk_class MMCMainFrame
{
send, {TAB}{SPACE}
}
;winWaitActive, ahk_class #32770
winWaitActive, , 最適化が完了しました
{
msgbox, ココまできたよん
sleep, 500
send, {ALT DOWN}C{ALT UP}
sleep, 200
mouseClick, LEFT, 80, 116
sleep, 200
send, {TAB 2}{SPACE}
}
今のところこんな感じなのですが、どおおおおおおしてもCの最適化終了後の「最適化が完了しました」
ウィンドウをwinWaitActiveで取得できません!ahk_class指定してもダメだし(ahk_class #32770)
ウィンドウタイトルは本体のデフラグと全く同じタイトルなのでいきなり判定されてしまうし、
ウィンドウテキストでチェックかけても取得できず。
http://lukewarm.s101.xrea.com/commands/WinWaitActive.html を
見てみるとWinTitleとWinTextぐらいでしか指定できないみたいで、打つ手なしと言う感じです。
いくら試行錯誤しても解決できません・・・。ご教示よろしくお願い致します・・・。
498 :
名無しさん@お腹いっぱい。 :2008/05/05(月) 02:38:52 ID:tOYYOoT+0
>>494 一番使用頻度が高いので大きくて押しやすくなっているからです。
AHK自体いじり始めたばかりなのですが、
すばやく操作するのに便利かと思いやってみよう思いました。
やはり何らかのモディファイアとのコンビネーションに
するしかないでしょうか?
スペースと1では、間違えて意図しないときそれが作動してしまいそうだなあとすごく思いますよ
>>491 たぶん…
左側はShift & NumpadDotにせなアカン。右側は,ってエスケープ必要じゃなかつたっけ?
>>500 おお、ちょっと参考になりました。
UWSCのコードは全く知らないのですが、やはりここでも
>Defrid=GetID("Defragmentation Completed","#32770")
のように、ahk_class #32770が動いてますね。Windows標準のデフラグツールだから無理なのかな・・・。
>>503 defrag.exeがありましたねぇ〜、そういえば。すっかり忘れてました。
これだとAHKで書くよりBatで書いた方が早いかな?w
JkDefragですかぁ・・・・ 私はPerfect Disk7.0を今まで使ってましたが、今回このスクリプトを
書いている理由は、Perfect Disk7.0がない環境においてもWindows標準ツールのみで
2つのドライブをデフラグ出来るようにしたかったという経緯があります。
色々教えて頂きありがとうございました。
>>504 何かのコントロール(ボタン)が押せるようになってるかどうかで判断したら?
そういう変化があるボタンがこのケースであるかどうかは分からんけど
>>503 書いてみた。なんという簡単なコード・・・
@echo off
defrag c: -f -v
defrag d: -f -v
pause
たったこれだけです。こういう用途だとAHK使うよりBatの方がいいですね・・・。
ファイルのプロパティ-概要の項目を変更したいんだけど 「エクスプローラ起動→ファイル選択が完了している」という前提でしか ファイルのプロパティを開けなくて困ってます。 理想としては、ファイル名を渡すだけでエクスプローラなどを経由せずに 直接変更したいんだ・・・AHKでそういうことは実現可能? もし何かしら方法があるのならご教示お願いします。
すぐ上に出てるだろ、と思ったらここじゃなくてフェンリルのスレだった
>>481 ExcelAutoF2.ahkの不具合?報告。
オートシェイプに文字を入れようとすると、「参照が正しくありません」になります。
理屈はわかりませんが、とにかくExcelAutoF2.ahkを走らせた状態でオートシェイプに文字を入れようと
するとそうなり、ExcelAutoF2.ahkを落とせば問題ありません。
おそらく関係無いと思いますが、設定は以下の通りです。
Excel_AddMode = 1
Excel_EnterTab = 0
Excel_Space = 1
Excel_HomeOrEnd = 0
Excel_BSDel = 1
PERSONAL.XLSがおかしいとか?
>>510 うーん、良くわからないけどデフォのままだからなぁ。
会社のPC(Excel2000)と、家のPC(Excel2003)の両方で確認。
今気づいたけど、オートシェイプに文字入力しようとする時にF2を押して入力すると「参照が正しくありません。」
になるんだわ。
だから、ExcelAutoF2.ahkを走らせてるとそうなるってのは当たり前な訳だが、オートシェイプに入力する時はF2
しない様に組めますか〜作者様・・・
FileLoopでディレクトリ内のファイル数でループさせ、ファイル名を変更したいのですが、
正規表現の書き方が理解できていないので、アドバイスいただけるとうれしいです。
やりたいこと
|あいうえお 1話
|あいうえお 2話
|あいうえお 3話
|あいうえお 10話
|
|↓
|
|あいうえお 01話 ←0を追加
|あいうえお 02話 ←0を追加
|あいうえお 03話 ←0を追加
|あいうえお 10話 ←そのまま
条件
半角または全角スペースの後に半角数字がきて、かつ1桁だったら、
最初の数字の前に0を挟む
> ;ファイル名変更
> Loop, *.flv,0,0
> {
> NewStr := RegExReplace(A_LoopFileName, "\s\d", "\s0\d", ReplacementCount)
> }
これだと、置換後のデータに \s0\d がそのまま出力されてしまい、うまく動きませんでした。
参考にしたページ
http://lukewarm.s101.xrea.com/RegEx.html
NewStr := RegExReplace(A_LoopFileName, "(\s)(\d)([^\d])", "$10$2$3", ReplacementCount) でどう? [スペース][数字][数字以外]の組み合わせにマッチ
>>513 ありがとうございます。なるほど、こう指定するんですね。
おかげさまで、見通しがつきましたので、これをベースに仕上げていきます。
完璧に成功
>MIAU 第1回ダビング10シンポジウム 1(sm2097191).flv
>MIAU 第1回ダビング10シンポジウム 01(sm2097191).flv
>
>MIAU 第1回ダビング10シンポジウム 2(sm2097287).flv
>MIAU 第1回ダビング10シンポジウム 02(sm2097287).flv
要検討
>AC版 ドルアーガの塔 ALLクリア+ZAP 1ゲーム20円(sm2057056).flv
>AC版 ドルアーガの塔 ALLクリア+ZAP 01ゲーム20円(sm2057056).flv
>
>MSX ガルフォース 高画質版 1of2(sm1325845).flv
>MSX ガルフォース 高画質版 01of2(sm1325845).flv
>
>カダッシュ (タイトー・1990.03) 1/3(sm2294905).flv
>カダッシュ (タイトー・1990.03) 01/3(sm2294905).flv
スラッシュがあったら発動しないとか、法則を見つけて例外パラメータで潰す感じですかね
それはもうフォルダまるごとループかけるんでなく、変更したいファイルだけ選択してやった方がいいんじゃ? 選択してるファイルはCtrl+Cで取得できるんで、それに対してループさせるとか。
ちなみに、こういったファイルに対する作業をやるために、単機能のahkファイルを作っておいて XButton1,2にその時々において割り振りを切り替えられるようにしてる。 いまだけXbutton2に 「選択ファイルの更新日時をすべてそろえる.ahk」を割り振ろう、とか
URLの数字を増やしたり減らしたりするAHKで昔苦労したっけ アレもいろいろ条件が複雑でな
518 :
481 :2008/05/08(木) 02:14:20 ID:J+Y8vwYQ0
>>511 遅くなってごめん。
試しにやってみた。[F2]押すとスクリプトに関係なく上の横長のエディットボックスにフォーカスが
移って、その状態で文字入力すると「参照が正しくありません。」と出るんね。
で、左上のセル番号を表示しているコンボボックスの文字列を取得して分岐しようと思ったら、
実際に画面上に表示されている値と、コンボボックス内部の値が一致してなくて苦戦。という状態。
一度コンボボックスにフォーカス当てれば内部の値も更新されるんだけど。
>>517 それやりたかったやつなのですが、できませんでした。
よかったらソースいただけますか?
てか、コードじゃなくて正規表現だけのような・・・ 1個のパターンだけで表現しようとするから難しい(ってか面倒)かと。 「検索パターン」と「置換文字列」をセットにして、 複数のパターンを順次かければいいんじゃないかと。 INIファイルとかにパターンを外だしすると、メンテ性も良さげ。 多重フィルタみたいな感じ。
既出だと思うけど、 AHKでコンパイルするとマカフィがウィルスですと ご認識して、勝手に削除しちゃうんだけど、 AHKで作ったものを安全と認識させるにはどうすればいいのですか? ※マカフィを無効にはしたくないです。
UPX圧縮あたりかねぇ
まあ実際ウィルスだしな。 キーロガーなんかも簡単に作れちゃうし。
ccとかも駄目だな。
マカフィーに報告して、埋め込まれたAHKエンジン部分だけで判定しないようにしてもらうとか、 どっか一箇所のフォルダに入れておいて、そこだけスキャンの除外設定すればいいんじゃないかと
UPX圧縮じゃなくて、 AHKのエンジンがウィルスチェックに引っかかっている模様。 マカフィーだけでなく、そこいらのウィルスチェックソフトも同様のご認知をしているみたい。 みんなはどうしてるの?
圧縮すりゃ回避できるかもね
って
>>523 は言ってると思うんだが
532 :
名無しさん@お腹いっぱい。 :2008/05/10(土) 16:51:27 ID:pMlcH0Uj0
ウィンドウを相対的に移動するために下のように書いたのですが、 Win+矢印を押しっぱなしにしたときの動きが遅いです。 1回呼び出されるたびに一瞬ひっかかる感じです。 AHKではこんなものと諦めるしかないでしょうか? WinMove2(dx, dy) { WinGetPos, X, Y, Width, Height, A WinMove, A, , X + dx, Y + dy } #Up:: WinMove2(0, -16) #Down:: WinMove2(0, 16) #Left:: WinMove2(-16, 0) #Right:: WinMove2(16, 0)
「おしっぱなし」のときの動作を別に作ればいいんじゃね?
キーボードの設定でキーリピートを速くする もしくは GetKeyStateでキーを監視しつつLoopで回す SetWinDelayも忘れずに
>>533 >>534 キーボードのリピート設定はMaxです。
WinDelayがデフォルトで100になってるんですね。
これを2くらいにすることで満足できるレベルになりました。
せっかくなので「おしっぱなし」のときを考慮して書いてみようと思い、
WinMoveをLoopで囲み、下のようにBreakさせようとしたのですが、
無限ループにキーを放してもループからぬけません。
なぜなんでしょうか?
GetKeyState, s, Left
If s = "U"
{
Break
}
536 :
名無しさん@お腹いっぱい。 :2008/05/10(土) 22:18:14 ID:TEwDHYzo0
>>531 HTTPでヘッダ取得して200だったらrunするようにすれば?
Loopで日本語ファイル名を取得すると、ファイル名が化けますね。 ;AutoHotkeyで取り扱えないダメ文字ファイルの場合は、処理を飛ばす IfNotExist %A_LoopFileName% continue こんな感じで、あるはずのファイルを読んで見つからなかったら処理を飛ばす という逃げを作りましたが、できればフルに動かしたいです。 日本語を扱えるパッチか、なにか対策はないでしょうか。
>>539 そういうことしたいわけじゃないよ。
エロページはだいたいパスの最後が連番になってるページが多いので
1〜100までページがあるのがわかってる時、片っ端から開いてくのに使ったりする。
Irvineでダウンするにしてもページ内のjpg数がページによってまちまちだしなw
>>517 や
>>519 もそういう事がしたいんだろう?
エロを必死に確認したいID:wYoClkp80であった・・・www
なんで一般的なスクリプトで済むことを AHKでがんばりたがるのかがわからない。
>>535 if var = value
なので、その場合は
if s = U
が正しい
あと好みによるけど GetKeyState() って関数も
>>540 そうそう、連番のエロページを自動でめくってムヒヒwって
ちがわい!
>>536 みたいなことってできるんだ。thx!
>>538 なまずさんのとこの関数は処理が激烈に遅いので、速度を求めるもの(ファイル検索とか)だと目的にあわせて多少技がいると思う。
>>540 1,Alt+DなりでURL拾う
2,そのURLを右から読んで最初に出てきた数字を+1
じゃだめかい?
文字が化けて困ることをするのなら他のスクリプト言語を選ぶのもひとつの選択ではないか。煽りじゃなく。
漏れはファイルパスだけダメ文字修正されたヴァージョン使ってるよ どこで拾ったかは忘れたが
>>539 >サーバーにページが存在するかどうか問い合わせて
これってAHKでできるんですか?
URLDownloadToFileは違う気がするし。
>>544 ありがとうございます。
「"」をはずしてGetKeyStateにPをつけることでうまくいきました。
最初はGetKeyState()を使っていたのですが、
どういうわけかキーを放してもループを抜けないのことがあるので
引数3つ版を使いました。
>>549-550 みごとに動きました!ありがとうございます!結婚してください!
1つ問題を言うなら、AutoHotkeyのトレイアイコンを変更するコマンドで
>Menu,Tray,Icon, .\AutoHotkey.exe,1
という指定をしてるのですが、この行で「アイコンがない」という意味の
エラーが出るようになりました。
しかし、外部のアイコンを指定して回避できました。
エロ画像のURLを連番でムヒヒって、 AHKじゃなくてブラウザ用の拡張ツールとかダウンローダ用つーるのようなきがする、 ってかそうしないとアクション数が多すぎて面倒。 つか、DOM解析したりとか、マウス直下のエレメントから直に実行した方が効率いいし。 そうえいば、Irvineなら http://boo.foo.woo.com/hoge/fuga[00-99].jpg なんてのを、 http://boo.foo.woo.com/hoge/fuga00jpg : http://boo.foo.woo.com/hoge/fuga99jpg って感じに展開してダウンロードキュー作ってくれたはず。 まぁ、Janeとかから間接的に起動させたいならコマンドラインでAHK経由ってものあるが。
AutoHotkeyの「Iniwrite」コマンドで書いたiniファイルは、 keyがない項目は最下部に追加される仕様で、 長く使っているうちに、順番が汚くなってしまいます。 これを、セクションまたはキーの名前でソートさせる方法はないでしょうか。 [セクション1] abc=0 ghi=0 def=0 ↓ [セクション1] abc=0 def=0 ghi=0 みたいな感じにできるとすっきりするのですが
>>555 Sort使えばいいんじゃね?一回iniファイルを削除して、ソートしてからIniWrite
vk1Csc079 & i:: Send, {Up} などとして、変換キー Down → 「I」キー Down → 変換キー Up → 「I」キー Up すると、「i」が勝手に連続で入力され始め てしまいます。(何か入力すると止まる) 回避方法は無いでしょうか?
558 :
557 :2008/05/14(水) 01:07:26 ID:/+0yaezS0
上の質問取り下げます。 キーリピートの補助ツールの影響でした orz
dllcallのつかいかたについて質問です。
流行らせるページのCPU負荷率取得ライブラリがWindows2000で動かないようなので、
このDLLをつかって取得を試みています。
getcpust.dll(WindowsNT/2000/XP/Vista / プログラミング)
>CPUの使用率を取得 (利用例ソースコードつき)
http://www.vector.co.jp/soft/winnt/prog/se361629.html それで、下記のように入れてみましたが、
cpu:=DllCall("getcpust.dll\GetCpuStatus") ; get CPU usage
帰ってくる値は常に「1」になってしまい、取得できません。
なお、dllのファイル名を変えたり「GetCpuStatus」を変えると、
1じゃなくてヌルが帰ってくるので、dll自体は認識できているとみて
いいのでしょうか。
DllCallの使い方になれていないのですが、今回の場合は
どのように書けばよいのか、アドバイスをお願いできれば幸いです。
>>559 昔まったく同じ質問があったらしい。
うまくいかない時とかもそうだけど、何度も呼び出すならLoadLibraryしたほうがいいよ
#Persistent
OnExit, ExitSub
hModule := DllCall("LoadLibrary", str, "getcpust.dll")
if hModule=0
{
ExitApp
}
SetTimer, GetCpust, 500
return
GetCpust:
Ret:=DllCall("getcpust\GetCpuStatus", "Int*", cpust, "cdeclInt")
ToolTip, 返値 %Ret%`ncpust %cpust%`nErrorLevel %ErrorLevel%
return
ExitSub:
DllCall("FreeLibrary", UInt, hModule)
ExitApp
>>560 どうもありがとうございます!正常に動きました。
Sendでクリップボードの中身を書き出そうとした時に 2バイト文字が含まれてると正常に書き出せなくない?
つ Send,^v
ClassNNの指定方法について質問です。 AutoHotkey付属のAU3_Spy.exeをつかって、 ClassNNを取得するところまでは理解できました。 たとえば下記の例はブラウザのSleipnirですが、マウスカーソルが FenrirEmbeddedToolBar1の上にあるときのみ、カッコ内のスクリプトを 実行する場合、どのように記載すればよいでしょうか。 >>>>>>>>>>( Window Title & Class )<<<<<<<<<<< Sleipnir - [WinGet] >>>>>>>>>( Now Under Mouse Cursor )<<<<<<<< ClassNN: FenrirEmbeddedToolBar1 #IfWinActive ,***** ←たぶんここに何かを記載する 〜実行したいコマンド〜 #IfWinActive
#IfWinActive, Sleipnirのクラス ***:: MouseGetPos, , , , OutputVarControl , If Outputvarcontrol = FenrirEmbeddedToolBar1 {実行コマンド} こうかな、わかりません><
566 :
名無しさん@お腹いっぱい。 :2008/05/17(土) 12:51:31 ID:cUZz5sdV0
特定のウィンドウではキー変更せず それ以外ではキーを変更するにはどうすればよいでしょうか? 下のようにしてみましたが、NotepadでCtrl+Aすると #MaxHotkeysPerInterval に達してしまいます。 「~」をつけると逆にNotepad以外でもCtrl+Aが入ってしまいます。 ^a:: IfWinActive, ahk_class Notepad Send, ^a Else Send, b Return
567 :
564 :2008/05/17(土) 13:02:38 ID:l+1Pu63/0
>>565 ありがとうございます。おかげさまでヒントになり、解決しました。
MouseGetPos, , , , OutputVarControl ,
If Outputvarcontrol<>【指定したいClassNN】
return ;違うなら無効ということで、戻る
〜以下やりたいこと
これで認識できました。
>>566 #IfWinNotActiveじゃだめかい
>>568 ありがとうございます。それでできましたが、
除外したいウィンドウが複数ある場合はどうしたらいいのでしょうか?
単純に #IfWinNotActive を複数書くと
どちらも無効になってしまうようなのですが・・・
>単純に #IfWinNotActive を複数書くと これがよくわからんが #IfWinNotActive window1 { #IfWinNotActive window2 { #IfWinNotActive window3 { なんとか }}} 論理条件だとこうなりそうだがこれだとダメなのか?
つウィンドウグループ
>>570 入れ子にせずに独立に2つ書いてたんですが、
入れ子にしてみるとあとに書いたものしか有効になってないようです。
>>571 こういうのがあるんですね。
ちょっとやってみます。
ショートカットキーで特定のアプリ(Firefoxとか)に対して タスクトレイに最小化/最大化をトグルするということはできますか? よろしくお願いします。
Access97のモジュールウィンドウでマウスホイールによるスクロールはできないでしょうか?
Visual Basic 6.0 IDE でマウス ホイール イベントが機能しない
ttp://support.microsoft.com/kb/837910/ja を試してみたのですがAccess2000以降でないと動かないようなので、とりあえずキーを送るだけのものを書いてみたのですが
どうもいまいちな気がしますので。
#IfWinActive ahk_class OMain
*WheelDown::
Send,{DOWN 2}
return
*WheelUp::
Send,{UP 2}
return
#IfWinActive
ちなみにWheel Redirectorやかざぐるマウスでは動きませんでした。
>>574 別にその解決法でいいと思うけど、どうしても気になるなら
WM_SCROLLかWM_VSCROLLメッセージをコントロールに送れば良いんじゃね?
「どこでもホイール」がそんなことやってたような。
Access97は触ったことないので上手くいくか分からないけども。
>>573 タスクトレイにFirefoxがあるなら最大化、無ければ最小化でいいんじゃないか?
タスクトレイのものを操作するサンプルは流行らせるページにあったはず
>>572 Regular Expressions を使うといいんじゃないかな?
SetTitleMatchMode RegEx
#IfWinNotActive ahk_class (window1|window2|window3)
1つのPCで、複数のAHKスクリプトを動かす際、 ホットキーの優先順位を決めることは可能でしょうか。 PCを起動している間、必ず常駐させるスクリプトが1つある状況で、 たまに使いたいスクリプトをあとから実行して2つ存在させると、 同じ定義下にあるホットキーを入れた際、発動するスクリプトが 不定期に入れ替わるようです。 2つ目のスクリプトが起動している間は、1つ目のホットキーを 無効にさせたいのですが、ネットワークでいう「メトリック」みたいな 動きは、どのように作るのがベストベストでしょうか。
>>579 ありがとうございます。
ちょっと今Accessの勉強をしないとまずいので暇を見てやってみることにします。
ハンドルやクラス名の取得はClsinfoというのを使っていたんですがWinspectorは細かく調べられていいですね。
かざぐるマウスとかで簡単にいけると思ったんですが甘かった..
583 :
574 :2008/05/19(月) 19:51:51 ID:xrRjgNKk0
579でいただいたスクリプトを適当に書き換えてAccess97でもマウスホイールによるスクロールができるようになったので 一応報告しておきます。場当たり的修正なので汎用性は0です。WheelScrool.ahkは93行辺りで変数を初期化しているよう なので38行辺りの設定が無効になっているような感じです。 --- WheelScrool.ahk~ Sat Nov 03 00:14:08 2007 +++ WheelScrool.ahk Mon May 19 00:41:40 2008 @@ -137,6 +137,11 @@ scmode = 0 } + if (ccls = "OModule") ; 追加 + { + scmode = null + } + if (!scmode) MOUSEWHELL(ctrl,mx,my,"",AcclSpeed,AcclTOut) Else SCROLL(ctrl,mode,shwnd,"",ScrlCount,AcclSpeed,AcclTOut) @@ -283,6 +288,8 @@ ACount := ScrlCnt Else ACount += ScrlCnt * ASpeed + + ACount = 3 ; 追加 ;wParam: 方向 if (dir = "") AutoHotkey.iniには以下で #IfWinActive ahk_class OMain #Include, %A_ScriptDir%\Extras\Scripts\WheelScrool.ahk Gosub,WheelInit #IfWinActive
584 :
574 :2008/05/19(月) 21:58:09 ID:xrRjgNKk0
失礼。これだけでいいみたいです。これなら汎用性もありそうです。 --- WheelScrool.ahk~ Sat Nov 03 00:14:08 2007 +++ WheelScrool.ahk Mon May 19 21:53:35 2008 @@ -94,6 +94,7 @@ ,VDisavledList, VScroolList, MdiActivateList ,BypassCtlList, NullShwndTabooList, HDisavledList + Gosub,WheelInit CoordMode,Mouse,Screen MouseGetPos,mx,my,hwnd,ctrl,3 WinGetClass,wcls, ahk_id %hwnd%
>>583 >WheelScrool.ahkは93行辺りで変数を初期化しているよう
>なので38行辺りの設定が無効になっているような感じです。
そこは関数内でglobal変数を直に使えるよう再宣言してるだけで初期化はされない筈…
一応うちではちゃんと動いてるんだけど、値引き継がれない?
XP SP2 / AHK Version 1.0.47.06
586 :
585 :2008/05/20(火) 02:08:31 ID:z9u7+QjX0
ああ解った、AutoHotkey.ini側の記述の問題だわ
AHK常駐時に初期化する前提だから AutoExecute部(ファイル先頭)に書かないとダメ
;--- AutoHotkey.ini ---
#Include, %A_ScriptDir%\Extras\Scripts\WheelScrool.ahk
Gosub,WheelInit
あくまで#IfWinActiveでAccessにのみ適用したいなら WheelScrool.ahkの Hotkeyの前後に入れる
;--- WheelScrool.ahk : Line 77 ---
#IfWinActive ahk_class OMain
+WheelDown:: WheelRedirect(1)
+WheelUp:: WheelRedirect(1)
WheelDown:: WheelRedirect()
WheelUp:: WheelRedirect()
#IfWinActive
ttp://lukewarm.s101.xrea.com/up/file/085.zip HDD漁ったらロジクールのチルトでの横スクロールのテストとかした時に作った新しいのがあったんで
上げ直しときます。互換リストにOModule追加してみたんで良かったらコメント外して使って見て下さい。
(ちなみに >583 scmode = null は 0でなく "null"という文字列が代入されてる模様)
>>587 日本語のファイル名に対応していないなら、一時的にAHKでリネームすればいいじゃない。
>>586 わざわざありがとうございます。
かざぐるマウスと併用できるようなのと加速が意外と便利なのでAccess以外にも適用させて使おうと思います。
というかマウスジェスチャーや音量の調節も出来るようだし、AHKがあればかざぐるマウスはいらなそうです。
AHKになさそうなのは設定ダイアログをだしていてもメインウィンドウを動かせる機能ぐらいじゃないかと思います。
PCのビープ音を鳴らす「Soundbeep」って、状況把握に便利なんですが、 鳴らしている間はスクリプトが完全に止まってしまいますよね。 ビープは鳴らすけど、スクリプト自体は止まらせない方法ってありますか?
別のスクリプトに書いてRun
>>590 SetTimer,Beep,10
Return
Beep:
soundbeep
Settimer,beep,off
return
594 :
名無しさん@お腹いっぱい。 :2008/05/22(木) 02:08:12 ID:Bhfqc5ef0
WinXPのエクスプローラーでアドレスバーを非表示にしているとき ツリービューとフォルダビューの間をTabで行き来しようとすると ツリービュー→フォルダビューはTab1回でいけますが フォルダビュー→ツリービューはツリービューを閉じるための×印に 一旦フォーカスがあたるため2回Tabを押さないといけません。 これを1回で行うためにフォルダビューにフォーカスがあるときは Tabが2回送られるように下のようにしたのですが、 なぜか×印がフォーカスされてしまいます。 どうすればよいでしょうか? #IfWinActive, ahk_class ExploreWClass ~Tab:: ControlGetFocus, ClassNN if ErrorLevel = 0 if ClassNN = SysListView321 Send, {Tab}
tab送りじゃなくてControlにFocusを合わせるようにすれば?
>>595 なるほど
↓でいけました。ありがとうございます。
#IfWinActive, ahk_class ExploreWClass
Tab::
ControlGetFocus, ClassNN
If ClassNN = SysListView321
ControlFocus, SysTreeView321
If ClassNN = SysTreeView321
ControlFocus, SysListView321
デバッグをするため、ウインドウのClassNNが特定の値になっているときに、 ToolTipメッセージをマウスカーソル付近に連続で表示させる動作をさせています。 しかし、マウスカーソルがToolTip自身に乗っかってしまうと、 ClassNNが「特定の値」ではなく、空白になってしまいます。 ClassNNが空白のエリアを除外させたところ、 ToolTip以外の、本当にClassNNが空白の場所との区別ができなくなりました。 ToolTipを表示させる際、ToolTipのClassNNを指定することは可能でしょうか。
互換シェル使っててLWinをモディファイアに いろんなソフト起動させてるんだけど LWinをちょんと押すだけのときにシェルメニュー 表示とか割り当てたい でもLWinをモディファイアにしてるバインドと ぶつかっちゃうんだけどどうしたら解決できるか わかる人いますか?
LoopでGetKeyState取得して キーが離されるまでのループ回数で分岐とか KeyWaitで時間指定して それを越えたときのKeyStateで分岐とか
GUI画面にテキストを表示させた際、操作者がGUIの内容を更新する操作をしたとき、 表示したテキストを別のテキストに置き換えて再描画したいです。 普通に同じ座標にAddで追加すると、前のテキストと重なって表示されてしまいます。 GUI画面を破棄するDestroyを入れるとできますが、画面の全部を作り直すため、 かなりチラついてしまいます。 症状確認用テストスクリプト Test: loop { Gui, Destroy Gui, Add, Text,,■■■TESTです■■■→%A_Index% Gui, Show,,GUIテスト sleep,100 } これだと、ものすごくチラついてしまいます。 また、Gui, Destroyをはずすと、最初に表示された内容から変わってくれません。 おそらく、何かやり方があるとは思うのですが、GUI画面の一部の項目を 書き換えて再描画するには、どのように書けばいいのでしょうか。
Gui, Add, Text, vMyText でテキストを変数MyTextに指定 GuiControl,, MyText, 実際に表示する内容 で書き換える 流行らせるページリファレンスのGUI OSDサンプルとか見れ
>>601 ありがとうございます。うまくいきました。
100倍くらい速くなりました。
初心者で申し訳ないんですが、 右Alt+jでテンキー1にしたいんですが、 >!j::Numpad1 だと効きません。 j::Numpad1だと問題なく動くんですが、修飾キーをつけたとたん動かなくなります。 Winキー以外のShiftやCtrlでも効きません。何が間違ってるんでしょうか?
98とかME使ってんじゃね
>>604 流石にそれはないですw俺の環境だけかな?
ノートでNumLockしたくないから、右Altや右Ctrl押してるときだけ有効っぽくしたいんだけど。
あふとかフォトショ使うときに楽になるかなと思ったんだけど。
なぜこんなに難しいんだろ。
>>603 なぜ動かないかはわからんが、
!j::
Send,{Numpad1}
return
で動く。たぶん「仕様」ってやつでは?
すいません。WheelScroll.ahkですが Vieasというイメージビューアソフトのマウスホイールでの画像の拡大・縮小が無効になってしまうので #IfWinNotActive ahk_class Vieas_vwin_class WheelDown:: WheelRedirect() WheelUp:: WheelRedirect() ;Shiftホイールで横スクロール +WheelDown:: WheelRedirect(1) +WheelUp:: WheelRedirect(1) #IfWinActive と書き換えてみたのですが、これだとVieasのウィンドウがアクティブになっているときに下のウィンドウが マウスホイールでスクロールできません。 マウスホイールが通常動作するクラスを指定するというようなことはできないでしょうか?
>>606 おおっ
>!j::Send,{Numpad1}と
>^/::Send,{NumpadEnter}
で右Altや右Crtlでいけました。有難うございます。
仕様と思います。AHKさいこー。
609 :
603 :2008/05/25(日) 18:20:04 ID:7/PfvJsA0
モバイルノートに右Altが無かったし、右Ctrlじゃキーが押しにくいので結局、無変換+でやることにした。 言語の設定で無変換を無効化して無問題。 以下、簡単だし別に使う人もいないだろうけど報告まで。 ~vk1Dsc07B & j::Send,{Numpad1} vk1Dsc07B & k::Send,{Numpad2} vk1Dsc07B & l::Send,{Numpad3} vk1Dsc07B & u::Send,{Numpad4} vk1Dsc07B & i::Send,{Numpad5} vk1Dsc07B & o::Send,{Numpad6} vk1Dsc07B & 7::Send,{Numpad7} vk1Dsc07B & 8::Send,{Numpad8} vk1Dsc07B & 9::Send,{Numpad9} vk1Dsc07B & m::Send,{Numpad0} vk1Dsc07B & .::Send,{NumpadDot} vk1Dsc07B & @::Send,{NumpadEnter} vk1Dsc07B & /::Send,{NumpadDiv} vk1Dsc07B & sc028::Send,{NumpadMult} vk1Dsc07B & `;::Send,{NumpadAdd} vk1Dsc07B & -::Send,{NumpadSub} 右Altや無変換でいろいろホットキーを追加してみよっと。
>>610 ありがとうございます。動作確認しました。
やっぱりAHKいいですね。アプリケーションを問わずに操作できるのがいい。
自分もいろいろ書けるようになるといいんですけどね。
Guiの質問です。 例 Gui, Add, Picture,Section,*** で作成すると、ClassNNに「Static**」という名称が割り当てられますが、 作成したGuiのClassNNを、特定の文字列で指定することは可能でしょうか。
Excelで平成20年1月1日を ^#Dとホットキーを使った場合に 2008/01/01 とするにはどうしたらいいでしょうか? #IfWinActive ahk_class XLMAIN ^#D:: このあとどのように記載したらいいか教えてください. よろしくお願いいたします.
2chで使われているような「1201502896」の形式の日付を、 YYYYMMDD形式に変換するには、どのような解決方法が ありますでしょうか。
>>613 Ctrl+CをSendしてStringReplaceしてから
はっつければいいんでは?
>>614 19700101000000 にその数値を秒数で足せば良いんじゃないかな?
窓キーと3を押すのをトリガーにしようとして # & 3::hogehoge と書いたらキーボードの3が効かなくなりました。 そこで、 #3::hogehogeと書き直したら直りました。 これは既知の現象ですか?
>>616 間違えた。
窓キーと2をトリガーにしようとして
# & 2と書いたら3のキーが効かなくなった、というのが正しいです。
>>616 一つ目のキー自体のもともとの機能は無効化される。
一つ目のキーにチルダ(~)をつければ、そのキーは無効化されず、普通に入力される。
一つにつけておけば、一つ目のキーが同じほかのホットキーでは指定されていなくても、そのキーは無効化されなくなる。
#はShift+3の#と勘違いされただけ。使い方が間違っている。Win & 3て書かないと。
>>617 連投済まん。
Hotkeys (Mouse, Joystick and Keyboard Shortcuts)のヘルプにあったこれが答えかも。
lose its original/native function when it is pressed by itself
#がある3のキーが効かなくなることが説明できますね。
人騒がせで済みませんでした。夜中にパニックに陥っていたもので。。。(汗
>>618 おっ!書き込んでから発見しました。
こんな夜中にありがとうございます。
>>615 ありがとうございます。変換できました。
>>613 ^#D:: Send,^1!c{End}!tyyyy/mm/dd{Enter}
んでも IME ONだと失敗するし、素直にExcelマクロで
Selection.NumberFormatLocal = "yyyy/mm/dd"
したほうがスマートだと思うが。
↑はExcel2002の場合ね、他のバージョンだとアクセラレータキー違うかもしれんし上手く動くかわからん。 Winキー発動はできんけどやっぱマクロ作ってでショートカットキー割り当てたほうがいいと思う。
・文字列 string を1行ずつループで回す ・取り出した1行にタブが含まれていたら、タブを別の文字「%okikaemoji%」に置き換える ・結果をstringに戻す ・ループをbreakで終了する という動作を下記の4通りで試しましたが、どれもタブが置き換わってくれません。 1案 value=`t StringReplace, string, A_LoopField,%value%,%okikaemoji%,all 2案 value=%A_Tab% StringReplace, string, A_LoopField,%value%,%okikaemoji%,all 3案 StringReplace, string, A_LoopField,%A_Tab%,%okikaemoji%,all 4案 StringReplace, string, A_LoopField,`t,%okikaemoji%,all どのように書いたら動いてくれるでしょうか。
AutoTrimをOffにする
626 :
613 :2008/05/28(水) 05:54:16 ID:vTCC4uvQ0
皆さん お返事遅くてごめんなさい
>>615 ありがとうございます
>>622 >>623 マクロは考えてなかったです.
AHKにこだわりすぎました
EXCELマクロでやらせていただきます.
ありがとうございます.
628 :
627 :2008/05/29(木) 15:45:51 ID:b2k6dMVD0
キーリピートの設定を遅くしたらましになったんですが、 他のキーは普通にリピートして欲しいです。 CTRLだけリピートを殺すといった事ができるといいんですが。
そもそもCtrlキーにリピートがあるのか?
631 :
627 :2008/05/29(木) 17:55:57 ID:b2k6dMVD0
>>630 ありがとうございます。
書いてくださった方法でばっちりダブルタップでき、長押しも回避できました。
DllCallでLCMapStringを使って文字列を操作したいのですが 引数の型がまったくわからず、どうやってもErrorLevelが-2になってしまいます どう書けばよいのかお教え願えないでしょうか?
非アクティブのiTunesの停止、再生をしたくて↓のようにしてみたんですが 動きません。 #i:: DetectHiddenWindows,On ControlSend,WinTitle,{Space},iTunes return 下のようにクラス指定しても無理でした。 ControlSend,,{Space},ahk_class iTunes 試してみたら、そもそもアクティブにしてもだめだったんですが、打開策はありますか?
ホットキー以外で初めて書いてみて動作はきちんとするけど、 もっとスマートに書けるんでしょうか? メモリが2,000か6,000K(1:4の割合で変化) CPUが0〜4パー で動いてるんだけど、低スペックってのもあるw(P3-1G)。 プログラミングしたことないんで不安です。 ;EBWinが非アクティブになったら終了。 #Persistent SetTimer , EBWC , 250 return EBWC: WinWait , ahk_class EB_POCKET if ErrorLevel = 0 { WinWaitNotActive , ahk_class EB_POCKET if ErrorLevel = 0 { Process, Close, EBWin.exe } } else return
635 :
634 :2008/05/31(土) 09:24:36 ID:KE70yWJA0
自己解決しました、これでAHKの常時起動しなくて済みます。 スレ汚しごめんなさい。 それとも、まだやりようがあるのかな?・・・わからん。 ;EBWinミニウインドー起動が非アクティブになったら終了。 #NoTrayIcon Run, EBWin.exe -m , C:\Program Files\EBWin WinWaitActive , ahk_class EB_POCKET WinWaitNotActive , ahk_class EB_POCKET if ErrorLevel = 0 Process, Close, EBWin.exe else return
>>634 >メモリが2,000か6,000K(1:4の割合で変化)
の意味が全くわからない
そしてスクリプトで何をしようとしてるのか解説が一切ないので、
なにをやってるのかわからない
結論:いくらチラ裏とはいえ、他人にわかるように書きましょう
>>636 正直それはおまえさんの読解力の問題な気が…
繭からやっと移行できたと思ったら これSynergy経由じゃ動かないのかorz
>>638 動いたり動かなかったり。
>>4 の無変換+ijklの矢印割り当てくらいなら動いたりするけど、
{Blind}の部分が効かなかったりとか。
プログラムを実行させるとフォーカスを強制的に フォアグラウンドにしてしまうアプリがあります。 そのアプリをahkからタイマーで呼び出されたのち、呼び出す直前に 作業していた元のウインドウに戻すにはどうしたらいいでしょうか。 その動作を手動で再現させる場合、アプリ呼出し後にALT+TABを押すと 確実に戻れるので、それをAHKで再現できれば解決しそうなのですが。 Run,問題のプログラム.EXE sleep,2000 send,{ALT DOWN} sleep,1000 send,!{Tab down} sleep,1000 send,!{Tab up} send,{ALT UP} 安全牌で、sleepで余裕を入れてるのですが、タイミングが 合わないことが多く、半分くらいしか成功しません。
>>640 SleepのタイミングについてはPCスペックや同時に動いてるアプリとの兼合いもあるので
自力で調整値を探すしかない。
だが、ALT+TAB使うより Activeウィンドウ操作系のコマンド使ったほうが成功率は上がると思われ
WinGet, hwnd,ID,A
Run,問題のプログラム.EXE
WinWaitActive,問題のプログラムのタイトル
Sleep,任意の待ち時間
WinActivate,ahk_id %hwnd%
質問です。 マウスホイールを下に回した場合batu.bmpを探してそこをクリックしたいのですが、全くできません。 拾い物のスクリプトから考えたのですが・・ご教授お願いします。アプリ名はaaaaに置き換えてます。 Loop { Sleep,10 IfWinActive,aaaa { GetKeyState,mbtn,WheelDown,P if (mbtn="D") { Loop { ImageSearch , OutputVarX, OutputVarY, 0, 0, A_ScreenWidth, A_ScreenHeight, batu.bmp Sleep,100 Send,{LButton} GetKeyState,mbtn,WheelDown,P if (mbtn="U") { break } } } } } #z::Reload #x::Pause #e::ExitApp #r::return #u::return #f::return #m::return #IfWinActive aaaa vk1Dsc07B::Send,@
探した座標使ってないじゃん MouseClick使え
なにそのLoop
Loop,fileなどで読んだファイル名にUnicode文字が含まれると、 「A_LoopFileName」などの変数で、ファイル名のUnicode部分が ハテナに置き換わってしまいます。 結果、ループの中に居るのに対象ファイルが 見つからない事態になってしまいます。 そこで、ループ中にA_LoopFileNameの実体を読んで、エラーなら、 FileMoveで A_LoopFileName → Unicode部分を削除したA_LoopFileName とリネームを試みたのですが、Renameする時点で元ファイルが 見つからず、できませんでした。よい解決法はないでしょうか。 なお、対象となるファイルは自分で作成したものではないため、 事前にリネームするのは厳しいという状況です。
あ、直リンしちゃった。。ごめんちゃい。
>>645 TransformのUnicode, String
を使えばどうにかならんかね?
>>648 ありがとうございます。
さっそく試してみたところ、transformに渡す対象文字「string」の
内容自体がすでに「?」に変わってしまっているようです。
結果をファイルに書き出して確認したところ、壊れた結果でした。
>>645 過去ログ>538-550あたりを読むと幸せになれるかも。試してないからわからんけど
AttachThreadInputしてみたら?
653 :
646 :2008/06/03(火) 02:00:34 ID:mB5Ni4140
>>649 のくれたリンクからファイル落としたんだけど、その中に
>各々のアプリケーションのスレッドはスレッドにアタッチされた複数のIME ウィンドウを持つようになった
って書いてあったので、GetWindowThreadProcessIdとSpy++使って調べてみました。
試しにメモ帳では、「メモ帳」と「メモ帳の入力域」は同じプロセスID・スレッドIDなんだけど、
問題はアクティブウィンドウではなく、IMEのプロセスID・スレッドIDが必要ってことなのかな?
うーん、わかりそうでわからん。。もうなんか今日は1日中これやってるよ。。
こんなにはまるつもりなかったのにな・・・
タスクトレイに出たアイコンを左シングルクリックしたとき、 特定のルーチンへ飛ばすことは可能ですか? 右クリックの項目はMenuで表示・追加できますが、 そもそも左クリックの設定は、あるのでしょうか。
AutoHotKeyって標準出力を変数に格納して使う事は出来ないんでしょうか? コマンドプロンプトに打ち込んだコマンドの標準出力を得るみたいな。 調べてみたところどうにも扱えないっぽいので、仕方なく一時的に作業ファイル・・・ つまり cmd > temp.dat みたいに吐いて、 FileReadLineで一行欲しい部分を読み込んで 対処したのですが、いちいち一時ファイル作るのも大げさかな?と。 その後FileDelete, temp.dat しないといけないし・・・。
うわ、その時お世話になった467ですが cmdret.dllもよかったけど、流行らせるページの管理人さんが作ったMy Scriptsにある 「プロセスを起動して標準出力を読み書き」の方が外部dllが要らない分使い易いかも
ボタンを多数置くときの、飛び先について質問です。
下記のコードで、ボタンを10個設置します。
Loop,10
{
button_no=B%A_Index%
Gui, Add, Button,G%button_no%,ボタン%A_INDEX%
}
ボタンが押されたときの飛び先ですが、
B1:
B2:
B3:
B4:
B5:
B6:
B7:
B8:
B9:
B10:
ボタンが押された際に行う処理
↑
10個までならなんとかなりますが、
あまり増えるとソースの可読性が悪くなってしまうので、
この「B1:〜B10:」を1つにまとめて書く方法は無いでしょうか。
参考にしたページ:流行らせるページのGオプション
http://lukewarm.s101.xrea.com/commands/Gui_Add.html
全部同じラベルに飛ばしといて 押されたボタンの名前で分岐すれば
タブファイラのX-FinderやTTBaseのUpperDirPluginにウィンドウの余白でクリックとかで上階層に移動するのがあるけど あれこれツール増やすのもあれなのでAutoHotKeyでやろうと思ったのだが ウィンドウの余白の検出はどうすればいいんでしょう・・? とりあえずウィンドウの色で切り替えてやってみた・・ ; 1/2 ;ホイールクリックでウィンドウの余白なら上階層へ移動・アイコンの上ではダブルクリック #Persistent SetTimer,BlankClick,100 return BlankClick: { MouseGetPos,posx,posy,WindowClass,ClassNN,1 IfInString,ClassNN,SysListView32 ; ファイルを開く・・すれば大体SysListView321になるような { pgx:=(posx-10) ; カーソル直下だと文字の隙間とかでうまくないので pgy:=(posy-10) ; カーソルから(-10,-10)〜(+10,+10)を斜めにてきとーに走査 BlankState:=0 ; 0のままなら余白 Loop,20 { PixelGetColor,undercolor,%pgx%,%pgy% if(undercolor=="0xFFFFFF") ; ウィンドウの色を変えてると変えないと・ { pgx++ pgy++ } else { BlankState:=1 ; 別の色にかかったとき適当になんか入れる break
; 2/2 } } If(BlankState==0) ; 余白のとき { SetMButtonMode:=11 ; Hotkeyの切り替え用 11はBackspace Hotkey,MButton,On ; ホイールクリックのホットキーを有効に } else { SetMButtonMode:=1 ; Hotkeyの切り替え用 1はダブルクリック Hotkey,MButton,On } } else { Hotkey,MButton,Off ; ホイールクリックのホットキーを有効に } MButton:: { If(SetMButtonMode==1) Click,LEFT,,,,2, else If(SetMButtonMode==11) Send,{BACKSPACE} else return }
#IfWinActiveでやれば?
その座標をクリックしてみれば、余白だったとき選択項目(フォーカスじゃなく)がゼロ個になるのでは
665 :
661 :2008/06/05(木) 23:58:37 ID:Vao1bqW80
MButtonの前の } が1個抜けてた・・
>>663 操作対象がClassNNの時に#IfWinActiveをどのように使うのでしょうか?
>>664 なんらかが選択された状態で余白をクリックしたとき、選択数がゼロ個になるのでは?ということでしょうか
ゼロ個になると思いますが・・そういうことではないとか?
>>665 エクスプローラーの余白ダブルクリックで上階層と理解して最小限でやってみた。
フォルダ選択で1 個のオブジェクトを選択、ファイル選択でファイル情報、余白選択でX個のオブジェクトとステータスバーに表示される。
現状他のホットキー押して左クリックでも発動するけど気になるなら適当に直して下さい。
~LButton::
StatusBarGetText, State,Part1,ahk_class CabinetWClass
If (A_TimeSincePriorHotkey<200 && State<>1 個のオブジェクトを選択)
{
IfInString,State,個のオブジェクト
Send,{BackSpace}
}
Return
AutHotkeyでスクリプトを書き始めました。
デスクトップでダブルクリックした時に、ホットキー(Alt+Numpad1)を実行する
スクリプトを試行錯誤していて、
ahk_class Progman
での条件判定だとうまくいかなかったところ、
>>666 のスクリプトを元に、こんな
風にしてみた。
~LButton::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
If(A_TimeSincePriorHotkey<300 && color=0x984E00){
Send,!{Numpad1}
}
return
ウチのXPのデスクトップは0x984E00でいいみたいなんだけど、
どんな環境でも、デスクトップ上のダブルクリックを判定できる
ロジックってどんなのがありますか?
668 :
665 :2008/06/06(金) 09:59:38 ID:89UJiJcz0
>>666 StatusBarGetTextを使う手がありましたか
ExplorerとBrouseuiはこれ参考にシンプルにできるのがわかりましたが
無数のアプリにある ファイル-開く したときの ahk_class #32770 SysListView321 は対応できないです
>>667 MouseGetPosで拾えるウィンドウIDを
WinGetで調べたデスクトップProgmanのウィンドウIDと比較してみるとか
以下IDのテスト用
~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1
WinGet,DesktopID,,ahk_class Progman
;If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID)
;Send,!{Numpad1}
If(A_TimeSincePriorHotkey<300)
MsgBox,DesktopID %DesktopID% , WindowID %WindowID%
return
>>668 問題はデスクトップかどうかの判定じゃないと思うのだが。
>667が言ってるのは多分あんたがつまづいてるとこと同じ
670 :
665 :2008/06/06(金) 19:45:37 ID:89UJiJcz0
>>669 うあそういうことか
>>667 自レスも含みますが>666であったファイルの選択の状態を取得する他の方法を探したところ
ControlGetが使えそうなのでそれでやってみたテスト
~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1 ; カーソル下の情報を取得(ClassNN以下いらないような
WinGet,DesktopID,,ahk_class Progman ; デスクトップのウィンドウIDを取得
ControlGet,StateListView,List,Selected,%ClassNN%,ahk_id %WindowID% ; StateListViewにSysListView32の選択項目名を入れる
If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID && StateListView=="") ; デスクトップ上である&選択項目がない
Send,!{Numpad1}
return
アイコンのないところでダブルクリックをしたとき、イベントを乗っ取らないダブルクリックなので、
丁度よく最初のクリックの時点でデスクトップがアクティブになって選択状態が外れる
同じ方法でエクスプローラ・Openダイアログ等の余白をダブルクリックで上階層移動もできる
選択項目を利用するので MButton:: 等では途中に左クリック入れるとかしないとそのままではできない・・
671 :
667 :2008/06/07(土) 01:12:12 ID:93cVi9ld0
>>670 すごい!デスクトップの色に関係なく動きました!
(ロジックに色判定がないからあたりまえだけど... )
ControlGetを含め、今回出てきた関数を少しずつ把握していこうと思います。
色やステータスバーではなく、コントロールのIDを参照していくのがキモなんですね。
流れをぶった切った質問になっちゃったと思いましたが、意外な関連があり、新鮮な
驚きです。
>>669 もありがとうー。
Autohotkeyは日付の扱いは苦手なようなのですが、 「2008年1月1日の0時から10000秒後の時刻を求めたい」 みたいな感じのものを容易に計算できますでしょうか。 vbsならDateAdd("s", 10000"2008/01/01")で終わりなのですが。
EnvAdd
>>673 日付計算のオプション合ったんですね。ありがとうございます。
ControlGetのSelectedでエディットコントロールの選択内容を取得したいのですが、 複数行のテキストを全て選択してる状態だとOutputVarが空になってしまいます。 なんとか正常に取得する方法はないのでしょうか?
空でエラーレベルも正常なら ControlGetTextで再取得するとか
ControlGetText忘れてましたorz ErrorLevelも失敗の1が帰ってきますが、その場合はとりあえず ControlGetTextで取得してPixelGetColorとかで選択状態を判別する事にします。 ご返答ありがとうございました。
FileInstallでファイルを取り込みたいんですが、 取り込みはどうやら成功しているらしい(.ahk状態で実行して正常に実行可能、コンパイルエラーしない かつ、Ahk2ExeでコンパイルしてEXE化も正常に出来る)んですが、 いざ出来上がったEXEを実行すると、取り込んだファイル全てが Could not extract file: っていうダイアログが出てきて取り出せません・・・。 コードはこれです ;driverの中身全部を取り込み ;MsgBox, %A_WorkingDir% FileInstall, driver\setupdrv.exe, \dest\setupdrv.exe, 1 FileInstall, driver\vnccom.sys, \dest\vnccom.sys, 1 FileInstall, driver\vncdrv.dll, \dest\vncdrv.dll, 1 FileInstall, driver\vncdrv.inf, \dest\vncdrv.inf, 1 FileInstall, driver\vncdrv.sys, \dest\vncdrv.sys, 1 FileInstall, driver\vnchelp.dll, \dest\vnchelp.dll, 1 %A_WorkingDir%からの相対パスで指定したいので、MsgBoxで出力してみると 最後の \ までは 入ってませんでしたので、 \dest とdestの前に\をつけてみました。最初は\なしでやってたの ですが、どうしてもうまく動作しないので・・・。何がいけないんでしょうか?
すみません、文字列の扱いについてお聞きしたいのですが、 どういうときに " "をつけて囲んで文字列と認識させる必要があるのでしょうか? " " で囲まずにMsgBoxで出しても囲んでMsgBoxで出しても同じ結果が返ってくるかと 思いきや、囲んでないと何も出てこない時もあり、混乱しています。 普通C言語やJavaでは文字列は必ず " " で囲む物ですが、AHKではその辺 どうなってるのでしょうか?例えば MsgBox, 文字列 だと「文字列」が出力され、 strValue := 文字列 MsgBox, %strValue% だと空文字・・いやnullなのかな?どっちか分かりませんが「文字列」が出力されずに 何も出てきません・・・。
>>679 × strValue := 文字列
○ strValue = 文字列
:=は、数値の計算結果を代入するときとかに使う。
よって右が文字の場合は、計算のしようが無いので空白になる
:= 使いたい時こそ " "で囲め × strValue := 文字列 ○ strValue := "文字列"
682 :
679 :2008/06/11(水) 00:28:19 ID:fVOKMAhU0
レスありがとうございます。 なるほど、分かりました〜。
str=hoge (変数strの中にhogeという文字列がある)として、 a=hoge a:="hoge" a:=str a=%str% 以上のaの中はすべて文字列hogeである また、次のif文もすべて同じ if a=hoge if a=%str% if (a="hoge") if (a=str)
横から見ているだけでも役に立つスレだ
685 :
679 :2008/06/11(水) 07:55:51 ID:fVOKMAhU0
>>683 おお〜、ありがとうございます〜・・・
なるほど・・・道理で素人の私が混乱するわけですよ・・・
色々な書き方があるんですねぇ・・・。
if(a == "hoge")
みたいな、 =(等しいか?)の変わりに ==(等しいか?)を使っても全く同じですか?
だとしたらどうしてこんな演算子があるんだろうかと・・・。
それと自分で試行錯誤して理解したのですが
Loop, 5
{
でブロック開始しないとLoopは正常に処理されない
Loop, 5 {
で開始するとなんかmissing "{" とかエラーが出て・・・。
でもif文は
if(a == "hoge") {
で開始しても
if(a == "hoge")
686 :
679 :2008/06/11(水) 07:58:36 ID:fVOKMAhU0
途中で書き込んでしまいました。 でもif文は if(a == "hoge") { で開始しても if(a == "hoge") { で開始してもどちらも問題なく動きます。 それとかif(a == str) { と% % で囲まずに変数名指定するだけで中身を見てくれるのに IfWinExist, str { とかだと うまく動作せずに、 IfWinExist, %str% としないとだめのようです。 そしてこの構文も IfWinExist, %str% { ってやるとエラーが出て IfWinExist, %str% { ってやると正常に動作するんですよ・・。正直言語仕様を理解するのが凄く大変です・・・。 どうしてこんなにトリッキーなんだろう・・。普通のJavaやCと同じような感じにしてくれれば・・・
comment6, <a href="
http://doorppcpc.com/dinosaurs/coloring-pictures-of-dinosaurs.html ">coloring pictures of dinosaurs
</a>,
http://doorppcpc.com/dinosaurs/coloring-pictures-of-dinosaurs.html coloring pictures of dinosaurs
, atbow, <a href="
http://doorppcpc.com/dinosaurs/when-dinosaurs-went-extingged.html ">when dinosaurs went extingged
</a>,
http://doorppcpc.com/dinosaurs/when-dinosaurs-went-extingged.html when dinosaurs went extingged
, =[[, <a href="
http://doorppcpc.com/medicine/humphries-medicine.html ">humphries medicine
</a>,
http://doorppcpc.com/medicine/humphries-medicine.html humphries medicine
, lsj,
>>686 始めは %str% しか使えなかったんだよ
わかりにくいからって後から従来言語互換を追加していった結果カオスになった。
ちなみに
if(a == "hoge") だと厳密な文字列チェック(大文字小文字区別)
if(a = "hoge") はStringCaseSense依存、デフォだと Hoge、HOGE でもOK
後方互換をちゃんと取ってるのはいいけど、古い仕様はobsoleteで非推奨 ってちゃんとドキュメントに書いてくれたらいいのに
そこら辺たしかになんとかして欲しいな。 時々しかスクリプト書かないので 一度覚えてもすぐ忘れて間違えてしまう。
>>691 わかる。最初AHKでと思うんだけど、すぐに面倒になってHotKey以外の部分は
UWSCで書き出す自分…
逆に俺はAHKに慣れすぎてたまにvbsとかjsかくと無意識に変数を%で囲ったりしてる
俺も変数の使い方の部分で1週間ぐらい悩んだな 今でもたまに間違うし
覚えるのもあほらしいから 毎回何パターンか試して動いたらおkってことにしてるお
俺は、%で囲う作業すら面倒になったので、 Win+Vを押すと、クリップボードの内容に%〜%をつけて出力するようにした string=%Clipboard% string=`%%string%`%
お前ら丸暗記しようとするから混乱するんだよ 値で扱うか、式で扱うかだけだよ 値で扱う物は文字列は値となるので、変数を使いたい場合に%%で展開しなければならない。 式で扱う物は文字列は変数になってしまうので、文字列を値で扱う為には""で囲まなければならない。 (値) : (式) コマンド : 関数 = : := if : if() さらに大まかに分けると、:=と()内は式が使えるとだけ覚えればいい
698 :
名無しさん@お腹いっぱい。 :2008/06/12(木) 10:10:17 ID:LFiheMSR0
こんにちは。最近AutoHotKeyを使い始めました。 PDF-XChange Viewer にて、以下のように スペースキーを右矢印 シフト+スペースキーを左矢印 に置き換えようとしたのですが、 シフト+スペースキーが効きません。 ; for PDF-XChange Viewer #IfWinActive ahk_class DSUI:PDFXCViewer +Space::Left Space::Right #IfWinActive AutoHotKeyのKey history and script infoでみたいたところ、 Left以外に最初に押したシフトが押されたままになってしまっています。 ところが、PDF-XChange Viewerでは、シフト+右矢印は無効になります。 (右矢印のみは問題ない) シフト+スペースを押したときに、右矢印のみを押すことはできないでしょうか? つまり、シフト+スペース時に、シフトを無効にしたいのですが・・・
699 :
698 :2008/06/12(木) 10:29:25 ID:LFiheMSR0
これでいけました! ; for PDF-XChange Viewer #IfWinActive ahk_class DSUI:PDFXCViewer +Space:: Send {Left} return Space::Right #IfWinActive お騒がせしました。ご協力いただきありがとうございました。
700 :
698 :2008/06/12(木) 10:30:33 ID:LFiheMSR0
あ、returnは余計でしたね。一行でいけるのか +Space::Send {Left}
マウスをドラッグ中にカーソルを変更したいのですが、 AHKスクリプト内で、マウスカーソルを変更する方法はありますか? 現在のカーソルの種類を読み出すコマンドはあるようですが、 指定する方法は見つけられない状態でして・・・
>>701 ウェブブラウザとかでカーソルによってホットキー変えたりに使えそうなので
現在のカーソルの種類を読み出すコマンド教えてほしい
やったことないのでできるかわからんけど・・
DllCallでWin32APIのCreateCursor・GetCursor・LoadCursor・SetCursor辺り?
A_Cursor
>>704 ありがとう組み込み変数のほうにあったんですね。リファレンスだけ見てて気づかなかった・・
Explorerの機能を拡張しています。 ふつうのexplorerと、左側にツリー表示のついたexplorerは、 クラスが異なりますよね。 #IfWinActive ahk_class CabinetWClass ←ふつう #IfWinActive ahk_class ExploreWClass ←ツリー付き この2つを、同じカッコ内の「IfWinActive〜#IfWinActive」で 条件付けするには、どうまとめればよいでしょうか。
>>707 ありがとうございます。
#IfWinActive,ahk_class(CabinetWClass|ExploreWClass)
とやってみたところ、両方とも認識しなくなってしまいました。
>>708 AutoHotkeyのバージョンが古過ぎるか、もしくは
SetTitleMatchMode RegEx
↑を書く場所が悪いと予想。スクリプトの先頭の方の自動実行される場所に書いた?
半角スペースが足りないだけじゃね?
>>709-710 SetTitleMatchMode を部分一致モードにしていたせいでした。
RegExを入れたら、うまくいきました。ありがとうございます。
すいません、ひとつ質問があります。 例えば、Spaceキーを押すだけで、「LButton + s」の同時入力を行うには どのように書けばいいの? もう二時間、悩んでいるw
MOUSECLICKのあげさげではさめば?
>>712 Space::Send,{Lbutton}s
とか。それとも、ほんとうの意味で同時入力したい?
マウス押下中にsを入力したいってことじゃね 713の言うように Space::Send,{Lbutton Down}s{Lbutton Up} みたいにしたらいいんじゃね
716 :
名無しさん@お腹いっぱい。 :2008/06/16(月) 08:04:06 ID:rMcmKz300
シフトと0で、0を4つ入力したい(1万円をすぐ入力したい)のですが、 これで合っていますでしょうか? 一応、入力できているみたいですが不安です。 ; shift + "0" -> 0000 for shortcut of ten thousand yen +0::Send, 0000
ここで聞かずとも、そのまま使ってりゃええやん。 動かないなら聞きに来ればいいだろうけど。
718 :
名無しさん@お腹いっぱい。 :2008/06/20(金) 23:32:37 ID:8ANCqge80
選択範囲をクリップボードにコピーして googleで検索するスクリプトありませんか? フォルダ毎消してしまったので、 どなたか、スクリプトとue.exe(検索するexe)のダウンロード先を 教えていただけませんか?
作ればいいじゃん。3行でできるだろ。 何のためにこのスレに出入りしてるんだか
素晴らしい丸投げ力ww
>>721 流行らせるページのMy Scripts
>>721 「ThumbSense AutoHotkey」や「タッチパッド AHK」とかのワードでなぜ検索しなかった。
725 :
名無しさん@お腹いっぱい。 :2008/06/21(土) 15:03:28 ID:HZvBXUF60
#IfWinActiveでアプリのウインドウタイトルに部分一致させようとしたのですけど、 うまくいきません。キーが置き換わってくれないようです。 以下は、エディタxyzzyでスペースキーを jに置き換えようとした例です。 #IfWinActive, xyzzy Space::j #IfWinActive
726 :
名無しさん@お腹いっぱい。 :2008/06/21(土) 15:08:25 ID:HZvBXUF60
AutoHotkeyのヘルプにj,kを試しに割る振ったところ、うまくいきました。あれ? エディタコントロールだとうまくいかないのは何故? #IfWinActive, AutoHotkey j::Send {down} k::Send {up} #IfWinActive
727 :
名無しさん@お腹いっぱい。 :2008/06/21(土) 15:15:20 ID:HZvBXUF60
わかった、#IfWinActive って前方一致でマッチなのか・・・ #IfWinActiveではなく、 SetTitleMatchMode, 2使って、IfWinActiveを使えということ?
最初のでダメということは、xyzzyの「キャプションの表示を逆順」にしてるということだよね 部分一致で #IfWinActive xyzzy とかやると、エクスプローラ等でxyzzyのフォルダ開いてもマッチするから正規表現の方がいい SetTitleMatchMode, RegEx #IfWinActive,-\sxyzzy\s[0-9.]+@\w+$
729 :
名無しさん@お腹いっぱい。 :2008/06/21(土) 15:42:56 ID:HZvBXUF60
>>728 #IfWinActiveだと駄目みたいですね。IfWinActiveだとうまくいきますね。
しかし、IfWinActiveだと、ホットキーごとに逐一書かないといけないから大変だなあ・・・
とりあえず、F9でメニューから機能を呼び出して実行しようとしたのですが、
$を他のウインドウにF9をきちんと送るようにするには、定義時に$を先頭につける、
という認識でよいのでしょうか?
$F9::
SetTitleMatchMode, 2
IfWinActive, Editor
Send, !TD
else
Send, {F9}
return
730 :
名無しさん@お腹いっぱい。 :2008/06/21(土) 15:44:19 ID:HZvBXUF60
ああ、すいません、xyzzyはテスト用としてやってました。 本番環境では別のアプリなんです、すいません。
俺のINIではモード2で#IfWinActiveの後方一致も機能している
Windowsの「イベントビューア」の情報を、AHKスクリプト内で選り分け等の 処理ができる方法またはスクリプトはありませんか? 現状、下記のスクリプトを呼び出して、一旦テキストファイルにして情報を取得するところまでは 確認できました。あとは、この情報をLoopで回してフィルタ処理しようと計画しています。 cscript C:\WINDOWS\system32\eventquery.vbs /V /FO CSV > securitylog.csv もし、これと同じ処理ができる既成のスクリプトがあったら使わせていただきたいのですが、 情報ありましたらよろしくです。
733 :
名無しさん@お腹いっぱい。 :2008/06/22(日) 09:37:09 ID:mVxRkpZW0
>>731 あれ?そうですか?おかしいな・・・
よければ、バージョン番号を教えていただけないでしょうか?
こちらは、v1.0.47.06です
734 :
名無しさん@お腹いっぱい。 :2008/06/22(日) 09:53:57 ID:mVxRkpZW0
>>731 ああ!いけました!
ホットキーなどの定義にSetTitleMatchMode 書いたら #IfWinActive でも別の一致方法が設定できました。
Auto-execute Sectionを意識してなかった
735 :
名無しさん@お腹いっぱい。 :2008/06/22(日) 09:54:29 ID:mVxRkpZW0
x ホットキーなどの定義にSetTitleMatchMode 書いたら o ホットキーなどの定義の前に SetTitleMatchMode 書いたら
5分間キーボードやマウスの入力がなかったら発動する 関数って指定できる?
>関数って指定できる? ?
>>737 ,.-─ ─-、─-、
, イ)ィ -─ ──- 、ミヽ
ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , -─ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| > ---- r‐'´
ヽ_ |
ヽ _ _ 」
ググレカス [ gugurecus ]
(西暦一世紀前半〜没年不明)
これはまた良いツンデレの見本w
741 :
名無しさん@お腹いっぱい。 :2008/06/26(木) 16:32:18 ID:7EPWQR3Z0
ワロタ
見事だw
AHKでウィンドウのタイトルバーの色を変えたり、 ウィンドウの背景色を変えたりできるのでしょうか。
画面のデザインを変えたいってことなら 該当箇所のレジストリを書換えるようなスクリプト書けばいけるんじゃない? .regで事足りるような気もするが。
他アプリのツールチップの文字情報を取得することは可能でしょうか?
文字と文字コードを相互に変換する方法てないでしょうか?
Transform
すみません、2バイト文字を相互変換する方法でした Transformだと無理っぽいんで・・・
2バイトを別々に切り出して変換するしかないね
ue2clip.exe
>>748 http://www.google.com/search?hl=ja&q=nkf instr : 変換したい文字列
code : 変換後の文字コード nkfのドキュメント参照
戻り値: 変換された文字列
nkf(instr, code)
{
outstr:=instr
hLib:=DllCall("LoadLibrary", "Str", "nkf32.dll", "UInt")
DllCall("nkf32.dll\SetNkfOption", "Str", code)
DllCall("nkf32.dll\NkfConvert", "Str", outstr, "Str", instr)
DllCall("FreeLibrary", "UInt", hLib)
Return outstr
}
752 :
名無しさん@お腹いっぱい。 :2008/07/08(火) 19:42:48 ID:dJe/KcSZ0
alt+zをf3にしたく !z::f3 としても機能しません shiftとctrlとの組み合わせはうまくいきます 原因がわかるかたいらっしゃいますか?
!z::{f3}
754 :
名無しさん@お腹いっぱい。 :2008/07/08(火) 20:19:42 ID:dJe/KcSZ0
!z::send,{F3}
>>755 おかげさまでうまくいきましたありがとう
しかしaltだけ書き方が違うと気持ち悪いですね
いったい何が原因だろうか
こういう納得のいかない部分がなければかなりオキニソフトなんですが
757 :
757 :2008/07/11(金) 11:59:42 ID:C5AilJKz0
ちょい長くなるけど。無変換を押してるときだけTop表示するウィンドウを作りたいんだけど、 機能で「Alt+無変換でそのウィンドウ上にカーソルがあればTop表示」する。 下記のやり方だと一度きりのホットキーにしかならないんです。どうすればいいのでしょう? KeyWait, LButton ToolTip ,ウィンドウを左クリックすべし。 ;左クリック発生を待ち、カーソル下のウィンドウハンドルを変数(henti)に格納。 ;そのウィンドウを再背面に表示移動。 KeyWait, LButton,D ToolTip , KeyWait, LButton MouseGetPos ,,, henti WinSet , Bottom ,, ahk_id %henti% 1111: Loop { ;無変換を押されているときだけ最前面表示。離されると最背面。 KeyWait, vk1Dsc07B,D WinSet, Top ,,ahk_id %henti% KeyWait, vk1Dsc07B WinSet, Bottom ,,ahk_id %henti% } Return
758 :
757 :2008/07/11(金) 12:01:42 ID:C5AilJKz0
;ホットキー ~^vk1D:: { WinSet, Top ,,ahk_id %henti% ExitApp } !vk1D::Goto, 2222 Return 2222: Loop { WinSet, Top ,,ahk_id %henti% MouseGetPos ,,, jentj Sleep,200 if jentj = %henti% { continue } else { WinSet, Bottom ,,ahk_id %henti% Break } } Goto,1111 プログラミングやったことないんで、見づらかったらスマン。
>>757 #WinActivateForce
ToolTip ,ウィンドウを左クリックすべし。
KeyWait ,LButton,D
;左クリック発生を待ち、カーソル下のウィンドウハンドルを変数(henti)に格納。
;そのウィンドウを再背面に表示移動。
ToolTip ,
MouseGetPos ,,, henti
WinSet , Bottom ,, ahk_id %henti%
vk1D::
!vk1D::
WinGet,hwnd,ID,A
WinSet, Top ,,ahk_id %henti%
WinActivate ,ahk_id %henti%
MouseGetPos ,,, jentj
if (A_ThisHotkey = "!vk1D" && jentj = henti)
return
KeyWait, vk1D
WinSet, Bottom ,,ahk_id %henti%
WinActivate ,ahk_id %hwnd%
return
^vk1D::
WinSet, Top ,,ahk_id %henti%
ExitApp
return
>>759 CoordMode,ToolTip,Screen
Loop {
tip=
WinGet,id_list,List,ahk_class tooltips_class32
Loop,%id_list% {
id:=id_list%A_Index%
ControlGetText,ret,,ahk_id %id%
tip=%tip%%ret%`r
}
StringTrimRight,tip,tip,1
ToolTip,%tip%,300,300
Sleep,300
ToolTip
}
762 :
757 :2008/07/11(金) 15:15:58 ID:C5AilJKz0
>>760 マーベラス!スリムだな。
俺のやつ、恥ずかしいわw無駄が多い。
>>761 ありがとうございます。
背景が薄オレンジっぽいやつは取れましたが、
白っぽいものは取れませんでした。
ツールチップのクラスって、ソフトによって違うのでしょうか?
動画再生ソフト(ソフト名:SMPlayer)で、ホットキーでシークさせています。 この際、動画のシーンが変化した(シークが完了した)かどうかを判別させる方法はないでしょうか。 オーバーレイで表示している領域のマウスカーソル上の色を取り出したのですが、うまくいきません。 MouseGetPos, MouseX, MouseY ,hwnd,ctrl,1 PixelGetColor, oldcolor, %MouseX%, %MouseY%, RGB send,再生ソフトのシークコマンド PixelGetColor, nowcolor, %MouseX%, %MouseY%, RGB if 色が違ってたらシークされたと判別 これでオーバーレイ表示の色を取ろうとすると、当然のことながらハメコミ合成前の 元の色が毎回取得されてしまい、判別ができません。 オーバーレイを切ると、動画の表示自体が重くなってしまうので、 オーバーレイを切る方法以外で、なにかよい方法はないでしょうか。 最悪、再生時間を表示しているウインドウの色を監視しようと思いますが、 オーバーレイを使用するソフト全般で使えるワザがないかと探しています。
同じスクリプトの多重起動で終了ってできますかね。 Ahk2Exe.exeを使ってexeファイルにしてから、プロセス名を取得して多重起動したら終了はできそうなんですが。 AHKファイルからで出来ればそれに越したことはないんだけど。
#SingleInstance ignore
>>763 言語によって違う場合もあるし、ツールチップではない可能性もあるよ。
CoordMode,ToolTip,Screen
before:=sub()
Loop {
tip=
after:=sub()
Loop,PARSE,after,`,
{
if A_LoopField not in %before%
tip=%tip%%A_LoopField%`r
}
StringTrimRight,tip,tip,1
if tip=
tip=スクリプト実行後新たに表示された窓無し
ToolTip,%tip%,300,300
Sleep,300
ToolTip
}
sub()
{
WinGet,id_list,List,,,fgfxxngh
Loop,%id_list% {
id:=id_list%A_Index%
WinGetClass,ret,ahk_id %id%
clslist=%clslist%%ret%,
}
StringTrimRight,clslist,clslist,1
return,clslist
}
訂正 CoordMode,ToolTip,Screen before:=sub() Loop { tip= after:=sub() Loop,PARSE,after,`, { if A_LoopField not in %before% { WinGetClass,ret,ahk_id %A_LoopField% tip=%tip%%ret%`r } } StringTrimRight,tip,tip,1 if tip= tip=スクリプト実行後新たに表示された可視窓無し ToolTip,%tip%,300,300 Sleep,300 ToolTip } sub() { WinGet,id_list,List,,,fgfxxngh Loop,%id_list% { id:=id_list%A_Index% idlist=%idlist%%id%, } StringTrimRight,idlist,idlist,1 return,idlist }
769 :
765 :2008/07/12(土) 01:25:14 ID:i7fYPYmu0
>>766 ども、設定ファイル使えばできたっぽい。
#SingleInstance force
StringTrimRight, A_AhkDir, A_AhkPath, 15
SetWorkingDir, %A_AhkDir%
;[boot]aaa = 0-none 1-起動中
IniRead, kidouVar, .\myahk.ini, boot, aaa
if kidouVar = 1
{
IniWrite, 0, .\myahk.ini, boot, aaa
ExitApp
}
if kidouVar = 0
{
IniWrite, 1, .\myahk.ini, boot, aaa
a::b
}
初歩的なことだと思いますが、%20を半角スペースに置換するのってどうやればいいんでしょうか。 StringReplace, clipboard, clipboard, %20%, , All や StringReplace, clipboard, clipboard, %20%,"" , All や StringReplace, clipboard, clipboard, Documents%20and%20Settings, Documents and Settings , All とやっても置換されません。%20のままです。 正しい記述を教えてください。よろしくおねがいします。
StringReplace, clipboard, clipboard, %20%, %A_Space% , All でも駄目でした...
>>769 #SingleInstanceの項ちゃんと読んだか?
>>770 clipboard := "aaaa%20%aaa"
20 := " "
Transform,clipboard,deref,%clipboard%
msgbox, %clipboard%
もしくは
#DerefChar #
clipboard := "aaaa%20aaa"
StringReplace, clipboard, clipboard, %20,#A_Space# , All
msgbox, #clipboard#
スマソ、エスケープでいけた。 StringReplace, clipboard, clipboard, `%20,%A_Space% , All
;
>>345 の関数使うと便利んぐ
str:="こんな感じに変換出来るよ"
encStr:=uriEncode(str)
decStr:=uriDecode(encStr)
msgbox, %encStr%`n%decStr%`n%str%
encstr:="Documents%20and%20Settings"
decStr:=uriDecode(encStr)
msgbox, %encStr%`n%decStr%
return
uriDecode(str) {
Loop
If RegExMatch(str, "i)(?<=%)[\da-f]{1,2}", hex)
StringReplace, str, str, `%%hex%, % Chr("0x" . hex), All
Else Break
Return, str
}
uriEncode(str) {
f = %A_FormatInteger%
SetFormat, Integer, Hex
If RegExMatch(str, "^\w+:/{0,2}", pr)
StringTrimLeft, str, str, StrLen(pr)
StringReplace, str, str, `%, `%25, All
Loop
If RegExMatch(str, "i)[^\w\.~%/:]", char)
StringReplace, str, str, %char%, % "%" . SubStr(Asc(char),3), All
Else Break
SetFormat, Integer, %f%
Return, pr . str
}
>>772 引数なし
実行中のスクリプトがもうひとつ起動されたとき、「既存のプロセスを終了して起動するか」を問い合わせるダイアログが表示し、「はい」と答えると既存のプロセスを終了し新たに実行を開始する。「いいえ」と答えると、何もせず終了する。
FORCE
実行中のスクリプトがもうひとつ起動されたとき、自動的に既存のプロセスを終了して新たに実行開始する
IGNORE
実行中のスクリプトがもうひとつ起動されたとき、何もせず終了する。
OFF
常駐状態やホットキーを含むスクリプトでも複数起動を許可する
やりたいことは「同じスクリプトを実行したときに既存のプロセスも新規のプロセスも終了」したいんだけど、
引数なしは選択してどちらか。
FORCEは新規のプロセスだけ開始。無理やり新規
IGNOREは既存はそのままで、新規は何もせず終了。無視する新規
OFFは両方起動。
だという認識ですけど、違いますか?
%A_Space%
>>775 >同じスクリプトを実行したときに既存のプロセスも新規のプロセスも終了
(1)プロセスを調べて、起動時に同類が居たら殺す
(2) (1)が成立した場合、自殺。(1)が不成立の場合、作業続行
結果:両方ともプロセスから居なくなる
コレじゃダメなの?
>>777 プロセス名がAutoHoykey.exeになるから、かぶりすぎる気がするんだけど。
簡単ならそれでいいんだけど、いい方法が思いつかない。
>>765 に書いた通りならできるんだろうけど。
固有のプロセス名にしないとダメな気が。
プロセスIDも含めてどうすればいいか、いろいろ見てるんだけど見つからない。
779 :
770 :2008/07/12(土) 03:15:19 ID:F/Nva7L90
>>772-773 レスありがとうございます。
「`」を使うやり方でいけました。助かりました。
>>774 こっちのやり方も勉強してマスターしたいと思います。
レス下さった方どうもありがとうございました。
>>778 プロセスを外から殺すのは後始末が悪くなりそうなので、
知らせてあげる方法をとった方が良いと思う。
知ってれば自ら終了出来るので。
色々方法はあるかもしれないけど、メッセージを使ってやってみた。
もっと楽な方法があると良いんだけど、思いつかない。
以下コード
782 :
781 :2008/07/12(土) 06:16:36 ID:dji/JnRm0
#SingleInstance, Off #Persistent WM_AHK_QUIT=0x5555 ;適当に決めてください。 OnMessage(WM_AHK_QUIT, "OnQuit") ;自分の情報を取得 DetectHiddenWindows, On Process,Exist pid:=ErrorLevel WinGetTitle, g_scriptTitle, ahk_pid %pid% WinGet, hwnd, id, ahk_pid %pid% ahk_class AutoHotkey ;ahk_class AutoHotkeyのウィンドウを全て列挙 WinGet, ahk_id_list, list, ahk_class AutoHotkey Loop, %ahk_id_list%{ this_id:=ahk_id_list%a_index% ahk_id_list%a_index%= WinGetTitle, this_title, ahk_id %this_id% if(g_scriptTitle==this_title && hwnd!=this_id){ ;自分以外で同じタイトルを見つけたら終了メッセージを投げる。 SendMessage, %WM_AHK_QUIT%,,,, ahk_id %this_id% ExitApp ;仲間を消したら自分も消える。 } } DetectHiddenWindows, Off OnQuit( wp,lp, msg, hwnd ){ ;投げられたメッセージを受け取って自分と同じタイトルだったら終了 global g_scriptTitle DetectHiddenWindows, On WinGetTitle, sender_title, ahk_id %hwnd% if(g_scriptTitle==sender_title){ ExitApp } DetectHiddenWindows, Off }
>>775 >やりたいことは「同じスクリプトを実行したときに既存のプロセスも新規のプロセスも終了」したいんだけど、
>765の説明じゃさすがにそれはわからんだろう
すまんねエスパーしきれなくて
784 :
765 :2008/07/12(土) 11:15:23 ID:i7fYPYmu0
>>782 まさしくこれが望んだ機能です。勉強になります。ありがとー
>>783 言葉足らずorzよくやるんだよ実生活でも。
同じスクリプトの複数プロセスで実行の禁止を脳内で勝手に常識にしてました。
785 :
名無しさん@お腹いっぱい。 :2008/07/12(土) 21:09:08 ID:y7FfH+IM0
あるボタンを押している間 マウスの縦の移動量を抑えるものってできますか?
>>769 よりこっちがベター、一応最後まで作ってみた。ゴミだけ残してもしょうがないし。
;/*
;[boot]
;aaa=0
;*/
;#Include %A_ScriptDir%\ReExit.ahk
;上記5行追加で他からincludeできるかも。
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[boot]
aaa=0
ReExit.ahk-再起動で既存・新規のAHKスクリプトを終了(雛形)。2008/07/12作成07/15変更
;[boot]aaa = 0-none 1-起動中;#SingleInstance force推奨・ignore/off不可
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*/
#SingleInstance force
;Menu, tray, NoStandard ;標準タスクトレイ右クリックメニュー全削除
Menu, tray, Add, Exit ;タスクトレイ右クリック終了メニュー追加(最下段)
IniRead, kidouVar, %A_ScriptFullPath%, boot, aaa
if (kidouVar = 1){ ;起動済と判定・終了へ
IniWrite, 0, %A_ScriptFullPath%, boot, aaa
ExitApp
}
if (kidouVar = 0){ ;スクリプト実行へ
IniWrite, 1, %A_ScriptFullPath%, boot, aaa
;;;;;;;;;;;;;;;;;;;;;;;;;ここからスクリプト
;;;;;;;;;;;;;;;;;;;;;;;;;ここまでスクリプト
}
Return
Exit:
IniWrite, 0, %A_ScriptFullPath%, boot, aaa
ExitApp
でも、結局
>>782 を使ってる。
>>782 は
WM_AHK_QUIT=0x5555 ;適当に決めてください。
#Include %A_ScriptDir%\aaaa.ahk
の追加で#Includeも簡単にできるし。改めて感謝の意。
俺のはいちいちスクリプト書き換えてて、気持ち悪いw
ホットキーではなく通常のキー入力のトグルonとoffって出来ますか? 例えば aを1回押すとa押下維持 もう一度a押すと押下解除 って感じなんですが…
a:: { If Ouka = 1 { Send, {a up} Ouka = 0 Retunn } If Ouka = 0 { Send, {a down} Ouka = 1 Return } 未検証。「Send」を読んでけれ
キーリピートしなくね?
>>789 ありがとうございます
ただ書いていただいたものでは出来ませんでした
なので書いていただいたものをベースに編集してやってるんですがうまくいかない…
なんかログ見ると同時に処理されてるっぽいんですが
>>791 フック使うかSendPlayあたりを使う
change := RegExReplace(clipboard, reg1, reg2) 変数が以下の場合 clipboard = "word" reg1 = "(.*)" reg2 = "before $1" changeはbefore wordになると思いきや、before wordbeforeになります。 最後のbeforeはつけたくないのですが、方法はあるでしょうか?
こちらではならない。 それ以外の変更がどっかで加わってるんじゃないか MsgBoxでデバッグするとよろ氏
Clipboard = "word" reg1 = "(.*)" reg2 = "before $1" change := RegExReplace(Clipboard, reg1, reg2) msgbox, %change% うちの環境だとちゃんと before word になるけど。Ahkのバージョンは?
>>795 やっぱだめです。
バージョンは1.0.47.04です。
他のスクリプトが動いてない環境で実行してる?
ahkのスクリプトを、1台のマシンで2つ以上起動させ、さらに「同一のホットキー」がある場合、 そのホットキーを押したときに反応するスクリプトが不規則に変わってしまうのだけど、 これを固定化(ahkスクリプトごとに優先順位を与える)ことは可能ですか?
>>799 ありがとうございます。
ただ最新版の1.0.47.06しかなかったので最新版で試しましたがダメですね・・・
私の環境だけなのでしょうか?
OnClipboardChange がどっかで動いてんじゃないのとみるが
802 :
788 :2008/07/17(木) 20:52:28 ID:8fLX/MP00
>>789 色々やってたら出来ました
ありがとうございます
>>801 まさしくこの中でやってます。
どうすればよろしいでしょうか?
MouseGesture2の質はここでいい? それともGestureスレのほうがいい?
>>803 OnClipboardChangeの中でクリボを操作すると
その結果に対してもう一度このラベルが発動するから
予期せぬ結果が出ることがあるよ
どうすればいいかというと、上手くやれとしかいいようがない
ファイルを開く や ファイルの保存 などのダイアログで現在開いてるディレクトリを取得することはできないでしょうか?
>>805 OnClipboardChangeの中でやっているけど2回呼ばれているわけではなさそう。
というか$1使わなければ、他の置換はまったく問題ないです。
なぜこのパターンだけ・・・・
他の環境でも再現できる最小のスクリプトを提示するのが近道だと思う
>>807 挙動として正しいのかはわからんが ^ 付けたら上手くいったよ
OnClipboardChange:
change := RegExReplace(Clipboard, "(^.*)", "before $1")
msgbox, %change%
return
実際には違う正規表現使うもんだと思ってたんだが、そういう処理なら普通に文字列結合じゃダメなんか
マウスイベントを使いたくて窓使いの憂鬱から移ってきました
まず106日本語キーボードをUSキーボードの配列へリマッピングしたく、
>>1 にあるAutoHotkeyを流行らせるページや公式のリマップのページを参照し、
----------------------------
; convert us keymap on jp106
+2 :: @
+6 :: ^
+7 :: &
(以下省略)
----------------------------
といったものを書いてみたのですが、スクリプトをAutoHotKey.exeへD&Dしてロードしても
----------------------------
Line Text: +2 :: @
Error: Invalid hotkey.
The program will exit.
----------------------------
と最初の部分でエラーダイアログを吐いてしまいロードされません。
また、AHKに同梱の^!nでnotepad.exeが実行されるスクリプトは動作します。
OSはWindowsXPSP2、割り当てを行うキーボードはUSB接続のものです。
解決の糸口をいただければと思います。よろしくおねがいします。
>>812 ::の両端のスペースを削除するとエラー自体は出なくなるけど、
shift+2で@を出そうとするとshift+@に相当する`が出てしまうね。
もう一工夫必要と思われ。
各々のアプリのショートカットをMenuで表示させようと思うんだけど、 Menu, M1, Add, Aを押す, aaa aaa: send, a return 上記Labelを変えてsen, ^aとかsend, bとかsend, {Home}とかにするんだけど、 ほぼ全てのキーに対してそれぞれ指定するには、地道に記述するほかに何か手はありますか。
それだとリマップしたいキーが「+2 」とスペース入りで認識されてしまう あとキーリマップはなんか動作が怪しかったりするので Send 使うのを勧めとく
>>814 ラベルを1つにして
M1Clicked:
IfEqual,ほにゃらら,1,Send,a
Else IfEqual,ほにゃらら,2,Send,^a
Else IfEqual,ほにゃらら,3,Send,b
・・・
組み込み変数のところを見直す作業に戻るんだ
817 :
814 :2008/07/20(日) 01:49:37 ID:/aS3mQLh0
>>816 どうも。
814の方法で、90種のキーを今EmEditorを使い全部書き終わりました。
あとエディタの置換とマクロで6種類。
発想が貧困だと地味な肉体労働に徹するしかない。
AHKではHotstringが大いに役立ちましたw
818 :
812 :2008/07/20(日) 05:15:28 ID:O6DTAfF20
>>813 >>815 お返事ありがとうございます
Sendを使うことで
>>812 でのエラーは解決することができました。
しかし、また問題がでてきたので質問させていただきます
--------------------------
+2::Send, @
+6::Send, {^}
+7::Send, &
+8::Send, *
+9::Send, (
+0::Send, )
--------------------------
としているのですが、このスクリプトをロードすると
Shift+7 は ^ (つまりShift+6と同じ)
Shift+9とShift+0 は * (これはどちらもShift+8と同じ)
と入力されてしまいます。
この理由をKey history and script infoを使って調べたところ、Shift+2の場合は
--------------------------
A1 136 d 8.88 RShift
32 003 d 0.16 2
A1 136 i u 0.00 RShift
C0 01A i d 0.00 @
C0 01A i u 0.00 @
A1 136 i d 0.02 RShift
32 003 u 0.09 2
A1 136 u 0.06 RShift
--------------------------
と履歴が出ているので、@が入力されるのですが
(続く)
819 :
812 :2008/07/20(日) 05:20:42 ID:O6DTAfF20
Shift+7の場合は、 -------------------------- A0 02A d 4.66 Shift 37 008 d 0.27 7 36 007 i d 0.00 6 36 007 i u 0.00 6 A0 02A i u 0.02 Shift DE 00D i d 0.00 ^ DE 00D i u 0.00 ^ A0 02A i d 0.02 Shift 37 008 u 0.06 7 A0 02A u 0.05 Shift -------------------------- となってしまいます。つまり、Shift+7は「^」に割り当てたというより、 Shift+6として割り当てられているキーに割り当てられたという結果になってしまっている気がします。 Shift+7がShift+6に展開されず直接「&」に解釈されるようにするためにはどうしたらよいのでしょうか。 もしくは他の方法でも、何か英語キー配列にリマップする方法はないものでしょうか? よろしくおねがいします。長文失礼しました。
>>819 予想通りの展開だな・・
そういうときにつけたらいいものがあるんだ
Hotkeysのところを見直す作業に戻るんだ
質問です。 Excel2003を使用中に、セル内の文字列を編集モードで選択した状態において、選択文字列をコピーするのがうまく行きません。 Send,^c とか Send,{ctrl Down} Send,c Send,{ctrl Up} とかやってみましたが、クリップボードに格納されたりされなかったりです。 後ろにClipWaitをつけて確認してみると一生終わらないので、やはりクリップボードに格納されてないようです。 当然キーボードでctrl+cを押した場合はちゃんとクリップボードに格納されます。 何がまずいのでしょうか。 ExcelのバージョンはOffice Personal Edition 2003(11.8211.8202) SP3、AHKは1.0.47.6です。ご教示願います。
822 :
821 :2008/07/20(日) 16:46:37 ID:NvAr4z5y0
追記です。 上記の動作をマウスのクリックに割り当ててます。 ~LButton & RButton:: ~LButton & XButton1:: などです。
俺ならUpをつけるな…
WinA
うわ、失敗 WinActivateでエクセルを強制アクティブにする動作をはさんだらどう
826 :
812 :2008/07/20(日) 19:01:07 ID:O6DTAfF20
>>820 ありがとうございます。できました〜
ホットキーのラベルに$をつけるか、#UseHookで囲うかすればよかったのですね。
そして、また突っかかってしまいました。
-----------------------
(省略)
^::Send, =
+^::Send, {+}
@::Send, [
+@::Send, {{}
[::Send, ]
+[::Send, {}}
+;::Send, :
:::Send, '
+:::Send, "
-----------------------
というスクリプトで次のエラーが出てきました。
-----------------------
Line Text: :Send, "
Error: This line does not contain a recognized action.
The program will exit.
-----------------------
ダブルクォートの行が間違っているようなのですが、「{"}」でも「`"」とエスケープしても
同じエラーが出力されてしまいます。# エスケープが2種類あるのは何故?
ラベル側のコロン3連続が原因かとも考えましたが、同じくエスケープでは解決しないようです。
何度も申し訳ありません。どうかお知恵をお貸しください。
827 :
821 :2008/07/20(日) 19:10:16 ID:NvAr4z5y0
>>823-825 レスありがとうございます。
>>823 ~LButton & XButton1 Up::
のような記述と言うことでしょうか?トライしてみたんですがコピーされませんでしたorz
>>825 #WinActivateForce
WinActivate,Excel
Send,^c
ClipWait
でやってみたけど駄目でした。他のアプリ上でやるとExcelがアクティブになるので、WinActivate自体はうまく行ってるはずです。
マウスボタンに割り当てずに、適当なキーに割り当てるとちゃんと動作するので、
ボタン割り当ての記述がまずそうというのは分かるんですが...
>>826 試してみたら:が問題っぽいよ。キーコードで指定するんだ
あと{}はエスケープというよりSend中で{SPACE}みたく特殊なキーを指定するのに使うのが主用途
>>827 じゃなくて、それだとマウスキーを押したまま^vを押すことになるんじゃないかと思っただけ。
~LButton Up::
だと普通にできるでしょ。で、どうするかは自分で考えてくれ。
+:::send, +2だとダメなんか?
問題あるところがわかってるなら、そこだけ書いてください。
830 :
821 :2008/07/21(月) 00:03:11 ID:NvAr4z5y0
>>829 なるほど。Excelはマウスボタンを押したままだとctrl+cでコピーできないということですね。原因分かってすっきりしました。
修正したところ、Excel含む各アプリで問題なく動作するようになりました。ありがとうございました。
831 :
812 :2008/07/21(月) 00:30:07 ID:UCVvdXJJ0
>>828 お返事ありがとうございます。
これでアルファベットと記号のキーは英語配列にすることができました。
次の質問なのですが(わからないことばかりでごめんなさい)、
Altや、Ctrl、Winなどのモディファイアキーの動作はどう実現したらいいのでしょうか。
例えばここで、
----------------------------------
*vk1Dsc07B::Send, {LALT} ; vk1Dsc07B:無変換
*vk1Csc079::Send, {RALT} ; vk1Csc079:変換
*vkA5sc138::Send, {LWIN} ; vkA5sc138:RightAlt
----------------------------------
としてAltとWinにアサインしてはみたのですが、押している状態が維持されず、キーリピートしてしまいます。
それぞれの状態でif-thenしようとも考えたのですが、ステータスを取得できるのは
CapsLock、Num、Scrollキーだそうで、これも適わないように思います。
また、
----------------------------------
*{無変換 Down}::Send, {LALTDOWN}
*{無変換 UP}::Send, {LALTUP}
----------------------------------
のように押し下げ時と話したときで制御を変えようとしても、この行自体がinvalid keyとして認識されません。
「無変換」ではなく「vk1Dsc07B」としてもinvalid keyでした。
再度ご助言いただければ思います。よろしくお願いします。
>>830 マウスキーと^vになってたかorz。まあ結果オーライ。
ボタン2つでやるのを止めたのかな?なんか難しそうだもんね。
>>831 それこそ
>>812 の
vk1Dsc07B::LAlt
じゃないのか?
AHKを起動してるときだけ英字配列にしたいってこと。
ずっとそうしたいんなら、レジストリとかドライバをいじったほうがいいよ。
>>832 あら、予想と違ってました?まあ仰る通り結果オーライということで。
ボタン2つでやるのはそのままで、BlockInputとSend,{XButton1 Up}などで強制的にマウスボタンを離してからSend,^cやったら行けました。
それにしてもExcelの挙動(マウスボタン押下中はキー入力を受け付けない)が普通なんでしょうか...
他のアプリでは大抵受け付けてたんで意外でした。勉強になりました。
ああ、^c≠^vってことですか。連投失礼しました。
>>833 BlockInputか、勉強になった。d
普段使わないコマンドは無いことになってるからw
たぶんIE系ブラウザとかでも出来ないんじゃないかな。MSのことだから。
>>835 あ〜確かにIEでも駄目ですね...BlockInput使ってもうまく動いてくれないです。
もうちょっと修行を積みます。
837 :
812 :2008/07/21(月) 04:41:54 ID:UCVvdXJJ0
>>832 レスありがとうございます。
割り当てるキーがモディファイアの時はSendじゃなくてよいのですね...難しいです。
おっしゃられた方法でやると、確かにNotepadなどでメニューバーの状態はAltキーを押したときと
同じにはなります。
しかし、そうするとvk1Dsc07B + Tabの組み合わせではAltTabMenuDismissしなくなります。
これを改善するために
~vk1Dsc07B & Tab::AltTab
としてみたのですが、
http://lukewarm.s101.xrea.com/Hotkeys.htmlにある説明と異なり 、
vk1Dsc07B単独押し下げが効かなくなってしまいます。
また、ShiftAltTabをShiftキー追加で行わせるために、
+~vk1Dsc07B & Tab::AltTabとか、+vk1Dsc07B & Tab::AltTabを試してみたのですが、
invalid hot keyだそうです。
後半のご意見ですが、英語配列自体は
>>831 までで実現できております。
この他にEmacsバインドであるとか、ウィンドウの位置変更など行いたいことがあるため、
AHKで全部変更しようと考えております。
なにか改善案はないでしょうか...何度も申し訳ありません。
>>837 修飾シンボル・・・(備考)Alt+Tab代替系コマンドが割り当てられた場合、この指定に関係なく入力は乗っ取られる。
コンビネーションキー・・・+^!#で修飾キーを追加したりは出来ない。
リファレンスは何度でも見直すんだ
Alt + Tab のメニューが残る理由はわからんがとりあえず
Remapのところに
「a::b このとき、Shift+AはShift+Bに、Ctrl+AはCtrl+Bにというように、あらゆる状態でキーの変換が有効になる。」とある
コロンの右に書かれたキーは修飾キーの影響を受けるということだろう(たぶん
ホットキーで送られる修飾キーでもいいんだろう(たぶん
なのでRemapでやるなら・・
vk1Dsc07B::LAlt
Tab::Tab
Send/修飾キーの自動復元・・・略・・・によると{Blind}は修飾キーの状態を維持しつづけるということだろう(たぶん
なのでSendでやるなら
vk1Dsc07B::LAlt
*Tab::send,{Blind}{Tab}
できたような気がするがわからんな
自分のしょぼいキーボードだと 無変換 + LShift + Tab ができないし・・・(2キーロールオーバー・・?
正直窓使いの憂鬱使ったほうが良いと思う… もしこのままAHKで突っ走るならできたスクリプトはぜひ公開して欲しい。 というかこの一連の流れのまとめとして残しておくべき。
840 :
812 :2008/07/21(月) 12:37:15 ID:UCVvdXJJ0
>>838 レスありがとうございます。
確かに上のRemapと下のSendの例はどちらも同じ結果になりました。
ただ、これもAltTabMenuDismissしませんでした。
さらに
>>837 に書いたいずれも、表示された状態でもEscを押したりフォーカスを移すと
メニューが消えたのですが、挙げられた例ではスクリプトを落とす以外にメニューを消せないようです。
自分勝手で申し訳ありませんが、
英語配列(最下列のモディファイアを除く)とEmacsバインドは実現できましたので、
先に当初の目的であるマウスイベントの質問をさせていただきたく思います。
(続く)
841 :
812 :2008/07/21(月) 12:39:02 ID:UCVvdXJJ0
現在、マウス側でF14-18の仮想キーを吐かせるようにし、 それをAHK側でマウスイベントに置き換えようとしております。具体的には、 右ボタンのみクリックすると右クリックのイベント、Ctrl+右ボタンでコピー、Shift+右ボタンで貼り付け と動作させたいと考えております。 -------------------------------------------- vk81 Down::Send, {RButton DOWN} ; vk81はF18です vk81 Up::Send, {RButton UP} ^vk81::Send, ^C +vk81::Send, ^V -------------------------------------------- というスクリプトを書きました。 上2つは問題なく使用できるのですが、モディファイアをつけた下2つが使用できない場合があります。 (確認できた中では)IE, Opera, V2Cいずれもページ内、アプリのアドレスバーに関わらず使用できません。 Notepadでは使用することができます。 (続く)
842 :
812 :2008/07/21(月) 12:40:13 ID:UCVvdXJJ0
ちなみに、右ボタン押し下げ時のkey historyは -------------------------------------------- 81 069 h d 2.92 F18 81 069 h u 0.16 F18 -------------------------------------------- であり、モディファイア+右ボタン押し下げ時は -------------------------------------------- A2 01D a d 0.88 Ctrl 81 069 h d 0.41 F18 A0 02A i d 0.00 Shift 43 02E i d 0.00 C 43 02E i u 0.00 C A2 01D i u 0.02 Ctrl A0 02A i u 0.00 Shift 81 069 h u 0.09 F18 A2 01D a u 0.14 Ctrl -------------------------------------------- となり、どうやらShift+Ctrl+Cが入力されてしまっているようです。 なぜこんなことが起きるのでしょうか。 また、どうすればCtrl+Cにすることができるのでしょうか。 よろしくお願いいたします。3レスも消費してしまい申し訳ありません...
>>838 俺のDELLノートだと、ふたつとも両方問題なくいけるな。無変換 + LShift + Tabもできる。
つ Send, ^c
845 :
812 :2008/07/21(月) 14:07:20 ID:UCVvdXJJ0
>>843 ありがとうございます。環境によるものなのでしょうか...
>>844 うわーーーん
OperaでもIEでもできました。
# つまらないことで3レスも使ってしまい、申し訳ないです...
ただsyleraというブラウザではコピー後RButtonされてしまうという問題があったのですが、
^vk81 Up::Send, ^c
+vk81 Up::Send, ^v
とすることでキー離し時のRButton自体をリマップしてくれるようになり、解決しました。
ちなみに現在、(推奨はされていませんが)mayuとAHKを同時使用しております。
>>837 など解決していない問題がありますが、しばらくはこれでやってみたいと思います。
失礼しました。
うちもvk1Dsc07B::LAltで正常にALTTABメニュー動作する シフト+無変換+TABもおk 他の操作も普通にALTキー押したときと変わらない 2Ksp4 キーボードはPS/2
解決済みみたいけど、昔作った101on106を貼っとく 一部のキーはremapでも書けるはずだけど、メニューから切り替えしようとしたら、これしか思いつかなかった。 簡潔な書き方があったら教えてください。 #IfWinActive #UseHook,On +2::Send,{@ Down} +2 Up::Send,{@ Up} +6::Send,{^ Down} +6 Up::Send,{^ Up} +7::Send,{blind}{& Down} +7 Up::Send,{blind}{& Up} +8::Send,{blind}{* Down} +8 Up::Send,{blind}{* Up} +9::Send,{blind}{( Down} +9 Up::Send,{blind}{( Up} +0::Send,{blind}{) Down} +0 Up::Send,{blind}{) Up} +-::Send,{blind}{_ Down} +- Up::Send,{blind}{_ Up} ^::Send,{= Down} ^ Up::Send,{= Up} +^::Send,{blind}{+ Down} +^ Up::Send,{blind}{+ Up} *@::Send,{blind}{[ Down} *@ Up::Send,{blind}{] Up} *[::Send,{blind}{] Down} *[ Up::Send,{blind}{] Up}
848 :
847 :2008/07/22(火) 20:15:40 ID:8GJz6EI90
続き +`;::Send,{: Down} +`; Up::Send,{: Up} :::Send,{' Down} : Up::Send,{' Up} *::Send,{" Down} * Up::Send,{" Up} *]::Send,{blind}{\ Down} *] Up::Send,{blind}{\ Up} sc029::Send,{``} sc029 Up::Send,{`` Up} +sc029::Send,{blind}{~} +sc029 Up::Send,{blind}{~ Up} #UseHook,Off 101on106Init( sw = "off" ) { Menu,TRAY,Add,101on106,101on106Menu Menu,TRAY,Add Menu,TRAY,NoStandard Menu,TRAY,Standard if ( sw = "on" ) { Menu,TRAY,Check,101on106 101on106Control( "On" ) } else { Menu,TRAY,Uncheck,101on106 101on106Control( "Off" ) } } 101on106Menu: Menu,TRAY,ToggleCheck,101on106 101on106Control( "Toggle" ) return
849 :
847 :2008/07/22(火) 20:17:36 ID:8GJz6EI90
101on106Control( sw ) { Hotkey,IfWinActive Hotkey,+2,%sw% Hotkey,+2 Up,%sw% Hotkey,+6,%sw% Hotkey,+6 Up,%sw% Hotkey,+7,%sw% Hotkey,+7 Up,%sw% Hotkey,+8,%sw% Hotkey,+8 Up,%sw% Hotkey,+9,%sw% Hotkey,+9 Up,%sw% Hotkey,+0,%sw% Hotkey,+0 Up,%sw% Hotkey,+-,%sw% Hotkey,+- Up,%sw% Hotkey,^,%sw% Hotkey,^ Up,%sw% Hotkey,+^,%sw% Hotkey,+^ Up,%sw% Hotkey,*@,%sw% Hotkey,*@ Up,%sw% Hotkey,*[,%sw% Hotkey,*[ Up,%sw% Hotkey,+`;,%sw% Hotkey,+`; Up,%sw% Hotkey,:,%sw% Hotkey,: Up,%sw% Hotkey,*,%sw% Hotkey,* Up,%sw%
850 :
847 :2008/07/22(火) 20:18:39 ID:8GJz6EI90
Hotkey,*],%sw% Hotkey,*] Up,%sw% Hotkey,sc029,%sw% Hotkey,sc029 Up,%sw% Hotkey,+sc029,%sw% Hotkey,+sc029 Up,%sw% } 改めて見たら妙に長かった。ごめん
Ctrl+カーソルに割り当てとルナ
>>851 ミニキーボードだと 修飾キー+Fn+UpDown が面倒なのでいいかも・・
ってことでやってみたサンプル,複数タップ後押しっぱなしでそのキーのキーリピート,修飾状態も有効に
$*Up:: ; 行数足りないので削った$*Down::と$*Down up::を追加して。。
$*Up up::
ArrowKey(A_ThisHotkey) ;ホットキーラベルで分岐
return
ArrowKey(param1=""){
Static KeyName,KeyDownCheck="off",KeyRepeat="off",Counter=0
If(param1="$*Up up"||param1="$*Down up"){ ;キーを離したとき
IfEqual,KeyRepeat,on,Send,{Blind}{%KeyName% up} ;キーリピート後はKey up
KeyDownCheck:="off",KeyRepeat:="off"
}Else If((param1="$*Up"||param1="$*Down")&&KeyDownCheck="off"){ ;キーが押されたとき
KeyDownCheck:="on"
IfEqual,param1,$*Up,EnvAdd,Counter,1
Else IfEqual,param1,$*Down,EnvAdd,Counter,-1
Settimer,ArrowKeyTimer,-200 ;タップ数を検出する時間
}Else If((param1="$*Up"||param1="$*Down")&&KeyDownCheck="on"){ ;キーを押しつづけてるとき
KeyRepeat:="on"
Send,{Blind}{%KeyName% down} ; キーリピートはKey down
}Else If(param1="UDcheck"){ ;UpDownタップ数でキーを変える
IfGreaterOrEqual,Counter,3,SetEnv,KeyName,home
Else IfGreaterOrEqual,Counter,2,SetEnv,KeyName,pgup
Else IfGreaterOrEqual,Counter,1,SetEnv,KeyName,up
Else IfLessOrEqual,Counter,-3,SetEnv,KeyName,end
Else IfLessOrEqual,Counter,-2,SetEnv,KeyName,pgdn
Else IfLessOrEqual,Counter,-1,SetEnv,KeyName,down
Counter:=0 ;カウンタリセット
Send,{Blind}{%KeyName%} ;変数の中にキー名
}}
ArrowKeyTimer:
ArrowKey("UDcheck")
return
済みません基本的操作になると思うのですが、質問させて下さい。インストール後 スクリプトを一つ書いて拡張子を.ahkにしショートカットを作りスタートアップに、再起動で 希望どおりの動きになり喜んでいるのですが、この後また別のスクリプトを追加したくなった 場合、スタートアップを増やしていくのでしょうか、何か違うと思うのですが解決方法が 分かりません此方の方々にはアホかと思われそうですが、どうか宜しくお願い致します。
ショートカットを追加してもうひとつ起動してもいいし #Include scriptname.ahk ってやって最初のスクリプトに読み込ませてもいい ケースバイケースで使い分けれ
先にスタートアップに登録した.ahk内に Run,〜.ahkと記述してもいい
常駐させるならautohotkey.iniでいくね
WinSetのBottomが正常に機能しない場合があります 対象のウィンドウが手前に表示されたまま 非アクティブになるだけで最背面に移動しません 流行らせるページのWinSetのTopの項目に書いてある >システムの設定によっては動作しない。 というのがBottomの場合でもあるのでしょうか?
>>856 857 858
御礼が遅くなり失礼しました。即レス感謝致します。
流石にいろんな方法が、あるのですね。ショートカット
追加でも良いとの事で少し安心しましたが、余り
スマートではないので色々と試してみます。
処でこのソフト相当自由度が高く、奥が深そうなのですが
間違ったスクリプトを組んだ場合PCのシステム並びに
対象としたソフトに悪影響を及ぼす事は無いでしょうか
あるますん
ありがとうございます
ホイールスクロールで移動後にコンテキストメニューを残さない方法は 無いでしょうかお願いします。 #IfWinActive ahk_class MozillaUIWindowClass ~RButton & WheelDown::send,^{PgDn} ~RButton & WheelUp::send,^{PgUp} #IfWinActive
RButton使わなきゃいいんじゃね。ホイールスクロールは関係ない
~付けなきゃ良いのでは
>>864 Operaのタブ切り替えと同じくしたいので
>>865 右クリックでコンテキストメニューが出なくなります。
コンビネーションを使わないで ホイール回したとき右クリックの状態をGetKeyStateで取得し分岐 右クリック+ホイールのときはRButton upを送らないとか RButton upしないことで起こる問題については知らんけど・・
一瞬ちらっと出てもいいのなら Send,{Alt} でもしといたら?
RButton upしないと押しぱなしになるか。。 Opera・・たぶんジェスチャを使うだろうからちょっと複雑になるかも? 試したところ以下の方法できた $RButton:: 開始フラグ、マウスの初期位置取得、セットタイマ タイマのラベル: マウス位置が適当に変わったら{タイマオフ、Click,Right,Down、RButtonDownのフラグ} $RButton Up:: RButtonDownしてた場合{Click,Right,Up} なにもなかった場合{タイマオフ、Click,Right} ホイールを回した場合{なにもしない} $WheelDown:: GetKeyStateでRButtonの状態取得(Hookで マウス右ボタンが押されている{タイマオフ、Send,^{pgdn}、ホイール回転のフラグ} それ以外はWheelDown $WheelUp:: GetKeyStateでRButtonの状態取得(Hookで マウス右ボタンが押されている{タイマオフ、Send,^{pgup}、ホイール回転のフラグ} それ以外はWheelUp
>>869 有難う御座います。昨日から覚え出した処でして、
宜しければスクリプトとして記載して頂けないでしょうか
勉強させて頂きたいので宜しくお願いします。
テストスクリプト作って試したのにもかかわらず わざわざ文で書き起こした869の親心を理解しろ
初歩的な質問で申し訳ないのですが、 #(Win)キーを叩いた時に、スタートのメニューを開かないようにするにはどうすればいいのでしょうか? #:: return でいけるかなと思ったのですが、、これでは駄目なようで
LWin::return RWin::return
>>869 折角、説明を入れて頂いたのですが、今の私のスキルでは
スクリプトとして組み立てられません。
どのようにスクリプトを書けばよいのでしょうか
>>873 おお、出来ました。ありがとうございます
>>869 のスクリプトの件、自分なりに考えたのですが
どうにもなりませんどうか宜しくお願いします。
自分なりに試したことを書くべきじゃない? 何が駄目なのか全然分からないから、周りの人もアドバイスしようがないと思う。
マウスの戻る/進む(XButton1/XButton2)にホイールアップ/ダウンを割り当てる方法を教えてくれませんか。 指が腱鞘炎になってしまいホイールを回すと痛みを覚えるので、押しやすい戻る/進むボタンで ホイールを操作できるようになれば非常にありがたいのです。 XButton1::Send, {WheelUp} XButton2::Send, {WheelDown} と、書いてみたものの。XButton1を押し続けてもスクロールしてくれるのは 1回だけでこれでは意味がありません。
>>878 フックのコマンド自体はそれで正解。
ただ長押ししてリピートさせる機能はないので、コードを手動で書かないとダメだね。
単発で送信するキー(今回はwheelDown、wheelUp)
長押しと認識するまでの時間(例:300msec)
長押しで認識したとき送信するキー(今回はwheelDown、wheelUp)
長押しで連打する間隔&タイミング(例:50msec)
以上のパラメータが必要。
キーが押されているかどうかは「GetKeyState」コマンドを使う。
Dが帰ってきたら押されっぱなし、Uならキーが離されたと判断できる。
最初は面倒だけど、いったん作ってしまえば、自在に間隔を調整できる。
無理なんじゃないのかねぇ、H/W毎に制御ってのは。 発想の転換で、たとえば2ストロークキーでモード切替(キーアサイン変更)するとか ex) Numpad0 && NumpadEnter:: ChangeMode(1) ChangeMode(mode) { if (mode == 1) { Hotkey, Numpad0, hogehoge ... : } else { Hotkey, Numpad0, fugafuga ... } }
>>880 >テンキーはドライバ不要で 「NumLock非連動タイプ」 です。
ここが気になるけど
キーボードはNumLockON状態のキー、マウスはNumLockOFF状態のキーとかはできないの?
キーボードとマウスをNumLock状態に逆にすると一応は別の機能の割り当てってことにはなるが・・
済みません
>>869 のテストスクリプトの件どうしても諦め切れず
何とか、スクリプトとして記載して頂けないでしょうか
正直、自分では、どのように組み立てれば良いのか分からない
状態で手の付けようがありません。どうか宜しくお願いします。
>正直、自分では、どのように組み立てれば良いのか分からない それは今のお前のレベルでは使うべきではないと言うことだ。 流行らせるページ熟読してせめてピンポイントでわからない所を聞けるようになってから来い。 マジレスするとマウスフック関係は暴走するとマウス操作一切不能になる恐れがある。 他人のスクリプト貰ってくるまま自力でどうにもできないようなスキルなら触んないほうがいい
>>884 #NoTrayIconでタスクトレイアイコンを非表示にしている兼ね合いから
どのスクリプトが暴走しても、終了できるようにキーボードから
ExitAppを実行できるように仕込んでいますので大丈夫かと思われます。
お分かりでしたら、どうか宜しくお願いします。
>>885 導入当初にしてはハードル高すぎるようだから、簡単なスクリプトから組んで行って、何が分からないのかはっきり分かる程度になったらまた来ればいいと思う。
Firefoxで右クリ+ホイールでタブ切替したいなら拡張で何とでもなるでしょ。FireGesturesとかAll-in-One Gesturesとか。無理に敷居の高い方法取らなくても。
かく言う俺もAHK使い始めたばっかりで、このスレを読んでも半分も理解出来てない。けど勉強してその内ちゃんと理解できるようになりたいと思ってる。
>>885 | ̄``''- 、
| `゙''ー- 、 ________
| ,. -‐ ''´ ̄ ̄`ヽ、_ /
|, - '´ ̄ `ヽ、 /
/ `ヽ、ヽ /
_/ ヽヽ/
/ / / / / / ヽハ
く / /! | 〃 _/__ l| | | | | | | ||ヽ
\l// / | /|'´ ∧ || | |ー、|| | | l | ヽ
/ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ
/ | ||ヽ { ,r===、 \| _!V |// // .! |
| || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘
| ハ|| || | """ ┌---┐ ` / // |
V !ヽ ト! ヽ、 | ! / //| /
ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | /
┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
|(/(/(/(/(/(/(/(/(/(/│|| |\ 〃
r'´ ̄ヽ. | | ト / \
/  ̄`ア | | | ⌒/ 入
〉  ̄二) 分ってるが | | | / // ヽ
〈! ,. -' | | ヽ∠-----', '´ ',
| \| | .お前の態度が | |<二Z二 ̄ / ',
| | | _r'---| [ ``ヽ、 ',
| | | 気に入らない >-、__ [ ヽ !
\.| l. ヽ、 [ ヽ |
ヽ| \ r' ヽ、 |
AHK初心者かつスレチな感じで申し訳ないが・・・ そのテンキー付きマウス?って、テンキーとマウスでVID、PIDって別々? もし別々ならMagicKeyPadでテンキー部分は、他のテンキー(メインキーボードのテンキー)とは別に認識させてキー 割り当てできるかも。 F13〜F24とか普段使いそうも無いキーを割り当てれば、後はそれをahkで受けて処理するなり、 直接ショートカットキーなんかを割り当てるなり・・・。 MagicKeyPadはググってみて。
890 :
880 :2008/07/29(火) 02:19:37 ID:47WfbJ9X0
>>881 なるほど切り替え式か。イイ感じで動きました。ありがとう。
>>882 たぶん、それをやると カーソル、HOME、ENDとかが重複します。
>>888 ヒントありがとう。落としてみたけど、手持ちのUSBテンキーが認識されなかった。
でも、こういう方法で攻めればよいということがわかったので、追試してみます。
特定のキーを押すと指定したahkファイルを実行する。 同じキーを押すとそのahkだけを終了させる。 ということをやりたいのですが、指定したスクリプトだけを終了させることはできますか?
キーが押されたらRunでスクリプトを実行して終了するまで待つ 実行されたスクリプト側で同じキー押されたら終了とか
ミスったRunじゃなくてRunWaitね
>>891 これでどうだろうか。
キー::
t = その ahk のフルパス
DetectHiddenWindows On
IfWinExist, %t% - AutoHotkey
WinClose
else
Run, %t%
DetectHiddenWindows Off
return
>>892 さんの方法でできました。
>>894 さんの方法も試したのですが、
一瞬だけタスクトレイアイコンが表示されてすぐに終了してしまうようです。
漠然とした質問なんですが、 ・たくさんの文字列が記入されたtextファイルがあって、 ・それらすべての文字列をAHKで生成したGUIのドロップダウンボックスに表示しつつ、 ・同じGUI上に設置されたテキスト入力欄にテキストを入力していくと、 ・前述のドロップダウンの内容をインクリメンタル検索して候補を絞りながら表示する、 ってなことは可能なんでしょうか?おそらく無理かな〜と思うのですが。 分かりにくい説明ですみません。
流行らせるページに似たようなのがある
即レスありがとうございます。 同じようなことが出来るという事ですね、すごい。 とりあえず今は全然実装方法が分からないので熟読してきます。
FirefoxとThunderbirdのahk_class名が一緒なのですが #IfWinActiveでそれぞれを区別する良い方法はないでしょうか。
MDI子フォームの識別方法てありませんか?
>>900 SetTitleMatchModeなんて命令があったんですね。
てっきりタイトル名は完全一致じゃないとダメだと思ってました。
ありがとうございました。
以下のスクリプトだとやはりホイールスクロールで移動後にコンテキストメニューが
残り使いにくくて困ってます
#IfWinActive ahk_class MozillaUIWindowClass
~RButton & WheelDown::send,^{PgDn}
~RButton & WheelUp::send,^{PgUp}
#IfWinActive
>>869 のテストスクリプトの件どうか上記のようなスクリプトで記載して頂けないでしょうか
お願いします。
大概にしろよコンチクショウ ここまでやってみたけどダメでしたとかならともかく、試した形跡皆無だし
これほどしつこい人なかなか居ないな。感心するわ。
タイマで動かしてる分リスキーな挙動になるだろうから シーケンスだけでコード出さなかったのは自力かつ自己責任でやってくれって意思表示だろ 869本人も軽く動かしてみただけで常用に耐えられるかまでは見てないだろうしな。 868にも書いたけど、大人しく Alt 送っとけよ。 それすらも意味わかんないってんならもう来るな。おまえにこのソフトは使いこなせないよ。
>>904 マウスの設定でスクロールを1画面ずつにすれば?普通のスクロールはTTBaseのdragscrollを使うとか?
その程度でいいと思うよ。
>>869 らへんにやり方書いてるんだから、ある程度はつくれるでしょ。
全くしないってのはただの無精。
ことあるごとにあれやって、これやってって言われそうだから誰も手伝わなくなったんだよ。
素直にFireGesturesとか使えばいいのに
マウスジェスチャ2でやったら右クリックメニュー出ないからそっち使っとけ。もう来るな。
みなさんひどすぎますよ!! 私がどれだけブラウザで不便を強いられているのか、 全く理解しようとしてないじゃないですか。
何がしたいのがよく解らんけど、 他のマウス系ソフト使った方が早いんじゃない?
おれは画面両端でホイールまわすとPgUp,PgDnするようにしてるよ。 ちなみに画面下をホイールで音量調整、 画面上をホイールで文字の拡大縮小になってる。
試してみるのも
>>869 の状態ですとスクリプトとして動かす事が出来ません。
何方か、スクリプトで記載して頂けないでしょうか宜しくお願い致します。
動かないのでもいいから貼りゃいいじゃん
流れを無視して、以前出ていた慣性スクロールをやってみた。 ずっと使ってたホイール加速より気持ちよいかも。 Line=5 ;スクロールする行数 Time=50 ;感度 ~WheelDown:: ~WheelUp:: SetTimer,Scroll,%Time% Count+=%Line% StringTrimLeft,Key,A_ThisHotkey,1 Return Scroll: Loop,%Count% { If A_PriorHotkey<>%A_ThisHotkey% Break Send,{%Key%} Sleep,%A_Index% } Count=-%Line% SetTimer,Scroll,Off Return
おまえらのツンデレっぷりに泣いた そんなアフォはもう放置でいいと思うぞ
というか、他のソフトをせっかく教えてもらってるのに ずっとクレクレしてるってことは大して不便でもないってことだよな
途中から騙りが混じってるだろJK
Firefox3の検索バーかアドレスバーってAHKで操作できます? AHKのWindow Spy使って調べても出来そうにない感じなんですが 使いたいのはControlFocus、ControlSend、ControlSetTextです。
>>921 何をやりたいのかわからないから正解かどうかも分からないけど
キーボード操作でできるんじゃない?
自分の場合は、Sleipnir+StrokeIt(マウスジェスチャーソフト)で
ジェスチャーを使うと、
Ctrl+Eでフォーカスを検索バーに
Ctrl+Vで貼り付け
Enterで検索
ってコマンドを連続でやらせてる。
>>922 AHKで外部から検索しようと思いまして
ueでは複数サイトを一括で検索できないので自分的には従来どおり
検索バーにフォーカスを当て(ControlFocus)、検索語句を送って(ControlSetText)
最後にEnter(ControlSend)したいと思ってます。
最低でもControlSetTextが使えないとクリップボードを汚すやり方しかない
のでスマートじゃないなぁと思ったしだいです。
下はWEB上にあった物をFx用に改造したものでクリップボードを汚すやつ paraLen = %0% If paraLen = 0 { InputBox, sword, Web Search - 検索語句を入れてください。, , , 320, 90 If ErrorLevel <> 0 Return } Else { Loop, %paraLen% { buf := %a_index% sword = %sword% %buf% } } IfWinNotExist, ahk_class MozillaUIWindowClass Run, D:\Firefox\firefox.exe WinWait, ahk_class MozillaUIWindowClass WinActivate, ahk_class MozillaUIWindowClass WinWaitActive, ahk_class MozillaUIWindowClass Sleep, 334 Send, !^+K Clipboard = 2p %sword% Send, ^v Send, {Enter} Return
>>924 クリップボードを使いたくない、ってのが自分にはわからないけど
バックアップ取っとくのはダメなの?
bk=%ClipboardAll% ; クリップボードの内容をバックアップ
Clipboard=%bk% ; バックアップした内容を書き戻し
流行らせるページにあったやつだけど。
eClip使ってるからクリップボードの履歴が残っちゃうんですよね だから、クリップボードを使いたくないんだけど と思ったらeClipに無視設定があったので、それで何とか凌ごうと思います。 ありがとうございました。
前にRButtonで騒いでたやつ、 これでできたよ。コンテクストメニューはでるが マウスジェスチャーは無理かもね。もう騒ぐなよ。 RButton Up::Send,{RButton} RButton & WheelUp::Send,{PgUp} RButton & WheelDown::Send,{PgDn}
>>927 >これでできたよ。コンテクストメニューはでるが
そもそもコンテクストメニューが出るのが嫌で、困っているのですが、
理解できませんか?
とりあえず一度試してから突っ込んでね。
UEをLOOPで回転させてURLをAHKで受け取って FIELAPPENDで一時的に書き出してそれをREADすればいいのでは
>>925 その方法だとしょっちゅう以前のクリップボードの内容がはりつけられたり
おかしな動作になるんですが、対処法ってありますか?
最小のスクリプトぐらい張ってみたら?
eClipとやらが干渉してるに 10クリップ
あんの〜? 以下のスクリプトを書いてコンパイルして .exeにしたら ClamWinでウイルスチェックしたらTrojanって判定されるんですが・・・ #Persistent ;hoge は piyoフォルダのファイルの削除を検出しました。 Loop { IfWinExist, hoge, hoge は piyoフォルダのファイルの削除を検出しました。 { WinClose, hoge, hoge は piyoフォルダのファイル削除を検出しました。 } Sleep, 2000 } hogeとpiyoは本来は違う名前ですがプライバシ保護の為置換えました。 なんででしょうね?単なる誤検出ですかね・・・・。
AHKに限らずexe化スクリプトが誤検出されるのはよくあること
::test:: Clipboardbackup=%Clipboard% Clipboard=これを貼り付けたい Send,^v Clipboard=%Clipboardbackup% とすると、しょっちゅう以前のクリップボードの内容が貼り付けられてしまいます。 eClipを終了して試してみてもダメでした。
clipwait入れてもだめでした。 処理速度が速いPCでやったらeclip入れてようが clipwaitいれなかろうが何も問題が起こらなかったので、 単純にCPU速度の問題みたい(と勝手に予想)
clipwaitは変化を待つんじゃなくて テキストとして読み取り可能かどうかだからな 内容の変化を確実に待ちたいなら OnClipboardChangeとか絡めるといいかもな
普通にSleep入れるだけじゃダメなの?
OnClipboardChangeと絡めるっていいかも。今度やってみます。 Sleep入れると正確に動作させるには何秒も待つことになっちゃうんです。
何秒も待つなんて、あり得ないだろ。486でも使ってるのか?
IfWinActiveのクラス名の指定を複数行うことは出来ないでしょうか? 自分なりに調べたつもりですがわかりませんでした。ご教授願います。 【現状】 #IfWinActive, ahk_class ClassName01 #自分好みのショートカットキー指定を羅列 (内容は下と同じ) #IfWinActive #IfWinActive, ahk_class ClassName02 #自分好みのショートカットキー指定を羅列 (内容は上と同じ) #IfWinActive 【こういう風にやりたい】 #IfWinActive, ahk_class ClassName01, ClassName02 (←この指定の仕方では動かなかったですけど・・・) #自分好みのショートカットキー指定を羅列 (重複した指定は1回で済ませたい) #IfWinActive
group
>>945 レスありがとうございます。流行らせるページを読んで以下のような使い方かと思ったのですが
希望通りには動作しませんでした。使い方間違ってますでしょうか?
GroupAdd, testKey, ahk_class Notepad
GroupAdd, testKey, ahk_class EmEditorMainFrame3
#IfWinActive, ahk_group testKey
!l::Send,{Right} ; 矢印キーの→ Alt+L
#IfWinActive
- メモ帳とEmEditorで [Alt] + [L] 押下で [→] キーを送信 って言うのならスクリプト通りだし、きちんと動くが
948 :
945 :2008/08/13(水) 14:22:02 ID:6gtl16Ac0
>>946 >>947 レスが遅くなりすみません
アドバイスしていただいた内容を元に色々試行錯誤した結果、
>>709 で出ている「スクリプトを書く場所」を
AutoHotkey.iniの先頭に持ってきたところ、Group形式もSetTitleMatchMode形式も正常動作いたしました。
最初下の方に書いており、この位置ではどちらの形式でもうまく動作しませんでした。
未だに何が原因かはわかりませんが、ご助言いただいたことで目的の動作にすることが出来ました。ありがとうございました。
おいおいwwww
ヘルプを読めば分かるんだけど、 この自動実行の問題は直感的じゃないから 誰もが通る道だよねw
AutoExecute Sectionはラベルとか決め事ないからな ファイル先頭に書くだけなんだが人に教える時は理解させづらいね
まぁ、ウィンドウ指定でのホットキーはスクリプトロード時に決まるわけで、 autoexec section に記載しないと動かんわな。 何らかのサブルーチン内でウィンドウ探すときに SetTitleMatchMode を変更して探索するのとは違うしな。 まぁ、言語仕様がアレなんで。
954 :
名無しさん@お腹いっぱい。 :2008/08/14(木) 08:35:06 ID:2yMmcCqm0
> ToDo見たら「Full unicode build.」とかもあった。 ktkr
ということは、文字化けと無縁になるのか!?
>>953 >個人的には #if expression と while の実装が大当たり。
こう書かれても、素人の俺には理解できないので、
なんでもいいので使い方サンプルみたいなの晒してもらえませんか?
>>956 ぱっと思いついた範囲で。
Whileは基本的にLoopと似たような動作をするんだけど、
Loopの場合、抜けるまでの回数を数値か変数でしか指定できない。
省略すると無限ループになるけど、抜けるための条件をIfで書かないといけない。
例えばテンキーの0を押している間、aとbを交互に連続して入力するのを
LoopとWhileの場合で書いてみる。
Loopの場合
Loop
{
If GetKeyState("Numpad0")
{
If Mod(A_Index,2) = 1
{
Send, a
}
else
{
Send, b
}
Sleep, 10
}
}
つづき Whileの場合 While GetKeyState("Numpad0") { If Mod(A_Index,2) = 1 { Send, a } else { Send, b } Sleep, 10 } Whileの場合のほうが、"テンキーの0が押されている間ループする" って理解しやすいよね。
さらにつづき 書き忘れちゃったけど、Whileは抜けるための条件を式を使って書ける、 ってのがLoopと違うとこ。 で次は#if expressionね。これも式を指定できるんだけど、 ホットキーの動作をウィンドウごとに切り替えるための#IfWinActive〜と 同じようなもの。これも式を指定できるようになってる。 例としてフルスクリーン時にホットキーを動作させない設定を。 これは実際に俺も使ってる。 #if !CheckActiveWindowFullScreen() a::b 等のホットキー定義、複数記述可能 #if 今まで1つ1つのホットキー定義にIf入れてたから、スクリプトがスッキリしたよ。 長くなってすまん。
あーもう、急いで書き込むと色々破綻してるな。
>>957 自己レスだけどこれじゃループ抜けないじゃん…
以下修正
Loop
{
If GetKeyState("Numpad0")
{
〜中略〜
}
else
{
Break
}
}
まぁこんな感じにできるってことで、適当に脳内補完してくれ。
なるほど、丁寧な解説ありがとう。 コードがスッキリするとデバッグもしやすくなるし、やる気も出るよね。 そんな俺のコードはifとloopとbreakばっかりだわ
unicode版は常駐量が増えるとかでマルチバイト圏外の人には疎まれそうだが whileはぜひとも本家の方にもマージしてほしい機能だな
キーボードでIEやJaneをほんの少しスクロールさせたいのですがAHKでできるでしょうか? 少しというのはスクロールバーをドラッグしてちょこっと動かす程度です。
カーソルキーのDownをエミュレートすればいい
>>964 カーソルキーのDownだとスクロール量が多すぎるんです。
スクロールバーをドラッグして数ドット動かすくらいと言うか。
最小単位でスクロールさせたいんです。
SendMessage WM_VSCROLL
>>966 ググったんですが、DownやPageDownと同じではないでしょうか?
説明がめんどくせー はやらせるページのホイール関係のところの互換スクロールあたりを読むと良い。
969 :
名無しさん@お腹いっぱい。 :2008/08/15(金) 01:49:59 ID:QuXAVy5j0
ThinkPadのTrackPointの真ん中ボタンによるスクロールは対応できませんか? どうもフックで検出するツールだと拾えないみたいです。 TrackPointのドライバは仕様が変わっていて、 Foreground Windowにスクロールバーが存在すると その窓にWM_V/HSCROLLメッセージが行く様です。
970 :
名無しさん@お腹いっぱい。 :2008/08/15(金) 02:00:56 ID:QuXAVy5j0
そして、真ん中ボタンを押したまま、乳首の傾きの強弱をつけると WM_VSCROLL SB_LINEUP 軽く↑ SB_LINEDOWN 軽く↓ SB_PAGEUP 強く↑ SB_PAGEDOWN 強く↓ WM_HSCROLL SB_LINEUP 軽く← SB_LINEDOWN 軽く→ SB_PAGEUP 強く← SB_PAGEDOWN (強く→ のイベントが発生します。(デフォルトの動作らしいです)
>>968 すみません。
どこに互換スクロールのついて書かれているページがあるんでしょうか?
流行らせるページで探したんですが見つかりませんでした。
Down → カーソルの移動(カーソルが最終行付近にいないとスクロールしない)
PageDown → 1ページだか半ページだかの単位でスクロール
WM_MOUSEWHELL、WM_VSCROLL → 2、3行ごとにスクロール
これより細かくスクロールさせる方法はシラネ
>>969 自分も前に試してみたけどよくわからなかった。
OnMessage()では外部のメッセージまでは拾えないみたいだし
DllCall()とかでゴニョゴニョすれば何とかなるのかも知れない。
流行らせるページ管理人氏が ThumbRemapでマウスドライバ弄ってるね
ドライバのライブラリさえあればAHKでもかなりの改造ができるみたいだな。
Aを押したらアクティブウィンドウを最小化、 Shift+Aを押したら直前に最小化したウィンドウを元の大きさに戻す。 というのはどうしたらいいでしょうか? 普通のウィンドウならできるんですが、 最小化時にタスクトレイに入るソフトだと分かりません。
最小化する前にウィンドウサイズを記憶しておいて Restoreで戻らないならその数値からWinMoveする
このツールって何するものなの? 説明読んでもよくわからにゃいよ
>>975 そうだなぁ、ツールとして考えるよりもパーツとか材料の寄せ集めとして考えると分かりやすいかもしれないな
何をする為の道具かではなく、用意された部品や材料を使って何を作りたいかってことだな
このソフトおもしろい プログラミング全然知らなくてもリファレンス通りやれば様になるね Guiで摂氏と華氏を変換するプログラム作ってみた うまくできた 自信がついた
まだThumbRemapの不具合は直ってない? タッチパッドから指を離してても ずっとタッチパッド押されたままと認識する状態が時々ある。
スクリプトにほころびがなくても 他に重い処理を裏でやってたりすると 押しっぱなしになるとかはよくあるよ
Ctrlと数値でブラウザー等を指定の場所並び大きさで 移動させているのですが、此れを各ソフトのパスで 起動時に適応したいのですが、可能なようでしたら 記載方法を教えて頂け無いでしょうか宜しくお願いします。 #NoTrayIcon ^1::WinMove, A, , 40, 100, 1200, 900 ^2::WinMove, A, , 0, 90, 1280, 934 ^3::WinMove, A, , 0, 58, 1280, 966 ^4::ExitApp #Include Opera MouseGesture.ahk
日本語、日本語
今はソフトを起動してから各キーでウィンドウサイズなどを変えているが、これを ソフトの置いてあるフォルダで判別して、ソフト起動時に自動的にウィンドウサイズを変えたい ってことじゃない?
>>982 説明が下手で申し訳御座いません。
>>983 全くその通りです。現状の設定も残しつつ追加記載したいのですが
どうぞ宜しくお願いします。
^1:: Run,"***.exe" ;ソフト起動する Sleep,500 ;ちょっと待つ WinMove, A, , 40, 100, 1200, 900 ;サイズ等変える キーでソフト起動しつつサイズ変える、って方法でいいなら 簡単にだけどこんな感じ? これでダメなら待ち方変えたりWinMoveでソフト指定したり。 ソフトは別の方法で起動して、 ソフトが起動されるのを監視してサイズ変える、 となると全然違う感じになるかな。 そういうのはわからないや。
>>984 起動を監視して調整するより、次のようにしてみたらどうかな?
起動時に何かしたいときはいつもこんな感じでやってるよ。
1 スクリプト書いたAHKファイルを作る
2 そのアプリのフォルダにブAHKファイルを入れとく
3 AHKのショートカットをデスクトップにでも置く
例
Run,Jane2ch.exe
WinWaitActive,Jane Doe Style
WinMove, A, , 0, 58, 1280, 966
Return
あら。。書いてたらかぶっちゃった。失礼いたしました。
988 :
名無しさん@お腹いっぱい。 :2008/08/18(月) 22:40:12 ID:F50J/3C90
Runで起動後にSleepで無く起動完了を検地は出来ないのでしょうか
通常は問題無くても不安定なソフト、(Firefox 3)等が問題に
なりそうです。やはり
>>986 氏の方法が安全かもです。
検地したいなら秀吉に頼んでみたら?
>>988 WinWait又はWinWaitActive
埋めた方が良くね?
産め
そうだな、埋め
埋め
梅
埋め
埋め
埋め
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。