|l |l l |l | |i
|i l |i l| li |
∩
_,,..,,n,r'゙ <⌒つ
./ ゚ 3 ヽ )´
) l ゚ ll ∩ ノ そ
Σ `'ー---‐'' (
⌒ヽ/V⌒v、/⌒ ビダァァァン!!!!
<わからない9大理由>
1.読まない …参考書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
★教えて君五大要素★
1 読まない (文盲)
2 調べない (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない (馬鹿)
5 人を利用することしか頭にない (死ね)
以下FAQ等
■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」で保存する。(AHKLの場合)
Q2:初めて使うけどどれを使えばいいの?
A2:AHKLのユニコード版を推奨。
旧流行らせるページの配布物をそのまま使う場合は本家をそのまま利用する事。
64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。
■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)]や[ひらがな]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理なので、
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。(
ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
^1::Send, {Esc}
Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
sc07B & I::Send, {Blind}{Up}
sc07B & K::Send, {Blind}{Down}
sc07B & J::Send, {Blind}{Left}
sc07B & L::Send, {Blind}{Right}
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
#UseHookで全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
× Joy1::Esc
○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
○AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
例) ^W::Send, {w 30}
これを回避するためには、以下の方法をとればよい:
・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
○AHK以外が原因の場合:
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:
http://www6.atwiki.jp/eamat/pub/MyScript/ の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q3:GUI作るのめんどくせ〜〜
A3:公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q4:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
※ AutoHotkey_H(AutoHotkey.dll)を利用すると真のマルチスレッドが利用可。
AAはともかくn大理由は必要悪か・・・
そろそろ「まとめwiki」が必要だな
>>1 乙乙。これなら無印と L の違いが上手く判断できると思います。
非常に乙
わかりやすいテンプレだね
スキップリストが実装できないorz
前スレ894
どうもありがとうございます
メッセージの中身はURLだけのようだったので
教えていただいたコードを参考にしスレタイトルもとれるようにかいているのですが
missing { やThe leftmustといったエラーが出てしまいます
req.Open("HEAD", "
http://" $host "/" $board "/subject.txt")
req.Send()
If ("OK" = req.StatusText) {
Loop, Parse,ThreadName,req.ResponseText,`n,{
IfInString,ThreadName,$dat,{
Pattern = m)(?P<DatNum>\d{9,10}\.dat)<>(?P<Title>.*?)\s\((?P<res>\d{0,4})\)
RegExMatch(ThreadName,Pattern,$)
TitleName:= $Title
}
}
MsgBox, % "タイトル: " . $Title
}Else{
MsgBox, % "Error: " req.StatusText
}
前スレのコート下から3行目2行目の間に上記のコードを書き込み
1行のelseも{}でくくりました。
どうしたらいいでしょうか
>>15 HEADだと更新日時とかファイルサイズ等を取得するヘッダのみを取得なので、
本体を取得するGETを使う。
本体は res.ResponseText で取得でき・・・ないorz
出来ないっつーか、ANSIを無理栗取得するから化けるので変換してやらんといけなくなるな。
スゲー面倒だw
該当部分のみ書くんで適当に貼り付けて使うよろし。
※ DAT落ちして subject.txt に乗ってない時は空になる。
req.Open("GET", "
http://" $host "/" $board "/subject.txt")
req.Send()
b:= req.ResponseBody
VarSetCapacity( buff, 1024 ), idx := 0
Loop, % b.MaxIndex() + 1 {
If ( (v := b[A_Index-1]) == 0x0A ) {
NumPut(0, buff, idx, "UChar")
If RegExMatch(StrGet(&buff, "CP932"), $dat ".dat<>(?P<name>.+)\((?P<res>\d+)\)", $)
Break
idx := 0
} else {
NumPut(b[A_Index-1], buff, idx, "UChar")
idx++
}
}
VarSetCapacity(buff, 0), b:=
MsgBox, % "スレタイ`t" $name "`nレス数`t" $res
AHKL用MouseGesture.ahk、64bitOS対応版うp頼む
(・∀・)フクショク!!
>>16 ありがとうございます。
前スレのとあわせてうまくできました。
Last-ModifiedはGMTで取得されますが
DATEオブジェクトのtolocalestringが使えればJSTに変換できると思い
ComObjCreateでDATEオブジェクトを作れるCOMを探したのですが見つかりませんでした。
Last-Modifiedをまとまりごとに分割してIFで細々と変えていくしかないのでしょうか?
>>17 文字コード変えて、2バイト文字のエスケープを取り除いて、DllCallの所直せばおk。
でもDllCallの直し方がいまいちよくわからない。
とりあえず末尾がAになってるやつは取り除く、ってことはわかったが
ポインタとかデータ長とかは全然わからん。
誰かまとめてくれ。
面倒だけど、関数名をMSDNで引数や戻り値の型を調べるだけだよ
アップローダを用意してくれた訳だから、そこに対応版をうpしてくれると有り難い
>>22 つまり、DllCallの種類ごとに調べないと駄目って事か。一括で置換出来たりしたらいいと思ったんだが。
32bitと64bitで変わってくるのかもよくわからん。
とりあえず自分の手元にあるMouseGesture.ahkはターゲットの実行ファイルのパスが取れない。
stdio.ahkとかも動かない。
流行らせるページの作者が作ったスクリプトが動かなくて移行出来ないって人、結構居るんじゃないかな。
なんでこんなにクレクレが増えたんだろ
ユニコードに対応したし、窓使いの憂鬱やマウ筋などからの移行とかで新規ユーザーが増えてるんでは。
でも、ちょっと高度なことやろうとすると奇っ怪な言語仕様も相まって詰まる人が多いと思う。
PerlとかならCPANとかあるけどAutoHotKeyは基本自分でやれってなるからね。
質問スレと分けるほどの勢いも無いし、気にするほどでは無いだろ。
autohotkeyならCPANのようなものを作れそう
バックグランド(非表示)にこだわらないなら、子プロセスの標準出力を得るのは以下のようにすりゃいい
exec := ComObjCreate("WScript.Shell").Exec("ipconfig /all")
While !exec.Status
Sleep, 100
MsgBox, % RegExReplace(exec.StdOut.ReadAll(), "\r")
>>24 >実行ファイルのパスが取れない
MouseGesture.ahkの490行あたりのMG_CommandLineかな~
こんな感じ? 知らんけど
MG_CommandLine(pid=0){
global MG_PID
static ptr:=0
if(!pid){
pid:=MG_PID
}
if(!ptr){
ptr:=(NumGet(DllCall("kernel32.dll\GetProcAddress","Ptr",DllCall("kernel32.dll\GetModuleHandle","Str","Kernel32"),"Str","GetCommandLine","Ptr")+1))
}
hp:=DllCall("kernel32.dll\OpenProcess",UInt,0x001F0FFF,UInt,0,UInt,pid,Ptr)
VarSetCapacity(res,1024)
DllCall("kernel32.dll\ReadProcessMemory","Ptr",hp,"Ptr",ptr,"UIntP",addr,"Ptr",8,"Ptr",0)
DllCall("kernel32.dll\ReadProcessMemory","Ptr",hp,"Ptr",addr,"Str",res,"Ptr",1024,"Ptr",0)
DllCall("psapi\CloseProcess","Ptr",hp)
return res
}
関数の引数や戻り値の型はチマチマ調べなきゃいけないのは確か。
あと WPARAM, LPARAM は UPTr かな。
構造体はライブラリの Struct() 使うと楽。
http://www.autohotkey.com/forum/topic59581.html stPoint := Struct("POINT")
DllCall("GetCursorPos", "Ptr", stPoint[]) ; 構造体のポインタは無名キーを指定
MsgBox, % stPoint.x A_Tab stPoint.y
sizeOf したいなら MsgBox, % Struct(stPoint)
登録済みの構造体はそれほど多くないので、使いたい構造体がないときは登録が必要。
でもか、なり簡単。
例えポインタや入れ子構造体を含む構造体として以下を使う場合、
http://msdn.microsoft.com/en-us/library/bb761393%28v=VS.85%29.aspx Struct("").IMAGEINFO := "
(Comment
HBITMAP hbmImage; l このように typedef の内側を丸々貼ればいい
HBITMAP hbmMask;
int Unused1;
int Unused2;
RECT rcImage;
)"
stImageInfo:= Struct("IMAGEINFO")
stImageInfo.rcImage.top := 100 ; 入れ子のアクセスも余裕
MsgBox, % stImageInfo.rcImage.top
これから先は人に見せるスクリプトを作るときは
初回起動時にOSとかAHKのバージョンを確認してiniにでも書き込んで
で、それを元に動作を分岐するようにでもした方がいいのかな?
動作確認等がすごい面倒そうだけどorz
スクリプトなのにアーキテクチャに依存するとかワロス
外部DLLを決め撃ちで呼ぶ機能だし仕方ないさ。
うまいことオブラートにくるめるといいんだけど。
ホットキーが有効だと、guiの (&a のようなものが動かなくなるので、
gui とホットキーの処理を分離したいです。
そこで、両者を分離させようと思いました。
どうやって分離させようか考えたところ、
前スレ754-755にありました、autohotkey_l のスクリプト間で情報をやりとりするのが使えそうだと気づきました。
(sender.ahk と receiver.ahkのやつです)
ですが、それらは一方向の情報しかやりとりできません。
A.ahk -> B.ahk
これを双方で送受信、つまり
A.ahk -> B.ahk も
A.ahk <- B.ahk もできるようにするには、どうすればいいでしょうか?
>>36 面倒なことしなくても、
#IfWinNotActive, GUIのタイトル ahk_class AutoHotkeyGUI
とか
Gui, +LastFound
GroupAdd, MyGui, % "ahk_id " WinExist()
#IfWinNOtActive, ahk_group MyGui
とやって、グローバルなホットキーを自GUIがアクティブでない場合に置き換えちまえばいいかと。
スクリプト終了時に、特定のアプリケーションを同時に終了させるにはどうすれば良いのでしょうか?
OnExitを使うのはわかるのですが、アプリケーションを終了させる方法がわからなくて困っています。
Send, !{F4}
WinClose
Process, Close
40 :
38:2011/02/04(金) 09:29:55 ID:dvswQKUi0
>>39 色々試してみたのですが、どうもうまくいきません。
具体的には、foobar2000を終了させたいのですが、
SetTitleMatchMode, 2
OnExit, Owari
return
Owari:
WinClose, foobar2000
ExitApp
としてみたのですが、ダメでした。
稚拙な質問で申し訳ないです。
残念だったねぇ
>>40 "owari"って関数をDetectHiddenWindowsでかこってみ?
マウ筋の「ホイールでマウス直下にフォーカスして前面にもってきてスクロール」って機能は実現できませんかね?
WhellRedirectは「スクロールするけど前面に来ないしフォーカスも奪わない」なんで
44 :
38:2011/02/04(金) 16:01:08 ID:dvswQKUi0
自己解決しました。
記述する位置が悪かっただけでした。
スレ汚しすみませんでした。
Autoexecセクションに OnExit を記述してないってところか。よくある事だw
位置を気にせずに終了処理を書きたいならこんな感じで出来る。
MsgBox, ここまでAutoExec
ExitApp
OnExitFunc() {
static $:=Object("base", Object("__Delete", "OnExitFunc")) ; この行がおまじない
MsgBox, おわり
}
やったwww
3キーコンビネーションでけたww俺偉いwww
Ctrl+F1でA、Ctrl+F1+1でB、F1+1でCってなったwww
違った・・・・・・。
Ctrl+1でA、Ctrl+F1+1でB、F1+1でCだった・・・。
スレ汚しすみませんでした。
草生やしまくってごめんなさい(´;ω;`)
foobarの人、もう解決してるみたいだけど
コマンドラインから /exit で終了させる手もあるでよ
>>37 その手がありましたか。ありがとうございます。
MediaPlayerClassicの右下に表示される再生時間を取得しようといろいろ試してみました。
Process, Exist, mplayerc.exe
If ErrorLevel<>0
WinActivate, ahk_pid %ErrorLevel%
ControlGetText, text, ahk_class Static2
MsgBox, The text is:`n%text%
ahk_class Static2の部分をプロセスエディタで調べたハンドルahk_id 0x003802BAに変えても出来ないようです。
正しい方法を教えていただけないでしょうか。
ControlGetText, text, ahk_class Static2
↓
ControlGetText, text, Static2, ahk_pid %ErrorLevel%
こうすればたぶんおk
誤爆した。
>>47 ちょっと待て。
それ3キーできてるんじゃないの?
キー連打系のおすすめ設定教えてくれ。
無変換キー2連打とかいろいろ使い道あると思うんだが。。
XButton1とLButton同時押しをMButtonとRButtonの同時押しに割り当てるにはどうしたらいいの
なんか右クリメニューが出てくる
そんな羞恥プレイは勘弁して
>>56みたいな文章書いてる時点で十分恥ずかしいのになw
そりゃ比較級の話しさ
エスパー頼みか人にすべてやらそうとしてるクズか
メニューを出すキーの Alt や Win はDown時じゃなくてUp時にメニューが出る。これはRButtonでも同じ。
で、キーを送るのに、
Send, {LWin}
とすると {LWin Down}{LWin Up} と解釈されてスタートメニューが出るけど、
Send, {LWin Down}^{LWin Up}
のようにキーUp時に Ctrl キー等を併用するとメニューを出さなくすることが出来る。
これはOSの機能で、Sendでやらないで手動でやっても同じ。(#MenuMaskKey のページ参照)
一方、RButtonは何らかのキーやボタンを同時に押せばメニューをキャンセル出来るという機能がない。
物理的なボタン押下の直後に {RButton Down} を発行してしまったらメニューは必ず出るので、
(押す|押さない)の判断を他のボタンが押されたかどうかまで遅延しなければならなくなる。
これは物理的なDown〜Upの間に同時押しがあったら RButton の発行をしないというようにすればいい。
しかし、これでも問題があって物理的なボタンUp時に RButton の発行が遅延されてしまうので、
エクスプローラ等でよく使う右ボタンドラッグが全く出来なくなる。
もっとも全くキャンセル出来ないわけではない。
ソフトによるが「ボタンDownがあったウィンドウの外でUpをする」ことでキャンセルできる場合もある。
しかしウィンドウが外でUpしてもメニューが出るものも依然として多い。
従ってコンビネーションで使う場合でメニューを完全に出さなくする汎用的な方法はなく、
対象別の処理分岐を行ったり、何らかの割り切りをしたりする必要がある。
以下は、マウスジェスチャツールでよく見るタイムアウトを利用した割とお手軽な「割り切り」の例。
単純右クリックは問題ないが、ドラッグやマウスジェスチャはタイムアウトまで待つ必要がある。
#If
RButton::
fRB:=True
BlockInput, MouseMove
KeyWait, RButton, T0.5 ; タイムアウト(秒)
BlockInput, MouseMoveOff
If (fRB) && !(fRB:=False) {
Send, {RButton Down}
KeyWait, RButton
Send, {RButton Up}
}
Return
#If (fRB) && !(fRB:=False) ; この式が評価されるのは該当ホットキーが押されたときのみ
LButton::MsgBox, R + L
MButton::MsgBox, R + M
起動時に1度だけ処理を行うのはどう書けばいいでしょうか?
tempファイルにフラグ立てて常時監視だとあんまり綺麗じゃないし。。
>>64 Auto-Execセクションに書けばいいんでないの?
あと、SetTimerで負の値指定すれば指定時間後に一度だけ実行するって意味になる。
AutoHotkeyの起動に関わらずOSの起動時ってんなら、
スタートアップに入れといて独立に実行させるのが簡単。
>>65 SetTimerとは盲点でした。マイナス値指定でこんな制御できるんですね。
やりたかった事がこの機能なんでドンピシャでした。サンキューです!
67 :
38:2011/02/09(水) 03:11:03 ID:5H8QE6c20
解決できませんでしたorz
AutoHotkey.exeでスクリプトを動かすと、正常に動作するのですが、
コンパイルして使用すると、全く機能が働きません。
以下にソース貼りますので、どなたか添削お願いいたします。
SetTitleMatchMode, 2
DetectHiddenWindows, On
Run, C:\Program Files\foobar2000\foobar2000.exe
OnExit, Owari
return
Owari:
IfWinExist, foobar2000
WinClose, foobar2000
ExitApp
#z::Run, C:\Program Files\foobar2000\foobar2000.exe /prev
#x::Run, C:\Program Files\foobar2000\foobar2000.exe /next
#Space::Run, C:\Program Files\foobar2000\foobar2000.exe /pause
セキュリティソフトの設定とかじゃないの?
69 :
38:2011/02/09(水) 03:26:51 ID:5H8QE6c20
>>68 NOD32で除外に入れてみましたが(コンパイルしたEXEを)、ダメでしたorz
#zやなんやらのホットキーは正常動作してんの?
なら >48にもあるけど
Run, C:\Program Files\foobar2000\foobar2000.exe /exit
を試してみてはどうか
71 :
38:2011/02/09(水) 09:38:19 ID:5H8QE6c20
>>70 ホットキーは正常動作しています。
SetTitleMatchMode, 2
DetectHiddenWindows, On
Run, C:\Program Files\foobar2000\foobar2000.exe
OnExit, Owari
return
Owari:
IfWinExist, foobar2000
Run, C:\Program Files\foobar2000\foobar2000.exe /exit
ExitApp
#z::Run, C:\Program Files\foobar2000\foobar2000.exe /prev
#x::Run, C:\Program Files\foobar2000\foobar2000.exe /next
#Space::Run, C:\Program Files\foobar2000\foobar2000.exe /pause
としてみたら、今のところ正常に動いているようです。
ダメそうならまた相談しに来ます。
ありがとうございました。
foobarとやらを起動した状態で、WinClose 単体で閉じられるかどうかはテストしたのかな?
問題の切り分けは、最小の単位で動くかどうからやったほうがいいよ
まぁ組む時もおなじだけど
コンパイルした時だけ動かなかったみたいだからな
コンパイル時の動作って何が違うんだろうか?
コンパイルしたスクリプトの名前がfoobar2000_Lunch.exeとかで
タイトルマッチでスクリプト自身が一致して本命には処理が回らない
あぁ、なるほどそれありそうだな
自分用のスクリプトでコンパイルする必要ってあるの?
>>76 基本必要ないと思う。
でも、たとえば、もうメンテの必要性のないスクリプトであれば
コンパイルしてしまえば、AHKのバージョン気にしないですむというメリットはあるかも
古いツールですが、DVDリップツールのDVD Decrypterで、
http://beans.seartipy.com/wp-content/uploads/2007/03/decrypter.jpg AHKをつかって、Information欄のRead rate等をテキストデータとして抜き取って
監視&統計を取りたいのですが、この左側のInformationのテキストを抜き出せません。
稼働中に WinGetText, text,A をしたところ、
>Progress
>Information
>Destination
>Destination
>Source
>[0:0:0] HL-DT-ST DVD-ROM GDRH20N (O:)
>Settings
>MAX
>Destination
>Source
>[0:0:0] HL-DT-ST DVD-ROM GDRH20N (O:)
>Extracting Sectors...
という感じで、データは含まれていませんでした。
ステータスバーはStatusBarGetTextで取得できましたが、表示されてるとおりの
データのみが取得でき、目的のデータはありませんでした。
なんとかAHKで取り出す方法はないでしょうか。
ControlGetText でいけそうに見えなくも無い
>>76 ahkプロセスをタスクマネージャから消したいときに
複数あってもコンパイルしてあれば名前で分かる
メインの常駐のだけはexe化してある
80 :
名無しさん@お腹いっぱい。:2011/02/13(日) 09:00:16 ID:gXAaP4jT0
ウインドウを移動させる方法ですが
起点を左下、右上、右下にする方法教えてください(´・ω・`)
起点ってなんぞや?
画面の端にくっつけたいのなら、画面全体の縦横サイズを表す組み込み変数があるんで、
そいつを使って計算すりゃいい。
82 :
80:2011/02/13(日) 10:19:54 ID:4uNgI/Xl0
すいませんちょっと間違ってました。
「ウインドウを下へ10ドット、右へ10ドット移動しなさい」
とした場合
ウインドウの左上角が、画面左上端から下へ10ドット、右へ10ドットの位置へ来ますが
これを
ウインドウの右下角が、画面左上端から下へ10ドット、右へ10ドットの位置へ来るようにしたいです。
また分かりにくかったらすいません(´・ω・`)
どっちにしろ画面サイズからウィンドウサイズ引けばいいだけかと。
紙に図を書けば小学生でも分かるっしょ。
ただし、右下角はタスクバーやサイドバーなどがあるとウィンドウの領域が変わるんで、
SysGet, Monitor, MonitorWorkArea, 1
でウィンドウ描画領域として使える領域の左上(MonitorLeft , MonitorTop) と右下(MonitorRight , MonitorBottom)を得てから
計算してやる必要がある。
84 :
80:2011/02/13(日) 11:44:25 ID:4uNgI/Xl0
>>83 どもです。
がんばってみます( ^ω^)
ドットという言葉には加齢臭を感じる
(´・ω:;.:...:
どっどどんまい!
前スレを参考に2つのスクリプト間で通信をしたいのですが、
;常駐側
WM_USER_XBUTTONREQ := DllCall( "RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt" )
OnMessage( WM_USER_XBUTTONREQ, "RsvMessage" )
return
RsvMessage( wp, lp, msg, hWnd ){
global WM_USER_XBUTTONREQ
If( msg == WM_USER_XBUTTONREQ )
{
Tooltip, Received
Sleep, 100
ToolTip
}
}
;呼出側
ButtonRequest:
DetectHiddenWindows, On
SendMessage, DllCall("RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt"),,,, ahk_id 0xFFFF
DetectHiddenWindows, Off
Msgbox, % ErrorLevel
Return
SendMessageはErrorLevelに戻り値が入るとあるのですが、
常駐側ってどうすれば呼出側に値を返せるのですか?
メッセージハンドラ関数 -- ↑の場合だと RsvMessage -- で Return するだけ。
>>89 ありがとうございます
例えば、試しにこの様にすると
RsvMessage( wp, lp, msg, hWnd ){
global WM_USER_XBUTTONREQ
If( msg == WM_USER_XBUTTONREQ )
{
Tooltip, Received
Sleep, 100
ToolTip
}
Return 100
}
呼出側でMsgbox, % ErrorLevelしても、0しか返されないのです、
常駐側からは状況に応じて任意の値を返したいのですが…
これって何が間違っているのでしょうか?
おっと、ブロードキャストしてんのか。それじゃ無理。
SendMessageって相手の応答待ちなのにブロードキャストしたら誰からの応答を戻り値にすりゃいいか分かんないじゃん。
面倒でも対以下のように象ウィンドウを決め撃ちしないと。
受信側スクリプトパス ahk_class AutoHotkey
うひゃ、編集ミスw
>>91 ありがとうございます、やっとできましたっ
そういうことだったのかー、勉強になりました
┌──────────┐
| |
| どかーん!. |
| (⌒⌒⌒). |
| ||, |
| ||. |
| / ̄ ̄ ̄ ̄ ̄\.. |
| | ・ U |. |
| | |ι |つ |
| U||  ̄ ̄ || |
|  ̄  ̄ . |
└──────────┘
象ウィンドウ
FileMoveDirコマンドでフォルダを移動させてから
そのフォルダに対して処理を行いたいのですが
移動が完了したかを判定する方法はあるでしょうか
(ErrorLevelで移動の完了を判定してくれるでしょうか?)
過去スレにもあったけどWin7でAeroを有効にするとPixelGetColorが檄遅になるなあ
何気に不便だこれは
ええい!GPGPUへの対応はまだか!
Pauseキーにホットキー割り当てると、それ以降ずっとコントロールが
押しっぱなしの状態になるんだけど、これは修正できないのでしょうか?
^Pause::
ControlSend, SysTreeView321, {space}, ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1},
return
って感じでfoobarの一時停止を割り当てたんですけど、
ふつうのラップトップのキーボードなんすけど。
Capslockキーと同じような感じのエラーなのかな。
>>99 フックつかっておりません。
ありがとうございます。テンプレにあるんですね。
>>98の事例は半ば諦めてほかのキーバインドにしたのですが
そもそもPauseの挙動がおかしいです。
Pauseをモディファイアにしたコンビネーションがまったく動かない。
Pause & J:: うんちゃら
ってやっても、動かないです。
テンプレもう一度読んでみます。#InstallKeybdHookなんかiniスクリプト全般に
適用されるようで気後れしてしまう
フック使うと確かに遅くなるけど、それを体幹でkるひとなんて居ないと思う。
正規表現でこれが引っかからないんですがLじゃないと無理でしょうか?
Pos := RegExMatch("タ", "タ", $)
MsgBox, %Pos% %$%
ANSIだと「タ 0x83x5e」 は2バイト目が 0x5e(^)になる
104 :
95:2011/02/16(水) 22:03:16 ID:SpieOa44P
質問の仕方がまずかったでしょうか
FileMoveDir〜
Run〜
で一応動いてるっぽいんですが、ファイルサイズが大きい場合に
移動中に処理が開始されたりすると怖くて使えないので
どなたかわかる方いましたらおながいします
>>104 俺はコマンドラインを呼び出してrunwaitでやってる。
嫌でも待たされるから安心できる。
オペレーションが完了するまで次のコマンドの処理には入らないよ
本家やLのANSI番で正規表現をまっとうに使いたいなら、
対象文字列やパターンをUTF-8に置換してやればいい
Unicode版でも内部でそうしてるらしいし。
もっとも、マッチ位置や(サブ)マッチ 文字列はANSIに戻してやんないといけないけど。
まぁ、流行らせるページのBREGEXP使えばいいんだけど。
(鬼車エンジンのbregonig.dllもつかえる)
でも、やっぱりLのUnicode 版で使う方が圧倒的に楽だよ。
!S::Win〜
のSを「:」に変えたいんですが「`:」にしてもErorrになってしまいます
「:」はGoogle検索の対象から外れているので検索してもわかりませんでした
よろしくお願いします。
>>110 仮想キーコードだったんすか!
「`;」は認識したのですっかり抜け落ちてました
ありがとうございました。
これのオブジェクト指向のサンプルがいくつか書いてある日本語サイトありまっか?
なんだって?
組み込みのObjならwiki
デザインパターンの方なら無い
WinMenuSelectItem
↑このコマンドが成功するアプリって存在するの?
メモ帳ですら受け付けんが。
XP32 AHK1.0.48.05
っ ファイル(&F)
>>116 ファイル(&F)やら1&やら引数は変えてみたが、どんなアプリでも全く動かんよ
せめてどう記述して動かんのかぐらい貼って聞けよ
>>118 例えばメモ帳に対してなら
WinMenuSelectItem,ahk_class Notepad,,1&,2&
WinMenuSelectItemがどんなアプリでもちゃんと使えたら、だらだらSendなんて書かなくて済むのにね
>>119 ウチは無問題だなぁ @XP SP3
>>120 メニューバーに見えるところで ClassNN とれるなら標準メニューじゃないしわけで、
そうなるとコンポーネント毎に作りが違うからもうお手上げでしょ。
>>121 無問題ですか、いいなぁ〜
うちもXP SP3なんだけど、動いた試しがないw
123 :
名無しさん@お腹いっぱい。:2011/02/19(土) 15:16:45 ID:zzXxeGu+0
「マウスの右ボタン押しながら左ボタンでコピー」したいんだが
RButton & LButton::^c
とすると通常時に右ボタンが効かなくなるし
~RButton & LButton::^c
とするとコピーの後に右ボタンが押されたことになるんだが
なんかいい方法ない?
ちなみにこれは流行らせるページのHotkeysを参考にしてる
http://ahk.xrea.jp/Hotkeys.html
>>123 RButton & LButton::Send,^c
RButton::Send,{RButton}
これだと右ドラッグができないけど
125 :
名無しさん@お腹いっぱい。:2011/02/19(土) 16:42:27 ID:zzXxeGu+0
>>124 レスthx
その方法は俺も試したんだがドラッグできないのは痛い
右ドラッグだけなら被害はfirefoxぐらいだけなんだろうけど
最終的には
「マウスの右ボタン押しながら左ボタンでコピー」
「マウスの右ボタン押しながら中ボタンでカット」
「マウスの左ボタン押しながら右ボタンでペースト」
としようと思ってるからね
右ドラッグ(選択)ができなくなってしまうw
なんかいい方法ないかな〜…
>>125 どの道マウスを使うのなら、いっそのことジェスチャーに割り当ててしまえば?
127 :
名無しさん@お腹いっぱい。:2011/02/19(土) 17:31:12 ID:zzXxeGu+0
>>126 レスthx
流行らせるページ管理人のマウスジェスチャーのことだと思うけど
ここに割り当てるとFirefoxでは無効になってしまうんだ
何故かというと、FirefoxではFireGesturesというアドオンを使っているため
ahkジェスチャーは無効にしてるんだよね
だから、より一般的に利用するためにコンビネーションキーで実現したいんだわ
>>127 難しいとこだねw
でも、コピペは色々なアプリで使うから、思い切ってFireGesturesを外しては?
それはFirefoxでしか機能しないマウスジェスチャーでしょ
MouseGesture.ahkでもいいし、他のジェスチャーソフトでもいいけど、ジェスチャーは専用ソフトに1本化した方が楽じゃね?
俺の使ってるブラウザもファイラもジェスチャー機能がついてるけど使ってないw
129 :
名無しさん@お腹いっぱい。:2011/02/19(土) 18:02:37 ID:zzXxeGu+0
>>128 難しいとこなんだわw
FireGesturesを外すのは勇気がいるなぁ〜めちゃくちゃ便利だからなぁ〜
ジェスチャーを専用ソフトに一本化したほうがいいという意見はごもっともなんだが
ブラウザ付属のジェスチャーとかファイラ付属のジェスチャーにしかできないことってあるでしょ?
例えばFireGesturesだと
→↓:選択範囲をGoogle検索
→↓→:選択範囲を検索エンジンを選んで検索(ポップアップが出てくる)
っていう感じに俺は割り当てていて
これをahkジェスチャーで実現するのは無理だから
やはりFireGesturesは外せないw
>>129 実は俺はFirefox使いでもないしahk使いでもないwから、参考にならんかもしれんが…
その実現したい機能がホットキーで割り当てられるのなら、マウスジェスチャーで実現できると思う。
俺が使ってるジェスチャーソフトは、StrokeItってやつなんだが、
例えば、IEで調べたいキーワードをGoogle検索したい場合、そのキーワードをD&Dで選択して
Ctrl+C → Ctrl+T → Ctrl+E → Ctrl+V → Enterって流れになる
これを、StrokeItので実現しようとすると、「キーストロークを送る」ってコマンドで
[Ctrl_Down]C[Ctrl_Up][Ctrl_Down]T[Ctrl_Up][Ctrl_Down]E[Ctrl_Up][Ctrl_Down]V[Ctrl_Up][Enter]
って記述すればOK
Chomeだったら、3番目のCtrl+EがCtrl+Kに変わるだけ
想像だが、「検索エンジンを選んで検索」ってのも、Altや方向キーでキーボードだけで追えるんでしょ?
組み合わせて、キーボードだけで実現できることなら、StrokeItに割り当てられるよ
>これをahkジェスチャーで実現するのは無理だから
FireGesturesのソースのbrowser.jsで760行目辺りにある
case "FireGestures:WebSearchPopup"
以降の処理をuserchrome.jsを利用して自前で関数に登録
Griever氏のKeyChanger.uc.jsやalice0775氏mainKeyset_overlay.xul
等を利用して関数にキーボードショートカットを割り当てる
単語が選択された状態からMouseGesture.ahkのアクションで
先程割り当てたショートカットを送る
これで出来る気がするけど…
コンテキストメニューが出ていいなら、ジェスチャ認識後のアクションに
Send, {AppsKey}s
とか
Send, {AppsKey}{Down 2}{Enter}
とかで代用できそうだけどな。
>>132 129で言ってるのは、FireGesturesが自前で実装してるポップアップだと思うから
FireGestures自身がその機能を自分で呼び出すか、
>>131の様に自前で同等の処理を準備してやるかしないとダメじゃない?
AppsKeyをsendしても標準のコンテクストメニューしか利用できないと思う
挙げられた例を見ると通常のコンテキストメニューでもある項目だったんでな
135 :
名無しさん@お腹いっぱい。:2011/02/19(土) 20:52:39.71 ID:zzXxeGu+0
>>130 >想像だが、「検索エンジンを選んで検索」ってのも、Altや方向キーでキーボードだけで追えるんでしょ?
>>133の言う通りFireGesturesが自前で実装してる機能のためできないと思う
>>131,
>>133 レスthx
Firefox&FireGesturesユーザー(?)ということで
非常に技巧的な解決策を提示してもらったが、
例に示した以外にもたくさんのものがあって、
これらを全部
>>131の方法でやっていく気にはなれない
FireGesturesは自前関数に登録するために必要だけど、
登録したあとは不要になるというのもちょっと…
>>132,
>>134 レスthx
1つ目の例は確かにそれでいけたね
だけど2つ目の例に関しては
>>133の言う通りだと思う
今ちょっとひらめいたんだが
「~」を使って、イベントを乗っ取らず、そのままシステムに通すと、
最終的に右ボタンは送られるわけだけど、
これをInputを使って横取りして取得して無効化することってできないかな?
一応、
Firefoxのデフォルトの検索ボックスだと
^k フォーカス移動
^{Up} ^{Down} でエンジン選択
!{Up} or !{Down} でエンジン選択プルダウン展開
ができる。
固定エンジンならキー送るだけで何とかなるな。
Send, ^c
ClipWait, 0.5
If (!ErrorLevel)
Send, ^k^{Up 10}^{Down 1}^v{Enter} ; {Up 10} は一番上に移動するため。そこから {Down 1} なので2番目を選択
Return
プルダウンの位置が気にくわない化もしれないが、出来なくもない。
Send, ^c
ClipWait, 0.5
If (ErrorLevel)
Return
Send, ^k^v!{Down}
WinWaitClose, ahk_class MozillaDropShadowWindowClass
Send, {Enter}
Return
>例に示した以外にもたくさんのものがあって
これがKeypress Gesturesの機能を指してるならば
"検索エンジンを選んで検索"を外部からどう実現するかを
これ以上検討しても無駄かも。
実は以前FireGesturesをahkから使えるようにスクリプト書いたことあるけど
Keypress Gesturesの機能だけは諦めた。
実際には不可能じゃなかったけど主要な部分を殆どFirefox側で
実装しなければならず本末転倒すぎた…
XDebugClientでデバッグをしたい。
やり方はAutoHotkeyJp に
・XDebugClient を予め起動しておく
・AutoHotkey_L を /Debug オプションを有効にして起動する。XDebugClient 側は自動的に対象スクリプトに対して接続を行う。
とあるのですが、
「AutoHotkey_L を /Debug オプションを有効にして起動する」
これの意味が分かりません。
AutoHotkey.exeのショートカットの引数に/Debugをつけるとエラーになりますし
どうしろと言っているのでしょうか?
コマンドライン引数に /Debug 指定するだけ。
分かんないなら、AutoHotkey.exe を右ドラッグしてショートカット作る。
Alt+Enter か 右クリのプロパティでコマンドラインに /Debug を追加。
そのショートカットにデバッグ対象スクリプトを D&D。
てか、そこに書いてあることすら分かんないようじゃデバッグは厳しいと思うが
>>139 どうも。解決しました。
XDebugClientがAutoHotkeyJp用ではなかったのが原因でした。通常版を使っていた
>>123 できた。若干の条件付だけど悪くない
コピーするには右押してから300ms以内に左押さないといけない
右ドラッグするには右押してから300ms待たないといけない
マウスジェスチャとかとの競合は知らない
RButton::
SetTimer, nagaoshi, -300
RBtnDown=1
Return
nagaoshi:
RDrag=1
Send, {RButton Down}
Return
#IF RBtnDown
LButton::
SetTimer, nagaoshi, OFF
If( !RDrag ){
RtoL=1
Send, ^c
}
Return
RButton Up::
SetTimer, nagaoshi, OFF
If( RtoL )
RtoL=0
Else If( RDrag ){
Send, {RButton Up}
RDrag=0
}Else
Send, {RButton}
RBtnDown=0
Return
#IF
すげえww色々試して
>>62と完全に同じ結論に辿り着いたんだw
すでに解明されてて俺意味ねえwww
しかもBlockInputあったらドラッグの誤爆防げるんだね
アプリごとに、「左クリック押しながら右クリック」したらアプリ専用のメニューが出るようにしてるんだけど、
これをホットキーでも呼び出せるようにしたい。
--------------------------------
#m::Send, {LButton Down}{RButton}{LButton Up}
#IfWinActive, Firefox
~LButton & RButton::FirefoxMenu()
#IfWinActive, Jane Style
~LButton & RButton::JaneMenu()
--------------------------------
しかし、このコードだと失敗する。(コンビネーションキーが上手く動いてない)
で、通常のホットキーなら Send でも発動するからそっちに統一したら何とか動く
--------------------------------
~LButton & RButton::Send, {F13}
#m::Send, {F13}
#IfWinActive, Firefox
F13::FirefoxMenu()
#IfWinActive, Jane Style
F13::JaneMenu()
--------------------------------
でもこれだと、どのキーを押すのかわかりにくい。("F13"だけじゃ何のキーかすぐに思い出せない)
できれば上のコードで運用したいんだけど、コンビネーションキーを上手くエミュレートする方法ってない?
#IfWinActive, Firefox
#m::
~LButton & RButton::FirefoxMenu()
#IfWinActive, Jane Style
#m::
~LButton & RButton::JaneMenu()
単にこれじゃダメなのか?
AHKで発行したキーを、AHKのホットキーラベルが拾えるのはキーボードを使ったホットキーだけ、
しかもフックを使っていないのに限る。(
>>6 QA4)
マウスボタンは常にフックなので無理ということ。
やりたい処理を関数化してあるんだから、横着しないで #m を複数定義してやりゃいいだけじゃないの?
>>148-149 レスthx.
コードの読み易さと手間を考えて、
#m::を一回書けばすべてのアプリに適用されるような書き方がしたかったんだけど、意外と面倒なのね
>>148氏の方法は初見で、色々応用効きそうなので使わせてもらいます
151 :
147:2011/02/23(水) 01:15:49.33 ID:0baHJf8l0
あ、ID替わってた
どうしようもなくしょぼい質問なんですけど、教えてください。
ファイルオブジェクトを用いて、完全に上書きするにはどうしたら良いでしょうか。
下記の方法では、新しいデータが元データよりも小さいときに、ファイル末尾に
古いものが残ってしまいます。
file := FileOpen("test.txt", "rw")
str := file.Read()
file.Seek(0)
file.Write("new contents")
file.Close
ファイルの先頭だけ書き換えたいときは逆に便利なんだけどな。
↑のままのやり方なら、Write したあとのポインタの位置までが有効なデータとなるっぽいんで、
file.length := file.Position
とやって、そこまでのサイズで切り詰めちまえばいい。
あと、Close はメソッドだから Close() にしないと。
上にも書いちゃってるんですが、
Pauseキーを修飾キー的な使い方がしたいです。
コンビネーションで
Pause & F::
みたいにしたいんだけど、キーの操作がおかしくなる。
>>154 #If GetKeyState("Pause","T")
f::hogehoge
#If
Autohotkeyでmypaintというお絵かきソフトを起動させて
そこにショートカットキーを送るものを作りましたが
mypaintを起動後、
普通にmypaintから「開く」の操作で画像を開くと
ショートカットキーを受け取ってくれますが
mypaintに画像ファイルをドラッグ&ドロップさせると
Autohotkeyからのショートカットキーが送れなくなりました。
これはどうすればいいのでしょうか???
157 :
156:2011/02/23(水) 19:20:16.30 ID:MG3kuiSG0
#WinActivateForce
textname=%A_ScriptDir%\settei.txt
;mypaintの場所
FileReadLine, mpbasyo, %textname%, 1
SplitPath, mpbasyo ,mpname
Process, Exist,%mpname%
pid = %ErrorLevel%
if pid = 0
{
;↓mypaintの起動
Run, %mpbasyo%,,,pid
}
GroupAdd, mypaint, ahk_pid %pid%
WinActivate, ahk_group mypaint
WinWait, ahk_group mypaint
Gosub, Tool
WinWaitClose
ExitApp
;ツールウィンドウ作成
Tool:
Gui, +ToolWindow +AlwaysOnTop
Gui, Add, Button, x0 y0 w30 h30 gZkey, 戻る
Gui, Add, Button, x30 y0 w30 h30 gYkey, 進む
Gui, Show, x127 y87 w60 h150, ツール
Return
158 :
156続き:2011/02/23(水) 19:20:57.74 ID:MG3kuiSG0
;「send,」の後を自分がmypaintに登録しているショートカットキーにする
;戻る
Zkey:
WinActivate, ahk_group mypaint
Send, z
Return
;進む
Ykey:
WinActivate, ahk_group mypaint
Send, y
Return
160 :
156:2011/02/23(水) 20:29:41.81 ID:MG3kuiSG0
すいません、自己解決です。
とりあえず
mypaintの起動時に取得したpidじゃなくて普通にwintitle入れたら動きました
なんかもうすいませんでした。
;GroupAdd, mypaint, ahk_pid %pid%
GroupAdd, mypaint, MyPaint
; AutoHotKeyからWSCを使うサンプルです。JavascriptやVbscriptが詳しいひとは、WSHやHTA、HTABOXコア、テキストエディタのマクロなどで使う関数と共用出来て便利かも?
; 以下の変数wscscriptの部分をg.wscとして、このスクリプトと同じフォルダに保存して実行します。
objjs := ComObjCreate("ScriptControl")
objjs.Language := "JScript"
objjs.addCode( "function getobjectg(pwsc){return GetObject('script:'+pwsc);};" ) ;
p =%A_ScriptDir%\g.wsc
g := objjs.Run("getobjectg",p)
wscscript =
(
<?xml version="1.0" encoding="shift_jis" ?>
<component><?component error="true" debug="true"?><public>
<method name="popup"/>
<method name="init" dispid="0"/>
</public><implements type="Behavior" id="Behavior"/>
<script language="JScript"><![CDATA[
var oshl=new ActiveXObject('WScript.Shell');
function popup(smes,nsec){return oshl.popup(smes,nsec);};
function init(othis){
if(typeof(othis.location)=='object'){location=othis.location;
}else if(typeof(othis.WScript)=='object'){WScript=othis.WScript;
};return this;
}; ]]></script></component>
)
g.popup(wscscript) ;
入門者レベルのスクリプトですが教えてくだされ。
USキーボード使うてます。
F1`キーに、左Alt+`(日本語キーボードだと、半角全角に当たるキー)
を割り当てるにはどうしたらいいですか?
同時に押すんじゃなくて、左Alt(押しっぱなしで) ` を押す、
という挙動にしたいです。
>>161 そうです、同じ人物です。
解説ありがとうございます。
何でこうなのかよく分からなかったのでたすかりました!
>>153 ありがとうございました。大変参考になりました。
結局このようにやって、うまくいきました。
str := file.Read()
file.Length := 0
file.Write("new contents")
file.Close()
質問です
後方一致(部分一致で問題ないと思います)で
ウィンドウを指定するにはどうしたらいいですか?
SetTitleMatchMode, 2
をどこに書けばいいんですか??
WinActivate,
だと一致する文字列が指定できませんよね???
167 :
166:2011/02/25(金) 01:34:06.13 ID:MU+gEzNn0
すいません、自己解決。
別に行の手前に書いておけばいいんですね・・
スクリプト全体に影響を及ぼしたいなら、Autoexecセクションに。
分かんないなら1行目に書く。
現在の一連の操作だけに影響を及ぼしたいなら、直前の行でいい。
例えばメモ帳を素で起動すると「無題 - メモ帳」のタイトルになるが
WinActivate, メモ帳
だと通らない。これはデフォルトで前方一致なため。
逆に、その直前にマッチモードを指定してやれば通るようになる。
SetTitleMatchMode, 2
WinActivate, メモ帳
ちなみに RegEx を指定してきっちりと後方いっちにするって手もある
SetTitleMatchMode, RegEx
WinActivate, メモ帳$
無駄足w
>>169 半年ROMってる初心者には参考になっておりますよ
>>168 >ちなみに RegEx を指定してきっちりと後方いっちにするって手もある
横レスだがその手は思いつかなかった
thnx
説明ありがとうございます。
すいません、もうひとつ質問です。
ここの部分に入ったらマウスの右クリック押しっぱなしを
スペース押しっぱなしにしたいのですが
どうしたらいいのでしょうか??
Spacekey:
WinActivate, ahk_group honyarara
ここ
Return
173 :
172:2011/02/25(金) 02:22:26.80 ID:MU+gEzNn0
LButton::Spaceにしたら常にLButtonを押したときはSpaceになってしまいます。
その時だけSpaceにするいには(例えば解除ボタンをクリックしたら戻るとか)
どうしたらいいのでしょうか??
ここはおまえの日記帳じゃry
それにおまえには問題解決力もあるだろ?
>>1のリファレンス読めばすぐ解決するさ
#IfWinActiceとか#If(ahk_専用)あたりだ
ahkでキー操作以外に何ができるかもよく分かるだろう
質問させてください。
キーリピートを無視したい場合どうすればいいのでしょうか。
キーを押下した時にだけ操作が発生し、押し続けている間は何も起きないようにしたいです。
Numpad0 up::
の要領で
Numpad0 down::
とやってみたのですがダメでした。
初回KeyDownにのみ呼応する方法、よろしくお願いします。
すいません、おしえてください。
トリプルコンビネーションを動かそうとしているのですが、
その組み合わせに無変換キーを入れると動かなくなります。
どうやればいいのかおしえてください
^vk1Dsc07B::
^Z::
if ((A_ThisHotkey = "^vk1Dsc07B" and GetKeyState("Z")) or (A_ThisHotkey = "^Z" and GetKeyState("vk1Dsc07B")))
{
MsgBox, Hotkey successfully activated.
}
return
>>175 例えば以下のようにするとダイアログが出るが、OKを押して該当ホットキーの一連の
処理が完了するまで Numpad0 を連打しても何も起きない。
Numpad0::MsgBox
デフォルト設定の場合、ホットキーラベルが同時に処理できるのは1つまでとなっているためである。
( #MaxThreadsPerHotkey の項目を参照 )
この原理を利用して、キー押下解除までホットキー処理が終わらないようにすれば、キーリピート処理を抑制できる。
Numpad0::
; やりたい処理
KeyWait, Numpad0
Return
他にもフラグを用いてどうにかするという手もある。
#If (NP0)
Numpad0::Return ; 一度処理したらキー押下解除があるまでこちらに流れる
#If
Numpad0::
NP0 := True
; やりたい処理
Return
Numpad0 Up::NP0:=False
Autohotkey_Lですが
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
Msgbox %OutputVarWin%
とやったら全角の日本語のウィンドウのタイトルじゃなくて
0x10a22とでました。
全角の日本語のウィンドウのタイトルはどうやったらでますか?
>>176 方法1) Hotkeyコマンドで一時的にホットキー定義を置き換える方法で実現
Hotkey, ^z , DefaultAction
Hotkey, ^vk1Dsc07B, DefaultAction
DefaultAction:
key := (A_ThisHotkey = "^z") ? "^vk1Dsc07B" : "^z"
Hotkey, %key%, CombiAction
KeyWait, % RegExReplace(A_ThisHotkey, "^\W+")
Hotkey, %key%, DefaultAction
Return
CombiAction:
MsgBox, Hotkey successfully activated.
Return
方法2) 原理的には方法1と〃だが #If で実現
#If (A_ThisHotkey = target)
^z::
^vk1Dsc07B::
MsgBox, Hotkey successfully activated.
Return
#If
^z::target:="^vk1Dsc07B"
^z Up::target:=
^vk1Dsc07B::target:="^z"
^vk1Dsc07B Up::target:=
>>178 取れるのはウィンドウハンドル(ウィンドウID)なので WinGetTitle で取得。
>>180 伝わらんかも試練から、補足。
その 0xNNNNN ってのを利用して改めて WinGetTitle を使ってタイトルを別途取得。
182 :
178:2011/02/25(金) 20:58:11.24 ID:MU+gEzNn0
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
WinGetTitle,title,%OutputVarWin%
Msgbox %OutputVarWin%=%title%
とやってみましたがMsgboxが
0X1808e2=
のみ表示になってしまいました
なにがおかしいのでしょうか??
> 取れるのはウィンドウハンドル(ウィンドウID)
書かれた事以外にもマニュアル読むことはしようぜ
>>179 詳しく書いてくださってありがとうございます。
貼り付け方がわからないためか、方法1のほうは動作確認できませんでした。
一方、方法2のほうは動作確認できました。msgでました。
たいへんわがままなのですが、僭越ながらコメントを。
>>176で書かせていただいたスクリプトは、修飾キーを押しながら
残りの2キーを押す順番がどちらが先でも起動するという趣旨のものでした。
しかし
>>179さんが示してくださった方法ではおそらく、決まった順序で
キーを押したときしかmsgがでない方法だと思います。
予め、趣旨のことを書くべきでした。
しかし、無変換を使用したトリプルコンビネーションが使えて有り難いです。
スクリプト書いてくださって有難う御座いました。
>>176 こういう動作?
^vk1Dsc07B::
If getkeystate("z", "P")
testmsgbox()
return
^z::
If getkeystate("vk1Dsc07B", "P")
testmsgbox()
return
testmsgbox() {
MsgBox, Hotkey successfully activated.
}
あっっ・・・んっ・・・もっげ・ん・か・いっっ
すいません
マジでボスケテくださいOTLOTL
#If sw=1でマウスの左クリックをスペースにする事ができましたが
ボタンがあるウィンドウの上にきてボタンをクリックすると
「マウスの左クリックをスペースにする」を解除したいんですが・・・
どうしたらいいんでしょうか?
恐らくMouseGetPos, mX , mYをループ無限ループさせて
常にマウスの座標を常にとってボタンのウィンドウの上にマウスがきたら
「マウスの左クリックをスペースにする」を解除して
ループから出てsw=0にすればいいかと思うんですけど
For ループのパラメータの説明の意味がまったく理解できなくて困ってます。
#If sw=1
sw=1
LButton::Space
WinGetPos , X, Y, Width, Height, ボタン
MouseGetPos, mX , mY
If X < mX & X+Width > mX
If Y < mY & Y+Height > mY
sw = 0
>>185 有難うございます!無事できました!
Ctrlと無変換の押し順序関係なく行けます。
助かりました。
testmsgboxを任意のものに置き換えてやってます。
ただ私、素人なのでちょっと分からないので、
おそらくコレに関係ない初歩的な問題でしょうが、
Ctrlを右のCtrlを使用したときに、右のCtrlを
押しっぱなしだと発動しないということです。
左Ctrlは問題なく発動してくれますが。
有難う御座いました。ほんと助かります。
autohotkeyからプログラムを実行してその返値を取得するようなことはできますか?
具体的には、コマンドプロンプトから実行するようなもの(例えばdirコマンド)を実行して、その結果を取得したものをautohotkeyで直接受け取れればいいのですが
ダミーのテキストファイルを経由してやりとりすることをまず考えましたが
autohotkeyと外部アプリ間で直接やりとりできれば効率的だと思いましたので
189 :
186:2011/02/26(土) 00:34:17.76 ID:FB63iWjs0
すいません、whileでなんとか解決できたんですが
やはりwhileのループから抜け出れません・・・
アドヴァイスお願いします・・・
#If sw=1
sw=1
LButton::Space
While sw=1{
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
If (X < mX & X+Width > mX)
{
If (Y < mY & Y+Height > mY)
{
sw = 0
}
}
}
191 :
186:2011/02/26(土) 01:05:04.02 ID:FB63iWjs0
なんかループを出れない原因がわかりました。
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY
Msgbox X=%X% mX=%mX%
#If sw=1
LButton::Space
だとMsgboxが表示されるのに
#If sw=1
LButton::Space
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY
Msgbox X=%X% mX=%mX%
だとMsgbox自体が表示されません
これはどうしたらいいのでしょうか??
>>190 アドヴァイス有難うございます
でもじつはまだループにすら入ってなかったですOTL
せっかく #If 使ってんだから、クリック発生時のときだけマウス直下の情報を調べればいいんで、
ループなんぞする必要はないよ。
あと、ウィンドウタイトルってかなり曖昧ってことを知っておこうぜ。
「ツール」ってフォルダをエクスプローラで開いていたら、タイトルは「ツール」になって判別つかない。
ウィンドウを一意に識別できる唯一の手段がウィンドウハンドル(ID)なんで、それを使って厳密にやった方がいい。
お絵かきソフトの自作ツールバーの人だと思うけど、自前のGUIならハンドル取るのはたやすい。
; 以下の2行を Gui, Add, ... の後ろあたりに入れて、GUIのハンドルを変数に入れておく
Gui, +LastFound
HwndToolbar := WinExist()
; これ以降はホットキー定義
#If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
LButton::Send, {Space}
#If
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,, hwnd ; マウス下の窓だけ分かればいい
Return (hwnd == target)
}
※ 一番大事な事はスクリプトの流れをきちんと知れ。この辺でも読んでおくといい。
http://sites.google.com/site/agkh6mze/howto/scripting
>193
解説有難うございます。
じっくり読んでみます。
もしかして・・・ループにすら入って無かったのは
MouseGetPosはクリックしたら発動なのに
左クリックがスペースに置きかえられているから
MouseGetPosが発動しないというオチなのかああああ
まったく的外れ。オチも何もない、調べるところはちゃんと調べれ。それだけ。
>195
有難うございます
改行だったんですね、この違いは・・・
こんな感じになりました。
ただ
LButton::Space
だと長押しとかマウス左クリックを押している間Spaceが押されているのですが
(当然ながら次の行にいかない)
LButton::
Send,{Space}
だと一回押されてるだけっぽいのですが
どうしたらLButton::Spaceと同じ動きで次の行もちゃんと実行されるのでしょうか??
LButton::
Space
だとエラーが出ますしどうしたものかと・・・OTL
Tenohira:
WinActivate, ahk_group mypaint
sw=1
#If sw=1
LButton::
Send,{Space}
If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
sw=0
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd ; マウス下の窓だけ分かればいい
Return (hwnd == target)
}
#If
Return
標準出力に関してなんですが、
今まで海外フォーラムにあるDllCallを使ったものを利用してましたが
>>28を見てCOMオブジェクト?を使うとこんなに短くなるんだと驚きました
これ一瞬コマンドプロンプトが見えるのですが、
何も表示しない様にするにはどうしたらいいのでしょうか?
ん〜、
>>28にも書いた通りで、基本的に非常時にはできないんだよね。
ただ、AHK自信がコンソールアプリになっちまえばいいんで
DllCall("AllocConsole")
ってやるとコンソールがでるんで、それ以降のコンソールアプリは別窓が出なくなる。
まー、これじゃ本末転倒なわけで、標準出力を得て加工して終わりってちょっとしたツールなら
全く意味がない。
常駐アプリだったら、
DllCall("AllocConsole")
Process, Exist
WinWait, ahk_class ConsoleWindowClass ahk_pid %ErrorLevel%
WinHide
ってやると一瞬出てるけど消せるんで、起動時に一階だけ我慢すればあとは出さないで済むって感じにできる。
それにしても誤字脱字がヒドいなw
>>198 ありがとうございます、
やっぱり基本的に非表示は無理でしたか。
常駐させる使い方はしてないので素直にDllCallにしておきます。
今後他で常駐させる必要が出てきた場合には参考にさせて頂きます。
201 :
186:2011/02/26(土) 19:46:49.18 ID:FB63iWjs0
すいません、どうしてもうまくいきません
アドヴァイスお願いします。
Tenohira:に入った時に
マウス左クリックをSpaceキーにして
その際、ツールウィンドウの上に来たときはSpaceキーを解除したいのです。
自分としてはTenohira:に入った時にsw=1というフラグを立てて
その時だけマウス左クリックをSpaceキーにするような内容にしようとしたのですが
色々いじってもどうもうまく動きません。
#IF内でループを組まずMouseIsOverMyToolbar(target) の関数の中で
条件付けをすればいいのかと思って
If sw=1等入れてみたのですがうまくいかないです・・・
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
; これ以降はホットキー定義
#If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
If sw = 1
LButton::
Send,{Space}
#If
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd,test ; マウス下の窓だけ分かればいい
Return (hwnd != target)
}
Return
グチャグチャしすぎて何したいかがスクリプトから全く見えてこない。
そのまま貼ったコメントも不適当。
ってか、↑は実質↓と同じ。
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
If sw = 1
LButton::
Send,{Space}
Return
どうしてそうなるかはきちんとマニュアルに書いてある。
ってか、#If のページとか読んでないでしょ。
あ、違った。もっとヒドいか。
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
If sw = 1
Return
だな。
貼り付けた所だけのスクリプト作って実行してみれば分かる。
直近に実行された行と、ホットキー定義はトレイアイコン操作してメインウィンドウ開けば見られる。
#Ifのページ読んでこれなんですよ・・・
うyわあああああん
こうですか・・・
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
#If sw=1
LButton::
Send,{Space}
#If
while(MouseIsOverMyToolbar(HwndToolbar)){ ;ツールウィンドウの上では左クリックは普通の左クリック
sw = 0
}
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd,test ; マウス下の窓だけ分かればいい
Return (hwnd != target)
}
Return
ここまでやってみたですが
ツールウィンドウの上でクリックしたときにやっぱり
左クリックがスペースにならないです・・・
なにが・・・おかし・・いで・・・すか・・・OTL
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
#If sw = 1
LButton::
Send,{Space}
#If
while(sw=1){
If MouseIsOverMyToolbar(HwndToolbar)
sw = 0
break
}
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd
Return (hwnd == target)
}
Return
方針は分からなくもないし、論理としての方向性はまちがってなさそう。
ただ、スクリプトに対する理解が 絶 対 的 に 足 り て な い 。
それに、殆ど代わり映えに無い動かないスクリプトばかり貼るのはどうかと思う。
もっと、じっくり考えてからレスしようぜ。
マニュアル読んでるといってるけど、ページ下部のサンプル動かしたりしてないんだろう。
そういうのも含めて「読め」ってことだよ。
急がば回れだ。
うーん、じつはやってるしスクリプトの動きは
こうなるんだなっていうのは分かるんですけど
「スクリプトに対する理解が 絶 対 的 に 足 り て な い 。」
だと思います。
もうそれ以前の問題で・・・
「#IfWin〜 ディレクティブに似て、#If は位置を指し示すもので、以降のスクリプトに記述されたホットキーとホットストリングが有効かどうかに影響を与える。
つまり #If と #IfWin〜 は排他的であって、直上の #If または #IfWin〜 が実効性を持つ。 」
実はこの文章の意味すらまったく理解できてないです
なにを言ってるかまったく分からないです・・・
具体的に質問ですけど
パラメータの無い#Ifは一体なんでしょうか??
例3と比較しても例4の6行目がエラーで動かないので分からないんですが・・・
プログラムまったくわからないのですが、キーボードのキーを押したら、指定のファイルが指定のフォルダに移動してくれるような
ものがあれば便利だと思って、このソフトを試してみました。
質問なんですが、Gのキーを押したら、すべてのファイルを、移動するコマンドって
g::
FileMove, C:\My Folder\*.*, C:\My Folder1\*.*
return
でいいんでしょうか?動作したのでいいんだと思うのですが、自信がなくて聞いてみました。。
あと、ウィンドウズで、フォルダの中の、選択したファイルだけを移動したいのですが、どういうコマンドを使うのでしょうか?
全部選ぶっていうコマンドが * アスタリスクで指定できることはわかったのですが、 指定したファイルだけを移動っていうのがわからなくて。
210 :
186:2011/02/27(日) 03:25:23.22 ID:/UT/Z5GV0
ごめん解決した
Dkey:
sw = 0 ;他のボタンを押したら左クリックをSpaceにしない
WinActivate, ahk_group mypaint
Send, d
Return
Tenohira:
WinActivate, ahk_group mypaint
sw = 1;ここでsw=1にして左クリックがSpaceの条件を一個満たす
#If sw=1 and MouseIsOverMyToolbar(HwndToolbar)
;↑ここに&でsw=1を付け足せばいいだけだったOTL
LButton::Space
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd ; マウス下の窓だけ分かればいい
Return (hwnd != target):ツールウィンドウの外のときに左クリックがSpaceの条件を一個満たす
}
Msgbox超お騒がせしました。本当にすいませんでした
Return
ID:/UT/Z5GV0
どうしてスクリプトなんか書こうと思ったの?
>>211 話が長くなるけど
もともとMyPaintという
好きなお絵かきソフトがあって
それの独自形式のファイルを
フォトショップのPSDファイルに変換したくなって、
半年ぐらい頑張ってなんとか変換ソフト作ったんです。
そのあと、その好きなお絵かきソフトを使いながら
そのPSDの読み込み書きだしをして
他の画像変換ソフトと連携がしやすいような
(Mypaintには画像の変形とかいう機能がまったく付いていない)
ユーザーインターフェースを追加したかったんです。
半年かけて…っていうのは沢山の助言を受けてじゃない?
今のあなたの姿勢を見ていると、時間さえあれば完成するって訳じゃなさそうだから。
人に手取り足取りやり方を教えるのは
自分でとっとと仕事しちゃうより難しいんだよ。
そうですね、2ちゃんでものすごく教えて貰いました。
基本的にBasicとCは実務経験がありますが
改造するとか読んで流れを頭にたたき込んでおく為で
>207で書いたようにプログラムの用語とか分かんないです。
最初、こんなフリーソフト作って下さいスレで依頼したら、
やれば出来る、自分でやれって言われて
ヒント貰って初心者スレに行って・・・って感じで
ほぼRPGお使いゲームみたいな流れでしたね・・・・
とりあえずMyPaintスレに投下した完成ソフトはこれです。
http://www1.axfc.net/uploader/Li/so/91757.zip 本当にお騒がせ&お世話になりました。
え゛、C使った事あるんかい。
なら、AHK の #If は C の #ifdef とかと同じプリプロセッサみたいなもんだと分かりそうなもんだが。
>>209 あってるよ。
ファイルの指定の仕方は、ファイルパスをそのまま書くだけでいい。
複数指定したいなら、面倒でもその分だけコマンドを並べてやる必要がある。
>>215 実際みたプログラムに無かったのかもとしか・・・。
一般的なプログラムでも無かったですし・・・。
#が付くなんて#インクルード(綴りすら覚えてない)ぐらいしか
覚えてないですし・・・。
まあ、そんなレベルですよ。
#Ifwinactive で複数のアプリを同時指定することはできますか?
>>218 1) GroupAdd でグループに追加して ahk_cgoup を指定
GroupAdd を実行しないと該当グループは空のままなので、
Autoexecセクションに GroupAdd を記述するなどしてやる必要がある
GroupAdd, Explorer, ahk_class CabinetWClass
GroupAdd, Explorer, ahk_class ExploreWClass
Exit ; Autoexecここまで
#IfWinActive, ahk_group Explorer
Space::MsgBox, エクスプローラ
2) 正規表現で指定する
ただし、Autoexecセクションで 「SetTitleMatchMode, RegEx」 してやる必要がある。
SetTitleMatchMode, RegEx
Exit ; Autoexecここまで
#IfWinActive, ahk_class (?:Explore|Cabinet)WClass
Space::MsgBox, エクスプローラ
>>219 できました!分かりやすく大変ありがとうございました <(_ _)>
ハンドル(?)がahk_class SunAwtFrameであるソフトが複数ある場合、そのうちのひとつを
特定して起動したりアクティブにすることはどうやれば可能でしょうか?
ただし、タイトルのなかに固定した語句がなくて、タイトルのほうでも指定できなくて困ります。
2chブラウザV2Cのことなんですけど。
御知恵を拝借できれば幸いです
クラス名だぬ
起動は普通に .exeや .lnk をRunすりゃいいだけじゃないかね。
Java や Adobe AIR で作ったものなどクロスプラットフォーム製品は厄介な事が多くて、
情報が殆ど取れない。
複数ウィンドウから目当てのものを特定するための手段として残っている汎用的な手法は
プロセスIDで更に絞り込みをするくらい。
ただし、1プロセスに複数ウィンドウがあり、それらのクラスが全部同じ場合は判別がつかない。
その際に、WinActivateの第3引数の除外タイトルなどを上手く使えば余計なのは除外できるかもしれない。
Process, Exist, 調べたいプロセス名
PID := ErrorLevel
WinActivate, ahk_class SunAwtFrame ahk_pid %pid% ; クラスとプロセスIDで二重に絞り込み。
※ Java で java.exe を叩いている場合はもっと厄介で、プロセス名が全部おなじになる。
その場合は、COM経由でコマンドラインから PID を調べてやるなどをしてやらないといけない。
; コマンドラインからPIDを調査する関数。matchModeに1を指定すると中間一致。
GetPidFromCommandLine(commandLine, matchMode=0) {
For p in ComObjGet("winmgmts:").ExecQuery("SELECT processId FROM Win32_Process WHERE CommandLine " (matchMode ? "LIKE '%" commandLine "%'" : "='" commandLine "'"))
Return p.processId
}
>>222 レスありがとうございました。すごい難しそう。
これ聞かないと絶対むりですね。
ちょっとタスクマネージャーをみたところ、
プロセス名がV2Cとほかのjavaソフト(?)で同じでした。
もっと厄介なパターンみたいですね。
その難しい文字列をどうつかっていいのかわかりませんが、これから格闘してみます。
ありがとうございます。PIDがわかったところでその先、見当つきませんが。
ちなみに、「起動していないなら起動、既に起動してるならアクティブ」をやりたいのです。
ありがとでした
autohotkeyからCOMを操作できる人は
他のプログラミング言語に精通しているのかな
basicとautohotkeyしかできない私にとっては驚きの機能ばかりです
すごいですね
先へ進むんだ
ノートPCにPgUp, Homeとかが欲しくなる
↓
コンビネーションも使えるAHKでリマップすることに
↓
最前面表示のトグルとか便利だから組み込みコマンドを使い始める
↓
InputBoxじゃ不満になってGUIに手を出しAHKに翻弄される
↓
一通りAHKを理解し、小物のexeを作りまくる
↓
常駐ソフトをすべてAHKで代替するべくSendMessageやDllCallを使い始める
↓
オブジェクトを使いこなすためにJavaScriptを学び始める
>一通りAHKを理解し、小物のexeを作りまくる
俺、いまにまさにここ
dllは独自に使いたいけど全く意味がわからない
dllcallのサンプル書いてくれた人のスクリプトを丸ごとコピペして使ってる
ちょっと自分でいじろうとすると必ず返答がnullになって愕然とする
DllCallは使えるようになるまで1年以上かかった。
いじっては動かず、いじっては動かず、の繰り返し。トライ&エラーは数知れず。
プログラミング歴そこそこ長いけどWinAPIとかCOMとかどうやって勉強すればいいのかもわからん
常駐ソフトのほとんどをAHKで置き換えることができない俺
Proxomitronとかどう考えても無理だwww
いまのバージョンのAutohotkey_LでURLエンコードする方法を教えてください
StrPut で指定文字列を指定エンコードに変換してバッファに書き込み、
バッファのデータを NumGet または *(addr) で1バイト毎に参照して、
そのコードを15進数に置換して文字列として追記格納。
このソフトのお陰でJavaのGoFデザインパターンを勉強せざるをえなくなったじゃねぇか・・・orz
GoFってあったっけ?と
Chain of Responsivilityみたいなやつの略語かと一瞬考えちまった。
>>216 ありがとうございます。まるでわからないことだらけですが少しづつ消化していきたいなとおもいます。
またわからないときは質問させていただきたいとおもいmす。
AutoHotkeyで下駄配列みたいなのを作ろうとしたけれど、同時押しシフトを複数定義すると単打ができなくなる。
原因と解決方法を教えてくれ。
dをシフトキーにした例
$d::Send,d
d & $q::Send,dq
d & $w::Send,dw
d & $e::Send,de
d & $r::Send,dr
d & $t::Send,dt
d & $a::Send,da
・
・
・
$q::Send,q
$w::Send,e
$e::Send,e
$r::Send,r
$t::Send,t
$a::Send,a
・
・
・
q & $d::Send,dq
w & $d::Send,dw
e & $d::Send,de
r & $d::Send,dr
t & $d::Send,dt
a & $d::Send,da
・
・
こうするとなぜかqやwやeなどが単打で何もでなくなる。
>>235 それってコンビネーションキーの仕様じゃないか
チルダ「~」つけないと一つ目のキーは無効化されるって書いてあるぞ
それはそうなんだが、無効化された後に再び無効化されたキーを定義すると(上のスクリプトの$d::Send,dとか、$q::Send,qとかのぶぶんね)
新たに定義されたキーが有効になるはずなんだが、
キー定義が増えてくると(?)それが効かなくなるんだよね。
dvorakjの人は一体どうやってるんだろう?
>>238 ありがとうございます。
スクリプトを見ても、何をしているのか理解できないが、すごいことをしているんだな。
すみません。ゲームの話なんですが、教えてください。
特定のPCゲームのみ、AHKの#IfWinactiveのコマンドが動かなくなるのです。
つまり、そのゲーム限定のキーのリマップ等AHKの動きが一切動かなくなるのです。
しかし#IfWinactive/Existなど、そのゲームだけに限定しない一般的なスクリプトは
ふつうに動きます。
steamのValve社のゲームです。
(それ以外にsteamのゲームもっていないので分からないのですが、ほかのPCゲームなら
ふつうにAHKが動きます)
しかし、一年前はsteamのゲームでも日常的にAHKが動いていました。
いまではビデオボードが昔のPCを使っているので一年前とは環境が少しちがいます。
やはりゲームなのでビデオドライバ等とAHKが相性悪いのでしょうか
どなたか解決法ご存知であればおしえてください。
>>240 dirt2というゲームでそういう状況になった。
dirt2がアクティブな状態でAHKをReload(マウスジェスチャーにReloadを割り当てて実行)すると
#IfWinactiveのHotkeyが効くけど、一旦、別ウィンドウをアクティブにしてからDirt2をアクティブにすると効かなくなる。
私はUSBテンキーパッドのみ割り当てを変更したかったのでAHKでの割り当てをせず、
MagicKeyPadで割り当てを変更しています。
AHKのみで対応したいのであれば(試してないのでうまくいくかは解らないけど)
SetTimerでゲームウィンドウがアクティブになるのを監視して
アクティブになったらAHKをリロードするようにすればいけるかもしれない。
そのゲームはウィンドウがアクティブになるとフックして、
非アクティブになるとアンフックしてんじゃないのかね。
フックは後勝ちで、後に仕込んだ方から順に処理されていって
そこで情報捨てられると、順序的に次のフックには何も起きてないように見える。
まーDirectInput使っててお手上げってやつよりはマシかもしれない。
Win7 x86/x64 + AHK_L Unicode x86 v1.0.92.02
何時からか知らないけど、RegExReplaceのターゲット文字列が2バイト文字で始まり、
パターンに ^ を指定、且つ第5引数に1以外(デフォルト -1)を指定すると、負のエラーコードが返って失敗するね。
RegExReplace("あ", "^", "a")
MsgBox,% ErrorLevel
RegExReplace("あ", "^", "a", "", 1)
MsgBox,% ErrorLevel
ホンマやね
何でか知らんが手元に大量にある L48〜L61(A&U) ではきちんと動いてる。
検証サンクス。1.0.90.00以降の問題か〜。とりあえずバグ報告してみた。
こんな状況の中なんだが...うpだてきた
1.0.95.00 - March 12, 2011
- All file I/O has been heavily optimized.
- Added #Warn to assist with debugging; initial design by ac.
- By default, if name_var contains a function name, name_var.() calls the function. This can be overidden via the default base object, as before.
- Run supports verbs with parameters, such as Run *RunAs %A_ScriptFullPath% /Param.
- If an operator which can accept either one operand (&x) or two numeric operands (x & y) follows a quoted literal string, auto-concat occurs and the operator is applied only to the right-hand operand.
This is because quoted literal strings are always considered non-numeric and are therefore not valid input for numeric operators. For example, expressions like "x" &y and "x" ++y now work.
Fixed:
* Wildcard hotkeys were not respecting modifiers such as ^!+ in specific cases.
* File.Pos returned garbage for non-seeking file types; now it returns -1.
* File.AtEOF was incorrectly true in some cases.
* COM wrapper objects left A_LastError unset in some cases.
* Gui submenu icons did not work on Windows 2000/XP/Server 2003.
* SplashImage clipped the image if height > width.
* ComObjConnect did not alert when the first parameter is invalid.
* SplashImage now uses GDI+ only when the other methods fail, for compatibility.
* Tilde in ~x:: now affects x & y:: in the same way that ~x & z:: would, instead of having no effect.
* A_PriorHotkey and A_TimeSincePriorHotkey now have the expected values when used with #If.
* RegExReplace did not advance through the string correctly after a match failure if the string contained non-ASCII characters.
正規表現で「abc(.*?)e(.*?)g」とした場合
「abcdefg」では$1に「d」$2に「f」
「abcefg」では$1に「」「f」が格納されると思ったのですが後者の場合はうまく
動いてくれません。どう表現すれば良いのでしょうか?
1.0.95.00 Vista sp2 32bit
タスクトレイアイコンからEditThisScriptで落ちる
ついでに。
ホットキーで別のスレッドに割り込んでExitやReturnさせることってできますか?
Pauseで停止させっぱなしでも短期的には代用できるんですが、
停止スレッドが貯まる一方なので
>>248 上手く動きますよ
>>249 1.0,95.00 Unicode @ XP SP3だけど無問題。
NextAction =
While !(NextAction)
Sleep, 200
If (NextAction = "Exit")
Exit
Return
とかやって、他のスレッドで NextAction を上書きすりゃ何とか出来そう。
実行行がずらずら表示されるのが嫌なら ListLines, Off で
---gomisute.ahk---
FileRecycle, zzz\yyy
---ここまで---
これを、外付けHDDの E:\aaa\bbb\gomisute.ahk に置いて実行したら(E:\aaa\bbb\zzz\yyyが存在する)
bbbフォルダ丸ごと全部削除(RecycleではなくてDelete)された
スクリプト自身も消された
FileRecycleはフォルダに対して使っちゃ駄目だったってことなのかもしれんが、
今まではフォルダに対して使っても特に問題は起きなかったからかなりショック
しかも再現できんから他にも条件が重なったのかもしれん
1.0,95.00 Unicode Vista sp2 32bit
アクティブなソフトの縦スクロールバーの表示・非表示を切り替えたく以下のように書いてみたのですが
メモ帳で試してみるとスクロールバーが二つに増える、戻るのように動いてしまいます。
元々ある縦スクロールバーを消す・戻す、ようにさせるにはどうすればよいのでしょうか?
#1::
WinSet, Style, ^0x00200000, A
return
アプリケーションのコントロール毎に指定しないとダメでしょ。
ControlGet, hWnd, Hwnd,, Edit1, ahk_class Notepad
WinSet, Style, ^0x00200000, ahk_id %hWnd%
>>253 おお、そうやるんですね。ちゃんと動きました。
ありがとうございました。
1.0.96.00 - March 21, 2011
New features:
ComObjQuery: Queries a COM object for an interface or service.
ComObjFlags: Retrieves or changes flags which control a COM wrapper object's behaviour.
ComObjCreate allows non-dispatch objects to be created if an interface identifier (IID) is given.
COM arrays support for-loops and the Clone() method.
ListVars shows the inner variant type and value of each COM wrapper object, in addition to the wrapper's address.
Changes:
When a literal integer or variable containing both a numeric string and cached binary integer is assigned to a field of an object,
an integer is stored instead of a string. This particularly benefits scripts calling COM methods which accept integers but not strings,
or have different behaviour depending on the type of value.
NULL values are now allowed with ComObjParameter for the VT_UNKNOWN and VT_DISPATCH types.
Improved support for Common Language Runtime (.NET) objects via COM.
FileRecycle should now warn before deleting a file which is too large to recycle.
When a SafeArray created with ComObjArray is assigned to an element of another SafeArray, a separate copy is created.
This prevents the script from crashing due to a second attempt at "destroying" the array. ComObjFlags allows this behaviour to be avoided.
Fixes:
Assigning to a COM array of VT_DISPATCH or VT_UNKNOWN crashed the script.
Break and Continue were tolerated outside of loops in some cases.
Standalone carriage-return (`r) was not correctly interpreted as end-of-line.
MouseMove miscalculated negative coordinates with the Input and Event send modes.
Selecting Edit This Script from the tray menu or using the Edit command crashed the script (broken by v1.0.95).
Error dialogs pointed at irrelevant lines of code in some cases.
>>251のクラッシュ条件はtoo large to recycleか。
つかupdateが21日って、あと2日ずれてれば助かったのかー。
251でFileRecycleをフォルダに使っちゃだめって解釈しちゃってたけど
フォルダ対象で使っても問題無しですね
誰かが惑わされてもいけないので訂正します。すまん
(公式のリファレンスではフォルダを扱う場合についての言及がある)
しかし
>>249も当たり前に修正してくるあたり俺にとって神対応すぎる
複数のプログラムを一括で終了&起動させたいのですが、
#F4::
Process, Close, UnlockerAssistant.exe
Process, Close, opera.exe
・
・
・
return
#5::
Run, C:\Program Files\Unlocker\Unlocker.exe
Run, C:\Program Files\AVAST Software\Avast\AvastUI.exe
・
・
・
return
こんな感じでやってみたのですが、終了してくれたりしてくれなかったり、起動してくれたりしてくれなかったりします。
どこか間違っているところはありますか?
バックグラウンドのウィンドウでの文字判別って出来る?
>>257 終了または起動したかをチェックするようにしてみては?
MouseGesture.ahk を ネットブック(OS Windows7 Starter)で利用しています。
エクスプローラのアイコン上でマウスジェスチャーを無効にしたい(アイコンを右ドラッグしたい)のですが
MG_CClass = DirectUIHWND になっているせいかエクスプローラのアイコン上だと
MG_TreeListHitTest() = 0 となり、無効化されません。
ちなみにWin7のデスクトップ上のアイコンは MG_CClass = SysListView32 なのでXPと同じです。
とりあえず、下記スクリプトを MG_User.ahk に記述し、カスタム条件式で指定し
一応、問題なく動いていますが、XPと同様にアイコンを識別する方法をご存知な方が
いらっしゃいましたらアドバイスを頂けないでしょうか。
よろしくお願い致します。
MG_TreeListHitTest2() {
global MG_CClass
if MG_TreeListHitTest()
return 1
else if ( MG_CClass == "DirectUIHWND" ) {
blockinput, on
ifwinexist, ahk_class #32768 ; コンテキストメニューが表示されているなら
send, {alt} ; コンテキストメニューを消す
CoordMode, Mouse, Relative
mousegetpos, mx, my
PixelGetColor, a_color, %mx%, %my%, slow
CoordMode, Mouse, screen
blockinput, off
if ( a_color != 0xFCFCFC ) ; 0xFCFCFC は背景色
return 1
}
return 0
}
>>259 停止できないプロセスがあったり、
設定したホットキーが間違ってたりしてたようでした
そのアイディアももらいます
ありがとう
ひさびさにバージョンアップ(1.0.91.3 → 1.0.97.0)したらマウスボタンの押し上げ操作がおかしくなっとる……(゚д゚)
XButton1 Up::Msgbox, 1
XButton1 & LButton::Msgbox, 2
このコードで下のホットキーを呼び出すと、拡張ボタン離した瞬間に上のホットキーも呼び出されてしまう( 1.0.91.3 では自動でカットされていた模様 )
かといって、
XButton1::Msgbox, 1
XButton1 & LButton::Msgbox, 2
にすると上のホットキーが動作しない……(自分のマウスM705rが特殊なだけか?)
さて、どうしたものか
>>262 拡張ボタンのあるマウスないから MButton を左側にしたコンビキーでやったけど無問題 @Unicode on XP 32bit
ボタンイベント処理でバグ混入してるかもしらんから続報を待つよろし。
しかし、Syntax sugar は楽ちんだな
for k, v in ["boo", "foo", "woo"]
MsgBox, % v
for k,v in {a:"b", c:"d", e:WinExist("A"), g:3*5, j:A_AhkVersion}
MsgBox, %k% = %v%
params = 1|3|5|7|9
Loop, Parse, params, |
{
・・・
}
ってのは、もうやらんで済む
>>263 う〜む、ちなみにXButton2は通常通り動いている模様。( @Unicode on XP 32bit SP3 )
ますますわからん……。とりあえず一旦は前Ver.に戻してVerUP修正に期待すっかな。レスd
ところで最近2chのAHKコードをコピペ実行すること多いから、
ドラッグしてホットキー1発で実行できるコード書いてみた
#e::
Send, ^c
ClipWait, 1
code := RegExReplace( Clipboard, " ", " " ) ; 全角スペースを半角スペースに
file = %A_Temp%\AHKCodeExec.ahk
temp := A_FileEncoding
FileEncoding, "UTF-8" ; 文字コードをUTF-8に
FileDelete, %file%
FileAppend, %code%, %file%
FileEncoding, %temp%
Run, AutoHotKey.exe %file%
return
↓サンプル例(ドラッグして[Win]+[E]キーでOKダイアログ)
Msgbox, OK
チラ裏ですまんが、意外と快適なので載せとく
全くの初心者なのですが、
非アクティブのソフトに対してHomeキーを送りたいと思いメモ帳で試してみたところ、
#Del::
ControlSend,,Home,ahk_class Notepad
return
これで確かにWinキー+Deleteを押せば非アクティブの状態でもメモ帳にはキーは送られるのですが、
「Home」キーではなく「H」「o」「m」「e」のそれぞれのキーが送られてしまいます。
つまり
266 :
265:2011/04/04(月) 13:28:55.55 ID:+P1LNa5r0
すみません、手違いで途中送信してしまいました。
これで確かにWinキー+Deleteを押せば非アクティブの状態でもメモ帳にはキーは送られるのですが、
「Home」キーではなく「H」「o」「m」「e」のそれぞれのキーが送られてしまいます。
つまりWinキー+Deleteを押すとメモ帳にはHomeという文字が書き込まれてしまう訳なのです。
これを「Home」キーにするのはどうすれば良いのでしょうか。
{Home}
まー、もう答えが描いてあるけど。
> 「Home」キーではなく「H」「o」「m」「e」のそれぞれのキーが送られてしまいます。
こうやって自分で書いてるけど、1つのキーを表すのは 「〜」 でなく {〜} ってだけなのさ。
Home は {H}{o}{m}{e} の省略形。
269 :
265:2011/04/05(火) 09:56:45.62 ID:HR8tFI/T0
お、v2のテスト始まったのか
'=' を '`=' にしないと動かないよ><
他にも hoge = %hoge1%%hoge2% とかも hoge = % hoge1 . hoge2 にしないといけない
試しに移行しようにも、修正箇所山積みで起動させることすら難しい
あ、 hoge `= %hoge1 . hoge2 だった
代入は式になって、リテラルそのまんまは推奨しないってことでしょ。
a `= あいうえお
b := "かきくけこ"
c := a . b
MsgBox, % c
AHKに詳しい皆様に、ImageSearch、PixelSearchの使い方で
教えて頂きたいことがございます。
横書きの文章にところどころ挿入されている画像を指定するために、
ImageSearchまたはPixelSearchを使いたいのですが、説明には
左から右へ垂直方向に走査すると書かれています。
横書きの文章に合わせて横方向に走査するようにしたいのですが、
やりかたがよく分かりません。
どのようにすれば良いか、お知恵をお貸しくださいませ。
それを使う具体的なアプリを書いてよ。
そもそも行間とかの概念がないimagesearchをつかって、
文章に対してなにをしたいの?
識別範囲を狭めればいいだけな気がするが。
失礼しました。
PASORAMAという辞書ソフトです。本文中に
?come/k?m/
……
I [来る]
1 [SV(M)]
a〈人・動物・車などが〉(話し手の方へ)(やって)来る;(聞き手の方へ)行く[例]
b[SV doing] …しながらやってくる;やってきて…する[例]
みたいになっているのですが、この[例]の部分はマウス・クリックでしか選択できません。
([例]をクリックすると、例文ウィンドウが開きます)
画面上、○○番目の[例]をショートカット・キーでダイレクトに選択したいのですが、
この○○番目というのは横書き文書に沿っての順番にしたいと考えております。
箇条書きの数字のX座標は固定っぽいんで、まずその位置を調べるのがいいんじゃね?
▼
1 XXXXXXXXXXX
XXXXXXXXX
2 YYYYYYYYYY
3 ZZZZZZZZZZZ
▲
▼〜▲ の間を ImageSearch で数字の画像でやれば何とかなるかも
項目 の数字 (n) 画像の位置を調べる。なかったら終了。あったら変数 Y1 に保存。
次に、項目の数字 (n+1) の Y 座標を調べる。みつかったら Y2 として保存。なかったらコントロールの右下の座標をY2とする。
で、Y1〜Y2の間で「 [例] 」 の画像を調べて、あったらクリックしてやる。
>>278 おお、なるほど。そう発想すれば良いんですね。確かに、数字のX座標は固定されているみたいなので、
この方法で出来そうな気がします。
>>278さんのレスを見て、やっと
>>276さんのレスの最後の行の意味
が分かりました!
ちょっとやってみます。ありがとうございました!
280 :
名無しさん@お腹いっぱい。:2011/04/07(木) 06:30:06.42 ID:PVXsm7Ue0
お金払うのでAutoHotkeyのスクリプト書いてくれるようなとこ知らない?
デスクトップ上で色々開いてるウィンドウの中で
特定のアプリケーションのアクティブだけを切り替えるコードが知りたくて
色々調べてみたんだけど、素人すぎて自分じゃどうにもならない。
当面、自分にとって必要なのはその動作だけなので、
その為だけにプログラム一から勉強するのは時間と労力的に厳しい。
と思って検索してたんだけど、そういうHPみたいなのがみつからなかった。
>>280 こういうこと?
; 特定のウィンドウグループ
TargetWindow := Object()
TargetWindow.Insert("ahk_class 特定のウィンドウクラス1")
TargetWindow.Insert("ahk_class 特定のウィンドウクラス2")
TargetWindow.Insert("ahk_class 特定のウィンドウクラス3")
MaxIndex := TargetWindow.MaxIndex()
Current = 1
; [Shift]キー&[Esc]でウィンドウ切替え
+Esc::
Current++
If (Current > MaxIndex)
Current := 1
target := TargetWindow[Current]
WinActivate, %target%
return
こうな気がする
#IfWinNotActive 特定のアプリケーション
#a::WinActivate, 特定のアプリケーション
#IfWinActive 特定のアプリケーション
#a::Send, !{Esc}
仮想デスクトップ入れてAlt+tabとか
ちょっと違うけど「窓替え」も便利
>>270の新バージョンは
大まかには以前と何が変わったの?
それと、昨日も更新したみたい
>v2.0-a002-30017e5 is now available. The changes are:
>>284 キーバインドできるデバイスならフットスイッチ、ゲーム用リモコンとかおすすめ
>>262だが、新しいバージョンアップ(1.0.97.1)で拡張ボタンの不具合が改善されてた
AutoHotkey_Lに移行したらこれが動かなくなりました。
vk1c & Tab::send {End}
変換キーとTabを入力しても単にTabが入力されてしまいます。
どうしたら動きますか?
ちなみにこれらは動きます。Tabだけ動かないのも不思議な話です。
vk1c & t::send {Del}
vk1c & r::send {BackSpace}
vk1c & i::send {Insert}
vk1c & LCtrl::send {Home}
>>288 一応、こちらの環境では問題なく動く @Unicode on XP 32bit SP3
290 :
288:2011/04/09(土) 20:14:30.47 ID:oiIbw9PJ0
>>289 あれれ。もうちょっと調べてみます。報告ありがとうございます。
291 :
288:2011/04/09(土) 20:30:48.14 ID:oiIbw9PJ0
原因はこれでした。
!sc00F::send foo ;Alt+Tab
!+sc00F::send bar ;Alt+Shift+Tab
こうすれば動きました。
vk1c & Tab::send {End} ; 変換キー+Tab
Alt & Tab::send foo ;Alt+Tab
しかしこれは動きませんでした。
Alt & Shift & Tab::send foo
どうすれは動きますか?
>>291 > Alt & Shift & Tab::send foo
コンビネーションキーの仕様を確認すること。
指定できるキーは二つのみ
293 :
288:2011/04/09(土) 22:41:36.98 ID:oiIbw9PJ0
>>292 確認しました。では、こういう状況でAlt+Shift+Tabを指定するにはどうしたら良いのですか?
>>291 そんなことしなくても、これで問題なく動く。試してみれ
!Tab::send foo ;Alt+Tab
!+Tab::send bar ;Alt+Shift+Tab
vk1c & Tab::send {End} ; 変換キー+Tab
どうしてもトリプルコンビネーション使うなら
>>185
295 :
288:2011/04/09(土) 23:41:25.90 ID:oiIbw9PJ0
>>294 動きました。なぜ動かなかったのか謎です。
トリプルのやり方参考になりました。ありがとうございます。
Win7 x64 AutoHotkey_L x64を使用しています
現在のマスターボリュームを取得して保存した後に
マスターボリュームを最大にしてwavファイルを鳴らし
その後にマスターボリュームを元に戻すという動作をしたいのですが
SoundGet, MasterVol
MsgBox, % MasterVol
この段階で既に正しく取得できない様です
どうすれば上手く動作させることができますか?
>>297-299 ありがとうございます
リンク先のVista Audio Control Functionを利用して望み通りの動作ができました。
>>287だが、やっぱり拡張ボタンの不具合なおってなかったorz
今後修正されるかどうか怪しいんで、とりあえずドライバで拡張ボタン1をファンクションキーに割り当てることで回避することに
これで配列とオブジェクトが楽に使える
>>301 AHKとDropboxがどうつながるのかサッパリ分からない。
ポータブル化をAHKで実装してるってことでは
AHKをただのGUIアプリ作成言語として使ってるってだけでしょ
単一言語、スクリプトしか使えない人が
あまり適してない用途でものすごい力作を作ったりすることはまれによくあるw
それは俺のことか・・・
AHKしか使えないから、動画エンコードバッチからデジカメファイルのリネーム、
settimerで定期バックアップまで手を出してしまった。
車輪の再発明をするのが楽しくてたまらなくなるよな
いいんじゃね
まあC#とかPythonとかで作ったほうが楽だろうけど
すみません 流れを読まず質問です
FileAppendで追記する対象ファイルの文字コードはUTF-8が最適ですか?
答えなんぞ無いわな。
普通は追記元と同じにすると思うが。
>>310 自分もWeb以外はAHKしか使ったことないんだけど、勉強のためにC#、Python辺りでコーディングすると効率良い所とか教えてほしい
体感で構いませんから
>>312 追記する対象ファイルの文字コードは既に決まってるのでは?
新たに作るならUTF-8が無難かも。一部古いエディタは文字化け起こすけど
XPでは
SendMessage,0x112,0xF170,1,,Program Manager
でディスプレイを省電力モードにできたのですが
7の64bitでは動作しません
x64用の実行ファイルに変えてあるのですが
どなたかご存知ありませんか?
>>316 ありがとうございますできました
2にすればよかったんですね
ahkで作ったスクリプトが動作してる時にシャットダウンなどした場合、エラーメッセージが出て
シャットダウンできない場合があるので、ahkで作られたexeのプロセスをプロセス名などで指定せずに
全て強制終了したいんですがなにかいい方法ありませんか?
exe でも非表示のメイン窓はあるんで ahk_class AutoHotkey を探す。
で、窓IDからPID引いてプロセス殺す。
OnExitじゃ駄目なんだっけ?
右も左もわからない時代に、はやらせるページの人がサンプルを交えて解説してくれたからだと思う。
AHKは、ホットキー以外にバッチ+αの作業を行う場合に小回りが利いていろいろ便利。
ver.104805をXPsp3で使ってるよ
たまーにAHKがフリーズしてタスクマネージャとかtaskkillでもAHKを終了できなくなるんだけど
理由分かる人いる?
>>322 autoitとautohotkeyでは、できることはほぼ一緒だけど、記法が大きくことなっている(autohotkeyはたしかautoitベースだったが)と思っていたけど
autohotkeyでしか出来ないことがあるのか
なるほど
AHKの流行らせるページには世話になったわ
AutoItでも似たようなページがあれば試してみる気になるんだけど
AutoItは、キーバインド変更ソフトとしての用途だと面倒なんだよな
#UseHookに相当する機能がないから、AutoItのヘルプに書いてある通り
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
HotKeySet("{Esc}")
Send("{Esc}")
HotKeySet("{Esc}", "captureEsc")
EndFunc
こんな感じで書かなきゃいかんところが結構でてくる
ウィンドウ作ったりするのは楽なんだが、そっちメインにするならVisualStudioでも
使って設計したほうがはやい
AHKってEXEコンパイルしたら動作速いのかね
デコンパイルできる所を見ると、単にコードを内部に置いて翻訳しながら実行してる気がするけど
むしろ遅い。とはいっても起動時だけだけど。
スクリプト+Exeのパッケージなだけなんで。
>>328 やはりか。機械語にしてくれればWebアプリにも使えると思ったんだが
スクリプト言語であらかじめ機械語にコンパイルすることってできないのかな。できたら死角なしなんだけど
>>329 インタープリタで逐次翻訳するのをスクリプト言語と呼んでるだけで本質的な違いはない
インタープリタとコンパイラの両方同根してる処理系(Haskell言語のGHCとか)もあるぐらい
けどAHKには高速に動かしたい需要自体があんまりないしね
(それなりにあるJAVA,JavaScriptは高速化にかなりリソース割いてる)
おかげでOpenGLSLもろくにできねぇよ
今時のっつーかここ数年のマシンなら実行速度はほぼ気にならん。
RegisterCallbackで フック関数登録して、マウス移動のたびにスクリプト動くけど、
高負荷のときちょっと重いなってくらいで大したことないし。
PocketPC版も動かしてるけど、逆にコイツはインタプリタの遅さが目立って
ホットキートリガで数十行の処理とかウィンドウ一覧をループさせるとかの
処理でもたつく。
ソフトごとに音量いじったりできますか?
>>333 IfWinActive, ソフト1
SoundSet, 100
Else IfWinActive, ソフト2
SoundSet, 0
Else
SoundSet, 50
こんな感じの動作をタイマーかホットキーかOnMessage()に割り当てる
ウィンドウがフルスクリーンになっているかどうか判別する方法ない?
WinGet, foo, MinMax, A しても foo は 0 しか返してこないし上手くいかない
どんなアプリで、ウィンドウがフルスクリーンになっているかどうか判別したあと何をしたいのか
を書いた方が早く解決できる気がする
>>337 アプリは「NScripter」。ノベルゲームの一種。
簡単にウィンドウモードとフルスクリーンモードを切替えられるのだが、今回はこれがネック。
ゲーム内の各種ボタン押下の方法は座標をクリックするしかないんで、ホットキーでMouseClickしたいのだがどうもフルスクリーン時は微妙に座標がずれる模様
よって、ウィンドウモードとフルスクリーンの場合とで別の座標を指定したい、というのが今回の目的だけど未だに解決してない。いい方法あったらヨロ
>>338 ウインドウの座標, Style, ExStyleが違った
#IfWinActive ahk_class NScripter
F1::
WinGet,exStyle,ExStyle,A
if (exStyle & 0x8) { ; WS_EX_TOPMOST
SoundPlay,*64 ; フルスクリーン
} else {
SoundPlay,*48 ; 通常
}
return
>>339 おぉ、上手くいった! dです。
しかし最前面かどうか、のスタイルだと思ったのにこんな使い方もできるのか
これからは、めぼしいスタイルはとりあえず試してみることにするよ。ありがとう
AHKで作ったEXEは
すぐにそれがAHKで作られた物とバレてしまいますか?
アイコン変えたりファイルバージョンとか書き換えれば、素人には分からん。
AHK使いにはすぐバレる
そんなあなたに難読化
Winwaitみたいに基本的には待機の状態でAウィンドウが存在しなくなったらラベルA
Bウィンドウが表示されたらラベルBへ飛ばすことってタイマー使わずにできませんか?
sites.google.com/site/agkh6mze/howto/winevent
DesktopLighterもどきを作りたいんだけど
画面の明るさを0-100だか0-255で指定するようなコマンドってないですか?
最悪DLをクリックするスクリプトになっちゃうとは思うんだけど
出来ればDLとは独立してやりたいんです。
そういや 1.0.97.xx になって動かないスクリプトがあって何だろうと思ってたが、
obj._Insert とか obj._GetAddress あたりがスルーされてた。
まぁ、機能導入時の暫定仕様だったからしょうがないが、つい最近まで動いててすっかり直すの忘れてたわ
初代Autohotkeyはこのスレ的にはもう古いの?
公式サイトがAutoHotkey_Lを勧めてるから
やっぱり古いってことになるような
prcess,close使ったらタスクトレイアイコンが残るんですが
OSの問題だとは思いますがこれを消す方法ありませんか?
スマートな方法じゃなくていいのなら
マウスカーソルをタスクトレイの辺りで左右に動かすスクリプトが
ここの過去ログやフォーラムにあったはず
>>351 http://www.autohotkey.com/forum/topic26042.html の Tray.ahk をインクルードするか Tray_Refresh() だけをコピペし、
(ウチのWinXP SP3 では)↓のように prcess,close の直後に Tray_Refresh() を実行すると消える。
prcess,close
Tray_Refresh()
ウチでは↓のようにする(sleepを挟む)とアイコンが消えない。
prcess,close
sleep,200
Tray_Refresh()
354 :
352:2011/04/28(木) 18:30:26.97 ID:A7F8ornR0
今試したらsleep挟んでも消えた。
他の何かが影響してたかもしれない。
それ昔GetTooltipでお世話になった記憶があります
試してみましたが消えました!ありがとうございます。
何か便利なスクリプトありますか
今はMouseGesture.ahkだけ使ってます
何かって何だよ
色々あるが教えて君のために列挙は勘弁
テキストボックスに日本語を自動入力させたいんですが
^vでクリップボードから送る意外になにか方法ありませんか?
エディットボックス互換限定でいいなら
Control, EditPaste, String
S-JIS限定なら全角をコード化してSendで送る(SendConv でググレ)
UNICODE版で使えるかは知らん
>>356 ありますよ
それを作るのがAHKなんだがら
がんばれ
よく分からんが、x64 は 32ビット版DLL を直接ロード出来ないとかで、
呼び出しは何かのオブラートに包まないといけないらすぃ。
1) Softalk をコマンドラインで呼ぶ
2) 32ビット版AHKでロードして、x64からはメッセージで制御する
3) 32ビット版の Autohotkey.dll をCOM登録して COM上の32bit版AHKを x64 から操作する
めんどくせー、もうx86版使うからいいや、ありがと
MacのMagic TrackpadをWinで使う場合、純正ドライバーだと
マルチタッチ操作できないみたいなんだけど、一応信号は
出してるみたい。
AutoHotkeyでなんとかならないかな?
非表示のウィンドウにフォーカスが移ってしまったら
直前のウィンドウにフォーカスを戻すという事をしたいのですが
どうやったらよいのでしょうか。
WinGet, sty, ExStyle, A
とかで判定できるかと思いましたが、どうも違うようです。
現在は次善策として特定プロセスにフォーカスが渡ったら…という形にしていますが
穴があるのでなんとかしたいです。
次に入力するホットキーだけ無効にするような方法ありますか?
たとえば普段wordで
^f::Send,{Right}
みたいにしてるけど、
^qおした直後に^fしたときは検索になるようにするとか。
不完全だけどなんとなくそれっぽいのできました。ありがとうございました。
^q::
Input,InputChar,L1 M T0.5
if A_ThisHotkey != %A_PriorHotkey%
{
Send,%A_ThisHotkey%
}else{
Send,%InputChar%
}
return
v2って本家の後継なの?
Lの後継なの?
今からAutoHotkeyを導入したい人はどれを入れればいいのかな?
あと英語分からないよー
>>5を見て疑問に思ったんだけど
> 64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。
具体的にはどういう制約があるの?
64bitアプリをフックできなかんべ
1.1.00.00 - May 1, 2011
New features:
Implemented basic class definition syntax.
Implemented the new keyword for creating a derived object.
Added Func() for retrieving a reference to an existing function and improved IsFunc to recognize function references.
Added support for ++ and -- with object fields, such as x.y[z]++.
Changes:
Changed __Delete to not trigger __Call.
Changed OnClipboardChange to use AddClipboardFormatListener when available (i.e. on Windows Vista and later) to improve reliability.
Auto-concat with ( is more selective, so some invalid expressions like 12(34) will no longer work.
Fixes:
Fixed SetTimer Label, -0 to be treated as "run-once, very soon".
Fixed A_MyDocuments etc. to use SHGetFolderPath instead of undocumented registry keys.
Fixed non-empty ExcludeText causing windows with no text to be excluded.
>Added Func() for retrieving a reference to an existing function and improved IsFunc to recognize function references.
コレなに?
ごめん
>>379を訂正するね
参照によって関数を呼び出すのは
RetVal := Func.(Params)
こっちだけ
機能追加はもういいから、クソみたいな構文を何とかしてくれ
構文が気にいらんならAutoItにいけ
ver2で整理されるんじゃ無かったっけ?
まぁ、マニアックな方向の拡張の様な気もするし、
文法をガラリと変えるための基盤作りの様な気もする。
クソ文法だとか、よそで通用しないDSL(domain specific lang.)だといわれてるが、
マニュアル通りに処理書けば動いちまって余計な事しらべなくて済むってのはやはり素晴らしい。
クソ文法でない、汎用処理系になればなるほど、言語仕様を覚える比率が高くなって、
スクリプトいじっているうちに「俺何したいんだっけ?」ってなる。
一定時間(例えば10分とか)ごとに特定の処理をしたいとき
LOOPとsleepを使えば良いと思うんですが
CPU使用率が100%近く張り付いたりしてうまくいきません。
L版x86Unicodeなんですがどういう風に書いたら良いのでしょうか?
>>384 出来ることが同程度の言語なら、統一性のある文法のほうが学習コストは下がるよ
lisp並の高機能にしたいなら話は別だが
>>386 実は前に書いて投げてたところで
改めて書く前に聞いておこうと
>>358のレスをしたんです
そのすぐ後に書いて試してたらなにかうまくいった感じでした。
お騒がせしてすみません
ちなみにこんな風に今回書きました。
Loop{
処理
leep,1000*60
}
>>388 そういうときは、settimerをつかえばいいんじゃない?
settimer,untara,600000
return
untara:
処理
return
>>379-380 サンクス。関数名を文字列でコールする正式な手法を実装したってとこかな
今までオブジェクトに入れて呼び出してたけど、こっちに鞍替えしてみる
いまのahkって無名関数みたいなのある?
いいこと思いついた
それならJavascriptエンジンにahkの……
あれ?
あれれー??ww
396 :
名無しさん@お腹いっぱい。:2011/05/04(水) 15:00:08.40 ID:2CoZki3o0
初めて試している初心者ですが、これって結構バグがあって、ごまかして使うようなものですか?
例えば、
>>265の
#Del::
ControlSend,,Home,ahk_class Notepad
return
は動くけど、繰り返しキー入力すると、HomeがHOmeになったり、あるいは、
#Del::
ControlSend,,home,ahk_class Notepad
return
にすると、検索窓が開いたり、
#Del::
ControlSend,,,{F12},ahk_class Notepad
return
だと、一発で動作しないが、
#Del::
ControlSend,,,{F12}{F12},ahk_class Notepad
return
にするとうまくいくとか、なんか思うように動かない
>>396 >これって結構バグがあって、ごまかして使うようなものですか?
ごまかして使うものではないし、バグではない。
>>1のリンク先を熟読するなり、ググるなりして使い方を覚えるべし。
>#Del::
>ControlSend,,,{F12}{F12},ahk_class Notepad
>return
>
>にするとうまくいくとか、なんか思うように動かない
PCスペックや動いているソフトの負荷等でキー入力が無視されたりする。
SetKeyDelay で間隔を変更するべし。
やっぱごまかして使うんや
399 :
名無しさん@お腹いっぱい。:2011/05/04(水) 16:51:53.07 ID:2CoZki3o0
>>397 ありがとう
#Del::
ControlSend,,home,ahk_class Notepad
return
で、文字検索窓が開いて、omeが入力される理由がわからない?なぜなの?
400 :
名無しさん@お腹いっぱい。:2011/05/04(水) 17:00:17.91 ID:2CoZki3o0
どのウィンドウにフォーカスがあるかによって挙動が違うし、バックグラウンドにあっても入力されるあぷりもあるし、
されないアプリもあるようだ
NANJOYという補助入力アプリでもあったけど、ウィンドウ送信機能というのは完全には機能させることは難しい
のかな
AHKが、そんなに歯抜けなコマンドしか出せないツールだったら、
ここまで息が続いてるはずがないでしょ。
1000分の1秒を争って、notepadを制御する必要性があるならそれなりに仕上げる必要がある。
ないなら、適当にウェイトを入れて作れば動作する。
どんなアプリを制御するにも、適度にウェイトを入れる必要はある。
どれくらい入れるかは、AHKじゃなくてスクリプト制作者が決める。
それさえやれば、どんなアプリでも確実に動作する。
どうやって決めるかって? 通信プロトコルや、人間のコミュ力と同じだ。
相手の会話スピードや、理解力にあわせて会話しないと、会話そのものが成立しない。
相手がコマンドを受け取る能力がどれくらいあるかを、最初に適性として調べた上で、コマンドを投げる。
そのウェイトを入れる操作を「ごまかす」としてどうしても定義したいのであれば、ごまかしは必要。
402 :
名無しさん@お腹いっぱい。:2011/05/04(水) 17:32:41.29 ID:2CoZki3o0
ControlSendを使って
フォーカスのないJane Styleのレスウィンドウを開くということができないかやってるんだが、無理っぽい
フォーカスがあれば機能するが、ないと動かず
レス窓に文字列を入力するスクリプトも試してみたが、全く動かなかった
Notepadみたいな行儀のよいアプリは問題ないが、行儀の悪いのはダメってことか
NANJOYでも必ずしも100%動かなかったし、Jane Styleが悪いんでしょうねぇ
403 :
名無しさん@お腹いっぱい。:2011/05/04(水) 17:36:34.98 ID:2CoZki3o0
てすとしてたのは、こんな感じ
F12でレス窓が開くようJane Styleに設定してます
SetKeyDelay, 100,10
#m::
DetectHiddenWindows,On
ControlSend,,{F12},ahk_class TMainWnd
return
#n::
DetectHiddenWindows,On
ControlSendRaw,,aaa,ahk_class TWriteForm
return
#Del::
DetectHiddenWindows,On
ControlSend,,home,ahk_class Notepad
return
スクリプト晒しスレとかなんか無いの?
405 :
名無しさん@お腹いっぱい。:2011/05/04(水) 20:09:20.50 ID:2CoZki3o0
ウィンドウ送信はダメと諦めて、ウィンドウアクティベート後キー送信でごまかした
ていうか バックグラウンドで動かす前提なわけ?
そうでないなら WinActivate なり ControlFocus なりしてからSendしたほうが確実だと思うが
あとどうしても ControlSend使いたいなら Classより hWnd取得のほうが動く可能性は上がる
407 :
名無しさん@お腹いっぱい。:2011/05/04(水) 21:37:28.56 ID:2CoZki3o0
>>406 バックグラウンドで動かす前提ではないが、NANJOYというプログラムの手法をコピーしようとした
WinActivate→Sendでもいけた(NANJOYにはこの方法がなかった)ので、そうした
だいたいやりたいことができるようになりました
dクス
>>404 ここがそう
>>1にアップローダがあるので、晒すなら一旦上げてからここに説明を添えて書き込むと吉
409 :
名無しさん@お腹いっぱい。:2011/05/05(木) 23:06:48.28 ID:fbJHLtWd0
色々試してみて、結局このソフトってアドホックにウェイトを入れたり動くコマンドを探してごまかしながら
使う類のものであると結論
まぁ、大概のマクロソフトってそういうところがあるからしょうがないか
それにしても、ウィンドウ取得とか、対象アプリによってうまくいったりいかなかったり、コマンドによって
フォーカスが意図せず移ったり移らなかったり、裏で何が起こっているのかよくわからなくて、結局ロジック
では攻めきれない
意図したように動かない場合は、代替手法を次々と試していって、動くのを探すと言った使い方にしか
ならないね
410 :
名無しさん@お腹いっぱい。:2011/05/05(木) 23:47:58.20 ID:RHSBhBLV0
>>409 ???
要約すると、私には技術がありません。
Autohotkeyをまったく理解できませんでした。
ってことか?
>>410 要約すると、
「思うような物が作れなくてムカついた。
AHKの愛好家の何人かをイヤな気分にさせたくなった」
じゃないかな。
余所のアプリの操作なんぞは、別プロセスなんだし、作者も作成ツールも違う。
女も同じ口説くのと同じように、手を変え品を買えてアプローチせにゃならんのは当然。
最近だと FireFox4 が子ウィンドウ無しになったりして、ますますAHKで操作し辛い、とか。
>>412 Firefoxでどのような操作を行ないたいかにもよるけど、
Vimperatorと組み合わせると良いんじゃないかと。
Flashの操作は難しいけど、プラグインも使えば大概の動作がキーボードで処理できるようになるので。
414 :
名無しさん@お腹いっぱい。:2011/05/06(金) 03:17:36.33 ID:qrA6gzZF0
>>410 まるで、AutoHotkeyの神みたいな口ぶりじゃないか
ゴミカスは死ねよ
415 :
名無しさん@お腹いっぱい。:2011/05/06(金) 03:19:04.98 ID:qrA6gzZF0
自己紹介乙としか言いようがない極めて典型的アホレス
417 :
名無しさん@お腹いっぱい。:2011/05/06(金) 03:25:15.68 ID:qrA6gzZF0
>>412 まったくその通りだと思うぜ
AutoHotKeyのプロセスと対象アプリの動作は、全く非同期なので、どうやってタイミングをとるかが難しい
意図しているのと違う順序で物事が起こったりして動かないのだが、どういう順序で起こっているかを
知る効率の良い方法がないので、一発で動くことはほとんど無い
なんとかタイミングを変えようとするのだが、結局長いsleepとかを装入するぐらいしか解決法がないことが
多い
418 :
名無しさん@お腹いっぱい。:2011/05/06(金) 03:25:38.47 ID:qrA6gzZF0
完璧、完全主義者だねえ。・・・ハゲそうなタイプ
なるほど、全てのアプリケーションが外部から干渉されることを想定して設計していれば
問題ないってことか、素晴らしいね
オレはそんなシステム怖くて使えないけどね
>>409, 412, 417
少なくとも俺にとってはこれらは真実
ウインドウがアクティブになっててもキー入力は暫く受け付けなかったり、そんなのザラ
だから何
GW真っ盛りってことですよ
menuコマンドで作ったメニューの大きさって指定できませんか?
>>417 外部干渉を考えてないアプリを無理矢理制御しようってんだから当然の事だと思うが
やってみるまで分からなかったのか?
プログラムって書き手の意図を汲んで自動的によきにはからってくれるものではないんですよ?
uze-
こんなんだから日本じゃ廃れる一方なんだよ
>>424 autohotkey_lなら、メニューに任意の画像を指定することで、
項目のサイズが自動的に伸縮すると思う
menuの行ごとの文字列の色を変更できればなあ・・・
menuに縦セパレータを入れて二段メニューにできればなあ…
431 :
名無しさん@お腹いっぱい。:2011/05/06(金) 23:41:15.60 ID:+TpG+iTf0
age
AU3_Spy.exeや窓コンデでまったく表示できないアプリがあります。
どうやって取得できるようになりますか?無理ですか?
Winspectorを使うんだ!!
>>428 へー知りませんでした
L使いなのであとで試してみますm(_ _)m
435 :
名無しさん@お腹いっぱい。:2011/05/08(日) 13:48:11.84 ID:ReI+Pgjk0
前スレにあったやつ参考にして2chの特定板のスレタイ検索しようと思ってるんだけど
うまくいかない
Loop, Read, TargetWord.txt{
WordArray.Insert(A_LoopReadLine)
}
で検索したいタイトルの一部を一行に一つずつ(語ろう とか)かいたテキストからArrayに格納して
Loop, % b.MaxIndex() + 1 {
If ( (v := b[A_Index-1]) == 0x0A ) {
NumPut(0, buff, idx, "UChar")
for index, W_element in WordArray{
If RegExMatch(StrGet(&buff, "CP932"), "(?P<DatNum>\d+).dat<>(?P<name>" %W_element% "+)\((?P<res>\d+)\)", $)
MsgBox, % "DatNum`t" $DatNum "`nタイトル`t" $name "`nRes`t" $res
; Break
; idx := 0
}
idx++
} else {
NumPut(b[A_Index-1], buff, idx, "UChar")
idx++
}
}
引っかかったスレの記録とかは後回しにして
こうやってるんだけどどこがおかしい?
>>436 b := Array()
Loop,Read,TargetWord.txt
{
b.Insert(A_LoopReadLine)
}
Loop,% b.MaxIndex() {
buff := b[A_Index]
If RegExMatch(buff,"^(?P<DatNum>\d+)\.dat<>(?P<name>.+?)\((?P<res>\d+)\)$",$) {
MsgBox,% "DatNum`t" $DatNum "`nタイトル`t" $name "`nRes`t" $res
}
}
439 :
名無しさん@お腹いっぱい。:2011/05/09(月) 22:16:54.89 ID:1/rFgTn80
vista でスタートボタンって消せる?
>>438 検索元文字列が無くなる?と思ったけど一応試したら
>If RegExMatch(buff,"^(?P<DatNum>\d+)\.dat<>(?P<name>.+?)\((?P<res>\d+)\)$",$) {
で実行したときにエラーでた
RegExMatchのPattern部分に変数ってねじ込めないの?
>>440 すまん。
>>436の6行目理解してなかった。
それなら正規表現に検索文字列は入れないでMsgBoxの部分で
InStr($name, W_element)でチェックするほうがいいんじゃないか?
ものすごい単純な質問で申し訳無いですが
無変換とシフトキーの組み合わせで特定のキーを割り当てるときはこういう感じでいいんですよね?
vk1Dsc07B & shift::[
ブラケットキーを割り当てて使おうとしているのですがうまくいきません。
これを書き加えると
Error Invalid hotkey とでます。
つかっているキーボードなどで&が使えなかったりするのでしょうか?
>>444 動きました。非常に助かりました。
一時間近く何が間違ってるのか理由を探してグーグル検索してました。。
shiftと無変換の組み合わせをググッていたら
vk1Dsc07B & shiftという記述を使っているような記事がヒットしたのですが
これは間違っているのでしょうか?
すいません。もう一つ質問お願いします。
無変換キーを押すとaキーを押し、その後に左マウスボタンをダブルクリックするという動作をさせたいのですが、
以下のコマンドだとキーを設定しているアプリの全く関係ないコマンドが実行されてしまいます。
vk1Csc079::send a , Click 2
このキーではどこがまずいでしょうか?
ちなみにやりたいことは無変換キーを押すとaキーを押し現在選択されている
ツールからaキーに割り当てられているツールに切り替え
aキーに割り当てられたツールでダブルクリックをすると使えるショートカットを起動させたいのです。
このキー操作を割当てたいのは無変換キーではなく変換キーでした。すいません。
>>446>>447 ですが自己解決しましました。
Sleepをいれればよかったんですね。
お騒がせしました。ありがとうございました。
というかダブルクリックの指定がそのまま文字入力になっていたのが原因でした。
Sleepとかあんまり関係ないですね。
AHK からコンピューターをロックさせるとき、"Send, #l" とやってもできるのですが、
Win キーがオンのままロックされてしまって好ましくありません。
どなたかこれを回避する方法についてアドバイスいただけませんか?
SendMessage 等が使えそうなのですが、DllCall 同様理解するのが難しいです…。
DllCall("LockWorkStation")
でいいんじゃねーの?
win7だとキー送信ですら拾ってくれないし
DllCallしかないわな
>>451 おおすごい! そんな方法があるんですね!! 感動しました。
有難うございました (お礼書き忘れました)。
どういたしまして
あちゃー・・・Firefoxを3から4にアップデートしたら、ウインドウタイトルが独自形式になってしまった。
アクティブウインドウがFirefoxかどうかを判別して、いろいろ処理するコードが全部使えなくなった。
4の画面はこんな感じ
http://aquapple.com/wp-content/uploads/2010/05/1005142112.jpg [1]
WinGetTitle, wT, A
ifinstring,wT,- Mozilla Firefox
{
いろいろ
}
[2]
#IfWinActive ahk_class MozillaUIWindowClass
キー定義
#IfWinActive
この2つで、wTにFirefoxが含まれていたら云々って分岐をしていたのだけど、
1も2も稼働せず。
こういうタイトルを名乗らないソフトの場合は、どうすりゃいいですか?
firefoxのメニューバーを表示する
タイトル表示させる火狐拡張があったような気がしたが
この場合関係無いか
タイトル取れるがなあ。うちの環境では。
Firefox 4のahk_classはMozillaWindowClassに変わった。
ウチでもタイトルとれる
ってか、ウィンドウクラスが MozillaUIWindowClass なのって FireFox や Thunderbird くらいだし
タイトル文字列は誤爆がありうるし、(2)の方法でやるほうが、至極まっとうなやり方だよ。
ペンタブの右クリックやり難いので、ahkで無変換キーに右クリックを当ててるんだが
photoshop cs5では上手く動作しない時があって1晩どうしようか悩んでたんだが、
仮想キーコード使うとダメみたいでスキャンコードのみにしたらちゃんと動いた
vk1d::rbutton ;何故か何回か使うと反応したりしなくなったりする
vk1dsc07b::rbutton ;これもダメ
sc07b::rbutton ;スキャンコードのみだと安定動作
無変換キーってやっぱ扱いがちょっと違うのかな
GetKeyboardStateで見た感じ、無変換キー押すとvk1d以外に
vkf0, vkf2〜vkf6までトグルっぽい動作してるみたいだし
WinXP SP3 ahkバージョン:1.0.48.5
です。
ahk_Lの最新バージョンやxp以外でどうなるかは分からないですけど。一応参考までに。
今現在、window7 のエクスプローラーのフォルダ表示方法を変えるショートカットを作ってます
自分の場合、フォルダ表示は詳細表示(D)と特大アイコン(X)の表示しか使わないのでその二つを無変換キーで動かそうとしています。
#IfWinActive ahk_class CabinetWClass
vk1Dsc07B::
send,!v
send,d
return
#IfWinActive
#IfWinActive ahk_class CabinetWClass
+vk1Dsc07B::
send,!v
send,x
return
#IfWinActive
こういう感じにalt+v でエクスプローラーの表示メニューを出してそのまま表示方法を切り替える、力技のキー操作で動かすやり方しか思い浮かばなかったのですが
もっと他にスマートな方法はありますかね?もっと効率が良い方法がありましたら教えてください。Autohotkeyを使わなくてもできるようでしたらそれでもいいです。
それとできれば無変換はctrl+cの動作のためにシングルクリックの動作は残しておきたいのですが、無変換ダブルクリックで詳細表示、無変換トリプルクリックで特大アイコン表示としたいのですが
クリック数で特定のキー操作をさせることは可能なのでしょうか?やり方がありましたらそちらの方法も教えてください。
よろしくお願いします。
後半のみ
「KeyCount() 」で過去ログ検索。
あるいは、
#UseHook
F1::
F1_Count++
SetTimer, F1_Command, -300
Return
F1_Command:
If (F1_Count = 1)
MsgBox, シングル
Else If (F1_Count = 2)
MsgBox, twice
Else If (F1_Count >= 3)
MsgBox, 三回以上!
F1_Count=0
Return
Winhideで隠したいくつのウィンドウをWinshowで一気にShowすることってできませんか?
一つ一つをShowすることはできたんですが・・
なにも書かないと 直前のウィンドウを選択するみたいでうまくいきません
GroupAdd使うとか?
>>464 どうもです。こういう感じに記述したらきちんと動きました。
無変換よりF1のほうがいいですね。ありがとうございました。
#IfWinActive ahk_class CabinetWClass
#UseHook
F1::
F1_Count++
SetTimer,F1_Command, -300
Return
F1_Command:
If (F1_Count = 1)
send,!v+x
Else If (F1_Count = 2)
send,!v+d
Else If (F1_Count = 3)
send,!v+r+{Enter}
Else If (F1_Count >= 4)
{
send,!v
send,a
}
F1_Count=0
Return
#IfWinActive
>>465 GroupAdd、正規表現、配列のループでできる
; 配列のループ処理
For k,v in ["ahk_class クラス1", "ahk_class クラス2", "ahk_class クラス3"]
WinShow, %v%
#IfWinActive, ahk_group Copy_and_Paste
誤爆ですすいません
AHKでGUI作ってるんだけど、リストビューの幅を取得する方法ってないかな?
幅の指定は LV_Modify でできるけど取得する関数が見当たらない
間違えた LV_ModifyCol だった
ごめん、自己解決。SendMessageでできた
スレチになるかもしれませんが、AHKで
タスクトレイに常駐しているEvernoteを終了する方法はないでしょうか?
今、
run C:\TrayCommand\traycmd.exe /R /K=UE C:\Evernote3.5\Evernote.exe
run C:\TrayCommand\traycmd.exe /R /K=UE C:\Evernote3.5\EvernoteTray.exe
としているのですが、ノーリアクションです。
このTrayCommandに拘らないので、EvernoteをAHKから終了する方法を教えてください
evernoteつかってないからわかんないけど、wincloseじゃダメなの?
タスクバーにevernoteがなくても、タスクトレイに常駐しているのです。(メインウインドウをとじてもタスクトレイにいる。)
AHK詳しくないのですが、それだとwincloseではタスクトレイのソフトを終了できないですよね?
Process, close プロセス名でちょこっとやったのですが無理でした。(これは中途半端なので余地はまだまだあるのですがわかりません)
TrayCommandはAHK非経由では動いてんの?
プロンプトやバッチからj実行して試してみた?
wincloseつかうなら DetectHiddenWindows, On にしてみ
478 :
名無しさん@お腹いっぱい。:2011/05/18(水) 16:11:23.83 ID:ss71f63x0
タスクトレイにいるバックグラウンドタスクはコントロールできないかもね
できる鉄板があれば知りたいが
いままでタスクトレイのアイコン関係はAHK経由でTrayCommandで全部やっていました(少ないけど成功していました。います)。
EvernoteはTrayCommandでは無理かもしれませんね。
プロンプトやパッチというのはわからないので^^;、実行していません。
DetectHiddenWindows, Onを、スクリプトのautosection(?)に書きましたが無理でした。
まぁ手で一個ぐらいやればいいんでしょうが気になるので。
480 :
名無しさん@お腹いっぱい。:2011/05/18(水) 17:12:47.54 ID:ss71f63x0
Process, Exist, PID-or-Name
でプロセスIDを探し、
Process, Close, PID-or-Name
で該当プロセスをクローズする
じゃダメかな?
481 :
名無しさん@お腹いっぱい。:2011/05/18(水) 17:18:27.02 ID:ss71f63x0
#c::
Process, Exist, EvernoteTray.exe
Process, Close, %ErrorLevel%
return
で一応死んでくれたよ
このスレでよくある話だけど、なんのために「Evernoteを終了」させたいのか
が抜けてる。これを書くと、違った視点で問題解決方法が見つかることが多いのだが。
PC買い換えて64bitにしたらちゃんと動かなくなったスクリプト多数で
関係なさそうなものまで動かなくなるし
原因突き止めて直すのがめんどくさすぎる・・・
484 :
名無しさん@お腹いっぱい。:2011/05/19(木) 09:28:49.49 ID:O/UKtCEE0
開発時は動いていたのに、使っている内に微妙に動作が変わる場合がある
スクリプトリセットかけて治る物ならいいが、改善しない場合もある
そういう性質の物なんだろうが、なかなかスッキリしない
AHKは、機嫌の良否があるね。
5スレくらい前だと思うけど、XPのPCを数日以上使うと、スクリプトの動作速度が異常に遅くなり、
スクリプトを再起動しても直らず、OSを再起動しないと回復しないって症状が話題に出てたはず。
俺はその当時、Pen4を使ってたので、その症状がでたときの影響が大きくて悩んだ。
いまはマルチコアPCにして、その症状が出てるかどうかすら判別できないほど快適になって、
悩みも消えてしまった。
486 :
名無しさん@お腹いっぱい。:2011/05/19(木) 17:05:24.83 ID:h7mLc6w40
>>483 カスタマイズ好きにはそういう制限が非常に面倒くさくて困るね。
7にするにしても64bit版は選ばないほうがいいのかな。
メモリも4Gまで不要な使い方しかしないなら割り切ったほうがいいのかな。
家はXPx86で会社だとWin7x64
常駐系スクリプトは容易に動かないけどx86版でコンパイル済みのは
結構動いちゃうという罠
DllCallとかVarSetcapacityとかこってりしているけど
それなりに動作するから不思議
新機能の COM とかで複数エクセルを集計するのとかの
書き捨てスクリプトはx64でも無問題なんだけどな
Ctrl押しっぱなしになる不具合が最近おきない。
治ったの?
>>481 ありがとうございます。それで成功しました。助かりました。
Process, close, EvernoteTray.exe
とはしたことがあったのですが、成功せず、後ろのNameをいろいろ変えていました。
この掲示版でおしえてばかりしていますが、ほんと教えてくれる方いなければ
こんな便利なソフト使えませんでした。
evernoteの終了の目的は、ゲームをする際に余分に起動しているソフトをまとめて終了する
あるいは戻すためでした。
Evernoteは神ソフトだとおもっているのでこのスレでも沢山の方がつかっていると思っていました。
64bitのwindows7やめとこう。リスク高いね
490 :
名無しさん@お腹いっぱい。:2011/05/19(木) 21:49:11.95 ID:zw5p93r60
491 :
名無しさん@お腹いっぱい。:2011/05/19(木) 21:52:08.26 ID:zw5p93r60
Process, close, EvernoteTray.exe
と
Process, Exist, EvernoteTray.exe
Process, Close, %ErrorLevel%
で何が違うのか?よくわからないところだ
1つの厄介なキーをWindows上で粘着しないでください
>>492 Write it in English
>>488 うちもいつのまにか直っていた
リピートなんかでフックに割り込まれるのもなくなった
XP Home SP3
AHKで作ったGUIリストビューの行を
交互に色分けしたいのですが
やっぱWindowsAPI勉強しないとダメですか?
現状その機能はないし、開発ベクトルもそっちに向いてないし
そうなるね
凝ったGUI作るならC#とか習った方がいいんじゃないかな。タダでできるよ
2010からLiveアカウント必須になったしなんだかなーって思うけどね
〃〃∩ _, ,_
⊂⌒( `Д´) < ヤダヤダ!API勉強するのめんどいから
`ヽ_つ__つ AHK使ってるのに
ジタバタ
_, ,_
(`Д´ ∩ < 今更コンパイラ言語勉強するのもヤダヤダ
⊂ (
ヽ∩ つ ジタバタ
〃〃
∩ _, ,_
⊂⌒( ゚∀゚) < ・・・と思ってたらこんなん見つけた
`ヽ_つ ⊂ノ
Listview colors for individual lines
http://www.autohotkey.com/forum/topic9266.html
C#でINIファイルにデータセットするダイアログ作って
AHKから呼び出すって程度なら
半日くらいのお勉強でできそうではある。
>>501 試してないけど
Compile_AHK.exe /auto path\to\script.ahk
The first of two Parameters has to be:
/auto to Compile with existing settings from the last compilation
/nogui to Compile with existing settings and no warnings
The second Parameter has to be the full path of a script.
コンパイルしたexeを見つけるとウィルスソフトが激怒するのは何とかならないのでしょうか
UPXをOFFにしてもダメ?
Auto-executeセクションについて勉強しなはれ
ある業務アプリにデータを入力するときに、量が多すぎるのでエクセルにデータを
まとめてAutoHotkeyで業務アプリにデータを自動で入れていきたいのですが効率が
悪くて悩んでます
エクセルの指定セルの値をコピーして、ある業務アプリの入力欄にペーストしていく
スクリプトを作りたいのですがうまくいきません。
たとえば、エクセルのA1からC10まで以下の様な感じにデータが入っている場合
A B C
1 種類 数量 価格
2 りんご 10 100
3 みかん 20 300
4 バナナ 5 50
---以下省略---
509 :
508:2011/06/07(火) 16:47:28.07 ID:oRehokKf0
続き
現状の流れだと無理やり
1 エクセルをアクティブにする
2 A1のセルをコピーする
3 業務アプリをアクティブにする
4 マウスカーソルをペーストしたい座標(入力欄)に移動する
5 値をペースト
6 1に戻り、A2のセルをコピー(セルを一つずつ移動させていく)
7 また指定アプリをアクティブにして別の指定項目に移動させてペースト
と繰り返す流れなのですが、うまく動かないし、流れを見てのとおり効率が悪いです
A列からC列のセルを範囲指定してクリップボードにコピーし、指定アプリを
アクティブにして、タブで区切られているであろうクリップボードの内容を順番に
ペーストしていきたいのですが、難しすぎて分かりません。
何かいいアイデアや参考になるスクリプトのサンプルがあれば教えて頂けないで
しょうか?
for文で回して、そのつど座標をずらしてコピーペーストするのが一番簡単だろうけど、
俺だったら、エクセルのデータをまず全部抜き取って、セルごとに変数で保管して、
そのあと業務アプリにまとめて貼る方式にする。
サンプルとかいらないほど基本的な構文で出来るはず。
forじゃねえや。loopだ
512 :
508:2011/06/07(火) 18:15:59.01 ID:oRehokKf0
まだ、AHKに触りだして一月も経っていないので、処理はなんとなくイメージできる
のですが、具体的な構文がよく分からないんです。
>俺だったら、エクセルのデータをまず全部抜き取って、セルごとに変数で保管して、
>そのあと業務アプリにまとめて貼る方式にする。
自分も入力したいエクセルデータをまとめて抜き取ってから、業務アプリに切替えて
入力すべき座標に入力すべくデータをペーストしていくのが効率がいいと考えては
いるのですが・・・
AHKでエクセルを操作したり、エクセルデータの扱い方が分かりません。
プログラムからのエクセル操作はCOM経由でできるはずだぞ
「AutoHotkey COM Excel」でググルといくつかでてくる
それよりも手動でエクセルのデータをcsvで保存して、それをAHKで読み込んだらいいと思う
難しいならいきなり自動化せずに、まずは簡単なところからいきましょう
csvやタブ区切りの処理「AutoHotkey csv」でググればいい
英語での検索を恐れないといいよ。公式のサイトのフォーラムで同じようなことをしている人が引っかかるし。
Loop,PARSEで改行分けて、StringSplitでタブ分けるならこんな感じ
A1からC2をエクセルでコピーすると、以下のような文字列になるから
「A1\tA2\r\nB1\tB2\r\nC1\tC2」
Loop, parse, clipboard, `n, `r
StringSplit, g%A_Index%r, A_LoopField, %A_Tab%
MsgBox,% g1r1 A_Tab g1r2 "`n" g2r1 A_Tab g2r2 "`n" g3r1 A_Tab g3r2
とりあえずエクセルで縦3横2コピーしてから上3行実行してみれ
んでリファレンスよく読んでがんばれ
昔似たようなことを Excel→Accessフォーム間でやってたような
皆が言ってるように一括でデータ抽出するほうがいいと思うが
Excel上の操作が不可欠なところはAHKでやろうとせずExcel側のマクロ使ったほうが確実かも
ADO 使えばいいんでわないだろうか
517 :
508:2011/06/07(火) 23:25:10.17 ID:oRehokKf0
みなさんレスありがとうございます
まずは
>>514のコードすらよく分からないので、
>>513のキーワードで
ググリながらコードを解析しつつ勉強してきます。
VBなら多少できるのですが、AHKの独自の構文にまだ慣れていません。
IF文もVBとちょっと違うので、入れ子とかうまく使えなかったりするレベルなので
また何か分からなかったら質問させてください
Esc & i::Send,{Down}
というマップがあるとき
shift, esc, i で Send, +{Down} になるようにしたいんですが
一番上の命令を書き換えないと無理でしょうか?
VBスクリプト書けるなら、AHKとコラボするとずっと楽だよ
このスレや過去ログを ScriptControl で検索するといい
>>518 Esc & i::Send, {Blind}{Down}
そうだね
VB、VBスクリプトどっちでもいいけど?そちらに慣れているなら、
VBからAutoHotKeyを使うとか、文法がしっかりして機能が似ているAutoItを使うのがいいかも知れないな
キーフックを動的に設定する方法が思いつかないので質問します。
外部ファイルを読み込んで、それを元にキーフックと処理を設定できないでしょうか?
たとえば、外部ファイルに
f->send rr
d->msgbox ee
と書くと
f::send rr
d::msgbox ee
として動作するようにしたいです
fやdはautohotkeyで設定できるものなら何でも許容させたいのですが。
ホットキーの動的割り当ては Hotkeyコマンド
Sendとかmsgboxとかは1コマンドづつ関数でラップして動的関数で適当に飛ばすとか
もしくは外部ファイルをAHKのコマンドルールに置換したtmp.ahk吐き出して実行するスクリプトとか
(例でいうと -> を :: にするようなの)
msgboxとか入れたいなら
ahkファイルを出力しちゃうのが早いだろうね
んで#includeするとかrunするとか
まぁ、パースして一時ファイルに吐き出すのが確実だわな
パース結果が正しいかどうかの検証もできるし
どうしても一時ファイルが嫌なら、Autohotkey.dll 使って、
AHK の中に AHK もう一個立ち上げるっつー方法もあるが
>>523-525 一時ファイルを作成するのですか
思いつきませんでした。
autohotkey.dllの採用は見送り、一時ファイルで対処したいと思います
ありがとうございます
clipsaved := clipboard
Loop, Read, Urlmemo.txt
{
if(%A_LoopReadLine%==%clipsaved%)
{
MsgBox, すでに追加済みです。
return
}
}
FileAppend, %clipsaved%, Urlmemo.txt
1行1URLのテキストにクリップボードにあるURLを追記していきたいんだけど
if(%A_LoopReadLine%==%clipsaved%)
でillegalcharacterがあるっていうエラーが出る
たぶんURLの/か.だと思うんだけどどうしたらいいかな?
俺も似たようなことをやってるけど、loop,readは使わず
Loop, Read, Urlmemo.txt
↓
fileread,data,Urlmemo.txt
loop,parse,data,`n,`r`n
{
%A_LoopReadLine%
↓
%A_LoopField%
}
これでやってるけど、とくに問題は起きてないな
あとこの方法だと、テキストファイル全体に対してifinstringや正規表現の検索が一度で出来て便利。
>>527 そういう時はまず /や.のないテキスト用意して実行してみ
やってみりゃわかるがそれでもエラーは出る、問題は別の所
> if(%A_LoopReadLine%==%clipsaved%)
()とるか %%とるか する。
ファイルの中身が "hoge"
クリップボードが "hage" だと仮定して
この文ではhogeとhageの文字列比較ではなく、変数hogeと変数hageの比較をしていることになる
それと、 == で比較すると厳密な比較になって大文字小文字違いでも弾かれる
文字列比較なら Instr() か StringGetPos使うほうがいいと思う
ついでに FileAppendは行単位で追加されるわけじゃないから任意に改行入れてやる必要がある
>>528 教えてくれたのでもエラーでたけど
%で括ってるのをとったらうまくいった
ありがとう
逆に追加じゃ無くて削除したかったら
fileread,data,Urlmemo.txt
RegExReplace(data, %clipboard%`r`n ,"")
しかない?
>>529 %とったらうまくいった
詳しく教えてくれてありがとう
Windows 7でタスクバー中クリックで閉じるをやるにはどうすればいい?
LButton送信、待機、ウィンドウを閉じるだとなんか不安なんだが。。
>>508 つーかさ、ExcelのVBA使って、業務アプリに直接入力した方が遙かに早くね?
業務アプリの入力ボックスのハンドル取得して、SendMessageでポポポポーンと
Windows7のエクスプローラにPostMessage(WM_Command)が効かない(他のWinOSでは効く)
本家で同じような質問してるやつがいるけどレスが無い
環境のせいのような気もするしどうしたものか
>>532 左クリック送ってアクティブ化
アクティブウィンドウを取得
WinClose の流れでいいんでないの
>>534 Windows7のエクスプローラ(つーかVista以降だけど)は、コマンドを受けるのが
トップレベルウィンドウ(CabinetWClass)じゃなくてその子の
ShellTabWindowClassクラスのウィンドウになっている。
親からクラス名でウィンドウハンドル探せばいけるだろ
>>536 そっちでやってんだけど効かないんだよな
なんか見落としがあるのかなあ
すまん、レス書いた途端単純ミスに気づいた。すまぬw
; マウスポインタの左上座標が含まれるモニタのワークエリアを取得する・取得に成功したらTrueを返す
GetCurrentMonitorWorkArea(ByRef _mLeft, ByRef _mTop, ByRef _mRight, ByRef _mBottom){
CoordMode, Mouse, Screen
MouseGetPos, x, y
SysGet, mCount, MonitorCount
Loop, %mCount%
{
SysGet, m, MonitorWorkArea, %A_Index%
if(mLeft <= x && x < mRight && mTop <= y && y < mBottom){
_mLeft := mLeft
_mTop := mTop
_mRight := mRight
_mBottom := mBottom
ココ→ return True
}
}
return False
}
ココ→の場所で
「Return's parameter should be blank except inside a function.」
と出てしまうのですが、どういう意味でしょうか?
ほぼ1年ぶりにAHK_L本体を更新したらそれまでは問題なかったのに上のエラーを吐くようになりました
540 :
539:2011/06/12(日) 00:26:45.37 ID:UkKSSyyqP
同じスクリプトをUTF-8で保存しなおしたらもとに戻りました
なんでだろう
無変換キーにスペースキーを割り当てる記述はこれでいいと思うんですが
vk1Dsc07B::send, {Space}
この書き方だとnotepadやエクスプローラーやブラウザなどではきちんとスペースキーがおされたことになるのですが
ペイントソフト全般(フォトショップ、イラストレーター、Saiなど)ではSpaceキーのショートカットで
使うハンドツール(手のひらツール)が機能しないのですが何か書き足りないのでしょうか?
>>541 もう少し補足しますと
一応Spaceキー自体は入力されてるようなんですが
無変換キーを押しっぱなしにしても、スペースキーが連打されてるようになってるみたいです。
無変換キーを押しっぱなしにしたらスペースキーが押しっぱなしになっているようにするスクリプトの書き方みたいなものが必要だったりするのでしょうか?
リマップはどう?
vk1Dsc07B::Space
>>543 動きましたありがとうございます。
けれど問題があって、自力で解決しようと思って質問に書かなかったんですが
自分が本来やりたかったのが
無変換キーにスペースキーとシフトキー同時押し
エスケープキーにスペースキーとシフトキー同時押しで左マウスボタンダブルクリック
という動作でして、リマップだとこういったキーの組み合わせができないみたいですね。
ただちょっと調べたところ以下の書き方で機能しました。お手数かけました。
vk1Dsc07B::
SendInput {Space down}
SendInput {Shift down}
keywait, vk1Dsc07B
SendInput {Space up}
SendInput {Shift up}
return
esc::
SendInput {Space down}
SendInput {Shift down}
SendInput {Lbutton 2}
keywait, esc
SendInput {Space up}
SendInput {Shift up}
return
押下と押下解除はイベント分けられるよ
vk1Dsc07B::send, {Space down}
vk1Dsc07B up ::send, {Space up}
半年前の日付はどうやって取得すれば良いんでしょう?
例えば今日の日付 (2011/06/12) に対して 2011/01/12 を返す、というものです。
AHK の質問というよりアルゴリズムの問題なのですけど、ここ数日難儀しています。
宜しくお願いします。
今のAutoHotKey_Lってデフォで標準入出力扱えたりする?
クリップボードの内容にPerlワンライナーで処理させるGUIアプリ作りたいんだが。
>>546 Envadd,YYYYMMDDHH24MISS形式が入ってる変数名,% -365/2,days
何日かズレるかも
>>546 俺は日付、時間計算ならUNIX時間に変換した方がメンテ楽だった。
182日前を計算したいならこんなの。
;現在時刻をUNIX時間に変換
T = %A_Now%
T -= 1970,s
;現在のUNIX時間から182日前を計算
six += T - 15724800
;182日前のUNIX時間をYYYYMMDDHH24MISS形式に
S = 1970
S += six,s
;YYYYMMDDHH24MISS形式を2011/01/12等に
FormatTime, TimeString, %S%, yyyy/MM/dd
550 :
546:2011/06/12(日) 21:32:08.37 ID:iQaCZCeR0
>>548,549 助言ありがとうございました。
お二人のレスみてたらこんなのを思いつき、目的を果たすことができました。
Msgbox, % PreviousMonth(A_Now, 6) A_Day
PreviousMonth(date, value)
{
Loop, % value
{
date := SubStr(date, 1, 6) "01"
date += -1, D
}
Return, % SubStr(date, 1, 6)
}
しかも今日の半年前は 2011/01/12 でなくて 2010/12/12 でした…。
質問です。OSが64bitか32bitか、判別する関数なり方法はありますか?
ifexist,C:\Program Files (x86)
msgbox,64bit
else
msgbox,32bit
じゃ不確実ですかね?
それだと AHK x86 @ Win x64 で 4bytes(32bits) になるような
妥協的だが、AHKだけで判断するなら
>>551 でよさそうな感じ
>>552-553 thxです。
とりいそぎ、最初に書いた原始的な方法で分岐させることにします。
>>550 すげえw強引すぎてちょっと感動したw
文字連結と引き算の順番を整えればもっと簡単に
年月日が分かれてないならRegExMatchとかで分けないとだめだけど
kyou := A_YYYY A_MM A_DD
mukasi := A_MM > 6 ? (A_YYYY A_MM) -6 A_DD : (A_YYYY -1 A_MM) +12-6 A_DD
MsgBox,% kyou "`n" mukasi
常に最前面はできたんですが常に最背面ってAHKでできますかね?
公式のフォーラムとかをみてもそれらしいスクリプトが見つけられませんでした。
特定のアプリが事あるごとに最前面にでてきて邪魔なので制御したいんですが無理でしょうか?
Windowsにそういう機能はがないからしゃーない
DllCall で デストップの子ウィンドウにしちまうって手も無くはないが
原始的な方法として、ループ回してそのウィンドウが前に出てきたら直前のウィンドウを前に出し直す、って方法はあるだろうけどね
・・・と、同じことをやりたいと思ってたら違うようだな。
おれがやりたいのは、AHKで生成したGUIの最背面配置だった。
>>556の
>特定のアプリが事あるごとに最前面にでてきて邪魔
これは、ifwinactiveで検出して、速攻でWinMinimizeさせたら解決するんじゃ?
564 :
546:2011/06/13(月) 13:50:13.09 ID:kIU82ML30
565 :
546:2011/06/13(月) 14:53:54.09 ID:kIU82ML30
結局
>>555 を採用させていただきました。ありがとうございました。
>>560 DllCall("SetParent", "uint", WinExist(), "uint", Window_ID)
これでahk_class Progman(背景ウインドウ)の配下にしてしまえばおk
戻す時はWindow_IDを空にすること
BBLeanの場合は確かahk_class BackgroundWindowClassでよかった気がする
ところで、流行らせるページの「タスクトレイに最小化」って、
AHK_Lの方でUTF-8に変換してから使ってみたんだけど、
どう足掻いてもTeraPadでは正常に動作しないみたい
しかもツールチップには頭文字しか表示されないし・・・・
誰かAPIとかDLLに詳しい人が、組み込み易い修正版出してくれないかな
組込み向けにコード整理だけして放置した奴ならあった。見やすくなってるかは微妙
ttp://www6.atwiki.jp/eamat/pub/others/MinimizeToTray_Mod.zip ※UTF-8変換でAHK_Lでも動いたけどツールチップ化けはそのまま
NOTIFYICONDATA 構造体のcbSize/szTipあたりをどうにかすればいいのかな
(AHK_L使いじゃないのでよく分からない、自力でどうにかして下さい)
ちなみにTeraPad格納はうちではオリジナルで問題なく動作したよ
WinXP SP3
AHK_L unicode 1.0.48.5
TeraPad 1.0.8
MinimizeToTray.ahk (original→UTF-8コード変換)
サイズ
size := 4 ;DWORD cbSize
+ A_PtrSize ;HWND hWnd
+ 4 ;UINT uID
+ 4 ;UINT uFlags
+ 4 ;UINT uCallbackMessage
+ A_PtrSize ;HICON hIcon
+ ( A_IsUnicode ? 2 : 1 ) * 64 ;TCHAR szTip[64]
NumPutとかで使ったアドレス
cbSize &NOTIFYICONDATA
hWnd &NOTIFYICONDATA + A_PtrSize == 8 ? 8 : 4
uID &NOTIFYICONDATA + A_PtrSize == 8 ? 16 : 8
uFlags &NOTIFYICONDATA + A_PtrSize == 8 ? 20 : 12
uCallback &NOTIFYICONDATA + A_PtrSize == 8 ? 24 : 16
hIcon &NOTIFYICONDATA + A_PtrSize == 8 ? 32 : 20
szTip &NOTIFYICONDATA + A_PtrSize == 8 ? 40 : 24
ShellNotifyIconはこれで動いてた
今はめんどくさいからAHKのトレイアイコン使ってるけど
autohotkey version2 のスレッドがautohotkey forumで頻繁に上がってくるけど
使っている人は居る?使い心地を聞きたい
571 :
567:2011/06/19(日) 08:01:39.49 ID:b/JQmRst0
>>568 290行目のSubStr()直前にあるStrをAstrに書き換えたら、
ツールチップ化けが解消して完璧な動作になりました
eamat.さんに心からトンクス
すいません 質問させてください
KeyWaitを使って複数のキーのキーリピートを防止させてるのですが
KeyWaitを使ってるキーを複数同時に押した際
最後に押したキーを押しっぱなしのままですと 先に押したキーが反応しなくなってしまうのですが
そうさせないには
>>177 の後者の方法を取るしかないのでしょうか
Windows 7 x64で、まともに動くWheelRedirectあるの?
AutoHotKeyに限らず、大抵32bitしか対応していないか、特定のコントロールクラスでスクロールできなくなる。
>>573 使ったことないけどかざぐるマウスの64bitは?
ControlSend使ってるんだけど ひらがなカタカナを修飾キーに使った場合で {PGUP} {PGDN} を使ったとき
例えば
vkF2sc070 & r::
ControlSend ,,{PGUP},ahk_id %controlHWND%
return
みたいにしたとき
ひらがなカタカナキーが押しっぱなし状態になるんだけど 俺だけ‥?
AutoHotkey.dllを使う場合はどうやってマクロを実行したらよいのですか?
コマンドラインからAutoHotkey.dll macro.ahkで実行しても動きません
>>578 あ、半角全角キーと勘違いした上に
これはこれで動作が良く解らんな・・w
半角全角キー押したあとはカタカナひらがなとか無変換キーでも反応してしまうみたいだ
win7 SP1 64bitでAHK_L最新版をUnicode 64bitで使用しています。
AHK_LではHotstringで直接日本語に置換できるそうですが
うまくできません。。。
::,::,
のように,半角カンマを全角カンマに置換したいのですが,
半角カンマを入力すると半角スペースに置換されてしまいます。
全角カンマではなく,「テスト」など他の文字列に置換しようとしても同様でした。
どうすればよいのでしょうか?
>>582 メモ帳でUTF-8で保存したり,SciTEでUTF-8 with BOMで保存した上で
再度実行してみましたがダメでした・・・
このスレの暗黙のルール
ダメといってるスクリプトを丸上げして見ろ
これで修正不能だった例を見たことがない
何度もすみません・・・
以下のようなスクリプトです。
::,::,
Alt::
~LWin::
~RWin::
LWin Up::
RWin Up::
#m::
return
カオス
すみません,どうやらGoogle IMEを使っているのが原因のようでした。
MS IMEに切り替えたところ,正常に変換されました。
お騒がせしました・・・
何故AutoHotkeyは日本では流行ってるんだ?
世界のトレンドではautoitのほうがダントツなのに
こんなソフトありませんかスレでやたらAutoHotKeyで出来るとかAHK使えとか
宣伝?されてたからじゃね?
オレもそれで知ったし、はじめに知ったのがAHKで、AutoItなんて知りもしなかった
AHKってautoitのパクリって歴史もあったんだぜ
はじめautoitはオープンソースだったからソースコードも公開されてたから
AHKかautoitのバージョンが上がるごとにコードをパクって来た
そのくせにautoitを批判してきたの
それに頭が来たautoit開発者がオープンソースを取りやめてクローズにしてしまった
そういう歴史から俺はautoitを使ってる
×AHK か autoitのバージョンが上がるごとにコードをパクって来た
○AHK が autoitのバージョンが上がるごとにコードをパクって来た
だよな、俺もパクリってのが許せなくてAHK使ってる
パクリが許せないのにAHK使ってる
日本語でw
>>591 そんなに宣伝したきゃ
「autoitを流行らせるページ」
みたいなサイトでも作ったら?
AutoItの何がいかんて、キーカスタマイズがとんでもなく面倒なこと
大したことない処理なのに全部関数化せんといかんのはだるすぎる
さらに、AHKとは違ってWin+LみたいなWindowsが使うキーに関しては
ユーザー定義関数を設定できない
あるADVでホイールでログめくる機能がないから
WheelDown::Enter
で割り当てたんだけど、なぜかそのADV上でだけ効果がでない
どうして?
>>597 WheelDown::
send, {enter down}
sleep, 50
send, {enter up}
return
これでも動かない場合は sleep を多めに設定(100〜200ms程度)するといいかも。
599 :
名無しさん@お腹いっぱい。:2011/07/03(日) 10:04:28.21 ID:xNucwPNC0
AutoHotkey_L (UNICODE)を使っているのですがsendで送信した文字列が指定したとおりになりません。
例えば
!a::send, aあa ;ALT & aで「aあa」を送信
の場合
文字列は「aあa」となるはずなのですが
文字列送信前に
IMEがOFFの時は「aああ」となり
IMEがONの時は「あああ」となります。
また文字列送信前にIMEがON・OFFどちらの場合でも、文字列送信後、
入力が確定されていない状態(文字列の下に点線がある状態)で処理を終え
IMEはONになります。
文字列を指定したとおり送信し、入力が確定された状態で処理を終え、
IMEの状態は文字列送信前と同じ状態にするにはどうすればよいでしょうか?
>>599 !a::
clipboardbackup = %clipboardall%
clipboard = aあa
clipwait, 0.5
send, ^v
clipboard = %clipboardbackup%
return
601 :
名無しさん@お腹いっぱい。:2011/07/03(日) 16:09:37.61 ID:xNucwPNC0
>>600 ありがとうございます!
clipboardを使う方が目的に合ってました。
おしえてください。
peercastをみるためのソフト、pcmpが前画面になったときにクラス名が変わるので
それを指定してキーバインドを変更していたら、そのソフト以外にもそのバインドが適用されてしまいます。
どうやれば回避できるのでしょうか?次のようにしています。
windos7 x64 Autohotkey_L です。
#IfWinActive, ahk_class WMPTransition
ENTER::Send, !{Enter}
return
#IfWinActive
>>602 pcmpの設定でプレイヤーをWMP以外に変更するとか。
例えばwmpc(Windows Media Player Classic)。
GoogleIMEで、長文変換のときに、CtrlプラスNを押すと次の文節に行ってくれるのですが、
windows7にしたらAutohotkeyでこれが動かなくなりました。
自分の手でCtrlプラスNを押すとちゃんとできます。
vk1Dsc07B & n:: Send,^{n}
これじゃダメなんでしょうか?
vk1Dsc07B & n:: Send, ^n
これでいいはず
>>605 レスありがとうございます。やはり無理でした。なぜだろう。
vk1Dsc07B & nをおしてもふつうにnを押したのと同じ状況になって
全文確定になって、未確定のnが末尾にでるだけ。
ふつうに手でCTRL n おしたら、ちゃんと先頭文節のみ確定してくれるのに。
こうやって並べて記述してるんですが、なぜだか、無変換+Nだけ動かない
ほかはちゃんと動いてくれます。無変換+Nもwindows7にするまではちゃんと動いてたし。
7 x64のAutohotkey使ってるのに
;; 無変換 + X = 切り取り
vk1Dsc07B & X:: Send,{Shift down}{Delete}{Shift up}
;; 無変換 + C = コピー
vk1Dsc07B & C:: Send,{Ctrl down}{Insert}{Ctrl up}
;; 無変換 + V = 貼り付け
vk1Dsc07B & V:: Send,{Shift down}{Insert}{Shift up}
;; 無変換 + P = Del
vk1Dsc07B & P:: Send,{Blind}{Del}
;; 無変換 + H= BS
vk1Dsc07B & H:: Send,{Blind}{BS}
;; 無変換 + M = Enter
vk1Dsc07B & M:: Send,{Blind}{ENTER}
;; 無変換 + N = 次の文節に。今の文節を確定
vk1Dsc07B & n:: Send, ^n
PCゲームで、リマップをAHKで使っているのですが、無変換と変換キーに違うキーを割り当てると、
ゲームをはじめてしばらくは動いてくれるのですが、気づくと、無変換と変換キーの割り当てだけ
無効化されます。それらのキーを押してもキーを何も押下してくれません。
AutoHotKeyを再起動してもそれ無効の状況は変わらないのですが、
ゲームを再起動すると、最初の設定通りうごいてくれます。
windows7 x64 です。キーボードは2種類ためしました。
>>607 例えば
無変換 + 何か = Ctrl+I(カナ変換) みたいなのはちゃんと動く?
>>609 ありがとうございます。
ちょっと自分のケースとは違うみたいですね。
#IfWinactiveで指定したキーバインドはほとんど全部動くのですが、
無変換と変換キーに割り当てたバインドだけ一定時間後死にます。
(ゲーム上のみ)
>>610 vk1Dsc07B & 3:: Send,^i
でやってみましたがちゃんと動きました。
なにかインストールするときなど、windows7のデフォのフォルダ指定のウインドウでは
AHKで指定したバインドが動かなかったり、特定のアプリでは動かなかったり、
windows7にAHKはXP同様対応してると思ってましたが間違いだったのかな。
x64がまずいのかな。(それ用のAHKはインストした)
XPのときはこんなことなかった。
このスレだけでもx64で検索するとトラブルだらけなのに、
OSが64だからAHKも64にしなきゃって理由はどこにあるの?
ふつうに32bit版を使えばいいのに。
611じゃないけど、例えばDllCall使って対象アプリのフルパスを取得したりする時、
x64だと対象アプリが32bitでも64bitでも両方取得可能だけど、
x86だと対象が64bitの場合は取得できないとか
すみません、質問させて下さい
↓のような感じで
ファイル名を現在のクリップボードに置き換えるスクリプトを書いてみたのですが
ファイルパスに半角スペースが含まれているとうまく動作しません
(例えばパスが「D:\Program Files\〜」の場合、「D:\PROGRA~1\〜」のようになってしまいます)
うまく動作させるにはどのようにすればよいでしょうか
hoge = %1%
hoge2 := RegExReplace( hoge, "x)^(.+\\)(?:[^\\]+)((?:\.[0-9a-zA-Z]{2,4})?\.[0-9a-zA-Z]{2,3})$", "$1", 1)
hoge3 := RegExReplace( hoge, "x)^(.+\\)(?:[^\\]+)((?:\.[0-9a-zA-Z]{2,4})?\.[0-9a-zA-Z]{2,3})$", "$2", 1)
FileMove, %hoge%, %hoge2%%ClipBoard%%hoge3%
※winXP SP3 でAHK_Lを使用
hoge2 := RegExReplace( hoge, "x)^(.+\\)(?:[^\\]+)((?:\.[0-9a-zA-Z]{2,4})?\.[0-9a-zA-Z]{2,3})$", "$1", 1)
hoge3 := RegExReplace( hoge, "x)^(.+\\)(?:[^\\]+)((?:\.[0-9a-zA-Z]{2,4})?\.[0-9a-zA-Z]{2,3})$", "$2", 1)
これは何の意味があるの?
splitpathじゃダメなの?
>>614 たぶん、これでいいはず
hoge = %1%
Loop, %hoge%, 1
MsgBox, %A_LoopFileShortPath%
WinHttp.WinHttpRequest.5.1をつかって
req.Openかreq.Sendでサーバー名またはアドレスは〜とかタイムアウトで
エラーダイアログがだらだらと出ることがある。
なので失敗したら失敗しましたとかだしてbreakしたい。
つまりはデフォルトのスクリプト実行を続けますか?って聞かれるダイアログじゃ無くて
エラー原因を表示してそれ以降の処理をbreak・飛ばしてスクリプトの実行は継続っていう風にしたい。
原因を表示できなくとも処理をbreakしたい。
そのためにerr:=req.Openとか書いてみたけど成功時の戻り値らしいs_OKも入らない
どうやったら良い?
>>615 > これは何の意味があるの?
RegExReplaceでファイル名前のパスと拡張子部分をhoge2,3に格納しています
> splitpathじゃダメなの?
自分の知ってるコマンドだけで書いてるので…
そのコマンドは知らなかったのでちょっと調べてみます
>>616 やり方が悪かったのかわかりませんが
うまくいきませんでした
620 :
614=619:2011/07/09(土) 13:43:59.17 ID:p39hk6N20
いろいろ試してみた結果
うまくいかない原因はファイルを渡すやり方にあったようです
それまでスクリプトのショートカットにファイルをドロップしていたのですが
これだと
>>614のスクリプト、SplitPathを使って書いたスクリプトの
どちらでも半角スペースを含んだパスが正常に取得できず
スクリプトを右クリックメニューから実行するやり方に変えたところ
どちらも動作するようになりました
ただ、できればドロップでファイルを渡したいのですが
これはAHKの仕様的に難しいのでしょうか?
>>620 ロングファイルネームを取得したいって事でいいんだよね?
だったら、
>>616のA_LoopFileShortPathをA_LoopFileLongPathしてみ。
622 :
616:2011/07/09(土) 19:38:17.42 ID:KpJxy9qU0
>>621 間違ってショートネームのやつにしてた、指摘thx
TABもスペースも多用しているテキストファイルで文字列を抽出したい場合どうすればいい?
hogehogeをA_SPACEに置き換えてからStringSplitで抽出しようとしても
誤爆が多すぎて使いものにならない。
例を出さなきゃわからんよ
例えばAHKLのlicense.txtから"we "の単語を抽出したい場合、
StringReplace, inputfile,inputfile,we , %A_SPACE%,ALL
StringSplit, word_array,inputfile,%A_SPACE%, .
で分離抽出するよね。
でも、license.txtには空白が多いから、誤爆が大量に発生する。
まあこのファイルだとTABに置き換えればいいんだけど、
TABも大量にあるファイルだと文字列を抽出する方法がなくて困ってる。
せっかく元の情報で「we 」で識別できていたのを、なぜ%A_SPACE%で置換して、
本物の関係ないスペースと見分けをつけにくくしてるのか、
全くやってる意味がわからないんだけど。
誤爆するのが当たり前というか
自分から進んで誤爆させる方法に加工してるだけじゃん。
位置情報抽出したい
ときめき抽出したい
よくわからんが
InStr()
SubStr()
RegExMatch()
RegExReplace()
あたりじゃだめなのか?
あとどうしてもStringSplit使いたいなら事前にSpaceとTabを置換しときゃいいんじゃないの?
`a とかテキストで使わないエスケープシーケンスなら他の文字とも被らないだろ
他のソフトが標準出力に出力するのですが
(たとえばdirコマンド)
これをautohotkeyの処理内で取得し、それを基に処理することは可能でしょうか?
こんな感じで動作させたいです
; get_standard_output の引数はコマンド
; 結果をaに入れる
a:=get_standard_output("dir /b")
[第4放し]
G=X1B__
Default=Send,^x
[第4ホイール上]
G=X1B_WU_
Default=if(!MG_Hold()){
Send,{Alt Down}+{Tab}
}else{
Send,{Alt Up}
}
[第4ホイール下]
G=X1B_WD_
Default=if(!MG_Hold()){
Send,{Alt Down}{Tab}
}else{
Send,{Alt Up}
}
Mousegesture.ahkで↑このように設定してるとホイール操作で第4の押し放しまで実行してしまい
Ctrl+Alt+Xと出力されて上手くAlt+Tabが出来ないんですが
何か上手く両立させる方法ないですか?
>>631 フラグで分岐させてみては
[第4放し]
G=X1B__
Default=if(!X1BWFlug)
Send,^x
X1BWFlug=0
[第4ホイール上]
G=X1B_WU_
Default=X1BWFlug=1
if(!MG_Hold()){
Send,{Alt Down}+{Tab}
}else{
Send,{Alt Up}
}
[第4ホイール下]
G=X1B_WD_
Default=X1BWFlug=1
if(!MG_Hold()){
Send,{Alt Down}{Tab}
}else{
Send,{Alt Up}
>>632 望み通りの動作ができました。ありがとうございます。
>>618 なぜかたまに処理の中に入っちゃうけど
やりたいことは出来ました
ありがとうございます
OS windows7 x64の環境なのですが、それでAutoHotKeyのx86やx64をインストールしても
AutoHotKeyが動かない場面が多々あるんですが・・・・。みなさんどうですか?
あふ やsakuraエディタがアクティブだったりすると、AutoHotKeyが動作しない。(これらに#IfWinActive使ってない)
windows7のファイル保存の段になったら出現する保存先ウインドウなどもアクティブだと動かなくなる。
特定のゲーム、Call of duty をしていると、いきなり無変換にAutoHotKeyで割り当てた機能が動かなくなる。
windows7でてから結構たつのに、もう対応してくれないのかな。
最後の更新が去年の10月だったっけ。
のどか以外でAutoHotKeyみたいなソフトでwindows7でちゃんと動くのないのでしょうか?
おしえてください
>>611と同じ人?
多々〜 とか
〜だったり とか
愚痴ってばかりでなく、問題を切り分けしないと、前に進むことは出来ない。
win7 x64だがまともに動いているぞ
アンケートをとるときは大抵自分がおかしいものだ
x64で64bit版入れて使ってるけど普通に動作してる
サクラエディタもMouseGesture.ahk認識してる
641 :
名無しさん@お腹いっぱい。:2011/07/15(金) 08:19:47.89 ID:8T2vb5gg0
次のようなことをするにはどうすればいいかわかりますでしょうか?
aキーとbキーを押し下げている間、マウスの左ボタンを押し下げて
押し下げたaキーとbキーを離したら、押し下げたマウスの左ボタンを離す。
↓をどう組み合わせるのかわかりません。
a & b::Click, left, D, X, Y
a & b::Click, left, U, X, Y
a & b up::Click, left, U, X, Y
a & b::
Send, {LButton Down}
KeyWait, a
Send, {LButton Up}
return
>>639 >>640 うそだぁ〜。もうちょっとやめてくださいよ。
さすがにwindows7の保存先ダイアログじゃAHKうごかないでしょ?
sakuraエディタはいろんなバージョンがあるから、一概にいえないけど。
windows7 x64にしてからしばらくしてから気づいて、
一度再インストールしたあとすぐに症状を確認できたのに。
もう何ヶ月かは再インストールしたくない。
.ahkの記述の仕方がおかしいと思ってトリミングまでしたのに。
おかしいところがあるとすれば、.ahkの記述なのかな、やっぱり。
先に希望があるとみるか、おれはもともとおかしいので望みがないとみるか。
これからもずっと使っていきたいのに
女『車のエンジンがかからないの…』
男『あらら?バッテリーかな?ライトは点く?』
女『昨日まではちゃんと動いてたのに。なんでいきなり動かなくなっちゃうんだろう。』
男『トラブルって怖いよね。で、バッテリーかどうか知りたいんだけどライトは点く?』
女『今日は○○まで行かなきゃならないから車使えないと困るのに』
男『それは困ったね。どう?ライトは点く?』
女『前に乗ってた車はこんな事無かったのに。こんなのに買い替えなきゃよかった。』
男『…ライトは点く?点かない?』
女『○時に約束だからまだ時間あるけどこのままじゃ困る。』
男『そうだね。で、ライトはどうかな?点くかな?』
女『え?ごめんよく聞こえなかった』
男『あ、えーと、、ライトは点くかな?』
女『何で?』 ← ID:/MXBF2+U0 は、いまここらへん
的確過ぎて吹けない
なるほど、女の子か
納得した
男やさしいなw
このコピペ見るたびに思うんだけど
女が聞きたい言葉は症状の解決法じゃなくて
俺が車で迎えに行ってやるよ、だよね・・・
女『車のエンジンがかからないの…』
男『あらら、大変だね。見に行ってあげようか?』
女『ほんと?ありがとう。お礼にセックスさせてあげるわ』
男『ハハハ、いいってことよ。20分くらいで着くから待っててね』
という簡易版もあるが、これはまさに
>>649の言ってる解決方法だな
どなたか あふafxw の使用者いませんか?
あふがアクティブだと、ほんとにAutoHotKeyが動かない。
#IfWinActive, ahk_class TAfxWForm
で個別に設定しても無理。
おたすけを
管理者権限で実行する
Win7 Ultimate x64 だけど スタートアップ用スクリプトで、常駐させたいのを
Run, *RunAs %target_script%
として起動してる。AHKL v1.1.00.00 x64版。
これだと管理者権限の窓でもなんら問題なく動く。
654 :
名無しさん@お腹いっぱい。:2011/07/17(日) 14:24:08.56 ID:iSyDhAKL0
AHKで、Windowに水平・垂直スクロールバーがついているかどうか
確認する手段はありますか?
限定的だが、WindowsAPIで取得できる
WinGet, 〜, Style で対象ウィンドウにスクロールバーが付いているかどうかは確認可能。
ただ、限定的なのは、スクロールバーの実装方法ってソフトによってかなり違う。
メモ帳のスクロールバーが最も基本的なタイプだけど、今時のやつほどそういうスタイルのは少ない。
オフィスは独自のスクロールバー持ってるし、
Firefox, Chrome, Java製 などクロスプラットフォームのソフトだとほぼ無理
ってことで、汎用的な答えは出せないんで、
>>4 にもあるが
> また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
日記
windows7 x64でAutoHotKeyが動かないとき
・ソフトのインストールのときのディレクトリ指定のウインドウ
・あふw(x86のユニコードバージョン。ANSI verは動く)
・サクラエディタ(ユニコードバージョン)
・3D FPSゲーム call of duty 4(x86) の無変換キーへのバインド(突然利かなくなる)
ユニコードバージョンはダメなんか。
で、ライトは点いたのか?
AutoHotkey_L 1.1.00.01 - July 17, 2011
Fixed: Modifier keys weren't auto-released when sending special chars.
Fixed: Scancode/modifier-key mapping conflicts such as sc1xx vs ^sc0xx.
Fixed: $ and #UseHook had no effect if used only on the second or subsequent instance(s) of a hotkey.
Fixed: Potential crash when returning a value from a __Delete meta-function.
Fixed: "Uninitialized variable" warnings were triggered by the debugger.
Changed: base.Method() no longer triggers a default meta-function or a warning.
Changed: Gui +(Ex)Style no longer hides/shows the Gui.
Changed the debugger to report type="undefined" for uninitialized variables.
Added check to avoid incorrectly sending keystrokes for characters which actually require the "hankoku" key.
Added support for integers as class variable names.
Added "Static" keyword for declaring class variables.
Use of the var keyword in class definitions to declare static class variables should be avoided, as a future version (probably the next release) will repurpose it for declaring instance variables.
There are some cases where behaviour won't be adversely affected; in other cases, scripts should be updated to use the static keyword.
クラス変数が次のリリースで実装されるのかね
hankoku ←なにこれ
typoだろ気にすんなよ
aaa := A_Now
中略
bbb := A_Now
変数aaaとbbbを使ってaaaからbbbまでどのくらい時間が経過したかを
〇〇年〇〇ヶ月〇〇日〇〇時間〇〇分〇〇秒のフォーマットで求めたいのですが
どうやれば良いでしょうか?よろしくお願いします。
日記
Windows 7 の ユーザーアカウント制御で、AutoHotKeyがきかない。
無変換+Jに←を割り当ててるが動かない。
ID Managerで一切動かない。
日記
前に乗ってた車はこんな事無かったのに。こんなのに買い替えなきゃよかった。
autohotkey_lのデバッグ機能は
emacsやxyzzyで使えないのでしょうか?
msgboxデバッグには疲れてしまいました。。
>>663 >無変換+Jに←を割り当ててるが動かない。
動かないのは、設定ミスでは?
sc07b & j::send,{left}
>ID Managerで一切動かない。
動くよ@win xp 32 bit
>>665 レスありがとうございます!
たしかに記述ミスかもしれません。665さんが示してくれたスクリプト
で、あふのユニコードバージョン上で動かすことができました!。
さすがにプログラム起動のときのユーザーアカウント制御のはいorいいえ
は、左にあるはいにフォーカスをもっていくことができませんでしたが。
ID ManagerというソフトでもAHKは動きませんでした。
いままで使用していた無変換をモディファイアにした矢印キーは
vk1Dsc07B & j:: Send,{Blind}{Left}
でした。
まだいろいろ試みていませんが、いままで動かなかったと思うところで
sc07b &を使うことで動く場面がたくさん増えたように思います。
前進できました。ありがとうございます。
ウィンドウを自動で非表示(削除)にできると聞いて誘導されてきました。
ちょっと調べたところ
Winwait,ウィンドウ名
Winhide,ウィンドウ名
これでウィンドウが現れたら非表示に出来るみたいですが一瞬ウィンドウが画面に写って
から非表示にされてるみたいです。もちろんこれでも満足なのですが画面に映る前に
Autohotkeyがウィンドウを認識して、ユーザが意識することなく非表示にするようなことはできませんか?
>>667 >■質問に際して
>OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
>また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
>
日記)
windows7 x64でGoogle日本語入力をお使いのみなさん
sc07b & n::Send, ^{n} あるいは
sc07b & n::Send, ^n
してみてください。動きません。
Ctrl + N だとちゃんと変換中の前文節確定します。
■回答できるレベルの人へお願い■
このスレは親切な人が多いと思うけど、もう日記に対する検証&レスは、
たとえ対処法をわかっている人がいても、レスは一切やめにしてくれないか?
こいつがやってることは
「適当にコード作ってみたけど動かない。動かない原因を調べるのも面倒だし、
学習する気もない。どうせここに書けばおまえらが修正するだろうから誰か直して」
ってことだ。しかも、一度だけならまだしも、何度も繰り返している。
これまでに、このスレではこの手の質問者は居なかったと記憶する。
いつまでもこんなクズにつきあう必要はない。
汎用性のないコードでスレが汚されるのは、結果的に良質な情報が
埋もれる原因になって迷惑だし、横から見ていても参考にならないし、
なによりも見ていて不快でしかない。
オッスオッス
じゃあ見るのやめろよカス
当人が「独り言」って宣言してるレスなんぞ、読まずに全スルーでおk
こういうスレの私物化はウザくてしょうがないが
この手のヴァカは言っても絶対やめないからな、飽きるの待つしかない
NG wordにでもぶちこんどくといいよ
vk1Dsc07B & j:: Send
と
sc07b & j::Send
って違うのですか?無変換キーをモディファイアキーに使うときは
後者にしなければいけないのですか?(後者だと自分の環境で動作が
かなり安定した感じがします)
前者はAutohotkeyを流行らせるページの無変換を使い倒すスレで知って
そのまま使っていたのですが、新verのAHKになって書き方もかわったのですか?
だとすればその周辺事項も知りたいのですが、どっかに書いてあるところありますか?
676 :
名無しさん@お腹いっぱい。:2011/07/21(木) 20:03:52.35 ID:QDyk5YgV0
Win7でVersion 1.0.48.05を使ってます。
スペースバーを長押し動作だけに限定するスクリプトって作れますでしょうか?
フォトショップのスペースバーのショートカット動作が短く押すのと、長押しの二種類ありまして
長押しのほうしか使わないので、押し間違えで起動してしまう短く押す方のショートカットを無効にしたいのです。
そういや前スレまでテンプレにあった、Ctrlとか押しっぱなしの時にアラート出せるやつはもう使えないのな。
地味に便利だったんだけどなぁ
>>675 vkXXscYYYは仮想キーコード且つスキャンコードの特定
>(スキャンコードは NT系のみ)
スキャンコードは07Bでした。どうしてwindows7では
両方の指定はだめなんだろう。
ありがとうございました。
>>676 フォトショのショートカットカスタマイズで無効に出来ないのかな?
680 :
名無しさん@お腹いっぱい。:2011/07/22(金) 07:56:43.43 ID:t702ka+Q0
>>679 これができないんです。非常に不便です。
なんとかかんとか検索してスクリプトを書いてみましたがこれだとうまく動きませんでした
#ifWinActive ahk_class Photoshop と記述してあると動きませんがこれがなければ動きます。
原因はなんでしょうか?この動作はPhotoshopに限定しておきたいのですが。
#ifWinActive ahk_class Photoshop
Space::
KeyWait, Space, T0.8
if ErrorLevel
{
send,!{space}
}
else
{
}
keywait, Space
return
フォトショのバージョンは?
CS5だったらタブ分割時にクラス名変わってたりするよ
SetTitleMatchMode ,RegEx
#IfWinActive ahk_class (Photoshop|PSDocC|OWL.DocumentWindow)
とかやってもダメ?
ちなみに殺したいチョン押しSpaceって何の機能?
うちでは押下時間に関わらず 手のひらツールの挙動しかしないけど
>>681 SetTitleMatchMode ,RegEx
#IfWinActive ahk_class (Photoshop|PSDocC|OWL.DocumentWindow)
Space::
KeyWait, Space, T0.8
if ErrorLevel
{
send,!{space}
}
else
{
}
keywait, Space
return
こうですね。こうしてしまうとこのスクリプト自体無効になってしまいました。
バージョンはCS5のエクステンデッドです。エクステンデッドにあるアニメーションのタイムラインウィンドウを表示させて
レイヤーの表示時間をいじるとスペースキーチョイ押しがアニメクリップの再生停止になります。
emeditor用のスニペットってない?
AutoHotkey.ahkとAutorun.ahkとの違いってある?
前者はAutoHotkeyを起動すると実行されるスタートアップだけど
後者の使い道がよくわからん
流行らせるページのホイールリダイレクトのスクリプトを使わせてもらってるんですが、
FirefoxやThunderbird、OpenOffice(Calc)だと効かないのはなぜなんでしょうか?
とりあえず、それらがアクティブの時のみ、ホイールアップダウンを
普通にsendする形で凌いでいるんですが・・・
*WheelDown::
If Redirect_cancel()
{
Send, {WheelDown}
return
}
(以下流行らせるページのリダイレクトスクリプトまま)
Redirect_cancel(){ ;除外条件を指定(除外…1(真) 適用…0(偽))
IfWinActive, OpenOffice.org Calc ahk_class SALFRAME ;OpenOffice/Calc
return 1
IfWinActive, Mozilla Firefox ahk_class MozillaWindowClass ;Firefox
return 1
return 0
あと、OS起動直後にそれらのソフト上でホイールを使うと
「XX hotkeys have been received in the last XXXXms.」のメッセージが出てしまいます。
>>6の解決法を用いても改善できないようなのですが、AHKのスクリプトをリロードすることで
その後メッセージは出なくなります。(起動直後のみ出る)
使ってるOSはWindows7(646bit) SP1、FirefoxやOpenofficeは最新バージョンです。
同じスクリプトをXP(32bit)で試してみたら「XX hotkeys have〜」のメッセージは出ませんでした。
改善方法がありましたらご教示願えませんでしょうか。
Filedeleteとかのファイルパターンを正規表現で指定したいんですが
なにかいい方法ありませかね?
>>686 ありがとうございます! 試してみます〜
>>687 Loop, C:\*.*
{
regex := "SYS$"
If ( RegExMatch( A_LoopFileFullPath, regex ) )
msgbox, %A_LoopFileFullPath%
}
windows7 x64にて、
プログラムの実行ファイルのプロパティ→管理者として実行にチェックが入っていると
そのプログラムがアクティブになると、どうしてAutoHotKeyのキーバインドが
一切効かなくなるのでしょうか? おしえてください。
他の方は管理者として実行にチェックが入っていたとしても
そのプログラム上でAutoHotKeyがふつうどおり動くのでしょうか?
>>691 そりゃー管理者権限で動いているソフトが権限のないソフトに勝手に操作されたらマズイしな。
AHKのキーバインドだと、ユーザの意思で操作してると感じるだろうけど、
OSから見たら、権限のないソフトから不正なキー信号が送られてるのと変わらないし。
横からすんません。
てことは、AHKも管理者権限で実行しているならOKってことになるんですかね?
そらそうよ
ただしそれはそれで色々面倒だぞ
そういう余計な心配やトラブルが嫌でUAC完全オフで使ってる俺はダメ人間なのかな
結局、情報なんて抜かれるときにはどんな手を使ってでも抜かれるし、
関係ないデータ領域を巻き添えにして壊れるような市販ソフトなんて一度も出会ったことないし、
データドライブの意図的なファイル削除だったらUACありで一般権限でもできてしまうし、
システムドライブが破壊されたら再インストールすればすむことだし、
そう考えるとUACって意味ないなぁ という結論になった。
>>692 レスありがとう。
>管理者権限で動いているソフトが権限のないソフトに勝手に操作されたらマズイしな。
なるほど。そう言われるとそうですね。理屈がわかった気がします。
でも、キー入力を間で入れ替えてるだけだから、キー入力"だけ"だったら
管理者権限のソフト自体になんか悪さしうる影響を与えるっての前段階
のような気がして、関係ないレベルなんじゃないかと素人は思ったりするわけで。
そもそもwindows7の管理者権限とかUAC(?)ってのがわかってませんが。
ぼくもUAC無効にしてみようかな。
ためになりました。
そういうことが解からんレベルの人は無効にしちゃいかんと思うの
Array := Object()
count=0
Loop, Read, result.txt
{
Array.Insert(A_LoopReadLine)
count++
}
if(count>50){
countTemp=count-50
Loop %countTemp%{
Array.Remove(A_Index)
}
fileon=result.txt
file :=FileOpen(fileon,"w")
file.write(Array)
file.close()
}
あるファイルの行数が51行になったら一行目を消す といった動作を望んでいたのですが
file.writeでは配列は書き込めないようなのでどうしたらいいですか?
For k, v in Array
file.Write(v)
AHKLでTextファイルを読み込んでメッセージボックスで表示させようとしてるんだけど、
文字化けしてしまう。
スクリプト、TextどちらもUTF-8で保存して、後発薬って漢字だけなんで
ダメ文字使ってるわけでもない。
いじりはじめたばかりなんだがどうすればいい?
文字化けしないのでお前の問題
>>700 全てが1行になってしまいましたが
file.Write( v "`r`n")
とすることで望む動作になりました
ありがとうございます
改行付きなら file.WriteLine()
>>702 テキストファイルの読み込み時に、コードページを指定しないとだめ。日本語環境のデフォはCP932
(BOMが付いてれば省略してもいい)
>>705 レスありがとうございます。
いろいろぐぐっているのですが、Filereadでコードを指定する方法が分かりません。
他のコマンドでも見つかりませんでした。
ぐぐっても古いテンプレの微修正版があるだけで、読み込んだテキストファイルの
文字コードを指定する方法は見つかりませんでした。
>>706 FileEncoding [, Encoding]
Sets the default encoding for FileRead, FileReadLine, Loop Read, FileAppend, and FileOpen.
ググるより前に標準のHelp見たほうが早いと思う。
FileReadのページからも辿れた。
>>701 >Off-topic: Don't ask about v2. It'll be updated in the next couple days.
英語が苦手なんだけど、これって、数日後にv2が来るってことかな
ウィンドウのタイトルバーをマウス拡張ボタンでクリックするとキーを送るようにしてるんですが、
このコマンドだと一度ウィンドウをアクティブにしないと、タイトルバーをクリックすることができないんですが、
このウィンドウをアクティブにする動作を省略することはできるんでしょうか?
スクリプトはこんな感じです。
~XButton2::
CoordMode, Mouse, Window
MouseGetPos, ClickX, ClickY, WindowUnderMouseID
WinGetPos, x, y, w, h, ahk_id %WindowUnderMouseID%
if ( ClickX < w and ClickY < 24 and ClickY > 0 and ClickX > 0)
{
WinActivate, ahk_id %WindowUnderMouseID%
send, #a
Return
}
else
Return
v2でたら文法とかもすっきりするんだろうか・・・
>>707 FileReadの前にFileEncoding,CP932入れたのですが、変わりませんでした。
FileEncoding,CP932
FileRead,inpfile,Z:\hoge.htm
StringSplit, wd_sec,inpfile,", .
MsgBox,3, %wd_sec2% and %wd_sec3% and %wd_sec4% and %wd_sec5%
and %wd_sec6% and %wd_sec7% and %wd_sec8%
これだけのコードなのですが。
>>712 ありがとう
見てみたけど
>Removed SplashTextOn/Off, Progress and SplashImage.
>Removed IfMsgBox.
なかなか思い切った更新だね
IfMsgBox,no
return
とか、しょっちゅう使ってるけど、俺のスクリプトこれからは全部だめじゃんw
なんでなくしたんだろうか。
Mousegesture.ahkの互換は絶望的?
>>715 あれ、そうなるとifmsgboxの代替として何を使えばいいんだろうか
>>719 スレ見るとわかるんだがA_MsgBoxResultがかわりに追加されてる。
2系は当分アルファだろうけど仮に1系にA_MsgBoxResultが
バックポートされたら対応しとけばいいんじゃないか。
いろいろ変わるらしいから
古いスクリプトはv1のexeを使うのが現実的かもしれないけど。
ブラウザのOperaの右クリックとホイールアップダウン使うショートカットを別のものに上書きしたんですがl
このスクリプトを使っていると通常の右クリックが使えなくなってしまいました。
#ifWinActive ahk_class OperaWindowClass
RButton & WheelDown::send, ^{WheelDown}
#ifWinActive ahk_class OperaWindowClass
RButton & WheelUp::send, ^{WheelUp}
右クリックを右クリックとして動作させるにはどうしたらいいでしょうか?
ちなみに
#ifWinActive ahk_class OperaWindowClass
Rbutton::send, {Rbutton}
これを追加したところ今度はOpera標準のマウスジェスチャーが使えなくなってしまいました。
解決策が分かる方イましたらご回答お願いします。
>>720 あ、ほんとだw
すぐ下に書いてありましたね
すまん
>>661 これと同じ事なのですがOSの終了起動をまたいでを想定しているので
A_TickCountは使えません。
tNow -= 1970,s
tOld -= 1970,s
six += tNow - tOld
S = 1970
S += six,s
FormatTime, TS, %S%, HH時間mm分ss秒
等やっているのですが明らかに10時間以上経過しているのに
1時間52分09秒などと計算されてしまいます。
tNow、tOldはYYYYMMDDHH24MISS形式の値です。
どう書き換えたら良いですか?
>>723 >six += tNow - tOld
うっかりミスだと思うけど、代入の間違いだね。sixがグローバル or スタティック変数なら += は不味い
それと24時間を越えるとHoursがオーバーフローするから、別途日数を用意した方が良いと思う
tNow -= tOld, d
result := tNow . "日" . TS
>>721 押下後そのまま離したときは右クリ
押下後ホイール操作したときはSend
押下後マウスを移動したときはドラッグ
それぞれの場合で分岐させたり、その他工夫する
RButton関係はこのスレだけでもかなり例が出てるから自分に合ってるものをどうぞ
>>723 日付時刻型にフォーマットしたいという意図は分かるが、
tNowとtOldの差が10時間としたら
S += six,s で算出されるのは、1970年01月01日10時00分00秒
差を出したいなら
RegExMatch( tNow, "(?P<Year>\d{4})(?P<Mon>\d{2})(?P<Day>\d{2})(?P<Hour>\d{2})(?P<Min>\d{2})(?P<Sec>\d{2})", Now )
でtNowとtOldをそれぞれ分解して場合分けしながら(2,4,6,9,11月)足し引きする
日単位まででいいなら算出した差six(単位:秒)を
「//やMod()」使って日・時・分・秒に分ける方がかなり楽
「tOldから10時間以上経過してたら〜〜」ならこれだけでいい
If( six/3600 > 10 )
>>724 いろいろやっていたらOldはGMT時間、NowはJST時間で時差の補正を
していなかったためという事に気付きました。
他の部分でOldも9時間足してJSTにしていると思い込んでいたため
変数の中身をきちんと確認していませんでした。
どうもすみませんでした。
>>725 とりあえず解決はしましたが教えていただいた方法も試してみます。
ありがとうございました。
Exe2Ahk.exe
AutoHotKey.ahkのなかでテキストで開いたとして、
書くとしたら先頭に書かなければいけないコマンド群ってどこのHPをみればわかりますか?
GroupAddはスクリプトの先頭に書かないといけないんですよね?
教えてください
んー?なにがしたいんだ?
>>731 すいません。丁寧にありがとうございます。
しかし示していただいたコレ読んでも
ほとんど理解できない。groupaddないし。
キーワードが分かったのでそれてがかりに検索して理解できるように取り組んでみます。
典型的な夏休みのゆとりだな。このあと逆ギレになると予想する。
要はスクリプト全部に適応させたいモノは最初に書いとけってだけだよ
そこに書いてあってもイベント発生後の直前指定で構わない場合もあるし
自分が使わないものを羅列したって意味はない
730の言うとおり、自分が何をしたいのかを把握するのが第一
Fnキーの組み合わせでボリュームコントロールや輝度調整ができますが、
ボリュームコントロールはVolume_Downでできますが、輝度調整に当たるキーはないのでしょうか?
ちなみに、ショートカットキーはFn+F1です。
コミックスタジオというソフトで、ショートカットキーを2度素早く押すと
ツールパレットウィンドウが開くという仕様があり、
このパレットを常々消しておきたい自分は以下のようなスクリプトを組んだのですが
b:DoubleCheck()
DoubleCheck(){ ;二度押し抑制関数
if ( A_PriorHotkey = A_ThisHotkey
and A_TimeSincePriorHotkey < 500 )
return
else
send, %A_ThisHotkey%
return
}
時々誤動作すると思ったら、b→Lクリック→bを素早く押すことでも反応してしまうということがわかりました。
何かうまい修正の仕方はないものでしょうか?
組み込み変数使わないで、該当キーの前回の押下時間を自分で記録してやりゃいいだけかと。
A_TickCountでも使えばいいんでない
b::
latest := A_TickCount
If ((latest - last) > 500 || !last)
Send,% A_ThisHotkey
last := latest
Return
>>739 うまくいきました、ありがとうございます!
741 :
名無しさん@お腹いっぱい。:2011/08/05(金) 18:15:23.42 ID:NoNn2czO0
AutoHotKeyを初めて導入しました。
MouseGesture.ahkを起動したところMG_Edit.ahkで
>Error at line 79
>
>The following variable name contains an illegal character:
>"WS""
>
>The program will exit.
とエラーが出てしまいます(「OK」を押しても続けて同じエラーが出ます)
どうしたら改善できるでしょうか?
どうかアドバイスをお願い致します。
WinXPsp3
79 WS:=AddCustomTemplateSub("","ウィンドウ状態","WS")
AutoHotkey_Lを導入すればいいということでしょうか?
「旧流行らせるページの配布物(MouseGesture等)の多くはそのままでは動作しない」ということなので、本家を導入したのですが・・・
えーと今は本家のバージョン番号をAHKLが受け継いだんじゃなかったっけ?
AHKLになる前の本家を使えばいいのかな?
>>685にも出ているようですが、非アクティブのFirefox4/5をwheeldown,up送信してスクロールってどうすれば良いのでしょうか?
Windows7x64なのが関係してるのか
>>686のスクリプトもTrackWheelはデバッグモードにしてもツールチップが出ず、
WheelScrollは加速しないしAlt+スクロールじゃないとスクロールしなくなったりです。
Firefox4以降から仕様が変わっただけ。OS関係ない。
classNN はまったく取れないので、メッセージはウィンドウ自体に送れってこと。
TrackWheelなどのツールだと classNN していなしで、親ウィンドウクラスだけ指定すりゃ動く
TrackWheelで便乗質問、作者さんまだ見てらっしゃるといいんですが
TW発動時にShiftやCtrlを押してると変な挙動をすることがあります
TW_ScrollDispattcher() の中
>if (keys && !(option & 0x100))
> ruleY := "Wheel",lineY:=(lineY>0) ? 1 : (lineY<0) ? -1 : 0
(optionはダミー変数で、Shit/Ctrl押下時は常に ruleYの書換が行われているようです)
旧バージョンを遡ってみたところ v5では[Shift]+[Ctrl]で発動
v6_rcでは TW.iniの Option項目を参照しているようです
具体的に何のためのコードなのかが、iniやreadmeを見てもわからないのですが
丸ごとコメントで無効してしてしまっても問題ないものでしょうか?
XP SP3 / AHK ver.1.0.48.05
ウィンドウのタイトルバーの高さを取得する方法はあるでしょうか?
OSとかアプリとか、なぜ具体的に書かないのか
>>750 できました。
ありがとうございます。
javaで言う所のHashMapみたいな、キー = 値 でデータを管理する機能はあるでしょうか?
>>752 すみません。
日本語のサイトしか見ていなかったです。
オブジェクトたるものがあるのですね。
上のほうでも書かれていた以下を実行すると「Error: Call to nonexistent function.
Specifically:」がでます。
「Object()」は各自が定義するものなのでしょうか?
AutoHotkey.chmで「Object」で検索しても見つかりませんでした。
TargetWindow := Object()
TargetWindow.Insert("ahk_class 特定のウィンドウクラス1")
TargetWindow.Insert("ahk_class 特定のウィンドウクラス2")
TargetWindow.Insert("ahk_class 特定のウィンドウクラス3")
オブジェクトはAutoHotkey_Lで追加された機能ね。詳しくは
>>1>>4-5
>>754 ありがとうございます。
MAPみたいなものを考え、以下の2通りでキーでセット、取得を試みましたがダメでした。
サイトにInsertはあったのですが、取得がありませんでした。
以下の方法で行けると思ったのですが…
============================================================
Map := Object()
Map.Insert(%index%, %Width%)
Value := Map.item(%index%)
ToolTip, %Value%
============================================================
============================================================
Map := Object()
Map.Insert(%index%, %Width%)
Value := Map.item[%index%]
ToolTip, %Value%
============================================================
>>755 Width = 640
index = 35
Map := Object()
Map.Insert(index, Width)
Value := Map[index]
MsgBox, %Value%
Insertのとこ引数を%width%とするとAHKは変数widthじゃなくてwidthを展開して変数640の中身を見に行ってしまい当然中身は無
あとMap.item[xxx]じゃなくてMap[xxx]
ShorterLauncherみたいに、コンテキストメニューに縦セパレータ入れて二列メニューにすることってできない?
メニューに項目追加していくと、すぐ縦長になって視認性悪くなるんだけど
>>756 ありがとうございます。ウィンドウ右クリックでタイトルバーのみ表示、通常表示のトグルをさせたいのですが、Mapの取り出しでどうしても前回の値が取れません。
「Map := Object()」をグルーバル変数的に考えてるのですが、コールバックごとにクリアされるのでしょうか?
Map := Object()
~RButton::
CoordMode,Mouse,Screen
MouseGetPos, xpos, ypos, win
WinGetActiveStats, Title, Width, Height, X, Y
SysGet, TitleHeight, 4
if ((xpos >= X && xpos <= (X+Width)) && (ypos >= Y && ypos <= (Y+TitleHeight)) ) {
MouseGetPos, ,, win
WinGet, index, ID, ahk_id %win%
Value := Map[index]
;初回は空だから0をセット
if var is not integer
Value = 0
;ウィンドウが開いているとき
if (Value == 0) {
Map.Insert(index, Height)
WinMove, ahk_id %win%, , X, Y, Width, TitleHeight
;ウィンドウが閉じているとき
} else {
WinMove, ahk_id %win%, , X, Y, Width, Value
Map.Insert(index, 0)
}
}
CoordMode,Mouse,Relative
return
}
CoordMode,Mouse,Relative
return
>if var is not integer
varではなくValue。値自体は取れてるはず
>>758 なんでMouseGetPosを2回?
最後のCoordMode,Mouse,Relativeもわざわざいらないし
>WinGet, index, ID, ahk_id %win%
これなんか意味わからん
タイトルバーにクリックしたかの判定はこれが安定的
MouseGetPos, PosX, PosY, hWnd
SendMessage, 0x84,, (PosX & 0xFFFF) | (PosY & 0xFFFF) << 16,, ahk_id %hWnd%
If ErrorLevel in 2,3,8,9,20,21
>>759 >>760 ありがとうございます。
var → Valueに変えたけどダメでした。
以下のコードに変更したのですが、やはりマップから値が取れないようです。
MsgBox %index% %Value% %Height% ※『0x20268 0 225』が出力
Map.Insert(index, Height)
MsgBox %index% %Value% %Height% ※『0x20268 0 225』が出力
Value := Map[index]
MsgBox %index% %Value% %Height% ※『0x20268 225』が出力
キーの「0x20268」が悪いのですかね…
Versionはv1.1.02.00です。
Mapオブジェクトは、ちゃんとAuto-execセクション内で作成されているのか?
キーは16進数でもなんら問題ない
#y::
Map := Object()
idx := 0x20268
Map.Insert(idx, 225)
MsgBox,% Map[idx]
Return
まぁ、ぬるぽでしょうな。AHKじゃエラー(例外)は起きないけど。
いろいろなところから呼び出されるんなら、初期化はきちんとしないと。
シングルトンのように扱いたいなら、関数内の static オブジェクトにしちまうと楽。
Map() {
static obj:={}
return obj
}
; 変態のようだが以下のような文法でアクセスすりゃ、一時変数も不要
Map().foo := "bar"
MsgBox, % Map().foo
マウスの押し下げじゃなくてリリースにマッピングさせることは可能ですか?
MButton::
これだと押し下げでイベント発生
>>765 ありがとうございます。
そしてすみません。完全に見落としてましたm(__ _)m
>>758 そのやり方だとitunesとかIPメッセンジャーをタイトルバーだけにできないよ
AutoHotKeyでそれができるかは分からないけど、FileBox eXtenderを使うのも一つの手かと
>>767 横からすまんが、
WinMoveの代わりにWinSet, Regionを使ったらそれっぽく見せかけられるはず
Windows7の64ビットで SoundSet -5 でマスタボリュームが変更できない。
AutoHotKeyは64ビットのユニコード版です。
同じ現象の人いますか?
>>769 Send,{Volume_Up} , Send,{Volume_Down} , Send,{Volume_Mute} で
とりあえず音量は変えられる。
>>770 その手があったか…
助かりました。
話が変わりますが以下で悩んでおります。
============================================================
Firefoxのタイトルバーにマウスイベントを設定しています
Firefoxのマウスジェスチャーも有効にしたいので”~RButton::”を使ってます
この状態で共演は可能でした。
ところがタイトルバークリックでイベントも投げるので右クリックメニューが出ます。
出したくなかったので「RButton::」に変えて、タイトルバー以外ではSend, {RButton}を出すようにしました。
タイトルバーでメニューは出なくなりましたが、今度はマウスジェスチャーが効きません。マウスダウンではなくマウスクリックのイベントを送っているので、同然ジェスチャーが効かなくなります。
マウスジェスチャーも効き、タイトルバーでメニューを出さな方法はあるでしょうか?
ちなみにかざぐるマウスでは可能でした。
どのようにやっているのかわわかりませんが、AutoHotKeyで可能なものでしょうか?
>>771 AutoHotKeyでやったことはないけどマウ筋を使っていたときは
最初に「ESC」を送って消していた記憶がある。
複数プロセス起動で別々のスクリプトを読み込ましていますが
今のところ問題なく動作してます。
そもそもこのソフトは複数プロセスに対応している仕様でしょうか?
テキストファイルの内容を0バイトにしたい場合
type nulで上書き出力する以外に方法はありますか?
>>774 複数スクリプトの読み込み・実行は特に問題ない。
が、キーやマウスなど乗っ取り対象がひとつの場合、起動順などで挙動が変わることはままある。
>>775 FileOpen で新規作成モード
Vanisher.exeというソフトみたいなことをスクリプトで実現できるものでしょうか?
ファイル名を書くだけより、
機能をかいつまんで書いた方がいろいろな意見を
聞ける可能性が高まると思う。
>>777 すみません。
例えば最大化しているウィンドウが複数あった場合、
画面の左半分にデスクトップが現れて、そこでは通常のデスクトップ操作ができるソフトです。
要は半画面分のアプリケーションエリアが魔法のように消えて、左半分の操作はデスクトップへのオペレーションになるイメージです。
これがWindows7で使えないので自作しようと思いまして。
アプリがどうやっているのか不思議ですが、
Winset,Region でできる
何個か前のスレでまさにそれ用の関数書いてた人が居た気がする
特定範囲にかかってるウィンドウをまとめて別の場所に移動するってこと?
それとも絶対領域ってツールみたいに最大化しても特定領域にはかからないようにするってこと?
前者だったらマルチモニタでモニタ1から2へのスクリプトとかよく使ってるな。
Windows7、AutoHotkey_L(Ansi32Bit)のWinGetって使えなくなってる?
ごめん、問題なかった
786 :
名無しさん@お腹いっぱい。:2011/08/20(土) 04:35:31.02 ID:ZoL9k9G40
Filebox Extender や Direct Folderという、Windowsエウスプローラー拡張アプリには
Click Switchというものがあります。それは、アプリケーションの、開く、や、保存する、のダイアログボックスが表示された状態で
エクスプローラーで開いているフォルダの空欄をクリックすると、ダイアログボックスのアドレスがクリックしたフォルダのアドレスに移動するというものです。
たとえば、IEで特定の画像を保存しようと、名前を付けて保存をする、でダイアログボックス表示させて、Dドライブの"画像保存"という名前のフォルダを開いてそのフォルダの空欄をクリック
すると、ダイアログボックスの保存先が画像保存フォルダになるという感じです。
この機能をAutohotkeyで実行できるスクリプトを探しているのですが、まったくみつかりません。
https://www.donationcoder.com/forum/index.php?topic=22305.0 このフォーラムのものを使ってみたりしましたがWindows7では動きませんでした。
こういうことができるスクリプトの存在を知っていましたら教えて下さい。よろしくお願いします。
OSが何だかわからんので何とも言えんが
DialogHandlerに投げるのが楽なんでないか
一から作るならDialogSetterのソースが参考になりそうと思ったが
今はもう公開されてないんだな
すまん Win7なのね
DialogHandlerはVista対応までみたいだね
>>788 VISTAまでならダメそうですね どうも
スクリプトファイルのショートカットを作ってそちらから実行した時に
.ahkではなく.lnkのほうの名前やパスを取得することはできますか?
>>790 Vistaまでサポートしてたんなら7でも動く可能性あるんじゃね?
程良く枯れたツールは不具合無いかぎり更新しないもんだよ
~LButton::とLButton Up::って共存できます?
~LButton::が効いてくれません。
>>793 なんかわかった!
~LButton & RButton::があると~LButton::が動作しない…
>>791 Windows側(というかエクスプローラ)で処理するから
原理的にどちらから起動されたかアプリから区別できない
再生、再生の停止命令をSendで送ることは可能ですか?
>■質問に際して
>OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
>また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
>>795 やっぱり無理か
でもincludeのみ記述したものをショートカット代わりにすることで解決したからおk
あるファイラーでファイルをダブルクリックして実行した場合、そのファイルのパスを取得することはできるでしょうか?
ダブルクリックの割り込みを設定したところでそこで何ができるかで行き詰ってしまいました。
>>799 29 :名無しさん@お腹いっぱい。[sage]:2009/09/28(月) 12:53:08 ID:osZ+Tna60
エクスプローラでファイルのパス名を取得してクリップボードに入れたいのですが、
タイトルバーにパス名 の設定にしてそこから…以外に、取得する方法ってあるんでしょうか?
Window Spyで >>>>( TitleMatchMode=slow Visible Text )<<<< に
表示されてるトコあたりからゲットできればいい気がするんですが…
30 :名無しさん@お腹いっぱい。[sage]:2009/09/28(月) 13:16:45 ID:Couq7dy70
>>29 エクスプローラの選択ファイルで何かするときは
Ctrl+Cしたファイル情報を文字列化するのが便利
send, ^c
sleep, 200
clipboard := clipboard . ""
31 :名無しさん@お腹いっぱい。[sage]:2009/09/28(月) 14:01:34 ID:B+JRl/yG0
ClipWait使おうぜ…
#NoTrayIcon
#NoEnv
Clipboard=
Send, ^c
ClipWait
Clipboard=%Clipboard%
32 :名無しさん@お腹いっぱい。[sage]:2009/09/28(月) 15:37:25 ID:aEZJxxhv0
>>31 ClipWaitなら一応待機時間付けといた方が良い。
無選択でコピーしようとしたときにいつまでも待機しちゃうから。
33 :名無しさん@お腹いっぱい。[sage]:2009/09/28(月) 16:16:38 ID:JNXFXCDoP
>>29 ShellFolder() : エクスプローラのPathおよび選択ファイルを取得
ttp://www.autohotkey.com/forum/topic20701.html
チルトホイールの割り当てできますか?
Vista以降なら可
マウスドライバで
チルトにF13キー割り当てればXpでもできるよ。
マウスホイールでマウス下のコントロールをアクティブにしてスクロールさせるという、マウスジェスチャーでよくあるようなものを自作したんですけど、
Jane Style(ClassNN: TMDITextView2)がうまく動作しません。
アクティブにはなりますが、スクロールを送ることが出来ず、他の画面がスクロールしてしまいます。
どうすればJane Styleもコントロールできるでしょうか。
WheelUp::
CoordMode,Mouse,Screen
MouseGetPos, xpos, ypos, win, control, 1
IfWinNotActive, ahk_id %win%
{
WinActivate , ahk_id %win%
}
ControlClick, %control%, ahk_id %win%, , WheelUp
return
確かTrackWheelのiniにStyle用の設定が入っていたはず
モニターの電源OFFやスクリーンセーバーを起動させる方法は用意されているでしょうか
ListHotKeysで出てくる情報みたいなものを
ahkスクリプトで扱える状態で得る方法ってありますか?
ListHotkeys しかないんじゃないかな
ListHotkeys
WinWait, ahk_class AutoHotkey
WinGetText, text
WinHide
MsgBox, % text
やっぱり無理ですか。
いま存在しているホットキーの一覧を
ポップアップメニューで表示できたら便利かなと思ったんですが。
ホットキー登録を自作関数でやらないといけないのかな
お尋ねします
マウスのクリック操作を、指定した時間だけ無効にするには
どの様にしたらよろしいのでしょうか?
よろしくお願いします
#If のちょ〜基本的な使い方ってところかぬ
#If (MouseDisabeld)
*LButton::
*RButton::
*MButton::
*XButton1::
*XButton2::
Return
#If
DisableMouse:
MouseDisabled:=True
SetTimer, EnableMouse, -時間を指定(ms) ; 負数で指定する(=1度のみ)
Return
EnableMouse:
MouseDisabled:=
Return
HotKey, *LButton, DoNothing, Off
return
Ins::
If !(isDisableLButton)
DisableLButton(5)
return
DisableLButton(time)
{
isDisableLButton := True
HotKey, *LButton, On
Sleep, 1000 * time
HotKey, *LButton, Off
isDisableLButton := False
}
DoNothing:
return
>>806 復帰なら、暗くなった状態でmousemoveで適当に動かせば、復帰する。
入る方法は、わからんなあ。
>>806 モニターオフ
SendMessage, 0x112, 0xF170, 2,,ahk_id 0xFFFF
ウィンドウのゲームをする時にマウスがはみ出さないように↓のを使っているのですが、
ウィンドウ右上の閉じるボタン等を押してしまうことがたまにあります。
これを防ぐ方法が何かあればお願いします。
RWin::^^
^^::
MouseGetPos, , , WindowUM,
WinActivate, ahk_id %WindowUM%
Confine := !Confine
WinGetPos, VarX, VarY, Width, Height, A
VarX2 := VarX + Width
VarY2 := VarY + Height
ClipCursor( Confine, VarX, VarY, VarX2, VarY2)
Return
ClipCursor( Confine=True, x1=0 , y1=0, x2=1, y2=1 ) {
VarSetCapacity(R,16,0), NumPut(x1,&R+0),NumPut(y1,&R+4),NumPut(x2,&R+8),NumPut(y2,&R+12)
Return Confine ? DllCall( "ClipCursor", UInt,&R ) : DllCall( "ClipCursor" )
}
>>819 そういうコード書けるなら一言だけ
LButton 押下時にWN_NCHITTEST で HTCLOSE( = 20)かどうかをチェキ
>>820 これ自分で書いたわけじゃないんです すみません書き忘れていました
どこかのフォーラム?から持ってきたんだと思います かなり前のことなので・・・
閉じるボタンを認識させるかを見張ればいいんですね ちょっと勉強してみます
閉じるボタン等の範囲を除外させるといいのかなと思っていましたが、そちらのほうが汎用性がありそうですね ありがとうございます
>>821 カーソルを制限する範囲からタイトルバー部分を除外するだけじゃだめぽい?
ClipCursor( Confine, VarX, VarY, VarX2, VarY2)
↓
ClipCursor( Confine, VarX, VarY + 20, VarX2, VarY2)
タイトルバーの太さによって数値は変更必要かもしれんけど
>>819 Windowの枠を隠すのは駄目なんですかね?
+F11::
WinGet Style, Style, A
if(Style & 0xC40000) {
WinSet, Style, -0xC40000, A
} else {
WinSet, Style, +0xC40000, A
}
return
>>822 カーソル制限範囲を変えようと検索しながら色々いじってみたんですけど、狭くならないんですよね
いじり方が悪いんでしょうけど、このコードの意味をちゃんとわかってないんで差し当たりお手上げでした
指摘されたところ変えても変わらかったです
>>823 枠を消すのはいい案ですね 他の時にも使えそうですし
実際使ってみて、閉じる無効化と比較してみようと思います ありがとうございました
DragDrop.ahkをincludeして、
DropFiles(WinExist("A"), "c:\aaa.txt")
としても何も起きないんですが、何が悪いんでしょうか。
環境はWindows7のAutoHotkey_L 1.1.03です
"a"ボタンを押したとき"b1秒放置c"という入力にすることはautohotkeyでできますか?
a::
b
c
こんな感じだとは思うのですが。
a::
send,b
sleep,1000
send,c
return
ありがとうございます!
特定のウィンドウかダイアログが一定時間アクティブにならなかったら〜
っていう処理を考えてアクティブになったときの時間を記録し
あとはProcessed内で現在時間と比較し処理するっていう風にしたいんだけど
#Persistent
time=
windowFlag=0
settimer,Inter,1000
return
Inter:
WinGetTitle, wT, A
ifinstring,wT,ウィンドウ タイトル
{
time= %A_Now%
windowFlag=1
}
if(windowFlag==1){
Processed(time)
}
return
なにかうまくいかない
どこを書き換えるべき?
>一定時間アクティブにならなかったら
は、どこにあるの?
関数の中?
関数に飛ぶ前にフィルタしたほうがいい気がする。
一定期間アクティブになったら〜〜 ならかんたんだけど、
アクティブにならなかったら、の場合、いつの時点から何秒間アクティブにならなかったら
フラグを発動させるかを判別する必要がある。
つまり、アクティブにならなくなったとみなす開始地点を記録する必要がある。
もっとパラメータを増やさなきゃならんな。
ダブルクリックでマウスカーソルの非表示と表示の切り替えは出来るのでしょうか?
よろしくお願いします
>>674でも質問させてもらったのですがもう一度聞かせてください。
windows7 x64にて無変換を違うキーに割り当てる場合
仮想キーコード且つスキャンコードで指定すると
どうして一部のアプリケーションで不具合がでるのでしょうか?
教えてください。スキャンコードのみの指定とどう違うのでしょうか?
(不具合というのは無変換を押下してもなにもキー反応がでなくなる。)
スキャンコードのみで指定している現在ではこの不具合の症状が出ない。
自分のキーヒストリーをみた結果です。いたって普通に見えます。
http://rghost.net/20054311/image.png よろしくお願いします
管理者権限で動く窓を操作したいなら、管理者で実行だぜ
ってか、「一部のアプリケーション」と情報を隠蔽するから解決が遅れてるんだよ。
>>830 ifinstring,wT,ウィンドウ タイトル
でアクティブになったときの時間をtimeに入れ、
そのときに一度はアクティブになった事があるってことを示すのにwindowFlagを1にして
Processed(time)内でif(現在時間-time)>30みたいな感じに比較してる。
持続してアクティブになっているならtimeがA_Nowによって更新され続けて
関数に入っても現在時刻との差がほぼ無いから一定時間非アクティブならの処理は発動せず。
非アクティブになったらtimeが更新されないから現在時刻との差が広がっていって
一定時間非アクティブならの処理は発動
みたいに考えてたんだけどこれじゃ無理?
>>834 なんかコードの可読性が悪くなってない?
Processed(time)の中で、処理するしないの条件を分岐する必要はあるの?
判別の材料としてA_NOWを使うなら、関数に飛ぶ前に判別したほうが
関数に飛ぶ前の条件と、関数でやる仕事とが明確化されて、わかりやすいかと思うが。
あと、具体的にどこでおかしくなってるのか、msgboxとかで調べてみなよ。
上の人とは違うが、これも具体例がないから、なにが原因で動かないのか、
第三者にはわからない。
単にWindowtitleがコロコロ変わって、アクティブになったフラグが立ってないだけの可能性だってあるし、
それがわかるのはあんたしか居ないわけで。
それでも上手くやりゃできるけど、もっと単純にやればいい
SetTimer, kanshi, 100
kanshi:
IfWinActive
StackTime := 0
StackTime += 100
If( StackTime >= 30*1000 ) ;30秒以上非アクティブのとき〜
「一定時間非アクティブならの処理」
Return
なんか馬鹿だった。この型でA_Now使うべきだね
WinWaitActive / WinWaitNotActive
じゃだめなのか?
>>838 今回の用途では、その2つは何の意味もないよ。
>>839 ↓こういうことじゃないの?俺の読解力無いだけかな。
#Persistent
GuiName:="AhkTestGui"
Gui,+LastFound
Gui,show,w200 h200
WinSetTitle,,,%GuiName%
SetTimer,kansi,-1
return
kansi:
Loop {
WinWaitNotActive,%GuiName%
WinWaitActive,%GuiName%,,3
if(ErrorLevel){
msgbox,非アクティブになって3秒経過
WinWaitActive,%GuiName%
}
}
return
GuiClose:
ExitApp
>>835 Processedは元は特定の時間(time)から現在の時間までの経過時間を
mm分ss秒みたいに表示するためので
それを流用しようとして差が一定以上だったらという条件を書き足してこんなんになってます。
windowFlagが0のままというかifinstring,wT,ウィンドウ タイトル を通ってない?
ウィンドウタイトルは固定ものですが指定の仕方が悪い?
半角スペースと全角文字(test テスト! みたいなもの)があるので
""でくくっても、括らなくてもどちらも通っていないような感じ
window spyで確認できるタイトルも指定しているのと同一だけど通らないようで。
>>835-840に提示されたものも試してみます。
ありがとうございます。
行き詰まりました、お助けを
ahk_classで特定ウインドウを取得して、ある操作をしたいのですが
クラス名が日本語で物凄く長いので、Autohotkeyが反応しません。
念の為、バイナリエディタでその実行ファイルのクラス名の書き換えをして
Autohotkeyが反応した事は確認しました。
何かいい方法は無いでしょうか?よろしくお願いします。
>>831 自プロセスならShowCursor使えばおk
他のプロセスならAttachThreadInputしないとダメ
844 :
842:2011/09/01(木) 20:00:00.26 ID:qREnlERX0
>>833 >管理者権限で動く窓を操作したいなら、管理者で実行だぜ
これ最近知りました。知りませんでした。
教えて頂きました。
>隠蔽するから
隠蔽してなくて3D FPSゲームです。
このゲームだけのことじゃなくて一般的なこととして
どうして仮想キーコードとスキャンコードの両方で
ホットキー設定するとおかしくなって、スキャンコードのみだと
ちゃんと動くことの理由が知りたいです。
Appskeyとかにも割り当てしたいので
今後また出くわすかもしれないので。
> 隠蔽してなくて3D FPSゲームです。
まだ隠蔽してるってw
一般的なこととしておかしくなったりしない
情報を小出しにする馬鹿
また日記の人が来てるのか
>>674の
AHKの前のVerでは動いてたのに・・・
ってくだりを見ると、日記の人でビンゴっぽいな
まずは車のライトをつけてみないと解決しないのに。
エラーは例外であって一般的に起こるエラーなどそうないのです
すべての事例は個別に対処されるしかないのです
ゲームソフトの類は内部をかなりチューンしてるものが多いみたいだし
キーカスタマイズ系のソフトがまともに動かないって話はよく聞くが。
少なくとも「一般的なこと」として対処できる代物ではないんでないの
つか7でもx64でもAHK_Lでもないから知らんけど個の環境依存の可能性はどうなの?
複数PCで検証した様子もなくAHK側の不具合もしくは仕様変更と決めつけてるのが気になるんだが
すみません、教えてください
WinWait,ahk_class xxxxで、複数のウインドウを一つのスクリプトで監視したいのですが
そのような事は可能でしょうか?
>>854 素晴らしい!本当に出来ました!有難う御座います!!
任意のアプリケーションが起動している場合、スクリーンセーバを起動させない、ということをAutoHotKeyで実現できますか?
>>856 後出しですみませんが、マウス、キーをタイマーで動かすことはなしで、でお願いします。
スクリーンセーバなんて長いこと使ってないな…
Windows7でモニターの全域を使用して、フルスクリーン表示がしたく
完全にタスクバーを隠すスクリプトを探しています。
幾つか試したものは、どれもトグル動作するものでした。
出来ればそれをバッチに組み込み、読み込みと同時にAHKがアンロード出来るようにしたいと思っています。
何か良い策はありませんでしょうか?お願いします。
MouseMove, MouseMove, PixelGetColor
3つの関数を利用して
アクティブウィンドウの
画面変化を検出して
マウスを操作しているのですが、
アクティブでない場合は
どのような方法をとればよいのでしょうか?
>>860 ちなみに非アクティブのまま
操作したいのです。
画面変化を検出するのに、なぜmousemoveが必要なの?
ここでアドバイスをもらいたければ、やりたいことを隠さず全部書かなきゃダメ。
>>860 CoordModeというコマンドを使うと、PixelGetColorのxyの基準を
アクティブウインドウの左上からスクリーンの左上へと変更できる。
CoordMode, Pixel, Screen
wingetpos, winX, winY, ,, ahk_class Notepad
pixelX := winX + 100
pixelY := winY + 100
PixelGetColor, color, %pixelX%, %pixelY%
レスどうもです。
>>862 画面変化はPixelGetColorで検出してます。
マウス操作はMouseMoveとMouseClickです。
(おっとMouseMoveがダブってた。)
>>863 非アクティブのままイケるかな?試してみます。
>>861
ショートカット1度目でON、2度目でOFFにする方法のご指導お願いします
初心者です。15分でホットキーを押すタイマーを作っています
Alt + Ctrl + upを1回押すことで15分後にWIN+xをSendすることはできました
15分経過前にもう一度Alt + Ctrl + upを押すことでキャンセルできるようにしようと思い、
if を使って改造してみたのですが、いまいち上手くいきませんでした
どう書けばいいか、よろしくお願いします
!^UP::
SetTimer, Alart1 , -900000
Return
Alart1:
Send, #x
Return
>>865 alert1Status := 0 ; 初期状態off
!^UP::
alert1Status := !alert1Status ; on/off反転
if (alert1Status) { ; onになるならセット
SetTimer, Alert1, -900000
} else { ; offならキャンセル
SetTimer, Alert1, Off
}
Return
Alert1:
Send, #x
Return
>>865-866 常駐させて何度もタイマー起動するなら15分経過後にフラグリセットしたほうがいいかも?
Alert1:
Send, #x
alert1Status =
Return
>>866>>867 そうすればいいんですね!上手くいきました
これでパワーナップが捗りそうです ありがとうございました
指定したウインドウを、アス比固定で最大化って出来ますか?
870 :
名無しさん@お腹いっぱい。:2011/09/04(日) 07:49:50.49 ID:kj/zgyTq0
既存のものでいいんですが、Windows7で動く
選択したファイルをひとつ上の階層に移動するようなスクリプトってありませんでしょうか?
例えばAフォルダの中にBフォルダがあるとして、そのBフォルダの中にあるaファイルをAフォルダに移動する、という動作です。
ファイルaを一つ上に移動するだけならアホみたいに簡単に作れるよ。
でもそんなもの作っても意味ないよね。マウスでつかんで移動した方が早いし。
じゃあどういうものを作ってどう使いたいのかって話だが
それがさっぱりわからんのではどうにもならんよ。
>それがさっぱりわからんのではどうにもならんよ。
小学生からやり直したら
>>870 起動引数(%1%)として、ファイル(フォルダ)パスを受けるスクリプトで、
その引数を フォルダ と ファイル名 に分割し(SplitPath)、
フォルダを一階層あげた(SplitPath)ところに移動(FileMove)するスクリプトを作る。
そのスクリプトに Drag&Dropしてうまく動作するようになったら
ショートカットを SendTo にいれる。
あとは右クリックして「送る」メニューの一覧から選ぶ
モニター間のウィンドウの移動が上手くいかない… 誰かください
親フォルダに送るスクリプト
オレも使ってるけど結構便利だよ
あとはフォルダの中身を全部吸い出すスクリプト
こっちはAHKでは中身を一つずつ処理するはめになるから一括処理できるWSHでやってる
ユニコードに対応してるしAHKでやれればいいんだけど中身が多いと処理時間的にだいぶ差が出る
ahk_class JUCE_123456789のような数字部分が毎回変化するクラス名なんですが
SetTitleMatchMode, RegEx
#IfWinActive, ahk_class ^JUCE
正規表現を使えばこれで動くと思ったのですが上手く行きません。
間違えを指摘してくれると助かります。
#IfWinActive, ahk_class ^JUCE_.*
#IfWinActive, ahk_class ^JUCE_\d+
#IfWinActive, ahk_class ^JUCE_[0-9]+
のどれかを使う
ありがとうございます。でもまだ上手くいってなかったりします。。
過去ログでクラス名がahk_class Afx:400000:8:10011:0:xxxxxxxx の場合
SetTitleMatchMode, RegEx
#IfWinActive, Paintgraphic2 ahk_class Afx:400000:8:10011:0:.*
return
で動いたとありましたので、変化部分は.*にすれば動くような感じですが
タイトル部分も必須なんですかね、なんか凡ミスの悪寒もするので出直します。
その後、WinTitleのほうで正規表現を使ったら動作しました。
ソフトによってはクラス名だけの指定だけだと動かないのかも
>>873 レスどうもです。なんとかけそうです。
ただ右クリックメニューからでないと起動できないので動作がもたつきます。
ポップアップ表示を省略して一気にショートカット起動することはできないんでしょうか?
>>875 そのスクリプトはどういうものなのでしょうか?差し支えなければ教えて下さい。
ほらな
どういう使い方したいのか最初にはっきりさせないから二度手間、三度手間になる
11まで増えてた
● 分からない理由 ●
1. 過去ログを読まない。
2. 読んでても肝心な所が見えてない。
3. 検索能力が低い。
4. そもそも検索する気がない。
5. 類推という概念がない。
6. それ以前に普通に頭が悪い。
<わからない11大理由>
1.読まない …現行スレ、テンプレ、取説などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
10.開き直る …自分の思うようにならないと開き直る。
11.2ちゃんねるをお客様相談室だと思っている。
何だこれ、日記の人が大増殖してんのか?夏休みは終わったろ
>>880 >ポップアップ表示を省略して一気にショートカット起動することはできないんでしょうか?
スクリプトの起動方法はAHKと直接関係ない。自分の好きな方法で起動すればいい
そこもAHKでやりたいなら親スプリクトからホットキートリガで起動するなりすりゃいいだろ
選択したファイルのパスは一旦クリップボードに入れて取り出せば?
>そのスクリプトはどういうものなのでしょうか?
前半のこと聞いてんなら873が上で説明してるから省略してんだろ
後半のこと聞いてんならWSHはスレ違いここで聞くな
thinkpad の中ボタンとトラックポイント同時押しで
スクロール(トラポへの力でアナログな速度変化)
を再現したいんですが中ボタンのないなノートのトラックポイントキーボードで
可能でしょうか?
すみません教えてください
>>9の1 Hour SoftwareのGhoster(Ghoster.ahk)が気に入ったので
手を加えてAutoHotkey.ahkに組み込もうとしてるんですがどうにも上手くいきません
↓AutoHotkey.ahkからホットキーで呼び出し
^#g::
#Include %A_ScriptDir%\Ghoster2.ahk
return
↓Ghoster.ahkに手を加えた部分
(Ghoster.ahkの先頭)
Hotkey, ^#q, EXIT ;終了用のホットキーを指定
(中略)
EXIT:
Menu, Tray, DeleteAll ;タスクトレイのメニューをリセット
Menu, Tray, Standard ;標準のタスクトレイメニューを追加
Hotkey, ^#q, Off ;終了用のホットキーを削除
WinActivate, ahk_class Shell_TrayWnd
WinWaitActive, ahk_class Shell_TrayWnd, , 1
Gosub, DESTROY
WinActivate, ahk_id %oldid%
Exit ;ExitAppのままだとAutoHotkey.ahkごと終了してしまうのでExitに変更
こんな感じで動くことは動くのですが、なぜかホットキーが二回目以降は効かなくなります
^#g→スクリプト起動成功→^#q→スクリプト終了成功→^#g→スクリプト起動失敗、という感じです
AutoHotKey_Lを再起動(AutoHotkey.ahkをリロード?)するとまた一回目だけは成功します
Ghoster.ahkの部分をAutoHotkey.ahkにコピーして関数化して呼び出したり
GoSubで直接ラベルに飛んだりしてみましたが結果は同じでした
今は最後のExitをReloadに変えて
AutoHotkey.ahkをリロードするようにしていますが
別の対処法がありましたら教えてください
AutoHotkey_Lのv1.1.03をVistaSP2の32bitで使用しています
Ghosterがどういうスクリプトか見ずに書くけど
根本的にいろいろと理解できてない予感
終了用のホットキーだけ加えたGhosterをIncludeじゃなくてrunで呼び出したら?
AHK関連付けされてなければ実行ファイルにしてからね。
#Include はAutoexecuteセクションに書かないとダメ
ホットキーで呼び出したいなら組込みじゃなく
^#g::
Run,%A_ScriptDir%\Ghoster2.ahk
return
とかにしたら?
おっと被った
EXITラベルの中でExitしてもEXITラベルが終了して戻ってくるだけで
依然^#gホットキーの中にいるのではないかね
教えて下さい。
複数のスクリプトが起動している場合
特定のスクリプトをコマンドラインから終了させる事って出来ますでしょうか?
よろしくお願いします。
ビルトインでそういう機能は無い。
が、Hiddenのメイン窓(ahk_class AutoHotkey)を探してタイトル見れば
パスがあるので、閉じてやれば決め撃ちで終了させることは可能。
その処理をAHKでやらせるなら、
DetectHiddenWindows, On
; SetTitleMatchMode 1 とか 2 とか RegEx とか必要なら
WinClose スクリプトパス ahk_class AutoHotkey
で実現可。
>>888-891 関連付けはしてなかったのでAhk2Exe.exeでコンパイルして上手く行きました
もともとGhoster.exeはGhoster.ahkの作者の人が既に作ったものがあったのですが
トレイアイコンを増やしたくなかったのでGhoster.ahkをAutoHotkey.ahkに組み込めないか四苦八苦してました
コンパイル前に終了用のホットキーと#NoTrayIconを付け加えて
トレイメニュー関係を削除することで希望通りの動作になりました
ありがとうございます
>>893 ヤクザさんバッチリ出来ました!
有難う御座いました!
PCでテレビを見ているものですが、専用のリモコンがあって10秒早送りや倍速生成ボタンがあり
その同じ動作をAutoHotKeyから制御したいと考えています。
Media_Play_PauseやMedia_NextはAutoHotKeyで用意されていますが、目的のキーがないので
リモコンキーを押した時テレビアプリに送られるコマンド?を見つけて、SendMessageでその命令投げたいと考えていますが、
目的の命令が何のコマンドを送っているかを調べる方法はあるでしょうか?
キーボード操作を受け付けないなら
マウスの移動とクリックでやるしかないんじゃないの
>>897 実は現在それで対応しているのである程度満足しているのですが、左クリックしてのメニュー表示がやたら遅いソフトなので
その工程を省いて直命令でクールに制御したいと思いまして。
>左クリックしてのメニュー表示がやたら遅いソフトなので
なんで具体的に書かないんだろうか。
うちと同じアプリを使ってたらそのまま提示できたのに。
>>899 すみません。
Sonyの GIGA pocket digital です。
Windows7の64bitOSです。
901 :
名無しさん@お腹いっぱい。:2011/09/07(水) 22:29:21.79 ID:5N2y7pN+0
デュアルモニタ環境下でアプリケーションをRunで起動させたときに、
セカンダリか、プライマリモニター、どちらかで起動するかを指定する場合、どうしたらいいんでしょうか
902 :
894:2011/09/08(木) 08:22:19.95 ID:gOr4MxiD0
>>894に追記
run, %A_ScriptDir%\AutoHotkey.exe Ghoster2.ahk
でも上手く行きました
結果は変わらないようだしEXE化するより小まめな修正がしやすいです
includeの使い方が悪いみたいに言ってるのはデタラメだぞ
ちょっと書き換えてやれば当初の通りのやり方もできる
視認性の面から言うならホットキー指定の中にIncludeというのはあまりいただけないというか
できるからって人に薦めるような内容ではないような
AutoHotkeyの書式をコマンド排除して関数式にするとかいってたのどうなったの?
>>905 v2 はコマンドの一部が関数に移行するんじゃなかったっけ?
うろ覚えだけど、たしかそんな事が書いてあった気がする
ThumbRemapを64bitで動くようにする方法ってもう判明してるかな?
とりあえずSynaptics。
ウインドウが最前面にきてしまい、マウスカーソルすら見えなくなる場合
マウスカーソルを最前面にする事って出来ますか?
マウスカーソルのレイヤーって最善面ウィンドウよりさらに前面なはずだが。
ってかその最前面ウィンドウがマウスカーソル非表示状態なんでないのかね。
動画とかゲームとか全画面にしてるとマウスカーソル操作してないとき自動的に消す機能あるの多いからそれで消えてるんじゃね
ahk_classで、指定したウインドウに対して
マウスクリックを受け付けなくする事は可能でしょうか?
よろしくお願いします
まず、ゲームなどDirectInput使ってるなら無理な可能性が高いと断っておく
そういう特殊例でなければ、余裕でできる
>>5にあるひらがなをF13にする要領で右側のWinキーをF13にしたいのですが
それにあたってwindows7の64bitではとある障害があり、加えて僕の希望があるので出来ません。
どなたか知恵をください。
邪魔する障害というのが、
・ChangekeyやKeyswapという変更ソフトが「管理者として実行」しなければ動かない
→よってAutoHotKeyによるF13へのリマップが上のソフト上では無効化されるため
F13を読みこませることができない。ということです。
加えて僕のやりたい希望というのが
・右WindowsキーをF13にしたい。
---右Windowsキー+Lによる画面のロックを無効化させたい
というものです。
教えてください。よろしくお願いします。
上の書き込みですが、ぐぐったら
トップにそれらしい解決法がありました。。。
いまからやってみます。お騒がせしました。
任意のキーを押した時に、押した時間や離した時間は無関係に
10msだけ送信したとか、そう言った動作は実現出来るでしょうか?
$a::
setkeydelay,,10
send,a
keywait,a
return
とか?
>>914 勘違いしてるんでわないだろうか
レジストリのキーボードリマップ方式は、OSの設定書き換えなだけで、常駐ソフトは要らない。
設定ソフトを使うと楽なんで紹介されているだけで、RegEdit で手でやっても同じ結果を得られる。
したがって、設定後はレジストリに通りにリマップをOSがやるので管理者権限は不要。
>>917 凄い!バッチリ出来ました!
有難う御座いました。
1.1.04.00 - September 11, 2011
This release contains a number of potentially script-breaking changes.
Added exception handling support: try/catch/throw and Exception().
Added StdOut mode for #Warn.
Added Gui +HwndVARNAME option.
Added Gui, New [, Options, Title].
Added automatic support for keyboard accelerators such as Ctrl+O in Gui menus.
Changed handling of #Include <Lib> when the /iLib command-line switch is present to resolve a problem with Ahk2Exe.
Changed GuiControl to retain the Progress control's current value when its style is changed.
Changed GuiControl and GuiControlGet to allow a HWND to be passed in the ControlID parameter.
Removed the 1GB limit from FileRead.
Improved error detection:
* Hotkey, If, Expression, where Expression does not match an existing #If expression, is caught at load-time when possible.
* Hotkey, IfSomething, where Something is invalid, is caught at load-time.
* Class definitions with missing braces are detected as errors.
* If a function call is used on the first line of a class definition, it is now correctly treated as an error.
* GroupAdd now shows an error message when the group name is blank, instead of silently exiting the thread.
* Removed some redundant "unset var" warnings which appeared when using the OutputDebug or StdOut warning modes.
* If an unrecognized option is used with Gui, Gui Show, Gui New or GuiControl, an error message is shown and the thread exits unless try is used.
This validation is not done at load-time due to complexity (it is common for the option parameters to contain variable references).
* RegRead, RegWrite and RegDelete now set A_LastError to the result of the operating system's GetLastError() function.
* +LastFoundExist is now treated as an error if it is combined with another option (+LastFound should be used in that case).
Fixed a bug affecting recursive variadic functions.
try〜catch〜throw って。まぁ ErrorLevel よりは楽にはなるところはあるんだろうけど。
なんか、普通の汎用言語に強力なホットキー機能をつけたほうがいい気がしてきた。
922 :
名無しさん@お腹いっぱい。:2011/09/13(火) 10:33:25.41 ID:amoqStMv0
特定のキーを押したらそれ以外のキー入力を受け付けなくする方法ってありますかね?
Photoshopのバーズアイビューという機能がスペースバーと別のキーを間違って押してしまうと暴発するのでなんとかしたいのです。
スペースバーはよく使うキーなので、スペースバーを押したら他のキー入力を受け付けなくするというようにしたいです。
ver2まだかよ
>>921 それがver2なんじゃね
>>922 #IFとかでがんばれば可能。希望とは違うが簡易で
Space::Return
Space Up::Send,{Space}
動くけど訂正
$Space::Return
$Space Up::Send,{Space}
スクリプトでc言語のマクロのようなマクロを使えますか?
#define M1 1200
x:= M1
y:= M1+M1
を
x:=1200
y:=1200+1200
のように解釈したいのです
>>926 そのままできるじゃん。
何が疑問なんだか、さっぱり意味がわからない。
>>920 >Fixed a bug affecting recursive variadic functions.
これってどういうこと?
>>926 できないと思う
というか、必要な場面がなさそう
931 :
名無しさん@お腹いっぱい。:2011/09/14(水) 00:50:34.08 ID:zsypTUED0
マウスのマッピングに;全体と個別のマッピングを使用していますが、
Firefoxがアクティブな場合、;全体のマッピングも有効にしたいと考えていますがそんなことは可能でしょうか?
;全体のマッピング
MBUTTON::
任意の処理
;Firefoxのマッピング
#IfWinActive, ahk_class MozillaUIWindowClass
MBUTTON::
任意の処理
#IfWinActive
;全体のマッピング
MBUTTON::
右を向く
;Firefoxのマッピング
#IfWinActive, ahk_class MozillaUIWindowClass
MBUTTON::
左を向く
#IfWinActive
両方有効にしたらどっちを向けばいいですか?
>>932 全体とFirefoxの任意の処理が同一処理であるなら
FireFoxのマッピングの Mbutton:: は不要
具体的にやりたいこと書いたほうがよさげ
やりたい設定のマトリックス書いて集合の和や補集合考える
で、#IfWinNot〜も使う
DVDバックアップソフトの処理が終わるまでスクリーンセーバ起動及びモニタ電源OFFをさせたくないのですが
何かいいやりかたはあるでしょうか?
個のソフトバックアップが終了すると終了しましたダイアログが出るので、
1分おきのタイマー処理で指定のダイアログが「IfWinExist」でないなら、MouseMoveというしょぼい処理をしています。
WinSet, Bottom, , AしただけではActiveになったままですが、最小化や非表示はしないで非アクティブにするにはどうすればよいでしょうか?
>>938 デスクトップ or タスクバー をアクティブにする
>>939 なるほど、そんな技が。
ありがとうございます。
特定のスクリプトだけキーボード配列のハード層に近いリマップをしたいんですが
$を使うのでしょうか?今一つわかりません
script1
a::a
s::o
script2
o::2
s::3
とあったときscript1最下層に来るようにするには
$をうまく使うのでしょうか?
わかりにくくてすいません
キーボードのqwerty->dvorak配列の
スクリプト1と
その他のスクリプト2−3を同時起動しているとき
スクリプト1で実質ハードウェアで配列を変更したのと同じ作用にすることは
$を使えば可能なのでしょうか?
1.1.04.01 - September 15, 2011
Fixed FileRemoveDir setting ErrorLevel incorrectly.
>>941-942 **凄く適当だけど**
[キーボード]
↓
[ドライバ]
↓
〜〜〜〜
↓@
[システム] ←☆
↓A
↓
[アクティブウィンドウ]
AHKのキー定義方法は上記の@かAで、キーを拾ったら☆のところで別キーを吐き出すことで
キーアサインを変えてる。で、それぞれ特色は以下:
@ キーフック(k-hook)
多重に掛けることができる。後からフックしたやつほど先に処理ができる
A OSへのホットキー登録(reg)
OSが管理するホットキー機能を使う。別アプリとかで宣言されてたら使えない。
つーことで、@でベース作って、Aで味付けってことになるが、問題がある。
リマップ( a::b )はフックなんで、☆で吐いてるのを拾えないし、同一キーへの多段設定は
後からやったやつのみ有効になるので
>>941 の例は破綻。
script2でリマップをやめて [ o::Send,2 ] みたくすりゃ何とかなるかもしれんけど
Aで設定できない場合@に自動で切り替わるんで、すべてがうまくいくとは限らない。
確実にやりたいなら〜〜〜のところで動作するレジストリいじるのがいいと思う。
>>5 の下段
Fn+F5を他のキーに割り当てたいのですがどうすればいいですか?
見たところマニュアルにFnキーの記述がありませんでした。
#IfWinActiveはホットキーの定義にしか使えないですが、OnClipboardChangeみたいにウィンドウがアクティブになった時にサブルーチンをコールバックすることはできないものでしょうか?
やはり地道にループで常時監視するやり方しか無いのでしょうか?
>>947 できました。
すごい、こんな合わせ技が、しかもAutoHotKeyだけで完結できた。
ありがとうございます。
>>944 reieditで
google IMEの KBDJPN.DLL→KBDDV.DLL
いじって出来ました
>>945 fnは無理だったような…
>>949 Fnはダメですか…
なんか対応するキーがハードウェアに直結するようなものばっかりだから難しいのかなと思ってました。
マウス操作でFn+F5をコントロールしてモニター明るさを調整したかったんです。
DLighter.exeというソフトで明るさを変えられるのですが「Fn+F5」とは違いソフトウェアで制御しているので、なんか変な明るさになっちゃうのが難点で…
Windowsのイベントにでもあればなんとかなるかもしれないかな…
952 :
949:2011/09/16(金) 20:28:05.19 ID:lZtIw/Y80
Alt+`
で日本語入力と直接入力が切り替わらなくなって
偉い難儀しましたが
たまたま見つけたスキャンコードをSendしてどうにかなりました
私の環境ではsc219でした
regeditでgoogle 日本語入力とdvorakの両立を企てる人は参考にしてください
EpgDataCap_Bonの画面の無効や削除ボタンを押したいです。
9系だとButton番号を取得できたのですが、10系になって取得できなくなりました。
どうすればボタンの番号を取得したり押せるようになりますか?
コアな質問ですみません。
954 :
949:2011/09/16(金) 22:46:03.34 ID:4br0nXP10
ノートのUSキーボードで英語OS
ためしにアルファベットのscの出力の動作をためそうと
どっかのページから拾ってきたものをSendしたら
たまたまAlt+` が再現できたという次第です
autohotkey定番のこのスクリプト
(変換キー+Mで、Firefoxが起動してなければ起動を。起動していたらFirefoxウインドウを最前面に)
ってやつが、Windows7 64bit、autohotkey.exeバージョン1.1.3.0で実行すると
すでに起動していたFirefoxが最前面に来る+常にFirefoxが新ウインドウで起動
の両方が起こってしまうんだけど、
妥当な処理にするためにはどう書き換えればいいんだろ?
vk1Csc079 & m::
Process,Exist,firefox.exe
If ErrorLevel<>0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
else ;起動していなかった場合
Run,firefox
return
いつ定番になったんだろうか
Firefoxなんてそれ自体が排他制御やってるんだからそのまま起動でいいんじゃね
あるいはとりあえずこれでしのぐとか。
自分はいつもこれだけどたまーに誤動作するけど気にしないw
IfWinExist,Calc
{
WinActivate
}
else
{
Run,Calc.lnk
}
>>957 なるほど、それもシンプルでいいかも。
サンクス。
Firefox以外にもいろいろショートカット作ってて、あくまで一例
つーか7 64bitはシフトJISがだめになってるのか。
>>955をUTF8で保存すると普通に問題なく動く。
組み合わせキーの二つ目に何が押されたか取得する良い方法はないでしょうか?
自分で思いつくのは↓くらいです。。
Ctrl::
KeyWait, foo,L T3
tooltip, %foo%が押されました
Send ^%foo%
return
別にダメではない 。
x64版はユニコード版でデフォルトでUTF-8として読もうとしてるだけ。
スクリプトの文字コードの自動判定機構はないので、起動オプション /CP932 を指定すりゃシフトJISで読む。
Win7でApatch起動
RunAsで管理者権限が拒否されて起動できない
>>962 アカウントにパスワードを設定していない場合はパスワードを設定する、
もしくはApatchの実行ファイルを右クリック→プロパティ→互換性(タブ)
→「管理者としてこのプログラムを実行する」を有効にして適用
Windows標準の「名前を付けて保存」ダイアログで
開いているフォルダをAHKで制御できないでしょうか?
やりたいことは、名前を付けて保存でフォルダの選択に
外部ツール(fenrirなど)を用いたいということです
ControlSendなどで制御しようにもアプリケーションによってクラスが変わるらしく…
なにか良いアイディアはないでしょうか
>>963 >アカウントにパスワードを設定していない場合はパスワードを設定する、
パスワードを設定しても弾かれる
>→「管理者としてこのプログラムを実行する」を有効にして適用
これだとRunAsは関係なくなる
RunAsで設定すれば右クリックの管理者として実行と同じと思ってたが違うのか
XButton1 & LButton
みたいに戻るキー+左クリックに別の機能を割り当てたいんだけど、
この記述方法では、Xbutton1単体で押した場合の機能が殺されてるみたい。
これを殺さずに、単体でXbutton1押した場合の動作をちゃんと「戻る」にするにはどうすればいいんだっけ?
自己解決?
Xbutton1 up::send,{xbutton1}
を別で設定すればいけそうかな?
チルダ付ける。
~XButton1 & LButton::
>>969 それもやってみたんだ。
そうしたら、Xutton1 & Lbuttonで設定した機能と、戻るコマンドも一緒に実行されてしまうんだ。
それぞれの機能はそれぞれで実行されて欲しいから、それは嬉しくないなぁ・・・と。
iTunesなどにWinMenuSelectItemって動作しますか?
Firefox(3.6)も動作しないのですが、メモ帳は動作します。
#IfWinActive, ^iTunes$
a::
WinMenuSelectItem, ^iTunes$, , &1, &1
return
#IfWinActive
最小化はされていないので、使える条件はクリアし得ると思うのですが。
>>971 「など」と書いたら答えなんぞ出せなくなるぞ
WinMenuSelectItem は昔ながらの標準メニューにだけ効果があるので、
自前描画系のものはほぼ全てNG。
一応、判断としては以下のスクリプト動かせば分かるはず。
Pause::
MouseGetPos,,, hwnd
ptrType := (A_PtrSize > 0) ? "Ptr" : "UINT"
Tooltip, % "標準メニュー" . (DllCall("GetMenu", ptrType, hwnd, ptrType) ? "あり" : "なし")
Return
そろそろ次スレの季節
>>972 ありがとうございます。
なるほど、標準メニューと言っても見分けがつきづらいですね。
Resource Hackerでも確認できました。
今時のソフトはほとんどが標準じゃないのですね…
調べてみてびっくりしました。
エディター系しか使えない…、残念。
クールじゃないですが、ショートカットキーで何とか対応するようにします。
iTunesの早送りのCtrl+Alt+→で
Send, ^!{Right}
を実行しても無視されます。
他のウィンドウはこの辺の組み合わせは問題ないのですが…
Windows7の64bitでタスクマネージャやWindowsサービスの画面がアクティブになっている状態で
ランチャー呼び出しのショートカットキーを送っても反応がありません。
上記がアクティブ中にキーボードから同じショートカットキーを送ると動作しますが、AutoHotKeyからだと動作しません。
タスクマネージャやWindowsサービスの画面以外がアクティブの場合は動作します。
AutoHotKeyでショートカットを送る前に、一度デスクトップをアクティブにしてからキーを送ると正しく動作します。
ダメ
Send, #{F12}
うまく動作
WinActivate , Program Manager
Send, #{F12}
タスクマネージャやWindowsサービスの横取り?しているのかわかりませんが、これはなぜでしょうか?
ちなみにかざぐるマウスの画面下をアクティブにする動作も、タスクマネージャやWindowsサービスがアクティブだとカーソル下のアプリがアクティブになりません。
スクリプトを管理者権限で動かしてみてダメならもう一度報告汁
>>978 C:\Program Filesにインストールできるユーザなので、管理者権限だと思います。
Windows7の64bitのタスクマネージャで全プロセスを表示ボタンを押すとAlt-Tabの動作もおかしいです。
しかもAutoHotKey起動していない時でも。
なんかこのタスクマネージャが明らかにおかしい…
ユーザーアカウントが管理者権限であっても
スクリプトは管理者権限で動いてない。
Autohotkeyスクリプトを全て終了させ、
AutoHotkey.exeを右クリックしてプロパティを開き、
「互換性」タブにある「管理者としてこのプログラムを実行」にチェック入れて「適用」、
もしくはスクリプトをAhk2Exe.exeでコンパイル(exe化)して↑と同様に
「管理者としてこのプログラムを実行」にチェック入れて「適用」し、
(他にも管理者として実行する方法がある)
スクリプトを実行する。
>>980 ありがとうございます。出来ました。
でも全く理解出来ないです。なんでこんなことに…
しかもマウ筋とかざぐるマウスを併用しているのですが、こちらにも権限を与えないとダメですね。
権限がある方だけ実行される…
ん〜あ〜チョーめんどくさいWindows7!
どうもありがとうございました。
画面の四隅の縁に赤線をつけて、画面の輪郭を際だたせることはできますか?
OSの設定でやったほうがいいんでないのかね。
950でも980でもいいから次スレよろしく
立てられないのなら代行頼んできてね
>>983 色付けを動的にしたくて、かざぐるマウスの全面表示した場合にわかりやすいように枠を付ける機能にほれてしまって。
テキストボックスに値をセットする場合は ControlSetText, Edit11, %A_Now% のように「Edit」+番号で対応できましたが、
ボタンクリックで「ControlClick, Button1, A」や「ControlClick, 追加, A」を実行しても、左上から見て最初にある「追加」ボタンが押せませんでした。
ちなみに「ControlClick, Add, A」もダメでした。
左上から見て最初にある「追加」ボタンを押すにはどうすればよろしいでしょうか?
>>986 ごめんなさい
こっちにスレ建てレスするのを忘れてそのまま出社してもうた
うめ
うめ
#ume