AutoHotkey スレッド part25 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>378
対策は知らんけど、消す方法ならある
loop, 5 {
ifwinexist
break
winactivate, ahk_class #32768
send, {alt}
} ifwinexist
じゃなくて
ifwinnotexist, ahk_class #32768 >>378
ポップアップメニュー表示中は、SetTimerの割り込みでさえ出来なくなるので、
ポップアップメニューを別AHKにして呼び出さないと、表示後の対策は何も出来ない。 使ってたフリーソフトがたびたび落ちるから、似たようなの自作して安定してたけど
元がmigemo対応してたんで、こっちにも組み込んでみたら落ちるようになったつらい #usehook
^b::
send,^a
return
^a:: ;コピー
send,^c
return
^bでコピーのスクリプトを動かす方法ってないですか?Goto、Gosubは使わないで この手の質問にあるあるだな
何をしたいのか具体的に書かずに、省略した謎コードを添削させるという 質問に答えねーでケチつけるだけのゴミがでてくることこそあるある いやいやそこでクイズに答えてしまうと質問者は己のコードミスに気が付かないまま終わるで
send,^a はどこ行っちゃったんですかねぇ ああ^cと^a間違えてるわけじゃなくてソフトウェアホットキー有効にしたいのね
#usehook外せばいいんじゃないすか >>389
すいませんその方法も使えないんです。
>>391
そうですソフトウエアホットキーを使いたいということです。
ですが#usehookや$がないと無限ループがおこるとかリスクがあるみたいなのでもう少し調べてなかったらあきらめます。
ありがとうございました。 無限ループ起こるのは
^a:: send,^a
とかやった場合だよ
A_ThisHotkeyと同じものをsendしたい場合だけ ラベルに$つければいいだけじゃね ダメだ。マウスエミュレーションじゃゲーム上でカメラ動かないわ
何が条件なんだろう 3つを一度に比較ってできませんか?
space::
a:=10
b:=20
c:=30
z:=(a < c > b)
tooltip,%z%,600,800
return ここ2,3か月前に同じような質問見たな
まああれは質問というか文句言いに来て恥かいただけだったが and使うのが嫌ってこと?
まとめて一行で書く方法が分からないってこと? だいぶ説明不足でしたすいません。
3つの数字は常に変動してて、ホットキー押したときにそのとき一番大きい値のを選択するってことがしたいです。
ifを沢山書けばできるけど一行でやる方法ないかなあと調べたのですが分からず。
一つ増えまして4つで比較ができればいいのですが。 z := (a >= b ? a : b) >= ( c >= d ? c : d ) ? (a >= b ? a : b) : ( c >= d ? c : d )
1行で書けるけど、1年後とかに見たら何をやってるのか分かり難いので
ifで書いといたほうが視認性はいいんじゃないかな 参考演算子使えばやれないこともないが素直にif書くほうが楽だと思うわ 可変長引数を取るmax関数でも定義すればいいじゃない
Max(params*) {
t := params[1]
Loop % params.MaxIndex() - 1 {
b := params[A_Index + 1]
t := t > b ? t : b
}
Return t
}
a := 10
b := 20
c := 30
d := 40
MsgBox % Max(a, b, c, d)
Return >>403
これはすばらしい。 こんなこと出来たんだ integer限定でよければこういう方法も
Max_integer(params*) {
o := object()
Loop % params.MaxIndex() {
o[params[a_index]] := true
}
Return, o.MaxIndex()
} 質問です
対話形式プログラムの自動化ってできるんでしょうか?
コマンドプロンプトに対してControlSendで送ることは出来ても
返答メッセージの読み取り方が分かりません。 >>400
>>403
>>405
おー、すごい
できるようになりましたありがとうございました。
ahkを一年以上使ってるけどwiki読んだり検索して似たようなことやってる人のスクリプトを見てもわからなくてちょっと改変して移植もできない場合が多すぎて自分のポンコツぶりが悲しいw >>406
uwscは doscmd で出来るけど、ahkでは試そうとしたこと無いので出来るかどうか解らない >>406
大昔に無理やり実装してた人はいた、オリジナルANSI版の頃のだからたぶん今だと動かないと思うが
ここの プロセスを起動して標準出力を読み書き
http://lukewarm.s101.xrea.com/myscripts/
最近のだとこの辺とか?
AutoHotKey_Lで、標準出力を得る方法。
http://poimono.exblog.jp/22219786/
単純に出力見たいだけだったらファイルにリダイレクトしちゃうのが簡単だけど
(書き込み規制に引っかかるので全角化)
RunWait, cmd.exe /c es.exe 検索文字列>temp.tmp,,Hide /UseErrorLevel
FileRead,var,temp.tmp
msgbox,%var% >>406
例えば rmdir を使ってフォルダとその中にあるファイルを削除する場合
app := ComObjCreate("WScript.Shell").Exec(ComSpec)
app.StdIn.WriteLine("rmdir /s D:\DeleteMe") ; D:\DeleteMe と DeleteMe フォルダの中にあるファイルを削除するコマンド
While (1) { ; DeleteMe フォルダの中に一つでもファイルやフォルダがないと無限ループするから注意
msg .= app.StdOut.Read(1) ; ReadLine だとこちらの入力待ちの時にデッドロックする
If (InStr(msg, "よろしいですか (Y/N)?")) {
MsgBox % msg
app.StdIn.WriteLine("Y") ; 確認を求められたので y を入力して削除を実行
break
}
}
app.StdIn.WriteLine("exit")
Return
こちらの入力待ちになるまでの処理は色々なやり方があると思う いろんなご意見ありがとうございます!
>>408
対話型には向いてなさそうな…
>>409
url一つ目のやつは試してみたけどahk_lだと動きませんでした
url二つ目のやつはout of memoryとでて、こっちもダメでした😭
>>411
これです!
なるほどこうやってCOMオブジェクトを使うんですね
すごい勉強になりました
>>412
原理的には411とほぼ一緒みたいですね
WINAPIはいまだにさっぱりよくわかりません
高速でControlSendを使うと
キーボードからの入力がたまにロックされて使えなくなってしまうことがあったので
COMオブジェクトで直接読み書きできるならそれにこしたことないですね キーの長押しすり抜け病って修正されてるのかな?
未だなら早よ!
これがちゃんとできないとカーソル移動とか怖くてAHKは使えないんだよ
致命的な不具合だ! >>415
こんなポンコツよく使ってると感心する 信じられないw
もちろんこれがゆえにkeyhacに移行したわ! ここ数年で作ったものを見返してみたら全くホットキーと関係ないものばかり
なんで俺はAHKを使ってるんだろう…? ちょっとしたファイル操作とかでもahkでやろうとする癖は付いてしまってるな
本来ならbatやwshあたりでやればいいんだろうけど 本当にAHKは使いもんにならんのよ!
キーログを見るツールとかを立ち上げてAHKの動作を確認したんだが
スクリプトがまともに動かんのよ、ダメだろこれは!
ちゃんとフックできてないんよ、笑うわw AHKって宗教か?
本当に改善が必要な部分を指摘してるのにまともに考えられないの?
だよ >>423
お前こそ宗教なの?
気持ち悪いから早く消えろよ すり抜けとか押しっぱなしの指摘なんて散々されてると思ってたけど、そうでも無いの? /ヽ /ヽ
/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | ハサミ が // ___ \ ::::::::::::::|
| | 使エネーヨ | | | U :::::::::::::|
| | ヽ(`Д´)ノ.|U | | ::::::U::::|
| | >>421 | ├―-┤ U.....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ :::::: いうても困らない範囲内でしか使ってないからなあ
そもキーリピート発生するキーをホットキー長押ししようとは思わんし
ahkは名前こそAutoHotkeyだがキーカスタマイズだけが目的なソフトじゃないしな
ウィンドウ制御とかいらんならahkである必要性は薄い
ソフトによって得手不得手あるんだし自分の目的に合ったもん使えばいいよ GUIについての挙動についてです
GUI,Add, GUI,Showなどで作ったウインドウ上でスペースキーを押したときの挙動
ってどこかに書いてあるでしょうか
このときに別の挙動をするように、
#IfWinActive
でこのGUIがアクティブになったときに
Space:Msgbox TEST
としても反応しないのです
で、このGUIウインドウ上でアクティブなボタンが実行されます
GUIがアクティブのときにSpaceキーで別の挙動をするようにする方法を
教えてください AHKでは長押しカーソル移動がまともにできませんよ
ソースコードをテキストエディタで開いてカーソル移動したら
意図しない文字が入力されてしまうなんて怖くて使えませんな テスト用のサンプルスクリプトを作りました
スペースキーが出来ません
Gui,Add,Button,GButton1 W242 H30,ボタン1
Gui,Add,Button,GButton2 W242 H30,ボタン2
Gui,Show, , テスト
return
Button1:
MsgBox ボタン1
return
Button2:
MsgBox ボタン2
return
#IfWinActive, テスト
Space::MsgBox SPACE
Up::MsgBox UP
#IfWinActive >>429
俺の環境でも再現できるかどうか実験したいから、そのスクリプトを書き込んでくれるとありがたい。 >>430
Spaceキーを押したらmsgboxに SPACE と表示されるよ >>429
だから使わなきゃいいだろ
思考力停止してんの? >>433
ごめんなさい。 いまやったら出来ました。おかしいな、さっきは何回やっても出来なかったのに
どうも私の環境のようです。 この質問は撤回します ネットワーク上にあるファイルをFileCreateShortcutでショートカット作りたいんですが、
処理が異常に遅いんですけど、10秒くらいかかるんですけど、何か対処法
知っていたらご教授お願いします。 >>437です。
自己解決したので報告します。
FileCreateShortcut, "%filePath%", %shortcutName%
といった具合に%filePath%にはダブルクオーテーションを付ける。
以上です。 >>431
自分は>>249じゃないが>>136試してみたら確かに"すり抜け"っつうのは発生した
例えばメモ帳でctrl押しながらhを押しっぱなしにして十数秒〜数十秒そのままにしてると
文字の「h」が入力されたり「置換」ダイアログが現われたりした
win7 32bit home ahk 1.1.26.01
自分はこんな操作しないから困らないな >>440
いやだから具体的に何故ダメなのか教えて >>442
俺が引っかかった事例としては関数呼び出しのときにエラー吐いたり、文字化け起こしたり、ファイルの保存形式によってはそのまま貼るとエラー吐いたりして二度手間になったり、コンパイルする時エラー吐いたりした GUIのボタンです
Gui,Add,Buttonで作ったボタンの色を変えることは出来ますか
Gui, Color, Red, Blue
とかやってみたのですが、ウインドウの背景は変わってもボタンの色が
変わりません
ボタンはひとつづつ個別に色を変えたいです
オプションのBackgroundもやってみたのですが、良くわかりません
Cnもボタンのテキストの色が変わりません 7-zip32.dll使いたくて↓を参考にDllcallのめぼしいところを Astrに直してみたんですがA32.exeでしか上手くいかないです
http://mimizun.com/log/2ch/software/1265518996/420-422
U32.exeはLPCSTRの型をAStrにすると戻ってこなくなっちゃう
Strのままだと文字化けしちゃう
VarSetCapacityのポインタ回りだと思うんですがどう直したらいいかわかる方いますでしょうか
ArcGetName(){
/*** int WINAPI SevenZipGetFileName(HARC _harc, LPCSTR _lpBuffer, int _nSize) ***/
global
;;;size:=VarSetCapacity(buf,256)
;;;DllCall(ArcLibPrefix . "GetFileName",UInt,hArc,Str,buf,Int,size,Int)
size:=VarSetCapacity(buf,256*2)
DllCall(ArcLibPrefix . "GetFileName",UInt,hArc,AStr,buf,Int,size,Int)
return buf
} 憶測だけど GetFileName が UTF16 じゃなくて CP932 で返すんでしょ。だから U32 を使ってそのまま使おうとすると文字化けする
DllCall した後に、StrGet(buf, "cp932") すればいいんでない >>444
基本的にできない
応用的には超めんどい(http://anago.5ch.net/test/read.cgi/software/1317156599/659,661)
Pictureで代用するのが早いと思う
ButtonではなくCheckbox, ComboBox, DropDownList, Edit, ListBox, Radio, Textのいずれかなら以下を使うとできる
[CLASS] CtlColors - color your controls (2017-10-30)
https://autohotkey.com/boards/viewtopic.php?f=6&t=2197 >>447
return buf
↓
return StrGet(&buf, "cp932")
でできました!
ついでに 7-zip64.dll 入れてライブラリ参照元書き換えたらU64.exeでも動きました
ありがとうございます! たとえば、
label1:
filename=test1
gosub routine
return
label2:
filename=test2
gosub routine
return
label3:
filename=test3
gosub routine
return
と、番号が違うだけでほかは同じスクリプトが20個くらいある場合、これって
ずらっと書かないとダメなのでしょうか。 それともAHKらしく、
loop,20
{
label%A_index%:
filename=test%A_index%
gosub routine
return
}
みたいな技って使えませんか。これではダメだと思いますが。スクリプト生成まではやってくれないのでしょうか >>452
それなら、filenameを引数にした関数で良いんじゃないかな そう言われると思いましたが、これは一例で関数は使えないときでお願いします
スクリプトの展開まではしてくれないのですか ラベルの省略はできないが処理はまとめられる
label1:
label2:
label3:
label4:
label5:
label20:
StringReplace filename, A_thisLabel,label,,ALL
gosub routine
return
ラベルごとループで作成したいなら一旦ファイルに書き出して .ahkスクリプトとして実行するしかないのでは
loop,20
{
FileAppend,label%A_index%:,temp.ahk
FileAppend,gosub routine,temp.ahk
FileAppend,return,temp.ahk
}
run,temp.ahk >>455
なるほど、A_thisLabelを使うというのは思いつきませんでした
ちょっとやってみましたが、これは使えそうです
それと、temp.ahkを出力するやり方ですが、これもインクルードファイルを自動生成させて
それを読み込ませるという方法が出来そうですね
ahkがインクルードファイルを読み込むタイミングを確認する必要がありそうですが
ちょっと期待できそうですw
インクルードファイルがなければ自動生成させてreloadで再実行し、ファイルが出来てれば
自動生成処理は飛ばすとか いろいろわかったつもりになってるだけのことが多そうな人だから
関数が使えないと言うのもきっと思い込みなんだろう ラベルは最初からないとエラーになってしまうのか
ならインクルードファイルではダメなのかな
でもthisLabelが使えるのは教えて頂いて助かりました インクルードファイルを使う方法も、ラベルだけを宣言しておいたファイルを作っておいて
その後自動生成させれば出来ました。ありがとうございます 呼び元を動的callにすればdummyラベル処理も省けると思われ
if IsLabel(label%no%){
gosub,label%no%
} そういえば俺の環境下だとすり抜け最近ないな
スクリプトの書き方でかなり変わるのかも ホットキーを押したら特定の変数をリストビューに追加する事って出来ますか?
リストビュー初期化時にLV_Addで追加する事は出来たのですが、リストが作られた後に追加する方法が分かりません。 自己解決しました。
LV_Addで変数を%で囲ったらダメでした。外したらいけました>< 現在のCoordModeを参照する方法ってありますか?
関数内でのみScreenにしたいのですが。 A_CoordModeToolTipみたいな感じなんですね
A_CoordModeだけで試してて「出ないじゃん」とか思ってました
ありがとうございます Visual Studioで AutoHotKeyを動かす方法はないでしょうか
Win10 + Visual Studio community 2017 では動きませんでした
Win7 + Visual Studio 2013(管理者権限で実行) もダメでした
Win7 + Visual Studio 2013(管理者権限でない) はAHKきちんと動いたのが謎ですが・・ すいません、
Win10 + Visual Studio community 2017 も
管理者権限だとAHKは動かなくて
管理者権限でないとAHKが動きました。
これは何なんだろう 確実にAHKがダメだから
この際、keyhacに乗り換えるのが賢明、時間が勿体無い いつまでこのスレに粘着してんだよ
早く消えればいいのに
ここに居る人はkeyhacじゃ出来ない事が腐るほどあるからahk使ってんだし KeyHacも試してみましたが、こちらもやはり
Visual Studioを管理者権限で実行するとキーリマップが効かないみたいですね・・ >>473
一応確認しとくけど、Visual Studioそのものを操作したいなら、管理者権限が必要かもしれないのはAHKの方だぞ
AHKの側に権限が無いなら、>>469-470 は正常動作 ウインドウのハンドルを取って来て、そのウインドウ上に絵を描くことって出来ますか?
Dll等を使っても構いません
あるウインドウがあって、特定の場所がはっきりわかるように色を上書きして塗りたいのです。
既存のウインドウにデコレーションするというか
AHK以外でも、もしそういうことが出来る方法をご存じなら教えてください >>474
ありがとう!解決しました!
おっしゃる通りAHKを管理者権限で実行したらVisualStudioでもきちんと動きました ■ このスレッドは過去ログ倉庫に格納されています