もう2時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]萌えな犬写真。[PR]  

AutoHotkey スレッド part11

1 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:30:27 ID:9VNdm34c0
■公式
http://www.autohotkey.com/

■日本語解説
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )

AutoHotkeyJp
http://sites.google.com/site/autohotkeyjp/

Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/

■過去スレ
1 http://pc7.2ch.net/test/read.cgi/software/1098531338/
2 http://pc7.2ch.net/test/read.cgi/software/1129836713/
3 http://pc11.2ch.net/test/read.cgi/software/1157043396/
4 http://pc11.2ch.net/test/read.cgi/software/1184556627/
5 http://pc11.2ch.net/test/read.cgi/software/1201502896/
6 http://pc11.2ch.net/test/read.cgi/software/1219130051/
7 http://pc12.2ch.net/test/read.cgi/software/1230694774/
8 http://pc12.2ch.net/test/read.cgi/software/1243005818/
9 http://pc12.2ch.net/test/read.cgi/software/1253888736/
10 http://pc12.2ch.net/test/read.cgi/software/1265518996/

【重要】 スクリプトが動かない等の質問は、OS・AHKのどのバージョンを利用しているかを明記すること。

関連リンク>>2以降も参照

2 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:31:07 ID:9VNdm34c0
■派生版
AutoHotkey_L (内部Unicode、オブジェクト指向などの言語仕様拡張)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

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

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

AutoHotkey.dll (真のマルチスレッド対応など) (AHKLベース)
http://www.autohotkey.net/~tinku99/ahkdll/

駄目文字微対策版 (ファイル名処理部分のみ不具合対応)
http://yak.myhome.cx/junks/#ahk.cp932

■ 関連スレ
AutoIt
http://pc12.2ch.net/test/read.cgi/software/1277173327/

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

AutoHotkey メモ - Principia
http://principia.s54.xrea.com/index.php?AutoHotkey%20%A5%E1%A5%E2
AutoHotKey - notitle.txt
http://kan.s151.xrea.com/?AutoHotKey
なまず日記
http://www.tierra.ne.jp/~aki/diary/
eamatの日記
http://d.hatena.ne.jp/eamat/
おばけ日記
http://d.hatena.ne.jp/obake/

1 Hour Software by Skrommel - DonationCoder.com
http://www.donationcoder.com/Software/Skrommel/
Tips N Tricks(公式フォーラムのトピック)
http://www.autohotkey.com/forum/topic8795.html&highlight=gui

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

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

 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
  「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
  というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
  リマップ( 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 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:53:38 ID: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 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:54:18 ID:JeFr0hn90
■ IME関連

Q1:IMEのOn/Offの切り替えや、On/Offの状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pub/MyScript/ の「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 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:55:03 ID: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:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
  対象となりうる文字:
    ―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx\\
  これは、>>1にある「駄目文字微対策版」を使うことで回避できる。

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

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

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

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

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

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

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

ttp://pc11.2ch.net/test/read.cgi/software/1219130051/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, |
{
%http://www1.axfc.net/uploader/A/so/
alert .= (%http://www1.axfc.net/uploader/A/so/
}
Tooltip, %alert%
return

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

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

12 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:35:53 ID: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 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:36:48 ID:elYoeAxq0
ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報

準備:
http://www.a-quest.com/products/aquestalk.html からWin版を落として、
書庫にあるAquesTalk2Da.dll を Autohotkey.exe のフォルダに置く。

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

#1::Talk("<NUMK VAL=http://www1.axfc.net/uploader/A/so/

; 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 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:37:53 ID:elYoeAxq0
テンプレ以上。

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

15 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:53:34 ID:p5e5vCII0
いちおつ

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

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


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

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

19 :名無しさん@お腹いっぱい。:2010/07/31(土) 14:16:51 ID:K6Z0VvT+0
> ttp://pc12.2ch.net/test/read.cgi/software/1265518996/979 の「ERROR: No COM Dispatch Object!」の件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29 :名無しさん@お腹いっぱい。:2010/08/04(水) 10:35:14 ID: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 :名無しさん@お腹いっぱい。:2010/08/04(水) 10:36:01 ID: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 :名無しさん@お腹いっぱい。:2010/08/04(水) 11:45:02 ID:5a8nfcIui
32bit符号なしが UINT だけど、全部がポインタじゃないよ。
フラグとかで使う DWORD 型はそのまま UINT のままでいい。

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

32 :名無しさん@お腹いっぱい。:2010/08/04(水) 14:08:02 ID:RjWEdL6U0
>>25
$

33 :25:2010/08/04(水) 17:34:52 ID: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 :名無しさん@お腹いっぱい。:2010/08/04(水) 23:03:24 ID:0HOUPXSK0
Windows7のエクスプローラのリストビューにアクセスする方法ってありますか?
デスクトップ以外だとうまくいかないのですが

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

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

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

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

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

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

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

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

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

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

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

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

45 :25:2010/08/07(土) 01:55:44 ID: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 :名無しさん@お腹いっぱい。:2010/08/08(日) 01:11:57 ID:3q3w8jHr0
AutoHotkeyでボス(嫁)が来たスクリプトを作ろうとしているのですが
Ctrlキーの二度打ちを設定するのは不可能でしょうか
^1::Send, #dでは危うかったので、御存知の方宜しく御願いします。

47 :名無しさん@お腹いっぱい。:2010/08/08(日) 06:57:40 ID:KpyNAP6d0
>>46
http://endoh-namazu.tierra.ne.jp/diary/?date=20050916

48 :名無しさん@お腹いっぱい。:2010/08/09(月) 10:32:44 ID: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 :名無しさん@お腹いっぱい。:2010/08/09(月) 10:55:46 ID:JfWbspPo0
どうせならこのぐちゃぐちゃな文法も直してくれればいいのに

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

51 :名無しさん@お腹いっぱい。:2010/08/09(月) 13:27:05 ID: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 :名無しさん@お腹いっぱい。:2010/08/09(月) 14:35:57 ID:W80hlfpgi
> Quote:
> EDIT: RegisterCallback() broken:
>
> Thanks. I should've known there was a reason for that 'add'. Quote:
New code:

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

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

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

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

なんなのこれぇ

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

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

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

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

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

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

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

■ キャレット(文字入力カーソル)が表示されているかどうかで判断するなら
http://pc12.2ch.net/test/read.cgi/software/1265518996/53


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

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

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

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

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

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

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

たとえば、

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

としたら、

If (str == hoge . piyo)

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

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

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

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

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

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

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


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

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

67 :名無しさん@お腹いっぱい。:2010/08/15(日) 17:08:23 ID:zPLp0lVT0
show

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

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

70 :名無しさん@お腹いっぱい。:2010/08/15(日) 21:29:30 ID: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 :名無しさん@お腹いっぱい。:2010/08/15(日) 21:30:46 ID: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 :名無しさん@お腹いっぱい。:2010/08/15(日) 22:02:40 ID:ZDKKr+GM0
インストーラにUnicode版とANSI版を同梱するなら、x64版も同梱すればいいのに
大して容量変わらないじゃん…

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

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

; 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 :名無しさん@お腹いっぱい。:2010/08/16(月) 06:55:58 ID:I066VLbw0
AHKL_x86 では NumGet(&OBuf + A_PtrSize) がタッチパッド状態を反映します。

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

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

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

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

80 :名無しさん@お腹いっぱい。:2010/08/19(木) 15:38:09 ID: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 :名無しさん@お腹いっぱい。:2010/08/21(土) 17:49:24 ID:LHqwtwThP
関数で、渡したいパラメータは1つで、そこで処理させて、返却したいデータが複数(5個くらい)で、
もらったデータのうち、次の処理で必要なものが、その時々で異なる関数があります。

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

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

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

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

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

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

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



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

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

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

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

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

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

88 :名無しさん@お腹いっぱい。:2010/08/28(土) 00:55:26 ID: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 :名無しさん@お腹いっぱい。:2010/08/30(月) 12:06:03 ID:d9zUkDoY0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ 更新。

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 :名無しさん@お腹いっぱい。:2010/08/30(月) 12:09:16 ID:d9zUkDoY0
Lexikos > I've added a 64-bit option to the installer, enabled only if you're on a 64-bit system.

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


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

92 :名無しさん@お腹いっぱい。:2010/09/04(土) 16:58:03 ID:TlzoJX8wP
おk

93 :名無しさん@お腹いっぱい。:2010/09/04(土) 23:58:47 ID: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 :名無しさん@お腹いっぱい。:2010/09/05(日) 17:18:59 ID:GLHR6bhm0
最小化状態のFirefoxをWinActivateでアクティブ化すると、
ウィンドウは元に戻るんですがFirefoxがキー入力を受け付けない変な状態になります
どうにか対策方法とかないでしょうか? Firefox側の問題じゃないかとは思うんですが

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

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

97 :名無しさん@お腹いっぱい。:2010/09/05(日) 18:50:39 ID:NvhQsR8q0
>>95
http://www.autohotkey.com/forum/topic24234.html
※上記ページから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 :名無しさん@お腹いっぱい。:2010/09/05(日) 19:39:33 ID:m6I/5iFo0
>>96-97
ありがとうございます。
こういう関数結構あるみたいですね。
Lだと
http://www.autohotkey.net/~majkinetor/Tray/Tray.html

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

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

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

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

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

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

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

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

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

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

Vista Audio Control Functions v2.0
http://www.autohotkey.com/forum/topic23792.html

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


118 :名無しさん@お腹いっぱい。:2010/09/09(木) 19:38:32 ID: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 :名無しさん@お腹いっぱい。:2010/09/09(木) 20:20:32 ID:s6czYEFU0
>>118
おお、できた!ありがとう!

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

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

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

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

123 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:16:36 ID: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 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:19:47 ID: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 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:22:41 ID: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 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:52:36 ID:NLRyA43v0
意味がよく分からんけど、比較式の回数が少なくなるようにIfを組んだ方が速いのは確か。
>>8のQA1 にもあるけど、Ifのネストよりは論理和・論理積を使った方が速い。

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

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

127 :名無しさん@お腹いっぱい。:2010/09/11(土) 21:31:43 ID: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 :名無しさん@お腹いっぱい。:2010/09/11(土) 21:39:31 ID:wTBLOOWg0
オプションで「簡易編集」にチェックが入っているかどうかを確認。

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

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

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

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

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

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

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

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

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

136 :名無しさん@お腹いっぱい。:2010/09/12(日) 23:26:47 ID:/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 :名無しさん@お腹いっぱい。:2010/09/13(月) 00:12:32 ID:ogaimglM0
enumオブジェクト涙目

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

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

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

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

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

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

141 :名無しさん@お腹いっぱい。:2010/09/13(月) 07:38:26 ID: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 :名無しさん@お腹いっぱい。:2010/09/13(月) 15:25:38 ID:g6OmHOf00
これ凄く難しいね
C言語ちょろっとかじっただけだけど、全然わかんね
USBテンキーを識別して、個別にリマップするのは可能ですか?

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

> %http://www1.axfc.net/uploader/A/so/
> alert .= (%http://www1.axfc.net/uploader/A/so/

の部分正しくは↓

%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 :名無しさん@お腹いっぱい。:2010/09/15(水) 16:43:34 ID:iTlL7tEk0
>>13もおかしいな

> #1::Talk("<NUMK VAL=http://www1.axfc.net/uploader/A/so/



#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> http://www1.axfc.net/uploader/$1/so/$2 msg

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

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

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

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

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

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

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

160 :名無しさん@お腹いっぱい。:2010/09/21(火) 23:37:23 ID: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 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:54:06 ID:0PF8kK/50
明らかにおかしいのは
IfWinExist,ahk_id %hwnd% {
コピペなんだろうけど無理に変えようとしなきゃいいのに

162 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:55:10 ID: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 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:58:13 ID:GpWbe7BW0
可読性って大事だな、と思った

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

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

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

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

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

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

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

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

171 :名無しさん@お腹いっぱい。:2010/09/25(土) 16:21:21 ID:g1E8I3WA0
>>170
>>108

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

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

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

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

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

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

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

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

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

179 :名無しさん@お腹いっぱい。:2010/09/26(日) 23:55:01 ID: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 :名無しさん@お腹いっぱい。:2010/09/27(月) 00:03:23 ID:5TbViGzm0
なるほど、ふむふむ
ほうほうなるほどねーなるほど、うん、なるほどね


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

181 :名無しさん@お腹いっぱい。:2010/09/27(月) 00:38:35 ID: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 :名無しさん@お腹いっぱい。:2010/09/27(月) 16:10:50 ID: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 :名無しさん@お腹いっぱい。:2010/09/27(月) 18:12:37 ID:MKGzi6kB0
> Hotkey,If,(IME_Get() == 0)
AutoHotkey_Lは使ってないので文法に違いがあるのかも知れんけど
こういう書き方ってできるんだっけ?

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

198 :197:2010/10/01(金) 08:02:15 ID:/Nakdzh+0
ここにあるUnicode版AutoHotkey_L用の関数で出来ました
http://www.autohotkey.com/forum/topic16823-90.html&sid=e351cf2ee922bfdc51737d40e44b2124

199 :名無しさん@お腹いっぱい。:2010/10/03(日) 18:23:46 ID:HDrPojWh0
Revision 61 - October 3, 2010

Added: ObjClone(Object), forgotten when Object.Clone() was implemented.
Added: Support for RegEx Unicode properties in Unicode builds. Also upgraded PCRE to 8.10.
Added: Object.Remove(int, "") removes Object[int] without affecting other keys.
Changed: ComObj.xyz() is now always treated as a method-call.
Changed: Var := 123 is now left as an expression, for consistency.
 This makes Var := 123 and Var := (123) equivalent, whereas previously the former assigned only a string
 and the latter assigned both a string and a cached binary integer.
 In particular, this avoids some confusing type mismatch errors with COM objects.
Fixed: Dynamic variadic calls to functions with mandatory parameters.
Fixed: The final parameter of an assume-global variadic function had to be explicitly declared local.
Fixed: Static initializers interfering with setting of breakpoints.
Fixed: More pointer size-related errors with PCRE callouts on x64 builds.
Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n).
Fixed: Object.Remove(n) returned 0 (not "") if Object[n] didn't exist.

200 :名無しさん@お腹いっぱい。:2010/10/04(月) 14:26:26 ID:9MmDvLON0
>>199のうち分からないのが2つあります

>Changed: Var := 123 is now left as an expression, for consistency.

>Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n).
です。

前の方は、"left as an expression, for consistency"が意味不明です。
説明文は分かるのですが…

後の方は "'M' option" ということば自体が分かりません。
はやらせるページにこんな記述はなかったと思います。

201 :名無しさん@お腹いっぱい。:2010/10/04(月) 14:51:56 ID:kBE0cxgz0
>>200
前者は続く文読めばわかるよね。
後者は公式のドキュメントに書いてあるよね↓
Input [, OutputVar, Options, EndKeys, MatchList]
Options
M: Modified keystrokes such as Control-A through Control-Z are
recognized and transcribed if they correspond to real ASCII characters.
Consider this example, which recognizes Control-C:

202 :名無しさん@お腹いっぱい。:2010/10/04(月) 15:21:38 ID:yKgJ7klQ0
履歴書の習得言語にAutoHotkeyと書きかけたw

203 :名無しさん@お腹いっぱい。:2010/10/04(月) 15:36:23 ID:UJOD4LlF0
>>200
前者の件。

書いてあるとおりだけど、以前までのRevでは数値で書いてあっても文字として格納していて、
今Revからは式の結果が格納される。

例) 以下を実行した結果。

Rev.61    : 256
以前のもの : 0x100

; ---- test.ahk ----
; SetFormat, IntegerFast, d
MsgBox, % Func()
Func() {
 static value := 0x100
 Return value
}


204 :名無しさん@お腹いっぱい。:2010/10/04(月) 20:53:06 ID:UJOD4LlF0
ふむ。おもろいな。

param1 := Object("x", 100, "y", 200, "z", "hoge")
param2 := Object(1, 100, 2, 200, 3, 300, 4, 400, 5, 500)

Func1(param1*)
Func2(param1*)
Func3(param2*)
Func4(param2*)

Func1(x, y) {
  MsgBox, % "x + y = " (x + y)
}

Func2(z) {
  MsgBox, % "Hello, " z "!"
}

Func3(p1, p2, p3) {
  MsgBox, % "p1 = " p1 "`np2 = " p2
}

Func4(params*) {
  num := 0
  For k, v in params
    num += v
  MsgBox, % "total = " num
}

205 :名無しさん@お腹いっぱい。:2010/10/05(火) 09:40:14 ID:4UkphArqP
AutoHotkeyjp新機能説明も追加してくれてるのか
最近の更新に全くついていけてないからありがてえ

206 :200:2010/10/05(火) 12:49:12 ID:UVi77zYS0
みなさんありがとうございます。
具体的に分かりました。

207 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:08:06 ID:oDxpYZL70
ラベルの動的生成ってできるでしょうか?
Menuの動的生成しようとして機能にラベルしか割り当てられなくて詰まった・・・

208 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:22:40 ID:LeJtXyaf0
ラベルはハードコーディングするしかないよ。
メニューの動的生成なら、固定ラベルに飛ばして、
  A_ThisMenu, A_ThisMenuItem, A_ThisMenuItemPos
で分岐すりゃいいだけかと。

Loop, %A_MyDocuments%\*.*
{
File%A_Index% := A_LoopFileFullPath
Menu, Menu1, Add, %A_LoopFileName%, Label1
}
Menu, Menu1, Show
Return

Label1:
MsgBox, % "Your select is : """ File%A_ThisMenuItemPos% """"
Return


209 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:28:09 ID:oDxpYZL70
>>208
特殊変数気付きませんでした
それで自分のやりたいことはできます。ありがとうございました

210 :名無しさん@お腹いっぱい。:2010/10/07(木) 01:52:49 ID:iPOq7eSA0
autohotkeyjpにヒアドキュメントの説明を掲載して下さいませんか
流行らせるページにあった簡単な説明で構いませんので(http://ahk.xrea.jp/Scripts.htmlの「ヒアドキュメント」)
もしも既に説明があったら済みません

211 :名無しさん@お腹いっぱい。:2010/10/07(木) 03:13:12 ID:l69mXxdt0
乗ってなかったのか。かなりやっつけ気味に書いたw
http://sites.google.com/site/autohotkeyjp/reference/Scripts#heredocument

イントロダクション と スクリプト仕様 と 関数 あたりは内容がグチャグチャなんで
いったん整理したいとは思ってる。
というか、AHKLのヘルプ準拠でいいんだろうけど、ヘルプ自体が流行らせるページと違う部分が結構あって
リンク切れ(とくにページ内アンカー)のチェックが面倒そうで、手を付けずにいる。


212 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:30:10 ID:k5uIxNSi0
Autohotokeyで生成されたGuiでなく
通常のコンテキストメニューを対象にしたいのですがどのようにすればよいのでしょうか

213 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:34:59 ID:jgByoxEp0
>「通常のコンテキストメニューを対象にしたいのですが」

対象をどうしたいのかがよくわからない。

表示中の項目を抜き取って、別の項目に差し替えて処理をさせるとかは
AHKでは、かなり難しいレベルだと思う。

214 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:48:21 ID:k5uIxNSi0
>>213
透過処理をさせたいのですが

215 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:51:38 ID:jgByoxEp0
ますます意味がわからない。ゆとり世代なの?

216 :名無しさん@お腹いっぱい。:2010/10/07(木) 12:04:01 ID:k5uIxNSi0
コンテキストメニューを半透明にしたい
WinSetでコンテキストメニューを透過させようとした
タイトルの指定方法がわからない
WinSetで可能なのかあるいは他の方法があるのか
どなたかわかる方いらっしゃいませんか?

217 :名無しさん@お腹いっぱい。:2010/10/07(木) 13:44:00 ID:eLnaLlly0
>>216
ahk_class #32768
過去スレでマウスカーソル上の
ウインドウタイトルやクラスの取り方を見た気がする

218 :名無しさん@お腹いっぱい。:2010/10/07(木) 14:01:25 ID:k5uIxNSi0
>>217
AU3_Spy.exeで取得できなかったので出来ないものだと思っておりました
ありがとうございます

219 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:08:25 ID:g9/BQ1pa0
質問です、
AutoHotkey はキーボードkey押しで監視対象ソフトへのショートカット押しぐらいしか使ったことがないのですが、
質問内容は2種類です。

1.他の動作に悪影響を出しにくい高速な文字列の受け渡しとその手法。
 自作ソフト(非表示常駐もする)から作成される文字列をAHKで高速で受け取れるようにって出来るものでしょうか?
 300 バイト/秒(1000 ms) 〜 30 バイト/100 ms ぐらいの可変バイト数/速度

 受け取れれば、AHK から他のソフトへ送信できるようにしたい。
 やりたい事は特定ハードウェアから情報(18 ms )を受け取れる自作ソフトからデータを他で簡単に利用できるようにしておきたい。

 悪影響の例 ) 他のソフトとの文字列受け渡し用にクリップボードを使うとその文字列に占有されて
    他でコピー&ペースト作業に支障がでる。

2.他のソフトをコントロールする為に自作ソフトからイベント発行するのに効率的な方法。
 仮想キーコードの出力は出来るので、AHK で囲い込み出来ると良いのですが、、、、、

 悪影響の例? ) 自作ソフト↑仮想キー発行でさせたい処理以外に
     一般キーボード入力と間違われて他の割り当てで重複処理されると困る。

上記の2点が可能なら、自作ソフトの特定動作やデータに対してAHK 経由で他のソフトを自由にコントロールできて便利なのです。
御教示お願いします。

AutoHotkeyを流行らせるページなどで入手したマニュアルや AHK の C++ ソースをざっと眺めてみたのですがよく解らない。


220 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:37:56 ID:sSYr464w0
1. 透明GUIにEditBox作って自作ソフト側から文字列ドロップとかSendとか
文字コード制限出ちゃうかもだけど

2.簡単にやりたいなら[F13]〜[F20]あたりのキーボードにないキーコード使う
ロジのマウスみたいにドライバで発行可能なハードもあるので注意が必要かも

確かRegisterCallback()やOnMessage()でイベント通知できたような
外部とのやりとりに使えるかどうかはわかんないけど
Message飛ばせれば1,2 ともに解決しそうではあるね

221 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:54:15 ID:l69mXxdt0
イベント通知はSendMessageで行う。AHK側はOnMessageで待ち受けする。

自作アプリ側でAHKのプロセス内に VirtualAllocEx でメモリ確保して文字列書き込んで、
SendMessage でそのアドレスを通知する。

AHK側はメッセージを受けとったら、該当アドレスのデータをコピーしてを変数に格納(AHKLのStrGetだと楽)。
成功コードを返す。

SendMessageの戻りを受けて、メモリを解放。

222 :210:2010/10/07(木) 20:50:06 ID:iPOq7eSA0
>>211
ありがとうございます!

223 :名無しさん@お腹いっぱい。:2010/10/07(木) 21:05:51 ID:g9/BQ1pa0
>>220-221
お早い返答で恐れ入ります。

RegisterCallback() 関数はAHK の関数ですね、速度は出せなさそうなのでキー監視用途でしょうか?

Win32API の SendMessage 関数
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
ですか、

http://wisdom.sakura.ne.jp/system/winapi/win32/win52.html
戻り値待ちで停止する訳にはいかないので、送りっぱなしの非同期の
PostMessage() が都合が良いかなぁ

EditBox やテキストBox を自作ソフトに設置すると簡単な文字列は AHK で拾えるということでしょうか?
それだと楽で良い、、、
それとも透明GUIはAHK 側?
なにぶん AHK の解説文が難解でして

224 :名無しさん@お腹いっぱい。:2010/10/07(木) 21:23:59 ID:l69mXxdt0
返答待ちっていっても数10ms位だと思うけど。

225 :名無しさん@お腹いっぱい。:2010/10/07(木) 22:13:56 ID:sSYr464w0
>EditBox やテキストBox を自作ソフトに設置すると

逆かな、AHK側にGUIでウィンドウ作って自作ソフト側から投げてやる
でも221の方法でMessage投げた方が負荷は軽いしスマートだと思う

226 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:20:42 ID:nVbOIDnb0
RegExReplaceで「"」を「あ」に置換する場合エラーが出るんですが
RegExReplaceで「"」のエスケープはどうすればよいのでしょうか?

227 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:42:17 ID:k5uIxNSi0
Hoge = "hogehoge"
MsgBox, % RegExReplace( Hoge, """", "あ")
MsgBox, % RegExReplace( Hoge, "\x22", "あ")
MsgBox, % RegExReplace( Hoge, Chr(34), "あ")

228 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:51:30 ID:nVbOIDnb0
おーサンクス!!!
助かりました。

229 :名無しさん@お腹いっぱい。:2010/10/08(金) 10:12:36 ID://1JnWBT0
アッー!

230 :名無しさん@お腹いっぱい。:2010/10/08(金) 15:41:22 ID:5WHkkVUH0
FileDelete, atwiki.html
word = おーとほっときー
url = http://www1.atwiki.jp/test/?cmd=search&keyword=%word%
Run, %url% ;←Firefoxで開くと正常
URLDownloadToFile, %url%, atwiki.html ;←「おーとほっときー」が文字化け・・

@wikiの検索結果ページを保存したいんだけど、URNDownloadToFile使うとすごい文字化けしてしまう
どうにかして文字化けさせずファイルに保存できませんか?

231 :名無しさん@お腹いっぱい。:2010/10/08(金) 16:38:34 ID:5v4rxvwM0
http://orera.g.hatena.ne.jp/misttrap/20070214/p1

232 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:30:24 ID:7oKYknjD0
>>230
URLEncode関数で、エンコードしてから渡せば、うまくいくはず。
検索ワードの間のスペースとかも、適宜加工する必要がある。

Firefoxで開けるのは、それをFirefox側でやってくれてるからじゃない?

233 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:35:58 ID:5WHkkVUH0
>>231
ありがとう
AutoHotkey_Lではできなかったから普通の方でやったら動いたんだけど、
#$%&てstー、オートホットキー といれてみたら
?E?E??E??E??E???E?t?E、オート?EチE??キー になってしまっててちょっと使えそうにないかも・・

234 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:37:08 ID:5WHkkVUH0
>>232
URLEncode関数なんてあったんですか
ちょっと調べてみます、ありがとう

235 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:38:53 ID:g179rdT00
word := UrlEncode("おーとほっときー")
   ↑ 式での代入なので注意

; AHKL用超簡易版。enc には UTF-16, UTF-8, CP932(=Shift_JIS), CP50220(=JIS) が利用可。EUCは無理。
; URL全体には使わず、エンコードしたい部分だけに使うこと。
UrlEncode(str, enc="UTF-8") {
 hex := "00", func := "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf")
 VarSetCapacity(buff, size:=StrPut(str, enc)), StrPut(str, &buff, enc)
 While (code := NumGet(buff, A_Index - 1, "UChar")) && DllCall(func, "Str", hex, "Str", "%%%02X", "UChar", code, "Cdecl")
  encoded .= hex
 Return encoded
}


236 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:43:10 ID:5WHkkVUH0
>>235
おお、AHK_L最新でばっちり動きました!
自分じゃどうやってもできなかったので本当に助かりました
皆さんありがとうございました

237 :名無しさん@お腹いっぱい。:2010/10/08(金) 19:56:18 ID:i7+Z9MYnP
1年くらい前にここでいろいろ教えてもらったものですが

やっとここで教えてもらったことをまとめられましたので報告します。

お題はパソコン学習リモコン「PC-OP-RS1」をAutoHotkey_Lで操作するです。

スクリプト自体はかなり前から出来ていたんですけどね

このたびHPにしてみました。

ttp://xbmc.inpane.com/main/rc/autohotkey.php

AutoHotkey_Lと学習リモコンの組み合わせはいろいろできそうです。

いろんな赤外線の信号をデータベース化しちゃおうかな


238 :名無しさん@お腹いっぱい。:2010/10/08(金) 20:31:07 ID:1OfUT/JmP
なんか面白そうなことやってんな
とりあえず乙

239 :名無しさん@お腹いっぱい。:2010/10/08(金) 20:47:20 ID:g179rdT00
ほぅ、http://pc12.2ch.net/test/read.cgi/software/1253888736/321,323 の頃の人か。
色々と乙。

240 :237:2010/10/09(土) 20:19:44 ID:Wj3h9FRbP
とりあえず実際に動かしてるところをビデオに撮ってようつべに上げました。

http://xbmc.inpane.com/



241 :名無しさん@お腹いっぱい。:2010/10/09(土) 22:56:56 ID:lnxF+yoC0
こういう説明動画はいいね
AutoHotkey を使ってどう動かすか、という様を伝えるには
文字よりもわかりやすそう

242 :名無しさん@お腹いっぱい。:2010/10/10(日) 00:33:56 ID:q9exBTyQ0
Ahk2Exe_Lについて質問です

autohotkey_lのサイトの下の方にAhk2Exe_Lと書いてますが
この実行ファイル版は無いのでしょうか?

インストール先のcompilerフォルダを見ても、Ahk2Exe_LではなくAhk2Exeしかありません
それか、Ahk2Exeが実際にはAhk2Exe_Lなのでしょうか
この点が分かりません

243 :名無しさん@お腹いっぱい。:2010/10/10(日) 11:36:01 ID:lz6M9l8S0
>>235
これCP50220だけ出来なくない?

244 :名無しさん@お腹いっぱい。:2010/10/10(日) 12:14:00 ID:Oad5IvFI0
推薦エディタのSciTE4を使ってるんですが
新規作成する場合、デフォルトで文字コードをUTF-8にすることはできませんか?

245 :名無しさん@お腹いっぱい。:2010/10/10(日) 13:05:16 ID:LwCFr4mc0
>>243
エスケープシーケンスが付いてんじゃないの?

http://euc.jp/i18n/charcode.ja.html#chap1
> ・JISコード
> ASCIIと半角カタカナを基本とし、漢字が追加されています。 ASCIIと漢字のコード範囲が重複するため、
> 以下のようなエスケープシーケンスによって切り替えます
>  漢字の開始
>    ESC $ @ または ESC $ B
>  ASCIIの開始
>    ESC ( B または ESC ( J

246 :名無しさん@お腹いっぱい。:2010/10/10(日) 14:43:11 ID:ASYSCNp+0
中古で買ったWindowsMobileにAutohotkeyforPocketPC入れてみた。
調べたら更新されててユニコード版もあった。
ほんとに動くんだな。感動したわ。
それにしてもPocketPC版についての日本語の情報はないねw 誰もつかってねえのかな?

247 :名無しさん@お腹いっぱい。:2010/10/10(日) 17:02:10 ID:kjM2+W8l0
If( !IsOjbect( objHoge := Object() ) )
  MsgBox, えらー!
If( !objHoge.Insert( "HoGe" ) )
  MsgBox, えらー!
If( !objHoge.Remove() )
  MsgBox, えらー!

・・・ってエラーチェックってすべき?
視認性も悪くなるし何よりもめんどくさくなってきた

248 :名無しさん@お腹いっぱい。:2010/10/10(日) 19:55:06 ID:jwThGami0
AHKってテキスト読み込みと追加書き込みはできるけど
消したり書き換えはできないよね?
行削除したいときとかってどうやって対処してますか?


>>242
たしかAhk_Lと一緒にあるAhk2ExeがL版だった気がするから置き換えればおk
プロパティのバージョン確認して、本体と2exeが同じバージョンなら大丈夫
あと蛇足かもだが、.ahkのエンコードをUTF-8(BOM付き)にしないといかん

249 :242:2010/10/10(日) 20:24:03 ID:q9exBTyQ0
>>248
そうでしたか。ありがとうございます。

250 :名無しさん@お腹いっぱい。:2010/10/10(日) 21:50:50 ID:LwCFr4mc0
>>247
エラーチェックするのって、自分以外にアクセスする場合でだけいいんでないの?
(ファイル、ネットワーク、別プロセスetc)
引数が足りなくて、オブジェクト作れないとかはスクリプトをきちんと書けばどうにかなるもんだし。
( obj := Object(params*) は厄介そうだが・・・ )


----


ところで、URLDownloadToFile がXPだと動かないバグがあって最ビルドしたやつを配布してるから、
思い当たる人はバイナリを更新した方がいいね。
※ x86 Unicode だとファイルサイズは同じだけどハッシュ値は違ってきちんと中身が変わってる

251 :名無しさん@お腹いっぱい。:2010/10/10(日) 21:56:48 ID:6FE7Ljpd0
>>248
自分はファイルの内容を全部読み込んで、必要なところを編集させて、
ファイルを消去して、新規書き込みしてる

252 :名無しさん@お腹いっぱい。:2010/10/10(日) 22:03:04 ID:EA29JKlO0
>>248
やったことないけど Loop,READ を使えばできるんじゃない

253 :名無しさん@お腹いっぱい。:2010/10/11(月) 20:36:40 ID:ObivaGrB0
>>250
ちらほらフォーラムでも言われてたのに自分は動いてるからってさんざん無視してたが
やっとLexikos謝罪か。うーん

254 :名無しさん@お腹いっぱい。:2010/10/11(月) 21:08:49 ID:FuEjTDPk0
まぁ、フォーラムも、愉快な仲間達からのツッコミと、
ユニコード版に関する混乱で「互換性のページ見ろ」で解決するやつ
で埋まってるからなぁ

255 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:12:18 ID:DhLMtFuv0
>>251
だよねやっぱそれしかないか
消すのに成功して書くのに失敗した場合は
対象ファイルが消えてしまうと思うとちょっと不安なんだよね

>>252
読み込みは色々できるけど、書き込みはFileAppendしかないんだ
iniの形式なら消したりできるから、普通のでもできないかなーというところ

256 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:16:14 ID:B3cvA+9e0
心配なら元ファイルとは別に新ファイル作って
書き込み終了後に元ファイルを削除、新ファイルをリネームとか

257 :251:2010/10/12(火) 23:34:43 ID:SesNTd6o0
自分はテスト用スクリプトは Dropbox 対応フォルダの中で走らせていて、
バックアップの面ではかなり大丈夫

258 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:44:33 ID:DhLMtFuv0
>>256
そだねそうするサンクス

259 :名無しさん@お腹いっぱい。:2010/10/13(水) 02:38:22 ID:zJmxcNc50
すごく初歩的な質問かもしれませんが、申し訳ありません。
右コントロールキーを使って、2ストロークキーを実現させたいのですが、どうすればいいでしょうか?

右Ctrlを押したあと、離してから、次のキー(たとえばJやKやL)をおすと、
特定の入出力をするというものです。

右Ctrlとの順押し2ストロークで動作を発生させたいのですが、
同時押し(本来のシフト操作)では本来のCtrlの動作をさせるのを残しておきたいのです。
(本来のCtrl動作の後に押したキーも、順押しの動作ではなく、本来の動作をさせる。)

つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、2ストロークキーの始まりにしたいのです。
これはどうすればいいでしょうか?

260 :名無しさん@お腹いっぱい。:2010/10/13(水) 06:23:10 ID:Dj6mLgWp0
~RCtrl Up::
 Input, char, L1 T1
 If char = j
  Send, JJJJJJJJJJJ
 Else if char = k
  Send, KKKKKKKKKKKKKK
 Else If char = l
  Send, LLLLLLLLLLLL
 Return

こんなんでいいんじゃないのかね。

> つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、
ってのは厳密じゃないけど。
どうしても厳密にやりたいなら、LLフック か RwwInput を DllCall で仕込んでチェックかなぁ

261 :名無しさん@お腹いっぱい。:2010/10/13(水) 06:49:41 ID:Al71sdssP
本家の開発が止まってたのは、就職したりして忙しくなったとかではなく、単に飽きただけみたいだね
ttp://www.autohotkey.com/forum/topic63474.html&sid=a25a0d0e7a8e4484b308f1aec8d6e895

262 :名無しさん@お腹いっぱい。:2010/10/13(水) 08:56:25 ID:ACL8Lyat0
>>261
AutoHotkey Download
http://www.autohotkey.com/download/

ほんとだ
AutoHotkeyのインストーラーの配布ページでAutoHotkey_Lのインストーラーが配布されるようになってる

263 :名無しさん@お腹いっぱい。:2010/10/13(水) 09:53:50 ID:SmyqTYqd0
_Lの人が精力的に頑張ってくれるようになって、
別に自分がやらんでもいいやみたいな気になっちゃったんだろうな

264 :名無しさん@お腹いっぱい。:2010/10/13(水) 13:12:43 ID:XUXsd83X0
AutoHotKey_L Version v1.0.48.05.L61
を使用しています。

以下のスクリプトで、ResultSet変数にWQLのクエリの結果が
入っていると思うのですが、値の参照の仕方が分かりません。

http://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/Objects
上記サイトのオブジェクトのページも読みました。

VBScriptだと
--code--
Set objWMIService = GetObject("winmgmts:")
Set ResultSet = objWMIService.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
For Each I in ResultSet
MsgBox I.deviceID
Next
--code--

のような形で取得できるのですが、AutoHotKey_Lではどうすれば
取得できますでしょうか?

--code--
;WMIを利用
wmi := ComObjGet("winmgmts:")

;WQLでCドライブのディスク番号とパーティション番号を取得する
ResultSet := wmi.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
--code--

よろしくお願い致します。

265 :名無しさん@お腹いっぱい。:2010/10/13(水) 19:17:28 ID:w5gzQaBY0
AutoHotkey_Lでタスクの一覧を表示するスクリプトを組んでいるのですが、
その際にプロセスIDから実行ファイルのフルパスを調べて、
Menu,Icon で実行ファイルのアイコンもついでに表示させたいと考えています。
通常はこれで問題無いのですが、実行ファイルがアイコンを持っていなかった場合は
Menu,Icon でメニュー登録をしようとすると、エラーでスクリプトが停止してしまいます。
事前に場合分けしてアイコンが存在しないケースでは、処理をスキップさせるしか無いみたいなのですが
実行ファイルにがアイコンリソースを含むかどうかを判別する方法が思いつきません。
どなたか、いいアイデアはありませんでしょうか?

266 :名無しさん@お腹いっぱい。:2010/10/13(水) 20:36:24 ID:Dj6mLgWp0
ちょっと面倒だけど

hIL := IL_Create()
Loop, {
FileSelectFile, filePath, 1, %A_WinDir%, Select File, executable(*.exe)
 If (ErrorLevel)
  Break
 ret := IL_Add(hIL, filePath)
 MsgBox, % """" filePath """ has " (ret = 0 ? "no icon" : "icon(s)")
}
IL_Destroy(hIL)

267 :名無しさん@お腹いっぱい。:2010/10/13(水) 21:07:16 ID:w5gzQaBY0
>>266
おおっ、ありがとうございます
ret := IL_Add(hIL, filePath)を組み込む事で見事に場合分けすることができました。
この行が何を意味してるのかはさっぱり理解できませんが…orz
まあ、これから勉強していきたいと思います、本当に助かりました。

268 :名無しさん@お腹いっぱい。:2010/10/13(水) 21:40:43 ID:+33RXyl/P
ListViewで使うイメージリスト関数か
こんな使い方あったのね、参考になります

269 :名無しさん@お腹いっぱい。:2010/10/14(木) 02:00:11 ID:quItkztc0
AutoIt
 ↓
AutoIt 2 ┐@
 |    ↓
  :  AutoHotkey1.0┐
  :    |      ↓
  :    |   AHKL (1.0ベース) ┐
  :    ├←Aーー┤       ↓
  :    |      .│     AutoHotkeyU (Unicode化)
  :    |      .├←ーーーー┤
  :    |      .↓      開発終了
  :    |   AHKL(ANSI , Uni)ーーーー┬ーーーーーーーーー┐
  :    |      .│             ↓ B           |
  :    |      .│       AutoHotkey64(x64とCOM対応).|
 ↓.    |      .├←ーーーーーーー┤             ↓C
AutoIt3  |      .↓          開発終了     AutoHotkey_N(マルチスレッド、モジュール化etc)
  E.   ↓   AHKL(ANSI & Uni32 & Uni64)              :
    やる気なし.   |
        D     (現在)

@ AutoIt のホットキー機能が貧弱で改善提案だしたが受け入れられず。AutoIt2を元に作成。
A 独自版を作る一方、各種機能改善・追加が本家に取り入れられている
B COM機能は COM.ahk の機能がほぼそのまま取り込まれた。
C かなりプログラマー向きな拡張。他のプログラム言語からAHKスクリプトを実行したりできる。
D 非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため。
  またプログラマー向きな方向性を持つ派生版が人気なのも萎えさせる一因に。
E 余談だが、文法をガラリと変えてかなりスマートな感じに。


まぁ、Crisお疲れってところかな。
Lexikosは最近は色々あってイッパイイッパイかもしれんね。

270 :名無しさん@お腹いっぱい。:2010/10/14(木) 02:09:26 ID:puF4FM590
>非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため

プログラマ向きの関数や機能は、必要ない人はつかわなければいい、
という考え方ではダメだったのかな。

あと後半は、ahk2で具体的にどう改善するつもりだったの?

271 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:04:31 ID:quItkztc0
適当翻訳(1/2)

■ 僕の今の状況とウェブサイトの変更について by Cris(AHK作者)

AHKプロジェクトを始めたのは、非プログラマを含む利用者にホットキーや自動化の利便性を
提供したかったからなんだ。僕はスクリプト言語は簡易で柔軟であるべきだと思っている。
だから本格的なプログラム言語にすべきじゃないと思ってた。

何年か経つと、ユーザコミュニティは、少なくとも最もアクティブなメンバーは、AutoHotkeyに
対してプログラム的な機能--配列やオブジェクトなど--を求めているのがはっきりしてきた。
それは僕の望む方向じゃなかった。今思うとその頃から興味を失いかけていたのかも知れない。

コミュニティメンバはユニコードとx64対応に関心が向いていた。自分も多少はそれに関心はあったけど、
もっと簡単な文法で、かつ以前との互換性がなるべく保たれるようなAHK V2を作ろうと思ってた。
でも、自分自身としてはその方向性に自信もモチベも持てないんで、開発者用のプライベート
フォーラムに議題を挙げたんだ。1年半ほど頃かな、AHKの新機能について議論を始めて、
共通バージョンを策定しそれを作成しようとした。
でもしばらく立つ頃には、V2が果たして正しい方向性なのかと疑念を抱くようになったんだ。

その中で、時間が足りなかったり、V2あるいは共通バージョンに対する興味が失われているように感じたんだ。
でもそれはよくわかるよ、誰だって時間的制約や優先順位があるわけだしね。

272 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:05:26 ID:quItkztc0
適当翻訳(2/2)

そんな感じで感心と活動が鈍ったけど、Lexikos, fincs, Sean, jackiku, Micha 達が
AutoHotkeyが有用であると思い、新たな機能を追加してくれたんだ。
こういうかんじで、なんとなく機は熟したと思ったから、WebサイトをAHKLに委譲したんだ。
(中でも、ダウンロードのページが一番大事になる)

時間が経てば、サイトの統計(つまり何がダウンロードされたか)が、
サイトの構成をAHKLに梶を切るかどうかの判断材料になるはず。
AHKがどのバージョンあっても、フォーラム全体の利用に当たって不自由が無いことを願うよ。

サイトの維持に関しては僕が続けるつもりだよ。
それが出来なくなりそうなら、他の信頼の置けそうな個人なり団体なりが管理するところへ
引っ越しができるであろう十分な期間をもってアナウンスをするつもりだよ。

何年にもわたって色々と支持してくれたみんなに、ありがとう!

273 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:31:07 ID:onjPNxeD0

細かいことを言うとCrisじゃなくてChrisだね

274 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:31:24 ID:puF4FM590
おお、翻訳ありがとう!そしてCrisさん、いままで乙でした。
中の人も、派生版の人も、いろいろと悩みを抱えてるんだね。

275 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:37:19 ID:quItkztc0
>>273
俺はずっと勘違いしてたっぽいな。

文中のjackiekuもミスってる。
文もおかしな所もあるが、まぁわかるっしょ。

>>274
釣られたなw

276 :名無しさん@お腹いっぱい。:2010/10/14(木) 09:56:59 ID:E+9KqY/i0
>>264 お願いします・・・。

277 :名無しさん@お腹いっぱい。:2010/10/14(木) 10:08:37 ID:RiUip3vI0
プログラマー向きの機能で非プログラマーでも使えるのを作ってくれよ
AHKLなんかもうわけわからん

278 :名無しさん@お腹いっぱい。:2010/10/14(木) 12:24:29 ID:H++N/xQW0
たしかにAHKLはわけわからん

279 :名無しさん@お腹いっぱい。:2010/10/14(木) 14:19:48 ID:quItkztc0
>>264
バグだと思う。Lexkos か Sean のどっちかはわからんけど。
http://www.autohotkey.com/forum/post-388357.html#388357
http://www.autohotkey.com/forum/post-388985.html#388985

作者は了解してるんで、バグが治るまでは、以下のように対処かな。

enum := ComObjGet("winmgmts:")
 .ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
 ._NewEnum ; 本来は _NewEnum() なはずで、 For item in 〜 でいいんだが…
While enum[item]
 MsgBox, % item.deviceID


280 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:17:08 ID:Gjs8+rbi0
こういうCOMオブジェクトってどこで調べるの?
検索してもExcellとかしか出てこない・・

281 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:18:24 ID:gbYybpeS0
>>277
>非プログラマー
なら内部わかる必要あるの?

282 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:21:26 ID:dtQmkR2H0
おれなんてDllCallすらわからないんだぜ

283 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:24:28 ID:2AvKXCJt0
おれもdllは、全く理解できない。

ここで教えてもらったものをブラックボックス関数として
コピペして、ツギハギして結果を受け取るだけ。

でも、なんとか希望通りに動いてくれてる。

284 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:27:03 ID:K054jbq10
オリジナルはプログラマーとかいう以前にunicode未対応なのが厳しい

285 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:31:09 ID:Glm+BKcC0
Lで分からんところってObjectだけだろ?
本家でもDllCall(), NumGet(), NumPut(), RegisterCallback()あたりは分からんだろ
おれも、各々の分野を学ぶ気にはならんから使えなくても仕方ないと割り切ってる

286 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:47:18 ID:Gjs8+rbi0
どれも公式とかで解説してくれるし分かりやすくない?

287 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:52:13 ID:RiUip3vI0
あと文法がJavaScriptとかVBScriptぽい?のがなあ・・・>Object
元のAHKのと違いすぎて混乱する

288 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:58:38 ID:1MktXJ/A0
オブジェクトってよくわからないけど
ahkってダウンロード機能が弱いから
vbsでつかってるwinhttpを使えたらなとよく思うんだけど
もしかしてそういうことも可能なの?

289 :名無しさん@お腹いっぱい。:2010/10/14(木) 21:10:55 ID:onjPNxeD0
autohotkeyjpの人がdllcallについて丁寧な解説記事を書いていた気がする
ところで、AHKLで機能が強化されているcomについて誰か例題を沢山書いてくれないかなあ

290 :sage:2010/10/14(木) 21:21:37 ID:yPX1n0WZ0
>>269
AutoHotkey_N じゃなくて AutoHotkey_Hかな?

>>272
>AHKLに委譲
細かいようだけど移譲はしてないね。ページを書き換えただけみたいよ。272は結構はしょってオブラートにしてるけど、Chrisの原文の文章から読める雰囲気は結構暗いかも。
fincsが負けた感が滲み出ててちょっと複雑って発言してるね。

多分 Chris は Lexikos にライバル意識みたいなのがあったんじゃないかな。一方LexikosはChrisに認めてもらおうと頑張っててそれが裏目に出た。

なんにせよChrisは人をまとめて動かす力がなかったみたいね。

291 :名無しさん@お腹いっぱい。:2010/10/14(木) 23:12:43 ID:onjPNxeD0
↓からAutoHotkey_Lのドキュメントにリンクが張られているね

AutoHotkey Documentation
ttp://www.autohotkey.com/docs/

気づいたのは、このページの日本語訳リンクが流行らせるページのままってこと

292 :264:2010/10/15(金) 00:35:19 ID:leOgQaRc0
>>279
どうもありがとうございます!
確かに動作しました。

もう全く動かなかったので諦めて、VBScript(wmi.vbs)でWQLの結果を生成して、それを .txt ファイルに吐き出す
スクリプトを書いて、AHKから
RunWait, wmi.vbs
みたいな感じに呼び出して、吐き出した .txt ファイル(disk.txt)を
FileReadLine, val, disk.txt, 1
みたいに val 変数に読み込んで、その後
FileDelete, disk.txt
で消す、みたいな超面倒な手順で実装してしまいましたよ・・・。
こんなくだらないコード書いて感じたのは、AHKって標準入出力も扱えないのか?ということ・・・。
DllCallとかさっぱり分からないのでどうにも対応方法がありませんでした・・。

もう一回書き直そうかな、解決策教えて頂きましたし・・・。

本当にありがとうございます

293 :名無しさん@お腹いっぱい。:2010/10/15(金) 02:17:32 ID:srMctwi10
ScriptControlが使えるからJscriptやVbscript使える人は、そっちで処理してもいいんじゃないかな?
ttp://www.autohotkey.com/forum/topic61509.html

oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
oshl=new ActiveXObject('WScript.Shell');
oshl.popup('autohotkeyL でScriptControl WScriptオブジェクトは使えない。Unicodeで保存。');
;//WScript.Echo(2000);WScript.Echo(1); / * ←これは使えない * /;
)
oSC.ExecuteStatement(script)
oSC.Eval(script)

294 :名無しさん@お腹いっぱい。:2010/10/15(金) 06:28:36 ID:1vxiNqrO0
>>293
紹介ありがとう。これは良いリファレンススレ

295 :名無しさん@お腹いっぱい。:2010/10/15(金) 14:18:46 ID:C9kOUIXjP
例えばこんなGUIを作ったとして、
TreeViewとEditBoxのあいだの点線をドラッグして双方の表示領域を変えることってできない?
Janeでいうボードビューとスレッドビューみたいな

┌──────────┐

│  TreeView

├--------------------┤
│               
│  Edit


└──────────┘

296 :名無しさん@お腹いっぱい。:2010/10/15(金) 14:43:23 ID:srMctwi10
;// >>291 ややこしいことはJscriptでさっさと処理してAHKで値を受け取ってしまおう。
oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
main=function(sAAA,sBBB,sCCC){ ;
if(typeof(sAAA) == 'undefined'){sAAA = '///' ;} ;
if(typeof(sBBB) == 'undefined'){sBBB = '###' ;} ;
if(typeof(sCCC) == 'undefined'){sCCC = '$$$' ;} ;
sAAA = sAAA + '---' + sAAA ;
sBBB = sBBB + '---' + sBBB ;
sCCC = sCCC + '---' + sCCC ;
oshl = new ActiveXObject('WScript.Shell') ;
oshl.popup('sAAA=' + sAAA + "\n\n" + 'sBBB=' + sBBB + ' sCCC=' + sCCC) ;
return(sAAA.length + ' '+sBBB.length +' '+ sCCC.length) ;
} ;
)
oSc.addCode(script) ;

stestA := "Ahogehoge_AutohotkeyLで実行_ユニコードで保存" ;
stestB := "Bhogehoge" ;
scommand = main("%stestA%", "%stestB%")
sret := oSC.eval( scommand )
msgbox, %sret%

297 :名無しさん@お腹いっぱい。:2010/10/15(金) 23:47:37 ID:jrTZWDfs0
>>295
出来なくはないよ。かなりの力業になると思うけど。

OnMessage で WM_LBUTTONUP/DOWN と WM_MOUSEMOVE 拾うようにする。
境界領域でボタン押下拾ったら、マウス移動トラックするようにして、
移動差分を算出して、GUIコンポーネントを移動する。
ボタンが離されたらトラッキングを停止。

298 :名無しさん@お腹いっぱい。:2010/10/15(金) 23:58:02 ID:9sO5EohQ0
GUIプログラムをそこまで低レイヤーのことまで自分で用意してやるより、
VisualStudio無料版で.NET使ってやった方が汎用的でかつ楽だよなぁ。

299 :名無しさん@お腹いっぱい。:2010/10/16(土) 00:07:41 ID:Gltw26EkP
>>297
ありがとう
確かにここまでするのは大変そうだ・・
今のところサイズ変更しなくては使えないってレベルではないし、しばらくはこのままで使ってみる

300 :名無しさん@お腹いっぱい。:2010/10/16(土) 00:57:50 ID:wZOd2aJuP
AutoHotKeyはウインドウやコントロール検出してキー送ったり、そういう自動化はすごく向いているし、
プログラマーでなくてもコピペで切り貼りで使えるのは素晴らしいけど、
GUIは弱いよね。

.NETやDelphi並に簡単にGUI作れればいいんだけどね

.NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、
AutoHotKeyの利点なくなるだろうけど


AutoItはGUIビルダーのようなツールがあるみたいだな
実験記録 No.02:AutoItで簡単GUI作成
http://blog.livedoor.jp/blackcode/archives/1480018.html


301 :名無しさん@お腹いっぱい。:2010/10/16(土) 01:02:50 ID:wZOd2aJuP
> .NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、
> AutoHotKeyの利点なくなるだろうけど

.NET Frameworkを間接的に使うとか、そういう話が抜けてた
非.netアプリから.netのライブラリが使えるかしらんけど。


ついでだけど、DelphiはGUIライブラリだけDLL化して他の言語から使う方法あったと思うけど、
AutoHotKeyから使うなら一皮かぶせる必要あると思うし、
Unicode対応したDelphiがフリーで手に入らないからちょっとな

302 :名無しさん@お腹いっぱい。:2010/10/16(土) 01:16:14 ID:q0WnMUrJ0
本格的なGUIには向いてないのは確かだな。でも以下のような用途なら十分戦力になる

・コマンドライン用ツール(ffmpegとか)のフロントエンドにして、
雑多なオプションをGUIで手軽に選べるようにする。一度作ればマニュアル要らず。
(携帯電話変換君があるからこの例はあまり訳にたたんがw)

・コマンドライン引数に対応してなくて、いちいちGUIでファイル選ぶようなアプリで、
その代わりに引数貰って起動して、引数書き込んでボタン自動で押す

--

元々はこういうのを AutoIt や 本家AHKの目指していたところなんだろうけどさ。

303 :名無しさん@お腹いっぱい。:2010/10/16(土) 21:06:37 ID:WdTgeglV0
aaa.ahkに
#Include test\bbb.ahk
bbb.ahkに
#Include %A_ScriptDir%\ccc.ahk
って書いてある場合
test\ccc.ahkじゃなくてaaa.ahkと同じフォルダのccc.ahkが読まれる?

304 :名無しさん@お腹いっぱい。:2010/10/16(土) 21:44:43 ID:uHvrFFE00
読まれる?

って書く前に、試した結果はどうだったの?

305 :名無しさん@お腹いっぱい。:2010/10/16(土) 22:04:00 ID:e3BI4te10
aaa.ahkから起動した場合は
aaa.ahkと同じフォルダのccc.ahkが読まれる

aaa.ahkすっとばして直接bbb.ahkを起動した場合は
bbb.ahkと同じフォルダのccc.ahkが読まれる

自分(bbb.ahk)のパスはA_LineFileで取れるけど #includeでは使えないね
なにげにめんどくさいところだ

306 :名無しさん@お腹いっぱい。:2010/10/16(土) 22:19:28 ID:q0WnMUrJ0
関数ライブラリスクリプトの場合は挙動がちょっと違うので注意。

%A_Desktop%
 + main.ahk
 + xxx.ahk
%A_MyDocuments%\\AutoHotkey\Lib
 + sub.ahk
 + xxx.ahk

---- main.ahk ----
sub()
---- sub.ahk ----
#Include, xxx.ahk ; ★
sub() {
 Gosub, XXX
}
---- xxx.ahk (両方とも) ---
XXX:
 MsgBox, %A_LineFile%
 Return
----------------

結果は
 %A_MyDocuments%\AutoHotkey\Lib\xxx.ahk

★を「%A_ScriptDir%\xxx.ahk」にすると
 %A_Desktop%\xxx.ahk
になる

307 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:10:12 ID:WdTgeglV0
>>304
聞き方が悪かった
試した結果が>>303だったんだけどこの理解で合ってるかと思って。
自分で一からスクリプト書くなら注意して書けばなんとかなりそうだけど
他人が作ったスクリプトが複数で構成されてる時に
autohotkey.ahkからincludeして使うとき不便だから何か解決方法はないものかと。

>>305-306
ありがとう。
ファイルごちゃごちゃになるのは諦めて1つのフォルダに全部置く事にした。

308 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:38:45 ID:vMHLbBIc0
ある画面、あるソフトが最前面のときのみ
あるキーを別のキーに入れ替える、っていうのはどう書けばいいかな?

プロセスが存在していたら、っていうのは出来るけど、
あくまで最前面の時のみキーリマップ変更っていうのをやりたい。

309 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:47:10 ID:e3BI4te10
#IfWinActive

310 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:45:22 ID:Shh2ZxdQ0
おお、これかサンクス

311 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:46:13 ID:ed/MdHIJ0
>>1のサイトもろくに見ないで質問とか氏ねよ

312 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:56:11 ID:CO3MN1HK0
>>311
ごめんなさい

313 :名無しさん@お腹いっぱい。:2010/10/17(日) 01:01:43 ID:+CcgaRcH0
AutoHotkeyJpの左ペインを見てみたら
AutoHotkey_L 専用セクションが出来ているね
ありがとう>管理人さん

314 :名無しさん@お腹いっぱい。:2010/10/17(日) 13:40:22 ID:uoK1rgtV0
画面のある特定範囲内にあるウィンドウの中で、最前面のものを取得する…という処理は
どう作ればいいのでしょうか?
デュアルディスプレイでマウスポインタを各モニタ間で移動させた時に、その画面内の
最前面ウィンドウを自動的にアクティブにする、という用途で使いたいんですが…

315 :名無しさん@お腹いっぱい。:2010/10/17(日) 20:24:26 ID:34XClcZ70
WinGet, list, List ; 条件無し
でリスト取ると、重なりで上から順に並んでるから、Loopして順に座標調べて、
該当画面内にあれば、WinActivate して Break でいいんじゃね?

316 :名無しさん@お腹いっぱい。:2010/10/17(日) 23:45:56 ID:YCDwRoRL0
ここの
http://www.autohotkey.com/forum/viewtopic.php?t=22975&highlight=compiler+gui

No UPX オプションってつけてもつけなくても生成される実行ファイルの容量が同じなんだけど・・・
バグ?

317 :名無しさん@お腹いっぱい。:2010/10/17(日) 23:47:38 ID:YCDwRoRL0
ああ、使用したのはこれ

http://www.autohotkey.net/~ladiko/Compile_AHK/Compile_AHK_Setup.exe

318 :314:2010/10/18(月) 03:48:53 ID:rYM4Bbm40
>>315
うまくできました! ありがとうございます

319 :名無しさん@お腹いっぱい。:2010/10/18(月) 11:02:34 ID:hXI/IUBx0
192で質問して、教えていただいた者です。正規表現ビギナーです。
正規表現による置換を使って
@以前の文字列を削除したり
@以降の文字列を削除したり
したいのですが、@以降の文字列を削除するのがうまくできません。

Ans1 :=RegExReplace("あいうえお@かきくけこ",".*?@","")
Ans2 :=RegExReplace("あいうえお@かきくけこ","@.*?","")
msgbox,
(
".*?@"での答え→%Ans1%
"@.*?"での答え→%Ans2%
)

上のスクリプトでやってみたのですが、結果は
 かきくけこ
 あいうえおかきくけこ
となってしまいました。
Ans2は"@.*?"で置換すると、どうして「あいうえお」になってくれないのですか?
どのようにしたら、@以降の文字列を削除できますか?

320 :名無しさん@お腹いっぱい。:2010/10/18(月) 12:02:20 ID:X6FZx8eL0
正規表現に置ける*の意味と?の意味を再確認しる

321 :名無しさん@お腹いっぱい。:2010/10/18(月) 12:55:36 ID:+5VT7jw90
ahkの質問じゃないなw

322 :名無しさん@お腹いっぱい。:2010/10/18(月) 13:25:15 ID:hXI/IUBx0
>>319
自己解決しました。
"@.*"で置換をやったらうまくいきました。

なぜ「?」が要らないのかまだよくわかりませんので
「サルにもわかる正規表現入門」をよく読んで理解したいと思います。

>>320さんアリガトウ。
ついでに
>>321さん
悪うございました(謝)。

323 :名無しさん@お腹いっぱい。:2010/10/18(月) 17:15:59 ID:WRrlGkD90
A_TickCountを○時間○分○秒って感じのフォーマットにしたいんですが
どう一般的にどう計算させればよいのでしょうか?
知恵を下さい。

324 :名無しさん@お腹いっぱい。:2010/10/18(月) 17:18:01 ID:+h0+g2gt0
A_Tickcountを1000で割ると、稼働時間の 秒 になる。
それを60で割ると、分になる
それを60で(ry

って感じでやってるよ、俺は。

325 :314:2010/10/18(月) 19:43:56 ID:rYM4Bbm40
すみません、>>314に追加で質問
>>315のやり方で大体うまくいってるんですが、
バルーンヒントを除外する方法って何かないでしょうか?

326 :名無しさん@お腹いっぱい。:2010/10/18(月) 20:32:46 ID:OPgIQC8u0
ウィンドウの情報は、座標以外にも、タイトルやらクラスやらスタイルやら取れるんで、
それらで判断すりゃいいかと。

ウィンドウクラスかウィンドウスタイルで除外するのが楽だと思うけど。

327 :314=325:2010/10/19(火) 02:45:19 ID:ba8WQ+zq0
>>326
ありがとうございますー
タイトルやクラスは他にも空白のものがあるかもしれないので、
とりあえずツールチップやバルーンのウィンドウスタイル頭4文字"0x94"を判別して
除外するようにしてみました。これでうまくいくかな?

328 :名無しさん@お腹いっぱい。:2010/10/19(火) 06:30:37 ID:01h8Ctb10
タスクマネージャーとかで表示されているすべてのプロセスのリストを取得する関数とか
有りませんか?

329 :名無しさん@お腹いっぱい。:2010/10/19(火) 09:19:30 ID:YeXINLz50
DetectHiddenWindows, On してから >315
全ユーザーのプロセスまで取れるかどうかはわからん

330 :名無しさん@お腹いっぱい。:2010/10/19(火) 11:52:27 ID:clvatLXW0
流行らせるページのDragDrop関数
http://www.autohotkey.com/forum/topic45041.html

これをAutohotkeyLのユニコード版で使うにはどうすればいいんでしょう。
DllCallの中のStrをAStrに変えただけではうまく動作しません。
上記のフォーラムの中で出てきたDragFileA関数も動作しませんでした。

Numputのあたりをいじるようなのですが、DllCallはさっぱりなので宜しければご教授下さい。

331 :330:2010/10/19(火) 12:56:58 ID:clvatLXW0
自己解決しました。

NumputではなくStrLenでした。全角も1文字と数えるので、全角文字=2文字となる補正すればOKでした。
Dropするファイルのパスを一文字ずつ分解して、正規表現で半角以外だったら補正値+1、
とすることで、かなり力業ですが解決しました。

まったくスマートではないのですが、取り敢えず動きました。

332 :名無しさん@お腹いっぱい。:2010/10/19(火) 13:24:17 ID:cCnrDLPW0
個人的に移植したやつ。
hwnd : 対象窓, files : 対象ファイル(`n区切り), ptX&ptY : 落とす座標, fNC: 真なら絶対座標/偽なら相対

DropFiles(hwnd, files, ptX=0, ptY=0, fNC=False) {
 static char_type:= A_IsUnicode ? "UShort" : "UChar"
  , char_size := A_IsUnicode ? 2 : 1
  , isUnicode := A_IsUnicode ? 1 : 0
 files := RTrim(files, "`r`n`t ") . "`n`n"
 byte_length := StrLen(files) * char_size
 Loop, Parse, files
  If (A_LoopField = "`n")
   NumPut(0x00, files, (A_Index-1) * char_size, char_type)
 hDrop := DllCall("GlobalAlloc", "UInt", 0x42, "UInt",20 + byte_length, "Ptr")
 p := DllCall("GlobalLock", "Ptr", hDrop)
 NumPut(20 , p + 00, "Int") ; offset
 NumPut(ptX , p + 04, "Int") ; pt.x
 NumPut(ptY , p + 08, "Int") ; pt.y
 NumPut(fNC , p + 12, "Int") ; fNC
 NumPut(isUnicode, p + 16, "Int") ; fWide
 DllCall("RtlMoveMemory", "Ptr", p + 20, "Str", files, "UInt", byte_length)
 DllCall("GlobalUnlock", "Ptr", hDrop)
 PostMessage, WM_DROPFILES := 0x233, hDrop , 0, , ahk_id %hwnd%
}

利用例)
IfWinNotExist, ahk_class Notepad
{
 Run, Notepad
 WinWait, ahk_class Notepad
}
DropFiles(WinExist(), A_ScriptFullPath)

333 :名無しさん@お腹いっぱい。:2010/10/19(火) 21:54:05 ID:eAGKNIWv0
ttp://www.autohotkey.com/forum/topic18550.html
このトピックにある、GetModuleFileNameEx()って関数なんですが
これまでは返された値を StrGet(&戻り値, "CP932") して利用していたのですが
このままだと戻り値に"è"とか"é"の文字が入っていた場合、
勝手に"e"などの文字に変換されうまく動作していません。
適当にいろいろ弄っていたら
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
の行の GetModuleFileNameExA を GetModuleFileNameEx にしたら偶然動いてしまいました。
DllCallをどう扱えばいいのかの根本が理解できてない段階なので、
これで本当に問題がないのか教えて頂けないでしょうか?

AutoHotkey_L Revision 61のUnicode x64版を利用してます。

334 :名無しさん@お腹いっぱい。:2010/10/19(火) 22:56:57 ID:GBRE3Jqp0
Unicode版ならGetModuleFileNameExは、GetModuleFileNameExWを呼び出すから問題ないよ。
ただ、そのコード自体はUnicodeとx64を考慮してないから、ちょっと変更する必要がある。

FileNameSize := 260
...
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)

static size_of_char := A_IsUnicode ? 2 : 1
FileNameSize := 260 * size_of_char
...
CallResult := DllCall("Psapi.dll\GetModuleFileNameEx", "Ptr", hProcess, "Ptr", 0, "Str", ModuleFileName, "UInt", FileNameSize)

335 :名無しさん@お腹いっぱい。:2010/10/19(火) 23:27:02 ID:eAGKNIWv0
>>334
ありがとうございます
そうか、Unicodeは1文字でANSIの倍のバイト数を消費するから2倍する必要があるんですね。
UInt とかこの辺は、今のところ自分の場合とりあえず総当たりで動作するまで他のに変えてみる、
全種類試して動かない場合は素直に諦めるっていう、ひどい有様ですがw

336 :名無しさん@お腹いっぱい。:2010/10/19(火) 23:48:06 ID:cCnrDLPW0
ハンドルやポインタはは全部 Ptr だとおもっていい。(UINT_PTRを除く)

337 :名無しさん@お腹いっぱい。:2010/10/20(水) 09:08:26 ID:NjUDFAPD0
>>323
こんな感じでどう?

msgbox % formatseconds(A_Tickcount // 1000)
Return

FormatSeconds(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format.
{
time = 19990101 ; *Midnight* of an arbitrary date.
time += %NumberOfSeconds%, seconds
FormatTime, mmss, %time%, mm:ss
return NumberOfSeconds//3600 ":" mmss ; This method is used to support more than 24 hours worth of sections.
}

338 :名無しさん@お腹いっぱい。:2010/10/20(水) 10:26:45 ID:zB/sYauR0
Vimのようなモード切替の概念をAutoHotkeyで実現したいのですが、可能でしょうか?

例えば、Ctrl + Shift + mで、特殊モードになって、h j k lがそれぞれ←↓↑→のカーソル移動になり、
Escを押すと特殊モードを終了して本来の入力に戻る、みたいな。

339 :名無しさん@お腹いっぱい。:2010/10/20(水) 10:27:45 ID:x2HpyfEu0
>>9

340 :名無しさん@お腹いっぱい。:2010/10/20(水) 11:14:36 ID:zB/sYauR0
>>339
そんなところにあったとは(節穴)。ありがとうございます。助かりました。

ところで、AHKの変数って、:=代入が同時に宣言にあたるのですか?
誰かの書いたスクリプトを見ていると、急に見たこともない変数が普通に使われていたりして困惑することが多々あるのですが。

341 :名無しさん@お腹いっぱい。:2010/10/20(水) 11:57:47 ID:mHgGqDF50
変数宣言は必要ない。というかできない。まぁ、すぐ慣れるよ。typoはどうしようもないけどw

342 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:30:19 ID:q9pQEdrn0
>>2のAutohotkey_Lのリンク先にあるダウンロードからUnicode x86のzipを落としたのですが、
#Includeのパスに日本語が入っていると起動時にエラーではじかれます。
ANSI x86の方だと問題ないのですが、こういう物なんでしょうか。
Unicodeの方が2バイト文字も問題なく扱えると思っていたのですが。

343 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:35:03 ID:hbTixXqR0
Unicodeで書いてないだけだろ

344 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:50:47 ID:q9pQEdrn0
>>343
Shift-JISのスクリプトそのまま使ってました…。失礼しました。
ありがとうございます。

345 :名無しさん@お腹いっぱい。:2010/10/20(水) 17:40:59 ID:VvhskSdR0
実行中の指令を止める方法はありませんでしょうか?
例えば、1秒おきに、1 2 3 4...と、100まで入力していくスクリプトがあったとして、
これを実行途中に、指定したボタンを押すと、そのスクリプトを無効にしてインプットを止めたいのですが。

346 :名無しさん@お腹いっぱい。:2010/10/20(水) 17:55:23 ID:ct87hXx/0
>>345
1から100までループしているスクリプトのループの中で、

if stopflag=1
break

みたいのを入れて、

a::
stopflag=1
return

って感じでグローバル変数でフラグつくればいいんじゃない?

347 :名無しさん@お腹いっぱい。:2010/10/20(水) 18:05:02 ID:s6eZehnaP
それか1秒おきって決まってるなら
SetTimer, Label, 1000 して
SetTimer, Label, OFF するとか

Label:
count++
Tolltip, count
return

348 :名無しさん@お腹いっぱい。:2010/10/20(水) 19:04:42 ID:VvhskSdR0
>>346
>>347
お返事いただき有難うございます。
とても参考になりました。
有難うございました。

349 :名無しさん@お腹いっぱい。:2010/10/21(木) 00:11:53 ID:aNV54UWl0
AutoHotkey_L 64bitでなんかMouseGesture.ahkのMG_GetFocus()が失敗してるなと思ったら64bitに対応したコードじゃないのね

MG_GetFocus(){
VarSetCapacity(tmp, A_PtrSize == 8 ? 72 : 48)
NumPut(A_PtrSize == 8 ? 72 : 48,tmp,0)
return DllCall("user32.dll\GetGUIThreadInfo","UInt",0,"Str",tmp) ? NumGet(tmp,A_PtrSize == 8 ? 16 : 12) : 0
}

に書き換えたら問題なく動いた

350 :名無しさん@お腹いっぱい。:2010/10/21(木) 00:14:52 ID:cXEiBx8C0
まぁ、多少なりともDllCallいじれるなら、互換性のページ読めばすぐ直せるしな

351 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:22:06 ID:3tOe/dQz0
ちょっとお尋ねしますが、右クリックすると
"1"キー入力
10ms待機
"1"キー入力
5ms待機
"右クリック"
という動作をさせられますか?

352 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:31:22 ID:gUxLo4te0
可能

353 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:40:41 ID:2PDVKZdYP
させられますか?

って、そのまま作ればいいだけじゃん

354 :名無しさん@お腹いっぱい。:2010/10/21(木) 20:39:44 ID:cXEiBx8C0
>>351
書いていることの各行に相応するコマンドがあるんで、
日本語→AHK語に変えるだけでおk

355 :名無しさん@お腹いっぱい。:2010/10/22(金) 17:46:41 ID:ao/w/zK70
ahkファイルをダブルクリックして動かしてたら。
自分の書いたスクリプトに誤りがあって、暴走してしまった。

こんな時(暴走してしまっているような状態のとき)
ahkを止める方法はないですか?

356 :名無しさん@お腹いっぱい。:2010/10/22(金) 17:57:23 ID:0cuX34DW0
タスクマネージャー(Ctrl+Alt+Del)を開き、
「プロセス」タブを選択し、(マウスが効かない場合はCtrl+Tabで「プロセス」タブにする)
AutoHotkey.exeを終了させる(ahkスクリプトが複数実行されていればその数だけ終了させる)

357 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:06:55 ID:ao/w/zK70
>>356
なるぼど、そうか
無理やり閉じるんだから
そういう方法しかないんですね。

昔、キーバットっていう記録再生ソフトを使ってたもので、
キーバットではctrl+pauseで止めれたそのイメージがあったものですから。
サンキュウ。

358 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:28:16 ID:jGCCfdL30
おぉ、キーバット。あれは地味に良いソフトだ。俺も昔使っていた。
AHKの処理を中止するコマンドか。ありそうだけど。知らないけど。

359 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:36:20 ID:SKMh60FCP
単純に、タスクトレイで右クリックして「PAUSE」じゃダメなの?
俺もよく暴走させるけど、これでほとんど用が足りてる。

どうしても、いつでもホットキーでやめたいならば、

esc::
exitapp

とか書いておけばいい。

360 :名無しさん@お腹いっぱい。:2010/10/22(金) 21:28:05 ID:oGf2dSuK0
このソフトってキーボード二つ用意して肩っぽのaキーだけ
ホットキー割り当てて処理できたりします?

361 :名無しさん@お腹いっぱい。:2010/10/22(金) 22:39:31 ID:Cbrbclyv0
そういう機能はない。

無理矢理出来なくもないかもしれない。
ウチのマシンでは動くけどよその環境じゃ分からん。

362 :名無しさん@お腹いっぱい。:2010/10/22(金) 23:08:54 ID:oGf2dSuK0
専用のキーボードみたいなの買おうと思ってたんですが出来ないんですか・・・
ありがとうございます。

363 :名無しさん@お腹いっぱい。:2010/10/23(土) 00:24:06 ID:PT5Z6/Zz0
>>362
場合によってはできるよ。
USBテンキーを独自のキーに置き換えられるドライバもあったはず。
ジョイパッドのキー出力できるのもあったような

補助デバイスを使う人の専用スレ(CG用だが)があるから、そちらも参考にしたほうがいいと思う。
CG用補助入力総合part5 【G13 n52te スマスク】
http://hibari.2ch.net/test/read.cgi/cg/1269804442/

364 :名無しさん@お腹いっぱい。:2010/10/23(土) 00:33:41 ID:/sdQrnk60
>専用キーコード
「お気に入りキーボード」みたいなのなら独自のキーコード吐いてるだろうから可能じゃね?

つか360の時点の話しだと汎用キーボード二つ並べて使う前提にしか読めんのだが
専用キーコード前提なら最初からそう書け

365 :名無しさん@お腹いっぱい。:2010/10/23(土) 01:57:57 ID:eBQypco/0
専用キーコードを吐けるキーボードを使うという話ではなく汎用キーボードを
何か特定の用途専用のキーボードとして扱いたいという話だと思う。

キーの吐き出し元が特定のキーボードかどうかを判別して
挙動を変えるということを力技でやっていた人が昔いたようだけど、
俺には難しくてよく分からなかった。>>35あたり参考。

366 :名無しさん@お腹いっぱい。:2010/10/23(土) 04:24:39 ID:6vOfCCU70
毎度の如く情報の少ない書き込みから余計な妄想を働かせて文句を垂れつつ
自分話をしたがる奴の多いこと多いこと
わからねえなら口をはさむな

367 :名無しさん@お腹いっぱい。:2010/10/23(土) 05:11:35 ID:PT5Z6/Zz0
>>365
http://pc12.2ch.net/test/read.cgi/software/1265518996/795
これか、おもしろいな。WindowsのAPIでできるのか。

実際の入力機器のユーティリティソフトはどうやってるんだろうね
IDが接続ごとに変わる問題は、別に情報を取得して自動的に識別して解消しているんだろうか



368 :名無しさん@お腹いっぱい。:2010/10/23(土) 12:01:10 ID:8txqJSlX0

AHKで記述されたタイリング型ウィンドウマネージャーで
bug.n見つけたんだが、これって既出?

joten @ AutoHotkey
http://www.autohotkey.net/~joten/


369 :名無しさん@お腹いっぱい。:2010/10/24(日) 00:19:37 ID:4ShEmsCf0
昔Xでionとか使ってたな。懐かしい。

370 :名無しさん@お腹いっぱい。:2010/10/24(日) 01:22:55 ID:xCaS4YDR0
>>314で質問した者なんですが改めて
画面のある特定範囲内にあるウィンドウの中で、最前面のものを判定するには
どう組んだらいいんでしょうか?

デュアルディスプレイの片方の画面に少しでもかかってるウィンドウを判定したいんです。
WinGet, List_id, list, , ,
Loop, %List_id%
{
WinGetPos, Xpos, Ypos, Width, Height, ahk_id %this_id%

こんなかんじで上から順にウィンドウの座標を取得し、
四隅の座標をひとつひとつ画面範囲内入っているかどうかを判定していたのですが、
ウィンドウのサイズを最大化すると四隅の座標が全て画面より4ピクセル大きくなってしまい
全て判定から外れてしまって…

371 :名無しさん@お腹いっぱい。:2010/10/24(日) 01:32:25 ID:Mkh5TRub0
いくらでもやりようがあると思うけど

WinGet, MinMax, Minmax やって最大化してたら、ウィンドウの中央が
どの画面に入っているか、でみりゃいいんじゃね?

SysGet とかでウィンドウ枠の幅を得て計算したり、とかでもいいとは思うけど

372 :名無しさん@お腹いっぱい。:2010/10/24(日) 02:43:52 ID:iVl4hFq3P
>>368
予想どおりだが、終了してもマルチモニタ気にしてなくてウインドウ配置ぐちゃぐちゃになってワロタww
ウインドウ配置もどすツールくらいあるから実害はなかったけどw

でも、これおもしろね。
仮想デスクトップ込みのシンプルなウインドウマネージャか。

Windowsからフルスクリーンにした1つのターミナルソフトでunixにつなげて、
コマンドライン中の画面を何分割にもして使っている人を思い出した。

373 :名無しさん@お腹いっぱい。:2010/10/24(日) 03:30:27 ID:xCaS4YDR0
>>371
ありがとうございます! ウィンドウの中心座標で判定するようにしました

374 :名無しさん@お腹いっぱい。:2010/10/24(日) 17:21:31 ID:rUerIEXj0
ちょいと質問。AHK_L(公式から取れる最新のX64のやつ)を使って
a::
Hotkey,d,Empty,On
return

b::
Hotkey,d,Empty,Off
return

d::
Msgbox,s
return

Empty:
return

見たいにして簡単なテストをしてるんだがaを押してもbを押しても
dを押したときに何も変わらないんだ…。はやらせるページとか見て
なんか変なミスしてんのかなーと思って見直してみても
わからない…。だ、だれかHotkeyの使い方教えてくれまいか。

375 :名無しさん@お腹いっぱい。:2010/10/24(日) 17:59:29 ID:Mkh5TRub0
>>374 の挙動は、
・ 起動直後は[D]押下で[s]出力
・ [A] 押下で [D] 押下時のに「何もしない」ようにする。
 もともとのホットキー定義は上書きされる。
・ [B] 押下で [D] 押下時の挙動をオフにする
 元々のものはEmptyに上書きした上でオフ、[A] で定義したものはオフに
となると思うけど、それが意図したものだろうか?

個人的意見を言うと、Hotkeyコマンドで切り替えるのは凄く分かりづらいので、
#If で条件を明示した方がいいと思ってる。

376 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:12:38 ID:9F09eDFy0
>>374
こういう動作が希望?

a::flag=1

b::flag=0

$d::
if flag=1
Msgbox,s
else
send, d
return

377 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:20:44 ID:rUerIEXj0
最終的に、
>>376
みたいのが希望だったんっだけど、なんかですね、
俺がやったとおりにすると
>>375のいうようになるのかと思ったらならないんだよ。
だからHotkeyのコマンドって調べたところにのってたのと
違うのかなーと思って聞いたのでした。
ただ、聞いてみると確かにHotkeyでやるより#Ifでやったほうがよさそうだ。
答えてくれた人、ありがとう。

378 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:28:13 ID:9F09eDFy0
>>377
んじゃ、こういうのが希望?
面倒くさそうだけど。

a::Hotkey,d,Empty,On

b::Hotkey,d,d,On

d::
Msgbox,s
return

Empty:
return

379 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:35:45 ID:5wnKBkRmP
こういう場合、>>376の例みたいに、フラグで機能割り当ての管理をしたほうがラクだよね。

うちでは、フラグの変数を、押すたびにインクリメントして、
機能の割り当てをローテーションで変えたりして使ってる。


380 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:45:11 ID:TOpAYAMo0
質問です。宜しくお願いします。

Win+Prtscnが押されたら
1.画面コピー
2.ペイントの起動
3.プリントスクリーンの貼付
の動作を一気にしたいのです。

-----
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。
#PrintScreen::
Run,mspaint.exe
Sleep 100
!hvp
return
-----
を作りましたが、ペイント起動後何も起こりません。貼付迄動作しません。

質問1
この場合、>Run,mspaint.exe の前にPrintScreenキーを押す(ハードコピー)記述は必要なのでしょうか?
Prtscnキーを押す動作なので PrintScreen と記述したらエラーになっちゃいましたけど・・・
質問2
>!hvp の部分はプルダウンメニューから貼付を選択してるつもりです。こういう記述で良いんでしょうか?
Alt+H、V、P のつもりです。 http://iup.2ch-library.com/i/i0175925-1287981773.jpg

因みに、昨日からAHK弄ってるレベルです。

381 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:52:32 ID:A0xR5fqgP
検証してないけど

>Sleep 100

いくらなんでも短すぎる気がする
2000くらいで始めて、徐々に縮めていったほうがいい

>!hvp

これ何?
sendコマンド付いてないじゃん

あと、いっきにコマンド流しても反応しないことがあるので、
altHを送った後にメニューが出てるか確認して、
出ていたら次のコマンド送るようにするとか、
いろいろ細かい細工をする必要がある。

382 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:59:30 ID:4wvx/zaY0
>>380
ホットキーの修飾シンボルとSendlコマンドのキーを参照されたし

http://sites.google.com/site/autohotkeyjp/reference/Hotkeys
http://sites.google.com/site/autohotkeyjp/reference/commands/Send

383 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:18:42 ID:Xu8cPlUE0
autohotkeyでまずマスターしたいのは
sendの使い方だよね

384 :380:2010/10/25(月) 14:25:39 ID:TOpAYAMo0
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。
#PrintScreen::
Run,mspaint.exe
Sleep 2000

;ALT+Hキーを押してプルダウンメニューの表示
{
  Send {ALT down}
  Sleep 60
  Send {H down}
  Sleep 30
}
Send {ALT up}
Send {H up}

;貼付けを選択
Sleep 1000
{
  Send {V down}
  Sleep 30
}
Send {V up}

;クリップボードからの貼付けを選ぶ
Sleep 1000
{
  Send {P down}
  Sleep 30
}
Send {P up}

return

385 :380:2010/10/25(月) 14:33:41 ID:TOpAYAMo0
>>384
に修正して今動きました!

仰るとおりsendの使い方が理解出来てなかったです。
別のキーに入れ替える時のみ使うのかと思ってました。

http://sites.google.com/site/autohotkeyjp/reference/commands/Send の
>Loop 20
>{
> Send {Tab down} ; キーリピートをキー押下としてキーを送る
> Sleep 30 ; キーリピート間隔を30msとする(またはSetKeyDelayを使う)
>}
>Send {Tab up} ; キー押下を解除する
で使い方が分かりました。

あと >Sleep 100 も全体的に桁を上げてスローにしたら動きが見れました。

今後微調整してみます。 

>>381 様 >>382 様 >>383 様 ありがとうございました。

386 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:51:48 ID:N0z/tjG0i
ペイントを起動して張り付けれられるのを待つのは、
Sleepでもいいけど、WinWaitActive を使う方がいい。
ウィンドウの指定の「お作法」を知る必要があるけど、
せっかくAHK使い始めたんだし覚えて損はないぞ。

387 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:58:00 ID:4XJMmLcR0
; pushを作ってみたよ

rrrpush(byref o,sss){
if(o.length == ""){
o.length := 0 ;
} ;
o.Insert(o.length,sss) ;
o.length:= o.length + 1 ;
return o ;
} ;

ooo := object() ;

rrrpush(ooo,"プッシュ0") ;
rrrpush(ooo,"プッシュ1") ;

sss := " ooo[0] = " ooo[0] "`n ooo[1] = " ooo[1] "`n ooo.length = " ooo.length
msgbox,%sss%

sss := " ooo.0 = " ooo.0 "`n ooo.1 = " ooo.1 "`n ooo.length = " ooo.length
msgbox,%sss%

388 :名無しさん@お腹いっぱい。:2010/10/25(月) 15:25:58 ID:dQSDWczY0
なにそれ?

389 :380:2010/10/25(月) 15:33:50 ID:TOpAYAMo0
>>386
あーこういうものあったんですね。
>指定したウィンドウがアクティブになるまでスクリプトの実行を一時停止します。
あとで改造してみます。

390 :名無しさん@お腹いっぱい。:2010/10/25(月) 16:01:19 ID:7Y23PrHpi
>>387
push/pop みたいな LIFO(Last in, first out)は、
arr.Insert(itemToPush)
popedItem := arr.Remove(arr.MaxIndex())
でいけるっしょ。
index = 1 を使えば、shift/unshift も可能。

FIFO なら、
arr.Insert(itemToAdd)
item := arr.Remove(1)
でいいし。

391 :名無しさん@お腹いっぱい。:2010/10/26(火) 20:36:44 ID:q65iTCV2i

>>246
亀だが、昔随分前に使って、こりゃダメだ、と思ってた。
#If も使えるし、AHKLw相当だな。
画面の向きを何とか検知できれば、
融通の利かない SortInchkey を捨てられそうだ。

392 :名無しさん@お腹いっぱい。:2010/10/26(火) 21:47:29 ID:bvWup9giP
Run, foobar2000.exe /comand:Next
でAHKからfoobarをコントロールしているのですが、
曲が切り替わったあとに最速で曲名を取得するにはどうすればいいでしょうか?

切り替わる直前にタイトルバーが一瞬foobar2000になるので、
Loop
 WinGetTitle, sTitle, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Until sTitle != foobar2000
で取得しようとしたのですが、切り替わる前の現在のタイトルが取得されてしまいました
今は長めにSleepしてからWinGetTitleで切り替わったあとのタイトルバーの文字列を取得していますが、
このSleep部分を自動化することはできないでしょうか

393 :名無しさん@お腹いっぱい。:2010/10/26(火) 22:19:00 ID:0xoVxpsw0
>>391
PocketPC版のAutohotokeyはWin32用とは違ってキーカスタマイズに使うわけじゃないけど、
ちょっとしたことさせるには結構いいと思うわ。
AHKだけでフルスクリーンにする方法がよくわからんので、
手前のアプリをフルスクリーンにするExeをRunして誤魔化してるがw
GUIで大きなボタンが使えて、ファイル操作が出来て、Win32版とほぼ同じコードが動かせるインタープリタはほかにあるのかな?

394 :392:2010/10/26(火) 22:30:51 ID:bvWup9giP
自己解決しました

Run, foobar2000.exe /comand:Next
WinWait, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinWaitClose, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinGetTitle, sWinTitle, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}

で取得できました

395 :名無しさん@お腹いっぱい。:2010/10/26(火) 23:41:50 ID:R8VjGMqH0
>>394
3rd Party製のCOMを使うと色々便利だよ

COM Automation Server for 0.9, Public technology preview
http://www.hydrogenaudio.org/forums/index.php?showtopic=39946

// auto execute
fb2k := ComObjCreate("Foobar2000.Application.0.7")
fb2k_playback := fb2k.Playback
ComObjConnect(fb2k_playback, "Fb2kPlayback_")
return

#n::fb2k_playback.Next() ; 次の曲
#p::fb2k_playback.Previous() ; 前の曲

Fb2kPlayback_TrackChanged(bLocationChanged)
{
global fb2k_playback
MsgBox, % fb2k_playback.FormatTitle("%artist% - %title% - %album%"); foobarのタイトルフォーマティング
return
}

インターフェイスや関数は、インスコされたフォルダにあるfoobar2000.idlを参考に

396 :392:2010/10/26(火) 23:57:17 ID:bvWup9giP
>>395
うおお、これはすごい・・!
ありがとうございます、こちら使ってみます

397 :392:2010/10/27(水) 00:28:26 ID:dzE2OZRCP
すみません、ComObjCreate("Foobar2000.Application.0.7")でfoobarが起動してしまうのは仕様でしょうか?
MouseGesture.ahkに組み込んでいるので、Windows起動時に毎回foobarが起動してしまうと少し面倒です
またスクリプト終了時にfoobarが存在しないとRPC サーバーを利用できません。というエラーが表示されるのですが、どういう意味でしょうか?

398 :名無しさん@お腹いっぱい。:2010/10/27(水) 00:41:03 ID:8b70FoXC0
AutoHotKeyを初めて使ってみようと思って公式サイトからダウンロードしたんですが、
カスペルスキー先生にTrojan-GameThief.Win32.OnLineGames.xfzpだって怒られてしまいました。

これは誤検知ってことで良いんでしょうか?

399 :名無しさん@お腹いっぱい。:2010/10/27(水) 01:41:29 ID:dzE2OZRCP
foobar見つけたらComObj生成、存在しなくなったらComObj破棄というタイマーを500msで回すことで解決しました
ありがとうございました

400 :名無しさん@お腹いっぱい。:2010/10/27(水) 01:45:32 ID:21uFL+Ds0
>>398
たぶんね。
AHKはキー入力の監視・乗っ取りなどスパイ的な事ができるんで、
その辺がトロイなどと認識されているかもしれない。
あるいは、実行ファイルが圧縮されているんだけど、それが誤検出の元だったりもする。

401 :名無しさん@お腹いっぱい。:2010/10/27(水) 08:49:34 ID:8b70FoXC0
>>400
やっぱりそうですか。それに少し安心しつつ、ちょっと使ってみようと思います。
ありがとうございます!

402 :名無しさん@お腹いっぱい。:2010/10/27(水) 11:23:11 ID:C3BMn1dN0
>>399ごめんあれからすぐ寝てた。タイマーでもおkだけとヘルパを使う手もあるみたい
fb2k_helper := ComObjCreate("Foobar2000.ApplicationHelper.0.7") ;Foobarの起動状態を監視するヘルパ(COMServer2Helper.exe)
ComObjConnect(fb2k_helper, "Fb2kHelper_") ;Foobar起動時/終了時に呼び出されるイベント
return
Fb2kHelper_ServerStateChanged(bRunning) { ;bRunning: false(終了時), true(起動時)
global
if bRunning
fb2k := ComObjCreate("Foobar2000.Application.0.7"), fb2k_playback := fb2k.Playback, ComObjConnect(fb2k_playback, "Fb2kPlayback_")
else ; この時点で恐らくFoobar(サーバ)が死んでるので、RPCなんちゃらエラーが出る。ComObjErrorで回避…
ComObjError(false), fb2k_playback := "", fb2k := "", ComObjError(true) ;特別な開放処理は必要ない…と思う
return
}
;Fb2kPlayback_TrackChanged上記と同じなので省略
長くなりそうだったので詰めた。読みづらくてスマソ

403 :名無しさん@お腹いっぱい。:2010/10/27(水) 11:47:00 ID:uy+2ap1C0
autohotkeyの派生はautohotkey_lだけかと思っていたら
autohotket_hやautohotkey_nもあるのね
こんがらがってきた

404 :402:2010/10/27(水) 12:48:46 ID:C3BMn1dN0
あ、もしWindows終了時とかCOMServer2Helperが先に終了してエラー出るなら、
Auto-executeでComObjError(false)やっちゃうのがいいかも。必要なときは(true)/(false)で囲む形で

405 :名無しさん@お腹いっぱい。:2010/10/27(水) 23:35:56 ID:dzE2OZRCP
>>402
教えていただいた方法で書き直しました
こちらのほうが無駄がなくていいですね
本当に助かりました、ありがとうございます

406 :名無しさん@お腹いっぱい。:2010/10/28(木) 02:56:50 ID:5gI82XJE0
皆さんのところでは、Win 7 x64 + AHK_L x86 rev 61 で SoundPlay は動いてますか?

407 :名無しさん@お腹いっぱい。:2010/10/28(木) 12:01:42 ID:iIplMjyG0
なんで64で32使ってるの?
Win7 32bitでAhk_L 32bit Unicodeだとちゃんと音鳴るぞ

408 :名無しさん@お腹いっぱい。:2010/10/28(木) 15:27:45 ID:up4g96kpP
そろそろ_L版に乗り換えなきゃなぁと思ってるのだけど、うちも64機で、
以前から使い続けている32bitのAHK本家がそのまま動いたから
それをそのままつかってる。soundplayも、問題なく動いてる。

64bitマシンで64bit対応AHKをつかうと、どんな恩恵があるの?

409 :406:2010/10/28(木) 21:07:19 ID:jJZO3LXf0
>>407
DllCall でドライバー直接たたいてる部分が AHK_L x64 で動んのですよ。
ポインターサイズやバッファーサイズの変更だけではどうにもならなかったので
諦めて x86 ビルドを使ってます。それ以外のスクリプトは x64 ビルドでいいんだけどね。

>>408
そうですか、じゃあ自分ちだけの問題みたいですね。なんだろ?

410 :名無しさん@お腹いっぱい。:2010/10/28(木) 22:11:08 ID:85I2/olr0
エスパーしてみると、裏で排他モードで何か鳴らしてるとか。

411 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:07:32 ID:H5Svzd9O0
質問
Ctrl + Shift + C を操作してクリップボードにコピー →クリップボード内の=以降を正規表現で抽出(ファイル名)
→Googleディスクトップ検索 迄を一気にしてるつもりなんですが・・・

キー操作の Ctrl+C を Ctrl + Shift + C に置換えてるつもりですが、
Ctrl + Shift + C を押してもクリップボードへのコピーが出来てないようです。
従って、前にCtrl+C でコピーした内容がクリップボードに残ってて、検索される様なのですが?何が悪いのでしょうか?
-----
MsgBox,Ctrl + Shift + C で文字列の最後の=以降(ファイル名)をgoogleデスクトップで検索。
^+C::
;Ctrl+Cキーを送信して、クリップボードにコピー
Send,^c
;クリップボードにテキストが格納されるまで待機
ClipWait
;1行文字列の置換。
ClipBoard := RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" )
;複数行文字列の置換。
;ClipBoard := RegExReplace( ClipBoard, "\A.*=(.+?)$", "$1" )
;置換えられたクリップボード(抽出されたファイル名)をGoogleディスクトップで検索します。
Run,http://127.0.0.1:4664/search&s=P6EiCVVf5KnXpjFRh9HLxn61WY8?q=%ClipBoard%
Return
-----
宜しくお願いします。

412 :411:2010/10/31(日) 00:11:24 ID:dGqZc2fG0
自己解決しました。

413 :411:2010/10/31(日) 00:23:45 ID:H5Svzd9O0
ガセです。継続してレス希望してます!

414 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:40:39 ID:jpbTvmw/P
ディスクトップって・・・いままで生きてて、おかしいと思ったことはないの?

415 :411:2010/10/31(日) 00:48:52 ID:H5Svzd9O0
ああ分かってたのにデスクトップの間違いでやんす。

416 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:54:48 ID:jpbTvmw/P
とりあえず、最初の Send,^c の前に、

sleep,1000

を入れてみて、様子を見てみたら?
物理キー入力と、キー送りが近すぎると、
動かないことが多い。

417 :名無しさん@お腹いっぱい。:2010/10/31(日) 01:04:36 ID:G3btguv00
>>411
少なくともウチでは動くなぁ。

でも、その処理だとClipWaitで無限に待ったりしてないのかね?
いったんクリップボードを空にして、
タイムアウトを0.2秒くらいに設定してErrorLevel で変更されたかどうか見た方がいい。

^+C::
Clipboard =
Send, ^c
ClipWait, 0.2
If (ErrorLevel = 0)
{
 q := RegExReplace( ClipBoard, 〜〜, 〜〜)
 Run, http://127.0.0.1:4664/search?s=〜〜&q=%q%
}

ところで、
・正規表現置換後の文字列は普通の変数使った方がいいと思う
・それとURLのパラメタの並びおかしくね?
・コマンドの説明そのままのコメントは見にくくなるだけで要らない感じ

418 :411:2010/10/31(日) 01:24:20 ID:H5Svzd9O0
>>416 >>417
あ〜ホントだ。待機時間入れたら思ってた通りに動きましたわ。

ErrorLevel/変数/パラメタ/コメントの修正は、寝て起きてシャキットした頭で再度してみます。

>>416 様 >>417 様
夜分遅くお手数お掛けしました。ありがとうございます。

419 :名無しさん@お腹いっぱい。:2010/10/31(日) 01:34:05 ID:G3btguv00
あ、コメントの件だけど、スレに貼る時のことね。

> ;Ctrl+Cキーを送信して、クリップボードにコピー
> ;クリップボードにテキストが格納されるまで待機

こういうのはコマンド見りゃわかるし、分からなきゃマニュアル読めばいいだけだしな。



420 :名無しさん@お腹いっぱい。:2010/11/01(月) 15:44:28 ID:+4nWtFOd0
RegExReplace()で置換後文字列にTABを設定したいのですが
どうしたらよいでしょうか?
"\t"とするとそのままの文字が表示されてしまいます

421 :名無しさん@お腹いっぱい。:2010/11/01(月) 15:57:00 ID:adGfZotN0
MsgBox, % RegExReplace("hageTABhageTABhogeTABhoge","TAB",A_Tab)

422 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:15:09 ID:x+9fRJzj0
MsgBox, % RegExReplace("abcdeABCDE", "i)b", "`t")

分かりづらいんだけど、
・ 正規表現パターンの部分は正規表現のルールでエスケープする
・ 置換文字列の部分はAHKのルールでエスケープする

正規表現エンジン自体には置換機能は無く、マッチング機能のマッチ情報を元に
AHK側で実装しているためにこうなっている。

※ ちなみに、正規表現エンジンはUTF-8で動かしているので
  UTF16←→UTF-16 の置換を数度繰り返すため、
  置換が遅いという報告がフォーラムに上がってる

423 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:16:12 ID:x+9fRJzj0
間違っとるw
 UTF-8 ←→ UTF-16


424 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:35:27 ID:+4nWtFOd0
>>421,422
どうもありがとうございました


425 :名無しさん@お腹いっぱい。:2010/11/01(月) 23:16:41 ID:Te9KDCJV0
; このスレ参考にして、DLLの呼び出しのところを弄ったらAutohotkeyLでもFmod.dllが動きました。感謝!fmodce.dllはまだうまくいってないけどw
; http://www.autohotkey.com/forum/topic53012.html

AudioFile =%A_WinDir%\Media\tada.wav
; AudioFile =%A_ScriptDir%\test.wma
; AudioFile =%A_ScriptDir%\てすと.wma
msgbox,%AudioFile%
fMod := DllCall("LoadLibrary", "Str","FMOD.DLL")
DllCall( "FMOD.DLL\_FSOUND_Init@12", "UInt" ,44100, "UInt" ,32, "UInt" ,0x2)
fStream := DllCall("FMOD.DLL\_FSOUND_Stream_Open@16", "AStr",AudioFile, "UInt" , 0x20000, "UInt" ,0, "UInt" ,0 )
Channel := DllCall("FMOD.DLL\_FSOUND_Stream_Play@8", "UInt" ,-1, "Uint" , fStream )
Sleep 5000

DllCall( "FMOD.DLL\_FSOUND_Stream_Stop@4", "Uint" ,fStream )
DllCall( "FMOD.DLL\_FSOUND_Stream_Close@4", "Uint" ,fStream )
ExitApp

426 :名無しさん@お腹いっぱい。:2010/11/02(火) 16:44:10 ID:AEcR182R0
テンキーレスキーボードを購入したはいいもののやはりテンキーが欲しくなり、
scrolllockONでmjkluio789キーをnumpad0〜9に置き換える機能を作りたく

m::
getkeystate, state, scrolllock, T
if state = D
send {numpad0}
return

(scrolllockON時にmをnumpad0にリマップ)
というものを書いてみたのですが、
これではscrolllockオフ時にmの反応がなくなってしまいます

何かうまい方法はないものでしょうか

427 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:01:17 ID:CxeSsQv20
いやいやいや

428 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:03:15 ID:unkGM94V0
>>426
$m::
getkeystate, state, scrolllock, T
if(state = "D") {
send,{numpad0}
return
}
else {
send,m
return
}
return

うちではこれでうまくいった
ただ素直にNumLock使えばいいと思うけど

429 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:50:27 ID:smp1qdhQ0
AHKL使おうぜ

#If GetKeyState("ScrollLock", "T")
M::Send, {Blind}{Numpad0}
J::Send, {Blind}{Numpad1}
K::Send, {Blind}{Numpad2}
L::Send, {Blind}{Numpad3}
U::Send, {Blind}{Numpad4}
I::Send, {Blind}{Numpad5}
O::Send, {Blind}{Numpad6}
7::Send, {Blind}{Numpad7}
8::Send, {Blind}{Numpad8}
9::Send, {Blind}{Numpad9}
#If

430 :名無しさん@お腹いっぱい。:2010/11/02(火) 23:55:24 ID:Ydh/XJv00
以前からahkで作ってexe化したラッパーに画像を関連付けしていまして、
実行時のX1ボタンやX2ボタンの押下状態で実際に実行するアプリを変えられる様にしていたのですが、
最近になってMouseGesture2を導入してからこの動作に問題が出てきました。
実行ファイルをダブルクリックの際に同時にX1やX2ボタンを押していても実行自体がされません。
「動作割り当て」にX1+左クリックやX2+左クリックを一部のアプリで登録しており、
その設定が干渉しているんだなとは分かるのですが、回避することが出来ません。
上記動作で「Default」条件にMG_Abort()とかを定義してみてダメでした。
MG_Abort()を設定した後で、試しに下の様なスクリプトでテストすると
X1やX2を押しながらダブルクリックしても、どちらも0にしかなりません。
a := GetKeyState("XButton1", "P")
b := GetKeyState("XButton2", "P")
Msgbox, X1=%a% X2=%b%
Return

なにか上手い方法はありませんでしょうか?

431 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:18:21 ID:c2w1QMMF0
「なにか上手い方法」ってフレーズはやってんの?

432 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:33:06 ID:Dhc2CwaSP
解決するために、自分では考えられない方法や手順に関して、
いろんな方法があるから、そう書くんじゃね?べつに嫌な気分にはならないけど。

>>430
さきに実行されたスクリプトが、キー入力を吸い取ってしまう。
だから、あとから起動されたスクリプトの入力に降りてこなくなる。

キー入力を吸い取らないように、キー定義の前に ~ をつけるとか、
同時に稼動しても問題ないように、双方を改造するしかない

これをやると、キーの2度押しコードの1回目とかで、無効にすべきキーが平常時のように
流れてしまうなどの弊害も出るので個別に面倒を見る必要がある。

433 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:37:37 ID:NuRYJlWP0
>>430
そのジェスチャツールがボタン押下メッセージ奪って捨てちまうんで、
他のアプリとってはボタンが押されているのは気付きようがない。

でも、まぁ出来なくは無いかも知れない。
ボタン押下を検知できるのは常駐側だけなんで、そいつにお伺いたてればいいんじゃないのかね。
ラッパーExeから常駐スクリプトにSendMessageして、常駐側がGetKeyStateの結果を返す、とか。


434 :名無しさん@お腹いっぱい。:2010/11/03(水) 02:37:13 ID:aLD3JVtQ0
>>428-429
出来ました!
私のキーボードにはnumlockがついてなかったので重宝しそうです

435 :名無しさん@お腹いっぱい。:2010/11/03(水) 09:12:12 ID:dU79cjgJ0
クリップボード文字列の英数を全角→半角に置き換えたい場合に
1文字ごとに1行のスクリプトを書いているのですが
これをまとめて記述する方法はないでしょうか

436 :名無しさん@お腹いっぱい。:2010/11/03(水) 10:48:43 ID:NuRYJlWP0
文字コードでやりゃいいんじゃないのかね。

ToHankakuNumAlpha(str, target="A 1") {
 alpha := RegExMatch(target, "[A-Za-z]")
 num := RegExMatch(target, "\d")
 Loop, Parse, str
 {
  code := Asc(A_LoopField)
  If (alpha) && (code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A)
   out .= Chr( 0x41 + (code - 0xFF21) )
  Else If (num) && (code >= 0xFF10 && code <= 0xFF19)
   out .= Chr( 0x30 + (code - 0xFF10) )
  Else
   out .= A_LoopField
 }
 Return out
}

437 :名無しさん@お腹いっぱい。:2010/11/03(水) 10:52:42 ID:NuRYJlWP0
カッコ間違ってるw

> If (alpha) && ((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A))

ちなみにAHKLユニコード版でないと動かない。


あと、記号類とかも一気にやりたいならNKF使うといいよ。

438 :名無しさん@お腹いっぱい。:2010/11/03(水) 13:40:20 ID:oeFsMo3E0
((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A))
このORの右側って左側に含まれてるように見えるんだけどなんで?

439 :名無しさん@お腹いっぱい。:2010/11/03(水) 13:53:29 ID:NuRYJlWP0
うひゃー。左側は (code >= 0xFF21 && code <= 0xFF3A) だな
                  Chr("A")       Chr("Z")

0xFF3B〜0xFF40( [\]^_` )の誤爆があるんで、
A〜Z(0xFF21〜0xFF3A) と a〜z(0xFF41〜0xFF5A)を分けたつもりだったんだが…orz

440 :名無しさん@お腹いっぱい。:2010/11/03(水) 15:13:27 ID:oeFsMo3E0
6文字だけ記号が入ってるのか…意味わかんねw

>>435 まとめて記述、強引に書いてみた

;tarの並び順の通りに、対応して置き換える文字をrepに並べる
tar=ABCabc/¥()123
rep=ABCabc/\()123
Loop, Parse, rep
{
rep%A_Index% := A_LoopField
}

str = ABCDEF/¥(aaazzz)
Loop, Parse, str
{
order := RegExMatch( tar, A_LoopField )
If( order )
out .= rep%order%
Else
out .= A_LoopField
}

MsgBox, %out%

441 :名無しさん@お腹いっぱい。:2010/11/03(水) 21:12:35 ID:n2DwmTc50
>>432,433
アドバイスありがとうございます
SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw

MouseGesture2で実行中も、X1・X2を押下したままジェスチャのタイムアウトまで
時間を待ってダブルクリックを実施すれば、X1・X2押下の状態がラッパーまで
通知されていたので、試しにスクリプト中の「移動中にタイムアウト」と
コメントが入っている部分をまるっと拝借してX1+左クリックやX2+左クリックの
押下時にMouseGesture.ahk側で実行するようにしたところ、期待通りの動作になりました。

Critical
SetMouseDelay,-1
MG_TimedOut=1
BlockInput,On
Loop,Parse,MG_CurTriggers,_
 If A_LoopField<>
  GoSub,MG_%A_LoopField%_Down
BlockInput,Off
Critical,Off
MouseClick, left

上記がそうなんですが、流行らせるページの管理人さんのスクリプトが高度すぎて
いまいちどうして上手く動作出来ているのかは理解できてません。
ほぼMouseGesture.ahkの956行あたりからそのまんまですが、
MouseMoveの行を削って、最後にMouseClick, leftを追加しました。
(MouseClick, leftを追加しないとトリプルクリックが必要だったので)

お恥ずかしい話ですが、これ何で上手く動いてるのでしょうか?
なんとなくですが、タイムアウトしたらトリガー押下を後からエミュレートしてる?とか考えてますが…

442 :435:2010/11/04(木) 05:00:57 ID:KIq6zHjp0
すみませんがもう1件質問させていただきます
複数行のクリップボード文字列を上下逆順に並べ替えたいのですが
どのようにしたらよいでしょうか

例)
A………
B………
C………
  ↓
C………

B………
A………
行数は可変です
(行数固定なら単純にマッチさせて逆順で置き換えればいいと思うのですが)


>>436 .>>440
ありがとうございました。申し訳ないのですが自分の現在の理解度では
うまくクリップボード文字列に応用させられなかったので
全角半角置換についてはとりあえず今まで通りで行く事にします

443 :442:2010/11/04(木) 05:02:32 ID:KIq6zHjp0
>C………
のあと1行開いてるのはただの打ちミスです。スミマセン

444 :名無しさん@お腹いっぱい。:2010/11/04(木) 05:53:25 ID:0LVLrsnY0
>>442
ttp://sites.google.com/site/autohotkeyjp/reference/commands/Sort

445 :名無しさん@お腹いっぱい。:2010/11/04(木) 14:19:59 ID:xHKLIkA10
command = run,c:\windows\system32\
%command%

こんな感じで、変数の中に命令を代入したいのですが無理なんでしょうか。
別の設定ファイルの条件にしたがって分岐したいのですが、If 〜Elseが何十個も並ぶのが見にくいので変数でまとめてしまいたいんです。

446 :名無しさん@お腹いっぱい。:2010/11/04(木) 14:46:35 ID:H3jxOr4k0
文字列として変数に格納されているコマンドを実行するのは無理。
コマンドに渡すパラメタを変数で指定するならOK(1)
もしくは、サブルーチンラベルを格納してそこにジャンプするようにする(2)
あとはDynamic Function Call とかオブジェクトのメソッドにするとか…

ランチャなら殆どは(1)で済む。
分岐で複数命令を実行したいなら(2)。

(1)
command1 = spider.exe
command2 = C:\Progaram Files\Hoge\hoge.exe
Run, %command1%

(2)
Label = ExecCommand1
If IsLabel(Label)
 Gosub, %Label%
(略)

ExecCommand1:
 Run, foo.exe
 Return

ExecCommand2:
 Run, bar.exe
 Return

447 :名無しさん@お腹いっぱい。:2010/11/05(金) 01:46:51 ID:8BMdsHgy0
>>393
WM機でGUI全画面に出来た。DllCall使うとは思わなかったw

#NoTrayIcon
isFull := False
Gui, +LastFound -Caption
Gui, Add, Button,, Close
Gui, Add, Button,, FullScreen
SetFullScreen(isFull)
Gui, Show, , Sample
WinMaximize
Return
ButtonClose:
 ExitApp
ButtonFullScreen:
 SetFullScreen( isFull := !isFull )
 Return
SetFullScreen(isFull, SIP=True) {
 flags := isFull ? 0x02 | 0x20 : 0x01 | 0x10
 flags |= SIP ? 0x04 : 0x08
 yOffset := isFull ? 0 : 26
 DllCall("SHFullScreen", "UInt", WinExist(), "UInt", flags)
 WinMove,,, 0, yOffset, A_ScreenWidth, A_ScreenHeight - yOffset
}

448 :名無しさん@お腹いっぱい。:2010/11/05(金) 08:20:01 ID:BZJhOZrA0
>>444
ありがとうございます
うまくいきました

449 :名無しさん@お腹いっぱい。:2010/11/05(金) 16:20:08 ID:Mk4Ee8z10
右shiftキーの左隣(かなの「ろ」)ってどう記述すればいいんだろ?
キーヒストリーだと半角のバックスラッシュ(\)って表示されるんだけど
メモ帳で書くと「\」になっちゃう
キーコード指定すれば問題なく使えるから困りはしないんだけど

450 :名無しさん@お腹いっぱい。:2010/11/05(金) 18:04:35 ID:5vdoxt/y0
AHKでGUIアプリを作ったのだけど
そのウィンドウがアクティブなときだけ有効なホットキーを設定したいのだけど
どうしたらいいのだろう?

Gui, +LastFound
WinGet, id, ID
#IfWinActive ahk_id %id%
a::b
#IfWinActive

↑こんな感じでやれたらいいのだけど
ウィンドウの指定で変数が使えないみたいなので
今はウィンドウタイトルの一致で設定してるけど
もっと確実な方法はないものかなぁと

なるべくLの機能は使わずにやれたらうれしいです

451 :名無しさん@お腹いっぱい。:2010/11/05(金) 19:16:17 ID:8BMdsHgy0
GroupAdd, MyGui, ahk_id %GuiId%
#IfWinActive, ahk_group MyGui

or

#If WinActive("ahk_id " GuiId)

452 :名無しさん@お腹いっぱい。:2010/11/06(土) 01:00:45 ID:pkR42kMV0
>>449
文字コードは一緒、フォントの違い

453 :450:2010/11/06(土) 14:59:34 ID:anhitfLM0
>>451
上の方のやつでうまく動かすことが出来ました
下の方はLの機能?うちのでは動きませんでした
どうもありがとうございました

454 :名無しさん@お腹いっぱい。:2010/11/06(土) 16:16:44 ID:iaZAJCAC0
すっごい今更なんですけど
1.0.48.04 - September 25, 2009

Added full support for "if % expression". [thanks kenomby]
っていうのは、具体的にどういうものなんでしょうか?
if (expression)とは別物?

455 :名無しさん@お腹いっぱい。:2010/11/06(土) 17:04:41 ID:5TmD6Zsu0
同じだと思う。

これは文法エラー(コマンドタイプ)
If a > 1 {
 MsgBox, Greater
}

これはOK (式タイプは "{" を行末に付けてもOK)
If (a > 1) {
 MsgBox, Greater!
}

これは通るので式タイプと見さされているっぽい
If % a > 1 {
 MsgBox, Greater!
}


456 :名無しさん@お腹いっぱい。:2010/11/06(土) 17:17:38 ID:iaZAJCAC0
>>455
なるほど、%で式だと明示的に書けるようになった、て事だったんですね
ありがとうございました

457 :名無しさん@お腹いっぱい。:2010/11/07(日) 06:41:25 ID:Lz50T94C0
RegExReplace()でマッチさせる文字列に変数を使う方法はあるでしょうか

iniファイルでマッチする文字列を管理したいのですが
RegExReplace()内では変数がきかないみたいです

458 :名無しさん@お腹いっぱい。:2010/11/07(日) 07:18:51 ID:HkajTAj30
きくように書け

459 :名無しさん@お腹いっぱい。:2010/11/07(日) 08:45:18 ID:o2YjkDD60
>>457
変数使いたければ引用符外で

460 :名無しさん@お腹いっぱい。:2010/11/07(日) 08:59:12 ID:Z89TtGAD0
動きません
できません
やれないみたいです
できないみたいです

って書くよりも、その動かないコードを直接貼り付けたほうが、
ここの住人は働くし、働きやすい

461 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:07:33 ID:AnpKSw1I0
RegExMatchで最後の数字列をマッチさせたいんですが、

RegExMatch(URL, "P)(?<=\D)(\d*)(?=[./\b])", Decimals)

これではfoo/bar1.htmとかfoo/bar1/とかはマッチしてもfoo/bar1を逃してしまいます。
どう書き換えたらfoo/bar1までマッチするんでしょうか

462 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:16:39 ID:mMR28S/J0
それだと数字の後に何か文字が無いとマッチしないだろ。
(\d+)(?=\D*)$
でいいんでないのかね。

関連スレ:

正規表現 Part7
http://hibari.2ch.net/test/read.cgi/tech/1268979408/

463 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:18:45 ID:jvoxFRZ70
SQLite3の.dbを読み込んで値を取得したいんだけどそういうライブラリってもうない?
ttp://www.autohotkey.com/forum/topic12752.html&highlight=sql
がそれっぽいんだけどなぜか消されてる

464 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:14:56 ID:AnpKSw1I0
>>462
ありがとうございます。
(\d+)(?=\D*)$とSplitPathを組み合わせたら何とかできそうです。

465 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:35:54 ID:Qcyi9zfm0
>>463
_L限定でよければ、ADOとか。SQLite ODBC Driverが必要だけど

; Janeの画像キャッシュ名からサイズを得てみる
db := ComObjCreate("ADODB.Connection")
com := ComObjCreate("ADODB.Command")
sDriver := "DRIVER=SQLite3 ODBC Driver;Database=Cache.icx" ; Cache.icxのパス

db.Open(sDriver)
com.ActiveConnection := db
com.CommandType := 1
com.CommandText := "SELECT size FROM headerTable WHERE cacheName=?"

sCache := "foo.vch" ; 調べたいキャッシュの名前
VarSetCapacity(n, 8)
rs := com.Execute(n, sCache)
if (!rs.EOF)
MsgBox,% rs.Fields(0).value
rs.Close(), rs := "", com := "", db.Close(), db := ""

466 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:53:08 ID:dsRx6GHh0
まったくプログラムの知識がないのですが
AutoHotkeyを勉強できる方法・サイトなどを
教えてください

467 :名無しさん@お腹いっぱい。:2010/11/07(日) 19:03:44 ID:+GQYTQEA0
>>1見りゃ大体わかる

468 :名無しさん@お腹いっぱい。:2010/11/07(日) 19:37:57 ID:mMR28S/J0
hoppfrosch wrote:
  What about updating the examples within the AHK_L-Manual to be
  unicode compatible (- or AHK-L compatible at all)?
Lexikos:
  Already done, but the downloads and online documentation hadn't been updated.
  There weren't very many ANSI-specific examples, afaict.

ってな具合なんだけど、AutoHotkeyJp の doc は AHKL 用に最適化してもいいかな?
両方の互換性を考慮して旧docと真docの両方を読み直して、
双方の互換性のことを色々記述するのは結構なな手間なんで。
幸いにも旧docのミラーはあるわけだし

469 :名無しさん@お腹いっぱい。:2010/11/07(日) 20:42:43 ID:jvoxFRZ70
>>465
_L愛用してるので全く問題ないです
ありがとうございました!

470 :名無しさん@お腹いっぱい。:2010/11/08(月) 15:16:48 ID:xOom4MwI0
>>441
>SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw
SendMessageでスクリプト間の通信をするようになれば、
保守管理がかなりやりやすくなるんじゃないかな。
SendMessageの例は一見するとわからないかもしれないけど、
じっくり眺めてみればわかるはず。

>>468
賛成です。
できれば、AHKLのq and a がautohotkeyのforamに立っていたので、
その内容も紹介してほしいです。

471 :名無しさん@お腹いっぱい。:2010/11/08(月) 20:43:35 ID:0FH6VXhx0
すみません質問です。AHK_L使っていて、GetKeyStateを使って#Ifで
条件分岐させようとしてます。aだけならGetKeyState("a","P") = 1
でいいんですが、すべてのキーが押されてないときもしくは押されてるときって
どう書けばいいですかね?"a" "b" "c"とか列挙してけば何とかなると思ったら
長すぎるよってエラーが出てしまいまして。どうすればいいですかね?

472 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:36:07 ID:7mOlVxlJ0
「全てのキー」って何を意味するの?キーボード上の全部のキーを全部押す状況ってあるの?
それとも「任意のキーが押されている/どのキーも押されていない」ってこと?

具体的な条件を書いた方が早いと思う。

473 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:40:23 ID:0FH6VXhx0
すいません補足ありがとうございます、
「任意のキーが押されている/どのキーも押されていない」
ってことです。
ちなみに今は
xを押してるとき、iを押してるとき、xもiも押されてないときって感じでやってます。

474 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:41:24 ID:t1Vut+p+0
キーボード上の全部のキーを全部押してもそれを検出することは不可能だけどな

475 :名無しさん@お腹いっぱい。:2010/11/08(月) 23:23:54 ID:fTbG/ZI50
Inputをタイマーで回せばいんじゃね

476 :名無しさん@お腹いっぱい。:2010/11/09(火) 00:02:34 ID:EafMnpX40
パフォーマンス的にはどうかと思うけど一応。
通常のタイプには向かない。これ使うといかに自分のキータイプがオーバーラップしているかが分かる。

#If CheckOtherKey()
a::
b::
 MsgBox,, [%A_ThisHotkey%], Some key is already pressed
 return
#If
; どのキーも押されていない時のホットキー定義

CheckOtherKey() {
 static keys1:="abcdefghijklmnopqrstuvwxyz012345678-^@[;:],./"
  , keys2:="vkDC|vk1C|vk1D|vkF3|vkF4|Space|Enter|Backspace|Pause|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12" ;足りないなら追加を
 ListLines, Off
 Critical
 SetBatchLines, -1
 thisKey := RegExReplace(A_ThisHotkey, "^\W+|\s.+")
 Loop, Parse, keys1
  If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P")
   Return True
 Loop, Parse, keys2, |
  If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P")
   Return True
}

477 :名無しさん@お腹いっぱい。:2010/11/09(火) 06:07:06 ID:BKm/Xh6z0
>>476
うおお、わざわざありがとうございます。
これから試してみます。
それとキーボード上の全部のキーを全部押す状況ってあるの? ってことですが
それをいわれるとそんな状況ってないOTL
あとは自分で考えて試行錯誤してみます。
どうもありがとうございました!

478 :名無しさん@お腹いっぱい。:2010/11/11(木) 08:19:43 ID:r64aaIcu0
PC上で今(どのくらい)音が鳴っているか調べる事ってできる?

479 :名無しさん@お腹いっぱい。:2010/11/11(木) 10:53:32 ID:OEbUF5hy0
Windows上のボリュームを習得・変更はできるけど、鳴ってる音の音量は無理とはいわないけどきびしいんじゃないか。

無茶をするなら、再生リダイレクトで鳴ってる音を拾ってwave編集ツールなりdllなりで何デシベルかを返してもらうとか。

480 :名無しさん@お腹いっぱい。:2010/11/11(木) 14:44:06 ID:XPhmSHbm0
If()、if()、if、If、IF
Loop、While(1)、While(True)
最近他人のコード見るたびにどれで書くか迷うようになった・・・

481 :名無しさん@お腹いっぱい。:2010/11/11(木) 15:56:33 ID:iPVnRxO4P
そろそろSwitch文が欲しい

482 :名無しさん@お腹いっぱい。:2010/11/11(木) 18:53:48 ID:Ju0UA39+0
なあちょっと聞きたいんだが・・・。
皆さ、GetKeyState("LAlt","P")とかで
LAltが押されてることを調べることってできてるか・・・?
俺のマシンはできないというかなんというか。
これで判定文を書いてもうまく動いてないんだ…。
んでちょっと皆に聞いてみたくなったわけだが。
使ってるのは最新のAHK_Lです。

483 :名無しさん@お腹いっぱい。:2010/11/11(木) 19:46:55 ID:XTe92QsE0
うちは動くなぁ

Loop
 Sleep, 1
Until GetKeyState("LAlt", "P")
MsgBox, LAlt detected

484 :名無しさん@お腹いっぱい。:2010/11/11(木) 22:23:24 ID:r64aaIcu0
>>479
別ツールから取得してるんだけどdllか・・・
正直全く分からんけどいじってみるよ。ありがとう

485 :名無しさん@お腹いっぱい。:2010/11/12(金) 19:42:03 ID:6RBVGTCe0
空白しか含まれない文字列の場合〜っていう条件分岐どうやればいいかな?
こんなの考えたけどなんか無駄な気がする

CheckSpaceOnly(str){
 static Space_Zenkaku := " "
 StringReplace, str, str, %A_Tab%,
 StringReplace, str, str, %A_Space%,
 StringReplace, str, str, %Space_Zenkaku%,
 return str == ""
}
str1 := "  "
str2 := "あ いう え お"
MsgBox, % "「" . str1 . "」は" . ( CheckSpaceOnly(str1) ? "空白だけ" : "空白だけじゃない" )
MsgBox, % "「" . str2 . "」は" . ( CheckSpaceOnly(str2) ? "空白だけ" : "空白だけじゃない" )

486 :名無しさん@お腹いっぱい。:2010/11/12(金) 20:21:00 ID:9mzE66cii
非スペースがあるかないかを見た方が処理が早く終わるよ

InputBox, str, Test, Enter some string,,200,110

If RegExMatch(str, "[^\s ]+")
MsgBox,, RegEx, The string has non-space character!!

nonspace:=False
Loop,Parse, str
If A_LoopField Not in %A_Space%,%A_Tab%, 
nonspace:=True
Until (nonspace)
If (nonspace)
MsgBox,, Loop, The string has non-space character!!


487 :名無しさん@お腹いっぱい。:2010/11/12(金) 20:26:42 ID:9mzE66cii
おっと、ターンに + は要らないな。
"[^\s ]"
で。

携帯でスクリプト打つのはムズいのぉ@AhkCE

488 :名無しさん@お腹いっぱい。:2010/11/12(金) 22:04:19 ID:6RBVGTCe0
>>486
見やすいしどう考えても置換するより速いね
どうもありがとう助かりました

489 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:27:57 ID:AZ03NlDy0
AutoHotkey.exeを管理者権限で起動しないとAutoHotkeyが管理者権限で起動されたアプリケーションを操作できない
でも管理者権限で起動してしまうと今度はAutoHotkeyから起動したアプリケーションを管理者権限を持たないアプリケーションが操作できない

ぬおーMouseGesture.ahkで詰んだ
管理者権限AutoHotkeyからウェブブラウザ開くと他アプリがウェブブラウザへURL送れない

490 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:46:03 ID:LcPhG0DX0
>>489 自分も似たような問題で悩んだ
基本的な解としては、通常権限で常駐するラッパーアプリケーションが必要になる
そしてそいつに AHK から命令を送って起動させる

自分とこでは、AHK から "ファイル名を指定して実行" に起動パスを送るって方法で
対処してかれこれ 1 年になります

491 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:47:08 ID:LcPhG0DX0
書き忘れ
AHK は管理者権限で起動しておきます

492 :名無しさん@お腹いっぱい。:2010/11/13(土) 03:22:59 ID:cLRsHERq0
RunAsじゃだめなの?

493 :名無しさん@お腹いっぱい。:2010/11/13(土) 03:32:42 ID:FgHy8IvW0
もう覚えてないんだけど、RunAs で上手くいかない事例があったんだよね

494 :名無しさん@お腹いっぱい。:2010/11/13(土) 04:18:36 ID:AZ03NlDy0
ごめん色々調べてみたんだけれどファイル名を指定して実行に送るがわからなかった
shell32.dllにDllCallみたいなことするの?
AHKからrun, wscript myrun.js %cmd%でJScript呼び出して中でobjShell.Runしてもだめだった

RunAsはいまいち使い方を理解してない・・
管理者権限で実行するためのコマンドだった気がするけど違ったっけ

495 :名無しさん@お腹いっぱい。:2010/11/13(土) 04:39:49 ID:4LfwRh0P0
自分は英語版 OS + ファイル名に日本語は使わないので
日本語環境では適宜調整が必要かも
ファイル名を指定して実行、基本的な仕組みは以下のとおり

----
Run, shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
WinActivate, Run ahk_class #32770 ; 日本語 OS なら "Run" を変えなきゃかも
Send, ここの文字列が送られる
----

RunAs はユーザーを変更して起動するコマンドです
詳しくはヘルプをどうぞ

http://www.autohotkey.com/docs/commands/RunAs.htm

496 :名無しさん@お腹いっぱい。:2010/11/13(土) 06:13:25 ID:4LfwRh0P0
>>492 理由を思いだした
RunAs はログオン用パスワードが必須なので、
複数のコンピューター/アカウントで使いまわす汎用スクリプト用には使いづらかった

497 :名無しさん@お腹いっぱい。:2010/11/13(土) 08:27:14 ID:20s0PxK60
起動時に username/password を InutBox とかで入力させて変数に入れておけばいいんでないのかね

498 :名無しさん@お腹いっぱい。:2010/11/13(土) 09:04:18 ID:FgHy8IvW0
>>497 うーん、自分はいいけど他人にやらせるのが面倒くさい

499 :名無しさん@お腹いっぱい。:2010/11/13(土) 14:30:10 ID:JY/EQTs6P
manifestで uiAccess="true" を付けて
デジタル署名を付ければOKです。

500 :名無しさん@お腹いっぱい。:2010/11/13(土) 18:38:21 ID:2gUxJxsb0
64bit版と32bit版の二つを動かせば。。

501 :名無しさん@お腹いっぱい。:2010/11/13(土) 19:46:06 ID:+JgI8frP0
質問です。以下のスクリプトは正常に動くのですが、

WinGetActiveTitle, Title
If Title =Add Bookmark
{
処理A
}else{
処理B
}

2行目を
If Title =ブックマークに追加
とすると、ウィンドウタイトルが「ブックマークに追加」でも処理Bに分岐してしまいます。
日本語の扱いの問題と思うんですが、どう回避したらいいんでしょうか。

502 :名無しさん@お腹いっぱい。:2010/11/13(土) 19:57:55 ID:QzR0MBJC0
>>7

503 :489:2010/11/13(土) 21:24:46 ID:AZ03NlDy0
みんなどうもありがとう
結局いろいろ試してみた結果、外部スクリプトでサーバー書いて元スクリプトからメッセージ送って操作する方法で落ち着いた

鯖スクリプトAhkCmdSvr.ahk
#Persistent
WM_USER_GOOGLESEARCH := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" )
Gui, Add, Text, , AhkCmdSvr
OnMessage( WM_USER_GOOGLESEARCH, "AhkCmdSvr" )
return

AhkCmdSvr( wp, lp, msg, hWnd ){
  global WM_USER_GOOGLESEARCH, WM_USER_OPENPATH
  If( msg == WM_USER_GOOGLESEARCH )
    /* ほにゃらら〜 */
}

〜〜〜〜〜〜〜〜〜〜〜〜

元スクリプトMG_User.ahk
GoogleSearch:
  Msg := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" )
  DetectHiddenWindows, On
  PostMessage, %Msg%, , , , % "ahk_id" WinExist( "AhkCmdSvr.ahk ahk_class AutoHotkeyGUI" )
  DetectHiddenWindows, Off
  return

みたいな
常駐スクリプト増えちゃうしメンテが大変だけど


504 :名無しさん@お腹いっぱい。:2010/11/13(土) 21:36:16 ID:20s0PxK60
どっちにしろプロセス分けなきゃいけないし、メッセージ毎に関数分かれてるから
メンテもそれほどじゃないっしょ。

あと、メッセージ番号はユニーク(なはず)なんで、ブロードキャストしちゃってもいいんじゃないのかね

PostMessage, DllCall("RegisterWindowMessage", "Str", "RemoteFunction", "UInt")
 , wParam, lParam
 ,, ahk_id 0xFFFF

505 :501:2010/11/13(土) 22:10:17 ID:+JgI8frP0
>>502
どうもありがとうございます。
AutoHotkey_Lに乗り換えることで解決しました。
MouseGesture.ahkの書き換えがちょっと手間でしたけど、これで快適になりました。

506 :489:2010/11/13(土) 22:26:25 ID:AZ03NlDy0
>>504
たしかに一斉にPostした方が簡素でいいですね
ありがとう

507 :名無しさん@お腹いっぱい。:2010/11/14(日) 11:56:16 ID:Lm9CuBw40
うちの環境で(AHKとAHK_L両方でやってみたんだが)
a::
While GetKeyState("a","P") = 1
{
 If GetKeyState("NumpadLeft","P") = 1 ;
 {
   ToolTip,4
 }
}
return
ってやってaを押しっぱなしにしてNumpadLeftを押すと4が表示されるのはいいんだが
Leftを押したときにも表示されちゃうんだよね。これって皆のところでもそうなのかな。
というか実は仕様だったりするのか?
(英語のフォーラムのバグレポートに下手な文章で書いては見たんだけど、
まずここで聞けばよかった・・・)

508 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:13:19 ID:dGM1bnQ20
Shift+DeleteをDeleteだけにするスクリプトと、
その逆のDeleteをShift+Deleteにするスクリプトを教えて・・・

509 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:17:45 ID:V1AI1Nqz0
>>1

510 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:26:09 ID:RDc+Ku8b0
<わからない9大理由>
1.読まない …参考書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

★教えて君五大要素★

1 読まない             (文盲)
2 調べない             (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない        (馬鹿)
5 人を利用することしか頭にない (死ね)

511 :名無しさん@お腹いっぱい。:2010/11/14(日) 16:47:29 ID:rFeDZJnW0
読まないって読んでもないから文盲とは言わないよね

512 :名無しさん@お腹いっぱい。:2010/11/14(日) 18:03:18 ID:w6u4qqYX0
マニュアル類は全体的な整合性で記述してある。
そんなんもの積み上げれば積み上げるだけ、どこから取り付いて良いかさえ分からないのが初心者。

全部読めてしまったら聞く必要もないし。 表現されていないことは聞く必要があるけど。
マニュアルでことが済むようになるのはある程度少し知るようになってからだね。
有り難いのは魅力的な表現力で適切な知識のあるところに誘ってくれる人。

513 :名無しさん@お腹いっぱい。:2010/11/14(日) 21:50:59 ID:JeEPmY310
普通なら、>>1の日本語解説のイントロダクションと使用例を読んでるはずで
キーの指定法の確認として、マニュアルのホットキーの項目を見て目的達成
3〜4ページ読むだけなんだから、通常の人間ならここで質問するまでもないな

514 :名無しさん@お腹いっぱい。:2010/11/14(日) 22:03:39 ID:I0qf8Li00
どっから手をつけたらいいのかわからないからとっかかりを教えて
つーならまあいいんだけど
イントロダクションにすら辿り着けない初心者の人も多そうだし

だが理解する気ゼロのスクリプトクレクレはスルーでいいだろ
この手合いは誘導したって読みゃしないよ

515 :名無しさん@お腹いっぱい。:2010/11/14(日) 23:22:27 ID:YdfLj1Lf0
イントロのページなんだけど、ほぼ流行らせるページのままなんでかなり不親切なんだよな。
本家の現在のチュートリアル( ttp://www.autohotkey.com/docs/Tutorial.htm ) のほうが全然マシなんで、
いつか訳して差し替えてやろうと思ってるけど、「暇な時でいいや」って感じで怠ってる。

そのまま訳すのもどうかとは思ってるんだけど、日本のサイトでのこういう解説って
インストーラのどのボタンを押すとかを手取り足取りスクリーンショット付きで解説してるけど、
あそこまでやるのもどうかと。
多分ほとんど直訳で済ましちゃうんだろうけど。

516 :名無しさん@お腹いっぱい。:2010/11/15(月) 00:11:49 ID:Ncq3tjiq0
解説サイトをはじめから読む気がない人とか
今の解説サイトは不親切だとか、難しくて理解できないとか言う人は
いくら最初に背中を押してやっても、その後まともに使いこなせるようになるとは思えない

517 :名無しさん@お腹いっぱい。:2010/11/16(火) 07:14:27 ID:OycmIebG0
イントロダクションのページより英語のままでも本家のチュートリアル読んだほうが
まずは何をやったらいいのかがわかると思う。


518 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:07:07 ID:MqY3zrOv0
初めてスクリプト書く人には取っ掛かりにくいとは思うから…

1)インストール
2).ahkを新規作成して下3行記入して保存
Space::
MsgBox, Hello
Return
3)実行してスペース押す

この次にイントロダクション、使用例、使用方法を読むって流れがいいと思う

519 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:25:47 ID:MlhI4BWN0
流行らせるページが消えたのは残念なことだ
管理人氏も消すこたあないのになあ


520 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:36:23 ID:IoAFb8q00
nilのほうに人が来ないからね。しょうがないでしょ。

521 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:03:54 ID:GzcWjA+B0
消したところで、はたしてnilを盛り上げるだけの効果はあったのかな?
なんか、全然話題になってないけど。

522 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:22:06 ID:+Bdiu3hH0
nilはあのライセンスじゃ使う気もおこらない

523 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:32:49 ID:X5qMVW8I0
別に盛り上がる必要はなく、バグ報告してくれる報告者だけ確保できればいいってスタンスらしい
AHKページあるとそういう人すら呼び込めなくなる可能性があるので消すってな趣旨のことを書いてた

524 :名無しさん@お腹いっぱい。:2010/11/16(火) 20:47:17 ID:9oiSGtsYP
ウザい要望厨が湧くくらいには周知されたみたいだよ。
跡地のHTMLを書いてFTPで更新しただけにしては上出来だね。

525 :名無しさん@お腹いっぱい。:2010/11/16(火) 21:24:09 ID:xc789aCZ0
>>522
今見てきたけど、何あのギャグみたいなの
マジであのライセンスなのか

526 :名無しさん@お腹いっぱい。:2010/11/16(火) 22:12:22 ID:WUCY9iMX0
Nilのライセンスってどういう文面なん?

527 :名無しさん@お腹いっぱい。:2010/11/16(火) 23:05:27 ID:9oiSGtsYP
AHKを流行らせる協会のようなジョークじゃないの

528 :名無しさん@お腹いっぱい。:2010/11/16(火) 23:08:28 ID:ZG6Jqg0+0
スレ・板違いも程々にな

529 :名無しさん@お腹いっぱい。:2010/11/17(水) 19:12:35 ID:gEJMTsRQ0
PCスタンバイからの復帰後に自動でスクリプト再起動(reload)するにはどうすればいいでしょうか

530 :名無しさん@お腹いっぱい。:2010/11/17(水) 19:20:58 ID:fC7J6xdH0
はやらせるスクリプトで、電源環境の変化を検出するやつがあるから、
それで復帰を検出して、reloadすればいいんじゃね?

余談だが、俺はこれをつかってノーパソでスタンバイ復帰後、
俺しか知らない特定の操作をしてるかどうかのフラグを設けている。

その条件が満たされない場合、第三者が勝手に触ってるとみなして、
強制シャットダウンさせるようにしている。(再起動後はドライブがロックされる)

531 :名無しさん@お腹いっぱい。:2010/11/17(水) 20:11:41 ID:CIQIIh4tP
WM_POWERBROADCAST

532 :名無しさん@お腹いっぱい。:2010/11/17(水) 20:18:11 ID:D4sxjFsA0
http://pc11.2ch.net/test/read.cgi/software/1219130051/971
過去ログはAutoHotkeyJpで手に入る

533 :529:2010/11/17(水) 20:37:55 ID:gEJMTsRQ0
過去ログの電源メッセージ掴む方法で再起動できました
みなさんありがとうございました

534 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:25:53 ID:cqLZPQMy0
解像度を変更するにはどうすればいいのでしょうか

535 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:33:27 ID:0GDKj7/k0
その質問を書く前に、何を試したの?

536 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:53:36 ID:cqLZPQMy0
AutoHotkeyJp で検索かけたところ
取得する方法は書いてありましたが
どの関数で変更すればいいかは見つけることができませんでしたが・・・

537 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:57:06 ID:cqLZPQMy0
Remarkの欄にありましたー
お騒がせしました^^

538 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:25:20 ID:j8B7xYBE0
何か挙動が変なときがある。
FireFoxの XUL/migemo みたいな検索がしたくて、アルファベット押したら検索ボックスにキー入力させるやつ。
(KeyWait しているのは意図的にキーちょっと長めに押した時のみ反応させるため)

#If (Janeのスレビューにフォーカスがある) && (キャレットが表示されていない)
a::
b::
(中略)
z::
 KeyWait, %A_ThisHotkey%, T0.2
 If (ErrorLevel) {
  IME_Set(0)
  BlockInput, On
  Send, ^f
  Send, %A_ThisHotkey%
  KeyWait, %A_ThisHotkey%
  BlockInput, Off
 }
 Return

で、普通なら押したアルファベットが入力されるだけなんだけど、
たまに %A_ThisHotkey% の中身がおかしいのか、
「?hk_id XXXXXXX」
と出力される時がある。? は押下中のキー、XXXXXは数値。

検索文字を消して再入力すればいいだけなんで、あまり実害はないんだけど気持ちが悪い。

環境は XP Pro SP3, Lw61 32bit

539 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:45:01 ID:ETr0zHeM0
漏れ本家AHK使っててAHKLの機能は何も必要ないけど
もう更新されないしセキュリティ的にそろそろAHKLに移行する頃?

540 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:47:50 ID:WaDCz3vl0
逆に本家使い続けるメリットって何かなって思ってみたり

541 :名無しさん@お腹いっぱい。:2010/11/20(土) 20:57:59 ID:PS6yr00q0
メリットってのとは違うけど
歌詞サイトから取得した歌詞をDAPで見栄え良く表示させるために
文字列を整形するスクリプト書いたときのことだけど、
L版だとStrLen()でバイト数じゃなく文字数返されるので困ったことがあった。
んで、オレの知識じゃわからんので結局本家で作ったってのがあったな


542 :名無しさん@お腹いっぱい。:2010/11/20(土) 22:53:42 ID:j8B7xYBE0
ANSI(シフトJIS)でのバイト長を得るだけなら、以下のようにすれば出来るよ。

str = あいうえお
MsgBox, % length := StrPut(str, "CP932") - 1

最後の -1 は終端のヌル文字(0x00)の分

543 :541:2010/11/20(土) 23:30:11 ID:xeNOkRtD0
>>542
ありがとう。
今度似たようなスクリプト書くときそれでやってみます。

544 :名無しさん@お腹いっぱい。:2010/11/23(火) 22:00:49 ID:IXfByVvb0
英語版キーボードでShiftなど + CapsLock をCapsLock押下に割り当てたいのですが
漢字ひらがななどの変換になってしまいうまくいきません。
うまくいった人はいますか?
(CapsLockはESCにしました)
日本語入力での直接入力とひらがなの切り替えは
F1::Send !{sc029}
でやっています

545 :544:2010/11/23(火) 22:54:37 ID:IXfByVvb0
入力言語が日本語の時も英語のときも挙動がおかしいんです


546 :名無しさん@お腹いっぱい。:2010/11/23(火) 22:59:06 ID:PzNDc9ba0
>>544
>4

547 :544:2010/11/23(火) 23:02:15 ID:IXfByVvb0
#CapsLock::CapsLock
で出来ました。日本語英語とも動きます。ありがとうございました。

Winキーは便利ですね。ロック系の組み合わせは
Winキーとだと安定するんでしょうか。


548 :544:2010/11/23(火) 23:10:44 ID:IXfByVvb0
そういえば
+Capslock::Capslock

は英語入力だとちゃんと動きました誤解があるといけないので

549 :名無しさん@お腹いっぱい。:2010/11/24(水) 05:44:17 ID:EXKrqrVJ0
     _人人人人人人人人人人人人人人人_
     >      すごくどうでもいい      <
      ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^^Y^ ̄

               ヘ(^o^)ヘ 
                  |∧   
                 /

550 :名無しさん@お腹いっぱい。:2010/11/24(水) 10:15:12 ID:clQYYJ2Y0
Lock系キーの動作は環境(キーボードやBIOS等)で変動するので他の人の参考にはならない
報告したいならPCやマザボの機種とか細かく環境書かないとほぼ無意味

551 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:09:05 ID:3GvsOHmq0
NumLock状態をデバイス側で管理(?)するトリッキーなのもあったりするしな

あと、OSのロケールとドライバの種類も大事だな

552 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:23:04 ID:qFybzQSQ0
imeの処理を質問します。 変換中の文字列を取得しようと思い、
過去ログで出ていたahk.imeを改変して関数を作りましたが、 うまく動きません。
dllcallを使うために↓のページを利用しました。
http://msdn.microsoft.com/ja-jp/library/cc447983.aspx
http://msdn.microsoft.com/en-us/library/ms905973.aspx
どこを修正すればよいのでしょうか。

IME_ConposStr_GET(WinTitle="A") {
VarSetCapacity(stGTI, 48, 0)
NumPut(48, stGTI, 0, "UInt") ; DWORD cbSize;
hwndFocus := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
? NumGet(stGTI,12,"UInt") : WinExist(WinTitle)

VarSetCapacity(st2GTI, 4000, 0)
NumPut(4000, st2GTI, 0, "UInt") ; DWORD cbSize;

DllCall("SendMessage"
, UInt, DllCall("imm32\ImmGetCompositionString"
, Uint,hwndFocus
, Uint,"GCS_COMPSTR"
, Uint,&st2GTI
, Uint, 4000)
, UInt, 0x0283 ;Message : WM_IME_CONTROL
, Int, 0x0005 ;wParam : IMC_GETOPENSTATUS
, Int, 0) ;lParam : 0

return stGTI
}


553 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:50:01 ID:3GvsOHmq0
結論から言うと無理。
IMEを使ってるプロセス以外からは入力コンテキストのハンドル(hIIMC)が取れていない。

というか色々間違ってる。動くわけがない。

・SendMessage の投げ先の HWND がおかしい、
 というかImmGetCompositionString の戻り値はバッファ長で HWND ではない。
・ImmGetCompositionString の第1引数は hIMC
・UINT型なのに文字列渡して意味ない ( GCS_COMPSTR := 0x8 )

554 :名無しさん@お腹いっぱい。:2010/11/24(水) 15:46:41 ID:qFybzQSQ0
そうですか、そもそも無理でしたか。。。
スレ汚し失礼しました。

555 :名無しさん@お腹いっぱい。:2010/11/25(木) 02:26:07 ID:rn8lHsHU0
時間ごとにクリックさせていく自動化をしたいんですが、
初心者にはAHKかUWSCどっちがオススメですか?
AHKのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが
英語できない人間にはコードを知ったりするのが難しそう。
おしえてください。

556 :名無しさん@お腹いっぱい。:2010/11/25(木) 03:37:46 ID:B3EUHNYZ0
時間ごとにフリスク食べさせていく自動化をしたいんですが、
初心者にはWindowsかMacどっちがオススメですか?
Linuxのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが
程度低い人間には教えたところで使ったりするのが難しそう。
おしえてください。

557 :名無しさん@お腹いっぱい。:2010/11/25(木) 07:36:13 ID:y2EVuGP90
その程度なら、重い/軽いってのを気にする程のもんじゃないな。
習うより慣れろで、拡張性云々よりも自分の手に馴染むかどうかだよ。
どっちもネットで落としたらすぐ使えるんだし、とにかく試して決めればいいだけかと。

558 :名無しさん@お腹いっぱい。:2010/11/25(木) 13:45:03 ID:b/Fe70Ol0
UWSCだと、動作記録→スクリプト保存→改変がすごくスムーズ
一からスクリプトを書くより、この流れのが初心者には楽
ヘルプが完全日本語
Loop処理の命令がいろいろあるが、初心者には1つだけの方がいいかもしれない


AHKはコマンドの引数に要求されるのが変数と文字列の両方あるので、混乱するかも
メッセージボックスはUWSCに比べてすごく書きやすい
ホットキーでの再生/一時停止/再開が格段に使いやすい
AHKのほうが軽い気がする
繰り返し何かさせるにはTimerがものすごく便利

559 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:18:07 ID:upNaKri80
一行にに命令は無理ですか?

560 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:25:16 ID:upNaKri80
二個の命令ということです

561 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:27:34 ID:GS7QIIVh0
それは、なんのために?

562 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:35:03 ID:upNaKri80
dvorak を全部autohotkey で実現することにしたので
大文字小文字の命令なでは一行にまとめたいのです
見やすそうなので

563 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:37:35 ID:upNaKri80
すいません
dvorakでひら仮名入力するのは久しぶりなので
誤字がひどいです

564 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:39:11 ID:y2EVuGP90
このスレの住人が作ってるAHK製の DvorakJ ってのがあるよ

565 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:40:38 ID:upNaKri80
Jじゃないdvorak を使う予定なのと
キーアサインを個人的にもう少しいじるので

566 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:42:45 ID:upNaKri80
dvorakJ を参考にして書けそうですありがとうございました

567 :名無しさん@お腹いっぱい。:2010/11/25(木) 21:51:43 ID:/ePGl0Rw0
超初心者の俺にはAutoMouseが最強
誰かwin7でも使えるようにしてくれw

568 :名無しさん@お腹いっぱい。:2010/11/26(金) 00:38:07 ID:QMspvyb80
>>558
レスどもです。こうやってみると
UWSCのほうが初心者にはいいみたいですね。
AHKは一時停止とかもできるのか、いいなぁ

569 :名無しさん@お腹いっぱい。:2010/11/26(金) 10:33:39 ID:9n4Aw3tm0
(ネタ) 個人的に気になった公式フォーラムのトピック

http://www.autohotkey.com/forum/topic61379.html
 スクリプト生成ツール(主にホットキー)。SS:http://img25.imageshack.us/img25/9767/scwinc4yz0htdrt.png
http://www.autohotkey.com/forum/topic58183.html
 簡易WinSockライブラリ(L用あり)
http://www.autohotkey.com/forum/topic63813.html
 Aeroライブラリ(GUIのαブレンド表示etc)
http://www.autohotkey.com/forum/topic63844.html
 正規表現テスター。SS:  http://www.autohotkey.net/~DerRaphael/screenshots/simple_regex_tester-0-2-0.png
http://www.autohotkey.com/forum/topic32238.html
 GDI+ライブラリ。GUIで図形描画画像加工。図形の画像ファイル化も可。
http://www.autohotkey.com/forum/topic63817.html
 [AHKL] AHKLのFAQ集
http://www.autohotkey.com/forum/topic59581.html
 [AHKL] 構造体を簡単に使えるように
http://www.autohotkey.com/forum/topic64303.html
 [AHKL] クラス定義ファイルからコード自動生成。メソッド内はAHKの文法が使える。↓は例。
  class Person
   Name := "unknown"
   construcor(uname){
   this.Name := uname
  }
  endclass
http://www.autohotkey.com/forum/topic59336.html
 MIDI制御しようぜ!
http://www.autohotkey.com/forum/topic61120.html
 [AHKH] 3キー以上のコンビネーションキー

570 :名無しさん@お腹いっぱい。:2010/11/26(金) 22:55:52 ID:QMspvyb80
http://www.autohotkey.com/forum/topic61120.html
 [AHKH] 3キー以上のコンビネーションキー

これ、非常にやりたいです。だれかおしえてください。
英語読めない。ファイル落としてもAHK_Hみたいなファイルないし。
実行ファイルを入れ替えるだけでできるかとおもったんですが。

571 :名無しさん@お腹いっぱい。:2010/11/27(土) 00:29:26 ID:ob+MxG6x0
>>510

572 :名無しさん@お腹いっぱい。:2010/11/27(土) 01:16:20 ID:W7SkcZM30
3キー以上ってストロークのが使いやすくね?
1&2&3&4より1&2-3-4のが。
それよりも1&2でMenu出して選ぶのが好みだけど

573 :名無しさん@お腹いっぱい。:2010/11/27(土) 01:17:32 ID:2w5sBfUa0
正規表現テスター使ってみようかな?どうしようかな?どきどき

574 :名無しさん@お腹いっぱい。:2010/11/27(土) 07:55:18 ID:3/D/v94v0
>>567
AutoMouseは最強だが最弱でもある

575 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:04:11 ID:pD5RvHK90
かなり初心者の質問です

常時有効にしたいキー群Aと、SuspendコマンドでOn/Off切り替えしたいホットキー群Bを
2つのファイルに分けて常駐させているのですが
ひとつのファイルにホットキーをまとめるにはどう書くとスマートですか?

576 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:09:45 ID:Uf+ZWNJH0
Lの#if

577 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:39:16 ID:pD5RvHK90
>>576
まとめられました!
すばやい御回答に感謝です

578 :名無しさん@お腹いっぱい。:2010/11/27(土) 13:45:26 ID:W7SkcZM30
main.ahkスクリプトで、
sub.ahkのサスペンドやポーズなどを制御するには、どうするのが確実ですか?
1つだけならsubにサスペンドのホットーキー書いておいてmainでSendすればいいのですが
複数同時にしようとすると上手く切り変わらなかったりshift押しっぱなどの症状がでます


あとexe化したスクリプトaaa.exeが常駐している状態で
aaa.exe -sをコマンドラインで実行した場合、
引数「-s」を取り扱う方法はありますか?

579 :名無しさん@お腹いっぱい。:2010/11/27(土) 14:09:15 ID:WBxcGV1Q0
>>578
ホットキーの待ちうけがあるスクリプトを複数連携させると、いろいろ面倒なことになるから、
メインスクリプトでキーの待ちを全部書いておき、必要に応じてホットキー無しのサブを
起動させるほうが安定すると思う。

連携のコツは、ファイルのINIやレジストリなどで管理情報を書いておき、
どのプロセスがいつ読んでも今の状況を外部から把握できるようにする。

引数は %1% %2% とかで読める。
引数の数は %0%

580 :名無しさん@お腹いっぱい。:2010/11/27(土) 15:12:32 ID:zpDfRvWa0
>>578
前者:
SendMessage と OnMessage 使うのが確実。>>503-504 あたりも参照

DetectHideenWindows,On と WinMenuSelectItem 使ってもいいがトグルしかできない。
(頑張れば出来なくもないけど、SendMessageのほうが遙かに楽)

後者:
#SingleInstance, Ignore を指定してやらんといけないんで結構面倒。
自分と同じパスのAHKのプロセス探して、無い場合は自分が常駐して、
ある場合はそいつに引数を通知するって処理を自分で実装する必要がある。

引数(文字列)の受け渡しは面倒かも。>>220-221 あたりを参照。
スイッチ・フラグみたいなのを通知するだけなら Send/PostMessageだけでいい。

581 :名無しさん@お腹いっぱい。:2010/11/27(土) 16:43:46 ID:W7SkcZM30
>>579, 580 ありがとうございます
WinMenuSelectItemは盲点でした
トグルだけでいいので目的は達成できそうです
SendMessage…いい加減手を出そうかな


あと>>185 今さら自己解決。常識かもしれないけど。
IfGreater, 1, 0, MsgBox, True
とか
If 1 < 1
{
MsgBox, False
}
のコマンド型だとそのまま使えた

582 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:39:06 ID:Qeh4ib5M0
どの命令が実行されても
一緒に実行される命令ってかけますか?
他の命令に手を加えずに

583 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:42:31 ID:Yagn/8sw0
言葉が足りなすぎ、やり直し

584 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:50:21 ID:Qeh4ib5M0
a::x
b::y
c::z
.
.
.
とあるときに
どっかに書きくわえる形で
a,b,c, が押されるたびにMsgBox 2 
が実行されるようにすることは可能ですか?

585 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:57:44 ID:dagFP8IG0
できるけど、リマップのままじゃ無理。

586 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:05:15 ID:Qeh4ib5M0
a::Send x
ならどうでしょうか

587 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:10:34 ID:dagFP8IG0
色々やり方はあるけど、共通関数噛ますとかすりゃいいだけ。

a::MySend("x")
b::MySend("y")
c::MySend("z")

MySend(key) {
 ; ここに共通前処理
 Send, %key%
 ; ここに共通後処理
}


588 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:17:24 ID:Qeh4ib5M0
a::Send xはいじりたくないんですけど…

589 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:27:59 ID:dagFP8IG0
じゃあこれ。説明はめんどいからしない。

OnMessage(0x8000, "MsgListener")

#If Aspect()
a::x
b::y
c::z
#If

Aspect() {
 DllCall("PostMessage", "Ptr", 0, "UInt", 0x8000, "UPtr", 0, "UPtr", Object(Object("key", A_ThisHotkey)))
 Return True
}

MsgListener(wParam, lParam) {
 obj := Object(lParam),keyName:=obj.key,ObjRelease(obj),obj:=""
 Tooltip, % keyName
}



590 :名無しさん@お腹いっぱい。:2010/11/28(日) 12:45:04 ID:zhsZ/e2N0
説明は欲しいんですけど…

591 :582:2010/11/28(日) 13:19:30 ID:Qeh4ib5M0
僕は説明要りません。DllCallは昔だいぶ使ったので大体わかります。

592 :名無しさん@お腹いっぱい。:2010/11/28(日) 13:36:07 ID:TB9SoGj60
大体なのかよ

593 :582:2010/11/28(日) 13:45:53 ID:Qeh4ib5M0
それは各命令を調べれば完全にわかるだろう、ということです
>>589様、ともかくありがとうございました


594 :名無しさん@お腹いっぱい。:2010/11/28(日) 14:17:36 ID:dagFP8IG0
ま、一応。
Postしてるのは #If の処理時間を短くかつ非同期にするため。
hwnd=0x0 の窓に投げると自スレッドのキューにメッセージ溜められるんだけど、
コマンドのPostMessageだと窓が見つからなくて動作しないから DllCall にしてる。
lParamでキー名を格納したオブジェクトのポインタを渡して、後で復元。参照回数は適宜操作。

595 :名無しさん@お腹いっぱい。:2010/11/28(日) 16:21:50 ID:TB9SoGj60
1.0.90.00 - November 27, 2010

Fixed: UrlDownloadToFile in Unicode builds on Windows < 7.
Fixed: Upper-ANSI characters were sent as Alt+0 in ANSI build.
Fixed: File.Pos was incorrect after attempting to read past EOF.
Fixed: Escape sequences in #If expressions and static initializers.
Fixed: ClipboardAll sometimes crashed the script with certain formats.
Fixed: Transform HTML calculated length incorrectly for &#NNN; entities.
Fixed: VarSetCapacity now correctly ignores #MaxMem for ByRef variables.
Fixed: FileAppend,,file.txt set ErrorLevel=1 even on success.
Fixed: Match length was miscalculated for RegEx callouts with the P) option.
Integrated Sean's improvements to number handling in COM interop.
Optimized RegExReplace and RegExMatch in Unicode builds.

596 :名無しさん@お腹いっぱい。:2010/11/28(日) 17:29:38 ID:cklndLbS0
本家が久々の更新か、と思ったらL


597 :名無しさん@お腹いっぱい。:2010/11/28(日) 19:48:54 ID:dagFP8IG0
ロードマップがでてるな。
>>264,279 は v1.0 まで据え置きのようだ。

その他 v1.0 では
JSON をサポートするように
obj[key] .= "hoge" が利用できるように
etc.

v1.1では
SplitStr() : 割結果を配列オブジェクトで返す
RegExMatch() : 拡張してサブマッチをオブジェクトの配列で返すように
etc.

http://www.autohotkey.com/misc/AutoHotkey-v2.htm
v2.0 では
互換性を捨てて多くの改善を行う方針。
If の評価式は*必ず*括弧でくくるように
= 演算子は常に評価のみで、代入は := のみに
→ IfEqual, IfGreater, EnvSet, EnvAdd などは廃止、汎用の「式」を使え
その他少なくない数ののコマンドが廃止・非推奨となるので、関数版を使え
#ifWinActive, などは存続

なんだか AutoIt v3 に近くなる印象。
でも何だか中途半端な気もする。

598 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:05:23 ID:w6mdWw0S0
どなたかpythonからCOM経由でautohotkey.dllを操作なさっていませんか。
フォーラムを見るとCOMを経由せずに使っている人はいるみたいなのですが
COMの方を勉強として操作してみたいです
AutoHotKey.dll with python
http://www.autohotkey.com/forum/post-397787.html
COM経由で使っている方がいらっしゃったら、できれば簡単なguiを作成するソースを見せて下さいませんか。
お願いします。

599 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:21:17 ID:qIqsfbVy0
python 使いじゃないので JScriptで。

Dllのパスをカレントにしてから(もしくはフルパス指定で)COM登録しておく
> regsvr32.exe AutoHotkey.dll

[test.js]
var ahk = new ActiveXObject("AutoHotkey.Script");
ahk.AHKtextDll("Gui,Add,Text,,This is test script\nGui,Show,,Test\nExit\nGuiClose:\nExitApp");
while (ahk.ahkReady()) {WScript.Sleep(100);continue;}

600 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:50:55 ID:iduOQBml0
>>599
ありがとうございます。
ですが、うまく動きません

regsvr32.exe AutoHotkey.dllを実行し
(http://www.autohotkey.net/~tinku99/ahkdll/ のHotkeyIt提供Win32wのバイナリを使いました)
test.jsにvar ahk以下の3行を保存して
test.jsを実行したら、

エラー「文字が正しくありません。」
コード「800A03F6」
ソース「Microsoft JScript コンパイル エラー」と表示されました

test.jsからautohotkey.dllを呼び出すときの設定が違うということなのでしょうか

601 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:58:59 ID:iduOQBml0
書き忘れてました。
test.jsをutf-8 BOM で保存してます。
utf-8 non BOM だと「オートメーションサーバーはオブジェクトを……」というエラーメッセージが表示されます

602 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:26:20 ID:yDa054Vi0
>If の評価式は*必ず*括弧でくくるように
この間全部括弧なしに書き直すか迷ってた
マジで書きなおさなくてよかった・・・

>= 演算子は常に評価のみで、代入は := のみに
これは良いね
使ってていつもすごい違和感があった

603 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:37:32 ID:qIqsfbVy0
wscript/cscript エンコードの自動判別は無い。デフォルトはANSIで、"/u"付けると UTF-16LEでもいける。
wsf形式にすればxml文書なんでBOM付きUTF-8でも平気。

というかもうスレ違いだな。
http://msdn.microsoft.com/ja-jp/library/cc364501.aspx
お前ら、wsh使ってますか? Part7
http://hibari.2ch.net/test/read.cgi/win/1190548945/

604 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:51:51 ID:iduOQBml0
>>603
やはりautohotkey.dllを呼び出す前の問題ですね
調べてみます
ありがとうございました

605 :名無しさん@お腹いっぱい。:2010/11/30(火) 02:26:28 ID:KflSdiS50
v2では定数定義が欲しいなぁ。
プリプロセッサみたいな機構はあるんだし、出来なく無いだろうけど。
ロード時に文字列置換するだけでもいいんでどうにかならんかなぁ。

#Const WM_MOUSEMOVE 0x200
とか
#Alias Convert vk1Csc079
#Alias NonConvert vk1Dsc07B

606 :名無しさん@お腹いっぱい。:2010/11/30(火) 02:57:35 ID:3CxBAMPr0
はやく v2 でないかなぁ。変態言語仕様が少なくなるのは多少残念ではあるけど。

607 :名無しさん@お腹いっぱい。:2010/11/30(火) 16:32:57 ID:iK+6tuOn0
今のペースだと3年ぐらい先じゃね?

608 :名無しさん@お腹いっぱい。:2010/12/01(水) 18:34:55 ID:NDFf6KsK0
現状でもやはり
^!F4::send,
みたいなモディファイアキーを二つ含んだ
ショートカットキーは無理なのでしょうか?

609 :名無しさん@お腹いっぱい。:2010/12/01(水) 18:58:42 ID:0fD5HQmh0
煽る気は全くないが、
その程度ならすまんが解説よむなり自分で試すなりしてくれ。

610 :名無しさん@お腹いっぱい。:2010/12/01(水) 19:21:32 ID:NDFf6KsK0
すいません

611 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:44:21 ID:SmAml2Jb0
コマンドラインから検索ワードとして文字列を渡して検索結果をGUIのEditに文字列で表示するスクリプトつくっているのですが
既にスクリプトSearch.ahkが起動している場合、どうやって引数を渡せばいいんでしょうか?

612 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:49:04 ID:0fD5HQmh0
>>578,580と似てるけど、GUI持ってるなら #SingleInstance, Off にして
起動済みのGUI窓にControlSetText して自分は終了でいいんでないの。
場合によっては検索ボタンとかも押してやる。

613 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:50:42 ID:wAyzbnAk0
>>611
search.ahkの重複起動をOKにする

search.ahk起動時、search.ahkがタスクリストにいるか、process,existなどで確認する
 いたら、前から起動してるほうへ情報を転送し、自分は何も処理しないで終了する
 いなければ、普通に処理実行

614 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:54:45 ID:SmAml2Jb0
>>611,613
なるほど!
起動時にIfWinExistでそのスクリプトのGUIが存在したらControlSetTextして終了させる方法でやってみます
ありがとうございました

615 :名無しさん@お腹いっぱい。:2010/12/02(木) 00:35:04 ID:Rh2fuBic0
マウスカーソル(矢印ポインタ)を上下左右に動かすのって出来ますか?
文字カーソルはできるみたいなのですが、
矢印のポインタを簡単でも(飛び飛びでも)いいので
動かせられればと思っているのですができません。
ESC & I::MouseGetPos, imamousexpos, imamouseypos
MouseMove, %imamousexpos%, %imamouseypos% +30, 50
return
こんなんじゃやっぱだめですね



616 :名無しさん@お腹いっぱい。:2010/12/02(木) 00:53:14 ID:i/61lWiF0
そのコマンドは引数に 式 が使えるから % は要らない

というか、式では %〜% は使わない

617 :名無しさん@お腹いっぱい。:2010/12/02(木) 01:09:14 ID:UAjdpY5y0
ESC & I::
MouseGetPos, imamousexpos, imamouseypos
MouseMove, %imamousexpos%, % imamouseypos +30, 50
return

こうしたら動く
複数行の場合は「::」の後すぐ改行する
MouseMoveの引数には文字型が要求されてるので、「% 」で変数型にする
ちなみに第4引数にRを指定すれば色々いらなくなって1行で書ける

Esc & i::MouseMove, 0, 30, 50, R

618 :名無しさん@お腹いっぱい。:2010/12/02(木) 01:15:00 ID:UAjdpY5y0
と思ったら式でもいけるのか
さすがahkって感じの仕様だなw

>>612
これは良ヒントになりました
見えないGUIコントロール作ってそれで引数を扱えば楽そうだ

619 :名無しさん@お腹いっぱい。:2010/12/02(木) 03:14:23 ID:Rh2fuBic0
>>616
レスありがとうです。いまだに%の意味わからなかったりしますが
>>617
レスありがとうです。
ちゃんと動きました。そしてちゃんとマニュアルのmousemoveのところに
第4引数ちゃんと書いてありますね。。。見落としてました。
結局まだ"% imamouseypos +30"の意味わからないけど、どうして片方サイドは%いらないのか

620 :名無しさん@お腹いっぱい。:2010/12/02(木) 03:21:37 ID:i/61lWiF0
https://sites.google.com/site/autohotkeyjp/reference/Expression

621 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:30:14 ID:lMBihXac0
a=5
b=20
c=a*b
の3つの変数があったとして(cは文字列)
cの見た目通りの数式を変数zに代入することはできますか?

z:=a*b の代入を何らかの方法で実現して、
MsgBox, %z%
で100とさせたい
四則演算、括弧、乗数の数式に対応したいです

622 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:36:01 ID:lMBihXac0
やりたいこと書いた方がいいかな。
簡易のテキスト形式の電卓を作ろうと思ってます

メモ帳とかで下の用に書いてあったとき
cの値をMsgBoxに表示するようなもの
a=5
b=20
c=a*b

623 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:44:22 ID:HuepG7kf0
Eval のある言語使っちまえばいい

a=5
b=20
c=a*b

sc := ComObjCreate("ScriptControl")
sc.Language := "JScript"
script = var a = %a%;var b = %b%;
sc.ExecuteStatement("var a=" . a . ",b=" . b)
MsgBox, % sc.Eval(c)

624 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:55:37 ID:lMBihXac0
>>623
なんぞwww
全く分からんけど、どう見ても危険ではないのでとりあえず実行した
これがオブジェクトの力か…ありがとう

625 :名無しさん@お腹いっぱい。:2010/12/03(金) 08:59:54 ID:5Gc2iTLq0
AHK書いてる人はエディターって何使ってる?
最近入力ミス多いから強調表示や自動補完使いたくなってきた
あとラベル/関数の折りたたみとか・・

626 :名無しさん@お腹いっぱい。:2010/12/03(金) 10:36:02 ID:XpcRAbsy0
SciTE4AutoHotkeyを使いなさい

627 :名無しさん@お腹いっぱい。:2010/12/03(金) 15:03:38 ID:5OU/dmDK0
Vimでautohotkeyのsyntax使うとか

628 :名無しさん@お腹いっぱい。:2010/12/03(金) 16:34:27 ID:dp0e8QIV0
Extrasフォルダの中身を
秀丸とかemeditorとかの強調表示や入力補完に
自動で変換してくれるスクリプトが過去スレにあったはず

629 :名無しさん@お腹いっぱい。:2010/12/05(日) 05:57:42 ID:apuWTJGbP
現在カーソルが合っているファイル名を取得して
Everythingという検索ソフトに渡すスクリプトを書きたいのですが
いきなり詰まってしまったので質問させて下さい
カーソル位置のファイル名を取得するにはどのようにしたらよいでしょうか?

630 :名無しさん@お腹いっぱい。:2010/12/05(日) 07:51:29 ID:xmV0cvJD0
カーソルって何?
何にせよ、とりあえずコピーしてクリップボードを使うのをまず考える。
具体的でないので話はここまでしかできん。

631 :名無しさん@お腹いっぱい。:2010/12/05(日) 11:59:04 ID:vNjl5PbN0
>>625
xyzzyに↓のAutohotkey-modeを入れて
http://www1.bbiq.jp/rohinomiya/products/index2.html#xyzzy
自分の使いやすいように改造(LispよくわからんのでWiki等を参考になんちゃって改造)と
キーワード追加して使ってる。

それと↓を参考にカーソルがある単語のヘルプページ(autohotkey.chm)を開くようにしたりとか。
http://www7a.biglobe.ne.jp/~hat/xyzzy/reference.html
ちなみにF1で>>1の Autohotkey日本語ヘルプ(chmファイル)、
Ctrl+F1 で Autohotkey付属のヘルプ(英語) が開くようにしてる。

632 :629:2010/12/06(月) 06:44:42 ID:hnUEFu2IP
>>630
わかりにくくてすみません
マウスカーソルがあっている
あるいはエクスプローラ上でフォーカスが当たってるファイルという意味で書きました


上記と関係なくもうひとつ別な質問なのですが
zip版とインストーラ版のAutoHotkey_Lって動作が違うのでしょうか?
クリップボード文字列をRegExReplaceで置き換えるスクリプトを書いたのですが
zip版では思ったとおりの挙動になるのですが
インストーラ版だとクリップボードが複数行の場合におかしな挙動になります

633 :名無しさん@お腹いっぱい。:2010/12/06(月) 12:12:49 ID:fZb/YarP0
マイナーバグのアップデートならアナウンスすらしないでZIP版を差し替えることはよくある。

ってかね。アンタ毎回情報少なすぎ。
必要な情報を書かなきゃ意味ないよ

・不具合があると思われる双方のバージョンやファイルサイズ、
・不具合のあるスクリプト(の一部)

とかが何も書いてないじゃん。再現出来なきゃ何の意味もないわけ。

634 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:31:56 ID:EymQ4/t20
>>625にちょっと関連してるのですが
エディタの入力補完などの動作を
ahkのスクリプトを書く用に、ahkで実現してる人っていますか?
できたら晒して欲しいのですが。

635 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:43:20 ID:EymQ4/t20
あ、あともう1件お願いします
ahkの変数名に使えない文字は
!"#$%&'()=^~|\/.,<>?[]{}`:;+-*
だけだと思うのですが、これで合ってますか?

でこれを除外しようと下の様に正規表現を記述した場合にエラーになるのですが
どのように記述すれば除外できるでしょうか
MsgBox,% RegExMatch( "dummy", "^[^!""#\$%&'\(\)=^~|\\/\.,<>?[\]\{\}`:;\+-*]*$" )

636 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:55:25 ID:4Oq7NvUg0
Intelisense (Auto-Complete)
http://www.autohotkey.com/forum/topic65804.html

変数に @ と $ は使える。制御記号(0x01〜0x1f, 0x7f)やANSI以外の文字は使えない。
正規表現はもっと勉強しろ。デバッグを人任せにするなよ。
てか、使える文字の補集合でやった方がいいよ。

637 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:58:48 ID:4Oq7NvUg0
ちなみに俺はEmEditorで、登録したキーワードと単語( [a-z_]+ )が候補に挙がるようにしてる。
パラメタを忘れがちな SplitPath などはスニペットを利用。

638 :名無しさん@お腹いっぱい。:2010/12/07(火) 10:39:12 ID:zvvcqx8v0
Windowsキーと組み合わせて動く動作(Win + Tabや、Win + f、Win + bなど)を発行したいのですが、うまくいきません。
これは不可能なことなのでしょうか?
;;右Winキーに#{tab}や#b
>#h::
>#l::
Send,#{tab}
Return

RWin & vkE2::Send,#b

639 :名無しさん@お腹いっぱい。:2010/12/08(水) 01:38:47 ID:SmSQysPC0
ウチでは無問題

640 :名無しさん@お腹いっぱい。:2010/12/08(水) 12:09:22 ID:VcOlgpGs0
capslockのオン・オフを一つのキーで切り替えることはできるのでしょうか?
send,+{capslock}と書くと、capslockが有効なままになってしまい、オフにできません。
日本語配列のキーボードを使っています。
方法があればご教示ください。

641 :名無しさん@お腹いっぱい。:2010/12/08(水) 12:56:07 ID:SmSQysPC0
GetKeyState("CapsLock", "T")
SetCapsLockState

642 :名無しさん@お腹いっぱい。:2010/12/08(水) 18:35:25 ID:Rl2PxqqE0
>>641
ありがとうございます!

643 :名無しさん@お腹いっぱい。:2010/12/10(金) 07:06:35 ID:wMKLk7qO0
>>10って、#InstallKeybdHook 入れりゃすむんじゃね?
少なくともうちの環境だと今のところ問題ないみたい
(WindowsXP、SetPointあり、その他の>>10のツールは入っていない)

644 :名無しさん@お腹いっぱい。:2010/12/10(金) 13:24:36 ID:xUq+0fTHP
>>643
もう2年以上この問題で戦ってるが、それ入れても出てるよ。

最近気づいたことは、XPだと頻繁に出るが、
Win7-64bitで32bit版AHKだと、ほとんど出ない気がする

645 :名無しさん@お腹いっぱい。:2010/12/10(金) 18:09:40 ID:0KP6m/KB0
キー発行するツールをAHKに一本化したら全く発生しなくなった。

646 :名無しさん@お腹いっぱい。:2010/12/11(土) 04:39:28 ID:PnojymHCP
過去ログになんかあった気がしたけど見つけた

AutoHotkey スレッド part9
http://pc12.2ch.net/test/read.cgi/software/1253888736/477

477 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/11/29(日) 04:49:46 ID:JxrO7rna0
使い始めたばかりでテンプレにある症状と同じかはわかりませんが
Ctrlキーが押しっぱなしになる原因が自分の場合ですがわかりました

~RCtrl:: a ;文字は特に何でも良い
~Ctrl:: a

上のどちらかををキーマップをしてるときに
外部のアプリケーションからCtrlキーが送られるとCtrlキーが押しっぱなしになるみたいです
自分の場合では、マウ筋からウィドウを閉じるCtrl+Wキーを送ったり
CLCLからCtrl+Vでの貼り付けを行うと必ず再現します
RCtrlキーを押すと直ります


647 :643:2010/12/11(土) 06:18:39 ID:jpHQD/GQ0
>>644
そうなんだ…それは残念。XPと比べると、Vistaや7は負荷処理とかシステムまわりがしっかりしてるってわかるよね。

>>645
できればそれが理想なんだけど…。

>>646
それが>>10に反映されているのではないかと。


実は>>10より先にAHKの本家のフォーラムで下のスレを見つけて、
ttp://www.autohotkey.com/forum/topic202.html

#HotkeyModifierTimeout の説明を見てきたのだけど(見てきたのは英語版)、
http://sites.google.com/site/autohotkeyjp/reference/commands/-HotkeyModifierTimeout

実はキーボードフック使えばいいってことがわかって、
http://sites.google.com/site/autohotkeyjp/reference/commands/-InstallKeybdHook

#InstallKeybdHook を試したらすっぱり収まったので、>>10にも書いてないから報告しに来た次第。>>643

上の本家AHKのフォーラムには他の解決策も書いてあるので、参考にしてみてくだちい。

648 :名無しさん@お腹いっぱい。:2010/12/13(月) 01:56:49 ID:Es4TJgvU0
つまり、AHKが原因の場合はフック使えばOKってことか。
ただ、全部が全部AHKのせいって訳でもないでしょ。

こんなもんかなぁ。なんだか解説ページ丸写しのような感じになってしまった。
誰か修正してくれ。

Q:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A: AHKが原因の場合とそうでないときがある
 ○AHKが原因の場合
  AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
  一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
  しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
  物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
   例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
  これを回避するためには、以下の方法をとればよい:
   ・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
   ・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
   ・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
     #HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
  なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
  発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。

 ○AHK以外が原因の場合:
  環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
  ・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
  ・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている


649 :名無しさん@お腹いっぱい。:2010/12/13(月) 02:52:51 ID:ZbF5xdwX0
例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

これしばらく試してみたけど、全然押しっぱにならない

650 :名無しさん@お腹いっぱい。:2010/12/13(月) 03:01:21 ID:/fTKrGtDP
ttp://sites.google.com/site/autohotkeyjp/reference/commands/Send
なんのためのリファレンスか

651 :名無しさん@お腹いっぱい。:2010/12/13(月) 11:38:58 ID:7SYbC0/l0
いつのまに流行らせるページに代わるリファレンスがっ!

652 :名無しさん@お腹いっぱい。:2010/12/13(月) 20:29:46 ID:8AC0xyIUP
>>651
>>1

653 :名無しさん@お腹いっぱい。:2010/12/14(火) 00:41:01 ID:LF4MqoFR0
誘導してもらってきました。

ふつうお絵かきソフトって↓こういうのがあるんだけど
http://up3.viploader.net/ippan/src/vlippan174622.jpg
今使ってるソフトはそういうのがなくて
ショートカットキーで操作するようになっているんです。
こういうのはAUTOHOTKEYで作りたいので誘導してもらったんですが
何をどうすればいいですか?

とりあえずSmartGUI Creatorをインストールして
好きなボタンやテキストを張り付けれる所までは分かったのですが
この先はなにをすればいいですか???


654 :名無しさん@お腹いっぱい。:2010/12/14(火) 00:48:32 ID:mE3nMEcW0
ツールが吐きだしたスクリプトを編集して、ボタン工藤時のイベントを記述する。
具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、
キーを送るようにする。

GUIツールで処理内容を自動で作ってくれるようなツールは無く、
テキストエディタでスクリプトを編集することになる。

655 :名無しさん@お腹いっぱい。:2010/12/14(火) 01:20:57 ID:LF4MqoFR0
ありがとうございます。
たとえばノートパッドをお絵かきソフトだと仮定して
ノートパッドが起動中、作ったウィンドウが
ノートパッドの上にあって
消しゴムのボタンをクリックするとeキーを押したのと同じに
したいんですが
「ノートパッドが起動中、作ったウィンドウが
ノートパッドの上にあって」っていうのはどういうスクリプトになりますか?
以下を作ってみたんですがノートパッドにeキーが入力されませんでしたOTL

Run,C:\Windows\System32\notepad.exe

#IfWinActive ahk_class Notepad
Gui, Add, Button,gEkey x2 y1 w30 h30 +Center, 消しゴム
Gui, Add, Button,gZkey x32 y1 w30 h30 , 元に戻す
Gui, Add, Button,gSkey x2 y31 w30 h30 , 筆大
Gui, Add, Button,gDkey x32 y31 w30 h30 , 筆小
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h65 w113, New GUI Window

return

Ekey:
send, e
return

#IfWinActive

656 :名無しさん@お腹いっぱい。:2010/12/14(火) 01:43:55 ID:mE3nMEcW0
意図がよく分からんな。
> 具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、
をきちんと理解汁。

適当なサンプル作ったんで、リファレンスと格闘してくれ。寝る。
※ 全角空白はタブに置換すること

Run, NotePad.exe,,,pid
GroupAdd, NotePad, ahk_pid %pid%

Gui, +ToolWindow +AlwaysOnTop
Gui, Add, Button, gButton1, 消しゴム
Gui, Add, Picture, gButton2, %A_WinDir%\System32\main.cpl
Gui, Show,, ツールバー

WinWait, ahk_group NotePad
WinWaitClose
ExitApp

Button1:
 WinActivate, ahk_group NotePad
 Send, Button1 Action
 Return
Button2:
 WinActivate, ahk_group NotePad
 Send, Button2 Action
 Return
GuiClose:
 ExitApp

657 :名無しさん@お腹いっぱい。:2010/12/14(火) 02:02:28 ID:LF4MqoFR0
>>656
ふぉおおおおおありがとうございます!!!

658 :名無しさん@お腹いっぱい。:2010/12/14(火) 02:33:33 ID:CoT/vCy00
すみません
指定したフォルダ内のファイルやフォルダをすべて別フォルダにコピーさせたいです
autohotkeyjpのFileCopyDirとFileCopyのサンプルがやりたいことに近いのですが、
できれば、コピーできなかったフォルダ名だけじゃなくて、ファイル名も表示させるようにしたいです
どうすればいいでしょうか

659 :名無しさん@お腹いっぱい。:2010/12/14(火) 20:11:20 ID:hXUKQlMc0
ワイルドカードでコピーするんじゃなくてLoop回して1個ずつコピーして失敗したら変数に追記格納って感じだな

660 :名無しさん@お腹いっぱい。:2010/12/14(火) 21:15:43 ID:LF4MqoFR0
あるソフトをautohotkeyで操作して
そのソフトのsave画面を表示させて
その後手入力で任意のファイル名で保存後
その保存したファイル名と場所を
AutoHotkeyで使いたい場合どうすればいいでしょうか?

661 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:28:14 ID:GTQHc5deP
あるソフトをautohotkeyで操作して
そのソフトのsave画面を表示させて
その後手入力で任意のファイル名で保存後
その保存したファイル名と場所を
AutoHotkeyで使えるようにコーディングすればよい。


自分で手を動かさない丸投げ思考なやつに教えるものはない。

662 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:29:37 ID:A3pwe1vg0
なら黙ってればいいのに

663 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:35:41 ID:CoT/vCy00
>>660
>>661が言っているように、>>660の発言を逐一autohotkeyの処理に置き換えればいい
>>1のautohotkeyjpのすぺてのページに目を通せば、どれもクリアできることが分かるはず

664 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:36:34 ID:CoT/vCy00
>>659
地道にそうするのがよさそうですね。そうします。

665 :660:2010/12/14(火) 23:56:50 ID:LF4MqoFR0
最初考えたのは一旦あるソフト上で保存したファイルを
一番新しいファイルとして検索して見つけて
場所と名前を取得するというのだったけど
それじゃあ検索範囲が広すぎかなっと思ったんです。
すいませんでした。

666 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:44:13 ID:Kt8/zhW60
保存用のダイアログを作ってみたんですが
保存用ダイアログに任意の名前を入力後(実際にはまだ存在しないファイル)
その名前が取得できたかMsgBoxでfilenameを表示してみると
ファイルの名前じゃなくて「filename」と表示されてしまいました・・・
どうすれば任意の名前が取得できるのでしょうか?

FileSelectFile, filename , s 18, %A_Desktop%, 保存, *.psd
MsgBox, filename

667 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:47:07 ID:2PALRNNI0
ワロタ

668 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:53:55 ID:Kt8/zhW60
うわあああああ
ごめんなさい、じこかiketusimasita
変数を%で括るんですねOTL
お騒がせしてすいませんでしたOTLOTL

669 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:54:13 ID:yMWXaAcw0
MsgBox, %filename% でどうよ

670 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:57:42 ID:Kt8/zhW60
>>669
ありがとうございますOTL
ほんとうにすいませんすいませんOTL

671 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:58:20 ID:QiBc/8qO0
>>668
落ち着けw

250 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.9 2010/05/24 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)