AutoHotkey スレッド part10

このエントリーをはてなブックマークに追加
562名無しさん@お腹いっぱい。
AutoHotkeyと窓使いの憂鬱を使っていてCtrlが押しっぱなし現象が起きるんですが
>>9>>782スクリプトの導入仕方教えてください。

ctrl_alert.ahkというファイルを作り、>>9のスクリプトをコピペ保存して
AutoHotkey.iniの先頭に

#include ctrl_alert.ahk

と書いてAutoHotKey再起動でいいのかな。
563562:2010/05/10(月) 00:06:12 ID:BGU/cq2PP
>>562 の方法だとAutoHotKey.iniで設定したホットキーが全然効かなくなってしまいました・・・

#include ctrl_alert.ahk をコメントアウトして一旦回避してるんですが、
どうするのが本来の組み込み方なんでしょうか?
564名無しさん@お腹いっぱい。:2010/05/10(月) 00:25:59 ID:DveMrA0U0
そのAHKファイルはどこに置いてるの?
565562:2010/05/10(月) 01:59:48 ID:BGU/cq2PP
>>564
ahkファイルはAutoHotkey.iniとともにAutoHotKeyのexeと同じディレクトリに置いてあります。

#include ctrl_alert.ahk
AutoHotkey.iniの先頭に上記のように書いてAHKを再起動すると、ctrl_alert.ahk は動作するのですが、
AutoHotkey.iniのその他の記述動作しないという状況のようです。
566名無しさん@お腹いっぱい。:2010/05/10(月) 02:52:08 ID:lPmjfKjW0
>>565
auto-execute sectionって仕様
includeせず単独で起動するのが手っ取り早い
567名無しさん@お腹いっぱい。:2010/05/10(月) 03:02:12 ID:mnSz3UOi0
バリバリ使いこなしているが、autohotkey.iniというファイル名では
一度も作ったことがない。なんか、説明書見てもわかりにくいよね。

全部.ahkでやるのがシンプルでいいよ。
単純にahkファイルをd&dすれば動くから。

iniファイルは別途作るべし。
568名無しさん@お腹いっぱい。:2010/05/10(月) 06:06:53 ID:rve/P/pB0
>>565
その方法でやるならば、ctrl_alert.ahkに書いてある
returnで実行が止まっちゃうので
最初のreturnをgoto, end_of_ctrl_alert_ahkとか適当に書き換えて、
スクリプトの最後にend_of_ctrl_alert_ahk:を追加したら動くんじゃないかなー
ラベル名は被らなければ何でもいいけど。
569名無しさん@お腹いっぱい。:2010/05/10(月) 06:09:47 ID:rve/P/pB0
一応補足するけど、
gotoは多用するとワケワカメなプログラムになりやすいので、通常は避ける。
だけど、こういう使い方の場合は分かりにくくなることはまずないのでいいと思う。
スクリプト自体に殆ど影響しないしね。
570562:2010/05/10(月) 07:04:51 ID:BGU/cq2PP
ごめん。ちょっと弄ってました。
最初の returnはコメントアウトしてました(結局一緒でしたが)

結局 >>568 の方法でうまくいきました。
トップレベルでreturnしたらそこで終了なんですね、なるほど。

; ctrl_alert.ahk
#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
;return
goto, end_of_ctrl_alert

Alerter:
 alert =
 Loop, PARSE, keys, |
 {
  %A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%
  alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""
 }
 Tooltip, %alert%
return

end_of_ctrl_alert:


SetTimerにラベルじゃなくfunctionが指定できればSetTimerの始動やSetTimerのイベントも含めて関数化してすっくりできるのかもしれませんね。
今回の場合、言語仕様を理解しないままincludeしただけで動くのを目指したので混乱したようです。
571名無しさん@お腹いっぱい。:2010/05/10(月) 11:10:33 ID:V9q4jK7s0
SetTimerは関数内でも使えるっぽいよ
あぷろだ跡地にある くるくるスクロール で
ローカルラベルで常駐タイマ起動しててびっくりした記憶ある
http://lukewarm.s101.xrea.com/up/file/108.zip


>>567
バリバリ使いこなしてる割には的の外れたアドバイスだな
毎回d&dしたくないから#Includeで組み込むにはどうすればいいかって意図の質問でしょ
.iniも.ahkも拡張子が違うだけで記述ルールは一緒だよ
572名無しさん@お腹いっぱい。:2010/05/10(月) 12:05:55 ID:73HWs5iQ0
ModAlerter(alertDur=3000, timerDur=200) {
 static Keys:= "Ctrl|Alt|Shift|LWin|RWin", dur, Ctrl, Alt, Shift, LWin, RWin
 dur := alertDur
 SetTimer, ModAlert_Timer, %timerDur%
 ModAlert_Timer:
  ListLines, Off
  alert=
  Loop, PARSE, Keys, |
   %A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%, alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > dur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""
  Tooltip, %alert%
 Return
}
関数ライブラリスクリプトにするならこんなもんかな。

しかし、変数の挙動が怪しいなぁ…
関数内のタイマー用ラベルって基本的に関数外にあるのと同じだと思ってたけど、違うのかなぁ

Keys や dur は static なんで関数ローカルで、かつタイマ側からも参照可能。
同様に static 宣言しているがタイマーで上書きする Ctrl,Alt,Shift,LWin,RWin はグローバルになってる
何の宣言もしていない alert は ListVar には出てこない上に、static のような感じでクリアしてやらんといけない

これってどういう事?教えてエロイ人!
573名無しさん@お腹いっぱい。:2010/05/10(月) 19:13:30 ID:Y8ZOXiW20
<< 演算子を使った関数外の変数が
関数内からなぜか使えた気がする
574名無しさん@お腹いっぱい。:2010/05/10(月) 21:46:46 ID:JwaFTd0s0
AHK_L を Win 7 x64 で動かしています。
AHK でメモリーリークの原因を追求するにはどうしたら良いでしょうか?

自作の 130 行くらいのスクリプト (ToDo リスト管理用) が、
少なくとも MsgBox のたびにメモリー消費量が増えてしまうようです。
575名無しさん@お腹いっぱい。:2010/05/10(月) 22:07:19 ID:Y8ZOXiW20
>>574
地道にコメントアウトしてみるしかないんじゃないかな
怪しい処理だけを 1000 回ぐらいループさせるっていうのも手かと

自分ならCOM ライブラリとdllcallの挙動を真っ先に疑うよ
参考にしてね

Memory leak? What are they and how do you detect them?
http://www.autohotkey.com/forum/topic48933.html
576574:2010/05/11(火) 00:19:58 ID:RQ4U7xzI0
>>575
レスありがとうございます。やっぱそうですか > 地道
紹介のフォーラムで新たに知ったのは、Loop もリークを起こす可能性があるということでした。
とりあえずコメントアウトを試してみます。
577名無しさん@お腹いっぱい。:2010/05/11(火) 10:06:42 ID:nEiv4idp0
Loop コマンド自体がメモリリークを起こすんじゃなくて、
タイマーやループのように複数回実行するところで解放されない変数(メモリ)が生じる可能性があって
それが実質メモリリーク状態になるってことでしょ

AHKの変数だけならListVarsで確認はできるけど、DllCall で怖いのが確保したメモリは
AHKの管理外なんで確認する手段が無いって事かな(COMオブジェクト含む)

ToDoリストだと多分配列使ってるんだろうけど、変数の管理がちゃんと出来ているかを見直すのが
まず一番にすべき事じゃないのかね
578名無しさん@お腹いっぱい。:2010/05/11(火) 14:21:46 ID:ImAn/6ubP
~RButton & LButton::MsgBox AHKテスト成功

↑はできるのに↓はできんね。どうして?

~RButton & LButton:: send,^C
あるいは
~RButton & LButton:: Send,{Ctrl down}{Insert}{Ctrl up}
579名無しさん@お腹いっぱい。:2010/05/11(火) 14:24:08 ID:gNbGfP95P
>>578
まずはその動作を物理デバイスで手動でやってみて、PCが反応するか試してみたら?
580名無しさん@お腹いっぱい。:2010/05/11(火) 16:37:06 ID:nEiv4idp0
Send, ^C と Send, ^c とは違うよ
581名無しさん@お腹いっぱい。:2010/05/11(火) 19:00:00 ID:hro4H0dT0
>>580
>>578じゃないが、その仕様ひどすぎw
原因分かるまですごい時間かかった
582名無しさん@お腹いっぱい。:2010/05/11(火) 20:47:25 ID:ImAn/6ubP
>>579
ctrl + c でコピーできるんですが、send,^cでは無理ですね。
>>580
初耳でした。しかし、Send, ^c でも
{Ctrl down}{Insert}{Ctrl up}
でもできません。左右クリックに割り当て無理っぽいですね。
MsgBoxはきちっと通るのに
583名無しさん@お腹いっぱい。:2010/05/11(火) 21:00:02 ID:MX5gz44v0
>>582
うちの環境ではいずれも動くよ。
但し、MouseGesture.ahkを実行していると効かないけど。

競合しているかもしれないのでAutohotkeyスクリプト全てを終了し、
それだけ記述したスクリプトのみ実行して試しては?
※場合によっては他のカスタマイズ系ソフト(IntellipointやSetpoint含む)を全て終了しないとダメかも。
584562:2010/05/12(水) 01:09:26 ID:JAu96k7wP
>>571-573
おお、つっこみサンクス。
SetTimerは関数内のラベル指定でいけるんですね。
585名無しさん@お腹いっぱい。:2010/05/12(水) 05:39:58 ID:3rh4zsS+0
>>572
関数を一度も実行しないで関数外からSettimerで関数内ラベルに飛んだ場合にも
ちゃんとローカル変数になるみたいだな。
そしてstaticな変数は既に確保されて初期化されているみたい

あと、%%で展開された変数がグローバル変数になってるみたいで
staticで宣言した変数などとは別物になってるっぽい

ワケワカメだけど、こういう抜け道は上手く利用すれば便利かもしれないね
586名無しさん@お腹いっぱい。:2010/05/12(水) 07:59:17 ID:NgNMsmYU0
>>585
>あと、%%で展開された変数がグローバル変数になってるみたいで
>staticで宣言した変数などとは別物になってるっぽい

よく気づいたね
これは思っても居なかった
587574:2010/05/12(水) 10:11:50 ID:bVCo4tkH0
メモリーリークの件です。
少なくとも当方の環境では、MsgBox が問題のようでした。
----
Loop, 1000
Msgbox
----
このスクリプトで OK を押すたびに、プライベート領域が上昇していくようです。
588名無しさん@お腹いっぱい。:2010/05/12(水) 10:25:21 ID:gl8AeGviP
AutoHotKey_L Rev.51で試してみた
マジだどういうことだこれw
589名無しさん@お腹いっぱい。:2010/05/12(水) 10:26:00 ID:bVCo4tkH0
ちょっとフォーラムでも聞いてみます
590名無しさん@お腹いっぱい。:2010/05/12(水) 10:29:49 ID:s2aUbLv10
これ、今現在ユーザー側で出来る対策ってあるの?
常駐するスクリプトだと定期的に再起動?
591名無しさん@お腹いっぱい。:2010/05/12(水) 12:04:17 ID:0PYW5u7+0
そんなはっきりしたバグならすぐに直るでしょ
2GB積んでるようなマシンならしばらく放置しといたら
あるいはtraytipで代用するとか
592名無しさん@お腹いっぱい。:2010/05/12(水) 12:06:47 ID:YZzgJmo/0
XP SP3 32bit だといくらループしてもメモリ使用量変わらんなぁ
593名無しさん@お腹いっぱい。:2010/05/12(水) 12:15:00 ID:HnBFIJvd0
本家の方なら増えないな7x86でもXPx86でも
594名無しさん@お腹いっぱい。:2010/05/12(水) 22:25:02 ID:IjfE2ZDv0
あるアプリのウィンドウに対して、その実行ファイルのフルパスを取得する方法って
対象が32bitアプリと64bitアプリのどちらでも対応できる様にするには
どうすればいいでしょうか?

検索して見つけた下記の関数だと32bitアプリに対してしか動作しない様です。

GetModuleFileNameEx(ProcessID) ; modified version of shimanov's function
{
; #define PROCESS_VM_READ (0x0010)
; #define PROCESS_QUERY_INFORMATION (0x0400)
hProcess := DllCall( "OpenProcess", "UInt", 0x10|0x400, "Int", False, "UInt", ProcessID)
if (ErrorLevel or hProcess = 0)
Return
FileNameSize := 260
VarSetCapacity(ModuleFileName, FileNameSize, 0)
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
DllCall("CloseHandle", hProcess)
Return ModuleFileName
}
595名無しさん@お腹いっぱい。:2010/05/12(水) 22:43:58 ID:YZzgJmo/0
プロセスのハンドル精度が違うから無理なんじゃないのかね
596名無しさん@お腹いっぱい。:2010/05/13(木) 16:47:22 ID:Sbrm957n0
行き詰ったので質問させてください。

過去ログとなまず日記を参考にしてゲームパッドの「ボタン13」を2回押しした際に「t」を。
「ボタン15」を2回押しした際に「b」を返すスクリプトを作ってみました。

これをPCゲームで利用しようと思いAHKを起動した状態でプレイしてみたのですが、
いざゲーム上でボタンを2回押ししてみても反応がありません。
メモ帳では正常に動作。
今までJoyAdapter(http://www.vector.co.jp/soft/win95/util/se069688.html)を使用していたため
ゲーム本体に外部ツールを無効化する機能がついている可能性は低そうです。
597名無しさん@お腹いっぱい。:2010/05/13(木) 16:48:05 ID:Sbrm957n0
改行多すぎだそうなので分割。
こちらが作成したスクリプトです。

~Joy13::
KeyWait,Joy13
SetTimer, Joy13_CheckCnt, 200
Joy13_cnt += 1
if(Joy13_cnt == 2)
{
Send,t
}
return
Joy13_CheckCnt:
SetTimer, Joy13_CheckCnt, Off
Joy13_cnt = 0
return

~Joy15::
KeyWait,Joy15
SetTimer, Joy15_CheckCnt, 200
Joy15_cnt += 1
if(Joy15_cnt == 2)
{
Send,b
}
return
Joy15_CheckCnt:
SetTimer, Joy15_CheckCnt, Off
Joy15_cnt = 0
return
598名無しさん@お腹いっぱい。:2010/05/13(木) 16:54:21 ID:vRNuiS7lP
1
そのJoyadapterとやらのツールに、そもそもキーがちゃんと伝達されているかテスト

2
WinActivateをいれて、送信する場所を決め打ち

3
AHKを、もっと単純にしてみる。例 loopでまわして強制的に一定間隔でsendしてテストするとか

4
Joyadapterを、AHK以外の別のツールで制御してみて、ゲームに伝達されるかテスト

ってな感じか
599名無しさん@お腹いっぱい。:2010/05/13(木) 17:12:02 ID:xS/OZISQ0
JoyAdapterの代わりにAHKを使うってことだろ
600名無しさん@お腹いっぱい。:2010/05/13(木) 17:22:47 ID:vRNuiS7lP
ああ、ほんとだ。

じゃあ動かない原因は、AHKがキーを送信する階層がユーザプロセスに近いせいかもね
601名無しさん@お腹いっぱい。:2010/05/13(木) 17:25:02 ID:ypWOB/uUP
SendってたしかPlayとかEventとかいろいろあったよね
こっち試してみたらどうだろう
ttp://ahk.xrea.jp/commands/Send.html
602名無しさん@お腹いっぱい。:2010/05/13(木) 17:29:12 ID:QBoWaRdz0
SendMode だと勝手に予想
603名無しさん@お腹いっぱい。:2010/05/13(木) 17:54:06 ID:Sbrm957n0
>>598-602
説明不足で余計な誤解を招いてしまったようで申し訳ない。

結果から報告しますと、「Send」を「SendEvent」に置き換え、
AHKを管理者権限で実行したところ正常に動作しました。

レスどうもありがとうございました。
特に有力な情報をくれた>>598>>601の両名には深い感謝をば。
604名無しさん@お腹いっぱい。:2010/05/14(金) 07:08:37 ID:Bjme1HK1P
ControlClick って、使用ができる用途・ケースがごく限られたコマンドなのでしょうか?
iTunesの再生ボタンをウインドウが前面になくてもクリックしたいと格闘したんだけど、成功しなかった。
ググってみたけど、controlsendのスクリプトはあるんだけど、controlclickのスクリプトって
あんまないよね
605名無しさん@お腹いっぱい。:2010/05/14(金) 07:28:38 ID:kybFGEPy0
これじゃだめなの?
ControlClick,Button6,ahk_class iTunes
606名無しさん@お腹いっぱい。:2010/05/14(金) 07:39:05 ID:Bjme1HK1P
>>605
ありがとうございました。
あれ・・・できた、なんでだろ
ControlClick,Button10,ahk_class iTunes
でクリックできた。前面にきちゃうけど。
前やったときはぜんぜんクリックしてくれないので
Button10, ahk_id %itunes%, , LEFT, 1, NA (めちゃくちゃ)
っていうオプションをいろいろつけて苦戦してたんだが。
607名無しさん@お腹いっぱい。:2010/05/14(金) 10:13:51 ID:Bjme1HK1P
>>605
あれ、やっぱ、>>605じゃ出来ないときがあるね。どうしてだろう。
引数を足したら安定するんだろうか。
趣旨とちがうけど
DetectHiddenWindows , On
ControlSend , ahk_parent, {space}, iTunes ahk_class iTunes
DetectHiddenWindows , Off
こっちのほうが安定してるね。
controlclick期待してんだが。
608名無しさん@お腹いっぱい。:2010/05/14(金) 11:50:46 ID:QjepaIK50
CabinetWClassとExploreWClassにWinClose割り当てて窓を閉じるジェスチャにしたんですが
アプリの終了も同じジェスチャで指示出来るような方法はありますでしょうか?
個別に指定していくとキリが無いのでアプリ全般といった指定がしたいんですが
609名無しさん@お腹いっぱい。:2010/05/14(金) 12:25:42 ID:jlUDA8dj0
ジェスチャをどうやって実現しているかによるな
610名無しさん@お腹いっぱい。:2010/05/14(金) 13:13:00 ID:XlrQBJVD0
Ctrl+w もしくは Alt+F4 送れば大抵のアプリは閉じられるんじゃない?
611名無しさん@お腹いっぱい。:2010/05/14(金) 14:27:17 ID:6yMoUap30
TVTestのSDKを使って、情報の読込みや設定の変更って出来ますか?
612名無しさん@お腹いっぱい。:2010/05/14(金) 15:13:08 ID:jlUDA8dj0
AHKは
・ウィンドウを特定して、任意の座標をクリックしたりキーを送ったりできる
・ウィンドウを特定して、PostMessage/SendMessageできる
・任意のDLL内の関数をコールできる(構造体の利用可)

で判断してくれ
613名無しさん@お腹いっぱい。:2010/05/14(金) 22:06:45 ID:QjepaIK50
>>609>>610
レスどうもです
Alt+F4…なんでこんな簡単な事気づかなかったんだw
助かりました、どうもです
614名無しさん@お腹いっぱい。:2010/05/15(土) 16:50:34 ID:dk4HaCxi0
ジェスチャで大概のブラウザ見たいに←で戻るとか→で進むとか単純な操作は登録出来ますか?
Cabinetとエクスプローラあたりでその操作にしたいんですが…
615名無しさん@お腹いっぱい。:2010/05/15(土) 16:58:55 ID:+4ZlKFhL0
Alt+Left/Right か Browser_Back /Forward 送ればそれっぽくなるんじゃない?
616名無しさん@お腹いっぱい。:2010/05/15(土) 17:22:28 ID:dk4HaCxi0
>>615
レスどうもです

試して見た所概ね良好みたいで今のところ競合とかも無さげです
このソフトは使う前に基本コマンド覚えた方が早く慣れそうだと気づきました
助かりました、ありがとうございます
617名無しさん@お腹いっぱい。:2010/05/15(土) 23:11:45 ID:fu+SqAPt0
文字列中から、ある一文字の出現回数を調べたいです
loop,parse 以外でこれを調べる方法はありますか?
618名無しさん@お腹いっぱい。:2010/05/15(土) 23:22:09 ID:Cwc1Pan30
StringSplitにある一文字を指定して分割された要素数を求めればいいんじゃね?
619名無しさん@お腹いっぱい。:2010/05/15(土) 23:25:15 ID:Cwc1Pan30
書き忘れたけど、「分割された要素数 - 1 = 出現回数」な。
620名無しさん@お腹いっぱい。:2010/05/15(土) 23:27:47 ID:Cwc1Pan30
あ、しったかしてゴメン。
ある一文字が文字列中に連続して出てくるとダメかもしんない。
621名無しさん@お腹いっぱい。:2010/05/15(土) 23:37:13 ID:qsQCf0W40
splitだと1文字の区切り文字しか認識できないので、
stringreplaceを使うとよい

searchword=あいうえお
stringreplace,dummy,string,%searchword%,,ALL UseErrorlevel
msgbox,個数=%errorlevel%

これでOK
622名無しさん@お腹いっぱい。:2010/05/15(土) 23:38:42 ID:qsQCf0W40
質問者のレスを再度見たら、1文字でいいのか。
じゃあ>>618の方法で十分だな
623名無しさん@お腹いっぱい。:2010/05/16(日) 00:20:07 ID:8XQ45XCe0
>>618-622
ありがとうございます。参考になりました。
624名無しさん@お腹いっぱい。:2010/05/16(日) 07:34:18 ID:qudTN7z+0
AHK_L rev. 51 + Win 7 x64 を使用しています。

下記 (のような) 関数をタイマーで 1 秒ごとに呼び出し、常駐ソフトも含めて
プロセス監視をしています。スクリプト全体の中でこの関数の負荷がやや高めで
もう少し改善できないかと思っています。
何か良い方法があれば教えて下さい。

GetCurrentProcesses()
{
DetectHiddenWindows,On
WinGet, winid, List
Loop, % winid
{
WinGet, proc, ProcessName, % "ahk_id" winid%A_Index%
list .= proc "`n"
}
StringReplace, list, list, .exe,, All
Sort, list, U D`n
DetectHiddenWindows,Off
Return, % list
}
625名無しさん@お腹いっぱい。:2010/05/16(日) 11:21:04 ID:Gi1tuO4l0
test=aaa
inputbox,hoge
msgbox,%hoge%


inputboxで%test%と打ち込んだ場合
msgboxでaaaと表示させるにはどうすればよいでしょうか?
626名無しさん@お腹いっぱい。:2010/05/16(日) 12:02:25 ID:2OjZS12C0
test=aaa
inputbox,hoge
msgbox,% %hoge%


これでtestって打てばaaaだけどね・・・
%test%って打ちたいとなるとどうだろ?
627名無しさん@お腹いっぱい。:2010/05/16(日) 12:16:40 ID:Gi1tuO4l0
>>626
おっありがとうございました!
628名無しさん@お腹いっぱい。:2010/05/16(日) 13:29:07 ID:QQZQPNYAP
inputboxを利用してこのソフトでcraftlaunchみたいな
コマンド入力型のランチャーって作れるのでしょうか?
すでにスクリプトが作られているのでしょうか?
欲しい
629名無しさん@お腹いっぱい。:2010/05/16(日) 13:45:47 ID:Bjbm2NjF0
>>1 のAutoHotkeyを流行らせるページ(AutoHotkeyを流行らせるページ跡地)
の「その他スクリプト」の中の「FileLaunch」がそれっぽいものかな
630名無しさん@お腹いっぱい。:2010/05/16(日) 19:57:40 ID:+h+qAeEsP
32bitのWin7ですが、物理メモリが足りず、ページファイルを使いまくってるときに
AHKで警告メッセージを出したいです。

タスクマネージャのパフォーマンスタブに表示されている
「メモリ」の値を取得する方法があればベストなのですが、
やり方がわかりません。

はやらせるページさんの GetMemoryState() では、
XPでは問題なく動いていましたがWin7でメモリを4GB積んでいると
取得できる値がおかしくなる気がします。
認識できる上限の値をかさ上げするかしないかの仕様が変更された
せいでしょうか。

それとも、たんにやりたいことを実現するには、もっと簡単な方法が
あったら、ヒントいただけると幸いです。
631名無しさん@お腹いっぱい。:2010/05/16(日) 20:11:21 ID:Hga7kSsd0
タスクマネージャ起動しっぱなしでいいんなら、ControlGetTextで取ればいいんじゃないの
632名無しさん@お腹いっぱい。:2010/05/18(火) 10:02:33 ID:JvKc99Wl0
ドロップされたファイルのリストを表示するGuiについて質問させて下さい。

#NoTrayIcon
Gui, Add, Edit, x7 y67 w300 h120
Gui, Show, h198 w314, test
Return

GuiClose:
FileDelete, %A_ScriptDir%\temp.txt
ExitApp

GuiDropFiles:
DropFilesList = %A_GuiEvent%
Sort, DropFilesList
MsgBox, %DropFilesList%
;FileAppend, %DropFilesList%, %A_ScriptDir%\temp.txt
;FileRead, DropFilesList, %A_ScriptDir%\temp.txt
ControlSetText, Edit1, %DropFilesList%
Return

これで作成したGuiに複数のファイルをドロップすると、
MsgBoxでは改行された状態でリストが表示されるのですが
テキスト欄では改行が無視された状態で表示されます。
コメントアウトしている下から3行目と4行目を有効にすると正しく表示されるのですが、
この原因はどこにあるのでしょうか?訂正すべき点をご指摘下さい。
633名無しさん@お腹いっぱい。:2010/05/18(火) 11:02:56 ID:aBh+EMMJ0
>>632
改行コードをCR+LFにしてみるとか。
Sort, DropFilesList,D`r`n
634名無しさん@お腹いっぱい。:2010/05/18(火) 11:34:29 ID:JvKc99Wl0
>>633
StringReplace, DropFilesList, DropFilesList, `n, `r`n, All
を挿入で解決しました。ありがとうございました
635名無しさん@お腹いっぱい。:2010/05/18(火) 11:48:45 ID:B/Ocs1du0
ゴミ箱の中にあるファイル名を取得したりできませんか?
636名無しさん@お腹いっぱい。:2010/05/18(火) 19:52:06 ID:ps60X+1w0
MouseGesture.ahkからキーを送ることでアプリケーションを操作してるんだけれど
ポップアップメニューが開いたままだとCtrl+Wを送信するばあいの場合「....(W)」ってメニューが実行されちゃうので
できればポップアップメニューが開いている場合のみ先にSend,{ESC}でとじてからSend,^wとかしたいんだけど
AHKからポップアップメニューが表示されているかどうかの確認は可能?

ttp://sakura.qp.land.to/?Customize%2F%C5%EA%B9%C6%2F49
あとサクラエディタ用の強調キーワード設定ファイルが古かったから最近の追加してみた
637名無しさん@お腹いっぱい。:2010/05/18(火) 20:27:10 ID:zJTpAcRr0
>>636
IfWinExist, ahk_class #32768
{
Send, {esc}
Send, ^w
}
638名無しさん@お腹いっぱい。:2010/05/18(火) 20:28:25 ID:zJTpAcRr0
あ、ちがう、こうだった

IfWinExist, ahk_class #32768
Send, {esc}
Send, ^w
639名無しさん@お腹いっぱい。:2010/05/18(火) 21:02:06 ID:ps60X+1w0
>>638
おおーばっちりです!本当にありがとう!
640名無しさん@お腹いっぱい。:2010/05/19(水) 13:19:45 ID:1AFKWhcg0
Gui, Add, Hotkey,vkeyでホットキーをGUIで設定してそのホットキーを
サブルーチンラベルにするにはどうすればよいのでしょうか?
641名無しさん@お腹いっぱい。:2010/05/19(水) 14:23:12 ID:GVAR5YlCi
Hotkey, %KeyVar%, LabelName
642名無しさん@お腹いっぱい。:2010/05/19(水) 14:43:29 ID:1AFKWhcg0
できました!ありがとうございます。
643名無しさん@お腹いっぱい。:2010/05/19(水) 23:55:10 ID:3g2f68/JP
SoundPlay,%file%

でWAVファイルを再生すると、そのスクリプトを終了させるまで
ファイルハンドルを掴んだままになってしまい、リネームや削除ができません。

マシンによって挙動が異なるような気がするのですが、みなさんのPCでは
どうでしょうか。

なにか対策する方法はないでしょうかね。
644名無しさん@お腹いっぱい。:2010/05/20(木) 00:13:50 ID:1tAK8em70
SoundPlay,%file%
SoundPlay,unko

%file%はうんこによって開放されます。
645名無しさん@お腹いっぱい。:2010/05/20(木) 00:16:25 ID:r8RmfaG10
それで開放されないって話じゃないの?
646名無しさん@お腹いっぱい。:2010/05/20(木) 00:16:36 ID:TxKCgQ/p0
コピーして再生、ハードリンク張って再生
647名無しさん@お腹いっぱい。:2010/05/20(木) 00:22:15 ID:NY99m0PMP
>>644
ありがとうございます。うんこを与えたところ解決できました。
648名無しさん@お腹いっぱい。:2010/05/20(木) 00:55:06 ID:gVxwinbu0
テンキーの00キーにカンマを割り当てたくって、
見つけたのがこのスクリプト

http://www.autohotkey.com/docs/scripts/Numpad000.htm

だけどこれって、000キー用で、00キー用じゃないんだよね。

で、なんとなくカンで、

else if Numpad0Count = 0
Numpad0Count = 2

を削ったら、ちゃんと動くようになった。

.....のはいいんだけど、普通の0キーをキーリピートさせると、時々カンマが出ちゃう...orz
00もリピートしないし(....ってそれはこのスクリプトではむりか)

キーリピートはどうやって解決したらいいんでがんしょ?
649名無しさん@お腹いっぱい。:2010/05/20(木) 01:02:42 ID:PRyzxNvWP
キーボードの仕様が分からないからはっきりとしたことは言えないが、
ストロークの発生間隔か、キーアップが送られてきていることを手がかりにすればいいと思われ。
NILScriptなら1〜2行くらいで書ける気がする。
650名無しさん@お腹いっぱい。:2010/05/20(木) 13:52:34 ID:ojaeojGN0
>>636,638読んで思ったんだけどポップアップメニューのクラスってWindowSpyじゃ取得できないけどどうやって確認するの?
例えばFirefoxのポップアップはMozillaDropShadowWindowClassらしいんだけど
WindowSpyでカーソルをポップアップ上に持っていってもポップアップの下のFirefoxメインウインドウの情報が表示される
651名無しさん@お腹いっぱい。:2010/05/20(木) 14:08:24 ID:hIwSN4Ds0
f1::
MouseGetPos,,, hwnd
WinGetClass, class, ahk_id %hwnd%
msgbox, %class%
return
652名無しさん@お腹いっぱい。:2010/05/20(木) 15:06:03 ID:DDddlayR0
メモ帳かIEのウィンドウがアクティブになるまで待機

みたいなこと出来るコマンド、コードあれば教えてください。
653名無しさん@お腹いっぱい。:2010/05/20(木) 15:08:17 ID:8X2fsFHU0
654名無しさん@お腹いっぱい。:2010/05/20(木) 15:08:23 ID:hIwSN4Ds0
WinWaitActive
655名無しさん@お腹いっぱい。:2010/05/20(木) 16:31:25 ID:ojaeojGN0
>>651
なるほどその手があったか
ずっと不思議だったんだ
ありがとう
656名無しさん@お腹いっぱい。:2010/05/21(金) 05:40:05 ID:rUvtTlpR0
特殊なPS/2キーボード(教育用途らしい〜12個キーがついてる)を入手したので
AutoHotkeyでキーアサインしようと思ったんですが、

ほとんどのキーは、幻のファンクションキーF13〜F24が割り振ってあって
簡単にアサインできたのですが、

2つのキーだけはとても特殊でした。

1つめは
VKがFFでSCが072

2つめは
VKがFFでSCが074

それぞれ

vkFFSC072::A
vkFFsc074::B

のように書いても、両方のキーどちらを押しても、
先に指定したAの方が出てしまいます。
どちらのキーもvkが共通でFFだからかもしれないですが、、、、
一応AutoHotkeyの仕様としては記述法は間違いないですよね?
これはバグなんでしょーか?
ちゃんとAHのKeyHistoryにはそれぞれのvkとscがちゃんと上記のように表示されます。

なにか解決法はないでしょうか?
別の指定方法とかありませんでしょうか?
657名無しさん@お腹いっぱい。:2010/05/21(金) 05:51:32 ID:rUvtTlpR0
スキャンコードの指定のみだとエラーになってしまいます。。。
658656-657:2010/05/21(金) 06:46:44 ID:rUvtTlpR0
すいません、自己解決しました

sc072::send A
sc074::send B

これだけでOKでしたw

AHのKeyHistoryで調査したときに、
vkとscの値は出ても、その右に「not found」と表示されるキーは
sc072::A みたいな記述法だとエラーになるので、ちゃんとsendを書かないとだめみたいです。

こんな簡単なことに気づくまでに1時間もかかってしまい...orz
659656-657:2010/05/21(金) 06:58:53 ID:rUvtTlpR0
F13からF24などのキーって、今はついてるキーボードがないですが、
こういう古いキーボードについてるんですね
http://geekhack.org/showwiki.php?title=Island:7358
このページによると

SC072はCrSelキー
SC074はExSelキー

に相当するみたいですね。

最初、PS/2をUSBに変換するアダプタをかましてやってみたら、
全くキーコードを吐かないので、おかしいなと思ったら、
そのページにもありますが、PS/2-USB変換アダプタでは
F13からF24はブロックされてしまうのが普通のようですね。

シンプルなことだったけれど、いろいろ勉強になりましたw

しかしたった12個のキーがついた特殊キーボードだから
F13からF24を全部、単純にアサインすればいいのに…と思うんですが、
F19とF20とF23は未使用でなぜか3つのキーにはSC072とSC074とSC006がアサインされていて
何故なのかかなり謎...
同時に使う特殊キーボードで既に使われているキーだったのかしらん...
スイスの教育キーボードらしいのですでに知る術はないですが...
660名無しさん@お腹いっぱい。:2010/05/21(金) 06:59:39 ID:zU520QW7i
一時間なら短い方だぜ
661名無しさん@お腹いっぱい。:2010/05/21(金) 07:12:05 ID:LT3Z22zUP
いいなぁ、F13〜F24が直打ちできるなんて、AHK的にうらやましすぎる。
そのキーボードを見てみたいから写真うpよろしく。
662名無しさん@お腹いっぱい。:2010/05/21(金) 07:30:44 ID:rUvtTlpR0
>>660
わはは、みなさんいろいろ苦労されてるんですね…w

>>661
早速写真うpしてみました
http://mac.hitobashira.org/up/src/maka0243.jpg
スイスのmastereyeという教育システム用のようで、1998年製造のようです。
製造はGMK electronic design gmbHという会社のようで、ちゃんとメカニカルで打鍵感もすばらしいです。
日本では株式会社エルテックスっという会社が2003年から学校用に販売していたみたいです。
ジャンク扱いの品がオクなどで出ることももしかしたらあるかもしれないので要チェックです。PS/2えす。


その後わかったのですが、AHのKeyHistoryで調査したときに、
vkとscの値は出てもその右に「not found」と表示されるキーをリマップするとき、
やっぱりちょっとAutoHotKeyは謎仕様なのかもです...

vkEDsc006のキーが1つあったんですが、

vkEDsc006::Aで普通に通ります。
vkED::Aも普通に通ります。
でも
sc006::Aと書いても、エラーが出ずに普通に通っちゃいます。
上に書いた「not foundのキーはsendしなくてはエラーが出る」という法則が早速崩れてしまいましたw
…ただし、エラーは出ないんですが、ちゃんとリマップされない、これが。

やっぱり、AHのKeyHistoryで調査したときに、vkとscの値は出ても、
その右に「not found」と表示されるキーは
リマップするときなど、いろいろ試してみる必要がありそうです。
663名無しさん@お腹いっぱい。:2010/05/21(金) 07:43:24 ID:LT3Z22zUP
かっけー。
いいなぁ。ジャンク屋で見つけたら捕獲するわ。
664名無しさん@お腹いっぱい。:2010/05/21(金) 09:44:19 ID:Xum/5J+j0
デザインいいねコレ
うらやますぅいー
665名無しさん@お腹いっぱい。:2010/05/21(金) 13:16:36 ID:i4SRQyqP0
>>662
かわいいよ
666名無しさん@お腹いっぱい。:2010/05/21(金) 22:34:57 ID:W97jAZBA0
今フォトショップのショートカットにキーを割り当てているんですが
このままだと、一度wとqを推してしまうとctrキーlが押しっぱなしになってしまうようで、うまくいきません。
この記述だけでは不足しているものがあるんでしょうか?

#ifWinActive ahk_class Photoshop
w::
send {ctrl down}{NumpadAdd down}

q::
send {ctrl down}{NumpadSub down}

#IfWinActive, ahk_class Photoshop
667名無しさん@お腹いっぱい。:2010/05/21(金) 22:40:45 ID:vVJo06AA0
〜Downは〜Upが贈られるまでずっと押し下げ状態
send, ^{NumpadAdd}とsend, ^{NumpadSub}
でどう?
668名無しさん@お腹いっぱい。:2010/05/21(金) 22:43:36 ID:GJwWz1gdi
押しっぱなしになるように記述してるだけじゃん

Send, ^{NumpadAdd} とかすると思うが
669名無しさん@お腹いっぱい。:2010/05/21(金) 22:47:43 ID:ihEFybyeP
こう書かないとwキー押すとそのすぐ下のqキーのコマンドも実行されてしまう

#ifWinActive ahk_class Photoshop
w::send, ^{NumpadAdd}
q::send, ^{NumpadSub}
#ifWinActive

またはreturnを付ける

#ifWinActive ahk_class Photoshop
w::
 send, ^{NumpadAdd}
 return
q::
 send, ^{NumpadSub}
 return
#ifWinActive
670名無しさん@お腹いっぱい。:2010/05/21(金) 23:05:17 ID:X6wOZWs/0
>>663-665
ジャンク品で見つけたときは、全部のキーに日本語が書いてあったんだけど
実は全部シールで、剥がしたら下がこうなってたw
うれしい誤算だったよw
671名無しさん@お腹いっぱい。:2010/05/21(金) 23:19:54 ID:W97jAZBA0
>>667
>>668
>>669
w::
send,^{ctrl}{NumpadAdd}
return
q::
send,^{ctrl}{NumpadSub}
return

すいません。こう記述してみたのですが動かないです。
photoshop側のショートカットの拡大縮小がctrl++とctrl+-となっていまして
これらがもデイファイア必須なショートカットでして
それらをwとqだけで動くように設定したいのですが、どうもうまくいきません。

この記述を参考につくってみたのですが これはちゃんと動くんです。
z::
{
send {alt down}
mouseclick, right,,, 1, 0, d
Loop
{
sleep, 10
GetKeyState, state, z, p
if state = u
break
}
mouseclick, right,,, 1, 0, U
send {alt up}
return
}
}
672名無しさん@お腹いっぱい。:2010/05/21(金) 23:25:51 ID:vVJo06AA0
>>671
send,^{ctrl}{NumpadAdd}じゃなくてsend,^{NumpadAdd}
^自体がCtrl他は↓参照
ttp://ahk.xrea.jp/Hotkeys.html
673名無しさん@お腹いっぱい。:2010/05/21(金) 23:58:30 ID:W97jAZBA0
>>672
なるほどすいません。

#ifWinActive ahk_class Photoshop
w::
send {ctrl down} {NumpadAdd down} {NumpadAdd up} {ctrl up}
return
q::
send,{ctrl down} {NumpadSub down} {Numpad up} {ctrl up}
return
#ifWinActive

他の人の記述を参考にこう書き直したら動きました。
このスクリプトの意味がよくわからないのですが、
一度押下げしたあとに押し上げるコマンドを同時にいれて、コマンドをリセットしているという感じでしょうか?
674名無しさん@お腹いっぱい。:2010/05/22(土) 00:13:58 ID:IPGMNu+YP
わからないって・・・これほどわかりやすいスクリプト例は他に無いだろう。

downを「ボタンを押す」
upを「ボタンを離す」

で読み替えてみ?
675名無しさん@お腹いっぱい。:2010/05/22(土) 00:16:14 ID:fw+7RDgc0
同時じゃなくて逐次実行
Ctrl押して、NumpadAdd押して、Ctrl離して、NumpadAdd離して を順番にエミュレートしてる
^{NumpadAdd} は、Ctrl+NumpadAdd を一定時間投げる

かたくなに^を使わないのにはなんか訳あるのかね
単に意味わからんからスルーしてるのか
up/down 分けなきゃ動かないのか
676名無しさん@お腹いっぱい。:2010/05/22(土) 00:41:57 ID:Eg58/Q7W0
使わないわけではなくこうしないと動かないんです。
どうもありがとうございました。
677名無しさん@お腹いっぱい。:2010/05/22(土) 08:51:15 ID:ZDOJ6PGu0
Autoohotkeyをコンパイルしてexeで起動さておいて、
そのexeのショートカットにファイルをドラックした時に%1%のような感じで受け取ること出来ますか?
起動していないときなら出来きます。
678名無しさん@お腹いっぱい。:2010/05/22(土) 11:02:30 ID:fw+7RDgc0
>>677
過去ログに似た問答があったのでコピペ

>455 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 15:17:20 ID:svMF3G070
>独立したahkスクリプトに対して、既にそのスクリプトがが起動していたら引数を渡すだけ、ということは可能なのでしょうか。

>Run,Autohotkey.exe hoge.ahk "hogehoge"
>みたいな感じで起動して、hoge.ahkが既に存在しているならhogehogeを渡したいのですが。

>やりたいのは、一般的なメディアプレーヤーみたいにプレイヤーが立ち上がってたらそれでファイルを再生、そうでなければ起動+再生みたいなことです。

>460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 19:11:01 ID:VZ8xmIkr0 (2回)
>>455
>既に起動しているスクリプトに起動パラメータで引数渡すのはたぶん無理
>やりたかったらGUIでGuiDropFilesラベル有効にしといて
>cdropや管理人さんのファイルドロップ関数で渡してやるのが簡単なんじゃないかな。
>それか OnMessage() か RegisterCallback() あたり使うとか。

>461 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 20:24:03 ID:JCUO9F070 (3回)
>>459
>言われてみればその通りかも。ファイル構成を再検討してみます。

>AHK同士の連携は、>>460のGuiDropFiles法でいとも簡単にできました。
>こんな便利な方法があったとは。
679名無しさん@お腹いっぱい。:2010/05/22(土) 11:19:30 ID:JzPMlM8p0
既に起動してる場合は%1%をtextで吐き出して
起動してるやつでtextを読みこめばいけるじゃん
680名無しさん@お腹いっぱい。:2010/05/22(土) 11:42:48 ID:ZDOJ6PGu0
>>678
ありがとうございます。試してみます。
681名無しさん@お腹いっぱい。:2010/05/22(土) 11:43:38 ID:ZDOJ6PGu0
>>679
その方法もありますね。
682名無しさん@お腹いっぱい。:2010/05/23(日) 00:14:01 ID:lkhhCpMe0
購入したUSBテンキーに=ボタンがついていて
どうもエクセル用らしいので、私はエクセルを使わないので
全く無意味なキーなのですが、、、

こんなキーコードを履きます

A2 01D d 9.59 Ctrl
66 04D d 0.02 Num 6
66 04D u 0.00 Num 6
61 04F d 0.02 Num 1
61 04F u 0.00 Num 1
A2 01D u 0.02 Ctrl

このキーになにか別の文字を割り当てるのはどうしたらいいでしょう?
どうもうまくいかなくて、、、、
683名無しさん@お腹いっぱい。:2010/05/23(日) 00:22:20 ID:ztZMmXTZ0
>>682
それ、書いてあるまんまのキーだから、
割り当て変更すると通常キーも変更される。
684名無しさん@お腹いっぱい。:2010/05/23(日) 00:23:42 ID:p1V2LG0aP
最初のCTRLが送られた段階でホットキーを発動させるようにする

その中でkeywaitなりgetkeystateで待ち構えて、指定された順番に
あとのキーが送られてくることを確認する

確認できたら、メインの処理を実行、順番が違ってたり、確認できなければreturn

でOKじゃないかな
685名無しさん@お腹いっぱい。:2010/05/23(日) 01:15:15 ID:IibYX0kd0
AHK で OS のアイドル状態を取得するにはどうしたら良いでしょうか。
以下の方法を考えたり試してみましたが、うまく行きません。

1. OS のアイドル状態を直接取得する
全く手掛りがありません。
DllCall などを使うとできるのかもしれないのですが…。

2. A_TimeIdle / A_TimeIdlePhysical を使う
キー入力アイドル状態は対応できますが、動画プレイヤーのような
起動しっぱなしのものには対応できません。

3. スクリーンセーバーの状態を取得する
基本的にスクリーンセーバーを使いたくないのがホンネです。
またスクリーンセーバーは各々別のクラスを持っているので
"スクリーンセーバー" としての一元管理は難しそうです。

何かよい方法があればご指南下さい。
ちょっと抽象的な質問ですいません。
686名無しさん@お腹いっぱい。:2010/05/23(日) 01:51:25 ID:p1V2LG0aP
はやらせるぺージにCPU関連の値を取得する関数があるので、それを使えばOK
687682:2010/05/23(日) 02:50:26 ID:lkhhCpMe0
レスありがとうございました。

Ctrl & Numpad6::
KeyWait,Ctrl
send,{Del}
return

結局、超シンプルになりました

テンキーの「エクセル用"="キー」の吐くコードは

Ctrlダウン→Num6のダウン→アップ→Num1のダウン→Num1のアップ→Ctrlのアップ

なので、本当はNum1に関しても判定したかったのですが、
いろいろやってみても、なぜかNum1が判定にひっかからず...タイミングの問題でしょうか...orz

よく考えると、Ctrl+Num6というのはとりあえず現状使わない組み合わせなので、
完璧ではないですが、一番最後のCtrlのアップで判定してシンプルになっちゃいました。。

00キーや000キーもそうですが、複数のキーコードを連続で吐くキーは少々やっかいですね...
688名無しさん@お腹いっぱい。:2010/05/23(日) 10:27:37 ID:Zg8k7j+2P
If( hoge ){
  ほ〜
  げ〜
}

みたいに

If hoge In foo,bar {
  ほ〜
  げ〜
}
とか
Loop, Parse, hoge {
  ほ〜
  げ〜
}

って書けないのが不満
689名無しさん@お腹いっぱい。:2010/05/23(日) 10:33:43 ID:GCHPZPxg0
そのレベルの不満を言い出したら言語仕様のほとんどすべてを叩きたくなってくるぞw
690名無しさん@お腹いっぱい。:2010/05/23(日) 13:08:13 ID:s3IQV4zr0
Runコマンドとかで不正なパスを指定した場合エラーがでるんですが
エラーメッセージを出さずにそのまま終了、または無視ようなことはできますか?
691名無しさん@お腹いっぱい。:2010/05/23(日) 13:48:30 ID:At2NsDNL0
このスレを「UseErrorLevel」で検索
692名無しさん@お腹いっぱい。:2010/05/23(日) 14:21:00 ID:s3IQV4zr0
>>691
理解しました。
ありがとうございます^^
693名無しさん@お腹いっぱい。:2010/05/23(日) 15:19:20 ID:StS222KT0
%関数%_01

って感じで変数に111って代入しました。

Msbox で表示しても

%関数%_01

って表示されて、111って表示されません。

どうすれば表示されるようになりますか?
694名無しさん@お腹いっぱい。:2010/05/23(日) 15:28:45 ID:At2NsDNL0
おまいのいう「変数」は何なんだ?
695名無しさん@お腹いっぱい。:2010/05/23(日) 15:35:57 ID:YS5qpT8d0
エスパー力のある人にアドバイスを求めるより
その動かないスクリプトをそのままコピペしたほうが一般人からもアドバイス貰えると思うよ
696名無しさん@お腹いっぱい。:2010/05/23(日) 15:45:14 ID:StS222KT0
>>694
>>695
000 := "xxx"
111_%000% := 200 + 22 + 2
Msgbox. 111_%000%
って感じです。
Msgbox. %111_www%
ってすると表示されるのですが、xxxの部分がコロコロ変わります。

697名無しさん@お腹いっぱい。:2010/05/23(日) 15:53:14 ID:rIgmQG0I0
>>696
・変数名は数字で始めない(数値と区別できないから)
・引数に式を渡す場合は%+空白で始める

i := "xxx"
a_%i% := 200 + 22 + 2
Msgbox % a_%i%
Msgbox %a_xxx%
698名無しさん@お腹いっぱい。:2010/05/23(日) 15:54:01 ID:o1GBYNzc0
>>696
Msgbox, % 111_%000%
こういうこと?
699名無しさん@お腹いっぱい。:2010/05/23(日) 16:02:47 ID:StS222KT0
>>697
>>698

ありがとうございました。
Msgbox % a_%i%が使えたんですね。
本当にありがとうございました。
700685:2010/05/23(日) 23:11:30 ID:IibYX0kd0
>>686
情報ありがとうございます。
試してみたところ、CPU や HDD の稼動状況は確認できましたが、
OS のアイドル状態 (スクリーンセーバー起動やディスプレイ電源
オフの条件) は同定できませんでした。

そこで、ディスプレイの電源状態を取得するため、以下のスクリプト
を書いてみました (まだ動きません)。

hDisp := DllCall("CreateFile", "Str", "\\.\LCD", "UInt", 0xC000000, "Int", 0, "Int", 0, "Int", 0)
DllCall("GetDevicePowerState", "UInt", hDisp, "Int", stat)
MsgBox % stat

Windows API の知識もなく、DllCall を使うのも初めてなので
どこから直せばよいのか分かりません。
アドバイスをいただけたら幸いです。
701名無しさん@お腹いっぱい。:2010/05/23(日) 23:16:13 ID:p1V2LG0aP
アイドル状態なんて、自分で定義すればいいんじゃないの?
CPU利用率が5%以下が5分以上続いたら発動 とか

何をやりたいかを書かないと、質問文も回答文も無駄になりがち。
702名無しさん@お腹いっぱい。:2010/05/24(月) 00:09:57 ID:c6LIArS70
目的は、アイドル状態となった時に常駐スクリプトのタイマーを止めることです。
その常駐スクリプトは、各実行ファイルの起動時間を計測しており、いくつかのソフトの
使いすぎを防止しています (ウェブブラウザ、ゲーム、メディアプレイヤーなど)。
現在は A_TimeIdle を用いてアイドル状態を定義しています (問題点 は >>685)。

CPU 利用率と時間を組み合わせるのは思いつきませんでした。
もう一度試してみます。

同時に、アイドル状態の定義を OS と共有するため (>>685)、"AHK でディスプレイ
の電源状態を取得する方法" についてもアドバイスいただければ幸いです。
703名無しさん@お腹いっぱい。:2010/05/24(月) 09:06:20 ID:ObG/p1+k0
モニタの電源やスクリーンセーバならOnMessage で WM_SYSCOMMAND トラップして
SC_SCREENSAVE や SC_MONITORPOWER を検知するんじゃないの
704名無しさん@お腹いっぱい。:2010/05/24(月) 11:21:14 ID:c6LIArS70
>>703
ありがとうございます。以下のスクリプト でOnMessage 試してみました。

----
Gui, Add, Text, w100, test
Gui, Show
OnMessage(0x0112, "WM_SYSCOMMAND")
Return

WM_SYSCOMMAND(wParam)
{
MsgBox % wParam
}
----

SC_SCREENSAVE や SC_MONITORPOWER 等のメッセージを拾えるのは
このスクリプトで生成される GUI がアクティブな時だけのようでした。
705名無しさん@お腹いっぱい。:2010/05/25(火) 16:07:47 ID:dIgXun8m0
TVTestのウィンドウを右クリックしたときに表示される項目って取得できますか?
その項目に表示されている再生オフの常態のレ点をチェックしたいです。
706名無しさん@お腹いっぱい。:2010/05/25(火) 17:04:22 ID:/ZlFyOPh0
ControlGet,test,Visible,,VideoRenderer1,TVTest
707名無しさん@お腹いっぱい。:2010/05/25(火) 17:19:19 ID:6uYTjZTC0
705じゃないけど、うちの環境だと VideoRenderer1 じゃなくて TVTest Video Container1 だな
TVTest ver.0.7.2 (x86)

メニューの状態を取得したいならDllCallで
この辺の関数を何とかすればどうにかなるかもしれない
http://www.winapi-database.com/Window/Menu/
708名無しさん@お腹いっぱい。:2010/05/25(火) 17:54:39 ID:dIgXun8m0
>>706
>>707
なにか凄く難しそうですね・・・
709名無しさん@お腹いっぱい。:2010/05/25(火) 18:22:55 ID:6uYTjZTC0
再生オフかどうかを知りたいだけなら706の方法でいけるよ
メニューのチェック状態を見てるわけじゃないけどね

#1::
ControlGet,test,Visible,,TVTest Video Container1,TVTest
If (test==0)
ToolTip, 再生オフ
else
ToolTip, 再生中
return
710名無しさん@お腹いっぱい。:2010/05/25(火) 19:11:40 ID:dIgXun8m0
>>709
>>709
できました。ありがとうございます。

これはレ点の表示常態をチェックしているんですかね?
メニューの情報、VideoRenderer1とかメニュー番号?の調査ってどうやってやるんですか?
711名無しさん@お腹いっぱい。:2010/05/25(火) 21:55:49 ID:6uYTjZTC0
いつのまにか流行らせるページの日本語解説撤去されたな
次からテンプレの日本語解説は
>467のhttp://sites.google.com/site/autohotkeyjp/に差し替えかね


>>710
常駐AHK右クリメニューから Window Spy
709に書いたてある通り、メニューは一切見てないよ
TVtestの動画描画部が表示されてるかどうかを調べてて判断してるだけ
ていうかあのコードでそういう質問が出るってことは何にもわかってないでしょ?
次はちゃんと解説読んでから来てね
http://sites.google.com/site/autohotkeyjp/reference/commands/ControlGet
712名無しさん@お腹いっぱい。:2010/05/25(火) 22:14:49 ID:sH2EOU+4P
ttp://ahk.xrea.jp/
流行らせるページの人の許可もらって転載してるページあるよ
困ったときどっちも見てる
713名無しさん@お腹いっぱい。:2010/05/25(火) 22:37:06 ID:46q0R++J0
>>711
はやらせるページには、
ミラーがあるよ
http://ahk.xrea.jp/
経緯も書いてあるので読んでね
714名無しさん@お腹いっぱい。:2010/05/25(火) 23:21:36 ID:6uYTjZTC0
>>712-713
おお、ミラーあったんだ。ヨカッタヨカッタ
715710:2010/05/26(水) 09:10:00 ID:+viqPDa30
>>711
大変申し訳ありませんでした。
自分の環境だと、ClassNNがBon DTV EVR Video Winodowになっていて、
TVTest Video Container1が表示されていないのに>>709のahkで正常に動いた
ので混乱してしまったようです。

*選択するレンダラによって、ClassNNが変化しているみたいです。
716名無しさん@お腹いっぱい。:2010/05/26(水) 11:34:29 ID:Ih/SixVE0
MX-Rのサイドホイール↑↓にF14とF15を割り当ててMouseGesture.ahkを使ってアクティブウインドウを最小化するってことをやりたいのですが
WinMinimize, ahk_id %ActiveHWND%ではJaneなど一部のアプリケーションでうまくいきません
ControlClickでアクティブウインドウの最小化ボタンをクリックしたことにするにはどうすればよいのでしょうか
717名無しさん@お腹いっぱい。:2010/05/26(水) 11:46:29 ID:6xH685yXi
WinMinimizeの日本語解説ページを隅々まで読むといいよ
718名無しさん@お腹いっぱい。:2010/05/26(水) 12:14:58 ID:JQD0XV3cP
>>717
PostMessage, 0x112, 0xF020, , , ahk_id %ActiveHWND%
でできました、ありがとう!
719名無しさん@お腹いっぱい。:2010/05/27(木) 22:48:05 ID:zWF3TBc80
MouseGesture.ahkはほんといろいろ組み込めるんだな
SetpointでやってたOneTouch Searchとかホイールリダイレクトとかマウスまわり全て統合しちゃった
720名無しさん@お腹いっぱい。:2010/05/29(土) 15:47:28 ID:UnPMX2NU0
gui,2:add,text,,aaa
gui,2:show

return
GuiDropFiles:
msgbox,aaa

これだとGuiにファイルをドロップすることができませんでした。
ウィンドウ番号1以外のGuiにファイルをドロップさせてGuiDropFilesに飛ばすにはどうすればよいのでしょうか?
721名無しさん@お腹いっぱい。:2010/05/29(土) 17:48:08 ID:g79F3P4d0
Goto, >>1
722名無しさん@お腹いっぱい。:2010/05/29(土) 21:08:18 ID:+6Jvl8e10
Gui, 1:Default
Gui, +LabelHoge
Gui, Show, w100 h100 x100 y100, Hoge

Gui, 2:Default
Gui, +LabelFuga
Gui, Show, w100 h100 x300 y100, Fuga

Return

HogeDropFiles:
FugaDropFiles:
MsgBox, Gui=%A_Gui%`n%A_GuiEvent%
Return
723名無しさん@お腹いっぱい。:2010/05/29(土) 21:32:26 ID:PYi9hqIRP
・ホイールリダイレクト
・反転選択したワードをGoogle検索
・反転選択したtp:// tps://を開く
・反転選択したパスをエクスプローラーで開く
・ウインドウを全てプライマリモニタに移動する
・ウインドウをモニタの端にくっつける

アイデアが尽きた
724名無しさん@お腹いっぱい。:2010/05/31(月) 21:06:06 ID:KwmkhGQ3P
「キーを押したらコードAを実行する、キーを離したらコードBを実行する」
っていう感じのを作りたいんだけどどうすればいい?

ループ系処理を使わずに実装したいんだけど
725名無しさん@お腹いっぱい。:2010/05/31(月) 21:40:03 ID:lg9BIlOc0
726名無しさん@お腹いっぱい。:2010/05/31(月) 21:45:13 ID:KwmkhGQ3P
>>75
散々やったさw
でもループ処理を利用しない方法が分からないんだよ…
ループ使うと連打になっちゃって上手くいかない
727名無しさん@お腹いっぱい。:2010/05/31(月) 21:49:11 ID:jR3TOzOpP
>>726
ttp://ahk.xrea.jp/Hotkeys.html
Upホットキーじゃないか
728名無しさん@お腹いっぱい。:2010/05/31(月) 22:15:25 ID:KwmkhGQ3P
これは盲点だったsory

ずっとgetkeystateでどうにかやろうと考えてましたorz
729名無しさん@お腹いっぱい。:2010/05/31(月) 22:44:20 ID:4QoVrBRT0
KeyWaitでも出来るわな。〜 Upの方が合目的的だけど
730名無しさん@お腹いっぱい。:2010/05/31(月) 23:05:48 ID:G9hqr3560
リファレンスのページを隅から隅まで読めとは言わないけど
Hotkeysやらキーリストのページすら読まずに「散々」やったとか言われてもな
731名無しさん@お腹いっぱい。:2010/06/01(火) 23:44:55 ID:7HSets100
Emacsみたいに一行選択って出来ませんか?
一応クリップボードとShift+十字キーを組み合わせて実装してみたものの、
処理が汚いわ、遅いわで使い物にならず




732名無しさん@お腹いっぱい。:2010/06/01(火) 23:52:20 ID:7HSets100
事故解決しました
733名無しさん@お腹いっぱい。:2010/06/03(木) 19:20:56 ID:+V4Y8WEK0
734名無しさん@お腹いっぱい。:2010/06/03(木) 19:45:36 ID:+V4Y8WEK0
複数行に渡るスクリプト(例えば、あるウインドウを全面にしてF5をうつ)
をキーワード入力型で実行させたいのですが、無理あるでしょうか?

理想でいえば、AutoHotkey.iniのなかにある複数行のスクリプトに
なにかラベルをつけて、そのラベルをINPUTボックスで入力エンターすると
そのスクリプトが起動するようにしたいです。

FileLaunchやAutoHotFileというahkはHDDのなかにあるexeを
みつけて起動するタイプのもので、複数行のスクリプトは
選択して起動できないですよね?

GUIを作って、マウスクリックからスクリプトを起動する
というのはなんとなくわかるのですが、キーボードからのコマンド入力で
スクリプトを選択して実行というのは無理でしょうか?

おしえてください
735名無しさん@お腹いっぱい。:2010/06/03(木) 19:50:19 ID:dQoSCCBq0
>>734
なにをやりたいのか、さっぱりわからない
736名無しさん@お腹いっぱい。:2010/06/03(木) 19:51:31 ID:u33GkK2q0
737名無しさん@お腹いっぱい。:2010/06/03(木) 20:12:50 ID:+V4Y8WEK0
>>736
ありがとうございます。こんなんあったんですね。
Hotstringのスクリプト実行型ですね。うまく希望にかなうかな。
候補がでてほしいような。しかし非常に使える機能ですね。

>>735
コマンドライン入力型のランチャーをAHKで作って
複数行に渡るスクリプトを選択実行したい。
738名無しさん@お腹いっぱい。:2010/06/03(木) 20:30:00 ID:yW61PFK90
InputBox, keyword
If IsLabel(keyword)
 Gosub, %keyword%
739名無しさん@お腹いっぱい。:2010/06/03(木) 21:14:08 ID:+V4Y8WEK0
>>738
そのあとどうやって補っていくのか分からないけど
イケル気がする。
ラベルのつけ方わかんないけど、なんか。
ありがとうございます。
740名無しさん@お腹いっぱい。:2010/06/04(金) 00:17:26 ID:iS3gjDV40
#E::
InputBox, keyword, スクリプト選択実行, コマンド?, , 200, 110, 0, 0, , 30
if (IsLabel(keyword)) {
Gosub, %keyword%
} else {
MsgBox, 該当処理なし ; 合致するサブルーチンが無いとき
}

return

test:
MsgBox, 成功!
return
---------------------------------
これで一応できたのかな? ちょっと嬉しい。過去スレより
もっとスマートにできたらいいが。ありがと。
741名無しさん@お腹いっぱい。:2010/06/04(金) 10:05:48 ID:r7Q2PGOs0
AutoHotkey64: 64-bit AHK_L - Now with DllCall() support!
http://www.autohotkey.com/forum/topic58237.html

http://www.autohotkey.com/forum/topic22923-568.html
> I added COM support to AutoHotkey64 recently posted by fincs.
> It was compiled using VC++ 2010. The zip file contains both 32bit/64bit executables,
> modified/new source files, and VC++ 2010 project files.


64なOS持ってないから試せないが
742名無しさん@お腹いっぱい。:2010/06/04(金) 10:08:52 ID:/tA/5zI8P
AHKをLinux(Ubuntu)上で動かす方法なんて、無いよね?
あったら、スクリプトを使いまわせてかなり便利なんだけどなぁ・・・
743名無しさん@お腹いっぱい。:2010/06/04(金) 10:20:04 ID:MqE4GjBr0
x64キタ━━━━(゚∀゚)━━━━!!!!
744名無しさん@お腹いっぱい。:2010/06/04(金) 10:30:25 ID:pvJXCdYy0
x64 版だと ThumbRemap は動かないよ
745名無しさん@お腹いっぱい。:2010/06/04(金) 10:31:42 ID:pvJXCdYy0
746名無しさん@お腹いっぱい。:2010/06/04(金) 10:43:32 ID:/tA/5zI8P
>>745
ありがとう。ちょっと研究してみます。
747名無しさん@お腹いっぱい。:2010/06/04(金) 10:48:52 ID:CGxYHNQg0
キーボードとマウスの掃除をしようと思って

#Persistent
BlockInput On
Msgbox 入力無効化中`nCtrl+Alt+Del を入力し ESC で終了してください。
KeyWait Esc
ExitApp

って書いてみたけどダメだった
ボスケテ
748名無しさん@お腹いっぱい。:2010/06/04(金) 10:58:42 ID:pvJXCdYy0
>>747
Win + L で Windows をロックして、その間に掃除したら?
749名無しさん@お腹いっぱい。:2010/06/04(金) 11:32:00 ID:MqE4GjBr0
ttp://uproda11.2ch-library.com/245320RQd/11245320.txt
x64試してみたShell_NotifyIcon()でトレイアイコンがうまく登録できないんだけれどどうして?
↑はExplorer.exeのアイコンを通知領域に表示させるだけのスクリプト
通常版(32bit)だと問題なく動く
750名無しさん@お腹いっぱい。:2010/06/04(金) 11:39:01 ID:MqE4GjBr0
あと当然だけど64bitアプリにも>>594とか使えるようになってた
751名無しさん@お腹いっぱい。:2010/06/04(金) 11:50:32 ID:Ao9pzt9N0
>>740
http://lukewarm.s101.xrea.com/UTIL.zip
の中の FileLaunch.zip が多分あーたのやりたいことの完成形
もっとも、ここまでするんなら素直に既存のコマンドラインランチャ使ったほうが楽な気もするが。
752名無しさん@お腹いっぱい。:2010/06/04(金) 12:51:02 ID:Eu+p6LXq0
>>749
myhWndとかhIconとかポインタを32bitのままNumPutしてるからじゃない?
ttp://www.autohotkey.com/forum/topic58237.html
をA_PtrSizeで検索して真似してみては。
構造体の大きさも変わるね。
753名無しさん@お腹いっぱい。:2010/06/04(金) 12:54:10 ID:iS3gjDV40
>>751
レスありがとうございます。
そのFileLaunchちょっとだけ使ってたことあるんですが、
あれって、基本、HDDのなかにあるexeを実行するだけで
複数行からなるスクリプトを実行することって無理じゃないですか?
できるとしたら.ahkファイルごと実行したりすることのような。
初心者なのでreadme読んでもたしかにチンプンカンプンなんですが。
754名無しさん@お腹いっぱい。:2010/06/04(金) 13:11:19 ID:Ao9pzt9N0
いやすまん、UI部のサンプルのつもりだった。
実行部分に関してはIsLabelなり、IsFuncなりで好きなとこ飛ばすよう書き換えればいいかとと思って
755名無しさん@お腹いっぱい。:2010/06/04(金) 13:52:59 ID:MqE4GjBr0
>>752
どうもありがとう!
64ビットになるとハンドルの長さが倍になるの忘れてました
88→96に拡張してその分NumPut先ずらしたら無事動きました
・・Ptrとかあるの初めて知ったびっくりした
756名無しさん@お腹いっぱい。:2010/06/04(金) 14:19:39 ID:iS3gjDV40
>>754
あー、なるほど。それができればむちゃくちゃ理想に近づく。
そこまでのスキルないけど。なるほどね。

FileLaunchほんとにありがたいんだけど、普通用途で使ってても
登録されてない文字をエンタで打つとエラーで落ちたり
いまいち不安定のような。ただでもらっといてなんですが&ありがたいんですが。
公式フォーラムもこれっぽいものないし。AutoHotFileはすごくUI綺麗なんだけどなー。
757名無しさん@お腹いっぱい。:2010/06/04(金) 14:35:15 ID:MqE4GjBr0
できたと思ったらただAutoHotkey_Lx86で実行していただけだった・・しばらく考えてくる
758名無しさん@お腹いっぱい。:2010/06/04(金) 15:16:03 ID:yFaa4KCa0
>>747
px := A_ScreenWidth/2-220
py := A_ScreenHeight/2-20
msg = 入力無効化中`nCtrl+Alt+Del で終了してください。
BlockInput, On
Progress, W300 X%px% Y%py% B1 C00 ZH0 ZW0 ZY2 FM16 WM200 WS200 CWFFFFBF, , %msg% ; Tooltip風Progress
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770"))
Sleep, 100
Progress, Off
BlockInput, Off
PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる
759747:2010/06/04(金) 21:36:23 ID:CGxYHNQg0
>>748
スペースキーで復帰しちゃいました
>>758
入力が無効にならずに、Ctrl+Alt+Delを押すとユーザ切り替えやログオフとかのメニューになりました

環境を書き忘れてました
Windows7 64bitでAutoHotKey 1.0.48.05です
64bitがまずいのかもなので、今までどおり電源を切った時に掃除します
せっかく答えてもらったのにごめんなさい
760名無しさん@お腹いっぱい。:2010/06/04(金) 21:57:47 ID:yFaa4KCa0
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770"))
の WinExist("Windows タスク マネージャ ahk_class #32770")
の部分をWin7のタスクマネージャーのウィンドウハンドルが取得されるように書き換えて

PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる
の部分を
Send, {esc}
に置き換えると動くかもよ
Win7の環境がないので動くか分らんけど
761名無しさん@お腹いっぱい。:2010/06/04(金) 21:58:39 ID:r7Q2PGOs0
BlockInput中でも、RegisterRawInputDevicesでの直接入力は読み取れるんで、ゴニョゴニョできるけどね
762名無しさん@お腹いっぱい。:2010/06/04(金) 23:19:15 ID:Eu+p6LXq0
>>757
すまんDllCallも\Shell_NotifyIcon"直後のUInt以外は変えないとだね。
環境ないからこれでだめならわからないや。
763名無しさん@お腹いっぱい。:2010/06/06(日) 13:05:39 ID:Fqn9cELk0
>>762
ありがとう、UINTをPtrに変更したりPut先変更してみたりと昨日から1日中いじくってたらなんかわかんないけど動いた
ttp://uproda11.2ch-library.com/245750DBl/11245750.txt

cbSize(unsigned long)とhWnd(void*)とhIcon(void*)が4byte→8byteになるのはいいとして、
uCallbackMessage(unsigned int)とhIcon(void*)の間に8byteあけないとアイコンが表示されなかったのがよくわからない・・
764名無しさん@お腹いっぱい。:2010/06/06(日) 13:58:26 ID:mVkCkSMA0
>>763
アラインメントかorz アドレスがそれぞれ2,4,8の倍数以外からの
16,32,64bitロード/ストアはパフォーマンスが落ちるからそうなってる。
cbSizeもお尻4バイトはpadと思われ。
それはともかく乙。
765名無しさん@お腹いっぱい。:2010/06/06(日) 14:04:32 ID:Fqn9cELk0
>>764
おお、なるほどー
詳しい解説ありがとうございます
ふう、これでやっとx64移行できる
766名無しさん@お腹いっぱい。:2010/06/10(木) 13:35:16 ID:qp4JnDpeO
簡単そうな質問ですみません
スペースキーを押してる間だけマウスの左ボタンを中央ボタンにするには
どうすればいいんでしょう
 LButton::
 if GetKeyState("Space")
 MouseClick, Middle
 else
 MouseClick, Left
 return
これだと左ボタンのドラッグ操作ができなくなっちゃいますよね…
767名無しさん@お腹いっぱい。:2010/06/10(木) 14:37:25 ID:ylAmdHFH0
$Space:: Hotkey,Lbutton,LtoM,ON
$Space up:: Hotkey,Lbutton,LtoM,OFF

LtoM:
Send,{MButton Down}
KeyWait,%A_ThisHotkey%
Send,{MButton Up}
return
768名無しさん@お腹いっぱい。:2010/06/10(木) 14:47:21 ID:eKO6lFPP0
質問者じゃないけど、>>767の、downしてkeywaitしてupって方法は俺も使用してる。
けど、この方法だと、たまにdownになりっぱなしになっちゃうんだよね。なんでだろ。
769名無しさん@お腹いっぱい。:2010/06/10(木) 16:51:55 ID:qp4JnDpeO
>>767
ありがとうございました!
実際に試してみたところ、%A_ThisHotkey%にがSpaceが入ってしまったぽいので
KeyWait,Lbutton
と直接指定するようにしましたら、上手く動作しました。
これでメタセコイアでもグラフィックソフトと同様Space+ドラッグ移動ができるようになります
たすかりましたー
770名無しさん@お腹いっぱい。:2010/06/10(木) 18:52:16 ID:AOYunUdX0
AHKの系譜ってこんな感じかな

AHK(本家)
 ┣ 駄目文字微対策版(CP932)
 ┣ AHKL ━━ AHKL(オブジェクト) .━━━┳ AHKL(ANSI)
 ┃         ┃ ┗ AHKU(Unicode) →┗ AHKL(Unicode)
 ┃         ┃                  ┗ AHK64(x64)
 ┃         ┗ AHK_N (組み込み用DLL)
 ┣ IronAHK (.NET)
 ┣ PocketPC版
  :

AHK_Nって、単に組み込み用インタプリタなだけだと思ってたけどマルチスレッドとか色々出来んのね
771名無しさん@お腹いっぱい。:2010/06/10(木) 20:23:19 ID:cTjYFSODP
ttp://www.autohotkey.net/~fincs/AutoHotkey64/AutoHotkey64_r6b.7z
AutoHotkey32a.exe
AutoHotkey32w.exe
AutoHotkey64a.exe
AutoHotkey64w.exe
が入ってた
AutoHotkey32*は本家AHKLとどう違うんだろ
772名無しさん@お腹いっぱい。:2010/06/10(木) 20:55:19 ID:TjMXzMpI0
すごく助かってるんだが、
もうちょっと真っ当な文法に変更した(拡張した)バージョンはないんだろうか
773名無しさん@お腹いっぱい。:2010/06/11(金) 09:51:27 ID:PHd8rqCN0
ホットストリングってXP じゃ使用できないのですか?
いっさい動かないのですが。
NT専用ってそういうことなのですか?
774名無しさん@お腹いっぱい。:2010/06/11(金) 10:04:31 ID:PHd8rqCN0
↑すいませんできました。終了文字を打たないといけないのを
しりませんでした
775名無しさん@お腹いっぱい。:2010/06/11(金) 15:20:43 ID:m7Uga7N70
>>771
32bitに限定して言うと、AHKLの機能拡張版と言えるかな。
今のところ追加ライブラリなしでCOMが使える。
> ComObjCreate("SAPI.SpVoice").Speak("Hello. This is AutoHotkey!")

オブジェクト、DllCall, RegisterCallback等バリバリ利用している常用スクリプトがそのまま動くか試したみたら、あっさり動いた。
776名無しさん@お腹いっぱい。:2010/06/11(金) 15:30:55 ID:LEpzeAUWP
>>775
すげーそんな機能が
ちょっと置き換えてくる
777名無しさん@お腹いっぱい。:2010/06/12(土) 04:09:07 ID:DyBQSV7c0
ダウン機能あるならアップ機能もつけてほしい
778名無しさん@お腹いっぱい。:2010/06/13(日) 12:31:22 ID:O3jVosKT0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 52 - June 12, 2010

* Fixed: ObjRemove's Key parameter is now optional, as with Object._Remove.
* Fixed: Files were improperly locked while reading, unlike in older versions.
* Fixed: Uppercase Hex format caused negative integers to become unsigned.
* Fixed: RegExMatch was corrupting output array items when specific conditions were met. See bug report.
779名無しさん@お腹いっぱい。:2010/06/13(日) 12:36:52 ID:3shnEQj10
ime の操作がよく分からないんですが
tsf を使えば変換中の文字列を取得できることはわかりました

Text Services Framework (Windows)
http://msdn.microsoft.com/en-us/library/ms629032(v=VS.85).aspx

サンプルコードがc++で書いてあるようですが
c++自体よく分かりません
ime.ahk のようにautohotkeyで簡単に使えるライブラリをどなたか作ってくださいませんか
780名無しさん@お腹いっぱい。:2010/06/13(日) 13:20:15 ID:w3XWaiC+0
L52
>>383,419の読み込まれるAHKファイルのロックは直ってるな
781名無しさん@お腹いっぱい。:2010/06/14(月) 00:45:34 ID:iYcz9aWA0
AutoHotkey_Lw で BREGEXP.ahk を使おうとしたけど無理でした。
対応させる方法や対策ってありますか?
782名無しさん@お腹いっぱい。:2010/06/14(月) 00:54:21 ID:GZ8fb7MXP
DllCallのStrをAStrにするとか?
783名無しさん@お腹いっぱい。:2010/06/14(月) 01:34:18 ID:FIGKGUBi0
ユニコード版だと普通に日本語の正規表現( [あ-お]+ とか)通るけど、BREGEXPを使うメリットあんの?
784名無しさん@お腹いっぱい。:2010/06/14(月) 18:18:05 ID:ALg9gFPI0
全角のファイル名を半角にしたいです。
どうすればいいですか?
785名無しさん@お腹いっぱい。:2010/06/14(月) 21:41:47 ID:FIGKGUBi0
FileMoveでリネームする
全角半角変換はNKF使うか、StringReplaceをひたすら列挙
ただしファイル名に使えない置換が起きる(「/」→「/」、「?」→「?」など) のを考慮しないと上手くいかんよ
786名無しさん@お腹いっぱい。:2010/06/14(月) 21:54:28 ID:B7sJ499/P
AHK標準版で、Unicodeの含まれたファイル名をリネームしたいのだけど、
filemoveだとできないね。送り側のファイルを認識してくれない。

これさえ解決できれば、互換性の低いUnicode版でやきもきしないで
すむのだけどなぁ・・・
787名無しさん@お腹いっぱい。:2010/06/14(月) 22:01:31 ID:ALg9gFPI0
>>785
なんとなくわかりました。ありがとうございました。
788名無しさん@お腹いっぱい。:2010/06/17(木) 11:35:40 ID:G2zpoNzk0
GUIでウィンドウ内にコントロールが収まらない場合
右端にスクロールバーを出すようにできますか?
789名無しさん@お腹いっぱい。:2010/06/17(木) 12:47:46 ID:IKdIhS2F0
スクロールバーを「出すだけ」なら、GUIのオプションを変更するだけなので簡単できる。
Gui, +0x00100000 ; WS_HSCROLL
Gui, +0x00200000 ; WS_VSCROLL

ただ、これだけだと何も起こらない。スクロールバーの位置すら動かない。

スクロールバーが操作されたメッセージを拾ってウィンドウ内のオブジェクトを動かしたり
スクロールバーを移動したりする処理をいちいち書いてやらなければならない。

やりたいことは出来るだろうけど、Win32APIゴリゴリ使える人じゃないと厳しい。
790名無しさん@お腹いっぱい。:2010/06/17(木) 13:02:02 ID:G2zpoNzk0
>>789
ありがとうございます
せっかく簡単にGUI作れるのにそういうところも簡単にできればいいんですが
やはり専門の知識がないと難しいんですね。
791名無しさん@お腹いっぱい。:2010/06/17(木) 14:29:52 ID:cHpWkdRVP
Win7x64でControlSendうまく動いてる人いる?
何度試しても↓が動かない・・

SetTitleMatchMode, 2
#If hWnd:=WinExist(" - Mozilla Firefox")
WheelDown::ControlSend,,{WheelDown},ahk_id %hWnd%
WheelUp::ControlSend,,{WheelUp},ahk_id %hWnd%
#If
792名無しさん@お腹いっぱい。:2010/06/17(木) 17:09:18 ID:IKdIhS2F0
FireFox は内部でWheelRedirectみたいなことしていて、
WheelUp/Down を送ってもマウス直下がスクロールする所じゃないと無反応。
これは Send でも同じだし、WM_MOUSE(H)WHEEL 送っても同様。
793名無しさん@お腹いっぱい。:2010/06/17(木) 17:14:07 ID:cHpWkdRVP
>>792
なるほど、すっきりした
試しに^wでやってみたらちゃんと動いた
ありがとう
794名無しさん@お腹いっぱい。:2010/06/19(土) 14:48:51 ID:sEnfDrSd0
たぶんXP限定だけど
IfWinExist, ahk_class BaseBar
{
WinActivate
}
ってやるとタスクバーとは独立した画面の四隅に張り付けるタイプの
ツールバーを前面に呼び出せるね。
Win+Dやるよりはるかにレスポンスがいい。
右クリ自動的に隠すにチェックつけておけばクリック後は自動的に隠れて復帰の手間も省けるし。
もうツールバーが9段に増殖し続けてるw

これとマウスカーソルの位置に応じて複数のランチャやスイッチャを切り替える
メタランチャ的なコードと組み合わせると便利かも。
CoordMode,Mouse,Screen
MouseGetPos, mx, my
SysGet, width, 78
SysGet, height, 79

if(my < height / 3) {
LauncherTop()
} else if(my > height *3/4) {
LauncherBottom()
} else if(mx > width / 2 ) {
LauncherRight()
} else {
LauncherLeft()
}
795名無しさん@お腹いっぱい。:2010/06/20(日) 18:39:20 ID:1LvBEteF0
複数マウスのボタン定義を変えてみる

RegisterRawInputDevices で直接入力拾うとホットキーより先に処理が始まるみたいなんで、
デバイスIDをグローバル変数に定義してやる方法で出来た。
AHKL の #If で思ったよりあっさりと定義できる、本家でも If 分岐でイケる。

ただデバイスIDを予め取っておかないといけないし、抜き差ししたりするとId変わるので面倒だ。

#NoEnv
DetectHiddenWindows, On
OnMessage(0xFF, "WM_INPUT"), VarSetCapacity(dev, 12, 0), NumPut(1, dev, 0, "UShort"), NumPut(2, dev, 2, "UShort"), NumPut(0x100, dev, 4) ; UsagePage / Usage / dwFlags = RIDEV_INPUTSINK
Process, Exist
NumPut(WinExist("ahk_class AutoHotkey ahk_pid " ErrorLevel), dev, 8)
DllCall("RegisterRawInputDevices", "Ptr", &dev, "UInt", 1, "UInt", VarSetCapacity(dev))
Return

WM_INPUT(wParam, lParam) {
 global deviceId
 Critical
 DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "UInt", 0, "UIntP", size, "UInt", 16)
 VarSetCapacity(raw, size, 0)
 DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "Ptr", &raw, "UIntP", size, "UInt", 16, "Int")
 SetFormat, IntegerFast, h
 deviceId := (NumGet(raw, 0, "Int") == 0) && NumGet(raw, 20, "UShort") > 0 ? NumGet(raw, 8) : 0
}

#If (deviceId = XXXXX) ; デバイスIDを指定
MButton::
 ; 何か〜
 Return
796名無しさん@お腹いっぱい。:2010/06/21(月) 02:09:16 ID:Umi6TRor0
UTF-8ファイルをFileReadで読み込んだら
文字化けして変数に格納されるけど
文字化けせずに変数に入れる方法ありませんか?

予めFileEncoding,UTF-8と設定してれば問題ないけど
そしたらshift-jisのテキストファイルが文字化けしてしまうので
文字コードを判別して読み込むとかできたら助かるんですが。
797名無しさん@お腹いっぱい。:2010/06/21(月) 08:20:45 ID:TCw4ZJNXi
エンコーディングの自動判別はブラウザやテキストエディタだって間違うことがあるんだぜ

Ahkには自動判別するルーチンがないんで、
バイナリで読み込んでエンコード毎の特異なバイナリ配列で判断して再度読み直すか、
バイナリでバッファに格納してからNKFなどの自動判別のできる
DLLにバッファアドレスを引き渡すなどをしてやる、ってかんじかな。

ただエンコードが混在の方が問題じゃないのかなぁ、とは思う
798名無しさん@お腹いっぱい。:2010/06/21(月) 13:49:11 ID:Zb2ahP++0
非常に初歩的な質問で申し訳ないのですが

WinGetText, tx1, A
MsgBox, The text is:`n%tx1%

としてWindowsのメモ帳ですと書いた本文を取得してくれるのですが
タブ型のサクラエディタですと本文を取得してくれません。
IEでもウィンドウの本文テキストを取得できないようです。
なんとか取得方法を教えていただければ幸いです。
799名無しさん@お腹いっぱい。:2010/06/21(月) 13:53:43 ID:Gdx0kfQF0
>>798
WindowSpy機能で、どこから取得すべきなのか、そのつど考える方法が一番無難
800名無しさん@お腹いっぱい。:2010/06/21(月) 14:43:11 ID:Zb2ahP++0
ありがとうございます。
WindowSpy機能を使って調べたところ

>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: EditorClient1
Text: EditorClient

このClassNNを指定してやれば動くかと思ったのですが

WinGetText, tx1, ahk_class EditorClient1
MsgBox, The text is:`n%tx1%

ControlGetText, tx1, ahk_class EditorClient1
MsgBox, The text is:`n%tx1%

を試したところ思うような結果が得られません。
その他ahk_idなども試してみましたがダメなようです。
しばらく試行錯誤してみます。
801名無しさん@お腹いっぱい。:2010/06/21(月) 14:49:29 ID:Vjj/ortI0
>>800
> しばらく試行錯誤してみます。
ヒントくれ
教えてくれ
じゃ無くて立派
802名無しさん@お腹いっぱい。:2010/06/21(月) 18:11:20 ID:9Zd4DOjJ0
Win/ControlGetText でテキストが取得できないコンポーネントも結構あるよ
803名無しさん@お腹いっぱい。:2010/06/21(月) 18:55:55 ID:gu5jIrJ60
>>798>>800
原始的な方法w
ControlSend, EditorClient1, ^a^c, ahk_class TextEditorWindow
MsgBox, %Clipboard%

必要ならClipboardのバックアップ+書き戻しとかサクラエティタの全選択の解除とかを追加

あと>>800のスクリプトは↓こう書くべきだけど、まあどっちにしても>>802の言うとおり取得できない
ControlGetText, tx1, EditorClient1, ahk_class TextEditorWindow
804名無しさん@お腹いっぱい。:2010/06/21(月) 19:06:45 ID:Gdx0kfQF0
たしかに、取得したくてもどうしようもないアプリはあるね。

俺はそういう場合、ウインドウタイトルから、編集中のテキストファイルをフルパスで取得し、
抜き取ったファイル名をifexistで調べて存在確認し、あればそれをfilereadして、
別枠で処理してる。

タイトルにフルパスを表示できないアプリの場合、
起動時のコマンドラインオプションを覗く。(はやらせるページの関数で)

それでもダメなら、アプリを起動する際に、本番のアプリを
起動するための踏み台プログラム(ラッパー)をAHKで作ってる。

エディタを起動する際、必ずこのラッパーを通すようにすれば、
編集中のファイルをあとから確実に追跡できるようにしている。
まあこれだとエディタで「開く」などの処理をしてしまうとズレてしまうけど。

いまのところ、この方法のどれかで落ち着いている。
805名無しさん@お腹いっぱい。:2010/06/21(月) 19:51:23 ID:yGXaor0TP
テキスト取得って例えば何に使うの?
便利なんだろうけど思いつかない・・
806名無しさん@お腹いっぱい。:2010/06/21(月) 20:42:35 ID:Gdx0kfQF0
>>805
個人的に・・・AHK関連なら

・スクリプト内で使ってる関数の一覧や個数、登場位置を、別ウインドウでリアルタイムに出す
・関数やコマンドの使い方(引数など)をtooltip表示
・文法チェックや大括弧の階層カウント

とかは地味に便利。

エディタのマクロで作れるような機能も、あえてAHKで作ってる。
理由は、一度作ってしまえば、エディタの専用機能やプログラムに依存せず、
エディタを乗り換えても使えて、使いまわし的に有利だから
807名無しさん@お腹いっぱい。:2010/06/21(月) 20:45:14 ID:DgWvamzV0
うおおおおおおおおおおおおおお
そんなこともできるのか!!!!
808名無しさん@お腹いっぱい。:2010/06/21(月) 21:11:48 ID:c/47oyM60
a & b::msgbox ab
a & c::msgbox ac
; a & 〜がたくさん
a up::
if (A_TimeSinceThisHotkey < 300)
Send a
return

こう書いて、aは修飾キーにしたまま、aだけを300ms以上押していた場合は
何も入力しないようにしたかったんですが、
押していた時間にかかわらず、upのタイミングで入力されてしまいます
期待通りに動かすにはどうしたらいいのでしょうか?
809名無しさん@お腹いっぱい。:2010/06/21(月) 21:30:08 ID:yGXaor0TP
>>806
なるほどーありがとう
そういえば、本家AutoHotkeyのzipにそんな感じのスクリプトが入ってた気がする
810名無しさん@お腹いっぱい。:2010/06/21(月) 21:30:23 ID:9Zd4DOjJ0
S And S のタイムアウト付きバージョンて感じだな。

$A::
 Keys_With_A := False
 KeyWait, A, T0.3
 If (ErrorLevel && !Keys_With_A)
  Send, a
 Return

~B::
~C::
 :
~Y::
~Z::
 Keys_With_A := GetKeyState("A")
 Return

列挙が嫌ならこのスレを「列挙」で検索する。または、LL Hook や RawInput でフラグ変更。
LL Hook だと http://pc12.2ch.net/test/read.cgi/software/1253888736/177 あたりが使えるかな。
811名無しさん@お腹いっぱい。:2010/06/21(月) 21:31:32 ID:9Zd4DOjJ0
あ、
 Keys_With_A := GetKeyState("A")

 Keys_With_A |= GetKeyState("A")

のほうがいいね
812名無しさん@お腹いっぱい。:2010/06/21(月) 21:36:11 ID:42kWK6KR0
わかる >> あえて AHK
813名無しさん@お腹いっぱい。:2010/06/22(火) 13:03:31 ID:2AiDr8uk0
>>811
横レスですが、その場合の
:= と |=
では処理上どのような違いが出るのでしょうか?
前者は返値の代入で後者は返値の論理和の代入ということだけは
分かりました
代入の速度が速くなるのでしょうか?
814名無しさん@お腹いっぱい。:2010/06/22(火) 15:51:51 ID:cD8QAOuZ0
前者だと上がったフラグが再度下がることがあるけど、
後者だと上がったフラグは下がらない
815名無しさん@お腹いっぱい。:2010/06/22(火) 18:17:34 ID:+5xb0wen0
馬鹿にも分かるように説明してくれ
816名無しさん@お腹いっぱい。:2010/06/22(火) 22:55:25 ID:cD8QAOuZ0
Ifに置き換えると

(前者)
If (条件)
 flag := True
Else
 flag := False


(後者)
If (条件)
 flag := True
817名無しさん@お腹いっぱい。:2010/06/22(火) 23:32:59 ID:AA4zwBo9P
質問者じゃないけど

>>810
これってどうやって使いこなせばよいの?

ためしにAと同時押しのランチャでも作ってみるかーと思ったけど、>>808

>押していた時間にかかわらず、upのタイミングで入力されてしまいます

になっちゃうね
818名無しさん@お腹いっぱい。:2010/06/23(水) 00:45:07 ID:y04zxgA30
>>817
俺も質問者でも回答者でもないけど
ErrorLevel→!ErrorLevel
Send, aの下にKeyWait, Aを追加で期待の動作になるんじゃないかな?

でもこのホットキー常時有効にしたらまともに文章打てなくなると思う
autohotkeyって打ったら、uatohotkey とか utaohotkey になるw
819名無しさん@お腹いっぱい。:2010/06/23(水) 00:56:13 ID:1lkqbD/XP
>>818
thx。動いたよ。たしかに、日本語の入力も、ままならない状態になるね。
こういうランチャの常駐は、原理的に不可能か。

・Aを押したことをいち早く伝えなければ、キー入力に支障が出る
・Aが長押しされたかどうか判別するには、ある程度待たなければならない
 しかし、待つと(ry
820名無しさん@お腹いっぱい。:2010/06/23(水) 01:20:10 ID:y04zxgA30
>>819俺はAutoHoeKey_Lでこんな感じのしょぼいランチャ使ってる
NumLockのあと1秒間隔以内で00〜99までのキー入力

NumLock::
FirstKeyWait = 1
Sleep, 1000
FirstKeyWait =
Return

#If FirstKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
FirstKeyWait =
SecondKeyWait = 1
Sleep, 1000
SecondKeyWait =
Return
#If

#If SecondKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
SecondKeyWait =
MsgBox, % RegExReplace(A_PriorHotKey A_ThisHotKey, "\D", "")
Return
#If
821名無しさん@お腹いっぱい。:2010/06/23(水) 01:29:56 ID:1lkqbD/XP
おおすげぇ。

>#If FirstKeyWait = 1

これってAHK_Lの新機能だっけ?
かなり便利そうだね。
822名無しさん@お腹いっぱい。:2010/06/23(水) 01:33:01 ID:t5JRIxu+0
ほほう、そんなものが
ユニークな機能だ
823名無しさん@お腹いっぱい。:2010/06/23(水) 04:43:35 ID:rc/HoRPa0
ダメ文字の部分で引っかかったのでAutoHotkey_Lを使ってみたのですが
その場合すべてのスクリプトの文字コードをUTF-8に変更しないとダメなのでしょうか?
あと互換性はどんな感じなんでしょうか?
824名無しさん@お腹いっぱい。:2010/06/23(水) 05:28:12 ID:1hiw1Jm+0
SJISで続けたいなら >>503
互換性は http://sites.google.com/site/agkh6mze/translation/autohotkey_l/compatibility でも読んどけ
825名無しさん@お腹いっぱい。:2010/06/23(水) 05:31:08 ID:1hiw1Jm+0
ところで、800超えたんで提起するが、テンプレどうする?
流行らせるページも消えたし、AHKLがかなり変わった上にしユーザも増えてるっぽいけど。
826名無しさん@お腹いっぱい。:2010/06/23(水) 10:15:25 ID:VsV97jO+P
■公式
http://www.autohotkey.com/

■日本語解説
AutoHotkeyを流行らせるページ
http://ahk.xrea.jp/
AutoHotkeyJp
http://sites.google.com/site/autohotkeyjp/
hoge
http://sites.google.com/site/agkh6mze/Home

■過去スレ
http://-----
  :

■派生版
AutoHotkey_L
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
AutoHotkey64(AutoHotkey_L 64bit版)
http://www.autohotkey.com/forum/topic58237.html

関連リンク>>2以降も参照
827798:2010/06/24(木) 00:01:38 ID:n51ivsKf0
遅くなってすみませんが
お答えいただいた方々ありがとうございました。
なかなか万能とは行かないようですが、
>>803の方の方法でやってみようかと思っています。

みなさま書き込みを参考に少しずつレベルアップしていきたいです。
828808:2010/06/24(木) 21:28:29 ID:saliTuFK0
>>810-811
コピペして少し考えると目的の動作になりました
ありがとうございました
>>818
本来は無変換キーを修飾キーにしようとしていましたが、
質問を見やすくするためaにしました

忙しかったため遅レスですみません
829823:2010/06/24(木) 21:33:23 ID:ryPilJcc0
>>824
ありがとうございます。
DllCallなどよくわからずに流用してる物が多いのですが
手直しなども必用なんですね

文字コードはUTF-8とUTF-16LEが正常に読み込めたのですが
どっちにした方がいいのでしょうか?
830名無しさん@お腹いっぱい。:2010/06/24(木) 23:45:03 ID:a4LmzMUnP
Menu, メニュー名, Show
で表示させたメニューの項目を左クリック、右クリック、中クリックで選択した際にそれぞれ違う動作をさせることは可能でしょうか?
AutoHotkey64w r7です

あ、ついでに
AutoHotkey64更新されてた

ttp://www.autohotkey.com/forum/topic58237.html
Changelog:
* r7: Upgraded to AutoHotkey_L L52.
831名無しさん@お腹いっぱい。:2010/06/25(金) 00:38:45 ID:R9enYsNqP
相変わらず1行もコードを書かずにコンパイルしても
マカフィーでウイルス反応が出るのだけど誰も報告したりしないのだろうか
UPXも関係無いみたいだし
832名無しさん@お腹いっぱい。:2010/06/25(金) 02:18:54 ID:LO18MXty0
>>830
無理なはず
833名無しさん@お腹いっぱい。:2010/06/25(金) 11:17:46 ID:IE5DxVF10
FileSelectFile や FileSelectFolder でダイアログを表示する時に
ダイアログの表示位置を指定することは出来ないのでしょうか?
834名無しさん@お腹いっぱい。:2010/06/26(土) 12:18:00 ID:nYMFrh030
GUIのウインドを印刷したいんですが、プリンタにデータ送るのってむずかしいんでしょうか。
ハードコピーだと文字が汚くなるので、できれば普通の印刷みたいにプリンタにデータを送りたいのですが。
835名無しさん@お腹いっぱい。:2010/06/26(土) 13:15:29 ID:R24TNTNhP
>>832
ありがとうございます
処理の分岐だけできればいいので、今回はメニュー項目をクリックしたら子メニューを出す方法で実装してみます


すみません、もう一つ質問なのですが、
GUIにAdd,Tabでタブ1、タブ2、タブ3、タブ4・・・とタブを登録したAHKウィンドウを表示しているとき
タブ2を削除して以降1つずつ前にずらしたりタブnを追加したりと動的にタブを扱うことは可能でしょうか?
それぞれのタブにEditを表示して付箋みたいなことをしたいのですが、
追加/削除するたびにGui,Destroy→Gui,Add,Tab/Gui,Add,Editとするのはどうにも無駄な気がしてしまって
836名無しさん@お腹いっぱい。:2010/06/26(土) 14:44:53 ID:l3HhhS2S0
Guicontrolでコントロールの内容を変更した時は
gオプションで指定したラベルに飛ばさないようにできませんか?
837名無しさん@お腹いっぱい。:2010/06/26(土) 14:47:36 ID:jOmC8RZh0
>>833
普通は出来ないけど、タイマ使って表示されたら移動するみたいな姑息なkとはできる

>>834
AHKLの Gui, Font, qN でアンチエイリアスをある程度制御できるけど、根本解決にならないね
PDFとかHTMLへの文字列埋め込みを使う方が確実かと。

>>835
出来るけど面倒かと。
GuiControl,, TabControlName, NewTabName, でタブ追加出来るけど、
タブは先頭に追加されるんで、各ページにあるアイテムをずらしてやんないといけないし。

だったら、タブの高さを文字分だけにして Edit コントロールは1個。
タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。

切り替えの度にキャレットの位置などを待避・復元したいなら
EM_XXXX あたりで情報取得・操作が必要になるけど。
http://yokohama.cool.ne.jp/chokuto/urawaza/message/
838名無しさん@お腹いっぱい。:2010/06/26(土) 14:55:01 ID:R24TNTNhP
>>837
>だったら、タブの高さを文字分だけにして Edit コントロールは1個。
>タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。

思いつかなかった・・ありがとうございます!
メッセージの方も見てみます
839名無しさん@お腹いっぱい。:2010/06/26(土) 15:22:38 ID:jOmC8RZh0
>>836
それ、フラグでやったことはあるなぁ

Gui, Add, Edit1, vEdit1 gEdit1_OnChange
 :
Edit1_SkipEvent := True
GuiControl,, Edit1, HogeHoge
Edit1_SkipEvent := False
 :

Edit1_OnChange:
 If ( Edit1_SkipEvent )
  Return
 メイン処理
 Return
840名無しさん@お腹いっぱい。:2010/06/26(土) 21:07:33 ID:l3HhhS2S0
>>839
これはw
質問する前に全く同じことやりました
やっぱりこういう手段しかないんですかね
ご親切にありがとうございました。
841名無しさん@お腹いっぱい。:2010/06/27(日) 07:21:04 ID:4hmeKhjn0
linuxの環境表示ツールで有名な「Conky」みたいな表示を
AHKでさせたいのですが、なにか使いまわせそうな既製サンプルはないでしょうか。

Conkyはこんな感じの表示ツール
http://www.ubuntugeek.com/images/conky/7.png
842名無しさん@お腹いっぱい。:2010/06/27(日) 16:38:00 ID:sNXY9MdS0
情報取得?それとも表示?その両方?どっちにしろ、あまり得意でないと思うよ。
Samurize 使った方が幸せだと思う
843名無しさん@お腹いっぱい。:2010/06/27(日) 17:44:40 ID:tJzU2OQW0
Samurizeも最近弄ってなさ過ぎで全てを忘れちまったなぁ・・・
844名無しさん@お腹いっぱい。:2010/06/27(日) 17:54:31 ID:KXoKq9gG0
ホットキーに対応してどうこうじゃなく
外部からmemo.ahkを起動してメモ帳にキーを送って即座に終了って
どう書けばいいんですか?

; memo.ahk
IfWinExist, 無題 - メモ帳
{
  Send,hello
}

じゃうまくいかないようでした。
845名無しさん@お腹いっぱい。:2010/06/27(日) 18:19:19 ID:RxxSYUXm0
IfWinExist, ahk_class Notepad
{
IfWinNotActive, ahk_class Notepad
WinActivate, ahk_class Notepad
Send, hello
}
846名無しさん@お腹いっぱい。:2010/06/27(日) 23:01:44 ID:4hmeKhjn0
>>842
了解です、ありがとうございます。
AHKで既製品がないようなので、似たようなものをGUIで1から作ることにします
847名無しさん@お腹いっぱい。:2010/06/28(月) 01:06:14 ID:gIZXfJAQP
流行らせるページのシステムモニタが同じような感じだった
>>1のzipに入ってる
848名無しさん@お腹いっぱい。:2010/06/28(月) 20:13:50 ID:gIZXfJAQP
せんせー!AutoHotkeyで作ったGUIがSetWinEventHookにひっかかってくれないのはどうしてですか!
849名無しさん@お腹いっぱい。:2010/06/28(月) 22:34:07 ID:CvVs7iH70
>>53の例でいうと

>, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS

 "UInt", 0x0000 ; 自分のプロセスやスレッドを無視しない
にする
850名無しさん@お腹いっぱい。:2010/06/29(火) 02:09:48 ID:PSDsZroD0
最小化時にタスクトレイに格納できるけど、
タスクトレイからウィンドウを復帰するホットキーのない
アプリ(Twit)で、

タスクトレイ格納・復帰をトグルさせるキーは、
どう書けばよいでしょうか。何か調べる方向性を示す
ヒントをお願いします。
851名無しさん@お腹いっぱい。:2010/06/29(火) 02:29:55 ID:T+V/xBaz0
ウィンドウがあったら閉じて、無かったら起動で良いんじゃない。
852名無しさん@お腹いっぱい。:2010/06/29(火) 13:15:06 ID:f2t8/ycBi
>>850
下に行くほど面倒。
1) MouseClick で座標指定でトレイ操作。
 必要に応じてメニューのアクセラレータキーをSend
 欠点:アイコンの誤爆が有り得る
2) (1)の前にImageSearchで座標を調べる処理を追加
3) 跡地から「タスクトレイアイコン操作」拾ってトレイ操作をエミュレート。
4) リソースハッカーなどでコマンドID調べて隠し窓にPostMessage。
 ただし調べても分からないことがある。
853名無しさん@お腹いっぱい。:2010/06/29(火) 17:59:29 ID:xcE/nB7tP
>>849
うおーありがとう、ありがとうございました!
854名無しさん@お腹いっぱい。:2010/07/02(金) 13:51:51 ID:SKFXYBNM0
BOMなしUTF-8のテキストって絶対文字化けするんだね
855名無しさん@お腹いっぱい。:2010/07/02(金) 15:36:39 ID:Y8vfxMdE0
856835:2010/07/02(金) 16:40:49 ID:Y8HaskfWP
タブの件ですが、なんとか解決できました
流行らせるページのGuiControlの説明にはタブ項目をすべて再設定する方法が記載されていませんでしたが、
試しにDropDownListの方法を試してみたところ、GUIの再生成なしにタブ項目を再設定できました
文字列操作でタブを左右に移動とか項目名変更とかできそう

Gui, Add, Tab, VMyTab, a|b|c|d|Default||
Gui, Show
Msgbox, タブ項目を再設定します
sNewTabItems = Default||b|c|d|e
GuiControl, , MyTab, |%sNewTabItems%

既出というか当たり前のことだったらごめん
これで1週間近く悩んでた
857名無しさん@お腹いっぱい。:2010/07/02(金) 22:39:25 ID:4toW4sAfP
以下のコードで、A_Loopfieldで取り出した文字列に、スラッシュ等が入っていると、
エラーダイアログが出て、スレッドが停止してしまいます。

fileread,data,c:\a.txt
loop,parse,data,`n
 {
 %A_LoopField%:=A_Index
 }

変数として定義するとエラーになる文字を、確実に取り除くことってできますか?
エラーが出るたび、stringreplaceで空白に置き換えて除外していますが、
なにか手はない物かと・・・

こんな感じで考えています↓

fileread,data,c:\a.txt
loop,parse,data,`n
 {
 filter:=filter(A_LoopField)
 %filter%:=A_Index
 }

filter(string)
 {
 なにか
 }
858名無しさん@お腹いっぱい。:2010/07/02(金) 22:51:13 ID:6rnSmqji0
AHKLのオブジェクトを使えばいいんジャマイカ

filter := Object()

Loop, 〜
{
  〜
 filter[A_LoopFiled] := A_Index
  〜
}
859名無しさん@お腹いっぱい。:2010/07/03(土) 19:41:44 ID:kWvq6rye0
>>850
おれはcentigrade氏のアイディアを拝借、一部改変し利用させてもらってるよ
これでタスクトレイ格納・復帰のトグルが実現できる
ただし、WinXPからWin7 64bitへ移行したらタスクトレイからの復帰ができなくなったorz
解決策わかる方ヒントplz m(_ _)m

#include TaskTrayIcon.ahk

ActivateOrLaunch(commandPath="") {
  SplitPath, commandPath, appName
  Process, exist, %appName%
  appPID:=errorlevel
  if (appPID <> 0)
  {
    WinGet, WIN,, ahk_pid %appPID%
    IfWinExist, ahk_id %WIN%
    {
      IfWinActive, ahk_id %WIN%
        WinMinimize,A
      else
        WinActivate
    }
    else
    {
      DetectHiddenWindows,On
      cnt:=Tray_GetCount()
      Loop,%cnt%{
        Tray_GetInfo(A_Index,hwnd,uid,msg,icon)
        WinGet,pn,ProcessName,ahk_id %hwnd%
        if(pn=appName){
          PostMessage,%msg%,%uid%,0x203,,ahk_id %hwnd%
          break
860名無しさん@お腹いっぱい。:2010/07/03(土) 19:43:03 ID:kWvq6rye0
        }
      }
      DetectHiddenWindows,Off
    }
  }
  else
  {
    Run, % commandPath,,UseErrorLevel
    If ErrorLevel
      msgbox, %appName%は存在しないか、またはエラーにより起動できません
  }
  return
}

引数にはコマンドのフルパスを渡す。
#^p:: ActivateOrLaunch("C:\path\to\app.exe")
861名無しさん@お腹いっぱい。:2010/07/03(土) 23:50:59 ID:NCG34LV30
AHK64使って、更にx64用にトレイ関連ライブラリを改変する必要がある。
>>749,752,755,757,762-765 辺りが参考になる。
862名無しさん@お腹いっぱい。:2010/07/04(日) 01:52:58 ID:n5wu8pkp0
>>861
アドバイスありがとう!
該当レスをよく読んで勉強してみます
863名無しさん@お腹いっぱい。:2010/07/05(月) 12:21:58 ID:lqlb3yyb0
上の方で、本当のマルチスレッドを扱えるautohotkeyの派生が
取り上げられているけど
実際のところ、atutohotkeyの擬似マルチスレッドよりも
本当のマルチスレッドを使う利点はある?
というのも、擬似マルチスレッドでたいていのことが済んでしまうと思うから

できれば、本当のマルチスレッドの実例を見てみたいです
864名無しさん@お腹いっぱい。:2010/07/05(月) 13:45:25 ID:wcck/3Fr0
実際の所、常駐スクリプトだとタイマーやイベント監視で条件分岐して、
いくつかのコマンド投げるってことが殆どだろうから、擬似マルチスレッドでも殆ど問題ないなぁ

マルチスレッドだと、分割DLしたいとか、デカいデータを並列で処理したい、とかなんで、
ホットキーやタイマでのアラートみたいな使い方だと無理して使う必要はないんじゃないのかね。

あとはGUI作って、ボタン押すとゴリゴリ演算するってやつ走らせた時は、
演算系は別スレッドで動かしたいなぁと思うことはあった。

あとAHK_Nは、AHKの中にAHKの実行環境を作って操作するみたいなんで、
他のスクリプトをRunするので代用できてるなら無理して使う必要も無いんじゃないかな。
(メモリ効率とかは良いと思うけど)
865名無しさん@お腹いっぱい。:2010/07/06(火) 01:44:58 ID:vGHoE+LW0
ファイルをロックしたいんですができますか?
移動できなくしたりリネームできなくしたいんですが
866名無しさん@お腹いっぱい。:2010/07/06(火) 08:39:34 ID:04FfhjZPP
AutoHotkey_LのobjFile:=FileOpen()でファイル開いてobjFile.Close()するまではロックされてた気がする
ttp://sites.google.com/site/agkh6mze/translation/autohotkey_l/fileopen
ttp://sites.google.com/site/agkh6mze/translation/autohotkey_l/objects/file
867名無しさん@お腹いっぱい。:2010/07/06(火) 09:44:28 ID:vGHoE+LW0
できました
ありがとうございます!
868名無しさん@お腹いっぱい。:2010/07/06(火) 09:47:07 ID:uWljCSRy0
読みだけは許可したいとかなら、共有モードフラグで許可できるよ
869名無しさん@お腹いっぱい。:2010/07/06(火) 12:23:28 ID:ZVJLgCTK0
>>864
なるほど、演算部分とguiの部分を分離させるというのは
すぐに使えそうな案ですね
参考にします
870名無しさん@お腹いっぱい。:2010/07/07(水) 21:35:14 ID:V92r/HtA0
OSはXP32bitで、物理メモリを2GB積んでいて、消費メモリは1GB程度です。
自鯖で、runwaitをsettimerで回してzip圧縮など定型処理を長期間やっていると、

「システムリソースが足りないため、要求された処理を実行できませんでした」

と出ることが多くなってきました。
(以前は数ヶ月に1度程度、最近は3日持たない)

これが出ると、AHKのダイアログが出てスレッドが止まってしまい、
タスクトレイアイコンで右クリして手動でリロードすることもできなくなります。

素のXPをクリーンインストールしてみましたが、同じスクリプトを動かすと
同じ症状になります。

めもりーくりーなー という常駐ソフトを試したところ、仮想メモリを1GBほど食い潰して
CPUが100%になる症状が出て、クリーニングどころか逆効果でした。


それで相談ですが、システムリソースが溢れて制御不能に陥る前に、AHKをつかってPCの再起動などを
やらせたいのですが、システムリソースの値を取得する方法またはコマンドラインツールは、ないでしょうか。

XPでシステムリソースが溢れること自体が稀なようで、計測できるソフトが見つかりません。
871名無しさん@お腹いっぱい。:2010/07/07(水) 22:54:41 ID:Oot+MLLv0
872名無しさん@お腹いっぱい。:2010/07/07(水) 22:55:48 ID:Oot+MLLv0
monitorだった・・
873名無しさん@お腹いっぱい。:2010/07/07(水) 23:11:49 ID:p1524h7I0
メモリクリーナーとかやらは、大量のメモリを確保することで、
実メモリにあるデータをスワップに追い出しているだけで、
システムリソース不足に対しては効果無いんでわ
874名無しさん@お腹いっぱい。:2010/07/07(水) 23:38:59 ID:8RwA34FY0
>>871
ありがとうございます。試してみます。
875562:2010/07/08(木) 08:44:06 ID:T3ptACPyP
>>870
そもそも何がメモリーを占有しているか確かめないと
メモリが圧迫されているときは、タスクマネージャやXPならProcessExplorerで確かめるクセをつけよう

俺はガジェットでメモリ占有率上位いくつかを表示しておいて、すぐにわかるようにしている
XPでも互換ガジェット入れられるぞ

と思ったら、サーバーか。コマンドラインでモニタしてるわけか
876名無しさん@お腹いっぱい。:2010/07/08(木) 17:08:13 ID:rN4WzQ0M0
>>875
不足しているのは、タスクマネージャ等で参照できる「物理メモリ」じゃなくて、
いまどきなぜ足りなくなるのか謎な「システムリソース」です。

タスクマネージャで参照できるメモリ消費量は常に監視していて、
それは最初に書いたとおり2GBのうち1GB程度です。

今は、>>871で教えていただいたdesktop-heapの値を定期観測しています。
WinSta0\Defaultの値が、OS起動時に20%からはじまり、じわじわと上昇しています。

> Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
> Copyright (c) Microsoft Corporation. All rights reserved.
> -------------------------------------------------------------
> Session ID:  0 Total Desktop: ( 5312 KB -  7 desktops)
>
> WinStation\Desktop    Heap Size(KB)  Used Rate(%)
> -------------------------------------------------------------
> WinSta0\Default       3072     25.6
> WinSta0\Disconnect       64     4.5
> WinSta0\Winlogon       128     9.7
> Service-0x0-3e7$\Default    512     11.4
> Service-0x0-3e4$\Default    512     4.3
> Service-0x0-3e5$\Default    512     8.1
> SAWinSta\SADesktop      512     0.5
> -------------------------------------------------------------

WinSta0\Defaultを上昇させるプログラムまで特定できればベストですが、
おそらくそれはできないですよね。

とりあえずこれをAHKで定期観測して再起動トリガを発動すれば
対症療法はできそうなので、助かりました。
877名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:28:24 ID:rGDak5hVP
システムリースと書いてあるのに、メモリと勘違いしてたスマソwww

Windowsのリソースは長いこと起動していると枯渇するよな
Win9XのころはGDIリソースがすぐになくなったが、
今は見えないだけで上限引き上げられているけど存在するというのがやっかい
プログラム側でリーク起こしているとなくなるんだよな

サーバーはわからんが、デスクトップだとかなり顕著だよ

878名無しさん@お腹いっぱい。:2010/07/12(月) 11:13:47 ID:4H6la4YU0
MouseGesture.ahkでマウスのボタンに閉じるを割り当てているのですが、
WinCloseやSendMessageで閉じるのではなく閉じるボタンがウィンドウ上に存在する場合、そのボタンをクリックするという動作は可能でしょうか?
879名無しさん@お腹いっぱい。:2010/07/12(月) 12:34:25 ID:K416YT4v0
いつもウィンドウ内の特定の位置にあるなら MouseClick コマンドで特定座標をクリックしてやる。
リサイズできるウィンドウの左上とかなら、WinGetPos でサイズ取って計算する。
もしくは ImageSearch でボタン画像の座標を探す。
880名無しさん@お腹いっぱい。:2010/07/12(月) 12:35:22 ID:K416YT4v0
× 左上
○ 右上
881名無しさん@お腹いっぱい。:2010/07/12(月) 14:17:14 ID:4H6la4YU0
>>879
ありがとうございます
どちらも試してみます
882名無しさん@お腹いっぱい。:2010/07/13(火) 20:17:43 ID:GuK9WFTk0
だれか初心者のスクリプトの添削お願いします。
アプリの立ちあげが遅く、ウインドウが立ち上がるのを
まってから右クリックをそのウインドウ上でさせたいのですが
うまくいきません。どこがおかしいのでしょうか。
ループしてくれません。音がなりませんし、一回で終わってるっぽいです。


#m::
Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe
sleep, 100
Loop, 10
{
WinActivate, ahk_class TpcwmpMain.UnicodeClass
WinWaitActive, ahk_class TpcwmpMain.UnicodeClass, , 1

if ErrorLevel <> 0 ;エラーがあるとボックスで表示
{
sound *-1
sleep, 200
return
}
else
break
}

send, {APPSKEY}
;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass
sleep, 200
Send, {DOWN 6}{RIGHT}
sleep, 200
Send, {DOWN}{ENTER}
883名無しさん@お腹いっぱい。:2010/07/13(火) 20:42:56 ID:ff4KvU4g0
>>882
とりあえずsleepを10倍にして様子見してみたら?

あとwinwaitactiveって、コマンド実行時点ですでにアクティブになってたら
待ちコマンドってちゃんと働くんだっけ?

俺がそういうのを作る場合、アクティブウインドウのタイトル文字列で判別させてる
884名無しさん@お腹いっぱい。:2010/07/13(火) 20:58:14 ID:zrexb9PoP
TimeOut := A_TickCount + 10000
Loop
{
IfWinExist, ahk_class TpcwmpMain.UnicodeClass
{
WinActivate, ahk_class TpcwmpMain.UnicodeClass
break
}
Else If( TimeOut < A_TickCount )
{
MsgBox, TimeOut
ExitApp
}
Else
{
Sleep, 200
}
}

ウィンドウ表示されるの待つならこれでどうだろう
885名無しさん@お腹いっぱい。:2010/07/13(火) 21:05:44 ID:GuK9WFTk0
レスありがとうございます。
>>883
sleepを長めにとればできそうですが
なんかかっこわるいかなぁって。

待ちコマンドっていうのわからない。

>>884

ありがとうございます。なんか複雑で理解できませんが
導入します。助かります。
カッコがいっぱいありますね。これタイムアウトした場合
Loopって終わるんですか?制限値がないみたいですが。
と初心者は思いました。
僕の書いたのどこがダメなんだろう。
ありがとうございました
886名無しさん@お腹いっぱい。:2010/07/13(火) 21:05:55 ID:zrexb9PoP
あ、書いてから気づいたんだけど、WinWaitがあった・・
887名無しさん@お腹いっぱい。:2010/07/13(火) 21:12:19 ID:zrexb9PoP
#m::
Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe
WinWait, ahk_class TpcwmpMain.UnicodeClass
WinActivate, ahk_class TpcwmpMain.UnicodeClass

Send, {APPSKEY}
;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass
Sleep, 200
Send, {DOWN 6}{RIGHT}
Sleep, 200
Send, {DOWN}{ENTER}

ごめんこっちで
888名無しさん@お腹いっぱい。:2010/07/13(火) 21:27:13 ID:GuK9WFTk0
>>887
ありがとうございます。>>884でもうまくいってたのですが
もしかして>>887みたいなシンプルなものでも上手くいくのでしょうか?
たしかに今のところ不都合でてきてません。

そうか、winactiveで待てばいいのですか。。。
たしか自分で書いてたはずと思ったが、違うやつだった。
activeを待つほうだった。
ありがとうございました。^ー^
889名無しさん@お腹いっぱい。:2010/07/13(火) 21:54:09 ID:3FaoPQm/0
むしろ、>>887の方が処理的に良いと思う
タイムアウトで処理分岐したいなら、WinWait の第3引数に待ち時間入れて ErrorLevel で分岐すりゃいい
890名無しさん@お腹いっぱい。:2010/07/13(火) 23:30:24 ID:Qk8g1XKT0
AHK_Lのオブジェクトのメンバ関数?って、ベースで最初に設定してから継承って形でないと使えない?
これベースの方はうまく動かないけど継承するとちゃんと動く

; ベース
objHoge1 := Object()
objHoge1.HOGEHOGE := "HOGEHOGE"
objHoge1.HOGEHOGEHOGE := "HOGEHOGEHOGE"
MsgBox, % objHoge1.HOGEHOGE()
MsgBox, % objHoge1.HOGEHOGEHOGE()

; 継承
objHoge2 := Object( "Base", objHoge1 )
MsgBox, % objHoge2.HOGEHOGE()
MsgBox, % objHoge2.HOGEHOGEHOGE()

; メンバ関数
HOGEHOGE(obj){
return "HOGEHOGE"
}
HOGEHOGEHOGE(obj){
return "HOGEHOGEHOGE"
}
891名無しさん@お腹いっぱい。:2010/07/13(火) 23:59:14 ID:3FaoPQm/0
>>890

■ メソッド呼び出しのルール
オブジェクトのメソッド(メンバ関数)呼び出しがあったとき:
 オブジェクトに該当メソッドがある → 引数はそのまま渡して関数を呼び出す
 オブジェクトに該当メソッドがない → 再帰的に base オブジェクトを検索し該当メソッドを探す
                        見つかったら、第一引数にオブジェクト自身を渡す
■ 関数呼び出しのルール
引数が足りていない場合、引数にデフォルト値が設定されていれば、その分はあるものとして補完するが、
デフォルト値が設定されていない場合は、呼び出しは失敗する(シグナチャが異なるため)


base のメソッドを引数無しで呼んだ場合は、該当関数名は見つかるが引数が足りないため呼び出しは失敗。
結果として空文字列が返る。

拡張オブジェクトの場合は、自身にメソッドが無いため継承元オブジェクトのメソッドが検索され、
オブジェクト自身が引数として関数コールするが、引数は満たされているため成功する。

※ 引数が過多な場合は切り捨てられるのでコール自体は成功する
892名無しさん@お腹いっぱい。:2010/07/14(水) 00:01:14 ID:3FaoPQm/0
あ、、関数というか「動的関数呼び出しの」場合ね
893名無しさん@お腹いっぱい。:2010/07/14(水) 00:10:13 ID:qUQ12LW+0
>>891
なるほど
つまりオブジェクトのメンバ関数からオブジェクト内をいじくり回すには継承しないとだめなのかー
どうもありがとう
894名無しさん@お腹いっぱい。:2010/07/14(水) 00:29:30 ID:0K1ii/Cg0
EXE化したAHKスクリプトをショートカットあるいはバッチで呼び出して実行する際、
実行を開始した際のカレントディレクトリを取得する方法ってありますか?

A_Scriptdirだと、EXEファイルの置かれたフォルダになってしまいました。
895名無しさん@お腹いっぱい。:2010/07/14(水) 00:36:02 ID:jIKZWjLf0
普通に A_WorkingDir
896名無しさん@お腹いっぱい。:2010/07/14(水) 01:17:24 ID:0K1ii/Cg0
>>895
ありがとうございます。バッチから手動で呼び出したときはうまくいきました。

やりたいことは、EXEファイルを、スタートアップフォルダからショートカットで
呼び出されたかどうかを判別して、スタートアップのときだけ別の処理をしたいのです。

ふつうにショートカットを作ると、ショートカットの詳細の「作業フォルダ」が
強制的にEXEファイルの場所に指定されるようです。
ためしに、これを空欄に変えたところ、識別できました。

が、これを変えないまま判別させる方法は、ありそうでしょうか。
897名無しさん@お腹いっぱい。:2010/07/14(水) 02:21:01 ID:jIKZWjLf0
OSの仕様だからなぁ
スタートアップのショートカットには /startup とかのパラメタ与えて引数で分岐すりゃいいと思うけど
898名無しさん@お腹いっぱい。:2010/07/15(木) 23:29:15 ID:9v52251o0
PixelGetColorによってきちんとした値がまったく得られません。
カーソルを動かしてそこで取得させてるつもりなのに
値がまったく変わりません

以下のHPにあるスクリプトをpaint上で使いました。
^!z::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
MsgBox, The color at the current cursor position is %color%.
return
どうしてでしょうか?windowspyではちゃんとそこの色の文字列が変化しているのですが。

そもそも全画面でやる3DFPSゲームの特定箇所のピクセルの色が
指定したものであればどこそこをクリックするというものが作りたかったのです。
おしえてください。
899名無しさん@お腹いっぱい。:2010/07/15(木) 23:57:29 ID:dcDIdvOR0
>>898
それそのまま使ったらちゃんと動いたぞ。
900名無しさん@お腹いっぱい。:2010/07/16(金) 00:09:47 ID:aBevWK6FP
mspaintのことならマウスカーソルの+マークの中心の0x00000が取得されちゃってるんじゃ?
901名無しさん@お腹いっぱい。:2010/07/16(金) 00:13:07 ID:33Ci8gFr0
>>899
まじっすか。じゃぁいままで他に追加してるcfgの内容がわるいのだろうか。
>>900
メモ帳で試してみましたが、それでも無理でした。んーなんだろ
ずっと同じ文字列
902名無しさん@お腹いっぱい。:2010/07/16(金) 00:17:30 ID:33Ci8gFr0
autohotkey.iniにF12のスクリプトだけ書いて
ほか全部削除したが、ずっと同じ文字列しか
メッセージボックスにでない。おわったか
903名無しさん@お腹いっぱい。:2010/07/16(金) 00:24:43 ID:wM1EgFgm0
>>902
ちなみにどんな数値が取得される?
上で貼りつけたのがコピペなら必要ないが、一応スペルミスも確認。
あとは…各行の間にSleep挟んでみるとか?
904名無しさん@お腹いっぱい。:2010/07/16(金) 00:24:54 ID:PJsMUgo90
他にAutohotkeyスクリプトが動いているとか?
タスクマネージャーの「プロセス」でAutohotkey.exeが複数実行されているならあやしい
905名無しさん@お腹いっぱい。:2010/07/16(金) 00:28:42 ID:33Ci8gFr0
898デス。レスしていただいた方々まことに申し訳ないです・・・。
アホすぎました。コピペしてつもりでしたが、
それからいろいろ文字をいじくったために、その余波で中身の変数の文字が微妙に違っていました。
前後でちゃんとおなじ変数の文字にしたら解決しました。
おさわがせしました。

906名無しさん@お腹いっぱい。:2010/07/16(金) 00:35:24 ID:wM1EgFgm0
>>905
まぁよくある失敗だなw
同じ数字ならMouseGetPosの変数をスペルミスしてるのかもとは思った。
907名無しさん@お腹いっぱい。:2010/07/16(金) 15:01:42 ID:aBevWK6FP
Loop, % count
Menu, MyMenu, Add, ほげほげ〜 (&%A_Index%), HogeLabel
Menu, MyMenu, Show

HogeLabel:
Msgbox, %A_ThisMenuItemPos%ほげ〜
908名無しさん@お腹いっぱい。:2010/07/16(金) 15:05:46 ID:aBevWK6FP
あ、書き込んじった
こういう動的にメニューを生成するスクリプトで、アクセスキーを割り当てたいんですが、
1~9までは数字で、10~はa,b,c,d,e....っていう感じで割り当てるにはどうすればいいでしょうか?

count := 10
Loop, % count
Menu, MyMenu, Add, ほげほげ〜`t&%A_Index%, HogeLabel
Menu, MyMenu, Show
return

HogeLabel:
Msgbox, %A_ThisMenuItemPos%ほげ〜
909名無しさん@お腹いっぱい。:2010/07/16(金) 15:54:45 ID:mQGY0ums0
>>908
こんな感じでどう?

Loop, 35 {
String := "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
StringMid, AccessKey, String, %A_Index%, 1
MsgBox, % AccessKey
}
910名無しさん@お腹いっぱい。:2010/07/16(金) 16:10:13 ID:aBevWK6FP
>>909
おーなるほど!
ありがとうございます
911名無しさん@お腹いっぱい。:2010/07/16(金) 19:50:06 ID:PVn0HxJY0
Lexikos:
PostPosted: Fri Jul 16, 2010 10:24 am
> Regardless of any arguments for or against either syntax, I won't be abandoning command syntax.
> Changing some commands to be functions or allowing either syntax to be used are possibilities.
> Allowing %obj.var% would essentially require the overall arg to be evaluated as an expression,
> but is also a possibility.
> Note that expressions are generally less efficient (in terms of CPU cycles) than traditional syntax
> for simple cases - i.e. % "text" . var . "text" is much less efficient than text%var%text.

ふむ。旧文法をばっさりとはやらんつもりのようだ。
912名無しさん@お腹いっぱい。:2010/07/16(金) 19:59:03 ID:uAf5YwkP0
まずはStrLen()とかInStr()みたいな関数はもっと増えてもいい
913名無しさん@お腹いっぱい。:2010/07/17(土) 10:00:05 ID:vlNXVvG30
Win7のExplorerで、カーソルやマウス左クリックで選択したファイル名を
抜き出す方法ってありますか?

XPだと
controlget filename, list, selected col1, SysListView321, A

で取れましたが、Win7であれこれ考えてみましたが、うまく取れません。
クリップボードを経由する以外で、なにかよい取得方法はないでしょうか。
914名無しさん@お腹いっぱい。:2010/07/17(土) 10:22:15 ID:ytilx9xW0
AHK 64(>>741)使って、かつCOM使えばなんとかなるんでわないかと
915名無しさん@お腹いっぱい。:2010/07/17(土) 14:01:55 ID:NkrbfhEF0
>>913
Win7はたしかCtrl+Cでファイルをコピーしたらクリップボードにフルパスが入るからSplitPathで抜き出せばいいかも
916名無しさん@お腹いっぱい。:2010/07/17(土) 22:34:58 ID:rG1nfbLo0
917名無しさん@お腹いっぱい。:2010/07/17(土) 23:06:50 ID:ytilx9xW0
AHKLにインストーラパッケージきたね。

6/12に落としたバイナリと、現在ZIPで配布されているバイナリと、
インストーラ版のバイナリのハッシュが全部違う
918名無しさん@お腹いっぱい。:2010/07/18(日) 00:34:37 ID:NTAcOVXL0
つまり・・・どういうことだってばよ?
919名無しさん@お腹いっぱい。:2010/07/18(日) 18:22:35 ID:t/j7Zo9C0
公式AHKと同じファイル構成になった
ヘルプがAHKL対応になった
920名無しさん@お腹いっぱい。:2010/07/18(日) 21:58:17 ID:vWc8VIgQ0
http://www.scythe.co.jp/input-device/rakuraku2.html
このキーボード買ったんだけど、
Numキー部分の 「000」 とか 「,」 を無効化または他のキーに割り当てたい。

「000」キーは 0のdown upが3回飛んでくる。
「,」キーは、半角,のdown upの後にF10のdown upが2回飛んでくる。

詳しい人教えて
921名無しさん@お腹いっぱい。:2010/07/18(日) 23:15:45 ID:FcKMxSiJ0
0が3回きたことを検出して、別の処理をさせればよい
922名無しさん@お腹いっぱい。:2010/07/18(日) 23:53:35 ID:NOJPNvHm0
>>920
ホットストリング使ってみたらいかがですか?
923名無しさん@お腹いっぱい。:2010/07/19(月) 02:27:16 ID:YN4pdfI20
>>921-922
普通に0を3回連打したら、誤動作しない?
書き方が全然わからん

~0::
0::
0::
return

`,::
KeyWait,F10
KeyWait,F10
return
924名無しさん@お腹いっぱい。:2010/07/19(月) 02:55:54 ID:9iIcd1Bn0
>>923
000ののほうはこんな感じで
:*:000::
MsgBox
Return
925名無しさん@お腹いっぱい。:2010/07/19(月) 19:02:20 ID:/1EVW2Va0
AutoHotKeyの作業ディレクトリを実行するディレクトリに簡単に設定して起動する最も簡単な方法はないでしょうか?

今は、Runコマンドで

Run, \software\mother-fucker\fuck.exe, \software\mother-fucker\

としていますが、冗長性が高く感じます。
926名無しさん@お腹いっぱい。:2010/07/19(月) 19:20:39 ID:gwCgkY3B0
Run, fuck.exe, \software\mother-fucker\

でいけると思うけど
927名無しさん@お腹いっぱい。:2010/07/19(月) 23:09:13 ID:/1EVW2Va0
>>926
あ、なるほど


パス渡したら、そのexeのあるディレクトリを作業ディレクトリとして実行みたいなコマンドやオプションあるかな、と思っていたんですが、
特にないのかな
928名無しさん@お腹いっぱい。:2010/07/19(月) 23:19:24 ID:G5mqnJSSP
質問があります。
常駐アプリを起動して、起動するまで待ってホットキーを送ることはできないでしょうか?
ウインドウが出るアプリならWinWaitあたりで待てばよいと思うのですが、
目に見えるウインドウがでないアプリの場合どうしたものかと
929名無しさん@お腹いっぱい。:2010/07/19(月) 23:38:32 ID:M+ZXAsAA0
930名無しさん@お腹いっぱい。:2010/07/19(月) 23:40:26 ID:f9IPAD0D0
案1) Sleep で適当に待ってみる
案2) 不可視ウィンドウを検索してみると結構あるんで(トレイアプリとか)、
  そのウィンドウを DetectHiddenWindows, On してから WinWait してみる。
931名無しさん@お腹いっぱい。:2010/07/20(火) 00:01:25 ID:YN4pdfI20
>>924
0を3回連打したらMsgBox出てもうた
932名無しさん@お腹いっぱい。:2010/07/20(火) 01:15:10 ID:2ErPDfEs0
>>931
んじゃこれでどう?
このままだと手動連打でも反応するけど、T0.1をT0.05に変更すると手動ではまず反応しない
調度良い時間に調整してみてね
ちょこっといじれば「,」キーも出来るんじゃないかな
0::
Count=0
Loop,2
{
KeyWait,0,T0.1
Count+=ErrorLevel
KeyWait,0,T0.1 D
Count+=ErrorLevel
}
If Count=0
MsgBox
Return
933名無しさん@お腹いっぱい。:2010/07/20(火) 08:12:29 ID:j1lGbx/k0
#IfWinExist, でウィンドウタイトルと ahk_class を両方指定する方法はないですか?
どちらか一方だけだと、それぞれ重複するウィンドウがあるため誤判定してしまうんです。
934名無しさん@お腹いっぱい。:2010/07/20(火) 08:24:48 ID:HLryUSW/0
#IfWInExist, タイトル ahk_class クラス
935名無しさん@お腹いっぱい。:2010/07/21(水) 19:43:40 ID:alScFH9M0
「お忍びリネーム」のパクり。リネーム中のF2連打で選択範囲変更。本家及びL(A&U)onXP32bitにて動作確認。

#IfWinActive,, FolderView
$F2::
 ControlGetFocus, classNN, A
 If (classNN = "SysListView321") {
  Send, {F2}
  Return
 } Else If (classNN != "Edit2")
  Return
 ControlGetText, itemName, %classNN%
 length := StrLen(itemName), lastDotPos := InStr(itemName, ".", 0, 0) - 1
 VarSetCapacity(buff, 8, 0x00)
 SendMessage, 0x00B0, &buff, &buff+4, %classNN%, A
 start := NumGet(buff, 0, "Int"), end := NumGet(buff, 4, "Int")
 Goto, % (start == 0 && end == length) ? "Explorer_Select_Name" ; 全選択時
  : (start == 0 && end == lastDotPos) ? "Explorer_Select_Ext" ; ファイル名選択時
  : (start == lastDotPos+1 && end == length) ? "Explorer_Select_None" ; 拡張子選択時
  : "Explorer_Select_All"
Explorer_Select_All:
 SendMessage, 0x00B1, 0, -1, Edit2, A
 Return
Explorer_Select_None:
 SendMessage, 0x00B1, -1, 0, Edit2, A
 Return
Explorer_Select_Name:
 SendMessage, 0x00B1, 0, lastDotPos, Edit2, A
 Return
Explorer_Select_Ext:
 SendMessage, 0x00B1, lastDotPos+1, length, Edit2, A
 Return
936名無しさん@お腹いっぱい。:2010/07/21(水) 21:33:01 ID:EfNOhxdE0
3回くらい似たようなのを見た
937名無しさん@お腹いっぱい。:2010/07/22(木) 01:44:56 ID:lvLuqxd20
正規表現でダブルクォーテーションを指定する方法はありますか?
RegExReplaceで"を置換したいのですが\"では動かなくて
938名無しさん@お腹いっぱい。:2010/07/22(木) 02:30:16 ID:P5dbjuy20
str := """hoge"""
MsgBox, % RegExReplace(str, "^""|""$")
939937:2010/07/22(木) 22:17:27 ID:bBJpxwFN0
>>938
ありがとうございます。
""でよかったとは
940名無しさん@お腹いっぱい。:2010/07/23(金) 13:37:16 ID:CTxek1iA0
AutoHotkeyで作ったGUIウィンドウが非アクティブになったらウィンドウを隠す、という処理はどうすればいいでしょうか
GUIからMsgBoxなど表示しても非アクティブになってしまう気がします
941名無しさん@お腹いっぱい。:2010/07/23(金) 13:44:56 ID:D+pl9oox0
原始的だけど、settimerで0.1秒ごとにAHK_GUIウインドウを監視してみたら?
942名無しさん@お腹いっぱい。:2010/07/23(金) 14:48:33 ID:ryj0C7kb0
Menu, Tray, Add, ShowGui
OnMessage(0x0006, "WM_ACTIVATE")

ShowGui:
Gui, Show, w200 h200, Test
Return

WM_ACTIVATE(wParam, lParam) {
 If (A_Gui == 1 && wParam == 0)
  Gui, %A_Gui%:Hide
}
943名無しさん@お腹いっぱい。:2010/07/23(金) 19:03:43 ID:CTxek1iA0
>>941-942
ありがとうございます!
2通りあるんですね、どちらも試してみます
944名無しさん@お腹いっぱい。:2010/07/26(月) 00:23:08 ID:zdZimPF60
今エクスプローラーの表示切替(アイコン表示とか詳細表示とか)をPostMassege

つかってやろうとしてるんだけどうまくいかないのです・・・。

ttp://d.hatena.ne.jp/firedfly/20091231

を参考にやろうとしてるんだけども・・・。Windows7だからいけないのでしょーか。

誰かできてる人いたらちょっと教えていただけませんんか?
945名無しさん@お腹いっぱい。:2010/07/26(月) 19:06:36 ID:aOdLVJ090
AHKの内部でCPUの種類を取得して、能力別に処理を分けたいのですが、質問です。

マイコンピュータで右クリックして、システムのプロパティに表示される、
CPUの型番を、システムのプロパティを開かないで、レジストリや
コマンドラインツール等で、取得する方法ってありますか?
946名無しさん@お腹いっぱい。:2010/07/26(月) 19:12:07 ID:EqIp33HZ0
systeminfo
947名無しさん@お腹いっぱい。:2010/07/26(月) 19:21:30 ID:aOdLVJ090
>>946
ありがとうございます。試してみたのですが、

>プロセッサ,1 プロセッサインストール済みです。[01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2833 Mhz

ここまでは出ました。

システムのプロパティのほうで表示されている、肝心の「Core(TM)2 Quad CPU Q9550@2.83GHz」
という文字が、含まれていないようです。
948名無しさん@お腹いっぱい。:2010/07/26(月) 19:34:37 ID:aOdLVJ090
自己レスです。
regreadコマンドで

regread,value,HKEY_LOCAL_MACHINE,HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString

ここから情報を抜き取ると、取得できました。ありがとうございました。
949名無しさん@お腹いっぱい。:2010/07/26(月) 19:41:29 ID:EqIp33HZ0
950名無しさん@お腹いっぱい。:2010/07/27(火) 16:43:12 ID:3vUY/ee00
動画プレイヤVLCの再生画面から、現在の再生位置(再生時間の時分秒)を
取得する方法って、ないでしょうか。

http://www.tomacerogranada.com/osl/imagenes%20programas/vlc.jpg

この画像でたとえると、左下の「0:00:37」を取得したいです

WindowSpyや、StatusBarGetText、ControlGetで、取得できそうな方法を
ひととおり試みてみましたが、取れそうにありません。

こういう場合、どのように対処すればよいでしょうかね。
951名無しさん@お腹いっぱい。:2010/07/27(火) 16:49:57 ID:mLN6xfde0
VLCにはWebインターフェイスとかあるからそっちで何とかすれば
952名無しさん@お腹いっぱい。:2010/07/27(火) 18:41:17 ID:hc2rEjdm0
VLCを起動して試したけど、ControlGetTextで取得できたよ
953名無しさん@お腹いっぱい。:2010/07/27(火) 18:54:55 ID:3vUY/ee00
>>951
なるほど、その手もありますね。参考になりました。

>>952
あらためて試してみましたが、どうにも出てきません。
こちらで検証しているVLCのVerは1.0.5です。

ControlListで一覧を取得し、

> QWidget1
> QWidget2
> QWidget3
> VLC DirectX1
> VLC DirectX video1
> QWidget4
> QWidget5
> QWidget6
> QWidget7

が出てきて、これを全部取得してみました。テキストが出てきたのは

> ControlGetText,var,VLC DirectX1,A

var=VLC (Direct3D output)

これだけで、ほかはテキストが出てきませんでした。
すみませんが、どのように取得されましたでしょうか。
954名無しさん@お腹いっぱい。:2010/07/27(火) 19:40:27 ID:hc2rEjdm0
ControlGetTextで取得できたVLCのVerは0.8.6です。
Ver1.1.1を試してみたけど取得出来なかった。

UWSCのPOSACCだと取得できるので何らかの方法はあるんだろうけど、詳しくないので解らない。
955名無しさん@お腹いっぱい。:2010/07/27(火) 21:02:04 ID:57Vni8pg0
956名無しさん@お腹いっぱい。:2010/07/27(火) 21:16:17 ID:3vUY/ee00
>>954
なるほどthxです。

>>955
それもダメでした。VLCのVerが1以上になって、仕様が変わったせい?
957名無しさん@お腹いっぱい。:2010/07/27(火) 21:37:46 ID:57Vni8pg0
1.1.1で取れたけど・・・。
おやっ、一度フルスクリーンして解除すると取れる。不思議!
958名無しさん@お腹いっぱい。:2010/07/27(火) 22:18:49 ID:3vUY/ee00
>>957
何度も申し訳ないです。フォーラムにあったコードを汎用にしてまとめてみました。

F1::
ControlGetText, Q, QWidget,VLC
ControlGetText, Q6, QWidget6,VLC
WinGetText, wText,VLC
msg=
(
Q=%Q%
Q6=%Q6%
W=%wText%
)
msgbox,%msg%
clipboard=%msg%
return

これで、VLC1.1.1の上でF1を押して実行すると、フルスク後、通常ともに
以下のようになってしまいます。

Q=
Q6=
W=VLC (Direct3D output)
qt_rubberband

このコードで取得できますでしょうか。
959名無しさん@お腹いっぱい。:2010/07/27(火) 22:34:17 ID:unQkAdh6P
テキストが取得できなかったりするのは、クロスプラットフォームのソフトではよくあること。
VLCは今もインターフェイスが糞だから、何とかして対応させてもまたすぐ仕様変更されるだろう。
さっさと諦めるのが吉。
とっくにAHKで効率化して節約できる以上の時間を無駄にしてるはずだ。
960名無しさん@お腹いっぱい。:2010/07/27(火) 23:08:16 ID:57Vni8pg0
まぁ、仰るとおりですな。
何だか調べたらACC(IAccessibleインターフェイス)をごにょごにょすると、
ユーザ補助のスクリーン読み上げの機構で読み取りが可能になるとかならないとか、、
出来たとしても、元アプリ自体のコンパイル時になにかしとかなきゃ駄目だとか何とか、

この辺はFireFoxなどでもそうらしい。
経験上、ウィンドウの中身が、
FXWindow(FoxToolKit), QWidget(Qt)、MozillaWindowClass(Mozilla)、SWT_Window(JavaSWT)
で満たされていたらお手上げにしてしまっている。
961名無しさん@お腹いっぱい。:2010/07/28(水) 11:12:01 ID:smBUAUOw0
FirefoxやOpera等の独自ウィンドウタイプはAU3_Spy.exeでテキスト取得が出来ない部分が多いけど、
http://www.autohotkey.com/forum/topic24234.html
の ACC.ahk と COM.ahk をLibフォルダに入れて上記ページのサンプルを試したら取得できた。
VLCの「再生時間/総時間」取得も出来た。
一覧(ツリー型)の文字列取得についてはサンプルを試した限りでは出来ないっぽい(手を加えればいける??)
962名無しさん@お腹いっぱい。:2010/07/28(水) 18:09:09 ID:aYo58LNn0
http://ahk.xrea.jp/
ちょ ま えっ?
963名無しさん@お腹いっぱい。:2010/07/28(水) 18:12:36 ID:6foHEMtD0
ミラー消えたのか
964名無しさん@お腹いっぱい。:2010/07/28(水) 18:17:32 ID:smBUAUOw0
2週間くらい前からサーバー不調っぽい
http://sb.xrea.com/forumdisplay.php?f=8
965名無しさん@お腹いっぱい。:2010/07/28(水) 19:13:33 ID:/F9Hg6o30
まあxreaは基本クソだからな
よくあること
966名無しさん@お腹いっぱい。:2010/07/28(水) 21:53:05 ID:UekdIINiP
>>962の中の人ですが、使用中のサーバアカウントに問題が出てしまい、
短縮URLが使えなくなりました。
別のサーバに移動させましたので、今後はこちらでどうぞ。内容は同じです。

http://hdd.s300.xrea.com/ahk/

次スレで、テンプレに入れる場合は、こちらのURLでお願いします。
967名無しさん@お腹いっぱい。:2010/07/28(水) 23:59:37 ID:sORlv1O8P
Google siteの方だけでいいんじゃないか
公式と過去スレと派生版一覧に加えて日本語サイトを2つを1レスに入れるときつい

■公式(英語)
http://www.autohotkey.com/

■過去スレ
01 http://pc7.2ch.net/test/read.cgi/software/1098531338/
02 http://pc7.2ch.net/test/read.cgi/software/1129836713/
03 http://pc11.2ch.net/test/read.cgi/software/1157043396/
04 http://pc11.2ch.net/test/read.cgi/software/1184556627/
05 http://pc11.2ch.net/test/read.cgi/software/1201502896/
06 http://pc11.2ch.net/test/read.cgi/software/1219130051/
07 http://pc12.2ch.net/test/read.cgi/software/1230694774/
08 http://pc12.2ch.net/test/read.cgi/software/1243005818/
09 http://pc12.2ch.net/test/read.cgi/software/1253888736/
10 http://pc12.2ch.net/test/read.cgi/software/1265518996/

■派生版
AutoHotkey_L (内部Unicode、オブジェクト指向などの言語仕様拡張)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

ironahk (.NET製、クロスプラットフォーム)
http://code.google.com/p/ironahk/

AutoHotkey64 (ネイティブ64ビット版)
http://www.autohotkey.com/forum/topic58237.html

AutoHotkey.dll (真のマルチスレッド対応など)
http://www.autohotkey.net/~tinku99/ahkdll/
968名無しさん@お腹いっぱい。:2010/07/29(木) 00:03:17 ID:fDQToOub0
んなこと言ってたら過去スレ増えるたびに削っていかないとだめになるだろ
969名無しさん@お腹いっぱい。:2010/07/29(木) 00:05:48 ID:yDtGcY/Q0
レス2つに分けてもいいんじゃない。
テキストエディタとヘルプを連携させたい人は
ヘルプファイル(chm)の方がいいだろうからこれも入れていいんちゃう。

Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
970名無しさん@お腹いっぱい。:2010/07/29(木) 00:20:35 ID:I/c5jE+BP
64とかDLLとかの派生版はどうせそのうちLに吸収されるだろうから要らないか。
IronAHKは、Linuxとかで十分に動作するなら入れて欲しいけど、誰か試してみた?
971名無しさん@お腹いっぱい。:2010/07/29(木) 00:41:45 ID:8B5v2BZ00
おおなんだか凄いことになってるなあ
972名無しさん@お腹いっぱい。:2010/07/29(木) 01:35:23 ID:KqjQqE040
初心者が迂闊に手を出すと、互換性の問題などで無駄につまずく恐れもあるし、
キーマップとか自動操作などの基本機能を使うだけなら本家でも十分だし、
本家標準機能の簡単な組み合わせだけでは実現できない複雑なプログラムを作るなら、
MSVCやPerl/Ruby/Pythonなどのまともなプログラミング言語を使った方がいいから、
AutoHotkey_Lを含め、派生版は>>1には入れない方がいいと思うな。
973名無しさん@お腹いっぱい。:2010/07/29(木) 08:04:12 ID:HfMAzvoNi
言いたいことは分かるけど
・ダメ文字の問題がないこ
・ファイルエンコーディング
・配列
あたりはかなりの恩恵があるけどなぁ。
インストーラも整備されたしヘルプもあるし問題は少ないと思う。

Unicode版は少なからずのユーザが居ると思うよ。
ってかフォーラム見ると _L が開発の土台に
なりつつあるのが分かる
974名無しさん@お腹いっぱい。:2010/07/29(木) 10:50:46 ID:I/c5jE+BP
そういう機能を必要とするのは、何でもAHKで済ませたがるマニアだけだから、>>2以降で紹介すれば十分って事だろ。
行数に余裕が出来たら、「派生版では修正しないと使えないスクリプトもあります」みたいな注意書きも欲しいな。
975名無しさん@お腹いっぱい。:2010/07/29(木) 12:02:26 ID:abEnDZWx0
AHK_Lは、日本語のファイル処理や、Unicodeの処理とか便利そうだけど、
本家で作られたスクリプトが _L で動かなかった事例って、どんなものがあるの?

いま本家を使ってるけど、日本語ファイル名をsplitpathしたあとに\の位置を
誤検出しているかどうかを調べるためifexistで確認して、あるはずのファイルがなければ
例外処理を入れてる。

こういうスクリプトを_Lで動かすと、例外処理の前段階でそのまま処理できちゃうから、
例外処理を取り除かないと不具合が出る・・・ってことなのかな。
976名無しさん@お腹いっぱい。:2010/07/29(木) 12:16:06 ID:W/I2yND40
逆に本家AHKを使うメリットってないと思ってる
977名無しさん@お腹いっぱい。:2010/07/29(木) 12:19:10 ID:54fE0l3V0
せやな
978名無しさん@お腹いっぱい。:2010/07/29(木) 12:30:51 ID:I/c5jE+BP
ファイル処理とか文字列処理なんてライトユーザーには必要ないだろ。
特に必要もないのに派生版に手を出した奴が「MouseGesture.ahkの表示がおかしい」
とか、使っているバージョンも書かずに質問してきたらウザいから、
>>2以降に引っ込めといた方がいいんじゃないかってこと。
派生版を使うなってわけじゃない。
979名無しさん@お腹いっぱい。:2010/07/29(木) 13:06:53 ID:9gWJAPxv0
AHKL(unicode)でunzipする処理をしたいです
7zのような外部アプリを使わずにOSの機能だけを使用して展開してみようと思いました

ですが、COM_L を使用してunzipしようとすると、エラーが出ます。ソースはこれです

SetWorkingDir, %A_ScriptDir%
; http://www.autohotkey.com/forum/topic22923.html
; #include COM.ahk

; "AutoHotkey_Lw.zip" を "hoge" に展開する
Unz("AutoHotkey_Lw.zip", "hoge")
return

; http://www.autohotkey.com/forum/post-335359.html#335359
Unz(sZip, sUnz)
{
psh := COM_CreateObject("Shell.Application")
psh.Namespace( sUnz ).CopyHere( psh.Namespace( sZip ).items, 4|16 )
return
}

#includeでCOM.ahkを読み取れないと言われたので、
COM.ahk の中身を全てコピペで取り込み再度実行したら↓のエラーが出ました

COM Error Notification
Function Name: "items"
ERROR: No COM Dispatch Object!
   ()

Will Continue?

どこを修正すればよいのでしょうか
980名無しさん@お腹いっぱい。:2010/07/29(木) 13:10:18 ID:qTX6XCs+i
混乱の元だというのはわかるが、メリットの方が大きいし、
ライブラリ側の対応もかなり進んでるよ。
x64対応も進んでるし、本家のままだとまともに動かないコマンドもあるし
じり貧になるのは必至かと。
本家+旧流行ページの遺産で細々とつないでいきたい人は
別にそれでいいけど、良いものを紹介しないでどうすんのさ。

>>975
ダメ文字用の処理は不要なんで意図しない結果になる。
それよりも文字列処理かね。
「ABCあいう」が本家(ANSI版でも)だと長さが9、Unicode版が6。
Loop, Parse(区切り文字なし)の回る回数も同じ。
あとはDLL呼び出しあたりなんで、分かってる人用。
981名無しさん@お腹いっぱい。:2010/07/29(木) 13:18:08 ID:KzCbMinB0
一番いらないのは過去スレのURLな気がするw
過去スレに有用な情報があるのは確かだけど
dat落ちしたスレはどうせどっかの保管サイトで拾ってくることになるし
過去スレ読んでまで調べようとするやつならその辺自分でできるだろうし
982名無しさん@お腹いっぱい。:2010/07/29(木) 13:18:52 ID:Ov0Nj7+10
2ch全否定の巻
983名無しさん@お腹いっぱい。:2010/07/29(木) 13:25:00 ID:J8sl7ibc0
>>966
ありがとう、いつもお世話になってます
984名無しさん@お腹いっぱい。:2010/07/29(木) 13:28:59 ID:KzCbMinB0
>>982
全否定どころか、有用だと思いっきり肯定してるんだが何言ってんの?
どうせそのままのurlじゃ読めずにunkarやらミラー変換機やらで探すことになるのに
わざわざ>>1ででかいスペース使って載せる意味はないんじゃないかって言ってんだよ
985名無しさん@お腹いっぱい。:2010/07/29(木) 13:35:03 ID:I/c5jE+BP
じゃあいっそこんな感じでいいか。

---------------
AutoHotkeyスレッドpart11
---------------
■公式
http://www.autohotkey.com/

■関連サイト、FAQなど
http://www.google.com/webhp?hl=ja

※質問をする時は、使用しているOSやAutoHotkeyのバージョンなどを詳しく書くこと
986名無しさん@お腹いっぱい。:2010/07/29(木) 22:28:28 ID:fFkUfo480
スレ立て失敗。Part6〜10まで俺が建てたんでたまには他の人が建ててくれw
987名無しさん@お腹いっぱい。:2010/07/29(木) 22:32:07 ID:DRC0mqj00
誰か宣言してからのほうが良いよね > スレ立て
988名無しさん@お腹いっぱい。:2010/07/29(木) 23:06:56 ID:PDfpHOOB0
>>984
1に書く必要は無いが2以降には必要だろ。
URL無いと探すのも面倒だし、Janeならコマンド経由で即過去ログ取得出来る。
989名無しさん@お腹いっぱい。:2010/07/29(木) 23:58:42 ID:I/c5jE+BP
1000までに立たなかったら、↓のスレ辺りに避難するか
キーカスタマイズソフト 2
http://pc12.2ch.net/test/read.cgi/software/1239109333/
990名無しさん@お腹いっぱい。:2010/07/30(金) 01:31:02 ID:pfONpPa20
>>980
紹介しない、ではなく >2以降に載せるって言ってるんだと思うけど
ごちゃごちゃするから >1はとりあえず本家のみで、ってことでしょ

>>981
誰もがみんな過去ログ読めないわけでもないし
●持ちとしては過去スレURLの完全撤廃は嫌すぎる
単に 2以降に移動するって話なら特に異論はないけど
991名無しさん@お腹いっぱい。:2010/07/30(金) 08:47:23 ID:E3vpMotR0
大抵の人は専ブラでスレを開いた時に>>1も表示されるようにしてると思うけど、
これが>>2以降になると、いちいち「全レス表示」みたいなのを選ばないとダメなんだよなあ
992名無しさん@お腹いっぱい。:2010/07/30(金) 10:56:14 ID:elYoeAxq0
前スレを>>1に過去スレ一覧を>>2以降に
993名無しさん@お腹いっぱい。:2010/07/30(金) 17:58:59 ID:WYf6jtVeP
次スレが立つまで余計な書き込みは控えた方がいいかどうか、多数決で決めよう
994名無しさん@お腹いっぱい。:2010/07/30(金) 18:29:02 ID:9VNdm34c0
やってみる。
995名無しさん@お腹いっぱい。:2010/07/30(金) 18:32:14 ID:9VNdm34c0
とりあえずでけた。
FAQ等は適当に埋めてくれ。

AutoHotkey スレッド part11
http://pc12.2ch.net/test/read.cgi/software/1280482227/
996名無しさん@お腹いっぱい。:2010/07/30(金) 18:55:46 ID:JeFr0hn90
■ スクリプト仕様
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
  複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
  が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。

Q2:配列変数やハッシュ(仮想配列)は使ええないの?
A2:「式」を使うと配列やハッシュのように変数を参照できる。
  Loop, 10
    value_%A_Index% := A_Index**2

Q3:テキストエディタでキーワードの色づけなどをしたいんだけど。
A3:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり

Q4:GUI作るのめんどくせ〜〜
A4:公式( ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。

Q5:AHKってマルチスレッドじゃないの?
  タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A5:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
  MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド   →→→→→→……………………………………→→→→
>                  ★割込                ↑再開
> 割り込みスレ          →→→→…………→→→→→→END
>                        ◆割込 ↑再開
> 更に割り込み                →→→END

Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。
997名無しさん@お腹いっぱい。:2010/07/30(金) 19:00:14 ID:JeFr0hn90
連投規制でテンプレ>>8までしか貼れなかった
>>9-12 をよろしくー
998名無しさん@お腹いっぱい。:2010/07/30(金) 20:08:49 ID:cNAL05mC0
Z
999名無しさん@お腹いっぱい。:2010/07/30(金) 20:21:49 ID:cNAL05mC0
A
1000名無しさん@お腹いっぱい。:2010/07/30(金) 20:28:52 ID:cNAL05mC0
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。