2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

AutoHotkey スレッド part8

1 :名無しさん@お腹いっぱい。:2009/05/23(土) 00:23:38 ID:78PWRd9v0
■公式
http://www.autohotkey.com/

■解説
AutoHotkeyを流行らせるページ
http://lukewarm.s101.xrea.com/

■過去スレ
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/

■派生版
AutoHotkey_L
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

駄目文字微対策版
http://yak.myhome.cx/junks/#ahk.cp932

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


2 :名無しさん@お腹いっぱい。:2009/05/23(土) 00:24:43 ID:78PWRd9v0
■関連記事のあるサイト

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/
ACConsole
http://www.autohotkey.com/forum/topic7831.html
Tips N Tricks(公式フォーラムのトピック)
http://www.autohotkey.com/forum/topic8795.html&highlight=gui

3 :名無しさん@お腹いっぱい。:2009/05/23(土) 00:25:48 ID:78PWRd9v0
Q1:CapsLock(英数)キーの割り当てがうまくいかないよ
A1:日本語環境だとLock系キーの動作は不定。
  OS側がキーUp/Down情報が正しく返してこないので対処のしようがない。
  OSのローカライズ段階で発生してる問題なので、窓使いの憂鬱やChange Keyのように
  ドライバレベルで弄らないとダメだが英語圏では問題ないらしいので今後のサポートもあまり期待できない。
  対処としては前述のソフトで、CapsLock(英数)キーを別のキー(F13〜F24など)に割り当ててから
  AHKで利用すべし。

Q2:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ
A2:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]なため。
  対処としてはこれらの文字の"直後"に「`」を記述する(例:「線形`代数」)か、
  #EscapeCharでエスケープ文字を別のものに変えるべし。

Q3:Shift, Ctrl, Alt, Winキー以外のキーを修飾キーとしてキー割り当てしたいよ
  (例:無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたいよ)など
A3:Remap機能は記述が簡単になる反面、細かい指定がしにくい。
  流行らせるページのHotkeys, キーリスト, リファレンス→Send, #IfWinActive, GetKeyState()なども参照すること。
  なお、例の場合は以下のように記述する。
  sc07B & I::Send, {Blind}{Up}
  sc07B & K::Send, {Blind}{Down}
  sc07B & J::Send, {Blind}{Left}
  sc07B & L::Send, {Blind}{Right}

Q4:エディタの定義はどうするの?
A4:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり

Q5:GUI作るのめんどくせ〜〜
A5:公式( ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使え

Q6:ファイルパスに駄目文字があるんだが、、、
A6:駄目文字微対策版( ttp://yak.myhome.cx/junks/#ahk.cp932 )を使え。

4 :名無しさん@お腹いっぱい。:2009/05/23(土) 00:27:52 ID:78PWRd9v0
Q7:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A7:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」

Q8:AHKってマルチスレッドじゃないの?
  タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A8:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。

> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド   →→→→→→→→→→→……………………………………→→→→
>                           ★割込                ↑再開    
> 割り込みスレ                  →→→→…………→→→→→→END
>                                 ◆割込 ↑再開
> 更に割り込み                        →→→END

Q9:完璧なスクリプトなのに、なぜerrorが出るの?
A9:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。

Q10:作りたいんですけど?どうすればいいのでしょうか?ご教示頂きたいです。よろしくお願いします。
A10:簡単ですから(メモ帳等を使い)自分で書いてください。
  まず、自分で少しでも書いて晒してみよう。そうしたらレスが付くかも…
  イントロダクション、使用例、使用方法、Hotkeys、キーリストに目を通した方が話が早いぞ。

Q11:具体的に何が出来ますか?どこにありますか?
A11:マウスジェスチャ、ThumbRemap、TTBaseプラグインの数種、仮想デスクトップ等
   1:「AutoHotkeyを流行らせるページ」の「My Scripts」や「BBS」の投稿スレ
   2:公式のWiki「Compilations」

5 :名無しさん@お腹いっぱい。:2009/05/23(土) 00:59:07 ID:78PWRd9v0
Q12:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A12:意味としては違いは無いけど、コマンド形式(共に前者)の方が「式」形式(後者)のほうが少し速い。
  だけど、ループで大量(数万回転↑)に回さないと実感出来ないし、複数条件を使うなら「式」を使った方が速い。

Q13:ウィンドウ毎のキーマップは簡単だけど、キーを押して切り替えたりしたい。
Q13:派生版の「AutoHoekey_L( http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ )」を使うと便利。
  ; 変数KeyMapが1の時だけ、IKJLでカーソル移動
  #If (KeyMap=1)
   I::Up
   K::Down
   J::Left
   L::Right
  #If
  ※ 上記以外にもユーザ定義関数などを利用して様々条件でキー・マウス設定が出来る。

Q14:配列変数やハッシュ(仮想配列)は使ええないの?
A14:「式」を使うと配列やハッシュのように変数を参照できる
  以下のようにした場合、A%Index%を展開してできあがった文字列の示す変数内容が x に格納される。
   x := A%Index%
  代入しないで参照するする事も可能、
  WinGet, list, list
  Loop, %list%
  {
   WinGetClass, class, % "ahk_id " list%A_Index%
    :
  }

6 :名無しさん@お腹いっぱい。:2009/05/23(土) 01:22:42 ID:i45iLGOr0
新スレおめ

               ∧_∧
オツカレチャ━━━━━━(´∀` )━━━━━━ソ!!!!!
              /     ヽ
             / 人   \\   彡
           ⊂´_/  )   ヽ__`⊃
                / 人 (
               (_ノ (_)



7 :名無しさん@お腹いっぱい。:2009/05/23(土) 02:26:26 ID:EdKRGdzN0
乙です!

> A12:意味としては違いは無いけど、コマンド形式(共に前者)の方が「式」形式(後者)のほうが少し速い。
どっちが速いの?

8 :名無しさん@お腹いっぱい。:2009/05/23(土) 02:29:34 ID:j0LLn1RV0
>>7
後をきちんと読めばわかるだろう

9 :名無しさん@お腹いっぱい。:2009/05/23(土) 06:24:57 ID:Pd5cDY560
>>3の↓は
>Q:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ
別ファイルに書いといて直接変数に読み込む手もあるね

(ahkスクリプト)
------------------
SetWorkingDir, %A_ScriptDir%
FileReadLine, OutputVar, test.txt,1
FileReadLine, HelloWorld, test.txt,2
MsgBox, %OutputVar%
MsgBox, %HelloWorld%
------------------

test.txt
------------------
〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔
ハロ〜ワールド


10 :名無しさん@お腹いっぱい。:2009/05/23(土) 08:15:38 ID:0lga1Rqg0
前スレ >>977
Gui, Add, Hotkey はWindowsキーを修飾キーとして利用出来ず、
いずれはそれっぽいものを個人的に作ろうと思ってたので
前スレ >>978 氏のリンクを参考に書いてみた。


#SingleInstance, force
#Installkeybdhook
gosub, SetHotkeys
InputBox, OutputVar, , キーを押してください, , 180, 120
return

SetHotkeys:
Hotkey, IfWinActive, %A_ScriptName% ahk_class #32770
;リンク先のサンプルは vk?? なので入力欄ではどのキーを押したのか判別し難いので
;A-Z,0-9,F1-F12 で表示されるようにしてみただけ。他(記号やテンキー等)が必要なら要追加
keys=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
,0,1,2,3,4,5,6,7,8,9,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12
loop, parse, keys, `,
{
Hotkey, *~%A_loopField%, AnyKey_down
Hotkey, *~%A_loopField% up, AnyKey_up
}
return


11 :名無しさん@お腹いっぱい。:2009/05/23(土) 08:16:18 ID:0lga1Rqg0
;<続き>

AnyKey_down:
B_ThisHotkey:=RegExReplace(A_ThisHotkey, "\*~(.*)", "$1")
if GetKeyState("LWin", "P") || GetKeyState("RWin", "P")
B_ThisHotkey=`#%B_ThisHotkey%
if GetKeyState("Alt", "P")
B_ThisHotkey=`!%B_ThisHotkey%
if GetKeyState("Ctrl", "P")
B_ThisHotkey=`^%B_ThisHotkey%
if GetKeyState("Shift", "P")
B_ThisHotkey=`+%B_ThisHotkey%
return

AnyKey_up:
B_KeyDelay=%A_KeyDelay%
SetKeyDelay, -1
Send, {home}
Send, +{end}
Sendraw, %B_ThisHotkey%
SetKeyDelay, %B_KeyDelay%
return


12 :名無しさん@お腹いっぱい。:2009/05/23(土) 13:32:15 ID:gAwG1DqL0
初歩的な事ですみませんが
SplashTextを中央以外に表示させる事ってできますか?
スクリーンの中央に表示するって書いてあるので、中央以外は無理なのかな?

13 :名無しさん@お腹いっぱい。:2009/05/23(土) 13:39:45 ID:aA4IMCHP0
SplashImageを使えばいいんでないの?

14 :名無しさん@お腹いっぱい。:2009/05/23(土) 14:55:33 ID:gAwG1DqL0
>>13
イメージを表示させる事ができなかったけど、やりたい事はできました。ありがとうございます
インストールフォルダに画像「splash.JPG」を置いて
SplashImage , splash.JPG, B X100 Y100, 123
sleep, 1000
SplashImage, Off
で画像が出ませんでした。文字は出せたのでいいといえばいいのですが、なぜ画像が出ないのでしょうか?

15 :名無しさん@お腹いっぱい。:2009/05/23(土) 15:01:35 ID:EUJqRyaQ0
977です。最終的にはこんなスクリプトになりました。

#SingleInstance force

currentlyRecording := 0
send_mode = Event
holddown := 10
between := 10

; register all 255 virtual keys
SetFormat,Integer,Hex
Loop, 255
{
key := substr("0" . substr(A_Index + 0, 3), -2) ; convert to hex, remove "0x", pad to two digits
Hotkey, *~vk%key%, AnyKey_down
Hotkey, *~vk%key% up, AnyKey_up
}
SetFormat,Integer,Decimal

AnyKey_down:
if (currentlyRecording)
playback := playback . "{" . substr(A_ThisHotkey,3). " Down}"
return

AnyKey_up:
if (currentlyRecording)
playback := playback . "{" . substr(A_ThisHotkey,3). "}"
return

16 :名無しさん@お腹いっぱい。:2009/05/23(土) 15:02:26 ID:EUJqRyaQ0
続き

ToolTipOff:
SetTimer,ToolTipOff,Off
ToolTip
return

~LWin::
tapcount=1
loop,
{
KeyWait,LWin
KeyWait,LWin,t0.15 d
if ErrorLevel=0
tapcount+=1
else
break
}
;---------------------ここから希望動作を入れる
if tapcount=1
{
SetKeyDelay, between, holddown
Send,%playback%
return
}

17 :名無しさん@お腹いっぱい。:2009/05/23(土) 15:04:22 ID:aA4IMCHP0
>>14
ahkがあるフォルダが作業ディレクトリになるから。
msgbox, %A_WorkingDir%

18 :名無しさん@お腹いっぱい。:2009/05/23(土) 15:04:23 ID:EUJqRyaQ0
続き

else if tapcount=2
{
if (currentlyRecording)
{
ToolTip,Stopped recording.
currentlyRecording := 0
playback := RegExReplace(playback, "(\{[^}]+ Down\})+$", "") ; remove the "^F5" from the end
} else
{
ToolTip,Started recording.
currentlyRecording := 1
playback := ""
}
SetTimer,ToolTipOff,1000
return
}
最初のとは結構変わってるけど、やりたいことができました!ありがとう!
ただ、たまに暴発するのがたまにキズw

19 :名無しさん@お腹いっぱい。:2009/05/23(土) 15:36:25 ID:gAwG1DqL0
>>17
ahkも同じインストールしたフォルダにあります。
C:\Program Files\AutoHotkey\splash.JPGでもダメでした

20 :名無しさん@お腹いっぱい。:2009/05/23(土) 16:15:40 ID:78PWRd9v0
スクリプトをどこに置いて、どうやって実行してるか、でカレントフォルダは変わるよ

21 :名無しさん@お腹いっぱい。:2009/05/23(土) 17:37:09 ID:CXZr65JJ0
新スレ立ってたのか

22 :名無しさん@お腹いっぱい。:2009/05/23(土) 17:51:29 ID:gAwG1DqL0
>>17>>20
ごめんなさい、画像ファイルの名前ミスでした・・・
初歩の初歩のミスでレス重ねてすみませんでした


23 :名無しさん@お腹いっぱい。:2009/05/23(土) 20:09:00 ID:aA4IMCHP0
>>22
ぇぃ! 
 ∧,,∧
(´・ω・)  ∧_∧
⊂( ⊆ ̄つ☆))Д`)
  \ /⊂ ⊂~ノ
  と丿⊂ と_ノ

24 :名無しさん@お腹いっぱい。:2009/05/24(日) 20:30:16 ID:UimWf5FR0
SQLiteModule.ahkの1.1の関数のSQLite_GetSelect(db, sql, text, ByRef row, ByRef col)で
データベースの列の最後の値がNULLだと次のレコードを変数に格納してくれない気がする

よく検証してないから分からないけど最後の列の値になにか入れたら次の行は一応格納してくれた

25 :24:2009/05/24(日) 20:40:28 ID:UimWf5FR0
いや、やっぱり8列目までしか対応してないだけっぽいかも
SQLはじめてやるもんで朝から苦戦しっぱなし
基本情報取るときに少しやっただけだが辛い

26 :名無しさん@お腹いっぱい。:2009/05/24(日) 20:54:05 ID:2/JStSCV0
autohotkey で sqlite を使う用途がいまいち思い浮かばない
何に使うんだろう


27 :名無しさん@お腹いっぱい。:2009/05/24(日) 23:30:10 ID:ERJmg4L+0
同一キー連打でキーマップ切り替え。AutoHotkey_L専用。
コンビネーションキーよりいい感じ。

#If
*vk1Dsc07B::
  KeyMap:=(A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300)+1
  KeyWait, vk1Dsc07B
  KeyMap:=0
  return

#If (KeyMap==1)
  h::Left
  j::Down
  k::Up
  l::Right
#If (KeyMap==2)
  h::Home
  j::PgDn
  k::PgUp
  l::End




28 :名無しさん@お腹いっぱい。:2009/05/25(月) 05:07:06 ID:+20GCM/K0
Guiの手始めにじゃんけんゲーム作ってみたところ
勝敗引分けの統計がほぼ平均的にバラけてて
ランダムといってもあまり偏ったりしないもんなんですかね

29 :名無しさん@お腹いっぱい。:2009/05/25(月) 19:06:52 ID:K51ru5IJ0
>>26
使ったことないけど配列とかリストの代わりになるのかな?

30 :名無しさん@お腹いっぱい。:2009/05/25(月) 19:49:53 ID:ayEEflNj0
なるよ。普通の言語の配列みたな気軽さを求めると痛い目に遭うと思うけど。

31 :名無しさん@お腹いっぱい。:2009/05/25(月) 20:54:05 ID:D8xwJFNr0
前スレ1000の某所の裏ってどこ?

1000 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/05/24(日) 14:29:38 ID:h0rZeR9o0
1000ゲト?

あるえ?>>999 なんでドキュメントの方のリンク載せちゃったんだろ?
Class library
ttp://www.autohotkey.net/~animeaime/ClassLibrary/
こっちっすね。

Class library (OOP) - Help Thread:
ttp://www.autohotkey.com/forum/topic42244.html
Class library (OOP) - Wish list / Bug reports thread:
ttp://www.autohotkey.com/forum/topic40293.html

; >>994,999,1000のネタ元は某所の裏からっす。

32 :名無しさん@お腹いっぱい。:2009/05/25(月) 21:36:07 ID:K51ru5IJ0
>>30
そうかそういう手があったのか
非表示のリストビューで無理矢理リスト作ってたわ俺w

33 :名無しさん@お腹いっぱい。:2009/05/25(月) 21:50:53 ID:3ssrsEXY0
>>24
作者だけど忙しい+結構立ってるので理解が・・・
自分用にコメントつけておけばよかった

>>26
自分用TV表が欲しかった
お気に入り機能でデータ保存には何が良いだろう→SQLが一番
と考えて

34 :名無しさん@お腹いっぱい。:2009/05/25(月) 22:37:00 ID:ayEEflNj0
ぬるぽかと
ttp://www.3rd-impact.net/Document/SQLite/Translation/Current/capi3ref.html#sqlite3_column_text

35 :名無しさん@お腹いっぱい。:2009/05/25(月) 23:47:59 ID:3ssrsEXY0
INTEGER、FLOAT、TEXTしか判断してないっぽい
514〜521を
if($result == 3)
{
if(!SQLite_Column_Text($query, $nowCount, $get))
{
$errMsg = SQLite_GetSelect->%$errMsg%
return False
}
}
else
{
$get = ""
}
で対処可能なはず
blob型ってのがよく分かってないのでとりあえず空文字で

36 :名無しさん@お腹いっぱい。:2009/05/26(火) 00:05:37 ID:3ssrsEXY0
>>35
これミスでした

ttp://lukewarm.s101.xrea.com/up/file/109.zip
これで大丈夫なはず

37 :名無しさん@お腹いっぱい。:2009/05/26(火) 01:24:00 ID:+TlrQY3d0
RButton::return
で右クリックを殺してるはずなのに、ゲーム中で右クリックすると無効になってません
どうしてでしょう?
ゲームのプロテクトとかそんなんですかね?

38 :名無しさん@お腹いっぱい。:2009/05/26(火) 02:49:14 ID:Y7ZtP0Kd0
そんなところだろうね。たぶんDirectInput

39 :名無しさん@お腹いっぱい。:2009/05/26(火) 10:46:40 ID:WTUueAPd0
>>38
DirectInputはキー切ったり、送ったりはできないのですか?

40 :名無しさん@お腹いっぱい。:2009/05/26(火) 11:33:39 ID:24/J68kf0
公式のFAQにあるけど、DirectInputでも一部は動くこともある
・SendPlayを使う
・SetKeyDelayを増やしてみる
  SetKeyDelay, 0, 50
  SetKeyDelay, 0, 50, Play
・ControlSendを使う

GameguardやNPro使ってるんだったら、ドライバレスでマクロができるゲーマー用のマウス買った方が楽かと

41 :名無しさん@お腹いっぱい。:2009/05/26(火) 17:13:05 ID:QN5A7Hfw0
If A > %A_Index%
 Count ++

Hoge%Count% = hogehoge

みたいに配列的に変数を使ってその数が不定の場合、これらのメモリを一括で開放する方法はなにかありますでしょうか。

Loop,%Count%
{
Hoge%A_Index%=
}

Loopで回せばいいのはわかりますが、Countの値を保持してなければならずあまりスマートな感じがしないので、「配列のメモリを解放」みたいなコマンドがあればと思って。

42 :24:2009/05/26(火) 18:39:35 ID:qcaMCxpC0
>>36
うお、よくわかんないけど直りました
ありがとうございます

>>26
ちょっとした記憶用ソフト作りたくて頑張ってました
すでにCSVで問題、答え、苦手度、最後に解いた日、間違ったフラグ(次正解すれば解除)とか記録してて
そのCSVを読み込んで出題するAHKはほとんど完成系で作ってあるんだけど

いろんな条件で抽出するときやっぱりCSVよりSQLのWHERE文があればと思ったのがきっかけ

43 :名無しさん@お腹いっぱい。:2009/05/26(火) 18:48:49 ID:24/J68kf0
>>41
内部的には配列ではなくそれぞれ独立した変数として扱われてるのだから一括解放は無理なんじゃないかな
どうしても一括解放にこだわるなら、以下のようなライブラリを使ってみるとか
ttp://www.autohotkey.com/forum/topic36600.html
ttp://www.autohotkey.com/forum/topic35041.html
ttp://www.autohotkey.com/forum/topic14881.html

それから余計なお世話かもしれないけど、hoge=ではメモリが解放されない場合がある
この辺はVarSetCapacity()のヘルプに書いてあるけど、一度64にセットしてから0で解放する必要がある

44 :名無しさん@お腹いっぱい。:2009/05/27(水) 06:01:02 ID:49MLE6WY0
前スレでVista+Word2007でダイアモンドカーソルを実現しようと思った者です。
返信すごく遅くなって申し訳ありません。
今日試してみたらなぜか普通に動くようになってました。
1日潰してあんなに動かそうとしても全然動かなかったのに…。

前スレでレス下さった皆様ありがとうございました。
お騒がせしました。


45 :名無しさん@お腹いっぱい。:2009/05/27(水) 22:13:25 ID:ghabN5mP0
先輩方 初めてのAutoHokeyで書いてみたのですが
おかしなところを突っ込んで頂けると嬉しいです。


#Persistent
SetTimer, Note, 3000
Note:
Process, Exist, notepad.exe
NewPID = %ErrorLevel%
if NewPID = 0
{
Run, notepad.exe, c:\, /UseErrorLevel
}


3秒ごとにメモ帳が動いてるか確認
動いてなければ メモ帳を起動する
notepad.exeなんか存在しませんのときにエラーウインドウが立ち上がらないように処理
作業ディレクトリがc:\は良く意味がわかっていないorz
メモ帳が動いてた時の処理はループするだけだから問題ないのかな(´・ω・`)


46 :名無しさん@お腹いっぱい。:2009/05/27(水) 23:03:39 ID:2RG+Zvrk0
>>45
SetTimerの後と、最後の行にreturn入れてる?

47 :名無しさん@お腹いっぱい。:2009/05/27(水) 23:19:55 ID:HF3buD8W0
>>45
うごくから、いいんじゃないのかな。
>>46のツッコミはもっともだが、起動時に1回処理を噛ますと言う意味では処理としては良いと思う。
(SetTimerの後にreturnをわざと置いていないのだとしたら)
第2引数は作業フォルダ。ショートカットを右クリックし見たてプロパティ画面のと同じ。
メモ帳なら空でもいい。

プロセスが無くなるまで待つ方法もある。
Process, WaitClose, %pid%

48 :名無しさん@お腹いっぱい。:2009/05/28(木) 00:06:27 ID:wZfk3OyC0
>>46
>>47

ありがとうございます。

settimerの後はreturn入れると挙動がおかしかったので入れてません。
最後の行に入れてないのは入れたら終わってしまうと思っていれてないです^^;

作業フォルダのご説明大変わかりやすいです^^
この場合は特になくても大丈夫そうですね。
作業フォルダがいつか消滅したときのことを考えてエラーを吐かれると嫌だったので
絶対存在し続けるc:\にしてみました。

returnを入れてもう一度ためしてみます。

49 :名無しさん@お腹いっぱい。:2009/05/28(木) 00:10:25 ID:wZfk3OyC0
#Persistent
SetTimer, Note, 3000
return
Note:
Process, Exist, notepad.exe
NewPID = %ErrorLevel%
if NewPID = 0
{
Run, notepad.exe, c:\, /UseErrorLevel
}
return


言われた通りにretrun二つ突っ込んで見ましたがちゃんと動きますね
return入れてないと処理がきちんと修了しないからだんだん重くなっていったりしますかね?
違いが全くわかりません^^;

50 :名無しさん@お腹いっぱい。:2009/05/28(木) 00:14:22 ID:wZfk3OyC0
Return
GosubやHotkeyのサブルーチン処理から戻る

Remarks
GoSubでジャンプしていないときにReturnを実行すると、
Exitを実行したときと同様にスレッドを終了する。



サブルーチン処理をしていない場合はなくてもよいのかなと思い込んでみる。。

51 :名無しさん@お腹いっぱい。:2009/05/28(木) 00:18:11 ID:k3jZrIoJ0
これだけでいい気がする

Loop
RunWait, NotePad.exe

52 :名無しさん@お腹いっぱい。:2009/05/28(木) 01:23:49 ID:g2Gpk75K0
SetTimerって待機スレッド(プロセス?)がどんどん溜まって
重くなったりしないかと不安であまり使ってない…。実際のところどうなんでしょ?

53 :名無しさん@お腹いっぱい。:2009/05/28(木) 05:19:31 ID:UHCBZ4+L0
Autohotkeyの中で疑似スレッド的に動いてるだけで、OSから見たら常に単一プロセス単一スレッドだから
CPUやメモリリソースへの負荷はあまり考える必要が無いと思うけど。

疑似スレッドの制御は本物のプロセス/スレッドのように複雑じゃないので、
実質上の負荷は、実際にタイマースレッドで動作するAHKコードの量で判断してもかまわないと思う。

それにスクリプト実行中はSetBatchLinesで指定した間隔で10msのスリープも入って、
OS全体の負荷を高めないような作りにもなってるし。

54 :名無しさん@お腹いっぱい。:2009/05/28(木) 16:22:04 ID:ar6yU5aO0
AutoHotKey、さっきはじめて知りました。
スクリプトとか全然わかりませんし、わかるのはBASICぐらいですw
でもなんとかマニュアルを参考にして10分ぐらいいろいろやってるのですが。。。

たとえば、Winキー+y で、iTunesがアクティブなときだけ最小化したいんですが、
スクリプトは、これでOKでしょうか?
一応動いているのですが、なにか問題があるでしょうか?

>>>>>>>>>>>>( iTunesがアクティブなら最小化 )<<<<<<<<<<<<<

#y::
IfWinActive iTunes
WinMinimize,iTunes
IfWinActive
return

レベルが低い質問でごめんなさい...orz

そもそも、なにがやりたくてAutoHotKeyを知ったのかといいますと、
任意のホットキーを押したとき、
(1)任意のアプリが起動していなければ起動する。
(2)任意のアプリが起動していて、かつ、最小化状態またはバックグラウンド状態なら、アクティブに(最前面に持ってくる)。
(3)任意のアプリが起動していて、かつ、最前面(アクティブ)ならば、最小化する。

こういうのをやりたかったんです。

55 :名無しさん@お腹いっぱい。:2009/05/28(木) 16:24:36 ID:ar6yU5aO0
そもそもなぜそんなことをやりたいのかといいますと、、、

最近、プログラマブルキーボードを買ったのですが、
1つのキーだけで、任意のアプリのアクティブ化と最小化をトグルしたい。
あるキーを押したら指定したアプリのウィンドウが最前面に来て、
そのアプリが最前面にあるときに、そのキーをもう一度押したら
そのアプリのウィンドウが最小化する、みたいな感じです。

でもそんな簡単なことすらプログラマブルキーボード付属のユーティリティーではできず。。。
で、いろいろ考えて、その任意のアプリにWindows標準のホットキーを割り当て、
プログラマブルキーボード側の任意のキーにそのホットキーをアサインすれば、
上記の(1)と(2)だけは実現できるんですが、(3)がどうしても実現できないんですよね。

んで、国内外のフリーウェアをかなりいろいろ試したんですが、(1)(2)と同時に(3)ができるものが
数時間探しても見つけられず、また、こういうのって、
検索ワードがホットキーとか最小化とか一般すぎる言葉になっちゃって
自分の求めているソフトを検索エンジンで探しにくいんですよね。。。。

てなわけで、長くなってしまいましたが、AutoHotKeyにこれからハマってみる予定です
GUIまで作れちゃったりするみたいで、恐ろしいほど高性能でびっくりですよ、ほんと。

56 :名無しさん@お腹いっぱい。:2009/05/28(木) 16:25:18 ID:ar6yU5aO0
コメントアウトは
>>>>>>>>>>>>
で大丈夫でしょうか?

57 :名無しさん@お腹いっぱい。:2009/05/28(木) 16:32:10 ID:Rj+x9ILK0
まだ初心者の俺が、試しもせずにしゃしゃり出てみる

#y::
IfWinActive, iTunes
{
WinMinimize,iTunes
}else{
Process,Exist,notepad.exe
If ErrorLevel<>0
WinActivate,ahk_pid %ErrorLevel%
else
Run,notepad.exe
}
return

58 :名無しさん@お腹いっぱい。:2009/05/28(木) 18:06:51 ID:ar6yU5aO0
>>57
早速、ありがとうございます!
notepad.exeになってしまってますが、
iTunes.exeに変えると動きますね!

59 :名無しさん@お腹いっぱい。:2009/05/28(木) 18:08:03 ID:ar6yU5aO0
>>55,56を書き込んだあとに、自分で考えたものは以下でした。
以下でも一応ちゃんと動くみたいです。
でも、>>57さんのように、ちゃんとahk_pid %ErrorLevel%みたいに
指定したほうが確実ですよね?

#y::
IfWinActive,iTunes
{
WinMinimize,iTunes
}
else
{
WinActivate,iTunes
Process,Exist,iTunes.exe
If ErrorLevel=0
{
Run,iTunes.exe
}

}

;;;IfWinNotExist iTunes
;;; Run,iTunes.exe

return

ただ、iTunesって名前が付いたフォルダとかアプリが開いていると
そっちのほうが最小化しちゃったりしますけど、それも本当は、キッチリPIDを調べてやれば、誤動作もなくなるんですよね?
数時間いじったらかなりわかってきました!ありがとうございます!!
本当に面白くて可能性を感じるソフトですよね!

60 :名無しさん@お腹いっぱい。:2009/05/28(木) 18:08:51 ID:ar6yU5aO0
ありゃりゃ、
;;;IfWinNotExist iTunes
;;; Run,iTunes.exe
の部分はコメントアウトでした..orz

61 :名無しさん@お腹いっぱい。:2009/05/28(木) 19:31:15 ID:Rj+x9ILK0
ちなみに>>57のやつはAutoHotkeyを流行らせるページに載ってたヤツのコピペです。
暇なときにでものんびり読んでみるといいよ。

62 :名無しさん@お腹いっぱい。:2009/05/28(木) 21:32:48 ID:jz4l290M0
>>36
これはいいね。使わせてもらうよ
ところでライセンスは何?

63 :名無しさん@お腹いっぱい。:2009/05/28(木) 22:02:37 ID:k3jZrIoJ0
マウス周囲のを指定した大きさの正方形でデスクトップまで穴をあける。再度呼び出すと元に戻す。

~RCtrl::ClipWindow()
ClipWindow(size=200, ignoreClassPattern="Shell_TrayWnd|BaseBar") {
 static clipped
 If (!clipped) {
  DetectHiddenWindows, Off
  CoordMode, Mouse, Screen
  MouseGetPos, mx, my
  WinGet, list, List
  Loop, % (list-1) {
   IfWinNotExist, % "ahk_id " list%A_Index%
    continue
   WinGetClass, class
   If ignoreClassPattern && RegExMatch(class, ignoreClassPattern)
    continue
   WinGetPos, x, y, w, h
   mx1:=mx-x-size//2, my1:=my-y-size//2, mx2:=mx-x+size//2, my2:=my-y+size//2
   If (mx1>w || my1>h || mx2<0 || my2<0)
    continue
   WinSet, Region, 0-0 %w%-0 %w%-%h% 0-%h% %mx1%-%my1% %mx2%-%my1% %mx2%-%my2% %mx1%-%my2% %mx1%-%my1% 0-%h%
   clipped := list%A_Index% . (clipped ? "|" : "") . clipped
  }
 } else {
  DetectHiddenWindows, On
  Loop, PARSE, clipped, |
   WinSet, Region,, ahk_id %A_LoopField%
  clipped=
 }
}

64 :名無しさん@お腹いっぱい。:2009/05/28(木) 22:33:50 ID:qyNknqLm0
>>63
これいいね
ちょっと感動した
使わせてもらいます。

65 :名無しさん@お腹いっぱい。:2009/05/29(金) 00:36:46 ID:DA5drrjA0
Vistaじゃ動かないな

66 :名無しさん@お腹いっぱい。:2009/05/29(金) 00:37:02 ID:u1yo0xzx0
>>63
面白いな
穴あいてるときにSetTimerでマウス追従するとさらに便利
堪能するためにわざわざ壁紙張ってしまったw

67 :名無しさん@お腹いっぱい。:2009/05/29(金) 00:40:11 ID:0CBSOWcu0
もちろんエロい壁紙だよな

68 :名無しさん@お腹いっぱい。:2009/05/29(金) 01:12:50 ID:ZNykQa940
s = %A_thishotkey%

s1 = %s%%

msgbox,%s1%
return

s の変数の値の末尾に % を付け加えて
それを s1 に保存したいのですが
(A_thishotkey が a だとすれば "a%")
こうかくとエラーになります。
どうすればこれを実現できますか。

69 :名無しさん@お腹いっぱい。:2009/05/29(金) 01:19:50 ID:keMVWhB40
敷居が高いのもあるからどんどん流行ってくれ

70 :名無しさん@お腹いっぱい。:2009/05/29(金) 01:25:55 ID:5w+b34I70
>>68
s1 = %s%`%
最後の % をエスケープする(デフォならShift + @)

71 :名無しさん@お腹いっぱい。:2009/05/29(金) 01:27:23 ID:y2qE0/Pv0
>>68
エスケープ
s1 = %s%`%
MsgBox, %s1%

式を使う方法もあり
s2 := s1 . "%"
MsgBox, % s2

72 :名無しさん@お腹いっぱい。:2009/05/29(金) 01:29:55 ID:ZNykQa940
>>70-71
ありがとうございます!


73 :名無しさん@お腹いっぱい。:2009/05/29(金) 08:36:17 ID:HnnwY0C40
少しお聞きします。

無変換とシフトと任意のキーというホットキーの定義の仕方はありませんでしょうか?

vk1Dsc07B & +g::
 SplashTextOn,,, Test...
 Sleep, 600
 SplashTextOff
return

などとやっても、無変換+シフト+Gを拾ってくれないのです・・・
+vk1Dsc07B & gだと読み込み時にエラーがでるし…。

74 :名無しさん@お腹いっぱい。:2009/05/29(金) 08:42:33 ID:vciG3EmH0
>>73
コンビネーションキー
「&」を使うことで、2つの任意のキー(ジョイスティック以外)の組み合わせをホットキーに指定することが可能。
3つ以上のキーを指定したり、+^!#で修飾キーを追加したりは出来ない。

If GetKeyState("Shift","P")

75 :名無しさん@お腹いっぱい。:2009/05/29(金) 08:54:53 ID:vciG3EmH0
最初に
vk1Dsc07B & g::
If !GetKeyState("Shift","P")
return
を追加すれば大丈夫か

76 :1/2:2009/05/29(金) 13:22:46 ID:u1yo0xzx0
>>63 のマウス追従Ver 作ってみた。 タイマ未使用、Shiftで固定、ESCで終了

#1:: ClipWindow_MouseFollows()
ClipWindow_MouseFollows(size=200, Pause="Shift",endKey="ESC", ignoreClassPattern="Shell_TrayWnd|BaseBar")  {
  static list
  IfNotEqual,list,, return ;semaphore
  DetectHiddenWindows, Off
  CoordMode, Mouse, Screen
  WinGet, list, List
  Loop, %list%
    l := list%A_Index% . (l ? "|" : "|0x0") . l
  While !GetKeyState(endKey) && Instr(l,WinActive("A"))  {
    if GetKeyState(pause) {
      KeyWait,%pause%
      pmode := (pmode!=1 ? 1 : 0)
    }
    IfEqual,pmode,1,  continue
    MouseGetPos, mx, my
    if ((mxs-10 < mx) && (mx < mxs+10) && (mys-10 < my) && (my < mys+10))
      continue
    mxs:=mx, mys=my


77 :2/2:2009/05/29(金) 13:24:56 ID:u1yo0xzx0
    Loop, % (list-1) {
      IfWinNotExist, % "ahk_id " list%A_Index%
        continue
      WinGetClass, class
      If ignoreClassPattern && RegExMatch(class, ignoreClassPattern)
        continue
      WinGetPos, x, y, w, h
      mx1:=mx-x-size//2, my1:=my-y-size//2, mx2:=mx-x+size//2, my2:=my-y+size//2
      If (mx1>w || my1>h || mx2<0 || my2<0)
        continue
      WinSet, Region, 0-0 %w%-0 %w%-%h% 0-%h% %mx1%-%my1% %mx2%-%my1% %mx2%-%my2% %mx1%-%my2% %mx1%-%my1% 0-%h%
      if !Instr(clipped,list%A_Index%)
        clipped := list%A_Index% . (clipped ? "|" : "") . clipped
    }
    Sleep,50
  }
  DetectHiddenWindows, On
  Loop, PARSE, clipped, |
   WinSet, Region,, ahk_id %A_LoopField%
  list=
}

>>67
プリインスコのメーカーロゴ、エロいの持ってねぇ(´・ω・`)

78 :名無しさん@お腹いっぱい。:2009/05/29(金) 13:36:25 ID:tLIgPVbp0
最小化したときにタスクトレイにアイコン化するアプリを
タスクトレイに入った状態からアクティブ化するのは無理でしょうか?
その手のアプリ、みんなWinActiveが効きません...orz

79 :名無しさん@お腹いっぱい。:2009/05/29(金) 15:06:40 ID:+GBy9qZg0
DetectHiddenWindows, On

80 :名無しさん@お腹いっぱい。:2009/05/29(金) 15:41:21 ID:tLIgPVbp0
>>79
そんなコマンドがあったとは!
即レス本当にありがとうございます!
ほんと、ahkってなんでもできるんですねー


81 :名無しさん@お腹いっぱい。:2009/05/29(金) 22:49:46 ID:y2qE0/Pv0
昨晩のやつの改造版。アクティブウィンドウ以外に黒いシェードを掛ける。2K/XP用。ビデオ鑑賞にでもどぞ

Gui, +LastFound -Border +ToolWindow +AlwaysOnTop -Caption +0x02000000 -0x0CC00000 +E0x00080020
Gui, Color, 000000 ; ここで色をかえてもおk
WinSet, Transparent, 200 ; 透明度(1-255)
Gui, Show, NA x0 y0 w%A_ScreenWidth% h%A_ScreenHeight%
SetTimer, Timer1, On
Timer1:
SetWinDelay,-1
WinGetPos,x,y,w,h,A
x1:=x, y1:=y, x2:=x1+w, y2:=y1+h
If (lx1==x1 && ly1==y1 && lx2==x2 && ly2==y2)
return
Gui, +LastFound
Gui, +AlwaysOnTop
WinGetPos,,,ww,hh
WinSet, Region, 0-0 %ww%-0 %ww%-%hh% 0-%hh% %x1%-%y1% %x2%-%y1% %x2%-%y2% %x1%-%y2% %x1%-%y1% 0-%hh%
lx1:=x1, ly1:=y1, lx2:=x2, ly2:=y2
Return


82 :名無しさん@お腹いっぱい。:2009/05/29(金) 23:08:59 ID:IKD+qEU60
おもしろいな
解除はどうやるんすか?

83 :名無しさん@お腹いっぱい。:2009/05/29(金) 23:13:54 ID:y2qE0/Pv0
タスクトレイw

84 :名無しさん@お腹いっぱい。:2009/05/30(土) 06:17:34 ID:84IZ3aep0
>>74-75
2つ以上ダメなんですね。以外に不便…。というかホットキー扱いじゃないのかな
ありがとうさんです。試してみまする

85 :名無しさん@お腹いっぱい。:2009/05/30(土) 13:39:34 ID:pp0cJZID0
>>36のSQLite_GetSelect関数ってフィールドの数が10個以上あると変数重複するよね?
例えばLV111の場合11行目の1列目、1行目の11列目で重複みたいに
俺が頭悪いだけ?

86 :名無しさん@お腹いっぱい。:2009/05/30(土) 14:25:44 ID:yxno/H630
それが仕様だと思うよ。
> %接頭辞%%行番号%%列番号% := 値
って風に代入してるし

> %接頭辞%_%行番号%_%列番号%
とかにすれば平気なんだろうけど

87 :名無しさん@お腹いっぱい。:2009/05/30(土) 14:40:43 ID:pp0cJZID0
なるほど。
ライブラリいじらないとだめか。

88 :名無しさん@お腹いっぱい。:2009/05/31(日) 01:53:08 ID:jQyIS5jG0
>>36関連でわからないことがあったので便乗して質問します

SELECT * FROM test WHERE 〜

というところで、 ' が含まれる項目をうまく探し出してくれません
autohotkey 特有のエスケープ処理か何かのせいか?と思ったのですが
いまいちよくわかりません

' が含まれる項目を処理するときに同じような症状に出会った人はいますか?

89 :名無しさん@お腹いっぱい。:2009/05/31(日) 20:18:32 ID:g4+Xfjng0
引数の基準フォルダと対象ファイルパスを元に相対パスを返す関数ってありますか?

90 :名無しさん@お腹いっぱい。:2009/05/31(日) 21:26:54 ID:3pSi+qBb0
Path_RelativePathTo(From,atrFrom,To,atrTo)
; 相対パスを作成
; From : ベースパス
; To : 相対にするパス
; atr : ファイル属性を指定
; ディレクトリ 0x10 (FILE_ATTRIBUTE_DIRECTORY)
; ファイル 0x20 (FILE_ATTRIBUTE_ARCHIVE)
{
VarSetCapacity(t,260,0)
DllCall("SHLWAPI.DLL\PathRelativePathToA", Str,t , str,From, Uint,atrFrom, str,To, Uint,atrTo)
return t
}

Path_CommonPrefix(p1, p2)
; 2つのパス名の先頭から共通するディレクトリ名を取得する
{
VarSetCapacity(t,260,0)
DllCall("SHLWAPI.DLL\PathCommonPrefixA", Str,p1, Str,p2, str,t)
Return t
}

91 :名無しさん@お腹いっぱい。:2009/05/31(日) 21:59:11 ID:g4+Xfjng0
>>90
ありがとうございます
無事できました

92 :名無しさん@お腹いっぱい。:2009/06/01(月) 01:21:39 ID:nMoGzHYT0
AutoHotkey v1.0.48.03.L30

93 :名無しさん@お腹いっぱい。:2009/06/01(月) 15:00:23 ID:KxOltqgo0
変数%aaa%の中に変数%bbb%を組み込みたいです。
%aa%bbb%%では駄目でした。
どうすれば出来ますか?


94 :名無しさん@お腹いっぱい。:2009/06/01(月) 15:57:15 ID:nMoGzHYT0
「%aaa%」と書いた場合、
 ・コマンド内は、変数に格納された値
 ・式や関数の中では、%〜%を展開した文字列が名前となる変数
となるけど、
「組み込みたい」の意味が分からないから具体例で。

95 :名無しさん@お腹いっぱい。:2009/06/01(月) 16:27:57 ID:5kiaGP5n0
よくわからんが多分 Transform,Deref, String あたりではないかとエスパーしてみる

96 :名無しさん@お腹いっぱい。:2009/06/01(月) 16:33:11 ID:9Rwj7uYk0
流行るページを参考にしたのですが、わからない箇所があるので教えてください

Ctrl-x,Ctrl-sで保存(Ctrl-S)の実行、Ctrl-sで検索(Ctrl-f)の実行をしたいと思っています
ところが下記のスクリプトでCtrl-x,Ctrl-sを実行すると、Ctrl-fが送られてしまいます

このように置き換え対象のキーも別のキーに置き換えてしまっている場合、どのように対処すれば意図した動きになるのでしょうか?

^x::
    Transform,CtrlS,Chr,19
    Input,InputChar,C I M L1 T1,{ESC}
    If InputChar=%CtrlS%
        Send,^s
Return

^s::
    Send,^f
Return

97 :名無しさん@お腹いっぱい。:2009/06/01(月) 17:02:21 ID:nMoGzHYT0
いろいろやり方はあるけど、^s:: のところでA_PriorHotkeyで分岐すりゃいいんじゃないの

^x::Return
$^s::
 If A_PriorHotkey = ^x
  Send, ^s
 Else
  Send, ^F
 Return

98 :名無しさん@お腹いっぱい。:2009/06/01(月) 17:36:14 ID:9Rwj7uYk0
>>97
試してみたところ意図した動きになりました。感謝です!
^x::Returnでキーの動きを無効化しても組み込み変数に値は入るんですね
勉強になりました。ありがとうございました><
2ストロークで設定しているキーバインドが多く、書き換えが面倒なので、
勉強もかねて関数をつくってやってみたいと思います

99 :名無しさん@お腹いっぱい。:2009/06/02(火) 18:58:42 ID:xwgWw2A40
対象窓で、文字入力中or変換中なら1を、変換候補窓が出ているなら2を、それ以外なら 0を返す。
ATOK2007とMS-IME8.1で確認。クラス名がバージョンの数値違いだけなら別verでも通用するかも。

IME_IsConverting(winTitle="A") {
 hwnd:=WinExist(winTitle)
 WinGet, pid, PID, ahk_id %hwnd%
 tmm:=A_TitleMatchMode
 SetTitleMatchMode, RegEx
 ret := WinExist("ahk_class ATOK\d+Cand|imejpstCandList\d+ ahk_pid " pid) ? 2
  : WinExist("ahk_class ATOK\d+CompStr|imejpstcnv\d+ ahk_pid " pid) ? 1
  : 0
 SetTitleMatchMode, %tmm%
 return ret
}


100 :名無しさん@お腹いっぱい。:2009/06/02(火) 19:44:30 ID:rJZ7jJ5w0
>>99
昔から何度も質問に出てましたよね。IMEで変換中かどうかを知る方法。
ついに実現できる人がいたとは。
さっそく試してみます。

355 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)