AutoHotkey スレッド part11at SOFTWARE
AutoHotkey スレッド part11 - 暇つぶし2ch2:名無しさん@お腹いっぱい。
10/07/30 18:31:07 9VNdm34c0
■派生版
AutoHotkey_L (内部Unicode、オブジェクト指向などの言語仕様拡張)
URLリンク(www.autohotkey.net)

ironahk (.NET製、クロスプラットフォーム)
URLリンク(code.google.com)

AutoHotkey64 (ネイティブ64ビット版) (AHKLベース)
URLリンク(www.autohotkey.com)

AutoHotkey.dll (真のマルチスレッド対応など) (AHKLベース)
URLリンク(www.autohotkey.net)

駄目文字微対策版 (ファイル名処理部分のみ不具合対応)
URLリンク(yak.myhome.cx)

■ 関連スレ
AutoIt
スレリンク(software板)

3:名無しさん@お腹いっぱい。
10/07/30 18:52:13 JeFr0hn90
■ 関連記事のあるサイト

AutoHotkey メモ - Principia
URLリンク(principia.s54.xrea.com)
AutoHotKey - notitle.txt
URLリンク(kan.s151.xrea.com)
なまず日記
URLリンク(www.tierra.ne.jp)
eamatの日記
URLリンク(d.hatena.ne.jp)
おばけ日記
URLリンク(d.hatena.ne.jp)

1 Hour Software by Skrommel - DonationCoder.com
URLリンク(www.donationcoder.com)
Tips N Tricks(公式フォーラムのトピック)
URLリンク(www.autohotkey.com)

4:名無しさん@お腹いっぱい。
10/07/30 18:52:54 JeFr0hn90
■ リマップ・ホットキー割り当て

Q1:[CapsLock(英数)]や[ひらがな]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
  OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理なので、
 ドライバレベルでのリマップソフト(窓使いの憂鬱など)や、レジストリ変更でリマップを行う(ChangeKeyなど)を利用して
  [CapsLock]を別の普段使わないキー([F13]~[F24]など)に割り当ててからAHKで利用すると良い。

 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( URLリンク(www.forest.impress.co.jp) )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
  「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
  というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
  リマップ( F12::F13 )を解除する。

Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
  これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
   ^1::Send, {Esc}

Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
 例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
   sc07B & I::Send, {Blind}{Up}
   sc07B & K::Send, {Blind}{Down}
   sc07B & J::Send, {Blind}{Left}
   sc07B & L::Send, {Blind}{Right}

5:名無しさん@お腹いっぱい。
10/07/30 18:53:38 JeFr0hn90
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
  #UseHookで全部にキーボードフックを適応する方法でも可。

■ マウス関連

Q1:「RButton & WheelDown::~」とやったら右ボタンが使えないし、
   「~RButton & WHeelDown::~」とやったらメニューがでてうざい。
A1:決定的な解決策はないけど、メニューが出たら消すって方法なら↓。
  ~RButton & WheelUp::
   Send, +^{Tab}
   SetTimer, CancelRMenu, -1
   Return
  ~RButton & WheelDown::
   Send, ^{Tab}
   SetTimer, CancelRMenu, -1
   Return
  CancelRMenu:
   KeyWait, RButton
   SetTitleMatchMode, RegEx
   WinWait, ahk_class #32768|MozillaDropShadowWindowClass,,0.5
   If (!ErrorLevel)
    Send, {ALt}
   Return

Q2:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない・・・
A2:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。

6:名無しさん@お腹いっぱい。
10/07/30 18:54:18 JeFr0hn90
■ IME関連

Q1:IMEのOn/Offの切り替えや、On/Offの状態を得るにはどうすればいいの?
A1:URLリンク(www6.atwiki.jp) の「IME.ahk」を使いましょう。

Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

■ ジョイスティック関連等

Q1:ジョイスティックのリマップがうまくいきません!!助けて
A4:ジョイスティックではリマップできないので、「Send」コマンドでキー発行してちょ
   × Joy1::Esc
   ○ Joy1::Send, {Esc}

Q2:ジョイスティックの上下左右にキーを割り当てたいけど、JoyLeft とか JoyUp って仮想キーは無いの?
A2:無いです。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。

Q3:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A3:AutoHotkeyではできません。

Q4:Bluetoothリモコン等を使えたらいいなぁ・・・
Q5:過去ログを漁るといいかも。

7:名無しさん@お腹いっぱい。
10/07/30 18:55:03 JeFr0hn90
■ 日本語の取り扱い
AuthoHotkeyは英語圏でつくられたソフトでマルチバイト文字列のことを全く考慮していないので以下の問題が起き得る。
なお、ユニコード対応されたAutoHotkey_Lでは以下の問題は発生しない。

Q1:「~AチЯ㌔荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ
A2:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]であるために起きる。
  回避方法は以下の通り
   (1) これらの文字の"直後"に「`」を記述する(例:「線形`代数」)
   (2) 外部ファイルに文字列を定義して後から読み込む方式にする(IniRead、FileRead 等)
   (3) #EscapeCharでエスケープ文字を別のものに変える(玄人向け)

Q2:IfInString や InStr()、StringReplaceで意図しない結果が出ることがあるんだけど、、、
A2:文字単位ではなくバイト毎に比較するだけなので、以下のような場合は意図せずにマッチしたりする。
 回避したい場合は、流行らせるページの「マルチバイト文字列操作関数群」などを使う。
 例) 意図しない置換
  str = モノ ; 0x83 0x82, 0x83 0x6d,
  StringReplace, str, str, c, c, All ; c:0x82 0x83
  MsgBox, %str%

Q2:A_ScriptDir、A_LoopFileName や SplitPath の結果がおかしいことがあるんだけど?
A2:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
  対象となりうる文字:
    ―ソЫⅨ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡纊犾
  これは、>>1にある「駄目文字微対策版」を使うことで回避できる。

8:名無しさん@お腹いっぱい。
10/07/30 18:56:29 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:公式( URLリンク(www.autohotkey.com) )から SmartGUI Creator をDLして使うと楽。

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

Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。

9:名無しさん@お腹いっぱい。
10/07/30 18:57:10 JeFr0hn90
■ AutoHoekey_Lって具体的にどう違うの?

本家との違いは以下の通り
(1) ユニコード対応されているので、駄目文字(>>6)が無いなど日本語の取り扱いが楽。
(2) #If 任意の「式」を用いてキーマップ定義ができる
(3) メニューにアイコン表示ができる
(4) Exeやトレイアイコン描画の向上
(5) GUIのテキスト表示のレンダリング方法を変更できる(アンチエイリアスOFF等)
(6) 正規表現にマッチした文字列を引数にして関数を呼べる
(7) Send, {Asc XXXX}のUnicode版が使える
(8) 配列変数や連想配列として使えるオブジェクトの導入。

目玉は(1)および(2)。 ユーザ定義関数作って #If で使うととても便利。
例1) [Ctrl]+[Alt]+[Space]で On/Off 切り替え。変数がOnの時のみIKJLでカーソル移動可。
 ^!Space::KeyMap:=!KeyMap
 #If (KeyMap=1)
  I::Up
  K::Down
  J::Left
  L::Right
 #If

例2) トレイの時計部分でホイールを回すと音量変更
 #If MouseOver("ShellTray_Wnd", "TrayClockWClass")
 WheelUp::SoundSet,+5, Master
 WheelDown::SoundSet, -5, Master
 #if
 MouseOver(win, ctrl="") {
  MouseGetPos,x,y,hwnd,class2,1
  WinGetClass, class1, ahk_id %hwnd%
  Return InStr(class1, win) && InStr(class2, ctrl)
 }

10:名無しさん@お腹いっぱい。
10/07/30 19:35:22 elYoeAxq0
Q:[Ctrl]や[Shift], [Alt]が押されっぱなしになることがあるけど、これってAHKのせい?
 もしそうじゃないとしたら、AHKで何か対処できる?
A:報告が多くありますが、よく分かっていません。以下のような報告があります。
  ・クリップボードユーティリティ(CLCLなど)で[Ctrl]+[V]で貼り付けを行った後に起きるという報告があります。
  ・Logicool(Logitec) の "SetPoint" は「クロ」との報告があります。
  ・窓使いの憂鬱をデュアルコア以上のプロセッサで使っている場合に起きるという報告もあります。
  ・VMWareが悪さしているという報告もあります。
 上記のソフトはAHKより下位(物理層寄り)なので、AHKでは物理的にキーが押されているとしか分かりません。
 タイマーでキー押下を監視して一定時間以上押下されていたら警告を出したり、
  SetPoint を再起動などで対処していたりするようです。

スレリンク(software板:782番)
782 名前:名無しさん@お腹いっぱい。[sage ] 投稿日:2008/11/27(木) 01:43:58 ID:pOwnMABe0
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。
if書きたくないから、三項演算子だいすき

#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%URLリンク(www1.axfc.net)
alert .= (%URLリンク(www1.axfc.net)
}
Tooltip, %alert%
return

11:名無しさん@お腹いっぱい。
10/07/30 19:35:37 elYoeAxq0
10 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 14:26:39 ID:q0UbybZB0
お役立ちリンク

公式フォーラムより
URLリンク(www.autohotkey.com) 標準入出力を扱いたい
URLリンク(www.autohotkey.com) ListViewで大きな画像を扱いたい
URLリンク(www.autohotkey.com) GUIで標準のもの以外を使いたい
URLリンク(www.autohotkey.com) GUIを手軽に作りたい
URLリンク(www.autohotkey.com) DllCallで定数調べるのマンドクセ
URLリンク(www.autohotkey.com) コンパイルユーティリティ(Compile_AHK II)
URLリンク(www.autohotkey.com) HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい
URLリンク(www.autohotkey.com) Windowsのイベントをフックして色々やりたい
URLリンク(www.autohotkey.com) ShellFolder() : エクスプローラのPathおよび選択ファイルを取得
URLリンク(www.autohotkey.com) ShellDesktop() : デスクトップで選択されたファイルを取得
URLリンク(www.autohotkey.com) COM Standard Library
URLリンク(www.autohotkey.com) COMをオブジェクト指向で使う
URLリンク(www.autohotkey.com) ポップアップメニューの情報を得る
URLリンク(www.autohotkey.com) 高速・軽量配列ライブラリ
URLリンク(www.autohotkey.com) XPATHライブラリ

12:名無しさん@お腹いっぱい。
10/07/30 19:35:53 elYoeAxq0
11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
■自分の環境で、どのキーを押したかを調べる方法

キーボードのキーアサインや、Up/Downの状態を知りたければ、
AHKを常駐させて、トレイアイコンで右クリしてKeyHistoryを開けば、出てくる。
F5でリフレッシュされるので、調べたいキーを押した後、F5を連打する。

KeyHistoryは、キーを押した後にF5を押してリフレッシュしないと
内容が表示されない。また、F5でリフレッシュすると、F5を押した、という内容も
合わせて出てくるため、少々見にくい。

そんなときは>>10

「HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい」

のリンク先にあるスクリプトを実行する。コンソール(DOSプロンプトウインドウ)が
でてきて、そのウインドウへ、リアルタイムにキーの上げ下げ状況が表示される。

PrintScreenや、日本語入力などの特殊キーにHotkeyを定義しようとして、
うまく動かない場合は、これで調査すると、原因を掴みやすい。

13:名無しさん@お腹いっぱい。
10/07/30 19:36:48 elYoeAxq0
ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報

準備:
URLリンク(www.a-quest.com) からWin版を落として、
書庫にあるAquesTalk2Da.dll を Autohotkey.exe のフォルダに置く。

以下のスクリプトを実行する。[Win]+[1]で現時刻を喋る。

#1::Talk("<NUMK VAL=URLリンク(www1.axfc.net)

; phrase: 喋る内容(音声記号列という名の文字列)
; speed:速さ(遅50~300速)
; sync:喋り終わるまで待つかどうか(真偽値)
Talk(phrase, speed=100, sync=true) {
 static hModule, hMe
 If (!hModule) {
  hModule := DllCall("LoadLibrary", "Str", "AquesTalk2Da.dll", "Ptr")
  hMe := DllCall("AquesTalk2Da\AquesTalk2Da_Create", "Ptr") ; 合成エンジン作成
 }
 If (sync) {
  Return DllCall("AquesTalk2Da\AquesTalk2Da_PlaySync", "AStr", phrase, "Int", speed, "UInt", 0, "Int")
 } Else {
  If DllCall("AquesTalk2Da\AquesTalk2Da_IsPlay", "Ptr", hMe, "Int") ; 喋り中なら
   DllCall("AquesTalk2Da\AquesTalk2Da_Stop", "Ptr", hMe) ; 止める
  Return DllCall("AquesTalk2Da\AquesTalk2Da_Play", "Ptr", hMe, "AStr", phrase, "Int", speed, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0, "Int")
 }
}

※ 上はAHKL(Unicode)用なので、本家で使う場合は "Ptr"→"UInt", "AStr"→"Str" に置換する

14:名無しさん@お腹いっぱい。
10/07/30 19:37:53 elYoeAxq0
テンプレ以上。

>>11>>12
>11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
とかの部分が余計なので次スレから削除よろしく。手違いスマン。

15:名無しさん@お腹いっぱい。
10/07/30 19:53:34 p5e5vCII0
いちおつ

16:名無しさん@お腹いっぱい。
10/07/30 20:37:12 E3vpMotR0
>>1おつ

過去ログが多いスレだと
過去URL1 過去URL2
過去URL3 過去URL4
っていう風になってるスレもあるね


17:名無しさん@お腹いっぱい。
10/07/30 20:42:03 elYoeAxq0
●持ちでも数スレ~10スレだけ遡って書いてあれば、part1まで辿っていけるわけだし

18:名無しさん@お腹いっぱい。
10/07/30 23:55:59 7qkG/NZl0
いちおつ
しっかしテンプレなげーなw

19:名無しさん@お腹いっぱい。
10/07/31 14:16:51 K6Z0VvT+0
> スレリンク(software板:979番) の「ERROR: No COM Dispatch Object!」の件

これはウチでも起きる。
ちなみにAHK64の32ビット版のビルトインのやつでも起きる。
(COM_CreateObject を ComObjCreate に置換するだけ)

よくわからないけど、メソッドとプロパティがごっちゃになってるっぽい感じ。
解決法はわからんorz

20:名無しさん@お腹いっぱい。
10/08/01 06:42:39 uqxw/fPd0
ankでファンクションキー割り当てたいんだけど
Alt+F4の場合Send,!F4では無理みたいなんだけど
ファンクションキーってどうやったら割り当て出来るの?

21:名無しさん@お腹いっぱい。
10/08/01 06:45:10 lw0qNV5A0
!{F4}

ってか、もうちょっとマニュアル読もうぜ。試行錯誤も足りん。

22:名無しさん@お腹いっぱい。
10/08/01 07:56:17 uqxw/fPd0
あれ?それで行けた?
まず最初に試したのがソレだったんだが無理だったんだ
!{f4}だったのが駄目だったのか

23:名無しさん@お腹いっぱい。
10/08/01 08:02:51 uqxw/fPd0
右↑とか↓とかだと閉じれるが右↓↑だと設定が機能しないのはなぜ?

24:名無しさん@お腹いっぱい。
10/08/01 08:06:42 uqxw/fPd0
ank解凍してもう一度設定したら出来た
>>21
バカでごめん
ありがとう

25:名無しさん@お腹いっぱい。
10/08/04 05:33:02 KpoLKvEb0
リマップを使ってキーを入れ替えるスクリプトを書いたのですが、
困ったことにキーボードからの入力だけでなくマウスやアプリケーションが
はき出したキーまでもリマップされるようになりました。

例えばa::b b::c c::aとした時、キーボードでaを押したときにbが入力され、これは希望動作なのですが
アプリケーションでaをはかせたときにbが入力されてしまい、これは避けたいです。
aをはかせたい時にリマップを考慮してcをはかせるのも避けたいです。

リマップされるのはキーボードによる入力の場合だけで良く、
アプリケーションによる入力の場合(ahkのkeyhistoryでtype:aフラグが立っていた)
はリマップさせたくないのですが可能でしょうか?

26:名無しさん@お腹いっぱい。
10/08/04 07:58:00 7S5kTAOq0
DllCall を使ったスクリプトを AHK64 に移植する際、どういうことに気をつければ良い?
さっぱり動かないんだけどw
これを機会に勉強したいので、参考になるサイトなど教えてもらえたら嬉しいです。

27:名無しさん@お腹いっぱい。
10/08/04 09:10:53 a8HN120B0
前スレかそのまた前スレ辺りに一通り出てたな>64に移植

28:名無しさん@お腹いっぱい。
10/08/04 10:34:11 7S5kTAOq0
流行らせるページにあった ThumbRemap スクリプトを適当に書き換えて使っています。
こいつを AHK64 で動かしたのですが、どうにも動きません。
前スレ該当レス (>>749,752,755,757,762-765) を見たところ
Put/Get のところがマズそうなんですがよく分かりせん。
(参考のスクリプトはファイルの期限切れで閲覧できませんでした)
どなたか、アドバイスをいただけないでしょうか。

下記に該当のスクリプトを記載します。
オリジナルからの更新は、パッドが対応していれば 2 本指 + キーも定義できます。
(#If, TouchPad =2 以下に定義する)

29:名無しさん@お腹いっぱい。
10/08/04 10:35:14 7S5kTAOq0
; AHK_L 版 ThumbRemap モドキ / Synaptics 製タッチパッド専用
TouchInit:
IBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 4, "Ptr")
OBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 2, "Ptr")
NumPut(0x01000000 | 10, IBuf + A_PtrSize * 0, 0, "Ptr")
NumPut(0x01000000 | 729, IBuf + A_PtrSize * 1, 0, "Ptr")
NumPut(~0 - 1, IBuf + A_PtrSize * 3, 0, "Ptr")
SetTimer, TouchCheck, 10

TouchCheck:
If GetKeyState("LButton")
Return
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "Ptr", 0xC0000000, "Ptr", 3, "Ptr", 0, "Ptr", 3, "Ptr", 80, "Ptr", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "Ptr", 0x80006004, "Ptr", IBuf, "Ptr", A_PtrSize * 4, "Ptr", OBuf, "Ptr", A_PtrSize * 2, "Ptr", 0, "Ptr", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
TouchPad := NumGet(OBuf + A_PtrSize) & 0xFF
Return

30:名無しさん@お腹いっぱい。
10/08/04 10:36:01 7S5kTAOq0
; 続き、キーバインド定義
#If, TouchPad = 1
I:: Click, WheelUp
K:: Click, WheelDown
*J::Click("Left")
*L::Click("Right")
*O::Click("Middle")
Click(value) {
StringReplace, key, A_ThisHotKey, *
Click, % "Down " value
KeyWait, % key
Click, % "Up " value
}
#If, TouchPad =2
#If

31:名無しさん@お腹いっぱい。
10/08/04 11:45:02 5a8nfcIui
32bit符号なしが UINT だけど、全部がポインタじゃないよ。
フラグとかで使う DWORD 型はそのまま UINT のままでいい。

あそこのは相当古いし上に、コメントも少ないからかなり苦労するな。
GlobalAlloc は大抵は VarSetCapacity でいいし、
NumPut/Get, StrPut/Get を使う方がいいところも多い。

32:名無しさん@お腹いっぱい。
10/08/04 14:08:02 RjWEdL6U0
>>25
$

33:25
10/08/04 17:34:52 KpoLKvEb0
>>32
レスありがとうございます。
$a::bとしてみましたが、以前と変わらずアプリケーションからの入力もリマップされてしまいます。

スクリプト実行前
41 01E a d 0.56 A
41 01E a u 0.11 A

スクリプト実行後
41 01E h d 0.78 A
42 030 i d 0.00 B
41 01E h u 0.14 A
42 030 i u 0.00 B

34:名無しさん@お腹いっぱい。
10/08/04 23:03:24 0HOUPXSK0
Windows7のエクスプローラのリストビューにアクセスする方法ってありますか?
デスクトップ以外だとうまくいかないのですが

35:名無しさん@お腹いっぱい。
10/08/05 00:20:17 6WJcNi4Y0
>>25
前スレの795にデバイスID(キーボードのデバイスID)で分岐させる方法が希望通りの動作に近いと思う。
代案としてはカスタマイズや設定の全てをAutohotkeyに任せること。

36:28
10/08/05 03:39:36 hd9YaTXp0
>>31
そうなんですね。一部をオリジナルの UInt 型に戻しました。
ポインタ型についてもう少し勉強してみます。

不躾なお願いなのですが、どなたかに本スクリプト (>>29-30) の流れを解説して
いただけないでしょうか。DllCall 内の関数は型通りに使われているようなので、
問題点はバッファー確保 (IBuf & OBuf) と NumPut/Get の使い型だと思っています。
ここから先を理解するのに難儀しており、アドバイスいただければ幸いです。

37:名無しさん@お腹いっぱい。
10/08/05 04:24:50 dptoT0ZSi
デバイス開いて(CreateFile)制御命令送って(DeviceIoControl)データ読みだし(NumGet)。
開いたものは閉じる。
命令用(in)と結果用(out)のバッファはあらかじめ確保(Alloc)しておく。

というか、書いてあるとおりだぜ。
DllCall いじるなら、 MSDN で関数を調べようぜ。

38:名無しさん@お腹いっぱい。
10/08/05 04:27:53 dptoT0ZSi
あと、Vista/7 持ってないからわかんないけど、
デバイス開くあたりが、UACにひっかかるんじゃないかねぇ。

39:名無しさん@お腹いっぱい。
10/08/05 21:18:42 KSKnEENb0
URLリンク(sites.google.com)
左メニューに組み込み変数追加お願いします、とか書いてみる
それとアイコンがオレンジ色の変わって一瞬驚きました

40:名無しさん@お腹いっぱい。
10/08/05 23:55:15 KSKnEENb0
今見たら左メニューに組み込み変数追加されてました。
ありがとうございました!

41:名無しさん@お腹いっぱい。
10/08/06 14:04:18 kcR3Cisg0
AutoHotkey64がAVGでwin32/Heurとか検出されてるんだがもちろん誤検出だよな?

42:名無しさん@お腹いっぱい。
10/08/06 14:09:58 YArs/9MG0
オンラインで検体を送れるところがあるから送ってみれば?

43:25
10/08/06 22:28:27 TY2IF4pN0
>>35
うーん、一行でポンと出来るようなものではないんですね。
前スレ795は何をやっているか分からない行が多かったですが全体としては入力時にdeviceIDを取得して
比較しているだけのようなのでリファレンス見ながらやっていこうと思います。
レスありがとうございました。

44:名無しさん@お腹いっぱい。
10/08/07 00:12:47 k0UxEdTq0
>>25>>43
こういうことかと思ったけど違うのかな
$a::
If GetKeyState("a","P")
Send, b
Else
Send, a
Return

45:25
10/08/07 01:55:44 tQubyQTW0
>>44
おお、GetKeyStateにPを添えるとバッチりの挙動をするんですね。
*と{Blind}を付け加えたら理想の動きをするようになりました。
レスありがとうございます。検索が足りませんでした。

a::b
41 01E h d 1.05 A
42 030 i d 0.00 B

GetKeyState
41 01E h d 0.70 A
41 01E i d 0.00 A

46:名無しさん@お腹いっぱい。
10/08/08 01:11:57 3q3w8jHr0
AutoHotkeyでボス(嫁)が来たスクリプトを作ろうとしているのですが
Ctrlキーの二度打ちを設定するのは不可能でしょうか
^1::Send, #dでは危うかったので、御存知の方宜しく御願いします。

47:名無しさん@お腹いっぱい。
10/08/08 06:57:40 KpyNAP6d0
>>46
URLリンク(endoh-namazu.tierra.ne.jp)

48:名無しさん@お腹いっぱい。
10/08/09 10:32:44 aYtdGkcui
Lにいろいろと統合されたな。
スレが建った頃に大きく変わるのがデフォだなぁw

Significant functionality developed by other community members:
* Native 64-bit support by fincs.
* Native COM support by Sean.
* Native Unicode support by jackieku.
* Support for various text encodings.
* New DllCall arg types for portability.
* Object-oriented file I/O.


49:名無しさん@お腹いっぱい。
10/08/09 10:55:46 JfWbspPo0
どうせならこのぐちゃぐちゃな文法も直してくれればいいのに

50:名無しさん@お腹いっぱい。
10/08/09 12:43:28 qUuquxFLP
なんだかなあ・・AutoHotkey64からAutoHotkey_Lw64にしたらどうもうまく動かない
何が違うんだ

51:名無しさん@お腹いっぱい。
10/08/09 13:27:05 qUuquxFLP
#Persistent
OnExit,_Exit
hHookMinimize:=DllCall("SetWinEventHook","UInt",0x16,"UInt",0x16,"UInt",0,"Ptr",RegisterCallback("WinMinimizeHandler"),"UInt",0,"UInt",0,"UInt",0,"Ptr")
return
WinMinimizeHandler(){
MsgBox
}
_Exit:
DllCall("UnhookWinEvent","Ptr",hHookMinimize)
ExitApp

いろいろ試したみたけど_Lw64だとイベントフックが腐ってる気がする
コールバック呼ばれない

52:名無しさん@お腹いっぱい。
10/08/09 14:35:57 W80hlfpgi
> Quote:
> EDIT: RegisterCallback() broken:
>
> Thanks. I should've known there was a reason for that 'add'. Quote:
New code:

フォーラムで報告あがってるし、Lexikosも認識してるからすぐ治るっしょ

53:名無しさん@お腹いっぱい。
10/08/09 21:22:05 L1oQFIkS0
BREGEXP.ahkのLoadLibraryとFreeLibraryの繰り返しを無くそうと思って試してみたら
メモリ使用量がどんどん上がっていってうわーと思ったのですが、
DllCall("BREGEXP.DLL\BRegFree",Int,pRExp)

DllCall("BREGEXP.DLL\BRegfree",Int,pRExp)
とFreeでは無くfreeとFを小文字ににしたらうまくいくようになりました。

54:名無しさん@お腹いっぱい。
10/08/09 23:48:36 5nQelkET0
if(flag) func1() ←ダメ
else func2()  ←OK

なんなのこれぇ

55:名無しさん@お腹いっぱい。
10/08/10 01:38:40 T9NAOBvp0
ahkで複数行のDOSコマンドを実行することは可能でしょうか?

56:名無しさん@お腹いっぱい。
10/08/11 10:46:57 lC1eENfji
>>55
バッチファイルを起動するのが簡単・確実かと。
ただ、多くのケースでahkのコマンド群で置き換えが可能なはず。
リダイレクト、パイプを使うならバッチのままがいいけど。

57:名無しさん@お腹いっぱい。
10/08/12 12:53:39 jCmOCBci0
AHK で "文字列タイピング中" という状態をフックし、その時にだけ一部のキー定義を変更したいと考えています。
1. Windows にタイピング状態を同定する機能はありますか? その場合はどのような Dll を用いればよいのでしょうか?
2. 自分で定義するとしたら、どのような方法があるでしょうか?

どなたかアドバイスをいただければ幸いです。

58:名無しさん@お腹いっぱい。
10/08/12 13:10:41 XWlXU4kH0
お、やっと規制解除されたか。

>>57
(1) "文字列タイピング中"ってのをどう定義すんの?って話だとおもうけど。

■ 文字キーを押してから指定時間以内
~a::
~b::
 :
~z::
~0::
~1::
 :
~9::
 typing := True
 SetTimer, TypingOff, 1000
 Return
TypingOff:
 typing := False
 Return

■ キャレット(文字入力カーソル)が表示されているかどうかで判断するなら
スレリンク(software板:53番)


(2) (1)で判断したのを使って AHKL の #If 使えば楽。
 以下だと、グローバル変数 typing の真偽値でホットキーが有効かどうかを判断。
#If (typing)
F1::Send, Hoge
F2::SomeFunction()
#If

59:名無しさん@お腹いっぱい。
10/08/13 08:34:06 rBSM7S8O0
>>58 ありがとうございます。
最初の例がヒントになりました。
これをベースにやってみようと思います。

60:名無しさん@お腹いっぱい。
10/08/13 09:56:25 WLbyInsx0
str = hoge
if(str == hoge){
Msgbox, true`n %str% == hoge
}else{
Msgbox, false`n %str% != hoge
}

これが何故かfalse hoge != hogeになってしまって困った。
str = hogeの場合は"を付けなくていいが==で比較する場合は付けないとダメなんだな。
Perlを嫌っている奴の気持ちが分かった気がした。

61:名無しさん@お腹いっぱい。
10/08/13 14:09:50 lCisbYU10
>>60
var = literal
var := expr
if (expr)
Perl関係なくね?

62:名無しさん@お腹いっぱい。
10/08/13 16:26:58 6zEgbGxa0
リテラルを引用符無しで記述できるバッチの仕様を引き摺りすぎてるからなぁ
まぁ、Lexikos曰く、リテラルの方が処理的に速いらしいけど

>>60だと、If (~) とした段階で式を使ってるものとして処理が動いてる。

たとえば、

str = hoge piyo ; str := "hoge piyo"
If (str == hoge piyo)

としたら、

If (str == hoge . piyo)

という様に二つの変数を結合したものとの比較を行ってることになって
hoge と piyo 二つの未定義のグローバル変数が変数一覧に出てくる。

63:名無しさん@お腹いっぱい。
10/08/14 00:04:04 g1cPPVB90
TrackWheelってwindows7(32bit)で動かないのかな。
起動させてもプログラムが停止しましたってなっちゃうな。

64:名無しさん@お腹いっぱい。
10/08/14 08:06:19 seaXUFJTP
自分で答え書いてるじゃん

65:名無しさん@お腹いっぱい。
10/08/14 09:04:46 ktkxi1E40
>>63
中の人っす。実機がないんでよく分からないっす。
秋頃にPCを新調する予定なんでそれくらいになら対応できるかも。

66:名無しさん@お腹いっぱい。
10/08/15 16:47:42 +3mGXcL00
runコマンドで、hideオプションをつけて起動したコマンドラインツールのコンソールを、
あとから表示させる方法って、ないでしょうか。

コンソールコマンドの中で、通常の処理であれば正常に終わるように作っていますが、
まれにイレギュラーな対話メッセージが出た際、hideをつけていると操作を続行できず、
ウインドウがないので何が原因で止まっているかも判断できず、行き詰ってしまいます。

イレギュラーな場面のためにminオプションで起動させると、タスクバーの余白で
コマンドプロンプトのタスクがチラチラ出てしまい、これもまた目障りです。


いまは、settimerで、コマンドの実行時間を監視し、一定時間を経過しても終了しない場合は
対話でひっかかっていると判断させるようにしました。

が、問題が起きたまではわかるものの、コマンドコンソールを表示させる方法が思い浮かびません。
hideで起動させたウインドウを表示させる、うまい方法は、ないでしょうか。

67:名無しさん@お腹いっぱい。
10/08/15 17:08:23 zPLp0lVT0
show

68:名無しさん@お腹いっぱい。
10/08/15 19:07:20 uIR+EQMw0
Run, cmd.exe,, Hide, pid
MsgBox
WinShow, ahk_pid %pid%

69:名無しさん@お腹いっぱい。
10/08/15 20:00:36 +3mGXcL00
>>67 >>68
できました、ありがとうございます。

70:名無しさん@お腹いっぱい。
10/08/15 21:29:30 uIR+EQMw0
更新きた

Revision 54 - August 15, 2010
Fixed: RunAs in Unicode build. [jackieku]
Fixed: RegisterCallback in x64 build. [fincs]
Fixed: Executables failing to run on Win2k and WinXP prior to SP2. Win2k requires SP4 and updates (probably KB 816542). XP not tested.
Fixed: Dialogs such as MsgBox became unresponsive when interrupted by another script thread. Message filter/workaround added in L45 had to be removed. [Bug report]
Fixed: Multi-byte characters in default ANSI codepage; this was also causing a memory leak. [Bug report]
Fixed: ComObject now allows purely numeric property/method names. [Bug report]
Enhanced usability and capabilities of FileOpen/File object.
* FileOpen's Flags parameter accepts a human-readable string of flags.
* FileOpen's "update" mode has been renamed "read/write" and now creates the file if it didn't already exist.
* FileOpen sets A_LastError as appropriate.
* File := FileOpen(handle,"h") wraps an existing file handle in an object.
* File.Seek(n) defaults to SEEK_END when n is negative.
* File.Pos (or File.Position) can be used in place of Tell and Seek.
* File.Pos, File.Length, File.AtEOF and File.__Handle can be used without empty parentheses().
* File.Length can be set, as in File.Length:=n.
* File.ReadNum() and File.WriteNum(n) read or write a number, where Num is a NumGet-compatible type name.
* File.WriteLine(s) is equivalent to File.Write(s "`n"), for symmetry with File.ReadLine().
* File.Read() reads and returns the remainder of the file when used without parameters.
* File object now returns "" for unrecognized methods and invalid syntax rather than the numeric address of "".
(続く)

71:名無しさん@お腹いっぱい。
10/08/15 21:30:46 uIR+EQMw0
(続き)

Changed: GroupAdd's Label parameter now applies to the whole group. [Discussion]
Changed: GroupActivate sets ErrorLevel on success/failure. (Same thread as above.)
Changed: */ at the beginning of a line is ignored if there was no /*. [Discussion]
Removed ToCodePage and FromCodePage subcommands of Transform.

>>51 は治ったかな。
個人的には From/ToCodePage 廃止で色々書き直しだw

72:名無しさん@お腹いっぱい。
10/08/15 22:02:40 ZDKKr+GM0
インストーラにUnicode版とANSI版を同梱するなら、x64版も同梱すればいいのに
大して容量変わらないじゃん…

73:名無しさん@お腹いっぱい。
10/08/15 22:07:54 mi2wQMh6P
RegisterCallbackは直ったけどなんかGUI怪しくない?
付箋のスクリプト動かしたらフリーズする

74:28
10/08/16 06:53:54 I066VLbw0
懲りずに >>28-30 の AHKL_x64 ポート化を試みています (まだ動いていません)。
>>31 さんのコメントを参考にバッファの取り扱い方法を書きかえてみました。
また原作者のコメントとメーカーのサンプルコードも参照しました。
URLリンク(lukewarm.s101.xrea.com)

; Synaptics 製タッチパッド情報取得
VarSetCapacity(IBuf, A_PtrSize * 4)
VarSetCapacity(OBuf, A_PtrSize * 2)
NumPut(0x01000000 | 10 , &IBuf) ; TP_DeviceHandle
NumPut(0x01000000 | 729, &IBuf + A_PtrSize) ; TP_PacketFingerInfo
NumPut(0x00000000, &IBuf + A_PtrSize * 2) ; TP_StartData
NumPut(0xFFFFFFFE, &IBuf + A_PtrSize * 3)
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "UInt", 0xC0000000, "UInt", 3, "UInt", 0, "UInt", 3, "UInt", 80, "UInt", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "UInt", 0x80006004, "Ptr", &IBuf, "UInt", A_PtrSize * 4, "Ptr", &OBuf, "UInt", A_PtrSize * 2, "UInt", 0, "UInt", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
MsgBox % hSynTP "`n" A_PtrSize "`n" NumGet(&OBuf) "`n" NumGet(&OBuf + A_PtrSize)

x64 でもハンドルは取れているので、次の DeviceIoControl が動作していないようです。
バッファサイズ変更は効果ありませんでした。
これを x64 で動かすには、どのような情報が必要で何を試みたら良いでしょうか。

75:名無しさん@お腹いっぱい。
10/08/16 06:55:58 I066VLbw0
AHKL_x86 では NumGet(&OBuf + A_PtrSize) がタッチパッド状態を反映します。

76:名無しさん@お腹いっぱい。
10/08/17 00:52:27 NHeek7OJ0
本家のフォーラムでも質問してみようと思います。
ひきつづき、何かヒントらしきものがありましたら教えて下さい。

77:名無しさん@お腹いっぱい。
10/08/17 16:56:35 /diIoqjP0
ドキュメント日本語化追いつかねぇ

78:名無しさん@お腹いっぱい。
10/08/17 17:02:29 qrUFtLJWP
英語読めないから助かる

79:名無しさん@お腹いっぱい。
10/08/17 17:43:30 /diIoqjP0
俺が読めるくらいだから、英語自体は平易なんだけどさ、
プログラミングの素人なんで、COMの辺りの知識がないからどう訳していいものやら・・・

80:名無しさん@お腹いっぱい。
10/08/19 15:38:09 TJw3lxMz0
Revision 55 - August 19, 2010

Fixed: GroupActivate not setting ErrorLevel=1 if no Label was specified.
Fixed: Tab controls in x64 build.
Fixed: String-copy mode of StrPut when length is omitted; broken by L53.
Fixed: Data-alignment issues in x64 builds.
Changed: Set A_LastError for more File* commands to assist debugging.
Includes FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version and FileSetAttrib/Time.
Excludes FileCopyDir, FileRecycle, FileMoveDir, FileRemoveDir, FileRecycleEmpty, FileCreateDir and FileInstall as the APIs used do not consistently set or return a Win32 error code.

81:名無しさん@お腹いっぱい。
10/08/21 17:49:24 LHqwtwThP
関数で、渡したいパラメータは1つで、そこで処理させて、返却したいデータが複数(5個くらい)で、
もらったデータのうち、次の処理で必要なものが、その時々で異なる関数があります。

場合によっては、関数を呼び出すだけで、もらうデータが全く不要なときもあります。

このような場合、関数を呼び出すときにbyrefで全パラメータを毎回指定する以外に、
なにか別の受け渡し方法は、ないでしょうか。

いまは、関数内で、出すべきデータをグローバル変数に書き出しておいて、
関数を抜けた後に、その変数を読むという、裏ルートの送受信をさせていますが、
他所からの不意な書き換え事故を考えると、もっとよい方法が無いかなと。

82:名無しさん@お腹いっぱい。
10/08/21 19:03:33 ccGQQVvm0
その文章だと関数設計がおかしく感じるけど…

戻り値で不特定数を返す時はオブジェクトを利用すると楽。

ret := HogeFunc("あああ")
MsgBox, % ret.value1

HogeFunc(param1) {
; ~何か~
retValue := Object()
retValue.value1 := "あいうえお"
retValue.value2 := 100
Return retValue
}



83:名無しさん@お腹いっぱい。
10/08/21 21:10:54 LHqwtwThP
>>82
ありがとうございます。まさにそれが必要としていたものでした。

AutoHotkey_Lでのみ使える機能のようですね。
AHKを_Lに乗り変えて、ちぐはぐな設計で進めてしまった関数を見直すことにします。

84:名無しさん@お腹いっぱい。
10/08/27 23:36:55 VYFDDX400
なんか派生バージョンがいろいろあるけど
どれ入れたらいい?
windows7 64bit なんで autohotkey_L の 64bit版いれようとしたけど、
インストーラーがないよ。

85:名無しさん@お腹いっぱい。
10/08/28 00:15:58 2vpQQNqx0
ないからどうしたの?

86:名無しさん@お腹いっぱい。
10/08/28 00:38:30 RyaOMqig0
インストーラーなしのでいいじゃん

87:名無しさん@お腹いっぱい。
10/08/28 00:39:58 OOl+TLHv0
インストーラーなんていらね。
色々厄介な事になりやすい

88:名無しさん@お腹いっぱい。
10/08/28 00:55:26 L+vqbGxt0
TheGood > Are you also going to make an installer for the 64-bit build?
Lexikos > I'm a bit reluctant to do that since compiling x64-based scripts isn't possible yet.
       We need to replace the library which is used to embed the script into the exe file.
64bit版のインストーラを作るのに色々問題があるんだとさ。

利用する上でインストーラ無くても利用には全然問題はない。
「AutoHotkey.ahk」ってテキストファイルをAutoHotkey.exeと同じフォルダに作って、
AutoHotkey.exeをダブルクリックすりゃおk。

関連付けはフォルダオプションで簡単にできる(アイコンはexeの中に入っている)。

89:名無しさん@お腹いっぱい。
10/08/30 12:06:03 d9zUkDoY0
URLリンク(www.autohotkey.net) 更新。

Revision 56 - August 29, 2010

Added support for x64 compiled scripts. Requires Ahk2Exe_L and x64 AutoHotkeySC.bin.
Fixed: Deref operator (*addr) rejected addresses outside 32-bit range.
Fixed: #If expression memory allocation error on x64.
Fixed: Custom hotstring end chars with code points greater than U+00FF.
Fixed: Special characters being sent out of sequence by SendInput/Play.
Fixed: */ being discarded in continuation sections (see L54).

90:名無しさん@お腹いっぱい。
10/08/30 12:09:16 d9zUkDoY0
Lexikos > I've added a 64-bit option to the installer, enabled only if you're on a 64-bit system.

とのことなので x64 もインストーラでイケるようになったみたい。


91:名無しさん@お腹いっぱい。
10/09/04 14:30:19 ZIpAVQUt0
MouseGenture.ahk の相談はここでいいの?

92:名無しさん@お腹いっぱい。
10/09/04 16:58:03 TlzoJX8wP
おk

93:名無しさん@お腹いっぱい。
10/09/04 23:58:47 uTvDAlp20
何かキテルー

Revision 57 - September 4, 2010
Fixed Str*, WStr* and AStr* DllCall return types on x64.
Added functionality to InStr to bring it in line with StringGetPos:
* If StartingPos is negative, the search is conducted right-to-left beginning at that offset from the end.
* An additional parameter is available to specify which occurrence of the string to find.
Added #include <LibName> for explicitly including a script from a function library folder.
Added functionality to IniRead and IniWrite allowing an entire section to be read or written.
Added functionality to IniRead allowing a list of section names to be retrieved.
Added support for custom verbs to Run/RunWait: Run *verb file.
Made improvements to the way Run/RunWait extracts the action and its parameters from the Target parameter.
Changed NumGet/NumPut to allow Offset to be omitted entirely since Type is always non-numeric.
Removed the restriction that a label can't point to the end of a block.

94:名無しさん@お腹いっぱい。
10/09/05 17:18:59 GLHR6bhm0
最小化状態のFirefoxをWinActivateでアクティブ化すると、
ウィンドウは元に戻るんですがFirefoxがキー入力を受け付けない変な状態になります
どうにか対策方法とかないでしょうか? Firefox側の問題じゃないかとは思うんですが

95:名無しさん@お腹いっぱい。
10/09/05 17:56:00 m6I/5iFo0
タスクトレイアイコンをマウスオーバーしたときにツールチップ?として出てくるテキストを
取得することってこのソフトでできますか?

96:名無しさん@お腹いっぱい。
10/09/05 18:05:16 KFv0gG8x0
出来るけど、コマンド1つでは出来ない。

97:名無しさん@お腹いっぱい。
10/09/05 18:50:39 NvhQsR8q0
>>95
URLリンク(www.autohotkey.com)
※上記ページからacc.ahkとcom.ahkをDLしてAutohotkeyのLibフォルダに入れ、下記スクリプトを実行する。
※これはAutohotkey本家用

F1::ChildUnderCursor()

ChildUnderCursor() {
ACC_Init()
CoordMode, Mouse, Screen
MouseGetPos, x, y
pacc := Acc_AccessibleObjectFromPoint(x, y, _idChild_)
If paccChild:=acc_Child(pacc, _idChild_)
sResult := "Name:`t`t" . acc_Name(paccChild) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(paccChild) . "`n"
, COM_Release(paccChild)
Else sResult := "Name:`t`t" . acc_Name(pacc, _idChild_) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(pacc, _idChild_) . "`n"
COM_Release(pacc)
MsgBox, % sResult
ACC_Term()
}

98:名無しさん@お腹いっぱい。
10/09/05 19:39:33 m6I/5iFo0
>>96-97
ありがとうございます。
こういう関数結構あるみたいですね。
Lだと
URLリンク(www.autohotkey.net)

99:名無しさん@お腹いっぱい。
10/09/07 22:26:43 nAVBDwuS0
Revision 58 - September 5, 2010
Added: static var := expression

ふむ。これは地味だが便利だ。

100:名無しさん@お腹いっぱい。
10/09/07 23:10:22 sUMdgTS6P
やっと静的変数に式代入できるようになったか
何度エラーで弾かれたことか

101:名無しさん@お腹いっぱい。
10/09/08 05:18:11 6k+yxaz30
Win7で、全体のボリュームコントロールをいじりたいのですが、
うまくできません。

XPでSoundSetコマンドでMasterを指定すると上げ下げできていましたが、
Win7以降だと、AHKの実行しているプロセスの音量だけが変わってしまいます。

Win7で、全体の音量を制御する方法って、ないでしょうか。

102:名無しさん@お腹いっぱい。
10/09/08 07:24:47 H/2J7Uq00
>>101
どうにも上手くいかないから
Volume_Up、Volume_Downキー送ってる

103:名無しさん@お腹いっぱい。
10/09/08 07:44:18 6k+yxaz30
>>102
おお、それは盲点でした。おかげさまで音量の操作ができました。

音量変更後に現在の音量値の取得を画面に表示していたのですが、
現在値の取得ができず、完全な移植にはまだまだ遠いようです。

104:名無しさん@お腹いっぱい。
10/09/08 10:09:58 8OHW3hlN0
これじゃアカンの?

Vista Audio Control Functions v2.0
URLリンク(www.autohotkey.com)

105:名無しさん@お腹いっぱい。
10/09/08 10:14:01 8BWMvBiW0
>>101-103
こんなのもある。
URLリンク(www.autohotkey.com)
とりあえずマスターボリュームを5ずつ上下させるとかはできた。

106:名無しさん@お腹いっぱい。
10/09/08 11:41:07 QBr5t/WC0
MouseGenture
ATOKの入力モードに反応させないようにできませんか

107:名無しさん@お腹いっぱい。
10/09/08 14:45:46 S/7Cvc9AO
MouseGesture.ahk で、
中ボタンを WinMinimize に設定しているのですが、
中+右ボタンや、中+各方向ドラッグ の後で中ボタンを
押した時にも発動してしまいます。
他の動作をした場合には中ボタン単体を無効にする方法はありませんか?

108:名無しさん@お腹いっぱい。
10/09/08 14:56:59 lAduna1y0
説明書読め

109:名無しさん@お腹いっぱい。
10/09/08 21:59:36 LyMV39xS0
AHK64のコンパイラが欲しかったのですがzip版には同梱されていなかったので
インストーラ版を入れたところ.ahkの関連付けがAHKLに変更されました。今まで
使っていたスクリプトが一部動かなくなったので関連付けを戻そうと.ahkファイル
右クリ→プログラムから開く→ahkを選択してみても、ahklと実行ファイル名が同
じからなのか、うまく設定できませんでした。ahklのコンパイラフォルダだけコピー
してアンインスコし、再度ahkに関連付けました。うまく関連付けられましたが、今
度はアイコンがおかしくなりました。.ahkファイルのアイコンが紙の中にahk.exeの
アイコンが描かれているアイコンになりました。なのでahkをインスコし直しました。
すると元の環境に戻せました。おしまい。

110:名無しさん@お腹いっぱい。
10/09/08 22:22:03 8OHW3hlN0
日記かよw
インストーラは Uninstall Information とか使うと解凍できるぞ。

111:名無しさん@お腹いっぱい。
10/09/08 22:23:13 8OHW3hlN0
隣のフォルダ名コピってたw
Universal Extractor な

112:名無しさん@お腹いっぱい。
10/09/08 22:52:29 6k+yxaz30
>>104-105
ありがとうございます。これで全部解決できそうです。

113:名無しさん@お腹いっぱい。
10/09/09 00:56:06 s6czYEFU0
誰かAHKL最新版で使えるmigemo検索のサンプルスクリプトをおくれ。
流行らせるページのやつ全然動かなかった。

114:名無しさん@お腹いっぱい。
10/09/09 16:46:26 bxRMK4yrO
MouseGesture.ahk で、
中ボタンを WinMinimize に設定しているのですが、
中+右ボタンや、中+各方向ドラッグ の後で中ボタンを
押した時にも発動してしまいます。
他の動作をした場合には中ボタン単体を無効にする方法はありませんか?

流行らせるページやmouseGesture.ahkのマニュアルや解説サイトを見たが見つかりませんでした。

115:名無しさん@お腹いっぱい。
10/09/09 18:02:15 9DOorRwvP
アルファベットのA~Zをループで処理したいのですが何かいい方法ってないでしょうか?
取りあえずは
alphabet1=A
...
alphabet26=Z

Loop, 26
{
MsgBox, % alphabet%A_Index%
}
という感じで間に合わせているのですが他に何か方法ってないでしょうか?


116:名無しさん@お腹いっぱい。
10/09/09 18:18:24 aMuCAznK0
alphabet = A|B|…|Z
Loop, Parse, alphabet, `|
{
MsgBox, %A_LoopField%
}

117:名無しさん@お腹いっぱい。
10/09/09 19:32:06 pRAMZm790
>>115
CharStart = A
CharEnd = Z
Loop, % Asc(CharEnd) -Asc(CharStart) + 1
  MsgBox, % Chr(Asc(CharStart) + A_Index - 1)


118:名無しさん@お腹いっぱい。
10/09/09 19:38:32 pRAMZm790
>>113

以下の"migemo.ahk" をライブラリフォルダに保存。ちなみに c/migemo 1.2 用(つまり32bit用)。
これは文字から正規表現パターンを作るだけなので、あとは普通に正規表現で検索する。
migemo インスタンスは最初に作ってグローバル変数か何かに入れておく。

migemo:=Migemo_Open("C:\Program Files\cmigemo-1.2-dll\dict\migemo-dict")
str = 米日露西伯中韓仏蘭独
If RegExMatch(str, migemo.Query("amerika"), $)
  msgbox, % $

; ---- migemo.ahk ----
Migemo_Open(dict) {
  static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", DllCall("LoadLibrary", "Str", "migemo.dll", "Ptr"))
  Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
  If DllCall("migemo.dll\migemo_close", "Ptr", self.hMigemo)
    self.Remove("hMigemo")
}
Migemo_ObjQuery(self, word) {
  Return DllCall("migemo.dll\migemo_query", "Ptr", self.hMigemo, "AStr", word, "AStr")
}




119:名無しさん@お腹いっぱい。
10/09/09 20:20:32 s6czYEFU0
>>118
おお、できた!ありがとう!

120:名無しさん@お腹いっぱい。
10/09/09 20:56:37 9DOorRwvP
>>116,117
ありがとうございました!
二つともとても参考になりました

121:名無しさん@お腹いっぱい。
10/09/10 14:33:44 p9QDLVxs0
>>94わかるかたどなたかお助けを…

122:名無しさん@お腹いっぱい。
10/09/10 18:09:35 NLRyA43v0
強制的にフォーカス変えてやればなんとかなるね

#SingleInstance, force
#UseHook
^Space::
 SetTitleMatchMode, 2
 IfWinExist, - Mozilla Firefox ahk_class MozillaUIWindowClass
 {
  WinGet, MinMax, MinMax
  WinActivate
  If (MinMax=-1)
   ControlFocus, MozillaWindowClass1
 }
 Return

123:名無しさん@お腹いっぱい。
10/09/10 19:16:36 Qrfx82VL0
zzz()が何千回と繰り返し利用される関数な場合
ptrn000~ptrn111への変数の代入は、どこにどうやって書くのが
パフォーマンス的に優れてるとか分かる人いますか?

zzz(){
ptrn000=a
ptrn001=b
ptrn010=c
ptrn011=d
ptrn100=e
ptrn101=f
ptrn110=g
ptrn111=h

abc:=CheckA() CheckB() CheckC()
Return ptrn%abc%
}

124:名無しさん@お腹いっぱい。
10/09/10 19:19:47 HWyeVSxk0
ptrn000=a
ptrn001=b
ptrn010=c
ptrn011=d
ptrn100=e
ptrn101=f
ptrn110=g
ptrn111=h

zzz(){
abc:=CheckA() CheckB() CheckC()
Return ptrn%abc%
}


125:名無しさん@お腹いっぱい。
10/09/10 19:22:41 Qrfx82VL0
それとも、単純にIFで場合分けした方が良いのでしょうか
こっちは使いにくすぎてやりたくないけどw
zzz(){
  If(CheckA){
    If(CheckB){
      If(CheckC){
        Return h
      }Else Return g
    }Else If(CheckC){
      Return f
    }Else Return e
  }Else If(CheckB){
    If(CheckC){
      Return d
    }Else Return c
  }Else If(CheckC){
    Return b
  }Else Return a
}


126:名無しさん@お腹いっぱい。
10/09/10 19:52:36 NLRyA43v0
意味がよく分からんけど、比較式の回数が少なくなるようにIfを組んだ方が速いのは確か。
>>8のQA1 にもあるけど、Ifのネストよりは論理和・論理積を使った方が速い。

AHKに限らず一般的なことだけど、式を論理演算子で並べる順序でも差が出る。
論理和では真、論理積では偽を、左側に置いた方が1個目の評価で式を抜ける可能性が高くなる。

多分、三項演算子と論理演算子を使うのが一番速いとは思う。

127:名無しさん@お腹いっぱい。
10/09/11 21:31:43 IwJc94rqP
質問です

コマンドプロンプトでCtrl+Vを押したら、クリップボードでコピペできるようにしたいのですが、
Spyで見て ahk_class が ConsoleWindowClass とわかったため、

#IfWinActive ahk_class ConsoleWindowClass
^v::Send,!{Space}ep
^c::Send,unko ; test
#IfWinActive

というように書いてみたのですが、Ctrl+Vで^Vがそのままコマンドプロンプトに送られてしまいます。
(Ctrl+Cもテストで書きましたがこちらも送られませんでした)

試しに^c::Send,unko とだけ書いてCtrl+Cすると、
ちゃんと他のアプリでunkoに贈られるのでAutoHotKey自体は動作しているようです。

Key history and info で表示してみたところ、確かに設定したキーが送られていないようでした。

以前は動いていたような気がするのですが、今になって何故か動かない状況です

128:名無しさん@お腹いっぱい。
10/09/11 21:39:31 wTBLOOWg0
オプションで「簡易編集」にチェックが入っているかどうかを確認。

あと、Send, {RButton} でもおk。

129:名無しさん@お腹いっぱい。
10/09/11 22:18:40 9qTkeMmx0
^v::SendInput, {Raw}%clipboard%

130:名無しさん@お腹いっぱい。
10/09/11 22:20:52 VH8Xeow80
>>127
その記述自体はそれで合ってるから、別の場所がおかしいんじゃないの。
たとえば、その記述の前で不適切なコメントアウトしてるとか。

違うかもしれないけど失敗しやすい問題から一応書いておくと、
/*と*/はそれぞれ行頭に書かないとコメントアウトにならない。
以下のようなのはコメントが閉じられてないと解釈される。
/*~*/
/***
hoge
***/
あと何か書いてある行での;は、中身とくっついてるとコメントにならない。
#IfWinActive ahk_class ConsoleWindowClass;プロンプト
こんなのは動作しない。

131:名無しさん@お腹いっぱい。
10/09/11 23:34:59 El0rBh4T0
>>127
俺Vista使ってるけど、管理者権限でAHKを起動しないと、
コマンドプロンプトでホットキーが動作しなくなったことがある。
コマンドプロンプトは一般権限で起動しているのに。
再起動したら直ったので原因不明。

132:名無しさん@お腹いっぱい。
10/09/12 09:23:11 hFe7w6e00
なんかよくわからないけどAHKきかなくなることはある
Win7でInternetExplorerとかMouseGesture.ahkのジェスチャまったくきかない

133:名無しさん@お腹いっぱい。
10/09/12 09:24:26 hFe7w6e00
↑ユーザーアカウント制御どうたらこうたらってでたアプリからの起動でってぬけてた

134:名無しさん@お腹いっぱい。
10/09/12 13:47:56 XZfOs3RC0
管理者権限で動いてるアプリには効かない。
AHKも管理者権限で動かせば聞くようになる。

135:名無しさん@お腹いっぱい。
10/09/12 20:40:07 hGZO2mS20
>>122
ありがとうございます。遅くなってすみません
その方法でもうまく行きませんでした
というかAHKに限らず、Alt+Tab、タスクバーのクリックなど以外の殆んどの方法でうまくアクティブ化できないみたいです
もうFirefoxやめてChromeにでもしようかと

136:名無しさん@お腹いっぱい。
10/09/12 23:26:47 /5B09T1v0
Revision 59 - September 12, 2010

Fixed: #If expression should now evaluate each expression at most once per keypress in all cases.
Changed: SplashImage uses common image-loading routines; now supports PNG and similar, but results may differ from before for icon files.
Added: For x,y in z.
Added: Loop .. Until expression, usable with any Loop or For-loop.
Added: Named loops; continue outer_loop, break 2, etc.
Debugger: Encode stdout and stderr packets as UTF-8.
Debugger: Allow user to Abort, Retry or Ignore when the initial connection fails.
Debugger: Allow attaching a debugger client by sending the script a registered window message.
Debugger: Allow detaching debugger client by sending the "detach" DBGp command.

ふむ。ループ関連で色々追加か。

こういうのは地味に便利だな
For key,value in Object(1, "あああ", 2, "いいい", 3, "ううう")
 MsgBox, % key " = " value


137:名無しさん@お腹いっぱい。
10/09/13 00:12:32 ogaimglM0
enumオブジェクト涙目

138:名無しさん@お腹いっぱい。
10/09/13 00:46:49 MngYOI9N0
そろそろ仕様を固めてほしいわ

139:名無しさん@お腹いっぱい。
10/09/13 05:50:39 UQiZZW3K0
質問なのですが、AutoHotkeyでSandSを実現するコードってのが、あるじゃないですか。
こういうの。
Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 130 ? " " : "")
+Space:: Send, +{Space}
>+Space:: Return
Space:: RShift

このコードの一行目の%って、どういう意味なんですか?

140:名無しさん@お腹いっぱい。
10/09/13 06:01:55 bpPcPXR70
AHK本家バージョンをWin7で使ってるものだけど、
スタンバイから回復した瞬間に、たまにアプリエラーで死んでしまう。

はやらせるページのCPU使用率とメモリ使用量を知るためのdllを入れてるが、
ほかにとくに目立った処理はしていない。

こんな変な症状で困ってるのは俺だけかな。
どうやって診断すればいいんだろうか?

141:名無しさん@お腹いっぱい。
10/09/13 07:38:26 8oWcPn2M0
ヘルプより
Force an expression:
An expression can be used in a parameter that does not directly support it by preceding the expression with a percent sign and a space or tab.

142:名無しさん@お腹いっぱい。
10/09/13 15:25:38 g6OmHOf00
これ凄く難しいね
C言語ちょろっとかじっただけだけど、全然わかんね
USBテンキーを識別して、個別にリマップするのは可能ですか?

143:名無しさん@お腹いっぱい。
10/09/13 16:01:21 dE5gyF1iP
>>142
USB接続のテンキーが押されたかどうかは、このソフトだけでは識別できない。

HIDのデバイスごとに識別できる外部ツールを使えば出来たはずだが、
やり方は忘れた。過去ログにあるはず。

あるいは、テンキーそのもの(フルキーの右側のキー)と共通して反応してもよければ、

NumpadAdd::
 msgbox,テンキーのプラスが押された
 return

みたいに記述することは可能

144:名無しさん@お腹いっぱい。
10/09/13 16:57:39 g6OmHOf00
>>143
ありがとうございます。
その辺が良くわからなかったので勉強になりました。
右側テンキーは数字入力の為に出来れば残したいと思っていましたが、
アプリ毎に切り替える形で対応しようと思っています。

145:名無しさん@お腹いっぱい。
10/09/13 17:50:14 zNoAbLLW0
他の言語を使ったことがないのでよくわからないのですが
IfEqual, A, foo, SetEnv, B, bar

SetEnv, B, % A = foo ? bar : ""
ならどちらの方が処理が速いのでしょうか
>>8からすると前者のほうが速いのでしょうか?

146:名無しさん@お腹いっぱい。
10/09/13 18:04:18 zNoAbLLW0
書き込んだあとに自分で確かれれば良いことに気づいた
10万回ループさせても気になるほどの速度の差はないのですね
式を書き間違えた上に板を汚して申し訳ないです

147:名無しさん@お腹いっぱい。
10/09/13 18:36:13 oIa5T8Q/0
>>118
これでmigemo.dllのパスもdictと同じように指定するにはどうしたらいいんでしょうか。
Migemo_Open(dll,dict) {
みたいにしようと思ったんですが、"migemo.dll"をdllで置き換えたら
空文字が返ってくるようになるだけでした。


148:名無しさん@お腹いっぱい。
10/09/13 22:51:27 ygAoD+jc0
>>147 こんなんでどうじゃろ?
; ---- migemo.ahk ----
Migemo_Open(dict, dll="migemo.dll") {
  static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", 0)
  If (!base.hModule) {
    If (hModule := DllCall("LoadLibrary", "Str", dll, "Ptr")) {
      base.hModule := hModule
      base.func_close := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_close", "Ptr")
      base.func_query := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_query", "Ptr")
    } else {
      MsgBox, 65, Warning, Failed to initialize Migemo.dll`nContinue?
      IfMsgBox, Cancel
        Exit
    }
  }
  Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
  If DllCall(self.base.func_close, "Ptr", self.hMigemo)
    self.Remove("hMigemo") := 0
}
Migemo_ObjQuery(self, word) {
  Return DllCall(self.base.func_query, "Ptr", self.hMigemo, "AStr", word, "AStr")
}

149:名無しさん@お腹いっぱい。
10/09/13 23:55:10 Mf5787bW0
>>142
ぶっちゃけAutoHotKeyの言語仕様が普及している高級言語と比べて(C言語は今や中級かも知れないけど)
かなり異質なので既存の言語経験者にも慣れにくいと思う

どうしてこうなった?みたいな言語仕様だからなw

似たような用途のAutoItは互換性捨ててバージョン3からふつーの言語っぽくなってC言語経験者なら書きやすいと思うよ
日本語情報は少ないけどね

150:名無しさん@お腹いっぱい。
10/09/14 00:36:49 0t8RRXrH0
AutoIt はホットキーをがしがし使いたいと思うならちょっと不利かも。
たしか以前はホットキー定義に数の制限があったような。

151:名無しさん@お腹いっぱい。
10/09/14 18:13:05 4mkZ8V+x0
>>149
AutoHotKeyはAutoIt ver2を元にした言語仕様だから

152:名無しさん@お腹いっぱい。
10/09/15 10:17:54 bNT4JkPw0
A_LineFileに対してA_LineDirって無いよね?
今まではSplitPathでフォルダパス取得してたんだけど、
なんかA_LineFile . "\..\hoge.xyz"で同階層のファイルパス取得できた。
「ファイル名\..\ファイル名」って相対パスとして問題あるかな?

153:名無しさん@お腹いっぱい。
10/09/15 16:37:28 iTlL7tEk0
>>10
このテンプレおかしいな
ReplaceStr.txtとかで置換されちゃってるっぽい感じだけど

> %URLリンク(www1.axfc.net)
> alert .= (%URLリンク(www1.axfc.net)

の部分正しくは↓

%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]" : ""


A_ とかを片っ端から斧のアドレスに置換してるんだろうか・・・

154:名無しさん@お腹いっぱい。
10/09/15 16:43:34 iTlL7tEk0
>>13もおかしいな

> #1::Talk("<NUMK VAL=URLリンク(www1.axfc.net)



#1::Talk("<NUMK VAL=" A_Hour ">じ/<NUMK VAL=" A_Min " COUNTER=ふん>")


スレ違いだけど自分のJaneStyleのReplaceStr.txtはこうしてる

<rx2>(?<![!-')-=?-Z\\-~])(Sc|He|Ne|H|Li|N|Si|C|O|Al|S|P|Ar|B|K|F|Be|Na|Ca|Mg|Cl|Img|Flv|Flash|File)_(\d+)(?![!-(*--/:;=-\\^-~]) <font color=gray>[URL化]</font> URLリンク(www1.axfc.net) msg

155:名無しさん@お腹いっぱい。
10/09/15 20:20:02 o22lD/5M0
ホントだw いつも同じだろうという感じでよく読んで無かったわ

156:127
10/09/16 00:09:51 rgwZW5mqP
>>128-129
ありがとうございます。

なんということでしょう、マシンを再起動したら問題なく動きました orz

しかし、他にもそんな手があるんですね、すごい・・・

157:名無しさん@お腹いっぱい。
10/09/21 16:33:22 2zEfBL3u0
autohotkeyでcapslockを入れ替えられないのは
autohotkeyのバグなのでしょうか?

158:名無しさん@お腹いっぱい。
10/09/21 16:36:09 UVFUFRK90
入れ替えって、具体的にどういうこと?

159:名無しさん@お腹いっぱい。
10/09/21 16:43:29 1iHcliyr0
>>157
>>4

160:名無しさん@お腹いっぱい。
10/09/21 23:37:23 EZZTxzxq0
ホイール上下で常にマウスカーソルのあるコントロールを操作できるようにすべく
下記のように入力したのですが上だけが効果がありません。
間違いを修正していただけないでしょうか。

[ホイール↑]
CoordMode,Mouse,Screen
MouseGetPos,x,y,hwnd,ctrl,3
wp:=0x00780000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6
lp:=y<<16|x
IfWinExist,ahk_id %hwnd% {
SendMessage,0x84,0,%lp%,,ahk_id %ctrl%
If ErrorLevel=4294967295
MouseGetPos,,,,ctrl,2
ctrl := !ctrl ? hwnd : ctrl
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}

[ホイール↓]
CoordMode,Mouse,Screen
MouseGetPos,x,y,hwnd,ctrl,3
wp:=0xFF880000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6
lp:=y<<16|x
IfWinExist,ahk_id %hwnd% {
SendMessage,0x84,0,%lp%,,ahk_id %ctrl%
If ErrorLevel=4294967295
MouseGetPos,,,,ctrl,2
ctrl := !ctrl ? hwnd : ctrl
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}

161:名無しさん@お腹いっぱい。
10/09/22 00:54:06 0PF8kK/50
明らかにおかしいのは
IfWinExist,ahk_id %hwnd% {
コピペなんだろうけど無理に変えようとしなきゃいいのに

162:名無しさん@お腹いっぱい。
10/09/22 00:55:10 KjsfamAG0
冗長だけど、処理としてはいいんじゃないの? 単にRetrun が抜けてるのかも知れんけど。
俺ならこうするけど。

WheelUp::
WheelDown::
CoordMode,Mouse,Screen
MouseGetPos, x, y
PostMessage, WM_MOUSEWHEEL:=0x020A
, 120 * (InStr(A_ThisHotkey, "Up") ? 1 : -1) * (A_EventInfo ? A_EventInfo : 1) << 16
| GetKeyState("LButton") | GetKeyState("RButton")<<1 | GetKeyState("Shift")<<2 | GetKeyState("Ctrl")<<3 | GetKeyState("MButton")<<4 | GetKeyState("XButton1")<<5 | GetKeyState("XButton2")<<6
, x | y<<16
,, % "ahk_id " DllCall("WindowFromPoint", "Int",x, "Int", y, "Ptr")
Return

163:名無しさん@お腹いっぱい。
10/09/22 00:58:13 GpWbe7BW0
可読性って大事だな、と思った

164:名無しさん@お腹いっぱい。
10/09/22 09:26:05 rTjPB2Jq0
? や | 演算子で1行まとめにしてコンパクトにするのもいいけど
動かないときはいったん分解してわかりやすい形に書き直したほうがいい
その過程でtypoなどの間違いを見つけやすくなるし
人からもらったもののコピペなどでも自力で解読しようとする努力は必要
最終的に質問するにしてもはコード追いやすくしといたほうが答えてもらえる確率高くなる

165:名無しさん@お腹いっぱい。
10/09/22 22:56:31 1Oe7LKkO0
という先輩の有り難いお言葉だ、感謝しろ>>160

166:名無しさん@お腹いっぱい。
10/09/24 13:31:24 sutlVDhd0
何時間間隔とかで実行したいときは、SetTimerを使うようですが、
1日1回13時に実行とか、0:30 1:30 ~ 23:30 とか時間を指定して実行したいときはどうすればいいですか?

167:名無しさん@お腹いっぱい。
10/09/24 13:37:39 1cwmGOJQP
>>166
if A_Hour=13
 {
 msgbox,本日13時処理分
 }

これをsettimerで1時間なり1分間隔でまわす
あるいはifの中に実行済みフラグを付けて実行済みかどうか判別させる

168:名無しさん@お腹いっぱい。
10/09/25 15:51:08 mGiGP7FJ0
Compile_AHK IIだとUPS圧縮せずにコンパイルできますが、
最近のAHK_Lには対応していない様です。
新しいAHK_L用のコンパイラでmpress圧縮せずに
コンパイルする方法ってありますでしょうか?

169:名無しさん@お腹いっぱい。
10/09/25 15:52:36 mGiGP7FJ0
UPS → UPX です

170:名無しさん@お腹いっぱい。
10/09/25 16:16:33 0E4EGhFa0
MouseGesture.ahkを使い始めたのですが
ジェスチャーの条件定義で全てのアプリ(ウィンドウ)に適用させる
条件定義ってどう設定したら良いんでしょうか?
分かる方いましたら教えてください。

171:名無しさん@お腹いっぱい。
10/09/25 16:21:21 g1E8I3WA0
>>170
>>108

172:名無しさん@お腹いっぱい。
10/09/25 17:04:26 0E4EGhFa0
>>171
出来ました。ありがとござます。

173:名無しさん@お腹いっぱい。
10/09/25 21:06:51 AE9eVbN40
Space::Send,{Joy2} とかジョイスティックのキーイベント発生させようとしても動作してくれないね
AHKって基本的にジョイスティックの入力を監視は出来るけど乗っ取れないって理解で良いのかな

Sendmode弄ってみたけどInputでもPlayでもダメみたい、Timerでパッドボタン連射させようと思ったんだけど・・・

174:名無しさん@お腹いっぱい。
10/09/25 23:40:30 yf5nDDog0
そう。できない。>>6 だとちと分かりにくいかもしれんな。

175:名無しさん@お腹いっぱい。
10/09/26 00:47:21 nkRDvKD10
AutoHotkey_L でMsgbox を使って出力すると文字化けします。どうすれば解決しますか?

176:名無しさん@お腹いっぱい。
10/09/26 01:05:54 Q01KCdZZ0
>>175
スクリプトファイルをUTF-8で保存する。

177:名無しさん@お腹いっぱい。
10/09/26 03:55:08 qHniXqZL0
IEキャッシュフォルダ内のファイルを削除したいのですができますか?
FileDelete,C:\Users\owner\AppData\Local\Microsoft\Windows\Temporary Internet Files\*

こう書けばできるかなと思ったんですが削除できませんでした。

178:名無しさん@お腹いっぱい。
10/09/26 06:54:22 nkRDvKD10
ありがとうございました。

179:名無しさん@お腹いっぱい。
10/09/26 23:55:01 npQ7FQgg0
AutoHotkey_L 更新

Revision 60 - September 24, 2010

Added: File.Encoding for changing or retrieving the codepage in use by a File object.
Added: Variadic functions and function-calls and indirect mode for callbacks.
Added: Object.Clone()
Changed: ByRef parameters no longer require the caller to supply a variable.
Changed: Obj.foo := "" now frees foo's contents as originally intended (but still doesn't remove the field).
Changed: OnMessage functions now tolerate optional and ByRef parameters.
Changed: RegisterCallback now enables execute access on callbacks in 32-bit builds (already did in 64-bit builds).
Changed: RegisterCallback now treats explicit ParamCount="" as omitted.
Fixed: For-loop was treating non-expression "0" as true for scripted enumerators.
Fixed: ComEvent (ComObjConnect) not working on the ANSI build.
Fixed: ComEvent (ComObjConnect) not correctly backing up/restoring local vars when calling a function which is already running.
Fixed: Buffer overflow in A_EndChar when there is no end char.
Fixed: Func->mNextFunc not inititialized to NULL (used only by LowLevel scripts).
Debugger: Added the capability to retrieve an object's contents (with a supported debugger client).
Debugger: Fixed a few bugs.

----
可変長引数は便利そうだ。
DllCallの引数に配列オブジェクトを渡すことが出来たみたいで、
可変長引数との連携でDLLの関数のインポートが簡単にできそうでフォーラムが盛り上がっとる。

180:名無しさん@お腹いっぱい。
10/09/27 00:03:23 5TbViGzm0
なるほど、ふむふむ
ほうほうなるほどねーなるほど、うん、なるほどね


すみません英語わかりません

181:名無しさん@お腹いっぱい。
10/09/27 00:38:35 7U+YabrZ0
Cdecl には便利だなぁ

Random, value, 0, 999
MsgBox,% sprintf("%d = 0x%08x", "Int", value, "Int", value)

sprintf(format, params*) {
 VarSetCapacity(buff, 1024) ; バッファ長は適当
 params.Insert(1, "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf"))
 params.Insert(2, "Ptr"), params.Insert(3, &buff)
 params.Insert(4, "Str"), params.Insert(5, format)
 params.Insert("Cdecl Int")
 If DllCall(params*)
  Return buff
}

182:名無しさん@お腹いっぱい。
10/09/27 16:10:50 LQAeJ7X/0
IMEがONになっているときだけ、
A & $B::などのコンビネーションキーを有効にするには、
どうすればいいでしょうか?

IMEがOFFのときには、A押しっぱでAのキーリピートを発生させたいです。
当方、WinXP、AutoHotkey_L使用。IME.ahk導入済みです。

以下、うまくいかなかった残骸。
Hotkey,If,(IME_Get() == 0)
Hotkey,a & $b, Off
Return

Hotkey,If,(IME_Get() == 1)
Hotkey,a & $b,LabelA
Return

LabelA:
Send,{Blind}@
Return

183:名無しさん@お腹いっぱい。
10/09/27 18:12:37 MKGzi6kB0
> Hotkey,If,(IME_Get() == 0)
AutoHotkey_Lは使ってないので文法に違いがあるのかも知れんけど
こういう書き方ってできるんだっけ?

あと、IME_Get() はLoopかSetTimerで定期的に見てやらんといかんのでは?

184:名無しさん@お腹いっぱい。
10/09/27 19:12:21 WJ6+ZZnJ0
>>182
>>9に書いてあるけど、AHK_Lならこんな感じでできる。
#If (IME_GET() == 1)
a & $b::Send,{Blind}@
#If


185:名無しさん@お腹いっぱい。
10/09/27 20:35:00 T8of1KY90
コマンドラインで受け取ったときの%1%とかを関数の中で使う場合
p1 = %1%
IF( p1 ){
って使うしかない?

あとLにするデメリットって何かあるっけ?
2バイト文字を1文字あたり2文字として扱ってるスクリプトがたくさんあると
移行がめんどくさそうだけど

186:名無しさん@お腹いっぱい。
10/09/27 22:14:52 7U+YabrZ0
> p1 = %1%
ってのは、しょうがないとおもって諦めて同じようにやってる。

それ以外のデメリットというか、非互換はDllCall系かな。
ANSI版の関数を決め打ちで呼んでいるスクリプトは修正が必要。
旧流行らせるページのものは殆どこれに該当。
ユニコード版の場合、そこの ActiveX は使わないのが吉。ComObjCreate() を使うべし。

187:名無しさん@お腹いっぱい。
10/09/28 13:55:48 VotiS8pN0
autohotkey_lの話が出ているので便乗して質問します。
ime.ahkを使っています。
goolge日本語入力で、sendで漢字を表示しようとすると文字化けします。
ユニコードでソースを保存しているのですが、なぜかそうなってしまいます。
microsoft imeとatokでは問題ありません。
google日本語入力とautohotkey_lの相性問題でしょうか?

188:名無しさん@お腹いっぱい。
10/09/29 00:35:58 bWv2wkfB0
簡単な再起呼び出し自体はなんとなくわかるのですが
RegExでの再起呼び出しの仕方がよく分かりません
どなたか例を書いていただけないでしょうか

189:名無しさん@お腹いっぱい。
10/09/29 02:10:37 FDn4qtCl0
; 後方参照 : マッチした語句を参照
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])[ア-ン]\1
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :

; 再帰 : パターンの再利用
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])(?1)(?1)
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :

190:182
10/09/29 12:45:50 UMOsfPx00
>>184
ありがとうございます。
ずいぶんシンプルな記述ができるのですね。

昨日、遠回りな記述を発見しまして、それでずっと書いていましたが、これで少しは楽できそうです。
↓遠回りな記述
$b::
If(IME_Get() == 0)
{
Send,b
}Else
{
If(GetKeyState("a","P") == 1)
{
Send,{Blind}@
}Else
{
Send,b
}
}
Return

191:名無しさん@お腹いっぱい。
10/09/29 18:04:59 bWv2wkfB0
>>189
ありがとうございます
今後利用させていただきます

192:名無しさん@お腹いっぱい。
10/09/30 15:48:01 VH7s/lU20
AutoHotkeyで文字列を置換したいのですが…わかりません。
RegExReplace() を使って正規表現による置換をすれば、できるようなのですが難しくてわかりません。
やりたいことは、文字列中のアットマーク以降の文字だけに置換したいのです。

"あいうえお@かきくけこ" → "かきくけこ"
"abcd@efgh" → "efgh"
"0123456@789" → "789"
文字数は決まっていません。

エクセルとかだと、ワイルドカードを使って「*@」を取ってしまえばできるのに。
教えてください。お願いします。

193:名無しさん@お腹いっぱい。
10/09/30 16:01:14 EZTOI8wM0
これつかって、アクティブウインドウを中央に配置 できる?

194:名無しさん@お腹いっぱい。
10/09/30 16:11:35 4NVtvZdn0
WinMoveでできるよ

195:名無しさん@お腹いっぱい。
10/09/30 16:18:28 TR4zMDWK0
>>192
RegExReplaceでやりたいなら

unko =
(
あいうえお@かきくけこ
abcd@efgh
0123456@789
)
unko := RegExReplace(unko,"`n).*?@(.*?)",$1)
msgbox,% unko

196:名無しさん@お腹いっぱい。
10/09/30 16:29:05 VH7s/lU20
>>195
出来ました。

.*? を使えばエクセルのワイルドカード*と同じように使えるのですね。

ありがとうございます。
正規表現って難しいですね。
その代わりいろんなことができるのでしょうけど。

197:名無しさん@お腹いっぱい。
10/09/30 18:54:12 5DqLBhFu0
AutoHotkey_LのUnicode版で標準入出力ってどうすればいいですか?
>>11だと文字コードをどう変換してもうまく動作してくれないです。

198:197
10/10/01 08:02:15 /Nakdzh+0
ここにあるUnicode版AutoHotkey_L用の関数で出来ました
URLリンク(www.autohotkey.com)


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