AutoHotkey スレッド part18at SOFTWARE
AutoHotkey スレッド part18 - 暇つぶし2ch2:名無しさん@お腹いっぱい。
14/04/28 12:20:44.50 ZU+n1lM80
■重要事項
オリジナルである、旧 "AutoHotKey" の開発は2009年9月で終了している。
現在は、そこからフォークした "AutoHotkey_L" が主流となり、2014年1月からは後のLが取れ
正式にAutohotkeyとして扱われるようになりました。
よって古いスクリプト(主にDllCall()を利用しているスクリプト)は最新Verで動作しないものがあり、
その場合はスクリプトの修正が必用です。

オリジナルのAHKとの変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
 →URLリンク(www.autohotkey.net)
 →URLリンク(sites.google.com)

※新規利用者には最新版を推奨しますが、旧AHK(2009年9月までのVer)の利用者は新AHKへの移行に際して
少なからず改修が必要となります。特に、旧流行らせるページの配布物(MouseGesture等)の多くは
そのままでは動作しません。安定利用できている環境を崩して移行するかどうかは各人の判断による。
MouseGestureについては有志の方が最新AHK対応版(MouseGestureL.ahk)を配布しているのでそれを
利用するのもありです。
URLリンク(hp.vector.co.jp)
URLリンク(code.google.com)

※ACC.ahkとCOM.ahkはフォーラムのリンク先にファイルが存在しませんので下記から入手してください。
 URLリンク(ux.getuploader.com)

■質問に際して
OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。

2chの仕様の関係で、このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
レスをコピペして利用する場合は行頭の全角スペースをタブ等に置換してから利用すること。

3:名無しさん@お腹いっぱい。
14/04/28 12:21:17.52 ZU+n1lM80
■過去スレ
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)スレリンク(software板)
スレリンク(software板)

以下FAQ等

■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」の「BOM」付きで保存する。(AHKLの場合)

Q2:初めて使うけどどれを使えばいいの?
A2:AHKLのユニコード版を推奨。
  旧流行らせるページの配布物をそのまま使う場合は本家をそのまま利用する事。
  64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。

4:名無しさん@お腹いっぱい。
14/04/28 12:26:00.11 ZU+n1lM80
■ リマップ・ホットキー割り当て

Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
  OS側がキーUp/Down情報を正しく返してこないのでAHKのみで対処は無理です。
  レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
 
 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( URLリンク(www.forest.impress.co.jp) )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード(0x0064はF13)が表示されるので覚えておき「終了」をクリック。
  「ひらがな」キーをクリックすると「【ひらがな】キーをどのキーに変更しますか?」という
  ウィンドウが表示されるので右上の「Scan code」をクリック。
  覚えておいたスキャンコード(0064)を入力し、「OK」ボタンをクリック。
  「登録」をクリックし、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:名無しさん@お腹いっぱい。
14/04/28 12:26:44.06 ZU+n1lM80
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:名無しさん@お腹いっぱい。
14/04/28 12:27:25.88 ZU+n1lM80
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:URLリンク(www6.atwiki.jp) の「IME.ahk」を使いましょう。

7:名無しさん@お腹いっぱい。
14/04/28 12:28:13.60 ZU+n1lM80
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
  複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
  が、バッチでかなりの回数(数万↑~)回したりする場合以外は、体感出来るほどの差はない。

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

Q3:GUI作るのめんどくせ~~
A3:公式( URLリンク(www.autohotkey.com) )から SmartGUI Creator をDLして使うと楽。

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

8:名無しさん@お腹いっぱい。
14/04/28 12:28:51.29 ZU+n1lM80
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} にする。

Q6:Windows7(以降)の特定ウィンドウでAHKが効かないんだけど?
A6:XPは管理者(Administrator)としてログインすれば全てのソフトが「管理者権限」で起動して
  いましたが、Win7からは管理者でも基本的に「標準ユーザー」として起動するようになりました。
  これを回避する方法はAutohotkey.exeを右クリックして「管理者として実行」する。
  常に管理者として実行したいならAutohotkey.exeを右クリックしてプロパティを開き、「互換性」
  タブの一番下にある「管理者としてこのプログラムを実行する」にチェックを付けて「適用」。
  ちなみにユーザーアカウント制御(UAC)を無効にするとXPと同様に全てのソフトを常に管理者権限
  で実行できますが、セキュリティを著しく低下させる行為なので非推奨です。

9:名無しさん@お腹いっぱい。
14/04/28 12:47:23.55 55uzESsN0
今日の段階での最新バージョン
v1.1.14.04 - April 25, 2014

URLリンク(ahkscript.org)

10:名無しさん@お腹いっぱい。
14/04/28 12:58:02.94 55uzESsN0
>>8
Q6:
A6内で、多分、

>これを回避する方法はAutohotkey.exeを右クリックして「管理者として実行」する。

ー> これを回避する方法はAHKファイル上で右クリックして「管理者として実行」する。

ではないかと

11:名無しさん@お腹いっぱい。
14/04/28 13:33:27.64 ZU+n1lM80
>>10
ご指摘の通り間違ってますね
次スレ建てる方は修正お願いします

12:名無しさん@お腹いっぱい。
14/04/28 22:53:56.84 wLp/tbba0
autohotkey_lって名称はまだあるの?
autohotkey.comのトップページのdownloadからは_Lつきのファイルをダウンロードできるけれど
そのトップページには_Lつきの情報が書いていない

13:名無しさん@お腹いっぱい。
14/04/28 23:09:09.16 rN8ZLQ1V0
>>12
現行スレ終わってからにしてくれ

14:名無しさん@お腹いっぱい。
14/04/28 23:17:23.00 ZU+n1lM80
980を超えてから24時間レスがなければ自動的にdat落ちするからこっちでいいかと

15:名無しさん@お腹いっぱい。
14/04/28 23:29:04.32 rN8ZLQ1V0
>>14
現行が終わるまで次スレで書かないのが普通。

16:名無しさん@お腹いっぱい。
14/04/29 03:28:45.57 M5Upn63K0
> Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
> A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。

これ本当に何とかしてほしい。この仕様のために、わざわざ
4ボタン多いジョイスティックの購入を余儀なくされているし。

17:名無しさん@お腹いっぱい。
14/04/29 10:54:19.25 1X5e6M/p0
>>8
前スレの969です。早速これをテンプレに入れてくれてありがとうございました
あのあといろいろとやってて気づいたことがあります
それは自動記録で、AutoItなのですが、AutoItのexeファイルをすべて「互換性」で「管理者としてこのプログラムを実行する」としたのですが、なぜか、秀丸のドキュメント上では自動記録が出来ずにメモ帳のドク上では出来るという現象が発生しています
AutoItの自動記録はAu3Record.exeですが、これも管理者として実行するにチェックを入れています。
XPでは問題なく秀丸上で記録できるのですが、Win7では出来ません。
AutoHotKeyにも自動記録用のツールが別途用意されているようですが、わたしはそちらは使う予定はないのでしませんが、もしかしたら、そっちにも同じような影響があるかもしれないと思い書きました

AutoItを使い出してこんなにすばらしいツールがあったのかともっと早く知ってればと思います
GhostTracerで出来ることはもちろんさらに拡張性の高いツールだと思います
なぜかAutoItのスレは相当寂れているのですよね。向こうにこの現象を書きたかったのですが、みんな知らないのかなあ
教えて頂いた方にはほんとに感謝しています。AutoItはexeファイルにコンパイルできます
AutoItとAutoHotKeyを併用すれば100倍力かもしれませんね。はじめたばかりの初心者の一言でした

18:名無しさん@お腹いっぱい。
14/04/29 10:58:57.66 1X5e6M/p0
それと、アプリの種類によってAutoHotKeyが有効に動く場合と動かない場合があるというのはどうしてなのでしょうか
私はXPでVisualC++6.0でプログラミングをしてきましたが、そんな設定したことがないし存在すら考えたこともありませんでした
最新版のVC++ではそんなセキュリティの設定とかあるのでしょうかね

19:名無しさん@お腹いっぱい。
14/04/29 11:43:41.08 6i1yHp3O0
>>18
管理権限の問題はVista以降導入された ユーザーアカウント制御(UAC)の仕業。
対応してないソフトでは設定など記録が保存されない問題がある、あとは自分でググろう。

取り回しが悪すぎるので慣れた人は別のセキュリティーソフトに切り替えている。(性能的にも向上する)

20:名無しさん@お腹いっぱい。
14/04/29 11:47:51.89 1X5e6M/p0
>>17
この問題ですが、自己解決しました
秀丸を起動するとき、秀丸のショートカット上で右クリックで管理者として実行を
選択すると、問題なくAutoItでも記録できました

一般のtxtファイルをダブルクリックしたりして秀丸を起動すると駄目です
またtxtファイル上で右クリックしても管理者として実行する項目は出てきませんね
そのときは秀丸自身のexeファイルの互換性設定のところでチェックをつけておくしかないのは

なんだかなあw

21:名無しさん@お腹いっぱい。
14/04/29 12:32:21.58 I9Dcz2730
管理者権限でスクリプトを動かすのなら
スクリプトの初めのほうに

if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+
ExitApp
}
を入れてれば管理者権限で動いてくれるみたい
(少なくともUACの確認窓は出てくる)

あとは、autohotkey.exeのショートカットを作って、そのショートカットに対して
互換性タブで管理者権限で実行するように設定するとか。
(コマンドラインまで指定したショートカットで管理者権限つけておくと便利)

全然試してないし、信用できるのかどうかもわからないんだけど指定したプログラムの実行時に
UACを要求されても自動で許可してくれるプログラムってのも今見つけた
URLリンク(winaero.com)

22:名無しさん@お腹いっぱい。
14/04/30 01:10:14.58 eWPaZlA20
うーん、異常な速度のクリックの内容を破棄する、ってできないですかね?
ようするにチャタリングをどうにかしたいんです

23:名無しさん@お腹いっぱい。
14/04/30 01:13:35.77 RpW/kJ9P0
チャタリングキャンセラー キーボード
チャタリングキャンセラー マウス
のどっちか好きな方でググる

24:名無しさん@お腹いっぱい。
14/04/30 01:14:42.58 eWPaZlA20
>>23
ahk上でできないと干渉しちゃって役に立たないのです
ahk上でどうにかできれば希望が見えるんですが

25:名無しさん@お腹いっぱい。
14/04/30 01:27:21.95 RpW/kJ9P0
出来ないことはないだろうけどチャタしているボタンに関わるもの全てで
スクリプトが面倒くさいことになると思う。
一番手っ取り早いのはチャタリングしているデバイスを買い換える。
安価で済ませたいなら(部品交換が可能なものなら)キーやスイッチだけを交換。

26:名無しさん@お腹いっぱい。
14/04/30 02:17:37.99 WnF6ofYG0
たしか、マウスジェスチャーの中に類似コードを見かけた記憶がある
物理的な原因でチャタリングが起きてるならとっとと新品を買うか修理する
ソフトで誤魔化してもチャタリングは直らないしひどくなるだけ
mouse debounce ahkあたりでググればなんか出てくる

でもahk以外で干渉してるのにahkでは干渉しないと思う理由がわからん

27:名無しさん@お腹いっぱい。
14/04/30 07:15:07.25 E4Aqz89i0
AutoHotKey専用のエディター

SciTE4AutoHotkey
v3.0.05.01 - April 5, 2014
URLリンク(fincs.ahk4.net)

参考
URLリンク(autohotkey.blog.fc2.com)

28:名無しさん@お腹いっぱい。
14/04/30 09:42:06.95 NbtgUkFi0
チャタじゃなくて キーリピートな悪寒
任意キー押下でマウスクリックとか、
もしくはタイマーでアプリ側の処理待ち未考慮でガンガンクリックしてるとか

ソース張ってないから何ともいえんがここしばらくの質問内容見るに(同一人物だよね?)
本人が認識してる問題点からが違ってる可能性が高そう

29:名無しさん@お腹いっぱい。
14/04/30 14:24:42.64 xs6fM63w0
今ちょっとMGLに組み込める慣性スクロール作ってるんですけど、これ再起動したら0x0って出るのはなんで何でしょう?
再起動直後ホイール回転で初回だけ出るんですよね。その後は普通に使えるんですが……

Inertia_wheel(){
global axl,scroll
If(A_Priorhotkey = A_thishotkey && A_TimeSincePriorHotkey<220)
axl++
else{
axl = 0
StringTrimLeft,scroll,A_ThisHotkey,1
send,{%scroll%}
return
}
SetTimer,Slip,20
}

Slip:
If(axl>0)
{
Send,{%scroll% %axl%}
If(axl>2)
axl-=0.2
else
axl-=0.1
}Else
SetTimer,Slip,Off
Return

30:名無しさん@お腹いっぱい。
14/04/30 14:51:43.03 pL7PSKbk0
スクリプトをexe化した場合、GUIのチェックボックス内容を再起動後も保存するのって、
iniとかの外部ファイルを使うしかないですか?

31:名無しさん@お腹いっぱい。
14/04/30 16:09:22.98 j+drx99V0
>>30
頭で考えただけだから可能かどうかは分からないし、かなり強引だが、
iniやレジストリ使わず再起動後にも変更内容を反映させる方法として大まかに言うと、

exeと同じフォルダ(じゃなくてもいいが)にソースahkを置いとく。
→exe終了時にソースahkを書き換える。
→書き換えたソースahkをexe化する。

なんてどうだろうか。
ちなみに、Command Line Parameters:
Ahk2Exe.exe /in infile.ahk [/out outfile.exe] [/icon iconfile.ico] [/bin AutoHotkeySC.bin]

32:名無しさん@お腹いっぱい。
14/04/30 16:12:21.62 j+drx99V0
>>27があったんで関連質問OKかなと思い投稿。
SciTE4AutoHotkey v3.0.05.01を数日前にアップデートしたんだけど、
検索系が小窓タイプからツールバータイプに変わり、
尚かつウインドウ下に表示されてちょっと使いにくい。
元の小窓タイプに戻す方法、またはウインドウ上に表示する方法ないですかね?

33:名無しさん@お腹いっぱい。
14/04/30 20:30:18.77 vdJzRyTu0
インストするときの選択にclassicとかなんたらあったような気が
関係ないかな

34:名無しさん@お腹いっぱい。
14/04/30 20:47:05.18 pL7PSKbk0
>>31
ウルトラCな方法ですね…
現実的にはやはり外部ファイルを使うのが王道ですかね。
ありがとうございました。

35:名無しさん@お腹いっぱい。
14/04/30 21:25:04.21 j+drx99V0
>>33
レスサンキュー。
>インストするときの選択にclassicとかなんたらあったような気が
おそらくそれは、背景色や文字フォントなど予め設定されたスタイルを選ぶものだと思う。
あれからSciTEGlobal.properties見て関係ありそうな設定いじってみたけど進展無しだった。

新仕様に慣れるかバージョン落とすか、今考え中。

>>34
王道もなにもini(ファイル)かレジストリしかないんじゃないかなぁ。(自分はこの他には思いつかない)

36:名無しさん@お腹いっぱい。
14/04/30 22:09:16.59 j+drx99V0
>>34
急に別の方法思いついた。(設定を記憶するんじゃないが)
GUIのチェックボックスが幾つ有るのかとかどういうスクリプトなのか知らないけど、
コマンドラインオプション別にチェック有り無しを分けて起動する、なんてどうだろう?

例えばチェックボックスがAとBの二つあるとして、
何も付加せず起動→チェックボックスAB共にチェック無しにして起動
p1(プリセット1)を付加してexe起動→チェックボックスAをチェック有り、チェックボックスBをチェック無しにして起動
p2を付加してexe起動→チェックボックスAをチェック無し、チェックボックスBをチェック有りにして起動
p3を付加してexe起動→チェックボックスAB共にチェック有りにして起動

37:名無しさん@お腹いっぱい。
14/05/01 00:37:56.33 Ydjbvs/90
>>29
俺には何がダメなのかわからん
むしろ便利に使わせていただきますありがとう

38:名無しさん@お腹いっぱい。
14/05/01 02:50:48.27 Nz1ZLN4h0
>>36
頭柔らかいですねえー

たしかにそれが実現できると色々応用聞いてオモシロそうですね

39:名無しさん@お腹いっぱい。
14/05/01 12:17:28.11 irjR+JFm0
>>30
exeのAlternate Data Streamに格納するとか

40:名無しさん@お腹いっぱい。
14/05/01 12:26:50.70 3JyqL2Ux0
素直にiniに書いておいたほうがiniいじりだけで問題解決することもあるだろうしそのほうがよくないか?
てかそもそもexe化のメリットが俺よくわかんない。ポータブル化ならahk本体ごと持ちあるけばいいんじゃないかなと思うし

41:名無しさん@お腹いっぱい。
14/05/01 14:18:44.34 n1WNrUtZ0
やったことないから出来るかわからんが、自分のexeファイルをバイナリでオープンして
一番最後に付け加えておくとか
起動時にそこを読み込んで、終了時にそこを書き換える
exeの最後ならなんか付け加えても動作には影響ないんじゃね
やったことないからわかんねえwww

42:名無しさん@お腹いっぱい。
14/05/01 14:32:40.21 hnMIYGSq0
Autohotkey.ahkしか使わないならそれでいいかもしれんけど
exe化したいってことは独立系ソフトとして切り離して使いたいってことでしょ
そういうのを毎回autohotkey.exe hoge.ahkとか面倒くさくね?コマンドライン引数とかあると更に厄介
他人に配布するならexe単体のほうが身軽だし

U64環境でANSI版時代の古AHK使いたい場合とかでも
A32.exe指定してahk2exeで固めてしまえば互換性で悩まなくて済む

考えられるシチュエーションはいくらでもあると思うんだが
なんでわざわざexe化わかんないとか言いたいのかわかんない

設定関係はiniにしとけには同意、
これはahkの場合でもスクリプト内部を弄らなくて済むようになるから有効だと思う

43:名無しさん@お腹いっぱい。
14/05/01 14:33:22.72 hnMIYGSq0
42は>40へのレスね

44:名無しさん@お腹いっぱい。
14/05/01 14:46:08.25 7zM3nG6m0
スクリプト自身のファイル名書き換えるとか

45:名無しさん@お腹いっぱい。
14/05/01 16:56:43.52 hVOqctMv0
「なんでiniじゃダメなの?」って最初に聞くべきだったよこれ
その理由次第で解決法も変わってくるかもしれないし
「何となく外部ファイル作りたくない」とかだったら回答する価値もない

46:名無しさん@お腹いっぱい。
14/05/01 19:05:18.05 qa1QwwoW0
LButton::
if( xxx )
{
動作
}
else
{
Send, {LButton}
}
というプログラムを作りました。で、xxx以外のときは、通常の動作をすると思ったら駄目でした
たとえば、ウインドウのタイトルを左クリックで押した状態で動かすとかこのプログラムでは動きません
多分、このプログラムでは左クリックを押して放すところまでをやってしまうからなのでしょう

解決策はありませんか

WEBで探しているのですが、なかなかマウス動作に関しては見つかりません
たとえば、
LButton Down:: とか
LButton Up::
みたいなことは出来ませんか

47:名無しさん@お腹いっぱい。
14/05/01 19:24:23.70 zVOEGAu80
>>46
押す送る、離すの待つ、上げる送る で出来る。
wikiでも読めば分かる基本的なことなのでヒントだけ、後は自分で スクリプト を考えよう。

URLリンク(ahkwiki.net)
URLリンク(ahkwiki.net)

48:名無しさん@お腹いっぱい。
14/05/01 19:45:12.58 /qkz+b020
>>46
例えばこういう風に書けば希望通りに動作はするけど、左ボタンの動作をカスタマイズしようと
すると他のアプリの左クリック割り当てと競合して別問題が起きる(希望通りに動作しない)。
そしてその問題を回避するのに再び試行錯誤してスクリプトがごちゃごちゃになってかなり面倒くさいことになる
なので左ボタン以外に割り当てたほうがいい。
中ボタンや(5ボタンマウスなら)xbutton1 または xbutton2 に割り当てることをオススメする。

if ( xxx )
{
動作
} else {
click, left, down
while getkeystate("lbutton", "P")
sleep, 10
click, left, up
}

49:名無しさん@お腹いっぱい。
14/05/01 19:48:00.32 jn3hT/Ge0
if( xxx )がどんな条件なのか知らんけど#Ifで分岐できるんなら

#If ( xxx )
LButton::
 動作
Return
#If

でいいんじゃないの?

50:名無しさん@お腹いっぱい。
14/05/01 19:56:23.21 zVOEGAu80
>>48
待つだけにWhileループを使うのは負荷かかるだけだぞ。

51:名無しさん@お腹いっぱい。
14/05/01 20:15:14.15 qa1QwwoW0
>>47
ありがとうございました
LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
xxx
return

このようなプログラムを作り、xxxのところでしたいことを書けばLButtonUpのときに動くようになるだろうと思ってやってみたら、新たな問題に直面しました
上記でxxxのない、単純な

LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
return

だけのプログラムでやってみたところ、Win7ではうまくウインドウを動かすことが出来たのですが
WinXPで全く同じプログラムを動かしてみたら、ウインドウを動かすことが出来ません。

我が家ではパソコン2台あって1台はセキュリティを考えWin7にしましたがもう1台はXPのままでこちらは家庭内LANのみの接続でWEBやメール等は全く使わなくしています

で、XPとWin7で動きが違いますよ。なんじゃいな

52:名無しさん@お腹いっぱい。
14/05/01 20:26:15.85 qa1QwwoW0
>>49
マウスの位置がある範囲内のときという条件です

53:名無しさん@お腹いっぱい。
14/05/01 20:36:54.10 zVOEGAu80
>>51
フックを使う。
URLリンク(ahkwiki.net)

>>52
その条件なら >>49 が言っている#Ifで判定した方がいい。

挙動が予想と違うときや問題が起きたときは
右下タスクバーアイコンクリックしてスクリプトの実行履歴をみればどんな動作したか分かる。
細かいことだが、プログラムだと括りが広すぎで正確にはスクリプトね。

54:名無しさん@お腹いっぱい。
14/05/01 20:45:34.16 qa1QwwoW0
やっぱりWin7ではこの方法で希望の動作が出来そうなのですが、WinXPでは駄目ですねえ
なんでかな
左クリックだとデスクトップ上にあるいろいろなウインドウを動かしたり出来なくなるので、右クリックで代用しますか
要するにクリック押下した状態で動かすってことが出来なくなるので、右クリックなら被害は少ないですからね

今日はここまでにします。教えてくださった方、ありがとうございました

::の左側にマウスダウン、マウスアップってのをずっと探していて見つけられませんでした

55:名無しさん@お腹いっぱい。
14/05/01 20:46:33.10 qa1QwwoW0
>>53
ありがとうございました。相対座標でも出来ますか
それについては、また今後やってみますね

56:名無しさん@お腹いっぱい。
14/05/01 20:47:24.05 M6wfwq3S0
自分は極力>>49のいう、

#IF 関数_xxx()
LButton::
 動作
return
#If

関数_xxx(){
 if (条件満たす){
  return true ;または、return 1
 }else{
  return false ;または、return 0
 }
}

てな感じにしてる。
見た目スッキリするし、関数にしとけば汎用的に使えるから。
ま、自分の好きなようにすればいいんだけどね。
余計なお世話でした。

57:名無しさん@お腹いっぱい。
14/05/01 20:48:55.24 qa1QwwoW0
>>53
あ、それと、51の単純スクリプトでは
#UseHook
をつけています

58:名無しさん@お腹いっぱい。
14/05/01 20:49:57.20 qa1QwwoW0
>>56
なるほど。わかりました

59:名無しさん@お腹いっぱい。
14/05/01 21:02:45.87 zVOEGAu80
試しに仮想環境のXPで動作させたが左右クリックどちらも問題なし
他の原因じゃない?

#UseHook
RButton:: ;右クリック
Send, {LButton Down}
KeyWait, RButton ;右クリック
Send, {LButton Up}
return

60:名無しさん@お腹いっぱい。
14/05/01 21:05:42.90 /qkz+b020
>>50
スリープ入れてるんで負荷は高くないですよ

61:名無しさん@お腹いっぱい。
14/05/02 02:03:20.13 7XGn0wuj0
負荷云々もあるけど、DownしてからUpまで自前スクリプトでやるとスレッドひとつ消費。
イベント起きたときにWinから通知してもらう方がスマート。

ただ、人によっては複数イベントになって可読性が落ちると思う人もいるかもしれない。
また、#If の条件が変わってうまく Up が拾えなくなることもありうる

62:名無しさん@お腹いっぱい。
14/05/02 08:26:54.68 r3qrKYD/0
一行目以外どういうことだかわからん
すこしサンプル書いてみてよ

63:名無しさん@お腹いっぱい。
14/05/02 08:31:07.63 cTvWOU7b0
>>59
出社前にw
私の問題でした。どこドアというソフトで、2台のパソコンで1セットのマウスとキーボードで操作するようにしていたのでが、これを使わずにXP側のマウスでやってみたら問題なく動きました
原因はわかったのですが、どうしようかな。どこドアはとっても便利です。これを使いながら出来るようにはならないものか

どこドア
URLリンク(www.vector.co.jp)

64:名無しさん@お腹いっぱい。
14/05/02 11:12:44.37 IwysXfTJ0
マウス キーボード 共有 でググれば同機能のソフトは出てくるよ、ShareMouseおすすめ


コマンドラインだがahkスクリプトに直接ファイルD&Dだとスペース分断されるな、めんどい
Loop %0%
  MsgBox, %A_Index%
test.ahkにエクスプローラから "c:\hoge\ho ga.txt" を D&D → "c:\hoge\ho" と "ga.txt" に分断
test.exeにエクスプローラから "c:\hoge\ho ga.txt" を D&D → "c:\hoge\ho ga.txt"
プロンプトで >start test.ahk "c:\hoge\ho ga.txt" → "c:\hoge\ho ga.txt"
ショートカット "autohotkey.exe test.ahk" を作ってD&D → "c:\hoge\ho ga.txt"

XP & ANSI時代はうまくできてたような気がしたけど気のせいかな

win8.1 x64 / AHK v1.1.14.04 U64

65:名無しさん@お腹いっぱい。
14/05/02 11:43:44.61 xLPXqcei0
そのどこドアで他のPCにも同じようにahkは入ってるの?
たとえば1PCのなかにahk常駐してて、そのスクリプトが走ってても2PC目でahk走ってなかったらそりゃ動かないと思うけど
今リモートでほかのPCで遠隔側でもahk走らせたら遠隔操作上でもちゃんと動いたし

それとLbutton::のとこ
#USEHOOK
~Lbuttonか

~$Lbuttonにした方がいいんじゃね?

66:名無しさん@お腹いっぱい。
14/05/02 12:02:52.19 N9BWKBap0
>>64
8.3無効にしてるとかじゃないの

67:名無しさん@お腹いっぱい。
14/05/02 12:03:37.87 3dOAxsQ10
>>65
そっちの方がいいね
毎度~$の存在を忘れてしまうのをどうにかしないとw

68:名無しさん@お腹いっぱい。
14/05/02 14:13:03.69 IwysXfTJ0
>>66

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisable8dot3NameCreation"=dword:00000000
で8.3有効
PC再起動後に作ったファイルは "c:\hoge\ho~1.txt" なショートファイル名で取れました
ショート名付いてない既存ファイルは依然ちぎれたままだけど

既存ファイルのショート名作成はファイルコピーとかで一旦ファイル作り直しするしかないのかな

69:名無しさん@お腹いっぱい。
14/05/02 20:49:26.67 fBZxn1sS0
>>64
今日は簡単に
教えて頂いてありがとうございました
ShareMouseさっそくDLして使ってみようとしたのですが、私はパソコン2台モニタ3台なので最初少しだけ使えた後、フリーでは使えなくなってしまいました
なので、Mouse without Borders(MWBと略)をインストしてみましたよ
今までのどこドアでは、クリップボードの共有とかキャプチャー画像の共有が出来なかったのでこれは便利です。ところで話は戻って、下記のスクリプトを作って試してみました

ーーーーここからーーー
#UseHook
LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
MsgBox, aa
return

t::
Click
return
ーーーここまでーーー

パソコンA(Win7)でのみこのAHKを実行するとA上ではちゃんと動きます
で、AのみでこのAHKを実行した状態で、パソコンB(XP)で、
左マウスダウン → 動かす → 左マウスアップ
とするとアップしたときにB上ではなく、A上にMsgBoxが出てきました

パソコンB(XP)のみでこのAHKを実行した状態でB上で
左マウスダウン → 動かす → 左マウスアップ
をしようとすると、ダウンした瞬間にMsgBoxが出てきます
Aでは何も起きません
この症状は、MWBでもどこドアでも同じでした。サーバーはWin7、クライアントがXPです
あとはまた明日

70:名無しさん@お腹いっぱい。
14/05/04 13:34:41.28 L1f1T5ER0
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
 if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
  start /b %~dp0..\AutoHotkeyU64.exe %*
 ) else (
  start /b %~dp0..\AutoHotkeyU32.exe %*
 )
) else (
 start /b %~dp0..\AutoHotkeyU64.exe %*
)

バッチファイルで以上のようにして32bit、64bitで違う実行ファイルを起動させています
今はホットキーで上のバッチファイルを経由して実行しているのですが、これをAutohotkey上で関数にして他にも使いやすくしたいのですがどのようにすればよいでしょうか?

71:名無しさん@お腹いっぱい。
14/05/04 13:43:30.70 g4dKrEfX0
processrun("32bitで走らせたいパス","64bitではしらせたいパス")

関数

processrun("pass32","pass64"){
If(A_Is64bitOS = 0){
run,%pass32%
}else{
run,%pass64%
}
}


1つずつでいいならこんな感じじゃねーだろうか

72:名無しさん@お腹いっぱい。
14/05/04 15:56:25.36 F2/HchsM0
TargetString := Target[n]
IfInString, TargetString, %SearchString%

if RegExMatch(Target[n], SearchString)
は(全く)同じ動作をすると考えていいですか?

始めは前者で記述してたんですが、
なるべく余計な変数を使いたくないのと、
行数も少なくなる方が良いと思ったのです。

73:名無しさん@お腹いっぱい。
14/05/04 16:07:35.59 VFAb7GGD0
ならないよ、SearchStringの中に\などの正規表現解釈文字が含まれてると破綻する
単純に文字列比較したいなら Instr()使うといい

74:名無しさん@お腹いっぱい。
14/05/04 16:10:47.77 g4dKrEfX0
>>72
要するに
ターゲットの全文を持ってきて変数にぶち込んで必要な形にトリムする
のと
ターゲットを部分検索する
ってことだよな?

同じ結果が得られると思うよ。タイトルマッチモードが他に作用しない限りは

75:名無しさん@お腹いっぱい。
14/05/04 16:38:53.17 F2/HchsM0
>>72
Instr()の存在を忘れていました。

>>73
なるほど、分かりました。

SearchString内容は単純な文字列なので、
わざわざRegExMatch()使う必要ないようです。
今回はInstr()を採用します。

>>72>>74
ありがとうございました。

76:名無しさん@お腹いっぱい。
14/05/04 16:43:37.80 F2/HchsM0
>>75
訂正です。リンク先がめちゃくちゃなのでもう一度書き直します。

>>73
Instr()の存在を忘れていました。

>>74
なるほど、分かりました。

SearchString内容は単純な文字列なので、
わざわざRegExMatch()使う必要ないようです。
今回はInstr()を採用します。

>>73-74
ありがとうございました。

77:名無しさん@お腹いっぱい。
14/05/05 08:24:10.91 q8udfYz90
質問です
IEとChromeのみマウスジェスチャを有効にしたいのですがうまくいきません

SetTitleMatchMode Regex
#ifWinActive ahk_class Chrome_WidgetWin_1|IEFrame
{
Send, !{Left}
}
return
#ifWinActive

としたんですがどこか間違っているのでしょうか?
宜しくお願い致します

78:名無しさん@お腹いっぱい。
14/05/05 09:11:56.91 Yo/Jfk5V0
>>77
#IfWinActiveの使い方がおかしい
その書き方じゃ、ホットキーも指定せずいきなり{から書き始めてることになる

#IfWinActive ahk_class ~
(ジェスチャ)::Send, !{Left}
#IfWinActive

こんな風に書く
特定のホットキーラベルの中身を書いてるんだとしたら#は要らない

79:名無しさん@お腹いっぱい。
14/05/05 20:56:27.56 q8udfYz90
>>78
ありがとうございます
やってみたんですがエラー出たりしてうまくいきません

IfWinActive ahk_class Chrome_WidgetWin_1
←::Send, !{Left}
IfWinActive
return

こんな風に書いたんですが駄目でした
目的としてはChromeとIEで戻る(Alt+←)を使いたいです
宜しくお願い致します

80:名無しさん@お腹いっぱい。
14/05/05 21:41:48.54 Rps9M5Pm0
>>79
>>1のWikiとかよく読んだ?
URLリンク(sites.google.com)

どのキーを押した時にAlt+←を発動させたいの?
←が移動キーの左ということなら

left::send,!{left]

81:名無しさん@お腹いっぱい。
14/05/05 21:43:52.02 Rps9M5Pm0
最後が ] になってるや } に変更しといて。

82:名無しさん@お腹いっぱい。
14/05/05 21:45:00.82 Q352F66l0
チマチマせずにMGL使えば良くない?と思った

83:名無しさん@お腹いっぱい。
14/05/05 21:52:09.15 Rps9M5Pm0
ああ、前レスを読んでなかった、マウスジェスチャーでやりたいのか
>>82のいうとおりMGL使ったほうがいい。
自分で一から作ろうなんて無謀なことは考えないほうがいい。

84:名無しさん@お腹いっぱい。
14/05/05 22:28:35.50 xZGlJQxj0
>>71
ありがとうございます
A_Is64bitOSなんて組み込み変数があったのですね、AutoHotkeyJpで見つからなかったのでないと思っていました

呼び出しを以下のようにしたらとりあえず希望のとおりに動きました
processrun(A_ScriptDir . "32bit相対パス",A_ScriptDir . "64bit相対パス")

""の中に%A_ScriptDir%だと動かなかったので、式のところを見てやったのですが、文字列をつなげるのは上のようにスペースドットスペースという形式でいいのでしょうか?

85:名無しさん@お腹いっぱい。
14/05/05 22:29:53.25 q8udfYz90
わかりました
MouseGestureLでやってみます
ありがとうございました!

86:名無しさん@お腹いっぱい。
14/05/05 23:17:03.31 Eh50B3Id0
foo = あいうえお
bar = かきくけこ

これを二重引用符で囲って間に半角スペースを入れて連結させるとき

baz = "%foo%"
baz = %baz% "%bar%"

または

baz := """" foo """"
baz .= " """ bar """"

どっちのやり方が好き?

87:名無しさん@お腹いっぱい。
14/05/05 23:28:17.53 Eh50B3Id0
実際の用途は受けを取った引数を別のアプリに渡して起動させるランチャー用に考えてるんだけど

88:名無しさん@お腹いっぱい。
14/05/05 23:35:54.07 i2WSev140
"""" ←これ嫌い
なるべくChr(0x22)とか使う

89:名無しさん@お腹いっぱい。
14/05/05 23:41:56.44 Q352F66l0
文字コードよく分かんね

90:名無しさん@お腹いっぱい。
14/05/05 23:55:32.50 Eh50B3Id0
>>88
まーね、不格好だよね

Loop, %0% {
Args .= (A_Index = 1) ? Chr(34) %A_Index% Chr(34) : A_Space Chr(34) %A_Index% Chr(34)
}

じゃあこれにしようかな

91:名無しさん@お腹いっぱい。
14/05/06 01:01:12.30 3B/AqWI60
> 905 名前:名無しさん@お腹いっぱい。:2014/04/04(金) 18:25:26.58 ID:EmtUIrig0
> Quote := """"
> var := Quote . "hoge" . Quote
>
> 引用符の扱いはこんな感じでやってる

Chr(0x22)よりこっちのがいいな
俺はNotepad++のシンタックスハイライトで読みやすくなるから変数名を「A_Quote」にしてるけど

92:名無しさん@お腹いっぱい。
14/05/06 03:08:11.40 vT/Lnlck0
個人的に「=」は好きじゃないので「.」で結合する
式がシンプルなら """" を使うけど、複雑になるなら >>91 かな
Chr() は可読性が低いのであまり使いたくない

93:名無しさん@お腹いっぱい。
14/05/06 08:06:46.18 e0U3iwgZ0
エディタの設定で""を強調表示して使ってるわ
複雑になるとどうやってもわかりにくいけどね
Chr()使うなら中身は16進で指定だな、文字コードの10進表記はいまいち気持ち悪い

>>84
スペースドットスペースでもいいし ドット無しでスペース一個でもおk

94:名無しさん@お腹いっぱい。
14/05/06 16:05:01.49 56OqLCg70
exe化する時、バージョン情報がAHKのバージョンになりますが、
任意のバージョン番号を与えることって出来ますか?

95:名無しさん@お腹いっぱい。
14/05/06 16:38:16.27 n+W8xGjR0
>>94
Resource Hackerで変更する

【質問】
Numpad0 Up::Send, {Numpad0}
Numpad0 & Numpad3::処理
このように「Numpad0」を修飾キーにしてるため、テンキー0のキーリピートが効かなくない

キーリピート出来るようにするにはどうすればいいですか?

96:名無しさん@お腹いっぱい。
14/05/06 16:48:05.06 n+W8xGjR0
>>95の質問ですけど、誤爆が激しくなりそうなので質問を取り下げます(メインキーの0使い増すんで)
あと、どうでもいいけど、「キーリピートが効かなくない」は「キーリピートが効かない」の間違いでした

とにかく、スレ汚し澄みませんでした

97:名無しさん@お腹いっぱい。
14/05/07 23:11:58.00 fr/lZFde0
前スレ>>952ですが、悪化したようです
400個ほどのファイルをリネームしようとしたらパソコンがフリーズしました……

98:名無しさん@お腹いっぱい。
14/05/07 23:33:35.18 QwFuX1aK0
>>96
ていうかそれ、アップローダーのNewOSMで全部解決してる気が……

99:名無しさん@お腹いっぱい。
14/05/08 01:13:03.90 U9WEUh+g0
ウィンドウタイトルバーのクラス的なものを取得する方法ってなかったですかね?
具体的にはタイトルバー上で右クリックしたりミドルクリックすることでアクションを発生できるような。

100:名無しさん@お腹いっぱい。
14/05/08 01:17:43.47 3zhXVqi40
>>99
超簡単な方法はマウスジェスチャーLにお任せ
一応は指定できるけどクリック関係ならそれが一番手っ取り早い

指定はできるはずだがやり方は忘れた

101:名無しさん@お腹いっぱい。
14/05/08 02:05:11.80 5Yw3w92c0
>>97
RegularRenamerってファイルリネームして即終わるアプリでしょ
RunWaitで終わるまで待ってやるんじゃダメなわけ?

つかAHK内でFileMoveでリネームするのはどうよ
Unicode版ではダメ文字もなくなったしRegExReplace()も使えるから
外部アプリに頼らなくてもいいんでね


>>99
↓のMUS_GetTitleBarPos() あたり
URLリンク(www6.atwiki.jp)

102:99
14/05/08 13:18:38.89 U9WEUh+g0
>>100
>>101
ありがとうございます、やってみます。

103:名無しさん@お腹いっぱい。
14/05/08 19:55:27.42 i7jGPQu60
>>95に関連する(逆の?)質問なんすけど…
>>95を例にして説明すると、
長押しでキーリピートしないのは良いんだけど、長押しからリリースした瞬間「0」が1個入力されてしまうのは困る。
修飾キーとして使おうと思って「0」キー押したが暫く考えてやっぱり止めた…という時に「0」が入力されないようにしたい。
こんな場合どう書けば良いの?

Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 Return
}else{
 Send, {Numpad0}
}
Return

としても「0」が入力されてしまい、だめだったです。

104:名無しさん@お腹いっぱい。
14/05/08 21:02:30.22 ysVxZ42V0
>>103
スクリプトの実行ログ見れば分かると思うが、キーリピートが最後に実行されている。
リピート止めていないのが原因。
それとは別に、フックを使わないとSendにも反応して無限ループする。ダメな例:Numpad0::Send,{Numpad0}

#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 KeyWait, %A_ThisHotKey%
 Return
}else{
 Send,{Numpad0}
}
Return

105:名無しさん@お腹いっぱい。
14/05/08 21:55:15.60 3zhXVqi40
ていうか修飾キーとして&使っちゃうと元のキーとしての機能が失われるんよ。それはAHKの仕様

だからGetkeystateで分岐するほうが問題が少ない。
Numpad0の機能は殺して、Numpad0 upでsend,0するのは正しいけど、こうしないとダメ

Numpad0::
keywait,Numpad0
return

Numpad0 up::
if{flag==1){
flag:=0
}else{
send,{Numpad0}
}

Numpad0+Numpad3で処理をさせたいなら

Numpad3::
if (getkeystate("numpad0","p")){
flag:=1
処理
}else{
send,{Numpad3}


でやるべき。
&使うのはもともと修飾キーだったwinやaltやctrlやshiftのほうがいいぞ

106:名無しさん@お腹いっぱい。
14/05/08 21:59:27.79 i7jGPQu60
>>104
レスありがとう。
>>104単独ではうまく行くのですが、>>103の目的が達成されません。

#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
 KeyWait, %A_ThisHotKey%
 Return
}else{
 Send,{Numpad0}
}
Return
;例として[Numpad0]+[Numpad3]で「a」を送る
Numpad0 & Numpad3::Send, a

こうすると長押しでも「0」が送られます。
なかなか難しいすね。

107:名無しさん@お腹いっぱい。
14/05/08 22:06:51.61 3zhXVqi40
てかうpろだのNewOSM落として改造してみては?

Numpad0::Hotkey(1,0)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::("{blind}{Numpad3}","処理ラベル")

処理ラベル:
処理
return

とか

108:名無しさん@お腹いっぱい。
14/05/08 22:16:20.32 i7jGPQu60
>>105
レスありがとう。
修飾キー以外もいじる必要あって何かかなり複雑になるみたいすね。

>>104-105
素直に普通の修飾キー使うか、
長押しでキー送られても問題ない状況でこういう修飾キー使おうと思います。

109:名無しさん@お腹いっぱい。
14/05/08 22:16:58.89 3zhXVqi40
ちがった。こうか
ちょっと関数分かりにくいなコレ

Numpad0::Hotkey(1,1)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::Keypush(,"aaa")

aaa:
msgbox,A
return

110:名無しさん@お腹いっぱい。
14/05/08 22:24:54.73 i7jGPQu60
>>107
参考にさせてもらいます。
ありがとう。

111:名無しさん@お腹いっぱい。
14/05/08 23:22:35.63 ysVxZ42V0
>>ID:i7jGPQu60
何が聞きたいのかハッキリしてほしいな、コンビネーションキーの事も聞いていたのか。
普段使わないF13等のキー以外はコンビネーションキーの機能で割り当てない方がいい。
#Ifを使えばキー機能無効化せずに割り当てできる。

#UseHook

Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel) {
 KeyWait, %A_ThisHotKey%
}else{
 Send,{Numpad0}
}
Return

#If GetKeyState("Numpad0","P")
Numpad3::Send, a
#If

112:名無しさん@お腹いっぱい。
14/05/08 23:52:54.28 i7jGPQu60
>>111
>>103>>95を例に質問したつもりだったんですけど、分かり難かったみたいでスンマセン。
要は、修飾キーにしたテンキー0を押してそのまま何キー(テンキー3)も押さないで
暫くしてテンキー0を放した時に「0」が送られないようにしたいと言う質問でした。

>>111のコードで目的が達成できたと思います。
ありがとう。

113:名無しさん@お腹いっぱい。
14/05/09 04:10:30.55 7zmMXcCb0
>>2
必要

114:名無しさん@お腹いっぱい。
14/05/09 12:39:01.16 ya11hfko0
>>109
作った人だけどたしかに区切り多くて難しいカモ
うーんどうしよう……なんかいい方法ないかな

115:名無しさん@お腹いっぱい。
14/05/09 17:20:32.76 z0hMhqvm0
タスクトレイでNumlockとかの状態が見れるスクリプトってどうすればいいんだろう
わざわざキーボードのランプ見たくない

116:名無しさん@お腹いっぱい。
14/05/09 19:00:23.13 WMN9Yo2t0
>>115
Numlockの状態はGetKeyStateで取得できる
タイマー監視して状態変化時にトレイアイコン変更すれば一応目的は達成できる

117:名無しさん@お腹いっぱい。
14/05/09 19:00:39.95 szsV1knE0
>>115
タイマーでキー状態を取得してアイコン切り替えるだけ、簡単だから自力で作れ。

118:名無しさん@お腹いっぱい。
14/05/09 19:14:07.03 fLWGwM3W0
#NoEnv
って今のPCだとあんま体感できんよね
それでもプラシーボ効果で軽くなった気がして付け加えてしまう

119:名無しさん@お腹いっぱい。
14/05/09 19:18:18.29 z0hMhqvm0
NumLock::
If(GetKeyState("NumLock","T") == 0)
{
SetNumLockState, on
Menu,Tray,icon,icon0
}else{
SetNumLockState, off
Menu,Tray,icon,icon1
}
keywait,%A_ThisHotkey%
return

タイマーすら必要なかったありがとう

120:名無しさん@お腹いっぱい。
14/05/09 21:37:44.33 LG6g55C60
教えて下さい
質問文が長いので分割させていただきます

array1 := Object()
array2 := Object()

array1[1] := "hoge"
array2[1, 1] := ["あああ", "いいい", "ううう"]
array2[1, 2] := ["かかか", "ききき", "くくく"]

array1[2] := "hage"
array2[2, 1] := ["わわわ", "ををを", "んんん"]

(実際は更に続く)

上のよう設定としてにスクリプト内に直に書いてた物を
iniファイルから読み込むようにしようかと改造中なんですが
行き詰まってしまいました

次のレスへ

121:名無しさん@お腹いっぱい。
14/05/09 21:39:34.82 LG6g55C60
>>120からの続き

----- Config.ini -----
[hoge]
1=あああ, いいい, ううう
2=かかか, ききき, くくく

[hage]
1=わわわ, ををを, んんん
-----------------------

次のレスへ

122:名無しさん@お腹いっぱい。
14/05/09 21:40:22.88 LG6g55C60
>>121からの続き

array1 := Object()
array2 := Object()

IniRead, Section, %A_ScriptDir%\Config.ini
Loop, Parse, Section, `n
{
 n1 := A_Index
 array1[n1] := A_LoopField
 Loop,
 {
  n2 := A_Index
  IniRead, key, %A_ScriptDir%\Config.ini, % array1[n1], %n2%
  array2[n1, n2] := key
  if (key = "ERROR") {
   break
  }
  MsgBox, % n1 "-" n2 "`n" key "`n" array2[n1, n2] ;(1)
  Loop, Parse, key, `,
  {
   array2[n1, n2, A_Index] := A_LoopField ;(2)
  }
 }
}
MsgBox, % array2[1, 1, 1] ;(3)

(1)でarray2[n1, n2]には確実にデータが入ってるのですが
(2)でarray2[n1, n2, A_Index]にデータが入らないらしく
(3)で見ると空っぽなのです(「あああ」と表示して欲しい)
何処が間違ってますか?

123:名無しさん@お腹いっぱい。
14/05/09 22:08:45.36 LG6g55C60
>>122の一部修正します
Loop, Parse, key, `,
     ↓
Loop, Parse, key, `,, %A_Space%

124:名無しさん@お腹いっぱい。
14/05/09 22:23:08.63 rWPBh27L0
画像ファイルのサイズ(ピクセル)を取得するにはどうしたらいいですか?

125:名無しさん@お腹いっぱい。
14/05/09 22:36:29.31 EsjgkGB60
>>120-123
array2[n1, n2] := key
の時点で array2[n1, n2] が文字列になっているのが原因じゃないかな
その行を消したらきちんと代入されたよ

126:名無しさん@お腹いっぱい。
14/05/09 23:36:21.61 LG6g55C60
>>125
120-123です
期待通りの結果になりました
これで設定をiniファイルに移すことが出来ます
ありがとうございました

127:名無しさん@お腹いっぱい。
14/05/10 00:10:07.21 qsKirAso0
>>126
勝手にまとめ

obj1 := Object()
MsgBox, % obj1[1] := "あ" ;あ
MsgBox, % obj1[1, 1] := "い" ;失敗
MsgBox, % obj1[1, 1, 1] := "う" ;失敗

obj2 := Object()
MsgBox, % obj2[1, 1, 1] := "う" ;う
MsgBox, % obj2[1, 1] := "い" ;い
MsgBox, % obj2[1] := "あ" ;あ

128:名無しさん@お腹いっぱい。
14/05/10 00:12:12.67 qsKirAso0
続き
MsgBox, % obj2[1, 1, 1] ;失敗
MsgBox, % obj2[1, 1] ;失敗
MsgBox, % obj2[1] ;あ

129:名無しさん@お腹いっぱい。
14/05/10 00:32:49.29 qsKirAso0
>>124
画像の高さ/幅取得
裏でGUI作成、サイズ取得して破棄。

Gui, Add, Picture , vPID, パス/ファイル名
GuiControlGet, Var, Pos, PID
MsgBox % VarW "`n" VarH
Gui, Destroy
Return

130:名無しさん@お腹いっぱい。
14/05/10 01:01:44.02 RxoB4pdU0
>>129
ありがとうございます
こんな手があったとは思いもよりませんでした!

131:名無しさん@お腹いっぱい。
14/05/10 01:17:11.26 o1LpG6D90
>>130
URLリンク(www.autohotkey.com)
URLリンク(www.autohotkey.com)
URLリンク(www.autohotkey.com)
このあたり参考にするといいかもね
>>129の方法も紹介されてる
大量の画像のサイズ取得とかだと結構取得時間に差が出るから色々試してみるのもいい

132:名無しさん@お腹いっぱい。
14/05/10 13:35:03.99 oFUi44ng0
Gui, Add, DropDownList 
で、1-100くらいまでの数字を表示させたいんですが、
1つずつ打っていくしか手はないのでしょうか?
正規表現もここでは使えないぽくて…

133:名無しさん@お腹いっぱい。
14/05/10 14:14:39.55 ap1Tu+d00
Loopで回せばいいんちゃう?

134:名無しさん@お腹いっぱい。
14/05/11 13:42:56.32 h/TY4HtP0
>>118
#NoEnvはメモリ効率向上というより誤爆よけだと思うけど
関数やローカル変数がなかった頃は よくpath、tmpあたりのグルーバル変数をうっかり作って
おかしな結果になってたわ

135:名無しさん@お腹いっぱい。
14/05/11 23:21:57.57 JVnyrOhh0
キーボードショートカットで、
Windowsの普通のMDIアプリケーションの親ウィンドウをスクロールさせたいのですが可能でしょうか?
たいていのMDIアプリケーションって、マウスのスクロールホイールに反応しませんよね?

136:名無しさん@お腹いっぱい。
14/05/11 23:56:51.19 EhWXXYjv0
>>135
他の人でも試せるように具体的にどれのことを言ってるのか書いてほしい。

137:名無しさん@お腹いっぱい。
14/05/12 00:32:15.79 Ui9fdhIL0
>>136
こういうタイプのアプリです(これはテキストエディタ)
URLリンク(www.vector.co.jp)

親ウィンドウがあり、新規ドキュメントで、親ウィンドウの中に子ウィンドウをつくります
子ウィンドウが親ウィンドウをはみでると、親ウィンドウにスクロールバーがでます

私がやりたいのは、この親ウィンドウのスクロールバーを
ショートカットキーや、特定のキー+マウスホイール上下左右に動かしたいんです

私が実際にやりたいのは市販の音楽ソフトなのでみなさま試せないので
シンプルな昔ながらのMDI型のテキストエディタを例として挙げさせていただきました
Windows7や8でも動きます。

138:名無しさん@お腹いっぱい。
14/05/12 01:41:33.64 IiDkPInT0
リダイレクトホイールの要領で行けると思う

MDIの背景領域のクラスを取得して
WM_MOUSEWHELL(0x20A, 0x20E)
WM_HSCROLL(0x114) /WM_VSCROLL(0x115)
あたりをSendMessageで投げる

139:名無しさん@お腹いっぱい。
14/05/12 03:27:27.43 JG1NZim90
>>137
親    Send、ControlSend ahk_parent有無
親、子 対象のClass調べて SendMessage

あとは動かすキー操作送るだけ。
もちろん動くか動かないかはアプリの仕様次第。

140:名無しさん@お腹いっぱい。
14/05/12 09:49:16.22 IhZH/lvP0
>>138 >>139
ありがとうございます!
でも>>137のアプリでも自分が試したいアプリでも、うごかないっす。。。orz

とりあえず>>137のアプリの親ウィンドウのスクロールバーをなんとか動かせないでしょうか?

試し方ですが、>>137のアプリで、ファイル>新規作成 をしてドキュメント(子ウィンドウ)を作って
親ウィンドウからはみだすように配置すると、親ウィンドウにスクロールバーが出ます。
2つ新規ドキュメントを作って下と右にはみだすように配置すれば親ウィンドウの右と下にスクロールバーがでます。
そのスクロールバーを動かしたいのです。
キー送信しても子ウィンドウのスクロールバーしか動かないのです。。。。

MDI親ウィンドウの外側のスクロールバーは、PgUpやPgDnやマウスのスクロールホイールなどでは動かないのですが、それでもAHKで動かすことはできるのでしょうか?
スクロールバーにマウスクリック送信とかの裏技的やりかたをしないと厳しいでしょうか?

141:名無しさん@お腹いっぱい。
14/05/12 12:46:47.72 IiDkPInT0
MdiCliantの場合はスクロールクラスをしてやるほうがいいっぽい
とりあえずこの辺を参考にしてみて

WheelScroll U32/64対応版
URLリンク(www1.axfc.net)

142:名無しさん@お腹いっぱい。
14/05/12 18:02:04.45 JG1NZim90
>>140
スクロールバーを特定できないなら
座標か画像認証で▲まで瞬間移動してクリック送信

スマートじゃないから最終手段だが・・・。

143:名無しさん@お腹いっぱい。
14/05/12 20:39:20.50 3Gga6I5m0
>141
WheelScrollの最新版ていつもどのあたりで入手できるんでしょうか?

144:名無しさん@お腹いっぱい。
14/05/12 22:06:39.75 RCC9MozX0
>>143
WheelScroll.ahk の改造版である「WheelAccel」なら
URLリンク(code.google.com)
URLリンク(code.google.com)
これ↑の中に入ってる。

ここのWheelAccelのアップデート版が存在するのかは知らない。
例え存在しなくても自分でスクリプト手直し出来るんだから問題ないでしょ?(やる気が有るか無いかは別)

145:名無しさん@お腹いっぱい。
14/05/12 23:37:05.89 IiDkPInT0
>>143
スレ内でホイールやスクロール系の質問が来た時に保存期間の長いあぷろだに適当に上げてます
前は IME.ahkとかと一緒の @wikiのftpサーバーに置いてたんだけど
ハッキング騒ぎでウィルス怖い書き込みがあったので

>114にある通りMouseGestureLにはGesture組込み用のWheelAccel改が同梱されてるっぽく今はそっちが主流な感じかな
一応 WheelScrollにもWheelAccelの機能は盛込み済だけどMouseGestureLとの連携は考慮してないもんで

146:名無しさん@お腹いっぱい。
14/05/13 20:37:09.69 MuYqfOSW0
寝落ち用に作っているのだけれど
A_TimeIdlePhysicalでタイマーセットして
Run, %ComSpec% /c powercfg -x -monitor-timeout-ac 1
これで電源オプションのディスプレイの電源を切るまでの時間を1分に変更して
スクリプトが終了するときに元の間隔に戻すという感じにしてて
不意に電源がオンになっても1分で切れるようにまではできたけど
これをなんとか1分未満、秒単位に出来る方法はないかな

147:名無しさん@お腹いっぱい。
14/05/13 21:01:21.66 /QEGGUrc0
>144 >145
ありがとう、参考になりました!

148:名無しさん@お腹いっぱい。
14/05/13 21:39:17.17 rG8Z6GDo0
>>146
SendMessage, 0x112, 0xF170, 2,, Program Manager ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER.

149:名無しさん@お腹いっぱい。
14/05/13 21:41:38.80 MuYqfOSW0
ちゃうねん
電源の状態を確認してオンだったらオフる動作をしたいねん

150:名無しさん@お腹いっぱい。
14/05/14 01:59:44.61 RkcpF9pr0
画面の縦が狭いノートをずっと使っているんだが、
画面の一番下をクリックするとタスクバーが消える/表示をトグルする単純なスクリプト作ったがとても便利
もっとはやくつくればよかったw

151:名無しさん@お腹いっぱい。
14/05/14 02:12:27.70 fk1aU+Mo0
タスクバーを自動で隠すのとどう違うの?

152:名無しさん@お腹いっぱい。
14/05/14 02:18:11.49 RPGHyF0D0
自動で隠すと、出てほしくない時に出てきたりするからすごい邪魔なときある

153:名無しさん@お腹いっぱい。
14/05/14 02:25:08.19 62OzpCou0
そもそもタスクバーがなくなったら困らないかという気もしなくもない俺のタスクトレイはインジケーターまみれ

154:名無しさん@お腹いっぱい。
14/05/14 03:54:57.10 /HIG7Vl00
さいしょAHKで試行錯誤してたけど
俺は「タスクバーをほかのウィンドウの手前に表示する」のチェックを外すだけで解決した

155:名無しさん@お腹いっぱい。
14/05/14 08:08:37.26 DM5mvBPn0
うちは横置き&小さいタスクバーボタン
アイコンだけじゃなくウィンドウタイトルも表示されるので分かりやすい

156:名無しさん@お腹いっぱい。
14/05/14 13:40:45.04 ryadNrAh0
どうしてもやり方が分からないので知りたいのですが。
bmpでボタン作りたいのですがやり方どうすれば良いのでしょう?

別窓では無くイメージとしては アプリ開いている状態で画面の一部にbmpを上乗せして(濃度%いじれると良い)
クリックするとsend遅れたりするけどフォーカスは下のアプリの方(使っているアプリ)のままって感じですね。
bmp表示する方法は分かってもボタン化が分からないんですよね・・・

157:名無しさん@お腹いっぱい。
14/05/14 14:59:05.43 txyddDiZ0
マウスオーバーでgui時に判別が基本だろうけど

ていうかそういうのってもうビジュアルベーシックとかCのほうが早くねぇか?

158:名無しさん@お腹いっぱい。
14/05/14 15:46:22.32 /fXX0Y8P0
AHKでファンクションキーが使えるのか
で、私は使えたのですが、ここにこんな記述がありますねえ
これって誰が書いているのでしょうか。ちょっとびっくりです
ちなみに、ファンクションキーは普通に
F10::
Send, {F10}
return
などで出来ますよねえ。何か別の意味があるのでしょうか

URLリンク(autohotkey.blog.fc2.com)

159:名無しさん@お腹いっぱい。
14/05/14 15:48:30.51 ryadNrAh0
どちらも疎いので・・・何とか分かる範囲でコレで行けるならこれでやれればなと言うのも有りまして。

160:名無しさん@お腹いっぱい。
14/05/14 15:52:29.82 RPGHyF0D0
>>158
重大な勘違いしてる

161:名無しさん@お腹いっぱい。
14/05/14 15:56:27.54 NeDEmuCb0
>>158
ノートパソコンて知ってる?

162:名無しさん@お腹いっぱい。
14/05/14 16:08:24.99 /fXX0Y8P0
ああ、ひょっとして、F1からF12のことではなくて、キーボードの左手前にあるFnキーのことですか
なんかありましたねえ
Fn(ファンクション)キーってわざわざファンクションとかって書いてあるし、なんかややこしい
もう少しちゃんと書いてほしいです
でもよくわかりませんが

1.人がキーを押す
2.キーボードが押されたキーの情報をパソコンに送信する
3.パソコン(Windows)が受け取る
4.Windowsが対象ウィンドウにキー情報を送る
5.AutoHotkeyが暗躍する
6.ウィンドウがキー情報を受け取って反応する

本来この順でキーを押したことがウィンドウに通知されますが、
2でキーボードが「Fnキー+○キーは×キーにする」という処理を行います。
Windowsが受け取るのは×キーのキー情報だけでFnキーや○キーのキー情報はWindowsには届きません


と書いてあります。では、この処理後の×キーのキー情報で動作を行うことって出来ないのかな
まあ、Fnキーは使うことはないと思うので余計なお世話かもしれませんが

163:名無しさん@お腹いっぱい。
14/05/14 17:09:57.46 t46m9pW+0
gui,add,pictureの縮小拡大でアルゴリズムの指定はできないの?
サイズ変えると糞きったなくなるんだけど

164:名無しさん@お腹いっぱい。
14/05/14 17:54:19.83 HUSPdTgC0
>>159
ラベル指定すると画像クリックしたときの動作を指定できるけど
それじゃ駄目なのけ

>>162
できると思うよ

165:名無しさん@お腹いっぱい。
14/05/14 20:28:20.50 fDgDPOOw0
トリガーキーのトグル動作でキーリマップを切り換えるスクリプト作成中なんですが、
リマップAからリマップBにした時、何らかの視覚情報で知らせられたらと思っています。

一応、リマップBにした時にタスクトレイにアイコンを表示するだけのスクリプトを走らせ、
リマップAに戻した時そのスクリプトを終了する、というのは出来たのですが、
それよりもCaretの色または太さを変える方がより視認性が高いのではないかと思い始めました。

そこで質問です。
Caretの色または太さはどうすれば変更できるんでしょうか?
また、この他にアイデア有りましたら教えていただけないでしょうか。

166:名無しさん@お腹いっぱい。
14/05/14 21:17:19.20 Tl56DF4L0
tooltipで表示するのがいいんでない?
俺は何かを切り替える系での告知はtooltipでやってる

167:名無しさん@お腹いっぱい。
14/05/14 21:42:41.64 DM5mvBPn0
>>165
なまずIME あたりが参考になるかも
中見てないけどAHKにはキャレットをカスタマイズする機能は(たぶん)ないので
GUIでキャレット位置に貼り付けてるんじゃないかな

168:名無しさん@お腹いっぱい。
14/05/14 22:12:33.98 fDgDPOOw0
>>166-167
回答ありがとうがざいました。

>キャレットをカスタマイズする機能は(たぶん)ないので
そうですか、わかりました。

なまずIMEのスクリプト流し読みですが、ちょっと見かなり複雑な処理してる見たいですね。

お二人の意見を参考にスクリプト書いてみます。

169:名無しさん@お腹いっぱい。
14/05/14 22:48:46.91 DM5mvBPn0
>>156
よくわらんがGui,Add,Buttonの上に Gui,Add,Picureでbmp貼って
GuiControlでbmpをDisableにしとけばいいんちゃう?
透明指定は WinSet,Trans とか WinSet,TransColor あたり

ボタンの形のbmp使うからButtonオブジェクトいらんってことなら
OnMessage() でWM_LBUTTONDOWNイベント発生させる

170:名無しさん@お腹いっぱい。
14/05/14 23:11:01.08 2sIhPzGT0
#ClipboardTimeoutの値を一つの処理(スレッド?)でのみ変更する方法ってありますか?

171:168
14/05/14 23:44:02.72 fDgDPOOw0
以下のようにしてCaretの位置へToolTip表示させれるようになったのですが、
秀丸エディタではCaretの位置へToolTip表示させることが出来ませんでした。(ウインドウ枠の所に表示される)
秀丸エディタでは無理なんですかね?
それから、ToolTipを半透明で表示させることって出来ますか?

;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 1000
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
Indicator_ToolTip:
CoordMode, ToolTip, Relative
CoordMode, Caret, Relative
ToolTip, ., A_CaretX - 10, A_CaretY - 16
CoordMode, ToolTip, Screen
CoordMode, Caret, Screen
return

172:名無しさん@お腹いっぱい。
14/05/15 00:56:11.64 gvWGefzm0
>>164,169

ん!
何となく分かった気がしますありがとう御座います。
頑張ってみます

173:名無しさん@お腹いっぱい。
14/05/15 02:48:10.08 smf5mgep0
>>162
> 処理後の×キーのキー情報で動作を行う
はできるけど、もとの×キーの動作も変えてしまう
Fn単独の動作を変更できたら便利だけど、AHKではできないって意味だな
FnキーのFnがfunctionだから(ファンクション)と書かれてるのも間違ってないな
ということで君がおばかさんだったってことだ

174:168
14/05/15 04:19:57.92 2vMbrIyM0
以下のように改良して秀丸エディタでも確認できるようになりました。

;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 500
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
;ウインドウ枠左端に縦長のToolTipを表示(ウインドウに追従し、ウインドウサイズによりToolTip縦サイズを調整する)
Indicator_ToolTip:
WinGetPos, X, Y, Width, Height, A
c := Round(Height/22)
Loop, %c% {
str .= "`n"
}
ToolTip, % str, X, Y + Round(Height/5)
str := ""
return

175:名無しさん@お腹いっぱい。
14/05/15 04:22:58.12 2vMbrIyM0
>>174
名前覧の168は>>171が正しいです。

176:名無しさん@お腹いっぱい。
14/05/15 21:34:12.75 x+Bh3TdJ0
昔はTooltipとかキャレットとかやったけど今はSoundBeep使って音階で識別してる

というのもトグル状態の確認が必要で情報表示するけど、
うざくて消したくなるから一定時間で消すような仕込みをした
でも一定時間操作してないと状態がどうなってるかよく分からなくて
再度キー押したりして本末転倒になった

今はやりたい操作は指連打と音で判断するようにしてる

*vk1Dsc07B::KeyCounter()

KeyCounter() {
 global $KeyMap
 static keyCount
 ListLines, Off
 $KeyMap:=keyCount:=(A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) ? keyCount+1 : 1
 SoundBeep, $KeyMap * 400, 10
 KeyWait, % RegExReplace(A_ThisHotkey, "^\W+", "")
 $KeyMap:=0
}

#if ($KeyMap = 1) ;
 h::Left
 j::Down
 k::Up
 l::Right
#If ($KeyMap = 2)
 ; Home, End, PgUp, PgDn とか
#If ($KeyMap = 3)
 ; WinMoveとか

177:名無しさん@お腹いっぱい。
14/05/17 20:17:48.37 CGpqRpBF0
このように書けば問題ないのですが、表示名が「TestToggle&Check」じゃなく、「TestToggle Check」と「半角空白」を使いたいのです
Menu, tray, add, TestToggle&Check
TestToggle&Check:
Menu, tray, ToggleCheck, TestToggle&Check
Return

でも、ラベルに半角空白含む名前は使えないらしくエラーになります
Menu, tray, add, TestToggle Check
TestToggle Check: ;<<<<<ここでエラーになる
Menu, tray, ToggleCheck, TestToggle Check
Return

何とかメニュー名に「半角空白」使えませんかね?
「全角空白」では間延びしたような見栄えでちょっとよくないです
無理なら諦めます

178:名無しさん@お腹いっぱい。
14/05/17 21:22:07.01 aSpGMjn80
A_Space

179:名無しさん@お腹いっぱい。
14/05/17 23:08:57.41 CGpqRpBF0
>>178
レスありがとうございます
すいません、どうしても分かりません。
間違ってる所を指摘して下さい

Menu, tray, add, TestToggle%A_Space%Check ;<<<<<ここでエラーになる
TestToggle%A_Space%Check:
Menu, tray, ToggleCheck, TestToggle%A_Space%Check
Return

180:名無しさん@お腹いっぱい。
14/05/17 23:18:18.07 JvJaXAuL0
URLリンク(ahkwiki.net)

ちゃんとラベル指定しろ

181:名無しさん@お腹いっぱい。
14/05/17 23:47:50.76 CGpqRpBF0
>>108
ありがとうございます
解決しました

一応そのwikiのサンプルコード使って格闘してたんですが
そのコードに肝心の「Menu, tray, add, MenuItemName, Label」の例が無く
メニュー名=ラベル名になるものと思い込んでいました

182:名無しさん@お腹いっぱい。
14/05/18 14:13:52.93 azfgwDu90
MGLスレかどっちか迷ったんだけど、こっちで質問。

キーのリマップスクリプト(ホットキー)を一時的に無効化するのに「Suspend」使うと思うけど、
リマップスクリプトをMGLのプラグインとして使ってると、他プラグインと共にMGLがSuspendしてしまう。

他プラグインとMGLに影響出ないようホットキーのみ一時的に無効化させる方法何か有る?
あ、MGLは再起動させたくないです。

183:名無しさん@お腹いっぱい。
14/05/18 14:28:08.85 SkEzxV/c0
何らかのキー::
if(flag_hotkey <> 1)
 flag_hotkey = 1
else
 flag_hotkey =
return

#if (flag_hotkey)


ホットキー、
キーリマップ


#if

184:名無しさん@お腹いっぱい。
14/05/18 16:02:07.69 azfgwDu90
レスサンクス。
でも、パターン(1)の場合、「#If (flag_hotkey)」は無視されてうまく行かない。
で、パターン(2)のようにすれば問題なく動く。
しかし、「#If (flag_c) && (flag_hotkey)」みたいに一つ一つ書いていくのはつらい。
何か簡単な方法ないものか。

flag_hotkey := 0
flag_a := 1, flag_b := 1, flag_c := 1, flag_d := 1
return

;パターン(1)
#If (flag_hotkey)
#If (flag_a)
a::MsgBox, a
#If (flag_b)
b::MsgBox, b
#If

;パターン(2)
#If (flag_c) && (flag_hotkey)
c::MsgBox, c
#If (flag_d) && (flag_hotkey)
d::MsgBox, d
#If

185:名無しさん@お腹いっぱい。
14/05/18 16:36:22.04 SkEzxV/c0
わかりにくかったかな。例えば以下のようにすると、
ctrl+spaceを押すと#ifで囲まれているホットキーがonになってもう1回押すとoff(サスペンド)
ONOFFスイッチのキーは好きな奴に変えて

^Space::
if(flag_hotkey <> 1)
 flag_hotkey = 1
 ToolTip, HotKeyON, 1710, 0
else
 flag_hotkey =
 ToolTip
return

#if (flag_hotkey)

a::Msgbox, a
b::Msgbox, b
c::Msgbox, c

#if

186:名無しさん@お腹いっぱい。
14/05/18 16:44:52.71 SkEzxV/c0
ifのところで{}忘れてたわ

187:名無しさん@お腹いっぱい。
14/05/18 18:01:12.11 azfgwDu90
>>185-186
レスサンクス。
何度も申し訳ない。こっちも質問の仕方が悪かったかもしれない。

とりあえず、flag_hotkeyのフラグ切り替えの方法は理解しました。

問題は>>185の例みたいに、元々のホットキーに条件が付いてない場合はうまくいくが、
#if (flag_hotkey) ;リマップが有効か無効か
a::Msgbox, a
  ・
  ・
>>184のパターン(1)ように元々のホットキーに条件が付いてる場合うまくいかない。
#if (flag_hotkey) ;リマップが有効か無効か
#If (flag_a) ;←元々付いてる条件
a::MsgBox, a
  ・
  ・
>>184のパターン(2)のようにすれば、条件に忠実に動くようになる。
#If (flag_a) && (flag_hotkey)
  ・
  ・
でも、一つ一つ「 && (flag_hotkey)」を付け足していくのはつらい。
一つ一つに「 && (flag_hotkey)」を付け足していくのではなく、何か他に簡単な方法はないか…というのが>>184の質問でした。

#If (flag_a) && (flag_hotkey)←こういう方法しか無いですかね?

188:名無しさん@お腹いっぱい。
14/05/18 18:20:09.13 Pm+XAqGi0
俺もMGLかこっちか迷ったんだけどこっちで質問

;選択範囲をコピー
Lclickcopy(){
MouseGetPos, x0,y0 ;クリックした時の座標取得
keywait,Lbutton ;離すのを待つ
MouseGetPos, x1,y1 ;クリックを離した時の座標軸
if (x1-x0 > 5 or x1-x0 < -5 or y1-y0 > 5 or y1-y0 < -5){
   clipnow := ClipBoardAll ; save old clipboard
   send,^{c}
   ClipWait 1, 1
   IfEqual ClipBoard,, SetEnv ClipBoard, %clipnow%
return
}
}

こんな関数を作ったんだけどMGLのLbuttonに設定したらエラー吐く。
かといって
~Lbutton::Lclickcopy()

としたらロッカージェスチャのRB_LB__が動いてくれない
八方ふさがりなんだけどどうしよう(´・ω・`)

189:名無しさん@お腹いっぱい。
14/05/18 18:25:07.06 azfgwDu90
>>187追加
いわゆる「入れ子?」が#ifでは出来ないって言うことなんかな?
なら、#If (flag_a) && (flag_hotkey)←こういう方法しか無いみたいね。
元々の考えを改めて別の方法捜してみるわ。

>>185-186
お騒がせしました、あありがとう。

190:名無しさん@お腹いっぱい。
14/05/18 20:07:10.13 TWeApKh00
>>188
スレチ、専用スレにエラー内容とサンプルコードを書こう

【AHK】MouseGestureL.ahkを語るスレ【ジェスチャ】
スレリンク(software板)

191:名無しさん@お腹いっぱい。
14/05/18 20:40:52.59 PE4IKbR20
せっかく専スレあるんだからあっち使ってあげなよ

192:名無しさん@お腹いっぱい。
14/05/18 21:05:27.57 SkEzxV/c0
>>189
あーそういうことか。
だったら&&で繋げるくらいしかないかな。

代替案としてはサスペンドしたいホットキーだけで別にahkスクリプト作って独立させて
その作ったスクリプトを起動、終了するホットキーを今まで使ってた本体ahkに登録すればいいかもしれない
ホットキーを有効にしたいなら別ahkを起動、サスペンドしたいなら別ahk終了、みたいな感じで


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch