1read 100read
2012年5月ソフトウェア207: AutoHotkey スレッド part14 (195) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【RAMディスク】FireFox高速化専用スレ【chrome超え】 (684)
リネームツールをまたーり語るスレ 005 (361)
VMwareESX/ESXi専用スレPart9 (165)
TCPMP CorePlayer BetaPlayer 04 (378)
Lunascape6 総合スレッド (811)
[TEST] 書きこみテスト 専用スレッド 44 [確認] (227)

AutoHotkey スレッド part14


1 :12/04/02 〜 最終レス :12/05/30
■配布元
http://www.autohotkey.com/
本家Autohotkeyは事実上開発停止で、派生のAutoHotkey_L(AHKL)が主流。
新規利用者には日本語の扱いで不具合の無いAHKLのユニコード版の利用を推奨。
■日本語解説等
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
簡易スクリプト掲示板 ※31日で削除されます。
http://www.autohotkey.net/paste/
■派生版
IronAhk (.NET製、クロスプラットフォーム)
http://www.ironahk.net/
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.net/~tinku99/ahkdll/
■ 関連スレ
AutoIt
http://pc12.2ch.net/test/read.cgi/software/1277173327/
テンプレ>>2-10

2 :
■重要事項
オリジナルである、本家 "AutoHotKey" の開発は終了している。
現在は、そこからフォークした "AutoHotkey_L" が主流。
スクリプトについては、それが本家AHKで動くものであるか、Lであるのかに注意。
AutoHotkey_L (内部Unicode、64bitバイナリ、オブジェクト指向、COM対応など)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
オリジナルのAHKとの変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
 →http://www.autohotkey.net/~Lexikos/AutoHotkey_L/docs/
 →http://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/index
※ 新規利用者にはAHKLを推奨するが、移行に際してすくなからずの改修が必要となる。
特に、旧流行らせるページの配布物(MouseGesture等)の多くはそのままでは動作しない。
安定利用できている環境を崩して移行するかどうかは各人の判断による。
MouseGestureについては有志の方がAHKL対応版を配布しているのでそれを利用するのもありです。
http://code.google.com/p/mousegesturel/
■質問に際して
OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
2chの仕様の関係で、このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
レスをコピペして利用する場合は行頭の全角スペースをタブ等に置換してから利用すること。

3 :
■過去スレ
@http://pc7.2ch.net/test/read.cgi/software/1098531338/ Attp://pc7.2ch.net/test/read.cgi/software/1129836713/
Bttp://pc11.2ch.net/test/read.cgi/software/1157043396/ Cttp://pc11.2ch.net/test/read.cgi/software/1184556627/
Dttp://pc11.2ch.net/test/read.cgi/software/1201502896/ Ettp://pc11.2ch.net/test/read.cgi/software/1219130051/
Fttp://pc12.2ch.net/test/read.cgi/software/1230694774/ Gttp://pc12.2ch.net/test/read.cgi/software/1243005818/
Http://pc12.2ch.net/test/read.cgi/software/1253888736/ Ittp://pc12.2ch.net/test/read.cgi/software/1265518996/
Jttp://hibari.2ch.net/test/read.cgi/software/1280482227/ Kttp://hibari.2ch.net/test/read.cgi/software/1296446228/
Lttp://anago.2ch.net/test/read.cgi/software/1317156599/
以下FAQ等
■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」で保存する。(AHKLの場合)
Q2:初めて使うけどどれを使えばいいの?
A2:AHKLのユニコード版を推奨。
  旧流行らせるページの配布物をそのまま使う場合は本家をそのまま利用する事。
  64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。

4 :
■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
  OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理です。
  レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
 
 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
  「上のスキャンコードでキー変更する」をクリックすると「〜 0x0064 をどのキーに変更しますか?」
  というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
  これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
   ^1::Send, {Esc}
Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
 例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
   sc07B & I::Send, {Blind}{Up}
   sc07B & K::Send, {Blind}{Down}
   sc07B & J::Send, {Blind}{Left}
   sc07B & L::Send, {Blind}{Right}

5 :
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
  #UseHookで全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
   × Joy1::Esc
   ○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。

6 :
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
 ○AHKが原因の場合
  AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
  一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
  しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
  物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
   例) ^W::Send, {w 30}
  これを回避するためには、以下の方法をとればよい:
   ・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
   ・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
   ・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
     #HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
  なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
  発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
 ○AHK以外が原因の場合:
  環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
  ・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
  ・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pub/MyScript/ の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

7 :
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
  複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
  が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q3:GUI作るのめんどくせ〜〜
A3:公式( ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q4:AHKってマルチスレッドじゃないの?
  タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
 MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
  > 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
  > → 実行中、 …:割り込み終了待ち
  > 元スレッド   →→→→→→……………………………………→→→→
  >                  ★割込                ↑再開
  > 割り込みスレ          →→→→…………→→→→→→END
  >                        ◆割込 ↑再開
  > 更に割り込み                →→→END
 ※ AutoHotkey_H(AutoHotkey.dll)を利用すると真のマルチスレッドが利用可。

8 :
Q5:AHK、AHKLx86、AHKLx64の共存は出来る?
A5:それぞれを違うフォルダ(ディレクトリ)にインストールすれば共存できます。
  但し、インストーラーを使って最後にインストールしたAutohotkey(Normal or x86 or x64)
  に対してahkファイルの関連付けが行われますので、レジストリエディタ(Regedit.exe)や
  FileTypesMan等のツールを使って関連付を変更してください。
  ahkファイルをAHK Normal、ahlファイルをAHKLx86、ah6ファイルをAHKLx64といったように
  別々の拡張子に関連付けが可能です。
  それぞれに関連付けしたファイルに対してドラッグアンドドロップを有効にするにはレジストリの
  [HKEY_CLASSES_ROOT\ファイルタイプの名前\ShellEx\DropHandler]
  の (規定) のデータを {86C86720-42A0-1069-A2E8-08002B30309D} にする。

9 :
前スレくらい>>1に入れてくれ

10 :
>>9
入れるつもりが忘れてました。
次スレ建てる人は前スレを>>1へ追加をお願いします。

11 :
● 分からない理由 ●
1. 過去ログを読まない。
2. 読んでても肝心な所が見えてない。
3. 検索能力が低い。
4. そもそも検索する気がない。
5. 類推という概念がない。
6. それ以前に普通に頭が悪い。
<わからない11大理由>
1.読まない …現行スレ、テンプレ、取説などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
10.開き直る …自分の思うようにならないと開き直る。
11.2ちゃんねるをお客様相談室だと思っている。

12 :
★教えて君五大要素★
1 読まない             (文盲)
2 調べない             (能なし)
3 試さない              (発想力欠如のアホ)
4 理解力が足りない        (馬鹿)
5 人を利用することしか頭にない ()
           YES → 【見つかった?】 ─ YES → じゃあ聞くな
         /                  \
【探した?】                        NO → なら、ねぇよ
         \
            NO →

13 :
■回答できるレベルの人へお願い■
このスレは親切な人が多いと思うけど、もう日記に対する検証&レスは、
たとえ対処法をわかっている人がいても、レスは一切やめにしてくれないか?
こいつがやってることは
 「適当にコード作ってみたけど動かない。動かない原因を調べるのも面倒だし、
  学習する気もない。どうせここに書けばおまえらが修正するだろうから誰か直して」
ってことだ。しかも、一度だけならまだしも、何度も繰り返している。
これまでに、このスレではこの手の質問者は居なかったと記憶する。
いつまでもこんなクズにつきあう必要はない。
汎用性のないコードでスレが汚されるのは、結果的に良質な情報が
埋もれる原因になって迷惑だし、横から見ていても参考にならないし、
なによりも見ていて不快でしかない。

14 :
うんうん、じゃあID:0gt728Ga0が
【初心者】AutoHotkey スレッド【お断り】
を立てて、続きはそっちでやっとくれ

15 :
総レス数 981で前スレ落ちたんだけど・・wなんで?

16 :
980超えると24時間書き込みが無いと落ちる

17 :
あれ、ahkのサイトがかわった?

18 :
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
[板名] - スレタイ
ahk_class SunAwtFrame
V2Cというアプリをspyで調べるとV2Cを特徴付ける情報が無いので
#IfWinActive ] - ahk_class SunAwtFrame
で一応で動くもののいつか誤動作しそうで怖い…
c:\v2c\v2c.exeで引っ掛ける方法ないですか

19 :
設定 > 一般 > 板名・スレタイをタイトルバーに表示する

20 :
Rightキーを入力している間、Alt+Ctrlが入力しているようにしたいのだけども単純に
Right::Alt
Right::Ctrl
だとエラー吐くし
Right::^Altみたいに修飾シンボル+キー名だと修飾シンボルが無効になってキー名前だけの効果しか出ない
wiki見てもA&Bみたいな同時押しはできないと書かれているし、上みたいに1キー入力で2キーの同時入力みたいな事はできないんですかね

21 :
>18
AutoHotkey_L なら
#IfWinActive ahk_exe v2c.exe
でいけると思う

22 :
>>20
キーリマップ使わずSend使えばいい

23 :
以前にも書かせていただいたのですが、
Autohotkeyによってキーを離した情報が失われることがある、ってことはありませんか?
またそういうのが起こる確率を下げる構文とかありませんか?
(たとえば#InstallKeybdHookをいれれば起こりにくくなるとか?)
新PCにしてキーボードも変えたのに、相変わらずゲーム(複数タイトル)中ではキーの押しっぱなしが
よく起こるんです。もう一度そのキーを押してやれば解除されるのですが。

24 :
>>23
http://sites.google.com/site/autohotkeyjp/reference/commands/SetKeyDelay
setkeydelayの第二引数(PressDuration)を100から200くらいに設定してみては。

25 :
>>23
キーのDown/Upの間隔が短いと(人間が操作する想定以上に速いと)
ゲームクライアントがDownだけ受け取ってUpを拾いきれなくて発生している可能性がある。
setkeydelayで第二引数の値を大きくするか、下のように個別にSleep入れる。
send, {a down}
sleep, 200
send, {a up}
※やってることはどちらも同じ。

26 :
レスサンクスでした。
Sendとかスクリプト内で設定できる方法のようですね。
スクリプトをバインドしているキーで「キーの押しっぱなし」が起こるのなら
わかりやすいのですが、なにも設定してないだろう、ほとんどのキーで起こるっぽいんですよね。
(修飾キーなしのWキーのみとか、WASD CVキーも同様)
ゲーム中だけ起こるっぽいです。
有名な既知の解決法はないみたいですね。
前のPCから引き続いて使用している常駐ソフトって数えるぐらいしかないので
Autohotkeyじゃないかなとめぼしを付けているのですが違うのかな。
いろんなタイプのAutohotkeyだったり管理者として実行にチェックいれても変わらず。

27 :
>なにも設定してないだろう、ほとんどのキーで起こるっぽいんですよね。
Autohotkeyで何も設定していないキーで発生する時点でAutohotkeyは関係ない。
スレ違いだけど疑っているソフトがあるならそれらを終了させた状態で発生するか確認してみては。
IntellipointやSetopointといったマウスやキーボード用のユーティリティ(最近はドライバと言ったほうが一般的?)
を使っているなら「それらをアンインストールしてWindowsを再起動してから」試したり。

28 :
WM_HSCROLLやWM_VSCROLLを使ったスクロールがどうも気に入らなくて
他の方法を探してたら
ScrollWindow
http://msdn.microsoft.com/ja-jp/library/cc410994.aspx
ScrollWindowEx
http://msdn.microsoft.com/ja-jp/library/cc411017.aspx
といった関数がありましたが初心者の自分には使い方がわかりません
というか、この関数が自分の目的にあってるかどうかもわかりませんので
助けを求めに来ました
以下は適当に試した失敗コードです
VarSetCapacity(rect, 16)
hwnd := WinExist("A")
DllCall("GetClientRect", "UInt", hwnd, "UInt", &rect)
DllCall("ScrollWindowEx", "UInt", hwnd, "Int", 8, "UInt", &rect, "UInt", &rect, "Str", "SW_ERASE")
DllCall("UpdateWindow", "UInt", hwnd)

29 :
>>28
ウチもちょっと自信ないんですけど
"SW_ERASE"は文字列じゃなくてマクロで定義された定数なので
そこは UInt , 0x0004 なんじゃないかと

30 :
>>29
レスありがとうございます
たしかにそこはそのとおりですね
あとdxとdy二つを渡すべき所で一つだけだったりミスがありました
ScrollWindowの場合は
DllCall("ScrollWindow", "UInt", hWnd, "Int", 0, "Int", -8, "UInt", &rect, "UInt", &rect)
で、壊れたままでもとりあえず目に見える結果は出ますが
MSのページでは「Exの方を使え」っと書いてますからね
でもそのScrollWindowExのやつは同じようなコードでもうんともすんとも言いませんし…
まぁ公式フォーラムでもこの関数を使ってスクロールしてるスクリプトが一つもいない以上は
WM_HSCROLLやWM_VSCROLLで生きるしかないってことかも知れませんし、気長に考えてみます

31 :
すいません初心者質問で恐縮なのですが、Sleep実行中にファンクションキー以外のキー(A,B,Spaceなど)が効かなくなるのですが、Sleep実行中にキーボードのボタンを効くようにする事ってできるのでしょうか?

32 :
すいません書き忘れました
OSはWindow7、ソフトはAutoHotkey_Lです
よろしくお願いします

33 :
説明不足でしたすみません
MouseGestureLを使ってまして、ネトゲの技発動中などに回復ボタンを押してHP回復したいのですが、技の時にSleepを使ってるので、その間Sendコマンドが効かなくて回復できないって感じです
文章力なくてすみません。重ね重ねよろしくお願いします(*_ _)

34 :
IMEをONにせず入力した時、その半角文字をコピーしてIMEをONにして打ち直そうと以下2つの案を試しましたが、
以下を設定しても%clipboard%がそのまま表示されてしまいます。
なにかよい対処法はあるでしょうか?
案1
::#a::%clipboard%
案2
#a::
Send, %clipboard%
return

35 :
IMEの再変換機能だとダメなの?

36 :
>>34
過去ログにそれ用のスクリプトあげてる人いたよ
ちょっと今ログあさってる時間ないけど
●もってるなら探してみ

37 :
再変換できるなら再変換で問題ないし、
IMEがonになっていれば、案2で問題ないような気が。
googleIMEでしか確認してないけど。
IME_SET(1)してないとかいうオチじゃないよね?
便乗ですが、変換済みの文字を、再変換未対応のアプリで何とかする方法
ってないもんですかね。
「メモ帳を新規に起動して、そこに貼り付けて全選択した上で再変換」というのは
思いつきましたが、エレガントさに欠けることこの上ないので、それ以外の方法でw

38 :
>>31-33
ネットゲームの規約で禁止されている行為であるため、アドバイスできません。

39 :
そうですか・・レスありがとうございました。・゜・(/Д`)・゜・。

40 :
>34 ログ漁ってきた
情報古いし整理する必要あると思うけど参考にはなるべ
AutoHotkey スレッド part6
http://unkar.org/r/software/1219130051/271-281

41 :
規制解除されたので備忘録
#Persistent
SetTimer,NoSleep,60000
return
NoSleep:
if WinActive("ahk_class XXXXXXXXXX")
{
DllCall( "SetThreadExecutionState", UInt,0x00000002 ) ;ES_DISPLAY_REQUIRED
}
return
ゲームパッドで操作するゲームでディスプレイが省電力入るの防ぎたかったので適当に書いたら動いた
1分おきにタイマー回して、特定アプリがアクティブな時はスリープ防止のAPIを呼び出す
DllCallでAPI呼び出すと出来る事一気に増えるねコレ

42 :
#ifWinActive, ahk_class
〜〜〜
"ifWinActive,
return
って指定してやると指定したクラスのウィンドウにだけ〜〜〜は反映されるんですよね
以下の物を使ってキーマップ変更してる時に他のウィンドウを操作するとそちらの方にも影響があるようなのですが、書き方間違ってるのでしょうか?
ttp://www1.axfc.net/uploader/File/so/78022

43 :
すみません、3行目は"ifWinActive,じゃなくて#ifWinActive,です

44 :
>>42-43
#IfWinActive と #If は同等なので入れ子にできません。
#IfWinActive,ahk_class TMeryForm.UnicodeClass
;中略
#If (KeyMap=1) ; ここで #IfWinActive,ahk_class TMeryForm.UnicodeClass は無関係になる。
;中略
#If
;中略
#IfWinActive
;↓なら想定通りに動くと思う
#IfWinActive,ahk_class TMeryForm.UnicodeClass
^e::Send,{Enter}
^i::KeyMap:=!KeyMap
j::send, % KeyMap ? "{left}" : A_Thishotkey
+j::send, % KeyMap ? "+{left}" : A_Thishotkey
^j::send, % KeyMap ? "^{left}" : A_Thishotkey
; 以下略

45 :
>>44
丁寧な解答ありがとうございます、意図通りに動きました
変更したキーマップは他のウィンドウでも有効なのに肝心の^iが効かなくて困ってましたが納得しました

46 :
GUIウィンドウ以外の場所が選択された場合に、
GUIウィンドウを消去させる事ってできますか?
左右のクリックに条件指定して「Gui,Destroy」させる方法を
思いついたのですが、これはなるべく避けたいです。
これ以外の案を知っていたら、知恵を貸して下さい。 

47 :
Lのv2.0に移行に例えば下記みたいな修正が必要だけど
AAA = aa%bb%cc%dd%ee

AAA := "aa" . bb . "cc" . dd . "ee"
v1.0でこの書き方をすると処理速度が落ちてしまうけど
v2.0だとこの書き方での速度面も最適化されているのだろうか?
(一応短いソースで確認した限りは同じくらいに見えたけど念の為)
>>46
SetTimerで監視するのどう?

48 :
>>47
それだっ!
それなら思い通りに動いてくれそうだ。
ありがとうございます。

49 :
一応解決してるみたいだけど、私はいつもこうやってるよ
「GUIウィンドウ以外の場所が選択」はGUIウィンドウが非アクティブになると解釈して
非アクティブ状態になったら"OnInactivate"に飛ばす処理
OnMessage(0x6, "OnInactivate")
この関数の中にやりたい処理内容(今回の場合はGUIの破棄かな)
OnInactivate(wParam, lParam) {
 ……
}

50 :
42です。先日はお世話になりました
度々すみませんがまたよくわからない状況になってしまいました、また何か間違ってるのでしょうか?
一度>>44の!KeyMapに切り替えるとreturnで区切られても他のウィンドウに引き継がれてしまいます
returnは強制的に他のものから分断してくれるのではないのですか?
今以下のようにまとめてるのですがそれぞれが!KeyMapを使用しています
;; Mery
SetTitleMatchMode, RegEx
Exit
#ifWinActive, ahk_class [TMery|TFind|TReplace]Form.UnicodeClass
〜〜〜
#ifWinActive,
return
;; エクスプローラ
#ifWinActive, ahk_class CabinetWClass
〜〜〜
#ifWinActive,
return
;; 「開く」ダイアログ
#ifWinActive, ahk_class #32770
〜〜〜
#ifWinActive,
return
;;以下略
.ahkもあげておきます。よろしかったら添削お願いします
ttp://www1.axfc.net/uploader/File/so/78126

51 :
>#ifWinActive,
>return
これいらない。
変数"KeyMap"をウィンドウごとに違うものにする。
ざっと見ただけなのでよく分からんけどこういう事かな。
#ifWinActiveはその下に書かれたホットキーの発動条件になるだけで
ifとかとは性質が全く違うよ。

52 :
現在のカーソル(マウスポインタ)の形を取得するにはどうしたらいい?
具体的にはブラウザ上(Firefox)で今どんなポインタになっているかを取得したいんです
hoge:=DllCall("LoadCursor","UInt",NULL,"Int",IDC_CROSS,"UInt")
と書くらしい(?)事は分かったんですがパラメータが分かりません

53 :
>>51
そうだったんですか、流行らせるページだけで理解するのは難しいようですね
変数の指定が上手く出来ないので解決できませんでした
もう少しリファレンス見て出直してきます、ありがとうございました

54 :
>>52
MouseGestureL.ahkの人の人が調べてる。その人のコードは、
  hCursor := DllCall("user32.dll\LoadCursor", "Ptr",0, "UInt",idCursor, "Ptr")
パラメータは、どこから調べてきたのか知らないが、MG_Edit.ahkのL176〜L193あたり。
参考にならずにすまん。

55 :
前の続きで悪いが…
v2って速度面の向上に対してのアナウンスってあったっけ?
下記の記述で速度面の実験をしてたんだが
1.
A := ""
Loop, 1000000
A .= A_Index . "`n"
msgbox, end
2.

Loop, 10000000
A := RegExReplace("ABCD", "(.)...", "$1")
msgbox, end

v2はv1に比べ、1の記述で2倍、2の記述で5倍も速度が上がっていたんだが
具体的に何が変わっただろうか

56 :
正規表現の処理速度が向上したと
フォーラムのどっかに書いてあったような気がする

57 :
>>56
そうなのか、サンクス。

58 :
選択した文字列が日本語かどうかの大雑把な判定が欲しいんですが
F12::
ClipboardLast := Clipboard
, Clipboard :=""
Send, ^c
ClipWait, 3
If ErrorLevel
return
If StrPut(Clipboard, "cp0")=StrPut(Clipboard, "UTF-8")
MsgBox, 1Byte
Else
{
Temp := Clipboard ; ←VarSetCapacity
, StrPut(Clipboard, &Temp, "cp932") ; Shift-JIS
If StrGet(&Temp, "cp932")=Clipboard
MsgBox, ja
Else
MsgBox, unknown
}
Clipboard := ClipboardLast
return
矢印の所のTemp := ClipboardはもともとVarSetCapacityが来るべき所ですね
ところで、
VarSetCapacity(Temp, StrPut(Clipboard, "cp932"))
VarSetCapacity(Temp, StrPut(Clipboard, "cp932")*2)
VarSetCapacity(Temp, StrPut(Clipboard))
VarSetCapacity(Temp, StrPut(Clipboard)*2)
のどれでもうまくいきません
なにかアドバイスお願いしますm(。_。)m

59 :
正規表現で[ぁ-ヶ亜-K]じゃダメなん?

60 :
文字列をGoogleTTSとかに渡す予定だったので
「TTSが読めない文字が入ってるか」が判定基準でした
それで、とりあえずShift−JISでのダメ文字が入ってるか判定してみようとしてました
正規表現はよく知らないんで再度すみませんが
[ぁ-ヶ亜-K]だと「仮名や漢字含まれてるか」の判定だとはわかりますが
「日本語で読めない文字が入ってるか」もしくは「Shift-JIS文字か」の判定も簡単に出来ますか?

61 :
文章を読み上げるスクリプトでも作ってるの?

62 :
とりあえずSJISでってなんだよ
相手が認識できる文字一覧をきっちり調べるのが第一でしょ
あとは
・文字列内に認識できない文字が含まれていないこと
・文字列全体がすべてが認識できる文字で構成されていること
のいずれかでチェックかけるだけかと
ループでも正規表現でもやることは変わらんね
速度とコード量はかなり違うけど

63 :
MouseGetPos,,,h,c
PostMessage,0x114,1,%h%,%c%,ahk_id %h%
で水平スクロールさせようとしたんだが、上手くいかない窓が多いねコレ。
もしかして、取得するハンドルやらコントロールやらは、
窓ごとに個別設定しなければいけないのか。
だとしたら少しメンドーだな…
スレの皆さんはどのように対応しているのかな?
参考までに教えてもらえると助かる。

64 :
サブルーチンを作るとき
「関数」として作成していますが
「ラベル」として作成するメリットって何かあるんでしょうか?

65 :
お手軽という点に尽きるんじゃないの
タイプ数が若干減るし括弧書かなくても済む

66 :
サブルーチンは「ラベル」でしか作れないはずだが…
「サブルーチン」と「関数」は別物だよ
;*** サブルーチン ***
サブルー宴xル:
  〜
return
;*** 関数 ***
function() {
  〜
}
何故混在してるのかというと、AHKのアップデートで
goto → サブルーチン → 関数 の順で作られたから
昔は関数なかったのでサブルーチンでやりくりするしかなかった
もっと以前はGotoしかジャンプ命令が存在しなかった
>>63
スクロールバーのwhnd取得するのがいいんだが、ウィンドウ直下にあるとは限らない
↓この辺のソースを参照
http://sites.google.com/site/agkh6mze/trackwheel
http://www6.atwiki.jp/eamat/pub/MyScript/WheelScroll20090722.zip

67 :
Menuとかは関数でなくラベルで指定しないといけないんじゃないっけ

68 :
>>66
ありがとう。
自身で作ってみようと考えてたけど、予想以上に複雑で俺にゃ無理だな。
未熟さを痛感したわ。
おとなしく、紹介されたスクリプトを使うことにするよ。

69 :
>>68
プログラミングは単純なパーツを組み上げて複雑なモノを造る
いわばレゴブロックの様なモノ
最初から大作考えるより、単機能なモノから発展させていった方が、挫折せず勉強出来ると思う

70 :
おれは発展の余地は充分すぎるほどあるんだが
現状不満はないから作る必要がないばっかりにまったく技術が進展しないな
たくさんの高度なスクリプトを見てみたいわ
そうすりゃなんか戦力になるのが見つかるかもしれないなぁ

71 :
なんだこいつ

72 :
>>65
>>66
>>67
ありがとう。
サブルーチン=GoSub了解。
ラベルに優位性がなければ関数に統一し
実現できないことだけラベルという方針で進めます。

73 :
>>70
意訳すると
使い始めたばかりの初心者です。特に望むものは無いんですけど何となくインストールしました
でも皆さんのすごいスクリプトを見れば何かやってみたくなると思うので晒してください
パクります

74 :
後述のコードを実行し
1)WindowsのCtrl+cでクリップボードに文字列をコピー
2)#cで1度だけテンポラリに別の文字列を格納
3)#vを連続して実行
の手順を実行すると「2」の内容がペーストされることを期待してますが
空白文字や「1」でコピーした文字列がペーストされる場合があります。
なぜ、このような動作になるのかご教授頂けないでしょうか。

75 :
■実行したコード
global global_tmp
;カーソル行の文字列をテンポラリに格納
#c::
BlockInput, on
SendInput, {Home}+{End}
clipboard_saved := ClipboardAll
Clipboard =
SendInput ^c
ClipWait, 1
global_tmp := Clipboard
BlockInput, off
Return
;テンポラリの内容を次の行にペースト
#v::
BlockInput, on
clipboard_saved := ClipboardAll
Clipboard =
Clipboard = %global_tmp%
SendInput, {End}{`n}^{v}
Clipboard =
Clipboard := clipboard_saved
BlockInput, off
Return

76 :
でたご教授

77 :
SendInput を SendEventに変更すると多少改善したけど、まだ問題を解消できない。
(あと、退避していたクリップボードの内容を戻す処理を修正しました)
;カーソル行の文字列をテンポラリに格納
#c::
BlockInput, on
SendInput, {Home}+{End}
clipboard_saved := ClipboardAll
Clipboard =
SendEvent ^c
ClipWait, 1
global_tmp := Clipboard
Clipboard := clipboard_saved
BlockInput, off
Return
;テンポラリの内容を次の行にペースト
#v::
BlockInput, on
clipboard_saved := ClipboardAll
Clipboard =
Clipboard = %global_tmp%
SendEvent, {End}{`n}^{v}
Clipboard := clipboard_saved
BlockInput, off
Return

78 :
send に変更して Setkeydelay で各パラメーターを大きくしてみては

79 :
^vの送信直後、貼り付けが処理される前に
クリップボードを戻してしまっているのではなかろうか

80 :
解決しました。
SendMode Input
をスクリプトの冒頭で行なっていたのですが
これを削除することで問題が解消されました。
「SendEvent」「SendInput」「SendPlay」は
SendModeの影響を受けないと思い込んでいたので
投稿したコード内に記載が漏れていました。
>>78
ありがとう。解決のきっかけになりました。
>>79
そうですね。そんな感じの動作をしています。

81 :
mac wireless keyboard を windows につないで使いたいのですが
かな -> 変換
英数 -> 無変換
のマッピングがうまく動作しません。
vkE9sc071 Up::Send,{vk1Dsc07B Down}{vk1Dsc07B Up} ;Apple英数 -> 無変換
vkFFsc072 Up::Send,{vk1Csc079 Down}{vk1Csc079 Up} ;Appleかな -> 変換
「かな」を押しても「英数」を押しても「変換」になってしまいます。
いろいろ調べたのですが・・・ご存知の方がいらっしゃれば教えてください。

82 :
>>81
想像で適当にコメントしちゃうけど・・・
#USEHOOK
は書いてますか?
キーダウン信号が無いからフックしないとうまくマッピングできないのかも。
両方「変換」になってるんじゃなくて
英数 -> 無変換 のマッピングができてないから
デフォルトの動作(全角カタカナ、半角カタカナの変換)になってるんじゃない?
■参考
http://deltatech.blog90.fc2.com/blog-entry-348.html

83 :
> 英数 -> 無変換 のマッピングができてないから
そのとおりでした orz

84 :
当方window7 64bit ultなのですが
>AutoHotkey_L (内部Unicode、64bitバイナリ、オブジェクト指向、COM対応など)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
こちらのリンクより左上のDownloadよりダウンロードしたインストーラよりx64版のAuto hot keyをインストールしたのですが起動すると
Error at line 47. Line Text:#z Error:Duplicate hotkey. The program wiill exit.
というエラーメッセージが出て起動できません。UACやアンチウィルスは切っていますしアンインストール後ダウンロードページ↓の方にあるリンクよりx64版をインストールし直しても同様のエラーが出ます。
解決方法はありませんでしょうか?

85 :
47行目でのエラー。
ラインText:#zエラー:複製のホットキー。
プログラムwiill出口。

86 :
日本語もおかしいし簡単な英語も読めないとかどこの国の人だよw
まずスクリプトを見直せ。

87 :
>>84
Autohotkey.exeを実行するとそのエラーが出るってこと?
その場合はAutohotkey.iniが自動で実行されているので
Autohotkey.iniを修正するか中身を空っぽにすればいい。
http://ahk.xrea.jp/Usage.html
>単にAutoHotkey.exeを実行するなど、Script Filenameを指定せず起動した場合は、
>起動時の作業ディレクトリのAutoHotkey.iniが読み込まれる。
>ファイルが存在しない場合、My Documentsディレクトリ内のAutoHotkey.iniが読み込まれ、
>それも存在しない場合はMy Documentsディレクトリ内にAutoHotkey.iniを作成してよいかを
>問い合わせるダイアログが表示される。

88 :
>>84
一応レスするが
そのエラーが出る時点でインスコに問題はない。
おまいさんの書いたスクリプトが腐ってる。
要はホットキー定義の重複だ。
正味の話、そのエラーメッセージが分からんなら、
使わない方がいいんじゃないかね

89 :
>>88
英語として読まなくても分かるよね、これ

90 :
ツールチップの書式設定をする方法てのは無いんかな?

91 :
ツールチップはOSの設定依存で書式とかはない
枠線のないGUI窓作って好き勝手にコンポーネント置くなり
自前描画でテキスト書くなりする必要あり
用途にもよるが、
DllCallゴリゴリで現窓やデスクトップに直接描画するのもアリ

92 :
Gui,Font みたいに簡単に設定が出来るならば、と考えてたんだが。
DllCall のゴリ押しもする気になれんし…
Gui でオプションいじって、それっぽく見せるのが一番楽そうだな。
ありがとう。 参考になったわ

93 :
>>90
GUI または Progress を Tooltip の代わりにすれば書式設定を変更可能
http://logsoku.com/thread/anago.2ch.net/software/1317156599/800-805

94 :
感激した。
ぼちぼち作り始めようかなと思ったら、完成形がそこにあった。
ありがとうございます。 

95 :
自分はこういうの作ってlibフォルダに入れてる。
http://www.autohotkey.net/paste/6daiaj
素人が作ったものなんで突っ込み所ありそうだけど
後学のために遠慮なく突っ込んでください。

96 :
スクロールバーを操作させることは出来るでしょうか?
10%スクロールダウンとか

97 :
相手による。
通用する相手でもDllCallと構造体分からんと無理

98 :
>>95
あれ、classってahkで使えたっけ?

99 :
AutoHotkey_Lだで

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【WNI】The Last 10-Second 17【緊急地震速報】 (207)
Opera質問スレッド Part29 (893)
動画プレイヤーMediaunite、Qonoha part11 (158)
ふらっとC#,C♯,C#(初心者用) Part92 (264)
リネームツールをまたーり語るスレ 005 (361)
JaneXeno Part41 (719)
--log9.info------------------
こんな世の中で生きてる意味あるの? (352)
近いうちに自る予定のひと (497)
海外で外こもり中だけど、何か質問ある? (913)
糞兄早く (914)
▲会話下手・対人苦手・人見知り 37▲ (431)
スカイプでお互いの悩みをお話しスレ (123)
父親・母親・肉親に殺意がある人のスレ その03 (269)
【中部大学】Fランク大学進学3【明星大学】 (210)
糞兄死んでほしい (243)
22歳以上24歳以下で大学・専門進学part3 (781)
★ 我が子が大嫌いなんですが ★ (342)
彼氏欲しいんですけど (128)
死にたい (894)
イジメをする奴らの言い分が聞きたい (200)
前科者や逮捕暦のある人間が信用を回復するには (240)
誰もが不快に思わないファッションってあるの? (514)
--log55.com------------------
【コスプレ】2.5次元舞台・ミュージカルアンチ21【お遊戯会】
徐々同人愚痴スレ Part.2
田舎愚痴スレ7@同人板
絵描きアンチスレ
女性向け同人の衰退について語るスレ Part.3
【雑談OK】Twitter、pixiv、SNS総合雑談スレ31【交流苦手・SNSヒキ】
マイナージャンル・カプ・キャラを語るスレ49
【絡み禁止】Twitter愚痴スレ@同人板 その305【レス禁止】