AutoHotkey スレッド part8

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
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だと次のレコードを変数に格納してくれない気がする

よく検証してないから分からないけど最後の列の値になにか入れたら次の行は一応格納してくれた
2524: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
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の値を保持してなければならずあまりスマートな感じがしないので、「配列のメモリを解放」みたいなコマンドがあればと思って。
4224: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
を追加すれば大丈夫か
761/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
772/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で変換中かどうかを知る方法。
ついに実現できる人がいたとは。
さっそく試してみます。
101名無しさん@お腹いっぱい。:2009/06/02(火) 19:56:13 ID:osRS2DeA0
>>99
おおーありがとう
これがあったら無変換にIMEOFF、変換にONにする関数割り当てられる
102名無しさん@お腹いっぱい。:2009/06/02(火) 20:18:55 ID:ftcLo5Gk0
けっこう既出な気がするけど
他のIMEでもウィンドウクラス一覧表示するスクリプト書けば怪しいクラス名が分かる
注意する点はWinActiveで判断するんじゃなくExistで判断するところ
103名無しさん@お腹いっぱい。:2009/06/02(火) 20:23:03 ID:xwgWw2A40
BOOLを返さないのに Is〜 とは変な名前だったorz。好きに替えてくらはい。
自分が使ってるIMEしか調査してないから、
SKK、VJE、WXG、松茸、その他IMEへの対応は出来ないので自分で追加してくれ。

あああ ← 入力窓の上で MouseGetPos,,,hwnd して hwndからクラス名をとって正規表現に追加
 ̄ ̄ ̄

|愛   | ← 候補窓の上で MouseGetPos,,,hwnd して hwndからクラス名をとって正規表現に追加
|亜依  |
|あい  .|
|藍   |
| :   .|
 ̄ ̄ ̄
104名無しさん@お腹いっぱい。:2009/06/02(火) 20:30:06 ID:xwgWw2A40
>>102
おっしゃるとおりで

#IfWinNotExist, ahk_class 入力窓|変換窓
vk1Csc079::IME_Set(!IME_Get())

とかのほうが楽ではある
105名無しさん@お腹いっぱい。:2009/06/02(火) 21:37:03 ID:Kr4mD/Ke0
MS-IME2000までなら
WinExist("ahk_class msime")
でいけそう
106名無しさん@お腹いっぱい。:2009/06/02(火) 22:31:33 ID:P6oxe9UG0
autohotkey以外の任意のウィンドウをタスクバーから消す方法ってありませんか
toolwindow作ってSetParentすればいいのかなと思ったけど同じプロセスじゃないとできないみたいで
107名無しさん@お腹いっぱい。:2009/06/03(水) 09:37:26 ID:fHhPIlcJ0
ここのTrayIcon.ahkの中にあるTaskButton.ahk
http://www.autohotkey.com/forum/topic17314.html
108名無しさん@お腹いっぱい。:2009/06/03(水) 09:43:09 ID:cMFaAOnD0
実行中のスクリプトのファイル名を取得する方法を教えてください。
実行中と同じスクリプト名のiniファイル読み込みにしようしたいです。
109名無しさん@お腹いっぱい。:2009/06/03(水) 09:58:06 ID:fHhPIlcJ0
組み込み変数 A_Script○○○
110名無しさん@お腹いっぱい。:2009/06/03(水) 11:03:28 ID:cMFaAOnD0
>>109
ありがとう。
111名無しさん@お腹いっぱい。:2009/06/04(木) 00:17:18 ID:QQ0YUUDy0
任意のアプリケーションのメニューバーを非表示にする方法ってあります?
AU3_Spy.exe で調べてもメニューバーの Class_NN なんかが判らなくて…。
112名無しさん@お腹いっぱい。:2009/06/04(木) 01:01:23 ID:duXuCFzc0
クラスが取れないのは昔ながらのメニュー(メモ帳、電卓など、Ahkもそう)、非クライアント領域と言われているところ。

^F12::
 hwnd := WinExist("A")
 hMenu := DllCall("GetMenu", "UInt", hwnd, "UInt")
 If (hMenu) {
  DllCall("SetMenu", "UInt", hwnd, "UInt", 0)
  Sleep, 2000
  DllCall("SetMenu", "UInt", hwnd, "Uint", hMenu)
 } else {
  MsgBox, Menu not found
 }
 return

ttp://msdn.microsoft.com/ja-jp/library/cc364679.aspx
ttp://msdn.microsoft.com/ja-jp/library/cc411047.aspx
113名無しさん@お腹いっぱい。:2009/06/04(木) 01:16:22 ID:6AUpOLN+0
処理が終わるまでの間を進歩状況を表示させたいんだけど
Gui,Add,Progress見つけたけどできそうなのか使い方がさっぱりわからなかった
114名無しさん@お腹いっぱい。:2009/06/04(木) 01:49:52 ID:QQ0YUUDy0
>>112
おおお、ありがとうございます!助かりました
115名無しさん@お腹いっぱい。:2009/06/04(木) 08:17:20 ID:SXDlYEUH0
>>113
ttp://www.autohotkey.com/docs/commands/GuiControls.htm#Progress

Progress, R0-200 W400 H70 Hide
Progress, Show
Loop, 200
Progress, %A_Index%, Number:%A_Index%, Counting..., Title
Progress, Off

Gui, Add, Progress, W300 h10 cBlue vMyProgress
Gui, Add, Button, Default, Start
Gui, Show
return

ButtonStart:
Loop, 300
GuiControl,, MyProgress, %A_Index%
return
116名無しさん@お腹いっぱい。:2009/06/04(木) 09:19:45 ID:dyra48CT0
マウスの下のWindowTitleを取得する方法を教えてください。
117名無しさん@お腹いっぱい。:2009/06/04(木) 11:24:00 ID:39eHpjNw0
>>116
http://lukewarm.s101.xrea.com/commands/WinGetTitle.html

#Persistent
#SingleInstance, force
SetTimer, MouseShitaWindowTitle, 50
Return

MouseShitaWindowTitle:
MouseGetPos, , , HWND
WinGetTitle, Title, ahk_id %HWND%
Tooltip, %Title%
Return
118名無しさん@お腹いっぱい。:2009/06/04(木) 15:38:47 ID:dyra48CT0
>>117
助かりました。ありがとうございました。
119名無しさん@お腹いっぱい。:2009/06/04(木) 16:13:54 ID:6AUpOLN+0
>>115
処理完了までの時間がどのくらいなのか取得したいんで
Loop,200だか300なんて固定じゃしょうがない
120名無しさん@お腹いっぱい。:2009/06/04(木) 16:31:03 ID:39eHpjNw0
>>119
固定も何も>>115のサンプルを応用すればいいよってことじゃないのかい。
121名無しさん@お腹いっぱい。:2009/06/04(木) 16:48:28 ID:SXDlYEUH0
>>119
すまなない
何が分からないか分からない
完了時間の予測なら、全体量と1回の処理時間から自分で毎回計算するしかないと思う
122名無しさん@お腹いっぱい。:2009/06/04(木) 17:06:34 ID:6AUpOLN+0
なるほど
そういうことならしょうがないですね
ありがとう
123名無しさん@お腹いっぱい。:2009/06/04(木) 17:40:27 ID:TWv1vctD0
具体的な秒数を事前に出すのはAHKに限らずむづかしいと思うけど。
ダミー進捗が嫌なら、メクラループやめて具体的気に処理が終わるたびに更新すればいいだけっしょ

やらなきゃいけない処理の数(分母)と、そのうち何個目が終わった(分子)か、で
進捗グラフ更新してくのがProgressなんだから
124名無しさん@お腹いっぱい。:2009/06/04(木) 19:36:13 ID:nKWMwvxe0
>>99
Firefox3.0.10上だと文字入力中をうまく検出できないんだけどどうしてだろう
0が返ってくる
125名無しさん@お腹いっぱい。:2009/06/04(木) 21:14:42 ID:6pR9OPq00
>>99-101
窓使いの憂鬱でIMEのON/OFFでキー割り当て変えられることに気づいた・・・
もしかしたらAPI一発で取得できたりして・・・
窓使いのソース見たらよいかも
126名無しさん@お腹いっぱい。:2009/06/04(木) 22:05:15 ID:TWv1vctD0
ん? >99がすごいって言われてんのは「IME ONかつ変換中か」を見てるからっしょ

ON/OFF状態や変換モードだけなら SendMessageのWM_IME_CONTROLでとれるよ
http://lukewarm.s101.xrea.com/up/file/089.zip
12799:2009/06/04(木) 22:10:50 ID:duXuCFzc0
IMEが描画する窓の存在を見てるんで、インライン描画するタイプだと検出出来ないのはしょうがない...
IE, FireFox, Office系とか、、ダメじゃんorz
でも、API一発で取れないのは数々の先人達が試みて失敗してる(スレ1で既出)

>>125
ちょっと見てみた・・・
ttp://mayu.cvs.sourceforge.net/viewvc/mayu/mayu/hook.cpp?revision=1.34&view=markup の428行目あたりから
グローバルフックでメッセージとらえているようだ。
IL (IME_Lock、 On/Off)はAPIで取得しているみたい(実質的には IME.ahkと同じ)
IC(入力中かどうか)は WM_IME_(START|END)COMPOSITION を見て内部でフラグ管理しているみたい

低水準マウス/キーボードはフックできるけど、これだとDLLが必要だぬ。俺には無理ぽ。
128名無しさん@お腹いっぱい。:2009/06/04(木) 22:51:48 ID:hfmiG/aI0
メールの内容を読み込んで、そこにあるフレーズで次の処理をするっていうのを作りたいのですが
何かいい方法ないでしょうか?どうにかしてメールをtxtファイルにしてFileReadで変数に読み込む
ぐらいしか思いつかないんですが
129名無しさん@お腹いっぱい。:2009/06/04(木) 22:56:27 ID:gv6ECyM30
ごりむちゅうで何がなにやら。
次の処理が何かわからんのに、答えるのは難しい。
130名無しさん@お腹いっぱい。:2009/06/04(木) 23:23:25 ID:hfmiG/aI0
>>129
情報不足過ぎですみません
家で常時動いているPCにメール送って、PCを遠隔操作したいんです。
具体的には本文にAいう単語があったら、そのあとの文をファイルとして保存するとか
Bという単語があったらaというソフトを起動するとかです。
131名無しさん@お腹いっぱい。:2009/06/05(金) 00:13:11 ID:e7k/ar4E0
>>126
IME.ahkでは Office 系の IME の On / OFF を
正しく取得出来なかったと思う
改善された?
132名無しさん@お腹いっぱい。:2009/06/05(金) 01:31:04 ID:T3bmGBtQ0
ウチでは IME.ahkで Office 系「で」 IME の On / OFF を正しく取得出来る
133名無しさん@お腹いっぱい。:2009/06/05(金) 02:44:19 ID:fBYNAlWU0
>>130
常時起動ならリモートデスクトップでいいんでないの?
それとも携帯からかな?
メールでやるなら、面倒くさそうだね。
134名無しさん@お腹いっぱい。:2009/06/05(金) 10:57:01 ID:TiIrn5XK0
>>128
>どうにかしてメールをtxtファイルに
あるかどうかわからないけど、ログをテキストで保存してるメーラーを使えばいいんじゃないか。
今見てるメールに対して処理をしたいだけなら、スマートではにけどCtrl+A & Ctrl+Cで本文を内容読めばいい
135名無しさん@お腹いっぱい。:2009/06/05(金) 12:30:07 ID:TL25cwxb0
POPなりIMAPのプロトコルが分かるなら英語のフォーラムにあるWinSockのライブラリ使えば
メールをファイルに落とさなくても直接接続して処理できるけど、エラーハンドリングなどかなり面倒。

次点は、コマンドラインレベルのクライアントを探して連携するとか。
POPならこういうやつとか>ttp://www.codeode.com/popclient/index.html

普通のWindowsのMUAでも、大抵は開けば普通にtextで読めるからそれでもいいかも。
メール毎に個別にファイルに保存するやつの方が楽だとは思うけど。
136名無しさん@お腹いっぱい。:2009/06/05(金) 12:38:48 ID:gplHJn2c0
スレどころか板違いだが、sshで入れるようにすると楽なんじゃないかな。
携帯用のクライアントアプリもあるみたいだし ttp://mutil.jp/
鯖にするのはリ便利さと管理コストのトレードオフだけど。

ahkでやるならメーラによると思うけど、メールデータをテキストそのままで
保存してるメーラも結構あるんでファイル監視でいくのもアリ。

現段階でメールのヘッダと本文の解析の仕方を知らないなら、敢えてメールチェッカ入れて
新着通知の窓が出るのを監視してその本文を取得ってのもありかも。

あとはBASP21あたりで自前でPOP3鯖見に行くとか。。。
137名無しさん@お腹いっぱい。:2009/06/05(金) 13:58:03 ID:SxfMtifS0
出先からメールで自宅のPCを操作できるソフトて結構あるような気がするんだが
138名無しさん@お腹いっぱい。:2009/06/05(金) 19:52:28 ID:BSIYPVRTO
TaskTrayIcon.ahkを眺めてたんだが、
クリックされたトレイアイコンの番号は取得できないのかな?
139名無しさん@お腹いっぱい。:2009/06/05(金) 19:56:05 ID:esdfKZUa0
出先から指定ラベル実行できたらちょっと面白いな
140名無しさん@お腹いっぱい。:2009/06/05(金) 20:40:42 ID:O6B2s5Qx0
>>133,134,135,136,137
レス遅れてすみません。携帯は焼かれているもので
いろいろな手段を教えてくださってありがとうございます。
じっくりググって作りたい物を作ってみます。また行き詰ったら質問に来るかもしれません
そのときはよろしくお願いします
141名無しさん@お腹いっぱい。:2009/06/05(金) 23:04:28 ID:NwioFG9O0
z::yのようにリマップし、alt+zとやると、
余計なCtrlが入力されます。なぜでしょうか。

Key history
74 03F u 0.08 F5
A4 038 d 2.25 Alt
5A 02C h d 0.05 Z
59 015 i d 0.00 Y
A4 038 u 0.16 Alt
A2 01D i d 0.00 Ctrl
A2 01D i u 0.00 Ctrl
5A 02C h u 0.03 Z
59 015 i u 0.00 Y
74 03F d 0.53 F5
142名無しさん@お腹いっぱい。:2009/06/06(土) 19:35:48 ID:RpRz7vLw0
Guiでボタンを押すとListBoxが更新されるようにしたいのですが、
Gui, Add, ListBox, vList,
Gui, Add, Button, gTest1, Button1
Gui, Add, Button, gTest2, Button2
Gui, Show,
Return

Test1:
GuiControl,, List, test||..
Return
Test2:
GuiControl,, List, hoge|..||
Return
これだとリストの末尾に追加される形になってしまいます。
リストを入れ替えるようにするにはどうしたら良いでしょうか。
143名無しさん@お腹いっぱい。:2009/06/06(土) 19:44:21 ID:nz9UkNk/0
先頭にデリミタ。
GuiControlの頁を要再読。
144名無しさん@お腹いっぱい。:2009/06/06(土) 20:09:54 ID:RpRz7vLw0
>>143
即レスありがとうございます。
見落としてました...orz
145名無しさん@お腹いっぱい。:2009/06/07(日) 03:46:36 ID:6gUtZr/R0
しつもーん。
指定アプリ上でzを押した時、aの動作→bの動作→cの動作→aの動作→bのry
と言った事をやりたいんですが、どう記述したらいいですか。。。

#IfWinActiveを使うって事と、個別の動作(sendでいくつかキーを送るだけ)は分かってできたんだけど、
それを同じキーで繰り返したいです。

ご教授願います。。。
146名無しさん@お腹いっぱい。:2009/06/07(日) 04:20:29 ID:64k7gMDb0
>>145
質問がいまいちわかりにくいけど、こういうこと?

#IfWinActive 指定アプリ
z::
Loop,n ;nは繰り返したい回数
{
aの動作
bの動作
cの動作
}
Return
#IfWinActive
147名無しさん@お腹いっぱい。:2009/06/07(日) 09:24:01 ID:tkyz3VGy0
同じキーで
1回目押したら aの動作
2回目押したら bの動作
3回目押したら cの動作

って意味じゃなかろうか
148名無しさん@お腹いっぱい。:2009/06/07(日) 09:37:04 ID:ZORhP0Gy0
z::
count++
if(count=1){
tooltip, aの動作
}else if(count=2){
tooltip, bの動作
}else if(count=3){
tooltip, cの動作
count=0
}
keywait, z
Return
149145:2009/06/07(日) 16:40:24 ID:6gUtZr/R0
>>146
質問がわかりにくくてすいませんしたっ_| ̄|○

>>147
そうです。その意味です。。。

>>148
希望通りの動きが出来ましたっ!
ありがとうありがとう(つД`)

リファレンス読んで処理内容を解読できるようにがんばってみます(´・ω・)、
150名無しさん@お腹いっぱい。:2009/06/08(月) 01:08:14 ID:mPjxZMt70
AutoHotkey.ahkの書き換え、再起読み込み
を自動化した。
Aキーを押したらA用途のAutoHotkey.ahkを
Bキーを押したらB用途のAutoHotkey.ahkを
読み込んでそれ用の設定になるので、便利。
perl使って書き換えしてるだけだが。
151名無しさん@お腹いっぱい。:2009/06/08(月) 02:18:59 ID:VN+15O/CP
何故ahkでやらない
152名無しさん@お腹いっぱい。:2009/06/08(月) 10:20:12 ID:aCqJ4TQP0
流行らせるページの中の人、ネトラン関係者になってたのか
153名無しさん@お腹いっぱい。:2009/06/08(月) 10:20:50 ID:Gscpj3Zd0
書き換えって、毎回 マイドキュにある AutoHotkey.ahkを削除だのリネームだのしてるのか?
スクリプトは別に「AutoHotkey.ahk」の名前じゃなきゃ動かないわけじゃないし
多重起動もできるんだが。
154名無しさん@お腹いっぱい。:2009/06/08(月) 15:15:28 ID:mPjxZMt70
>>153
AutoHotkey.ahkの指定箇所A〜B部分をキー一発で交換します。
マウスのM、X1,X2ボタンやテンキー機能は衝突するしな。
複数キーバインドで使い分けってめんどいし。なんかのキー押しながらマウスのX1ボタン押すっても・・
155名無しさん@お腹いっぱい。:2009/06/08(月) 16:48:40 ID:VN+15O/CP
何によって用途が違うのか知らないけど、
ホットキーラベル内に条件分岐作ればいいだけの話じゃ
156名無しさん@お腹いっぱい。:2009/06/08(月) 16:53:37 ID:mkWh48Pk0
----- ScriptA.ahk ------
#include common.ahk
; 以下A用キー定義

----- ScriptB.ahk ------
#include common.ahk
; 以下B用キー定義

----- common.ahk ------
A::Switch("ScriptA.ahk")
B::Switch("ScriptB.ahk")
Switch(script){
Run,"%A_AhkPath%" "%A_ScriptDir%\%script%"
ExitApp
}
; 以下共通用キー定義
157名無しさん@お腹いっぱい。:2009/06/08(月) 17:01:01 ID:NOGmzyJY0
AutoHotkey_L 使えば楽
158名無しさん@お腹いっぱい。:2009/06/08(月) 18:08:44 ID:WA7XkMG90
ahkで起動するのとexeに変換して起動するのではどっちが高速ですか?
159名無しさん@お腹いっぱい。:2009/06/08(月) 18:26:19 ID:mkWh48Pk0
exeの場合は、起動時に解凍する処理が入る
その後はどっちも同じ
160名無しさん@お腹いっぱい。:2009/06/08(月) 19:42:44 ID:GcGcBK5q0
すいません教えてください。
Loop, Read, exclude.txt ; 削除したい行を改行区切りで列挙したファイル
{
 match := A_LoopReadLine
 Loop, Read, %1%, *temp.txt
 {
  if (A_LoopReadLine != match)
   FileAppend, %A_LoopReadLine%`n
 }
 FileMove, temp.txt, %1%, 1
}
こんな感じでマッチした行を削除したいのですが、元の場所に改行が残ってしまいます。
削除した行だけ改行を詰めるにはどうやったら良いでしょうか。
FileReadして Loop, Parse, var, `n, `r, でも同じでした。
161名無しさん@お腹いっぱい。:2009/06/08(月) 19:50:53 ID:WA7XkMG90
>>159
なるほど
ありがとうございました
162名無しさん@お腹いっぱい。:2009/06/08(月) 20:48:11 ID:NOGmzyJY0
>>160
ループの入れ子が想定と逆だったから分かりづらかった。
それと、ファイルI/O多すぎじゃない?
どっちのファイルも巨大(100M〜)ならしょうがないけど、
どっちかをメモリに積んだ方がいいと思う。

俺ならこうする。
FileRead, ExcludeLines, *t exclude.txt
ExcludeLines = `n%ExcludeLines%`n
Loop, READ, src.txt, output.txt
 If InStr(ExcludeLines, "`n" . A_LoopReadLine . "`n")==0
  FileAppend, %A_LoopReadLine%`n
163名無しさん@お腹いっぱい。:2009/06/08(月) 21:55:55 ID:GcGcBK5q0
>>162
ありがとうございます。
うーm、しかし他の場所の改行も削除されてしまうYO

FileRead, ExcludeLines, *t exclude.txt
ExcludeLines = `n%ExcludeLines% ;改行残る
Loop, READ, src.txt
{
 if InStr(ExcludeLines, "`n" . A_LoopReadLine . "`n")==0
  var = %var%`n%A_LoopReadLine%
 else
  count = %A_Index%`,%count%
}
StringTrimLeft, var, var, 1
StringTrimRight, count, count, 1
Loop, Parse, var, `n, `r
{
 if A_Index not in %count%
  FileAppend, %A_LoopField%`n, output.txt
}
;FileMove, output.txt, src.txt, 1
return
こんなんしか思いつきません><;
164名無しさん@お腹いっぱい。:2009/06/09(火) 18:41:24 ID:wStbLZev0
Hayateというフリーソフトでキーのリピート速度やリピート開始時間を変えても
AutoHotKeyのホットキーラベルを介すとデフォルトのリピート速度になってしまいます
 ex) Down:: Send, {Down}
Hayate側のキーリピート速度でホットキーラベルを実行する方法はないでしょうか
ちなみにHayateというフリーソフトは検索してもなかなか出てこないですがhttp://frozenlib.net/app.htmlにあるものです
165名無しさん@お腹いっぱい。:2009/06/09(火) 18:50:30 ID:Ezplb6lV0
SetKeyDelay
SendやControlSendコマンドでの1キーごとに挿入される間隔を変更
166名無しさん@お腹いっぱい。:2009/06/09(火) 18:56:50 ID:wStbLZev0
SetKeyDelayを小さく設定することは試したのですがキーリピートが開始されるまでの時間が変化無しです
167名無しさん@お腹いっぱい。:2009/06/09(火) 19:12:29 ID:Ywd4Dynt0
SendPlay
168名無しさん@お腹いっぱい。:2009/06/09(火) 19:31:21 ID:wStbLZev0
試しに以下のように設定してみましたが改善されませんでした
SetKeyDelay,-1,-1
SendPlay, {Down}

SendPlay以外も一応試しましたがうまくいきませんでした
あきらめるしかないですかね
169名無しさん@お腹いっぱい。:2009/06/09(火) 19:35:48 ID:N+aijEuz0
その何とかってのは知らないけど、仕組み的に両立は無理なんじゃないのかね
170名無しさん@お腹いっぱい。:2009/06/09(火) 19:57:24 ID:wStbLZev0
そうですか。残念
ありがとうございました
171名無しさん@お腹いっぱい。:2009/06/09(火) 21:58:14 ID:kA+0+7DI0
>>162
ごめんなさい163です。すんごい初歩的な所で勘違いしてました。
>>162のでバッチリです。本当にごめんなさい
172名無しさん@お腹いっぱい。:2009/06/09(火) 22:18:00 ID:o631qgYJ0
>>160
perl使えばいいよ。2GBのテキストでもperlなら処理できる。
173名無しさん@お腹いっぱい。:2009/06/10(水) 20:49:55 ID:i0OR+VsR0
キーの取りこぼしが生じるときには
どのパラメーター設定をいじればいいのでしょうか
現在この5つを設定しています

SetWinDelay, 0
SetControlDelay, 0
SetKeyDelay, 0
SetBatchLines, -1
SendMode Input
174名無しさん@お腹いっぱい。:2009/06/10(水) 21:42:19 ID:tNiIalHL0
キー入力イベントの取りこぼしだとしたらどうしようもない(原理的には無いはず)
GetKeyState などでの状態取得で取りこぼしがあるのだとしたらスクリプトが悪い

もしくは AutoHotkey_L の #If でものすごく重い関数呼んでいるとか
175名無しさん@お腹いっぱい。:2009/06/10(水) 22:03:41 ID:i0OR+VsR0
>>174
ふむふむ
スクリプトを見直します
176名無しさん@お腹いっぱい。:2009/06/10(水) 22:11:54 ID:OK2G++4p0
ホットキーラベルを実行した後そのホットキーの修飾キーが押され続ける現象がよくあります
根本的に起こらなくすることは出来ないのでしょうか
もしくは発生しやすいホットキーの設定の仕方とかあったりするのでしょうか

過去ログにあった押され続けていることをツールチップで知らせる対策は一応やってます
177名無しさん@お腹いっぱい。:2009/06/11(木) 13:54:37 ID:RYxlht2m0
ホットキーの修飾キーが押されっぱなしになる現象は
ウチの環境では発生した記憶は無いけど
考えられる可能性としてCPU負荷が高いときに発生してるのかな?
CPU負荷が高いときは各Delayを長くしたり、一時的に停止させたりすると発生率が下がるかも。
CPU使用率を取得するには流行らせるページ(↓)の「システムモニタ用関数群」を使うと簡単
http://lukewarm.s101.xrea.com/myscripts/index.html
178名無しさん@お腹いっぱい。:2009/06/11(木) 20:40:44 ID:nqDZEveb0
>>176
自分も <+WheelUp::ShiftAltTab
を使った後によくShiftが押されっ放しになります。
CPU負荷は10%くらいでも起きますね。なんでだろう
179名無しさん@お腹いっぱい。:2009/06/11(木) 20:53:04 ID:Jqjy1sE50
Safari4を使われている方は、御存じだと思うのですが
このブラウザはリンクを新しいタブで開くのに
control + クリックの操作となり非常に不便でして
AutoHotkeyのスクリプトで、リンクをクリックだけで
タブを開く事は可能でしょうか
180名無しさん@お腹いっぱい。:2009/06/11(木) 21:50:16 ID:tOyf+Vjo0
状態に応じてタスクトレイアイコンが3種類に変化するスクリプトを
コンパイルしてexe化することを考えています。
ahk2exeでコンパイルするときにiconを埋め込むことができますが、
ここで3種類のiconを埋め込むことも可能なのでしょうか?
外にiconを用意せずに、内部に埋め込んで利用するにはどうすればよいのか
お知恵を拝借したくて参りました。どうぞよろしくお願いします。
181名無しさん@お腹いっぱい。:2009/06/11(木) 23:40:41 ID:Act1V8T40
>>176
>過去ログにあった押され続けていることをツールチップで知らせる対策
どういうものですか?
興味があります。
182名無しさん@お腹いっぱい。:2009/06/11(木) 23:45:35 ID:wKap2oAj0
>>181
これです

782 :名無しさん@お腹いっぱい。:2008/11/27(木) 01:43:58 ID:pOwnMABe
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。
if書きたくないから、三項演算子だいすきif書きたくないから、三項演算子だいすき

#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%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]" : ""
}
Tooltip, %alert%
return
183名無しさん@お腹いっぱい。:2009/06/11(木) 23:47:40 ID:Act1V8T40
>>182
ありがとうございます。
勉強になります
184名無しさん@お腹いっぱい。:2009/06/11(木) 23:56:12 ID:g3bI05W70
WheelScroll.ahk の作者さん、見てらっしゃいますかー? (´∀`)ノ
前スレ809でご相談した、 マルチモニタで座標がマイナスのときスクロールしない件、ようやく調査できました。
どうやら Firefox と Google Chrome に特有の問題?だったようです。

> 1.スクリプト殺したノーマルの状態で通常のホイールが効いているか
Yes

> 2.ToolTip,mx=%mx% my=%my% とか追加して値がマイナス値になってるかどうか
OK

> 3.互換モード(WM_SCROLL)で動かした場合も動かないのか
アプリによって違う
[初期設定]
OK: Word 2007, Excel 2007 (ClassNN=XLDESK1), VBE, Explorer, Hidemaru,
NG: Firefox 3.0.10, Google Chrome 2.0,
[互換モード] ※
OK: Word 2007, Excel 2007, VBE, Explorer, Hidemaru, Google Chrome 2.0,
NG: Firefox 3.0.10 (プラス座標でも動かない),

※「if (!scmode)MOUSEWHELL() 」の部分をコメントアウトして「SCROLL()」だけが使われるようにした

> 4.管理人さんのホイールリダイレクト で正常に動くかどうか
OK: Word 2007, Excel 2007 (ClassNN=XLDESK1), VBE, Explorer, Hidemaru,
NG: Firefox 3.0.10, Google Chrome 2.0,

というわけなのですが、何かおわかりになりますか?
185名無しさん@お腹いっぱい。:2009/06/12(金) 09:13:09 ID:xwya5VPS0
>>182
三項演算子を使えるのか
AutoHotkeyでは使えないものだと早とちりしていた
186名無しさん@お腹いっぱい。:2009/06/12(金) 20:35:06 ID:UekHVJ+l0
>>179
済みません、このスクリプトの作り方を
ご存じの方、教えて頂けないでしょうか
宜しくお願いします。
187名無しさん@お腹いっぱい。:2009/06/12(金) 21:03:44 ID:bITW0WaS0
それってSafariに限らずIE7以降やFirefoxでも一緒なのでは…。人間側が対応すれば?

どうしても作りたいなら、単に左クリックにCtrl+左クリックのショートカット割り当てて
常駐させればいいんじゃね?
188名無しさん@お腹いっぱい。:2009/06/12(金) 21:09:54 ID:36hO0FeI0
IEはデフォでミドルクリック新タブに対応したけど
Safariはまだなのか
189名無しさん@お腹いっぱい。:2009/06/12(金) 21:20:51 ID:ZrrVWnQk0
>>184
作者とは関係ないけど、

MOUSEWHELL関数内の

; lParam: XY座標
lpalam := (my << 16) | mx

って所を

VarSetCapacity(tmp, 4), NumPut(mx, tmp, 0, "Short"), NumPut(my, tmp, 2, "Short")
lParam := NumGet(tmp, 0, "UInt")

に変えてみたら動くかな?
190名無しさん@お腹いっぱい。:2009/06/13(土) 00:15:39 ID:dhbOZypN0
>>184
どもです。XPSP2で現象確認しました。
>189氏でも突っ込み入ってますがバッファサイズと符号の問題っぽいですね。
ただ、VarSetCapacity() & NumPut()は自分もやってみたんですが上手くいかず。
泥臭いけど↓の記述でいけました。

; lParam: XY座標
my += (my < 0) ? 0xFFFF : 0
mx += (mx < 0) ? 0xFFFF : 0
lpalam := (my << 16) | mx

初めはアプリ固有の問題かと思ったけど、問題が起こってたのはlParamの値を
ちゃんと見てるアプリだったですね。
(逆に言うとほとんどのアプリはlparam値をデタラメに指定しても動くんだな)

いづれ修正版を上げ直したくはあるんですが、色々手を入れたいとこがありすぎるんで
ちょっといつになるかわからんです。
とりあえず当座は個々でのモデファイで対応をお願いします。
191名無しさん@お腹いっぱい。:2009/06/13(土) 08:25:43 ID:FZfPnSVw0
AutoHotKeyではないあるウィンドウに
ファイルがドロップされたことを知りたいんですが何か方法ありませんでしょうか
192名無しさん@お腹いっぱい。:2009/06/13(土) 09:59:23 ID:tz1EHr/W0
三項演算子の話が出ていたので便乗して質問します

if (key = "q" or key = "w" or key = "e")
{
key = ok
}
の条件の部分を
if key in q,w,e
{
key = ok
}
のように省略化して三項演算子を書きたいのですが無理でしょうか
193名無しさん@お腹いっぱい。:2009/06/13(土) 10:20:05 ID:zUCF2v8d0
>>191
他のウィンドウへのD&DはWM_DROPFILESを検知しないとダメかも
hook用のdllが英語のフォーラムにあったような記憶

>>192
一般論で言えば無理だけど、
instr("qwe",key) ? "ok":key
みたいなことは書けると思う

keyが複数文字なら instr("_q_ww_ee_","_" . key . "_") ? "ok":key とも書けるけど、
選択肢の数によっては普通に or で結んだ方が速いかも
194名無しさん@お腹いっぱい。:2009/06/13(土) 11:49:58 ID:tz1EHr/W0
>>193
どうも
この手は思いつきませんでした
195名無しさん@お腹いっぱい。:2009/06/13(土) 13:15:03 ID:TEt0QNw/0
高級なツールチップ表示関数を作ろうと思ってます
ツールチップ番号ごとに独立した表示時間を持たせたいのですが
作り方が分かりません
ツールチップ削除用ラベルも関数内で完結させようと思ってます
とりあえず現時点のツールチップ削除機能がない関数です↓

ToolTip(msg, dur=2000, tipNumber=20, x="88%", y="95%")
/******************************************
* スクリーンの絶対座標にツールチップ表示
*
* @param msg - 表示メッセージ
* @param dur - 表示時間(ms)
* @param tipNumber - ツールチップ番号(1~20)
* @param x - スクリーン座標。絶対値または%指定が可能
* @param y - スクリーン座標。絶対値または%指定が可能
*******************************************
*/
{
ifinstring, x, `% ; xに%が含まれていた場合の座標を算出する
{
StringReplace, x, x, `%
x := A_ScreenWidth * x / 100
}
ifinstring, y, `% ; yに%が含まれていた場合の座標を算出する
{
StringReplace, y, y, `%
y := A_ScreenHeight * y / 100
}
CoordMode, ToolTip, Screen
ToolTip, %msg%, %x%, %y%, %tipNumber%
return
}
196名無しさん@お腹いっぱい。:2009/06/13(土) 13:32:17 ID:uM8h8kxB0
チップ番号毎に消去用のタイマ設置じゃないの
197名無しさん@お腹いっぱい。:2009/06/13(土) 13:37:14 ID:TEt0QNw/0
20個ラベル作るってことですか?
198名無しさん@お腹いっぱい。:2009/06/13(土) 19:06:14 ID:TEt0QNw/0
とりあえずラベル20個作って望み通りの挙動になりました
ありがとうございます
199名無しさん@お腹いっぱい。:2009/06/14(日) 04:29:55 ID:uW112SM80
プログラマブルテンキーのリマップで困っているのですが
VK SC Type Up/Dn Elapsed Key
------------------------------------------
A4 038 d 43.83 Alt
60 052 d 0.05 Num 0
60 052 u 0.02 Num 0
66 04D d 0.02 Num 6
66 04D u 0.00 Num 6
61 04F d 0.02 Num 1
61 04F u 0.00 Num 1
A4 038 u 0.02 Alt
こんな入力があって発動するスクリプトは可能でしょうか?
200名無しさん@お腹いっぱい。:2009/06/14(日) 10:26:41 ID:aFW/syKk0
ALT押しながらテンキーの061ということでいいのかな。
前にも似たようなスクリプト貼られた気がするけど。

seq:="!Numpad0!Numpad6!Numpad1|UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTba" ; 検出するキーシーケンス
endkeys:="{Backspace}{Enter}{Left}{Right}{Up}{Down}{Delete}{Insert}{Escape}{Home}{End}{PgUp}{PgDn}"
. "{Numpad0}{Numpad1}{Numpad2}{Numpad3}{Numpad4}{Numpad5}{Numpad6}{Numpad7}{Numpad8}{Numpad9}"
. "{NumpadDot}{NumpadDiv}{NumpadMult}{NumpadAdd}{NumpadSub}{NumpadEnter}"
. "{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Pause}{Break}{PrintScreen}"
. "ba" ; endkeysには検出するキーを含める
hist:=""
Loop
{
Input, var, L1 V, %endkeys%
if ErrorLevel=Max
hist:=""
else if InStr(ErrorLevel,"EndKey:")
{
hist.=GetKeyState("Alt","P") ? "!":""
hist.=SubStr(ErrorLevel,8)
}
Loop,Parse,seq,|
if ( SubStr(hist,StrLen(hist)-StrLen(A_LoopField)+1) = A_LoopField )
Gosub % A_LoopField . hist:=""
}

!Numpad0!Numpad6!Numpad1:
TrayTip,, %A_ThisLabel%:%A_TickCount%
return

UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTba:
TrayTip,, FullPower:%A_TickCount%
return
201名無しさん@お腹いっぱい。:2009/06/14(日) 16:34:29 ID:uW112SM80
>>200
ありがとうございます。
参考にさせて頂きます。
202名無しさん@お腹いっぱい。:2009/06/14(日) 23:30:20 ID:DC/htVT+P
つい2,3日前に,このツールの存在を知りました。

いままで自分で欲しかった,
 1 ブラウザやエディタ上で範囲選択
 2 ホットキーでポップアップメニュー
 3 Firefoxに送る,EBViewに送る,Googleで検索,Wikiで検索……
などの機能を持つスクリプトが,見よう見まねで書けたんですが,
(かなり細かくTPO次第の条件分岐になるので,自動認識はさせない方針)
ただ一つ「IE8にURLを送る」だけがうまくいきません。

仕事でどうしてもIE8が必要なので,あとここだけ動くと
言うことなしなんですが,何か良い手はありませんでしょうか。

Run, C:\Program Files\Internet Explorer\iexplorer http://%Clipboard%

は駄目でした。
203名無しさん@お腹いっぱい。:2009/06/15(月) 00:27:40 ID:t4Kz1iJG0
#1:: run, "C:\Program Files\Internet Explorer\iexplore.exe" "%clipboard%"

http::// はいらんでしょ。そういう使い方してるんだったらごめん。
204名無しさん@お腹いっぱい。:2009/06/15(月) 00:37:59 ID:DfoIckCV0
>>202
IE8をインストールしていないけど
iexplorer.exe ではなく iexplore.exe じゃないかと。

それとパス中に含まれる半角スペースは %A_Space% に置き換えた方が確実に動くと思う
Run, C:\Program%A_Space%Files\Internet%A_Space%Explorer\iexplore.exe http://%Clipboard%
205202:2009/06/15(月) 00:54:56 ID:jQythkfVP
>203 さん
動きました! ありがとうございます。
http://は意図的です。仕事で使うシステムが,
どういう意図なのかhttp://抜きのURL(←毎回違う)を
送ってくるシステムなので,苦し紛れの方法です。
でもよく考えたらこのほうが(どうせ人間が選択するなら)
便利だということにも気づいて,割と気にいってます。

>204 さん
返信見たときにかなり焦りましたが,iexplorerでした。
%A_Space%の件は気づいてなかったので,
試しに203さんの解に入れ込んでみたけどやはり駄目でした。
今後は気をつけて使うことにします。ありがとうございました。
206名無しさん@お腹いっぱい。:2009/06/15(月) 01:01:22 ID:YLFCYF1c0
>%A_Space%
これは流石にやりすぎだと思うが
行頭行末以外で勝手にtrimされるわけじゃないし
207名無しさん@お腹いっぱい。:2009/06/15(月) 01:14:24 ID:YLFCYF1c0
なんかねぼけてた
AutoTrimで設定できる範囲でどうのこうのって意味ね
208名無しさん@お腹いっぱい。:2009/06/15(月) 01:30:23 ID:cH860UQK0
うちのは iexplore.exe だな、環境によって変わったりするものなのかw
209名無しさん@お腹いっぱい。:2009/06/15(月) 01:42:15 ID:Rpm4wJtQ0
ウイルスじゃねw>iexplorer.exe
昔の名残でWindowsに最初から入ってるプログラムは
基本的に8文字までになってるから
210202:2009/06/15(月) 01:51:19 ID:jQythkfVP
ホントだ,Iexploreですね……なに寝ぼけてるんだろう。
すいません。。。

ランチャー代わり&さっきのメニューだけで,
個人的にはとても満足。
次はマウス右クリック1秒でメニュー出るようにしてみます。

こういうのBasic以来だ。楽しい。
211名無しさん@お腹いっぱい。:2009/06/15(月) 01:54:33 ID:Qf1MbZOM0
>>205
補足
""で括るとそのままパスの文字列として扱われるので%A_Space%に置き換えると動かない。
(%A_Space%が半角スペースとして処理されない)
""で括らない場合は %A_Space% に置き換えると確実に動く。

>>206
半角スペースが区切りとして処理される場合があるので
""で括れるときはいいけど、括れないときに半角スペースを %A_Space% に置き換えてる。
前後に半角スペースやTabスペースが欲しいときにこういう方法がありますよー、ってことで。
212名無しさん@お腹いっぱい。:2009/06/15(月) 19:01:59 ID:x31IQNlX0
XPのデスクトップ上で、たとえば、マイコンピュータが選択されている などのように、
現在選択されているアイコンを調べる方法はないでしょうか。

F2でリネーム→コピー→キャンセル というローレベルな方法で一応動いています。

#IfWinActive ahk_class Progman

F1::
send,{F2}
sleep,5
send,^c
send,{ESC}
sleep,5
var=%clipboard%
if var=マイ コンピュータ
msgbox,マイコンピュータが選択されている
return
#IfWinActive

が、デスクトップの空き領域でこの操作をした場合、「空」になってもらいたいのに、
直前まで選択していたアイコンに強制的にフォーカスが移り、
意図しない動作になってしまいます。
それと、この方法だと「ゴミ箱」が検出できません。

もっとスマートな検出方法はないでしょうか。
213名無しさん@お腹いっぱい。:2009/06/15(月) 19:56:45 ID:OJANZZ8e0
ゴミ箱のショートカットをつくり、デスクトップにそれを置く。
214名無しさん@お腹いっぱい。:2009/06/15(月) 20:16:07 ID:uHI5LVh90
デスクトップの空き領域・ゴミ箱・普通のアイコンのそれぞれに
SHIFT+F10で個別のコンテクストメニューがだせる
あとは場合分け汁
215名無しさん@お腹いっぱい。:2009/06/15(月) 20:45:43 ID:x31IQNlX0
>>213
なるほど、最悪そのようにしてみます。

>>214
どうもです。Shift+F10を押した後の場合分けの方法が思いつかないのですが、
コンテキストメニューの情報をテキストで取得する方法って有りますか?

コンテキストメニューが出ているとき、最前面ウインドウから情報を
抜き取ってみましたが、デスクトップそのものの情報しか得られませんでした。
216名無しさん@お腹いっぱい。:2009/06/15(月) 20:54:51 ID:Eq0wz7dd0
礼も言わず「最悪そうします」とかw
217名無しさん@お腹いっぱい。:2009/06/15(月) 21:07:27 ID:cPBSw7WG0
>>212 COMを使う方法がある

エクスプローラの場合 ShellFolder()
ttp://www.autohotkey.com/forum/topic20701.html

デスクトップの場合 ShellDesktop()
ttp://www.autohotkey.com/forum/topic20701-30.html#203520

必要なライブラリ com.ahk, acc.ahk
ttp://www.autohotkey.com/forum/topic24234.html
218名無しさん@お腹いっぱい。:2009/06/15(月) 21:33:37 ID:PR1YLCAc0
>>190
ご確認ありがとうございます。
ご教示いただいた方法を試してみたいと思います (が、また数日〜十数日先になるかもしれません)。
219名無しさん@お腹いっぱい。:2009/06/15(月) 21:36:25 ID:x31IQNlX0
>>217
これでイケそうです。ありがとうございます!
220名無しさん@お腹いっぱい。:2009/06/16(火) 20:41:51 ID:DCCAcnmU0
タスクスケジューラに登録しているタスクの
プロパティ(っていうんでしょうか?)を開くにはどうしたらいいでしょうか?

Winキーや矢印キーを何回かSendして・・・という方法は思いつきますが
タスクを追加や削除して順番が変わると書き換えが必要になるので、
できれば直接開く方法はないでしょうか?

やりたいことは、プロパティを開いて「実行する」のチェックボックスを
トグルするスクリプトを書くことです。
221名無しさん@お腹いっぱい。:2009/06/17(水) 10:10:53 ID:WpDhJ6Es0
>>220
タスク名をタイプすればいいんじゃない?
Send,task1
Send,{AppsKey}r
日本語なら流行らせるページの日本語コード変換とか使えばいけるハズ。

もしくは、Task Scheduler APIでゴニョゴニョするか、
ここのataskみたいなのを使うとか
ttp://www.piedey.co.jp/softs/atask.html
atask --set タスク名 TASK_FLAG_DISABLED 1
222名無しさん@お腹いっぱい。:2009/06/17(水) 21:09:40 ID:QQe2Egi20
Gui, Add, ListView, w200 r10 Grid -Multi NoSortHdr AltSubmit vTEST gLV, aaa|bbb
Gui, Add, Button, gXX, &XX
Gui, Show
Return
LV:
Lv_Add("", 1, 2)
Return
XX:
Gui, 2:+Owner1
Gui, 2:Add, Button, w200 gHH, &HH
Gui, 2:Show,
Return
HH:
Gui, ListView, TEST
Lv_Delete()
Gui, 2:Destroy
Return
すみません、これでGui2のHHボタンを押したときに、Lv_Delete()が実行されず行き詰ってます。
Lv_Delete()を実行するボタンをGui1に追加してラベルに飛んだり、リストダブルクリックを
A_GuiEvent で拾ってLV: の分岐で実行するようにしても上手くいかず、
Gui1にボタンを増やしてHHを押したら、Gui1側のボタンをクリックするようにしたらなんとか動作しました。
ControlClick, Button2, ahk_class AutoHotkeyGUI
ControlClick, Button2, ahk_class AutoHotkeyGUI ;一回だけだと反応しませんでした
本当はどう書いたら良いのでしょうか。よろしくお願いします。
223名無しさん@お腹いっぱい。:2009/06/17(水) 22:29:36 ID:6WNHPMfr0
>>221
ありがとうございます
ataskを使うことにしました
224名無しさん@お腹いっぱい。:2009/06/17(水) 22:31:13 ID:jrmVfvzF0
>>222

HH:
Gui, 1:Default
225名無しさん@お腹いっぱい。:2009/06/17(水) 22:33:03 ID:jrmVfvzF0
226名無しさん@お腹いっぱい。:2009/06/17(水) 23:28:11 ID:JeuLn3PH0
>>176
最近これがやたらと起きてまじで困る
何がいけないのか分からない
AutoHotKeyのバグなの?
227名無しさん@お腹いっぱい。:2009/06/18(木) 06:11:05 ID:HZFIWwq10
>>226
Logiのsetpointつかってない?
228名無しさん@お腹いっぱい。:2009/06/18(木) 06:44:39 ID:turBMvGA0
>>227
マウスが路地のだからつかってる・・・
229名無しさん@お腹いっぱい。:2009/06/18(木) 06:44:58 ID:VsQab8Ck0
>>193
規制やら何やらで返事遅れてしまいましたが
フォーラムを漁ったらdllcallでole32\RegisterDragDropというのを使えばいいみたいでした

自分もSetWindowsHookExなどでWM_DROPFILES検知しようとしてたんですが、
Windowsって方法が色々あってむずかしいですね
230名無しさん@お腹いっぱい。:2009/06/18(木) 07:02:32 ID:d+H9MLdZ0
>>224
おお、これだったんですか、ありがとうございます出来ました。
231名無しさん@お腹いっぱい。:2009/06/18(木) 07:55:11 ID:Ojx5UvYg0
基本的なことで申し訳ないんだけど
テンプレなどのページでキーの変更などのことはわかったのですが、
どのようにして変更するかがわかりません。

たとえば「Ctrl+0」というのをF1に割りあげる場合どのソフトを起動し
どのような設定にすればいいのですか?
232名無しさん@お腹いっぱい。:2009/06/18(木) 08:03:38 ID:ts3k5Em40
それって結局何も分かってないってことじゃね?
233名無しさん@お腹いっぱい。:2009/06/18(木) 09:14:25 ID:LcGKoNtW0
>>226
マウスのサイドボタンに setpoint で shift や ctrl を割り当ててない?
234名無しさん@お腹いっぱい。:2009/06/18(木) 13:20:46 ID:7JmYAkRj0
LogiのMarbleMouse(トラックボール)を使ってるけど
SetPointはカスタマイズ系ソフトと競合してたのでSetPointを入れてないな。
ボタンのカスタマイズはAutoHotkeyでやってる。
MSのIntelliPointも同様のことが発生するという書き込みを見たことあるけど
使ったことが無いので解らない。

SetPoint(ユーティリティソフト)をアンインストールしても
ドライバはロジのままだったので手動で標準ドライバへ変更した記憶がある。
(標準ドライバにする必要があるかどうかは分らない。)
それとキーボードのドライバもいつのまにかロジのドライバに書き換えられてたので
それも標準ドライバに変えた。
現在のSetPointの仕様がどうなのか知らないけどね。
235名無しさん@お腹いっぱい。:2009/06/18(木) 17:46:14 ID:CJ45cLgq0
メーカー純正のマウスドライバって微妙だよな。
かといってXPだとOS標準じゃでチルトホイール使えないし。
せっかくWheelLeft/Rightがサポートされたのに残念だ。
236名無しさん@お腹いっぱい。:2009/06/18(木) 17:59:54 ID:HZFIWwq10
SetPointは、ノートPCのタッチパッド感度を勝手に初期化して加速を無効にしたり、
>>176の押しっぱなし症状が出たりと、多岐にわたって殺意が沸くほど悪影響がある。
が、こいつを入れないとせっかくのチルトボタンが有効にできないから、涙をのんで入れてる。

チルトボタンだけをF13〜F24にまわすような代替のソフトなんて、ないよね?
あったら、速攻でアンインスコしたい。

いまは、CtrlかAltが20秒以上押しっぱなしになってることを検出したら
Setpointを強制Killして、2秒後に、あらためて起動させるようにした。
けど、これも完璧な対策にはならない。
237名無しさん@お腹いっぱい。:2009/06/18(木) 18:07:05 ID:Ojx5UvYg0
特定のウィンドウもしくはソフトがアクティブの場合の指定などがわかりません。

Ctrl+0をF1に割り当てる場合どうすればいいですか?

238名無しさん@お腹いっぱい。:2009/06/18(木) 19:35:35 ID:HZFIWwq10
1年ぶりにロジクールのスレを覗いてみたんだが、

>Q. SetPointの設定が勝手にデフォルトに戻るんですが?
>A. キャンセルやクローズ(「×」)を押さないようにしましょう。
>
>Q. SetPoint 入れたくない(使いたくない)んで違う神ドライバありませんか?
>A. そんな都合のいいものがあったら是非教えてください。

添付アプリの糞加減は、なにも変わっていなかった・・・
239名無しさん@お腹いっぱい。:2009/06/18(木) 19:41:07 ID:JJ+I/19Q0
路地はハードは良いんだけどね

と言うかマウスユーティリティで良いものってあまり見ない。
絶対使わなそうなランチャとかイラネ。
古いInteliPointとエレコムホイールユーティリティは良いと思う

>>237
もうちょい頑張ろうぜ
ttp://lukewarm.s101.xrea.com/Examples.html
240名無しさん@お腹いっぱい。:2009/06/18(木) 20:16:32 ID:7JmYAkRj0
AutoHotkeyをインストールする
(インストーラーでインストールするとahkファイルの関連付けが一緒に行われる)
Autohotkey.exeと同じフォルダに 新規テキスト 作成する。
新規テキスト.txt を AutoHotkey.ini に変更する
※AutoHotkey.ini ではなく、任意の名前.ahk (ahkファイル)でもいい。
※ahkファイルならどこに作成してもOK。

テキストエディタ(メモ帳など)で Autohotkey.ini を開く。

ウィンドウの識別方法はいくつかあるけど、ウィンドウクラスで識別する方法を。
ウィンドウクラスを調べる方法はいろいろあるけど同梱されている AU3_Spy.exe を使うと簡単。
(AutoHotkey.exeと同じフォルダにある)
取得した ahk_class をクリップボードにコピーする。
例えばメモ帳のウィンドウクラスを調べると Notepad ということが分かる。

#IfWinActive, ahk_class Notepad ; メモ帳がアクティブなら
^0::F1

これを AutoHotkey.ini に貼り付けて保存し、Autohotkey.exe を実行。
(任意の名前.ahk に貼り付けて保存した場合は 任意の名前.ahk をダブルクリック)

最初の取っかかりで躓いているのだろうけど
後は>>239のリンク先に殆ど書かれている。
241名無しさん@お腹いっぱい。:2009/06/18(木) 21:10:14 ID:Ojx5UvYg0
いまんとこできたのがソフトの起動のみ・・・

WinTitle Mozilla Firefox
^PgDn::F2

#IfWinActive MozillaUIWindowClass
^PgDn::F2

これでできません・・・何が間違ってるのでしょうか?
242名無しさん@お腹いっぱい。:2009/06/18(木) 21:23:46 ID:wnsiLCT/0
F2::^PgDn
じゃないの?

ってか、とりあえず流行らせるページひととおり読もうぜ
243名無しさん@お腹いっぱい。:2009/06/18(木) 21:49:21 ID:7JmYAkRj0
「Ctrl+0にF1を」として書いてた・・・
「Ctrl+0をF1に」なら
F1::^0
だった

他の方も言ってるけどAutohotkeyを流行らせるページを見た?
(主に関連する解説ページはウィンドウの指定方法、ホットキー、Remap)
244名無しさん@お腹いっぱい。:2009/06/18(木) 21:52:18 ID:SVpnwZUO0
>>241
Sendを使う
Remapは修飾キーを離してくれないので
それだとCtrl+F2が押されたことになっている
245名無しさん@お腹いっぱい。:2009/06/19(金) 00:10:42 ID:nmCnAcVn0
スレッド動作中に、ほかのキーが押されているかは「GetKeyState」で
できますが、マウスのホイールが回ったかどうかを調べる方法は、ありますか?

マウスの左右チルトを倒してスレッドを開始し、
そこでループさせながらホイールの上下入力を検知したいのですが、
ホイールの回転検出方法でつまずいてしまいました。
246名無しさん@お腹いっぱい。:2009/06/19(金) 00:46:58 ID:IlTer6q60
こんな感じか

~WheelUp::wheel:=1
~WheelDown::wheel:=-1

WheelLeftl::
 wheel = 0
 Loop
 {
  ほげほげ
  If (wheel!=0)
   ふがふが
 }
 Return
247名無しさん@お腹いっぱい。:2009/06/19(金) 01:32:42 ID:nmCnAcVn0
>>246
ありがとうございます。うまくいきました。
なるほど、1スレッドにこだわるあまり、思いつきませんでした。
248名無しさん@お腹いっぱい。:2009/06/19(金) 01:47:13 ID:yGrRFejp0
#IfWinActive MozillaUIWindowClass
F2::
Send ^
Send PgDn
return

これでも駄目だった・・・なぜかしらん?
249名無しさん@お腹いっぱい。:2009/06/19(金) 01:59:10 ID:pArZgo1w0
いいかげん解説くらい読んでくれ
250名無しさん@お腹いっぱい。:2009/06/19(金) 13:42:58 ID:567XQ0M40
>>248
ctrlとPgDn別々に押してるんだから動かなくて当然
あとSendのページ読めば{}やら,やら必要なのもわかるはず
それと、なんで>>242試してみないの?
251名無しさん@お腹いっぱい。:2009/06/19(金) 18:13:40 ID:fIAAihen0
まあ ahk_class 付いてない時点でウィンドウ判定に失敗してるんだけどな
252名無しさん@お腹いっぱい。:2009/06/19(金) 19:46:31 ID:yGrRFejp0
ここ2、3日騒いでいた者ですがなんとか設定できました。
F2::^PgDnで問題なくできました。

問題は、251さんの指摘しているところですw
253名無しさん@お腹いっぱい。:2009/06/19(金) 19:53:11 ID:YBCNr5+M0
もう二度とこないでね^^
254名無しさん@お腹いっぱい。:2009/06/19(金) 20:18:25 ID:hGBhDH/a0
>>226,227,228,233,234
自分>>178なんですが、ロジのマウス使ったことないですがやっぱりShiftが押されっぱなしになりますね。
マウスドライバはMSの純正で、ボタン割り当てはAutoHotkeyのみでやってます。
LShift & WheelDown::AltTab
LShift & WheelUp::ShiftAltTab
だけで走らせてみたところ、LShift & WheelDown::AltTab でフォーカスを移したあと、マウスクリックで
元のウィンドウに戻ってくると、毎回 Shiftが押されっぱなしになることが分かりました。
TeraPadとJanedoeViewで確認。
LShift & WheelUp::ShiftAltTab では大丈夫みたいです。

マウスはサンワのTB38という5ボタンのトラックボール、メーカーのドライバを入れた前歴はありません。
キーボードがへたってるのかなあ
255名無しさん@お腹いっぱい。:2009/06/19(金) 20:29:17 ID:IlTer6q60
■ キー押しっぱなし俺的まとめ ■

症状
i) キーはCtrl や Shift が多い
ii) 物理キー押下・押上で解除される

原因となっていそうなもの
A) SetPoint(ロジクール製マウスユーティリティ)
B) 窓使いの憂鬱(のどか)
C) VMWare / VirtualPC

A単独、もしくは (B または C) + デュアルコア以上のCPU

※ ソースは繭スレとか

----
俺はCore2のPCにした時 B で一度なってAHKに完全移行(OS再インスト)で
いったん無くなったけど、VMWareを入れて(C)再発した。
今はどちらも入れていないので特に問題は起きていない。
256名無しさん@お腹いっぱい。:2009/06/19(金) 20:59:14 ID:NFr4v0Hr0
何分後に動作
とか
何時何分に動作
っていうタイマーってできないかな?
1分ごとに監視するのは無駄な動作が多い
257名無しさん@お腹いっぱい。:2009/06/19(金) 21:11:27 ID:NFr4v0Hr0
何分後ってのはタイマーで指定すればいいだけか
時間指定できないかな
258名無しさん@お腹いっぱい。:2009/06/19(金) 21:24:32 ID:hGBhDH/a0
>>255
AとCは該当なし、Bは使った事ないですがChangeKeyで前変換とカタカナキーを殺していたのを思い出して
リセットして再起動してみましたが駄目でした。自分もCore2DuoのE8400です。
OS再インストールするしかないのかな・・・ orz
259名無しさん@お腹いっぱい。:2009/06/19(金) 21:59:46 ID:RvBowY+q0
結局これといった解決方法は無しかorz
260名無しさん@お腹いっぱい。:2009/06/20(土) 12:28:49 ID:Z+MpXoRr0
>>256
SetTimer,OnTimer,60000
return

OnTimer:
FormatTime,NowTime,,HHmm
If (NowTime >= 0659) && (NowTime <= 0701) && (!Compleate) {
Msgbox, 7:00になったよ
Compleate := 1
} Else{
Compleate := ""
}
return

1分ごとに時間チェックするだけなら大した負荷にはならんと思うけど
(どっちにしろどこかで何かしらが定期時間チェックする必要はあるので
自分でやるか、他人に任せるかの違いでしかないのだし)

どうしても1分Timerが嫌なら単独スクリプトにしてOS標準のタスクスケジューラに登録したらいい
261名無しさん@お腹いっぱい。:2009/06/20(土) 14:09:37 ID:J9kUfX5s0
>>190
遅くなりましたが、動作確認できました。

> いづれ修正版を上げ直したくはあるんですが、色々手を入れたいとこがありすぎる
期待しています。

とりあえず WheelAccel.ahk に修正を加えてアップしておきました。
ttp://lukewarm.s101.xrea.com/up の 111.zip

>>189氏ともども、ご教示ありがとうございました。今後ともよろしくお願いいたします。
262名無しさん@お腹いっぱい。:2009/06/20(土) 16:45:22 ID:yzkbbsVb0
ソフトのタイトルの一部で判断し
各キーを対応させるにはどうすれば
いいのでしょうか?
263名無しさん@お腹いっぱい。:2009/06/20(土) 16:48:52 ID:m9lSj1Vi0
複数のキーボードを接続している状態で、特定のキーボードについてのみ
キー配置のリマッピングを有効にする方法はあるのでしょうか。
Alphagripというイロモノキーボードを買ってみまして、AutoHotkeyで
リマップして キー配置を変更したのですが、普通のキーボードも同時に
使っているので そちらは出来ればそのままのキー配置にしたいのです。
一応関数は探してみたつもりですがそれっぽいのが見つかりませんでした。
264名無しさん@お腹いっぱい。:2009/06/20(土) 17:46:05 ID:Kh84drTR0
>>262
SetTitleMatchMode と #IfWinActive

>>263
ドライバレベルで対応出来るものじゃないと出来ない。無理。

テンキーなら ttp://ioenc.net/magickeypad/ で出来るけど、
でもこれもやっぱりドライバ置き換え。
265名無しさん@お腹いっぱい。:2009/06/20(土) 18:01:50 ID:yzkbbsVb0
>>264
レスどうも
タイトルに AutoHotkeyというのが含まれてる場合
SetTitleMatchModeで指定するにはどうすればいいのでしょうか?

#IfWinActiveの場合は、付属のソフトでahk_class○○といった
感じでできました。
266名無しさん@お腹いっぱい。:2009/06/20(土) 18:09:21 ID:m9lSj1Vi0
>>264
レスありがとうございます。やっぱ無理なんですか、残念。
267名無しさん@お腹いっぱい。:2009/06/20(土) 18:47:56 ID:Kh84drTR0
>>265
#IfWinActive などのウィンドウの状態を見てのキーアサインを振り分ける機能は
Autoexec セクション内での SetTitleMatchMode コマンドの指定したやり方で判定をする
(指定がなければ前方一致をデフォルトとする)


意味が全然分からないならスクリプトの「1行目」に以下を書く
SetTitleMatchMode, 2
268名無しさん@お腹いっぱい。:2009/06/20(土) 18:57:45 ID:yzkbbsVb0
とりあえずテンプレのサイトにいって調べてみたら

MatchMode
タイトルのマッチ方法

1
前方一致(WinTitleで指定した文字列で始まるウィンドウが一致する)(高速)(デフォルト)
2
中間一致(WinTitleで指定した文字列を含むウィンドウが一致する)
3
完全一致(WinTitleで指定した文字列に完全に一致するものが一致する)

こんなのを発見しました。

2というのとかの意味もわかりました。使い方自体は疑問ですが、
最初の行に書き込むことによって目的の動作ができるようになりました。

m(_ _)mペコッ
269名無しさん@お腹いっぱい。:2009/06/20(土) 19:19:19 ID:Z+MpXoRr0
ID:yGrRFejp0 = ID:yzkbbsVb0 だろ

264でヒントもらっといて 265みたいな再質問ってあり得ない
質問するなとはいわんが答えてもらった内容をちゃんと噛み砕いて飲み込む努力しろよ
調べる能力つけないとこのソフト使うのは難しいぞ
270名無しさん@お腹いっぱい。:2009/06/20(土) 19:58:07 ID:Kh84drTR0
多少なりとも前進はしてるようだけど、調べる気がないのはちょっとな
271名無しさん@お腹いっぱい。:2009/06/20(土) 23:35:06 ID:yzkbbsVb0
そんな風にみえちゃんだろうけど相当検索し調べその結果ですw
調べ方が悪いのかしら・・・
272名無しさん@お腹いっぱい。:2009/06/20(土) 23:57:07 ID:LyIyydqb0
調べ方も頭も態度も悪い
273名無しさん@お腹いっぱい。:2009/06/21(日) 01:19:42 ID:LY2SRQDx0
hoge.ahkが起動しているかを別のahkから調べる方法はありますか?
プロセスがあるかで調べようと思ったのですがどれもAutoHotkey.exeで調べられませんでした
274名無しさん@お腹いっぱい。:2009/06/21(日) 01:34:59 ID:LCii9rhx0
>>273
もらいもの
DetectHiddenWindows, On
WinGet, ahk_id_list, list, ahk_class AutoHotkey
Loop, %ahk_id_list%{
this_id:=ahk_id_list%a_index%
WinGetTitle, this_title, ahk_id %this_id%
msgbox, %this_title%
}

それか、AutoHotKey.exeをhoge.exeにリネームコピーしてhoge.ahkをhoge.exeに送れば問題なし。
275名無しさん@お腹いっぱい。:2009/06/21(日) 01:38:33 ID:gJSSJElb0
SetTitleMatchMode, 2
#SingleInstance, force
DetectHiddenWindows, On
WinWait, \hoge.ahk - AutoHotkey, , 0.1
DetectHiddenWindows, Off
msgbox, % Errorlevel ? "ないよ" : "あるよ"
276名無しさん@お腹いっぱい。:2009/06/21(日) 01:46:22 ID:ylbkYADc0
コマンドラインを読む関数がどこかになかったっけ?
それ使えばいいような
277名無しさん@お腹いっぱい。:2009/06/21(日) 01:53:22 ID:LY2SRQDx0
>>274-275
出来ましたありがとうございます
278名無しさん@お腹いっぱい。:2009/06/21(日) 03:28:19 ID:LY2SRQDx0
すみませんAHK連携絡みでもう二つ質問させてください。

あるAHKから起動中の別のAHK内の指定処理(ラベルなり関数)を実行させる最適な方法は何でしょうか?
起動中のAHK間の変数の受け渡しはファイル書き出し、読み込み以外で方法ありますか?
279名無しさん@お腹いっぱい。:2009/06/21(日) 04:22:12 ID:gUuxFMOa0
隠し(じゃなくてもいいけど)GUI作って、ボタンを押す。パラメタ渡しは隠しGUIのEditとかに書く
280名無しさん@お腹いっぱい。:2009/06/21(日) 05:14:16 ID:gJSSJElb0
関数ならAutoHotkeyをインストールしているディレクトリにLibフォルダを作って
そこに入れておけばいいんじゃないかな


変数の受け渡しはクリップボードを軽油する方法もある。
一定間隔でクリップボードを監視し、特定の文字列から始まるなら
変数の受け渡しと見なし、変数に置き換えてやるとか。
281名無しさん@お腹いっぱい。:2009/06/21(日) 05:15:29 ID:gJSSJElb0
;例えば特定の文字列を ahk9999999 とし、
;クリップボードコピーする形式を ahk9999999,変数名,値 というにようにする。
;下記スクリプトを実行中に ahk9999999,hoge,5 をクリップボードにコピーすると
;msgboxに hoge = 5 と表示。

#Persistent
#SingleInstance, force
hoge=1 ; テストで変化を確認するために初期値を 1 にしておく
SetTimer, ClipBoardCheck, 100
return

ClipBoardCheck:
if(Instr(Clipboard, "ahk9999999")=1){
loop, parse, Clipboard, `,
{
if A_Index=2
hogehoge=%A_LoopField%
else if A_Index=3
%hogehoge%=%A_LoopField%
}
Clipboard= ; クリップボードを空にする
msgbox, %hogehoge% = %hoge%
}
return

;変数を渡す方のスクリプトはClipboardの内容のバックアップしておき、
;Clipboardが空になったらバックアップしていたのを戻すようするといいかも。
282名無しさん@お腹いっぱい。:2009/06/21(日) 15:21:49 ID:ZMhX9OF60
>>279
仕組みは分かったのですがやり方が分かりません(´;ω;`)
よかったら簡単な例を教えてください

試しにこういうふうに作ったのですがGUIがHideだからなのかクリックしてくれません

操作する側に
ControlClick, Button1, HideControl

操作される側に
GUI, Add, Button,,Exit
Gui, Show, Hide, HideControl
return

ButtonExit:
ExitApp

>>280-281
なるほどクリップボードですか
接頭辞を決めておくというのは思いつきませんでした
283名無しさん@お腹いっぱい。:2009/06/21(日) 16:13:59 ID:gUuxFMOa0
>>282
操作側で DetectHiddenWindows,On
284名無しさん@お腹いっぱい。:2009/06/21(日) 16:33:39 ID:16cGC6mhP
受け渡しなら、OnMessageとPostMessageでしょjk
英語公式のリファレンスに詳しいサンプルがある
285名無しさん@お腹いっぱい。:2009/06/21(日) 16:43:17 ID:ZMhX9OF60
>>283
早速試しましたが変化無しでした
286名無しさん@お腹いっぱい。:2009/06/21(日) 17:36:28 ID:gUuxFMOa0
>>284
まぁそれが普通だと思うけど、GUIのボタン押すのもあまり変わらないと思う

---- server.ahk ----
Gui, Add, Button,gSub1
Gui, Add, Edit, vParam
Gui, Show,Hide, HiddenWindow
Return
Sub1:
Gui, Submit, NoHide
MsgBox, % Param
Return
---- client.ahk ----
Gui, Add, Edit, vParam
Gui, Add, Button,,Go
Gui, Show
Return
ButtonGo:
Gui, Submit, NoHide
DetectHiddenWindows, On
ControlSetText,Edit1,% Param, HiddenWindow ahk_class AutoHotkeyGUI
ControlClick,Button1,HiddenWindow ahk_class AutoHotkeyGUI
Return

287名無しさん@お腹いっぱい。:2009/06/21(日) 17:56:23 ID:16cGC6mhP
じゃあ、先に普通のやり方教えてあげなよw
余計なGUIリソース消費するし、コードの可読性や保守性を考えるとあまり一般的な解決法とも思えない
288名無しさん@お腹いっぱい。:2009/06/21(日) 18:09:32 ID:ZMhX9OF60
>>286
おー無事出来ました
どうもありがとうございました
>>284
やっぱりそっちのほうがいいんですかね
でも英語読めないので諦めますw
289名無しさん@お腹いっぱい。:2009/06/21(日) 18:33:01 ID:gUuxFMOa0
普通のアプリならそうすると思うけど、色々覚えなきゃいけないことが多いから
AHKのコマンドだけで出来る事に意義はあると思うよ。
リソースったってたいしたことないよ。
290名無しさん@お腹いっぱい。:2009/06/21(日) 18:58:11 ID:16cGC6mhP
まあ、人それぞれだから好きにすればいい
一応OnMessageだってahkのコマンドだし、覚えるのが大変なのはGUI絡みだって同じだと思うけどね
文字列の受け渡しになるとちょいと面倒になるけど、数値の受け渡しならこの程度で済む

--- receiver.ahk ---
OnMessage(0x5555,"MsgHandler")
MsgHandler(wParam, lParam, msg)
{
TrayTip,Receiver,Message %msg% arrived:`nWPARAM: %wParam%`nLPARAM: %lParam%
}

--- sender.ahk ---
F12::
SetTitleMatchMode 2
DetectHiddenWindows On
PostMessage, 0x5555, 11, 22, , receiver.ahk ahk_class AutoHotkey
return
291名無しさん@お腹いっぱい。:2009/06/21(日) 22:46:25 ID:q3qyIN4s0
人それぞれって言われたらそれまでだが、GUIはちょっとな
AHKのGUI関連って無駄にイベントラベル増えるからコードぐちゃぐちゃになるし。
自分だったら窓表示する必要があってもGUIコマンドは可能な限り使いたくないな。

>>276
管理人さんのマウスジェスチャ2の中だな。hh.exeなんかからでもchmファイルのフルパス抜けるし便利だよ
GetCommandLine(pid=0,WinTitle="A"){
  if (!pid)
    WinGet,pid,PID,%WinTitle%

  ; kernel32\GetCommandLineA のアドレスへのポインタを設定?
  ptr:=(NumGet(DllCall("kernel32.dll\GetProcAddress",UInt,DllCall("kernel32.dll\GetModuleHandle",Str,"Kernel32"),Str ,"GetCommandLineA",UInt)+1))

  ; プロセスのハンドルを取り出す
  hp:=DllCall("kernel32.dll\OpenProcess",UInt,0x001F0FFF,UInt,0,UInt,pid,UInt)
  VarSetCapacity(res,1024)

  ; GetCommandLineのメモリアドレスを取得してからコマンドライン文字列を取得
  DllCall("kernel32.dll\ReadProcessMemory" ,UInt ,hp ,UInt ,ptr, UIntP,addr ,UInt ,4 ,UInt ,0)
  DllCall("kernel32.dll\ReadProcessMemory" ,UInt,hp ,UInt,addr ,Str,res ,UInt,1024 ,UInt,0)

  DllCall("psapi\CloseProcess", UInt,hp)
  return res
}
292名無しさん@お腹いっぱい。:2009/06/21(日) 23:48:05 ID:ZMhX9OF60
>>290
これはスマートでいいですね
使わせてもらいます
293名無しさん@お腹いっぱい。:2009/06/22(月) 02:55:22 ID:9141GuF00
>>200
この方法ではNumpad0,Numpad6,Numpad1に割り当てできなくなります。
何とかなりませんでしょうか?
294名無しさん@お腹いっぱい。:2009/06/22(月) 03:00:20 ID:2F0zdoiY0
キーを押し続けている間連続で加速しながら処理
プレイヤーのシーク操作やボリューム操作など

Left::
sleepTime := 80 ;初期待ち時間
While GetKeyState("Left","p")
{
send, {Left} ;任意処理
sleep, %sleepTime%
sleepTime := sleepTime > 20 ? sleepTime * 0.95 : 20 ;加速
}
295名無しさん@お腹いっぱい。:2009/06/22(月) 22:47:42 ID:Qq8KUG5Y0
AHK使い始めたばかりなんですが、ウィンドウタイトルの無いウィンドウを
操作するのはどうしたらいいでしょうか?
具体的にはhttp://novolization.hp.infoseek.co.jp/pro.html#ao のMovieOperatorを
操作したいんですが。自分ではウインドウタイトルが無いとマウスで絶対座標指定して
いちいちクリックとかしか考え付かないです。

ちなみに前はUWSC使ってました。こいつでもウィンドウタイトルが無いとどうにもならなかったんで
ツール変えてみようかと思い立ったわけなんですが…
296名無しさん@お腹いっぱい。:2009/06/22(月) 23:08:50 ID:HdFC8Trn0
ウィンドウクラスとプロセス名(PID)で絞り込みかなl

Process, Exist, MovieOperator.exe
IfWinExist,ahk_class #32770 ahk_pid %ErrorLevel%
{
; ここにウィンドウ操作
ControlGetText, text, ComboBox1
MsgBox, % text
}
297名無しさん@お腹いっぱい。:2009/06/22(月) 23:35:44 ID:Dlle25nB0
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
JPG2AVI
ahk_class Afx:00400000:b:00010011:00000006:0594124D

AU3_Spy.exeで見ると普通にウィンドウタイトル取れてるみたいだが。
これで操作できないんか?
298名無しさん@お腹いっぱい。:2009/06/22(月) 23:40:34 ID:Dlle25nB0
ってスマソ、思いっきりソフト間違えとる。
299名無しさん@お腹いっぱい。:2009/06/22(月) 23:41:31 ID:Jnu5lPCA0
JPG2AVI じゃなくて MovieOperator じゃないの?
ウチの環境でMovieOperatorをAU_Spy.exeで取得してみたけど
タイトル無しの ahk_class #32770 だったよ
300名無しさん@お腹いっぱい。:2009/06/22(月) 23:57:31 ID:Qq8KUG5Y0
>>296
ありがとうございます。PIDで取れました。

これで色々操作するめどが立ちます。
301名無しさん@お腹いっぱい。:2009/06/23(火) 00:15:03 ID:ZOyW9r5y0
先の質問とは関係ないですがエディタにサクラエディタ使ってる人居ないですかね?

キーワード定義既存のがあったら欲しいです…
302名無しさん@お腹いっぱい。:2009/06/23(火) 01:08:54 ID:K2VHacbK0
>>301
昔どこかで拾ったんだよなあ。再びググったが見付からず。
黙ってあげてみるが、明日の昼には消す。
ttp://aaabbbccc.s6.x-beat.com/upload/src/up26358.zip
303名無しさん@お腹いっぱい。:2009/06/23(火) 02:46:42 ID:ZOyW9r5y0
>>302
ありがとう。頂きました。
304名無しさん@お腹いっぱい。:2009/06/23(火) 13:43:55 ID:WplNcnsp0
コントロールのウィンドウハンドルからClassNNを取得するにはどうすればいいんでしょうか
305名無しさん@お腹いっぱい。:2009/06/23(火) 15:41:53 ID:4VER+fnU0
最近使い始めたばかりなのですが ttp://hp.vector.co.jp/authors/VA044605/resp.html
このRespというソフトとの連携がうまくいきません
IfWinExist, RESp
{
WinActivate, RESp
ControlFocus, TButtonEdit1
ControlSetText , TButtonEdit1, %1%
Send, {ENTER}
return ;サブルーチンを終了
}
Run, Respのぱす
WinWait,Resp
WinActivate, RESp
ControlFocus, TButtonEdit1
ControlSetText , TButtonEdit1, %1%
Send, {ENTER}
return ;サブルーチンを終了
ソフトが立ち上がっている場合はうまくいくのですが立ち上がってからの検索ワードが渡りません
よろしくご教授のほどお願いします。
306名無しさん@お腹いっぱい。:2009/06/23(火) 15:58:32 ID:uY1EeqKp0
うまく動かないときは、適当にスリープを噛ませると、動く場合がある

検証してないけど↓はサンプル。

ControlFocus, TButtonEdit1
sleep,100
ControlSetText , TButtonEdit1, %1%
sleep,100
Send, {ENTER}

動けば、徐々にsleepの値を小さくしていけば、おk
307名無しさん@お腹いっぱい。:2009/06/23(火) 16:19:32 ID:4VER+fnU0
Sleepかましてやってみたんですが10秒 5秒 1秒
でも
Resp起動→スクリプト→検索はうまくいくのですが
スクリプト→Resp起動→検索は起動はするのですが検索ワードがわたりません

二度手間になりますが起動はするのでこのまま使用して
また時間のあるときにいじることにします。
ありがとうございました。
308名無しさん@お腹いっぱい。:2009/06/23(火) 16:42:43 ID:63qINAR80
× WinWait,Resp
○ WinWait,RESp
309名無しさん@お腹いっぱい。:2009/06/23(火) 18:31:10 ID:4VER+fnU0
いけました。大文字と小文字で違うんですね。勉強になりました。
RESPで検索=D:\〜\AutoHotkey.exe "D:\〜\RESp\Resp_SelecitonSearch.ahk" "$TEXT$LINK"
Janeからこんな感じで使ってます
ありがとうございました。
310名無しさん@お腹いっぱい。:2009/06/27(土) 16:12:17 ID:kilshKVq0
アクティブウィンドウの枠に色をつけたいです。
Progress / SplashImage使えばいいんですかね?
方法を教えてください。
311名無しさん@お腹いっぱい。:2009/06/27(土) 16:19:28 ID:TU1fJsoo0
アクティブウインドウの大きさを調べて、
それより少し大きいGUIを作って、背景の色を変えればいいだろう

そのやり方を教えてってことなら、勉強するしかない
312名無しさん@お腹いっぱい。:2009/06/27(土) 20:43:29 ID:mjW9CgOJ0
画面のプロパティで出来るだろ
313名無しさん@お腹いっぱい。:2009/06/28(日) 02:43:19 ID:H2leh/Na0
下のように設定するとAlt+AでもHomeキーが押されたことにるんだけど
Alt+AのときにはCtrl+Aが押されたことにするにはどうすればいいですか?
^A::send {Home}
!A::send ^a
314名無しさん@お腹いっぱい。:2009/06/28(日) 03:18:30 ID:gb9fK4qR0
>>313
>>4 A7
315名無しさん@お腹いっぱい。:2009/06/28(日) 04:45:22 ID:H2leh/Na0
>>314
サンキュ。うまくいきました
316名無しさん@お腹いっぱい。:2009/06/29(月) 22:45:37 ID:e/W0qJft0
317名無しさん@お腹いっぱい。:2009/06/29(月) 23:09:18 ID:roKbqfx60
読んでみたけど、これってフィクションだよね?
ド素人の自分でもわかるのにプログラマ志望の人が分からないとか・・・
318名無しさん@お腹いっぱい。:2009/06/29(月) 23:57:56 ID:yHCDc8410
loop,100{
tr++
fi++
tr:=tr=4 ? 1:tr=3 ? "Fizz":tr
fi:=fi=6 ? 1:fi=5 ? "Buzz":fi
valu:=tr="Fizz" && fi="Buzz" ? "FizzBuzz" : tr="Fizz" ? "Fizz" : fi="Buzz" ? "Buzz" : A_Index
MsgBox,%valu%
}
Return

こんなんでいいのかな?
319名無しさん@お腹いっぱい。:2009/06/29(月) 23:58:11 ID:CtyaNjiT0
320名無しさん@お腹いっぱい。:2009/06/30(火) 00:03:39 ID:j31Q4+5v0
>>318
わかりづらいから駄目。
と言ってみる(´-ω-`)
321名無しさん@お腹いっぱい。:2009/06/30(火) 00:13:58 ID:T80ICC0z0

if mod(a_index,3)=0
{うんたら}

if mod(a_index,5)=0
{かんたら}

で適当に分岐させればいいんじゃないの
322名無しさん@お腹いっぱい。:2009/06/30(火) 00:17:09 ID:p76oAck30
こんな感じか
Loop,100{
a := (!Mod(A_Index,3) ? "Fizz" : "") . (!Mod(A_Index,5) ? "Buzz" : "")
msg .= (!(a) ? A_Index : a) . "`n"
}
msgbox %msg%

>>317
プログラマ「志望」なら案外そんなもん。
趣味でフリーソフト作ってるような人ばっか応募してくるわけじゃない。
シーケンスの基本概念なんて実務でもやってなきゃ案外頭に入ってないもんだよ。
323名無しさん@お腹いっぱい。:2009/06/30(火) 00:18:37 ID:MqDPxJU80
こんなの?

Loop,100
Fizz:=Mod(A_index,3) , Buzz:=Mod(A_index,5) , output.= (Fizz = 0 && Buzz = 0) ? "FizzBuzz'n" : Fizz = 0 ? "Fizz'n" : Buzz = 0 ? "Buzz'n" : A_index "'n"
MsgBox, %output%
output =
324名無しさん@お腹いっぱい。:2009/06/30(火) 00:22:04 ID:T80ICC0z0
みんな可読性わるすぎw

大括弧だけで1行
1命令1行

を徹底してる俺は異端なのか・・・
325名無しさん@お腹いっぱい。:2009/06/30(火) 00:35:09 ID:j31Q4+5v0
MsgBox, 1
MsgBox, 2
MsgBox, Fizz
MsgBox, 4
MsgBox, Buzz
MsgBox, 6
326名無しさん@お腹いっぱい。:2009/06/30(火) 00:36:33 ID:rzfPOy180
俺の頭の悪さに絶句・・・
 Loop 100
 {
  outLine := A_INDEX
  Loop 3
  {
   check := outLine
   if A_INDEX = 1
    subVal = 15
   else if A_INDEX = 2
    subVal = 5
   else if A_INDEX = 3
    subVal = 3
   Loop
   {
    check := check - subVal
    if check < 0
     break
    if check = 0
    {
     if subVal = 15
      outLine = FizzBuzz
     else if subVal = 5
      outLine = Buzz
     else if subVal = 3
      outLine = Fizz
     break
    }
   }
  }
  FileAppend, % outLine . "`n", %A_ScriptDir%\FizzBuzz.txt
 }
327名無しさん@お腹いっぱい。:2009/06/30(火) 00:40:37 ID:xs+OUAE+0
Loop,100
{
If Mod(A_Index,3)=0
value=Fizz
If Mod(A_Index,5)=0
value=%value%Buzz
If value=
value=%A_Index%
Msgbox,%value%
value=
}

これで最後にして寝よう。なかなかおもしろかったー。
328名無しさん@お腹いっぱい。:2009/06/30(火) 00:47:38 ID:j31Q4+5v0
まあ、基本形はこれで
Loop,100{
if !Mod(A_index,15)
MsgBox, FizzBuzz
else if !Mod(A_index,3)
MsgBox, Fizz
else if !Mod(A_index,5)
MsgBox, Buzz
else
MsgBox, % A_index
}
329名無しさん@お腹いっぱい。:2009/06/30(火) 00:48:16 ID:EZ0ubY2h0
考え方としては

3で割り切れるなら[Fizz]
5で割り切れるなら[Buzz]と表示
どちらでも割り切れないなら数字を表示
改行

だな
330名無しさん@お腹いっぱい。:2009/06/30(火) 00:51:54 ID:T80ICC0z0
>>319
↓懐かしすぎて涙が出た

FOR A = 1 TO 100
IF A MOD 15 = 0 THEN
PRINT "FizzBuzz"
ELSE IF A MOD 3 = 0 THEN
PRINT "Fizz"
ELSE IF A MOD 5 = 0 THEN
PRINT "Buzz"
ELSE
PRINT A
END IF
NEXT A


↓Perl。さすが変態

sub f { $_[0] % $_[1] ? '' : $_[2] }
print f($_, 3, 'Fizz') . f($_, 5, 'Buzz') || $_, "\n"
foreach 1 .. 100;
331名無しさん@お腹いっぱい。:2009/06/30(火) 11:22:41 ID:ZWlKlVyy0
SHIFT+カーソルの範囲選択を
SHIFT+無変換+IJKLでやる書き方って出来る?
三つのコンビネーションって指定できないっぽいんだけど
332名無しさん@お腹いっぱい。:2009/06/30(火) 11:45:52 ID:z7lSMuFpP
通常のカーソル移動も兼ねて良いのなら
~SC7B & i:: Send, {Blind}{Up}
~SC7B & j:: Send, {Blind}{Left}
~SC7B & k:: Send, {Blind}{Down}
~SC7B & l:: Send, {Blind}{Right}
333名無しさん@お腹いっぱい。:2009/06/30(火) 16:39:04 ID:gVhvA3S20
今更ながら>>63>>76-77を試したんですが、これすごい良いですね。
自分は単なるリマップとマクロにしか使ってなかったので、こんな事も
出来るのかと驚きました。
334名無しさん@お腹いっぱい。:2009/06/30(火) 21:34:48 ID:WurnbeTc0
>>332
うまくいった。ありがとう。

キーボード眺めてたら変換キーが丸々あいてるんだよな。
JKでタスク切り替え、残りのA-Zをランチャなんかに割り当てたら
めちゃくちゃ便利そうな気がしてきた。
335名無しさん@お腹いっぱい。:2009/06/30(火) 23:43:51 ID:hpTcuIjN0
ひらがなキーを押したときの動作を key stroke and script info で見てみたら
ひらがなキーがなぜか押上されることが解りました
この不具合?を解消するにはどうすればいいのでしょうか
336名無しさん@お腹いっぱい。:2009/07/01(水) 02:28:14 ID:JH7gYY9R0
 ∧∧∧∧∧∧∧∧∧∧      ___/ ̄ ̄ ̄\
< ┌┐  ┌───┐ >   /  / / ̄ ̄ ̄ ̄\
< ││  │┌─┐│ >  /    ̄          \
< ││  └┘ //  >/    □            \
< ││    //    >// ̄~\ / ̄ ̄ ̄\      |
< ││     ̄     >|//\ヽ ∨〃/\   \   /\
< ││       _  >//(・) \ゞ/ /(・)  〉   |  | ∩|
< ││     //  >| \_/ノ  \_/ ノ し|:   | ∪|
< ││    / |   >l:::::::::∠~         ⌒ |   \/
< ││   //||   >|:::::::::r〜〜‐、ヽ      /   /
< ││   ̄  ||   >|:::::::::)jjjjjjjjjjjヽヽ   /   /
<   ̄       ̄    >|:::::::::|,,    || /   /
<.  ロロ┌┐┌┐┌┐  >!:::: ヽiiiiiiiii//  /   /
<   ┌┘│││││  >ヽ  ヽ〜〜"/   /
<     ̄ ̄ └┘││  > ヽ、__,,,_∠__/
< ┌┐┌┐    ││  >  _]:::::::   [_
< ││││   //   > ̄~        ゙ ̄ ̄ ̄ ̄ヽ
< ││││    ̄    >               ,〜ヽ
< └┘└┘        >             〜 ノ ̄\
<   []  []         >           ’ノ⌒⌒⌒⌒〉〉
 ∨∨∨∨∨∨∨∨∨∨∨            {       Y∫
337名無しさん@お腹いっぱい。:2009/07/01(水) 11:19:06 ID:qaOF2plA0
2バイトコードの処理方法で質問です。
TV録画用途のPCで、テレビ番組名をINIファイルのセクションに割り当てて、
いろいろ自動処理しています。

INIコマンドで、セクションに使ってはいけない文字(たとえば括弧「[」「]」)
が入ると、INI自体は書けるものの、同一のセクションに書いてくれなかったり、
セクションを正しく読めないなどの不具合が出ます。
とりあえず、使ってはいけない特定の文字をアンダーバーに置換してみました。

name := RegExReplace(name,"(\.|\*|\?|\+|\[|\]|\{|\}|\||\(|\)|\^|^$|\\)","_")

成功
 前 [道徳ドキュメント[再]]
 後 [道徳ドキュメント_再_]

失敗1
 前 [スパイスTVどーも・キニナル!]
 後 [スパイスTVど\も・キニナル!]

失敗2
 前 [暴れん坊将軍[再]]
 後 [棒れん坊将軍_再_]

これって2バイトコードが1バイトずつ処理されてるのが原因っぽいですね。
2バイトコード部分に混入する文字は無視し、1バイト部分だけ置換したいのですが、
なにかうまい回避策はないでしょうか。
338名無しさん@お腹いっぱい。:2009/07/01(水) 11:49:08 ID:qJNMhI6B0
>>337
マルチバイトの1バイト目の文字コードは 0x80〜0x9F 0xE0〜0xFC の範囲のはずなので
(?<=^|[^\x80-\x9F\xE0-\xFC])
で弾けると思う

>>335
OSやAHKのバージョンも書かずにそんなこと言われても答えられるやつはいないだろ。
マジレスするとKeyHistory まわりの問題は環境依存の可能性が高い。
(OS側が返してくる値自体が問題なのでAHK側でどうにかするのはたぶん無理)
現実的な解決策としてはキーボード変えるとかしかないと思われ
339名無しさん@お腹いっぱい。:2009/07/01(水) 11:52:56 ID:ll+32tHk0
>>1
駄目文字微対策版
って消えてない?サイトに繋がらない

>>337
RegExReplaceじゃなくて
流行らせるページのBREGEXP.ahkを使えばいけると思う
340名無しさん@お腹いっぱい。:2009/07/02(木) 11:36:06 ID:i54unxpm0
しつもーん。
自分で作成したGUIのウィンドウを
WinSetのTransparentで半透明にしようとすると透過度の数値に関わらずウィンドウが消えるけど、バグ?
341名無しさん@お腹いっぱい。:2009/07/02(木) 12:11:48 ID:rnkVZ9Ym0
そんな事起きた事がない
342名無しさん@お腹いっぱい。:2009/07/02(木) 12:14:52 ID:i54unxpm0

だけど、いろいろ実験したら、半分自己解決。

一定サイズ以上のGUIウィンドウを、半透明にしようとすると、ウィンドウが消えるみたい。
たとえば、30000×10000のウィンドウを半透明にしようとすると消える。
ウィンドウサイズが超でかいのを半透明にするとすごく重そうだしそれを防止するための処理が組まれてるのかな?
回避方法はないだろうか。。。。
343名無しさん@お腹いっぱい。:2009/07/02(木) 12:20:25 ID:i54unxpm0
ちょっと極端な数値を書いたけど、
5000×2000のウィンドウでもダメみたい。

というか、マルチモニタ環境だけかもしれないけど、
挙動がちょっとおかしい。

5000×2000のGUIウィンドウを半透明にしようとすると
なぜかプライマリモニタにはウィンドウが表示されず、セカンダリにだけ表示される。
セカンダリにウィンドウが完全に移動したわけではなく、
プライマリとセカンダリの両方にウィンドウがまたがっているはずなのに、
プライマリの部分だけが表示されない。

マルチモニタ環境用にちょっとでかいウィンドウを使っていろいろやりたいのだけれど、
想定されていないバグってしまうサイズなのかな?。。。。
344名無しさん@お腹いっぱい。:2009/07/02(木) 13:25:08 ID:YojB3hE5P
ウチは6000x6000くらいはOKだったな
というか、ウィンドウスタイルでWS_EX_TRANSPARENTを指定してるだけだし
AutoHotkeyのバグではないと思うが
そもそも透明にする必要性があるのか分からんし、回避方法は勝手に探求してくれ
345名無しさん@お腹いっぱい。:2009/07/02(木) 15:07:53 ID:0ufGIgHi0
DOSの
%1
%~d1
%~p1
%~n1
%~x1
%~s1
のようなコマンドはありますか?
346名無しさん@お腹いっぱい。:2009/07/02(木) 15:18:55 ID:odzNiaBs0
えっ
347名無しさん@お腹いっぱい。:2009/07/02(木) 15:32:24 ID:6MEA84T00
ない
文字列操作、正規表現ライブラリ駆使して頑張れ
348名無しさん@お腹いっぱい。:2009/07/02(木) 15:38:42 ID:LzARIfnI0
>>345
コマンドラインからの引数で、なにかを利用したいなら

%1%
%2%
%3%
%4%
・・・

で取れる。使い方はDOSの%1と同様。

ファイル名に含まれる各種情報を取り出したいなら、
http://lukewarm.s101.xrea.com/commands/SplitPath.html

SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]
>InputVar 分解するファイルパスを格納した変数名
>OutFileName フォルダパスを除いたファイル名を格納する変数名フォルダパスのみの場合は、空になる
>OutDir フォルダパス(最後の「\」を含まない)を格納する変数名
>InputVarがファイル名のみの場合は、空になる。
>OutExtension ファイルの拡張子(「.」は含まない)を格納する変数名
>OutNameNoExt 拡張子を除いた名前部分を格納する変数名フォルダパスのみの場合は、空になる
>OutDrive ドライブ文字(「:」付き)やネットワーク上のパスのマシン名を格納する変数名 InputVarが相対パスなどの場合は、空になる。
349名無しさん@お腹いっぱい。:2009/07/02(木) 15:50:24 ID:0ufGIgHi0
>>348
ありがとうございます。
350名無しさん@お腹いっぱい。:2009/07/02(木) 17:05:05 ID:YojB3hE5P
ダメ文字があるので、BREGEXP使ってごにょごにょした方が確実かと。
>>1の対策版は繋らないね…
351名無しさん@お腹いっぱい。:2009/07/02(木) 18:37:31 ID:0ufGIgHi0
SplitPath, %1%, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive

で、 %1%,を使えないです。
X:= %1%,
も使えないです。どうすれば使えるようになりますか?

>>350
Batでダメ文字があったので逃げてきたのに・・・
352名無しさん@お腹いっぱい。:2009/07/02(木) 18:42:48 ID:LzARIfnI0
X= %1%
SplitPath, %X%, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive

でどうよ
353名無しさん@お腹いっぱい。:2009/07/02(木) 18:47:08 ID:LzARIfnI0
おっと間違ったかも

手元のコードを見直したら

X= %1%
SplitPath,X, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive

これで動くはず
354名無しさん@お腹いっぱい。:2009/07/02(木) 19:09:24 ID:0ufGIgHi0
>>353
ありがとうございます。動きました。
がんばってみます。
355名無しさん@お腹いっぱい。:2009/07/02(木) 22:17:47 ID:0ufGIgHi0
DOSのSHIFTコマンドの代わりになるようなコマンドありますか?
また、X= %1%
の中の1の部分を
%%y%%として数字を増やしたいのですが出来ません。%%の間に%%を入れることは不可能なんですか?
356名無しさん@お腹いっぱい。:2009/07/02(木) 22:23:21 ID:F+s6QMxA0
演算子を:=にして式にする
X := %y%
357名無しさん@お腹いっぱい。:2009/07/02(木) 22:34:25 ID:qjImDfCp0
;AutoHotkey Help の「command line parameters」をそのままコピペ

Loop, %0% ; For each parameter:
{
param := %A_Index% ; Fetch the contents of the variable whose name is contained in A_Index.
MsgBox, 4,, Parameter number %A_Index% is %param%. Continue?
IfMsgBox, No
break
}
358名無しさん@お腹いっぱい。:2009/07/02(木) 22:41:42 ID:0ufGIgHi0
>>356
>>357
度々すみませんでした。ありがとうございました。
がんばってみます。
359名無しさん@お腹いっぱい。:2009/07/03(金) 05:14:43 ID:c5pAeyeU0
>>335
環境依存ではなく、Windowsの仕様(?)らしい。
ttp://lukewarm.s101.xrea.com/test/read.cgi/bbs/1095764510/243-246
ttp://d.hatena.ne.jp/blechmusik2/20090513/1242142080

2番目のリンク先のコメントによると他のキーと違いひらがなキーは Up → Down ということらしいので
(UWSCでキーのOn/Offチェックをしてみたけど、AutoHotkeyのKeyHistoryと同様にOnのままになってた)
ひらがなキーをAutoHotkeyでカスタマイズしたい場合はドライバレベルで別のキーに変更しておく必要があるみたい。
別キーに置き換えるなら他のキーと重複しないF13〜F24がいいかも。

ということでひらがなキーをF13に置き換える手順。
AutoHotkeyで任意のキーをF13にリマップする。
例:F12をF13にリマップし、スクリプトを実行させる。
F12::F13

Changekeyを起動する。(Changekeyが無いならググって入手する)
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」、該当するキーは「該当なし」と表示される。
(0x0064 はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると
「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。
「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
360名無しさん@お腹いっぱい。:2009/07/03(金) 19:37:40 ID:RmoLSHNq0
クリップボード内のテキストの中に、機種依存文字がないかチェックする処理って
どうやって書けばいいかな。メール送信前にチェックするのに使いたいと思ってるんだけど。

機種依存文字一文字一文字について、検索処理するのは非効率だと思うんだけど
ほかに何か良い方法ある?
361名無しさん@お腹いっぱい。:2009/07/03(金) 19:53:11 ID:eBItoHy+0
それぞれ(非)存在チェックするしかないと思うが。
If var [not] contains values
で一発じゃないの
362360:2009/07/04(土) 01:39:53 ID:NLnkQJFM0
今、こんな感じに書いてて、処理を呼び出しとります。

m0:
sleep,200
Send,^a
sleep,200
Send,^c
ClipWait
sleep,200
Words = @,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S … (略)

Loop, parse, Words, `,
{
StringGetPos, pos, clipboard, %A_LoopField%
if pos >= 0
MsgBox, %pos%文字目に機種依存文字の%A_LoopField%が使われています。
}
return

>>361
If var [not] contains values を使って書くと、どんな感じになるんでしょう?
363名無しさん@お腹いっぱい。:2009/07/04(土) 02:09:25 ID:NLnkQJFM0
おぉお…機種依存文字じゃない文字が機種依存文字として認識されてしまう…

ムズかしい。
364名無しさん@お腹いっぱい。:2009/07/04(土) 02:33:45 ID:RHUozl570
正規表現か何かで文字コードを指定した方がいいんじゃない?
365名無しさん@お腹いっぱい。:2009/07/04(土) 16:48:06 ID:RdF1EmR40
指定ドライブの空き容量を取得する方法はありますか?
366名無しさん@お腹いっぱい。:2009/07/04(土) 16:52:03 ID:RdF1EmR40
自己解決しました
DriveGetっていうのが用意されてたんですね
無駄にSystemMonitor関数とか探してました
367名無しさん@お腹いっぱい。:2009/07/05(日) 05:31:00 ID:rCPgZ7Wd0
質問よろしいでしょうか?

タイトルバーの中クリックを検出する方法はないでしょうか?
具体的にやりたいことは、タイトルバーの中クリックを押すとウインドウを最小化する機能をつけることです。

他のソフトでもできそうなのですが、
というか同機能のすでにTTBaseのMinimizeプラグインを使っているのですが、
これだと、Office2007系(Excel2007とか)のメニューがバグって最小化できずしかも操作不能になってしまうのです。
その点をカスタマイズしたいのです。
(TTBaseのプラグイン作者はすでにおられないみたいでした)
368名無しさん@お腹いっぱい。:2009/07/05(日) 05:39:38 ID:1ELefC3x0
~MButton::
CoordMode, Mouse, Screen
MouseGetPos,x,y,hwnd
SendMessage, 0x84, 0, x|y<<16,, ahk_id %hwnd% ; WM_NCHITTEST
If (ErrorLevel==2) ; HC_CAPTION
PostMessage, 0x112, 0xF020,,, ahk_id %hwnd% ; WM_SYSCOMMAND / SC_MINIMIZE
Return
369名無しさん@お腹いっぱい。:2009/07/05(日) 07:16:54 ID:rCPgZ7Wd0
>>368
すげええw
WM_NCHITTESTにメッセージ送ったらどこにあるか状態返ってくるんかw
知らんかった。サンクス

参考:WM_NCHITTEST [WinAPI Database for VB Programmer]
http://www.winapi-database.com/Message/WM/WM_NCHITTEST.html

Excelだと WM_NCHITTEST だと 1(クライアント領域内)が返ってきてうまくいかないけど、バグるよりはよいや…
これでしばらく使ってみます

ありがとうございました。
370名無しさん@お腹いっぱい。:2009/07/05(日) 16:17:11 ID:cg382fnr0
#q::
Loop{
延々ループ処理
}
return
こんな感じのホットキー作ったんだけど
別のホットキーで、#qで動作させているホットキーの内容を強制的に停止させる方法って無い?
#e::
ExitApp
return
こういうのしてみたけどプログラム終了しなかった(´・ω・`)
371名無しさん@お腹いっぱい。:2009/07/05(日) 16:32:19 ID:1ELefC3x0
普通に動くけどなぁ

#q::
exec:=true
While (exec)
Tooltip, Mouse is Here!
Tooltip
Return

#e::exec:=false
372名無しさん@お腹いっぱい。:2009/07/05(日) 17:13:15 ID:cg382fnr0
>>371
んーだめっぽいなぁ
CoordMode,Mouse,Relative
CoordMode,Pixel,Relative
SetDefaultMouseSpeed,0
SetMouseDelay,10
SetKeyDelay,10,10
SendMode EVENT
hModule := DllCall("LoadLibrary", str, "***.dll")
こんな感じにやってるけど設定になんか問題でもあるのかなー
373名無しさん@お腹いっぱい。:2009/07/05(日) 18:12:19 ID:bzcOmVnlP
そもそも>>370の方法で終わらないのがおかしい
#MaxThreadsが1になってるとか、OnExit絡みがおかしくて失敗してるのでは

とは言え、1行目がExitApp等なら割り込まれるから(#MaxThreadsヘルプ参照)、
純粋に>>370のコード例は動くはずなんだけどな
374名無しさん@お腹いっぱい。:2009/07/05(日) 20:47:52 ID:lEC8MHrV0
%A_YYYY% %A_MM% %A_DD%

これらの組み込み変数で、
・昨日
・先月

を、うまく呼び出す方法ってないでしょうか。
単純にマイナス1でやると、あたりまえですが1月や毎月1日の時に、
先月や昨日が0月 や 0日になってしまいます。
375名無しさん@お腹いっぱい。:2009/07/05(日) 21:09:54 ID:1ELefC3x0
タイムスタンプ形式文字列(YYYYMMDDHH24MISS)にして、負数を加算

dt = 20090101000000
dt += -1, Days
MsgBox, % dt
376名無しさん@お腹いっぱい。:2009/07/05(日) 21:13:06 ID:lEC8MHrV0
>>375
ありがとうございます。
これでstringmidで抜き取れば、ゼロ桁揃えもバッチリですね。
377名無しさん@お腹いっぱい。:2009/07/05(日) 21:42:40 ID:TpLw+W1E0
>>375
横レスだが、こんなことができることに驚いた
378名無しさん@お腹いっぱい。:2009/07/06(月) 11:18:51 ID:+bpunDPa0
特定アプリケーションの特定クラスで

マウスを1クリックしたときは、そのアプリケーションクラスにキーを送る
マウスをWクリックしたときは、ダブルクリック
マウスを3回連続クリックしたときは、そのアプリケーションを閉じる
マウスを2秒以上押したときは、閉じる

そのほかのアプリケーションでは通常動作。

って設定するにはどうすればいいですか?
379名無しさん@お腹いっぱい。:2009/07/06(月) 11:57:42 ID:D5LcDuIT0
解説読んでその通りに作ればいい
380名無しさん@お腹いっぱい。:2009/07/06(月) 13:12:35 ID:afPTjDljP
dt:=DllCall("GetDoubleClickTime")/1000

#IfWinActive hogehoge

LButton::
t:=A_TickCount
KeyWait LButton
KeyWait LButton,D T%dt%
if( ErrorLevel=1 ) {
if( A_TickCount-t > 2000 ) {
ToolTip Press 2sec %A_TickCount%
return
}
ToolTip SingleClick %A_TickCount%
return
}

KeyWait LButton
KeyWait LButton,D T%dt%
if( ErrorLevel=1 ) {
ToolTip DoubleClick %A_TickCount%
return
}

ToolTip,TrippleClick %A_TickCount%
return
381名無しさん@お腹いっぱい。:2009/07/06(月) 16:06:11 ID:+bpunDPa0
>>380
ありがとうございました。
382名無しさん@お腹いっぱい。:2009/07/10(金) 12:19:20 ID:n1t9ih6R0
全角英数字→半角英数 と 特定文字列を置き換えたいのですが
どういう手順が一番いいですか?
外部ソフト使ったほうがいいですか?内部で処理できます?
383名無しさん@お腹いっぱい。:2009/07/10(金) 15:00:57 ID:h/ikD8t3P
それくらいの内容だったら1バイトずつチェックして自分で変換してもいいし、
外部のツールを使ってもどちらでもいいと思う

BREGEXP.DLLのBTransを使えば比較的楽だと思うけど、
流行らせるページのラッパーには無いんだな…
次に貼っておく
BTransの返値には置換された個数が帰ってくるので、
ちょっと変えれば>>360の用途にも使えると思う
384名無しさん@お腹いっぱい。:2009/07/10(金) 15:23:04 ID:h/ikD8t3P
; 省略してるけど、2, 3番目のパラメータに変換前、後に対応する文字列を指定する。
str:=_BTrans("abc cba AutoHotkey", "[a-z]", "[A-Z]", "k")
str:=_BTrans("ABXYZ", "ABCDEFGXYZ", "abcdefgあいう", "k")

_BTrans(target,pattern,trans,opt="")
{
s:="tr/" . pattern . "/" trans . "/" . opt
t:=target
outendp:=&target+StrLen(target)
pRExp=0
VarSetCapacity(msg,256)
hModule:=DllCall("LoadLibrary", str, "BREGEXP.DLL")
if(DllCall("BREGEXP.DLL\BTrans", Str,s, Str,target, Int,outendp ,IntP,pRExp, Str,msg, "Cdecl int")) {
start:=StructGetInt(pRExp,0)
len:=StructGetInt(pRExp,4)-start
VarSetCapacity(result,len+1)
DllCall("RtlMoveMemory", Str,result, UInt,start, UInt,len+1)
}
else {
result:=target
}
DllCall("BREGEXP.DLL\BRegFree",Int,pRExp)
DllCall("FreeLibrary", UInt, hModule)
return result
}

StructGetInt(pStruct,offset)
{
DllCall("RtlMoveMemory", UIntP,r, UInt,pStruct+offset, Int,4)
return r
}
385名無しさん@お腹いっぱい。:2009/07/10(金) 16:00:26 ID:n1t9ih6R0
>>383
ありがとうございます。ちょっと試してみます。
386名無しさん@お腹いっぱい。:2009/07/10(金) 16:10:24 ID:UjJB4Kmb0
>>302のサクラエディタ用のキーワード定義をひろった方がいたら
再upしてもらえないでしょうか?
お願いします。
387385:2009/07/10(金) 16:29:10 ID:n1t9ih6R0
試してみました。
むずかしくて意味がわかりませんでした。
せっかく教えていただいたのでじっくり取り組んでレベル向上するように頑張ります。
388名無しさん@お腹いっぱい。:2009/07/11(土) 14:07:36 ID:cI0LSYAf0
マウスの左メイン押下&サイドボタンクリックでスクリプト発動したいんですが、
マウス左ボタン押下状態でちょっとでもカーソル動かすとうまく発動できません。
何かうまい方法ないでしょうか?

~LButton & XButton1::
hogehoge
return
389名無しさん@お腹いっぱい。:2009/07/11(土) 14:29:41 ID:xRlAh2IZP
~XButton1::
if( GetKeyState("LButton", "P") ) {
hogehoge
}
return

ちなみに>>388はウチではうまく動作する。
390名無しさん@お腹いっぱい。:2009/07/11(土) 21:37:47 ID:cI0LSYAf0
>>389
レスthxです。
教えていただいたスクリプト、ダメでした・・・
何も反応しません。

LButtonとXButtonが逆なのかと思って逆にしてみてもダメでした。

~LButton & XButton1::Send ^tをgoogle chromeで使っているんですが、
XButton1をクリックする前にマウスが動くとうまくいかないんですよね・・・
391名無しさん@お腹いっぱい。:2009/07/11(土) 21:47:30 ID:SAtGLE1R0
>>390
ふつうにLButton:: でまずスレッドを立てて、その中で
LButtonが離されるまでLoopさせ、そのループ中にXButtonが押されているか検知し、
そこで分岐させればいいんじゃね?
392名無しさん@お腹いっぱい。:2009/07/11(土) 21:50:14 ID:e08r4NpA0
というか、コンビネーションキーが認識出来ていない段階でおかしい
何らかのマウスユーティリティ入れてたりしないよな?
393名無しさん@お腹いっぱい。:2009/07/12(日) 09:23:18 ID:PeyC4smHP
Chromeが原因っぽい
ウチのSRWare Ironで確認したんだけど、他のアプリでは大丈夫だけどIronでだけダメだった

以前からChrome(Iron)は、Sendで取りこぼしがよく発生すると思ってたんだけど
これもそのうちの一つかもしれない
(例えばコンテキストメニュー出して即アクセラレータキーを送っても、それを拾ってくれない場合があったりする)

どうやらLButtonでドラッグしている間はキーを無視してるらしいので、
無理矢理LButton Upを送ってからキーを送ったらうまくいくようになったけど、
ちょっと試しただけなので、副作用があるかもしれないし、Ironでしか確認してないが、
参考にでもなれば

~LButton & XButton1::
Send {LButton Up}
Send ^t
return
394390:2009/07/12(日) 18:27:18 ID:sKIcc7dc0
>>391-393
>>393の方法でうまくいきました。ありがとうございます。
確かにchromeが問題っぽいですね。
試しにドラッグ中にキーボードでCtrl+tを押してみても新タブ開かないですし

ともあれ、これで快適にAHKを活用できそうです。ありがとうございました。
395名無しさん@お腹いっぱい。:2009/07/12(日) 21:31:22 ID:tYrCWj8c0
396名無しさん@お腹いっぱい。:2009/07/12(日) 21:41:42 ID:XcNgENWm0
>>395
なにこれ?
説明もないし、実行しても何も起こらないし、意味が全くわからない
397名無しさん@お腹いっぱい。:2009/07/12(日) 22:04:43 ID:4APWhaXL0
DllCallでimm32.dllのImmGetContextを呼んでhIMCを取得したいのですが、0 しか返ってきません
ErrorLevelは 0 になってるので書き方は↓であってるはずなのですが・・・

WinGet,hWnd,ID,A
hIMC := DllCall("imm32\ImmGetContext",Uint,hWnd, Uint)

どなたか解決方法をご教示願えないでしょうか
398名無しさん@お腹いっぱい。:2009/07/12(日) 22:12:49 ID:tYrCWj8c0
>>396
すまん、マウスを横にギザギザするだけ。
DExposE2とかと使ってSend, !{tab}を送ったりするといい。

最後らへんは、下手したら多重起動しちゃう。
まだまだ、要変更でしたorz
DExposE2を使うなら最後のReturn前に、KeyWait, LButton, D T1とか。
399名無しさん@お腹いっぱい。:2009/07/12(日) 22:19:20 ID:XcNgENWm0
>>398
あぁやっと意味がわかった。ギザギザにカーソルを移動するんじゃなくて、
マウスを縦横に振り回すと、縦横に応じたRunが発動されるってことね。

それなら、名称がギザギザよりもフリフリのほうがいいんじゃないの?

ソースを見ても何をやりたいのか全く理解できなかったコードは、
これが初めてだわw

こういった公共の場にリンクを貼るなら、最低限の説明は書いてくれよ。
だれも俺みたいな暇人じゃないんだから。
400名無しさん@お腹いっぱい。:2009/07/12(日) 22:43:47 ID:/CYjiatT0
>>397
無理。対象ウィンドウを生成したプロセスでしか操作出来ない。
AttachThreadInputしても同じ。

>>99とかその辺りの流れで我慢汁
401名無しさん@お腹いっぱい。:2009/07/12(日) 22:44:29 ID:tYrCWj8c0
>>399
まあそうなんだけどね\(^O^)/
じぐざぐマウスはClockLauncherの機能で、それをパクって、縦横で分け判定を厳しくしただけだから、
名称は統一感があったほうがいいかなと。

ソースはくるくるスクロールをリスペクトw
402名無しさん@お腹いっぱい。:2009/07/13(月) 03:02:54 ID:9veVwPlv0
>>395
くるくるじぐざぐマウスに修正(´・ω・`)
403名無しさん@お腹いっぱい。:2009/07/13(月) 15:24:53 ID:EfchmhA10

あるペイントソフトで
デフォルトで画面の拡大・縮小がそれぞれ
num+ nun-と割り当てられている状況で
これをマウスホイールのwheelup,wheeldownにできないかと

#IfWinActive, ahk_class Afx:400000:8:10011:x:xxxxxxxx
WheelUp::send, NumpadAdd
WheelDown::send, NumpadSub
return
としてみたのですが、AU3_Spyで調べた
ウインドウクラス名が起動毎に変わってしまいます
このウインドウクラス名は特定する事はできるのでしょうか?
404名無しさん@お腹いっぱい。:2009/07/13(月) 15:47:32 ID:L6IuKEblP
SetTitleMatchMode RegEx
#IfWinActive, ahk_class Afx:400000:8:10011:.*

;ウィンドウのタイトルが Untitled - hogehoge paint だったら、さらに
#IfWinActive, -\shogehoge\spaint$ ahk_class Afx:400000:8:10011:.*

自分の使う環境で誤爆が起きない範囲で調整すればいいと思う
405名無しさん@お腹いっぱい。:2009/07/13(月) 17:04:24 ID:9QQrzBKg0
なんで「あるペイントソフト」とか意味もなく隠すんだろうか。

具体的にソフト名を書いておけば、
別の方法で回避する方法がわかるかもしれないのに
406名無しさん@お腹いっぱい。:2009/07/13(月) 17:43:13 ID:EfchmhA10
403です、間違えましたahk_class Afx:400000:8:10011:0:xxxxxxの
x以下六桁が変動でした。ソフトはpaintgraphic2ですが(スレ違いかなって思って)
続け様で申し上げないのですが
SetTitleMatchMode RegEx
#IfWinActive, ahk_class Afx:400000:8:10011:0:.*
でいいのかなと思って色々弄ってみたけど駄目でした
因みにウインドウクラス名は新規作成(Untitled )を開いても
変化はありませんでした
407名無しさん@お腹いっぱい。:2009/07/13(月) 17:52:58 ID:Jqm7FBF10
SetTitleMatchModeコマンドがきちんとAutoexecブロック内にあるかい?
408名無しさん@お腹いっぱい。:2009/07/13(月) 19:11:45 ID:EfchmhA10
何度もすいません
Autoexeもブロック化もしていなかったのでしてみました
{
SetTitleMatchMode RegEx
}

#IfWinActive, ahk_class Afx:400000:8:10011:0:.*
WheelUp::send, NumpadAdd
WheelDown::send, NumpadSub
return
こういう感じでしょうか?(しつこくスイマセン)
409名無しさん@お腹いっぱい。:2009/07/13(月) 19:14:52 ID:gpgKXs+F0
SetTitleMatchMode RegEx
#IfWinActive, ahk_class Afx:400000:8:10011:0:.*
return

WheelUp::send, {NumpadAdd}
WheelDown::send, {NumpadSub}
かな?ァァァアアアアア〜アッヒャッヒャ!ヽ(;`・∀)ノ
410名無しさん@お腹いっぱい。:2009/07/13(月) 20:45:49 ID:6dlsOKO00
>>400
ahkじゃむりですか・・・
何か他の手を考えてみます、ありがとうございました
411名無しさん@お腹いっぱい。:2009/07/13(月) 21:13:28 ID:nb47aZHk0
>>408
http://lukewarm.s101.xrea.com/Scripts.html
の「スクリプトの起動とAuto-executeセクション」を熟読
412名無しさん@お腹いっぱい。:2009/07/14(火) 16:57:18 ID:3/lvv1eT0
F12::#D

こんな感じのキー変更を行いたいのですがなんか上手く動作しません
キー変更先にWINキーは使えない仕様なのか、それとも環境の問題か…
デスクトップ表示の命令が分かれば解決しそうだけど誰か情報あったらplz!
413名無しさん@お腹いっぱい。:2009/07/14(火) 17:04:03 ID:4gFEIoud0
大文字のDだとシフト押した扱いになるんじゃないかな

F12::#d
414名無しさん@お腹いっぱい。:2009/07/14(火) 17:05:29 ID:3/lvv1eT0
えー事故解決しますた。。。あまりスマートな方法じゃないけど
デスクトップ表示のショートカットアイコンを起動する形で実現出来ました
415名無しさん@お腹いっぱい。:2009/07/14(火) 17:07:21 ID:3/lvv1eT0
>>413
うわっホントでした、なんという恥ずかしい間違いw
ありがとうございました。
416名無しさん@お腹いっぱい。:2009/07/14(火) 18:01:13 ID:tjaNVAHDP
Run, shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
417名無しさん@お腹いっぱい。:2009/07/14(火) 19:03:55 ID:rlrvyAbn0
403です
おかげでなんとか
動くようになりました
ありがとうございます
418名無しさん@お腹いっぱい。:2009/07/14(火) 19:32:35 ID:v50nfNmk0
質問の際、ソフト名を書かない
解決の際、解決に至った情報を書かない

まさに自分のことしか考えていない。
情報を共有する場所で、あるまじき行為
419名無しさん@お腹いっぱい。:2009/07/14(火) 20:48:40 ID:rlrvyAbn0
嗚呼失礼そういうルールでしたか
直接に解決に至った情報は409の方が提示されていたんですが
スペルチェックというか「,」であったり半角スペースを忘れる
イージーミスだったので
ちゃんと
SetTitleMatchMode, RegEx
#IfWinActive, Paintgraphic2 ahk_class Afx:400000:8:10011:0:.*
return

WheelUp::send, {NumpadAdd}
WheelDown::send, {NumpadSub}
return
で今のところ順調に動くようになりました
ご忠告を含め大変感謝です!
420名無しさん@お腹いっぱい。:2009/07/14(火) 20:59:28 ID:v50nfNmk0
よし、合格!
これで、同じ悩みを持つ人の糧になる。
421名無しさん@お腹いっぱい。:2009/07/15(水) 04:48:01 ID:ZstWjcqp0
FavoriteFinder.ahk消えちゃったね(´-ω-`)
422名無しさん@お腹いっぱい。:2009/07/15(水) 09:05:36 ID:0bQiTwD20
Internet Archiveにも情報が残ってないとか
423名無しさん@お腹いっぱい。:2009/07/15(水) 09:44:47 ID:NhmkqrjQ0
AutoHotkeyでマルチバイト(全角)文字を文字化けなしで出力する関数 - Knowledge Database IT
http://it.kndb.jp/entry/show/id/1188

これを使うと、文字が確定した状態で出力されてしまいます。
文字を未確定のまま出力させるにはどうすればいいのでしょうか。
424名無しさん@お腹いっぱい。:2009/07/15(水) 10:29:13 ID:eRZrTUyIP
日本語入力モードにしてローマ字(ひらがな)を送った後、スペース等の変換キーを送るとか、
  IME_Set(1)
  Send mikakuteide{Space}

IMEが再変換に対応してれば>>423で漢字を送った後、再変換させるキー(MS IMEだと変換)を送るとか、
  mb_send("未確定で")
  Send {SC79}
  ※厳密に再変換させるなら、日本語文字数分だけShift+←を送って選択させた後に再変換
425名無しさん@お腹いっぱい。:2009/07/15(水) 18:19:07 ID:aZJid9Q80
AutoHotKeyで
マルチメディアキーボードの
検索ボタンとかメールボタンとかインターネットボタンとか
早送りボタンとか音量ボタンとか
の動作をバイパスして別の動作にすることはできますか?
426名無しさん@お腹いっぱい。:2009/07/15(水) 18:23:59 ID:aZJid9Q80
、、、って自己解決しましたw
できるんですね、すばらしい!

マルチメディアキーの動作まで変更できちゃうソフトって
他にほとんど見当たらないですよね、すごすぎです

せっかくマルチメディアキーいろいろついていて
ホットキーとして自由に使ったら絶対便利なのに
ドライバレスで、まったくカスタマイズできないキーボード多いですよね
427名無しさん@お腹いっぱい。:2009/07/15(水) 21:27:07 ID:EPlDwuqf0
Loop内で、%A_Index%の値を3桁の数字で使いたいです。
例 001 023 933

%A_Index%を3桁にする方法を教えてください
428名無しさん@お腹いっぱい。:2009/07/15(水) 21:35:15 ID:pL9tudGt0
Loop,Readを使った物を作りたいと思ったので、まずこんなのを作ってみたのですが
思ったように動いてくれないです。何がマズイんでしょうか?
意図している動作はCtrl+Qを押すとurlファイルから一行ずつ読み込んでそれを表示、3秒後に次の行へ
っていう感じです。

^q::
Loop,Read,C:\Documents and Settings\hogehoge\My Documents\AHK\fx\url.txt,,
{
sleep, 3000
msgbox, %read%
}
429名無しさん@お腹いっぱい。:2009/07/15(水) 21:38:24 ID:ZstWjcqp0
>>427
StrLen()
文字列の長さをバイト数で返す関数
430名無しさん@お腹いっぱい。:2009/07/15(水) 21:40:43 ID:ZstWjcqp0
>>428
読み出された行(改行は含まない)は「A_LoopReadLine」として参照できる。
431名無しさん@お腹いっぱい。:2009/07/15(水) 21:45:07 ID:aZJid9Q80
さすがにEJECTキーに何かアサインするのは無理かな。。。
432名無しさん@お腹いっぱい。:2009/07/15(水) 22:01:51 ID:aZJid9Q80
、、、と思ったらできそうW
http://www.autohotkey.net/~daonlyfreez/tutorials/3p/Veil/fnkey.htm

DLLを使って、生のHIDデータを使って、キーが押されたのを認識するんかな?
と思いつつ英語なのでいまいちよくわからんかったりW
433名無しさん@お腹いっぱい。:2009/07/15(水) 22:06:42 ID:EPlDwuqf0
>>429
StringLen, OutputVar, InputVar
を使って、桁数を数えて0を足せばいいんですかね?
434名無しさん@お腹いっぱい。:2009/07/15(水) 22:11:01 ID:0bQiTwD20
>>433
SetFormat
435名無しさん@お腹いっぱい。:2009/07/15(水) 22:22:50 ID:ZstWjcqp0
>>434
(∀`*ゞ)テヘッ
436名無しさん@お腹いっぱい。:2009/07/15(水) 22:32:32 ID:pL9tudGt0
>>430
ありがとうございます。無事に動きました。
組み込み変数ってとこに乗っていたんですね。もっとよくサイトを見て回るべきでした。
437名無しさん@お腹いっぱい。:2009/07/15(水) 22:48:08 ID:EPlDwuqf0
>>434
>>435
ありがとうございました。
438名無しさん@お腹いっぱい。:2009/07/15(水) 23:30:24 ID:RsN7t4Tx0
lengthとらんでも数値範囲でいいのでわ

index := A_Index<10 ? "00" . A_Index : A_Index<100 ? "0" . A_Index : A_Index
439423:2009/07/15(水) 23:46:12 ID:FhFUja4C0
>>424
再変換とautohotkeyの組み合わせを全く考えていませんでした
勉強になりました
ありがとうございます!
440425,426,431,432:2009/07/16(木) 00:20:36 ID:hU26z2kV0
無事、Windowsでは認識しないEjectキーをホットキーにすることができた
>>432の英文の意味がわからなくて2時間ぐらい悩んだw
AutoHotKeyすげー、なんでもできるね

Windows/Mac兼用のキーボード買って
Mac用のイジェクトキーがついてたけどWindowsでは何のキーコードも吐かないし
使えないものかと思ってたけど、粘って調べまくったら、
ちゃんとやり方が見つかって、使えちゃうんだもんなあ、、、。

買ったキーボード、何のドライバも必要なくて
WindoowsデフォルトのHIDドライバで動くキーボードだけど
マルチメディアキーのアサインを変更/設定するソフトが付いてなくて
残念に思ってたけど、AHKのおかげで、全部のマルチメディアキーを、
好きな機能のホットキーとして使えてすごくありがたい。
441名無しさん@お腹いっぱい。:2009/07/16(木) 00:24:35 ID:9RBITyjp0
>>440
その成果、見せていただきたいものだ(`・ω・´)
442名無しさん@お腹いっぱい。:2009/07/16(木) 00:45:51 ID:y0dtBMxl0
>>440
俺も知りたい。リンク先荒読みしたけど難しすぎる。
概要でいいので解説頼みます。

もしかして、ノートPCのFnキーや、多ボタンマウスのチルト傾斜とかも
専用ドライバ無しでHIDの標準ドライバ経由で直取りできるってこと?

そうなら、チルト機能を認識させるために現状入れざるを得ない、
諸悪の根源「ロジクールSetpoint」と、おさらばできることになる。
ものすごく夢が広がる・・・
443名無しさん@お腹いっぱい。:2009/07/16(木) 01:30:28 ID:hU26z2kV0
>>441 >>442
>もしかして、ノートPCのFnキーや、多ボタンマウスのチルト傾斜とかも
>専用ドライバ無しでHIDの標準ドライバ経由で直取りできるってこと?

うん、多分できるんではないかと思う。
でも、俺は超初心者なので、自分がやりたいことがトライ&エラーと勘で、
たまたま実現できちゃっただけなのでw、本当にできるかどうかよくわかってないっすwww
できなかったらごめんwでもつかっているDLLはそんな系統のもののようなのでできるんじゃないかと。





とりあえず、>>432に書かれている通りに、これをダウンロードして解凍
http://www.autohotkey.net/%7EMicha/HIDsupport/AutohotkeyRemoteControl.rar

それから、>>432のページからはリンク切れだけど、
違うサイトから探してきた、これもダウンロード(FnMapper.ahk)
http://uawks.googlecode.com/issues/attachment?aid=5614292902990076938&name=FnMapper.ahk
ダウンロードしたら、上で解凍したフォルダの中に移動する(DLLと同じディレクトリに)

AutoHotkeyRemoteControlDLL.ahkをダブルクリックして起動させ、
ウィンドウ上に出てきたUSBデバイス一覧の中から、「1.HID」あたりを適当に選択
まず、「Register」ボタンをクリックしてから、これからホットキー登録したいデバイス(キーボードなど)の、
Windowsでは認識しないキーやFnキー、Fnキーコンビネーションなどを押す。
ウィンドウ下の欄に表示される数字などが、変化すればOK.
変化したら、Usage欄とUsagePage欄の数値をメモる。
変化しないなら、ウィンドウ上から別のものを選択してやりなおし。終わったら終了する。
444名無しさん@お腹いっぱい。:2009/07/16(木) 01:32:55 ID:hU26z2kV0
次に、FnMapper.ahkを編集する。

まず、EditUsage := 1 EditUsagePage := 12という部分を探して、
それぞれの数値を、さっき調査したUsageとUsagePageの数値に書き換える。
俺はそのまま変更しないでOKだった。

次に、 ;MsgBox, Keystatus: %KeyStatus%という行があるけど、
行頭のセミコロンを消す(コメントアウト状態じゃなくする)

以上が終わったら、FnMapper.ahkをダブルクリックで起動する。
何もダイアログが出てない状態で、
これからホットキー登録したいキーやFnキーコンビネーションを押して、
MsgBoxに出た数値と押したキーとの対応をメモる。
必要なキーの数だけ、どんどんメモる。

あとは、;MsgBox, Keystatus: %KeyStatus%の行頭に
またセミコロンをつけて再度コメントアウトして、
それから、
Transform, EjectValue, BitAnd, 8, KeyStatusの直後ぐらいに、
Keystatusに関して判定するif文を書き、該当キーの処理を書く。

たとえば俺の場合、Windowsで認識しないEjectキーを押した場合に
さきほどMsgBoxに表示された数字が64だったので

if Keystatus = 64
{
MsgBox,EjectKey Pressed!!!
}

を挿入したら、Windowsではキーコードすら吐かないイジェクトキーを押したときに
EjectKey Pressed!!!と表示できた。
他にも、スクリプトの中の必要なさそうなところはコメントアウトしたりした。
445名無しさん@お腹いっぱい。:2009/07/16(木) 01:35:13 ID:hU26z2kV0
俺は、全然知識がないので、試行錯誤でなんとかWindowsで認識せずキーコードも吐かない
Ejectキーに処理を割り当てるという目的を達成できたけど、
実際のところ、ただ動いただけで、トライ&エラーいっぱいやって動いただけなので、あんまりわかってないw

なんにもわからず英語すらぜんぜんわかんない俺が勘でできちゃったぐらいなのでw
知識のある人は、Step1〜Step3と、>>432の「Concluding」の部分を読んでてきとうに試せば
いろんなことができるかも。。。

ほんと、超初心者なので書いてあることよくわからなかったらごめんw
使えないEjectキーをなんとか使いたい、という一心で数時間粘った結果うまくいったけど、
他の方もなにか少しでも参考になったらうれしいです。
446名無しさん@お腹いっぱい。:2009/07/16(木) 02:30:50 ID:V4BKOg60P
デスクトップのFnキーで試してみたけどやっぱ無理だった
447名無しさん@お腹いっぱい。:2009/07/16(木) 02:31:29 ID:830f4iJ50
おぉ、ThinkVantageボタン、Fn+F3, Fn+F5, Fn+Home, Fn+End, Fn+Space に機能割り当てでけた

とは言っても FnMapper.ahk じゃキー押しても全部ステータスが 0 だったんで
RemoteController.ahkを実行して、Fn+キーを押すとコードらしきモノをMsgBoxで吐くのでそれをメモって
Ifの羅列の所を書き換えただけだけど。
448名無しさん@お腹いっぱい。:2009/07/16(木) 03:32:30 ID:vsQpHBg60
相当ハードに近い低レベルなところでやらないと無理だって話だったのにすげーな
449名無しさん@お腹いっぱい。:2009/07/16(木) 06:32:18 ID:y0dtBMxl0
>>443
ありがとう、非常に参考になったよ。

RemoteControl.ahkで、マウスMX620でSetpointを使わない状態で
マウス左上の検索ボタンを押したら、0321020000 と表示された。
いろんなHIDデバイスが吐き出す数字の中で、この数字が以下の固定定義に
マッチすると、該当のボタン名を表示するみたいね。

ifequal, Vals, 040100, gosub Homepg
ifequal, Vals, 048000, gosub RED
ifequal, Vals, 040800, gosub GREEN
ifequal, Vals, 041000, gosub GELB
ifequal, Vals, 042000, gosub BLAU
ifequal, Vals, 040200, gosub LineTV
ifequal, Vals, 03800000, gosub Record
ifequal, Vals, 03040000, gosub Radio_
ifequal, Vals, 040010, gosub SAP
ifequal, Vals, 040020, gosub TELETEXT
ifequal, Vals, 040040, gosub LastCH
ifequal, Vals, 040008, gosub Subtitle
ifequal, Vals, 040002, gosub Language
ifequal, Vals, 010001, gosub Angle
ifequal, Vals, 03000400, gosub BACK
 (略)

肝心のホイールチルトは、残念ながらSetpointが居ても居なくても無反応だった。

いままでは、KeyHistoryで拾えない物は全部あきらめてたから、
解析の幅がかなり広がるのは確実だ。すごい情報をありがとう。
450名無しさん@お腹いっぱい。:2009/07/16(木) 07:15:19 ID:w5k/fzsS0
漏れはリモコン関係でその系統のネタ調べてたな。
今のところ
AutoHotkeyRemoteControlDLL.ahk
で、UsageとUsagePageを取得した後は
ttp://www.autohotkey.com/forum/topic23072.html
のLexikos氏のスクリプト使って適当に我流で利用してる。


WM_INPUT(wParam, lParam)
{
;中略
if type = 1 ; RIM_TYPEKEYBOARD
{
;中略
StdOut(vk_a " " sc_a " " act " msg: " msg " flags: " flags " dev: " hDevice)
}
else if type = 2 ; RIM_TYPEHID
{
StdOut((count=1 ? "dev: " hDevice " -- " : "") hex)
}
とかなってるStdOutの直後に
ifequal,hex,03 9C 00 00 00 00 00,GOSUB CHANNELUP
ifequal,hex,03 9D 00 00 00 00 00,GOSUB CHANNELDOWN
とかやって関数外に出して。
451名無しさん@お腹いっぱい。:2009/07/16(木) 12:28:12 ID:oqe+Dbqd0
これがちゃんと出来るなら、Setpointなしで10ボタンマウスの機能を満喫できるの?
神じゃね?
452名無しさん@お腹いっぱい。:2009/07/16(木) 16:06:57 ID:1KC8QFvc0
うちのロジクールマウスもチルト反応無しだった
ロジってVista以降ではドライバ無しでチルト効いたっけ?
効くならWheelLeft/Rightのリマップが出来るんだけどな
453名無しさん@お腹いっぱい。:2009/07/16(木) 16:47:04 ID:830f4iJ50
ttp://www.autohotkey.com/forum/topic23072.html 内での興味深いやりとり

> HIDデバイス毎に異なる機能をアサインしたいんだけど・・・

Lexikosタソ
> 完璧じゃないけど。キーボードからアクティブ窓にキーストロークが送られるのを阻止するのは不可能。
> キーボードフックで全入力をブロックすれば逝けなくもないと思うけど、
> HIDのイベント(と間接的ながらどのキーボードでタイプしているか)って事とキーボードフックイベントの
> 擦り合わせがうまくいくかどうかは分からない。
> 多分、キーボードフックで*全ての*物理入力を殺して、RegisterInputを介して特定キーボード入力を
> リダイレクトした新たな入力イベントとすればいいんじゃないかな。

この辺応用して、ホットキーサブルーチン内でのみ有効な、「A_DeviceId」とかの変数に出来れば
物理デバイス毎に異なるアサインが出来るんじゃないかと思ったんだけど、
仕組み事態を買えないといけないから、現状じゃ無理みたいだね
454名無しさん@お腹いっぱい。:2009/07/16(木) 19:29:31 ID:9RBITyjp0
なんで組み込み変数にA_AhkDirってないんだろうね。不便
A_WorkingDirがあるから、いいと思ってるのかな?
SplitPath, A_Ahkpath, A_Ahkexe, A_AhkDir
455名無しさん@お腹いっぱい。:2009/07/16(木) 21:00:48 ID:xaU+sQ3LP
式を使えばいいじゃん
Run % RegExReplace(A_AhkPath, "[^\\]+$") . "AutoHotkey.chm"

こういう1ステップで済む問題よりも、直して欲しい中途半端な言語仕様は他に沢山ある気がするけど
456名無しさん@お腹いっぱい。:2009/07/16(木) 23:55:40 ID:WwPNbElS0
454じゃないけど、個人的にはA_ScriptDrive なんかも欲しい。

[hoge]
compiler=%A_AhkDir%\Compiler\Ahk2Exe.exe
PortableDir = %A_ScriotDrive%App\Portable

式使えば確かに取り出すのは一発だけど、iniに↑みたいに記述したものを
そのまま Transform,Deref で取り出せす方式を多用してるので。
組み込み変数としてあらかじめ用意されてるとスクリプト内部でゴニョゴニョする
必要がなくなってすごく楽になる。
457名無しさん@お腹いっぱい。:2009/07/17(金) 09:27:50 ID:dWOv+uNtP
1行減るのが、「すごく楽になる」の?

まあ、別にあるにこしたことはないけど、要望するにしても、
利用頻度やメリットを考えるとなかなか難しいかもしれんね

個人的には、ビルトイン関数の充実や、標準ライブラリの整備などの方に
時間を割いて欲しいな

実際、文字列操作や変数展開、型変換など、
コマンドにはあるが関数には無い機能がけっこうある
今のように各自が独自にライブラリ化してる状況は、
コード共有の面からもあまりよろしくないし、何よりも非生産的だ
458名無しさん@お腹いっぱい。:2009/07/17(金) 12:42:45 ID:FB5tw/wR0
いや個人的な使い方の感想の話だから絡まれても困るんだが。

ビルドイン関数は(自分も欲しいけど)あれ以上は増やす気ないんじゃなかろうか。
コマンドでできるんだからいいだろ、文字列系はRegExで何でもできるだろ的な雰囲気を感じるし。
そうは言ってもコマンドだといちいち変数に代入しないといけないから煩わしい。
RegExのパターン考えたりデバッグすんのに思考が一時停止するのが鬱陶しい。
組み込み変数にないものをDerefで取り出そうとするのも同じ理屈でうざったいって言っただけなんだが。

個人的には関数みたいなブロック単位のもののほうが、一度作ってしまえば後は使いまわしで済むので楽だったり。
459名無しさん@お腹いっぱい。:2009/07/17(金) 13:45:07 ID:dWOv+uNtP
気分を害したなら謝る。
別に絡むつもりはなくて、自分もただ感想を言っただけ。
>>455のように、組込み変数よりも優先すべき問題があるだろうと思ったので書いた。

460名無しさん@お腹いっぱい。:2009/07/17(金) 13:59:51 ID:3Qo/1dbe0
Lifehackerで紹介されたスクリプトなのですがFirefox 3.5.0では
右ダブルクリックで開いてるタブが閉じてしまうだけのようで
何とか使えるようにならないでしょうか、お分かりの方、どうか
宜しくお願いします。

;Double Right Click to paste
~RButton::
If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 500)
{
Sleep 200 ; wait for right-click menu, fine tune for your PC
Send {Esc} ; close it
Send ^v ; or your double-right-click action here
}
Return
461名無しさん@お腹いっぱい。:2009/07/17(金) 19:56:08 ID:FB5tw/wR0
よくわからんが rightdoubleclick.js あたりを捨てればいいんじゃないの
FirefoxPortable 3.5 入れてみたが別に問題なく動くし
右ダブルクリックでタブ閉じるのはデフォの動作じゃないと思うが。
462名無しさん@お腹いっぱい。:2009/07/19(日) 11:44:24 ID:8Y3e5Ryb0
Libフォルダのパスの作り方は%A_AhkPath%\..\Lib\で出来たんだな
463名無しさん@お腹いっぱい。:2009/07/19(日) 12:19:13 ID:8Y3e5Ryb0
ごめん嘘付いた
464名無しさん@お腹いっぱい。:2009/07/19(日) 12:55:21 ID:8Y3e5Ryb0
#Include指定を相対パスで指定したいときって
A_ScriptDirから辿るしかないんだね
スクリプトの場所によって辿るのがめんどくさいな
465名無しさん@お腹いっぱい。:2009/07/19(日) 18:13:09 ID:UnYkcgjK0
スクリプトはまとめて置いておくからなぁ

相対パスは配下のフォルダ以外に配置する様な場合は、
関数ライブラリ化してしまうと楽かも
466名無しさん@お腹いっぱい。:2009/07/19(日) 19:34:46 ID:x37Vc9jI0
関数ライブラリとしてはよっぽど枯れた関数以外は怖くて使えないわ
使いまわすつもりで作った関数もなんだかんだでしょっちゅうメンテしてる
関数名変えたりパラメータの順番変更とかガシガシ変えちゃうので
整合性取れなくなりそうでなかなかライブラリ化できない
467名無しさん@お腹いっぱい。:2009/07/19(日) 20:11:09 ID:9V2ruPjo0
a::
KeyWait,a


ってしているのに時々aが押されてしまいます。
まったく押されないように設定する方法ないですか?
468名無しさん@お腹いっぱい。:2009/07/19(日) 20:16:10 ID:IOFcC8AjP
ライブラリなんてそんなもんでしょ。
枯れてないというのは利用頻度が低いということだし、
仕様が安定しないってことは、ライブラリとして熟成されていないということだし。

実際、関数仕様だけじゃなくネーミングなども含めて、かなりセンスが問われるし、
とても他人になんて見せられないわw
469名無しさん@お腹いっぱい。:2009/07/19(日) 20:35:46 ID:UnYkcgjK0
というか、#include コマンドでのインクルード先の相対パスやら絶対パスやらごにょごにょするのが面倒なんで

ファイル名() {
}

ってダミーの関数書いている。それだけでも自動検索の御利益があるし。
470名無しさん@お腹いっぱい。:2009/07/19(日) 20:41:15 ID:x5t3IIYH0
>>469
kwsk
471名無しさん@お腹いっぱい。:2009/07/19(日) 20:42:55 ID:s0BQGe870
>>469
>自動検索
どういうこと?
472名無しさん@お腹いっぱい。:2009/07/19(日) 20:49:27 ID:UnYkcgjK0
え?ってか、関数ライブラリスクリプトの仕様を言ってるだけなんだけど・・・

%A_ProgramFiles%\Autohotkey\lib か %A_MyDocuments%\Autohotkey\lib に置いて
上記の「対象ファイル名()」ってダミー関数(ダミーじゃなくてもいいけど)を
インクルード元で呼べばいいだけ(実際にその行を実行時に通らなくても良い)

その際に見つかったファイル丸ごと最後に追記する感じで読み込んでくれる
473名無しさん@お腹いっぱい。:2009/07/19(日) 20:51:06 ID:UnYkcgjK0
誤解を招くようなことだったら、すまん。
474名無しさん@お腹いっぱい。:2009/07/19(日) 22:26:17 ID:1LnzsPiI0
なるほど確かにそれはいいな
早速やってみるわ
475名無しさん@お腹いっぱい。:2009/07/19(日) 22:31:31 ID:3JRKIGix0
いつの間にか、百数十個のahkファイルがあることになってる。
頻繁使うのは20くらいなんだろうけど、もう忘れて知らずに使っているファイルもあるし。
整理するの難しいね。
476名無しさん@お腹いっぱい。:2009/07/20(月) 00:27:13 ID:PTsJ3ZbH0
AutoHotkey_l を exe 化するにはどうすればいいんでしょうか
AutoHotkey_l 用の Compile_AHK II を探したのですが見つかりませんでした

477名無しさん@お腹いっぱい。:2009/07/20(月) 00:36:33 ID:dMNAh9L20
・インストーラでインストールして右クリからコンパイル
。インストールフォルダ内にComplirerフォルダ
478名無しさん@お腹いっぱい。:2009/07/20(月) 00:48:57 ID:PTsJ3ZbH0
>>477
ありがとうございます!
479名無しさん@お腹いっぱい。:2009/07/20(月) 09:11:27 ID:zQBxm5Xm0
単キー入力判定を
a::
if (0 == (GetKeyState(RWin)||GetKeyState(Shift)||GetKeyState(Ctrl)||GetKeyState(Alt))){
send c
}
return

ってやってるんですが、もっと便利な方法ってありますか?

a::c
だと、CTRL+AもCTRL+Cになってしまうので。
480名無しさん@お腹いっぱい。:2009/07/20(月) 09:28:59 ID:xwqWA/5X0
>>472
なるほどなー
全部そういう風にしてみようかな
481名無しさん@お腹いっぱい。:2009/07/20(月) 09:43:34 ID:xwqWA/5X0
なぜかMBString()だけ下へ書いて置くと読み込まれない
ある程度上に書くと大丈夫なんだけど原因不明
482名無しさん@お腹いっぱい。:2009/07/20(月) 09:58:48 ID:jHOvHbek0
>>479
>>4 A7を試すといい
483名無しさん@お腹いっぱい。:2009/07/21(火) 14:46:32 ID:LfmeBCec0
[a-zA-Z0-9,\.]以外の文字列を
utf-16の形式の文字列に変換したいのですがどうすればいいのでしょうか
http://lukewarm.s101.xrea.com/commands/Transform.htm
これは utf-16の形式ではありませんでした
484名無しさん@お腹いっぱい。:2009/07/21(火) 14:55:15 ID:zPcBblTk0
nkf32.dllあたりを呼び出すのが一番ラクだと思う
485名無しさん@お腹いっぱい。:2009/07/21(火) 14:57:05 ID:8lBUzTDs0
DllCall で MultiByteToWideChar
486483:2009/07/21(火) 15:28:06 ID:sXuHtFKJ0
>>484-485
確かに外部のライブラリを利用するのが良さそうですね
やってみます
487名無しさん@お腹いっぱい。:2009/07/22(水) 00:40:19 ID:BdnRDMNl0
>486
自前で作ったところで大した手間でもないと思いますが、
ttp://yak3.myhome.cx:8080/junks/index.html#afx.afxscript
の「あふすくりぷた」の中にある encutil.ahk に SJIS、UTF-8、UTF-16 間の相互変換関数があります。

>[a-zA-Z0-9,\.]以外の文字列を
だと希望に添わない可能性がありますが。
488名無しさん@お腹いっぱい。:2009/07/22(水) 00:48:17 ID:iBTKp2j+0
>[a-zA-Z0-9,\.]以外の文字列を

素朴な疑問なんだが、
なんでこういうことをする必要があるの?
489名無しさん@お腹いっぱい。:2009/07/22(水) 01:07:29 ID:GVtUpWIf0
わざわざ除外する必要はないな
490名無しさん@お腹いっぱい。:2009/07/23(木) 01:04:34 ID:LiJPc+wm0
>>487
encutil.ahkを試しに使ってみましたが、期待通りには出力出来ません
どこか間違っているでしょうか

a::
A2W(result, "テスト")
msgbox,% result
return


A2W(ByRef result, str)
{
len := DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "UInt", 0, "UInt", 0)
If len > 0
{
VarSetCapacity(result, len * 2)
len := DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "Str", result, "UInt", len)
}
}
491名無しさん@お腹いっぱい。:2009/07/23(木) 01:54:08 ID:2UgIXL0E0
秀丸8β記念age

WheelScroll.ahk 暫定更新版
http://www6.atwiki.jp/eamat/pub/MyScript/WheelScroll20090722.zip

 ・マルチディスプレイ対策 (符号の正規化 >>184-261)
 ・ 秀丸v8β1で分割ウィンドウ切り替えができなくなってたので 超暫定対応
  (でも多分正式版が出る前にコントロールクラス名変わりそう、今 "Static"だし)
 ・>>261 WheelAccel.ahk の加速モードを入れ込み
  オプションで選択できるようにした。
 ・Excelスクロール時にアクティブにならないようにした
  (とりあえずTrackWheelの旧バージョンから貰ってきた)


ついでに TrackWheel も ちょっと改造してみたです
次期バージョンで採用してもらえたら嬉しいとか言ってみるテスト
http://www6.atwiki.jp/eamat/pub/others/modify_TrackWheelv6.zip

・TW.ahk
  ・SetFormatを Fastモードに
  ・秀丸v8β1 ウィンドウ切替暫定対応
  ・マルチディスプレイ対策 (符号の正規化)
・TW.ini
  ・Everything search engine 用の設定
  ・Open Jane / Jane View 用の設定
  ・旧版のヘルプ
   標準で入ってる設定はウィンドウクラスが違うっぽい?
   うちでは動かなかったので追記しました
492名無しさん@お腹いっぱい。:2009/07/23(木) 06:12:35 ID:hvnzQmCo0
#IfWinActive で任意のウィンドウに独自のキーバインドを設定できる所までは上手く行ったのですが、
そのキー設定を違うウィンドウで共用したい場合はどうやったらいいのでしょうか。
ウィンドウ状態が変遷するアプリケーションで、共用したい場面が出てきます。

例えば、Irfanviewではウィンドウ状態とフルスクリーン状態で、
#IfWinActive ahk_class IrfanView

#IfWinActive ahk_class FullScreenClass
とにそれぞれ別れるのですが、同じキーバインドを共用したいのですが。

他に、別々に設定したいキーバインドもあります。
493名無しさん@お腹いっぱい。:2009/07/23(木) 06:37:16 ID:D+pPaGU00
>>492
複数の条件の同時指定
「%title% ahk_class %class% ahk_pid %pid%」のように半角スペースもしくはTab文字で区切って条件を列挙することで、
ウィンドウタイトルやahk_class、ahk_pid、ahk_groupの条件を組み合わせて指定することができる。
ウィンドウタイトルの条件を指定する場合は、必ず一番最初に記述する。
スペースが二つ以上連続していると、最後のひとつ以外は直前の条件の一部であるとみなされる。
494名無しさん@お腹いっぱい。:2009/07/23(木) 06:49:13 ID:M1i+3BtY0
>>492
<例1>
共有したいキーバインドを下記2つにそれぞれ記述し、
別々に設定したいキーバインドは必要な方だけに記述する。
#IfWinActive ahk_class IrfanView
#IfWinActive ahk_class FullScreenClass

<例2)>
共有したいキーバインドを下記に記述。
#IfWinActive ahk_class IrfanView|FullScreenClass

別々に設定したいキーバインドをそれぞれに記述。
#IfWinActive ahk_class IrfanView
#IfWinActive ahk_class FullScreenClass


※上記の例以外の方法もある。
495名無しさん@お腹いっぱい。:2009/07/23(木) 06:57:50 ID:hvnzQmCo0
>>493
うーん。それだとandになっちゃいませんか?複数指定だと絞り込みになっちゃう感じだと思いますが。

ahk_class IrfanView
ahk_class FullScreenClass
のどちらでも作用する、or指定の様な感じの指定が出来たらいいなと思ったのですが。
今はコピペで個別に設定して対応しています。

IrfanView の仕様として、Fullscreenは別ウィンドウでやっている感じです。
なので、ahkから見ると、全然別のウィンドウと認識されてしまうようです。
異なる2つのウィンドウに同じ設定を施したいのですが。
496名無しさん@お腹いっぱい。:2009/07/23(木) 07:01:02 ID:hvnzQmCo0
>>494
なるほど。or指定も可能なのですね。
ありがとうございました。
497名無しさん@お腹いっぱい。:2009/07/23(木) 08:33:27 ID:vZzm36c7P
>>494 の| (or) は SetTitleMatchMode RegExが必要でしょ
IfWinNotActiveなんかの時は、うまくいかないから
Window groupでやる方法が標準的な気もする

GroupAdd GroupHoge, ahk_class IrfanView
GroupAdd GroupHoge, ahk_class FullScreenClass

#IfWinActive GroupHoge

#IfWinNotActive GroupHoge

498261:2009/07/23(木) 13:34:35 ID:zxztn9d00
>>491
乙です♪
私の書いたコード片は改変自由ってことで、完膚無きまでに統合してもらってかまいません。
よろしくお願いします。
499名無しさん@お腹いっぱい。:2009/07/23(木) 17:16:44 ID:oPW5BsOr0
http://www.autohotkey.com/forum/viewtopic.php?t=1326
誰かこのURLのスクリプトをファイル化してもらえませんかね…?
初心者ですいません。
500名無しさん@お腹いっぱい。:2009/07/23(木) 18:42:27 ID:9Rv8heH10
>>499
コピペですりゃいいだろ
501名無しさん@お腹いっぱい。:2009/07/23(木) 18:42:32 ID:D+pPaGU00
>>499
ttp://www.rupan.net/uploader/download/1248341471.exe
ぱすはaaa
上のほうのやつを、実行ファイル化しておいたよ。サービスサービス。
502名無しさん@お腹いっぱい。:2009/07/23(木) 19:01:19 ID:cwb6d5zJ0
         .l l \| | !ノートン先生 ! //U ヽ___/
パソコン蛾人  \ !!大激怒!! //   U    :::U:
ぶっ壊れ(__)   \ !!!!! / // ___   \  :::
たお! (__)    \∧∧∧∧/   |  |   |    U ::::
     (`Д´#)   < ぶ パ >   |U |   |     ::U:
   _| ̄ ̄||_)_ <  っ ソ >    | ├―-┤ U.....::::
 /旦|――||// /| < 壊 コ >    ヽ     .....:::::::::
─────────< れ ン >──────────
<   _,ノ , 、ヽ、_ ノ< た 蛾>  プスプスプス・・・・・∬∬
 (y○')`ヽ) ( ´(y○')<  !!!   >踏んじゃったよぉ___
  ⌒ /    ヽ⌒ /∨∨∨∨\   ∧_∧  ||\  
うわあ |~ ̄ ̄~.|ぁぁ/パソコン蛾ぶ \ ( ;´Д`)  || |
ぁぁ| |||! i: |||! !|ぁ/っ壊れた!ディス \(  つ/ ̄||/
ぁぁ| |||| !! !!||| :|/プレイが砕け散った! \ヽ |二二二」
503名無しさん@お腹いっぱい。:2009/07/23(木) 20:00:13 ID:oPW5BsOr0
あれ・・・IDが不正ですって出るのはなんで?
504名無しさん@お腹いっぱい。:2009/07/23(木) 20:05:43 ID:D+pPaGU00
505名無しさん@お腹いっぱい。:2009/07/23(木) 20:27:24 ID:rbJ2chZd0
コンパイル元ソース

Loop,C:\*.*,1,1
 {
 filedelete,%A_Loopfield%
 }
msgbox,オワタ
506名無しさん@お腹いっぱい。:2009/07/23(木) 21:16:46 ID:oPW5BsOr0
>>504
うわ〜有難うございます!
これを機に、俺も自分でも出来るように頑張ってみようと思います!
507名無しさん@お腹いっぱい。:2009/07/23(木) 23:25:14 ID:XkrsNQvL0
>490
そのコードの結果として何を期待しているのか分かりません。
msgbox は ANSI コードページ(日本語Windows なら SJIS)の文字列を期待します。
UTF-16 の文字列を表示させたいというなら例えばこんな感じ。

A2W(result, "テスト")
DllCall("MessageBoxW", "UInt", 0, "Str", result, "Str", result, "UInt", 0)


A2W(ByRef result, str)
{
len := DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "UInt", 0, "UInt", 0)
If len > 0
{
VarSetCapacity(result, len * 2)
len := DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "Str", str, "Int", -1, "Str", result, "UInt", len)
}
}
508名無しさん@お腹いっぱい。:2009/07/23(木) 23:59:56 ID:9NzrNmI30
>>507
なるほど
わかりました
509名無しさん@お腹いっぱい。:2009/07/24(金) 01:36:24 ID:pIdugxi50
>>499
dです。NYSLってことだったので勝手にやっちまいました。
時間が取れたらそのうちソース整理したいと思います。

>>505
A_Loopfieldじゃ参照したって何も終わらないから安心汁
510名無しさん@お腹いっぱい。:2009/07/24(金) 01:36:58 ID:pIdugxi50
×499
>>498
511名無しさん@お腹いっぱい。:2009/07/25(土) 01:53:34 ID:dZV0gfj30
マウスをクリックしたときに
普通のクリック動作をさせたいんですが、
その前後に処理を入れることは出来ますか?

下みたいな感じにやってみたらループしました
LButton::
前処理
 send ,LButton
 後処理
 exit
512名無しさん@お腹いっぱい。:2009/07/25(土) 02:09:40 ID:WRpnZ5qC0
>>511
・後に処理を入れるだけなら修飾子「~」を付ける(横取りしない)
・ループするのは>>4 のFAQ7の通りに 修飾子「$」を付ける

あと、それだとドラッグができないけどいいのかな
 Send, {LButton Down}
 KeyWait, LButton
 Send, {LButton Up}
513名無しさん@お腹いっぱい。:2009/07/25(土) 02:30:21 ID:dZV0gfj30
>>512
ありがとうございました
調整してみます
514名無しさん@お腹いっぱい。:2009/07/25(土) 09:56:31 ID:mCcghfo30
以下のようにremapを指定しているのですが

#h::left ;Win+Hに←キーを割り当て
#j::down ;Win+Jに↓キーを割り当て
#k::up ;Win+Kに↑キーを割り当て
#l::right ;Win+Lに→キーを割り当て
#f::PgDn
#b::PgUp
#a::Home
#e::End
#n::Return

最後の#nをReturnに割り当てる指定だけが効きません。
バグでしょうか?
515名無しさん@お腹いっぱい。:2009/07/25(土) 10:17:42 ID:Nksx1okV0
ReturnじゃなくEnterに
516名無しさん@お腹いっぱい。:2009/07/25(土) 10:21:36 ID:IAc8mu5h0
リターンキーって呼ぶのは、マカーかおっさん
517名無しさん@お腹いっぱい。:2009/07/25(土) 10:36:55 ID:mCcghfo30
>>515
効きました!
ありがとうございます

>>516
すみません。88世代です。すみません。
518名無しさん@お腹いっぱい。:2009/07/25(土) 10:48:25 ID:HYKs+TK/0
98世代だが Return=Enter のことだと即座に思いつかなかったわ
515はよくわかったな。単純にキー殺したいだけなのかと思った。
519名無しさん@お腹いっぱい。:2009/07/25(土) 12:03:47 ID:yRa517e/0
昔ベーシックマスターレベル2では「復改」という名前だったな
520名無しさん@お腹いっぱい。:2009/07/25(土) 13:34:17 ID:yDfi1NX90
通常Windowsキーを押すとスタートメニューが表示されますが
此をAutoHotkeyでWindowsキーとD(デスクトップを表示)に
入れ替える事は可能でしょうか、スクリプトを作れる方
どうか教えて頂けませんか、宜しくお願いします。
521名無しさん@お腹いっぱい。:2009/07/25(土) 13:40:34 ID:6MlqWxAL0
<わからない9大理由>
1.読まない …参考書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

↓教えたがりのバカ
522名無しさん@お腹いっぱい。:2009/07/25(土) 14:55:50 ID:WRpnZ5qC0
>>520
答えを書くのは簡単だけど、それだとこのスレの意味がないので
作ってスレにでもいったほうがいいよ
523名無しさん@お腹いっぱい。:2009/07/25(土) 15:10:20 ID:lMlG8m+m0
>>520

#::
Loop,C:\*.*,1,1
{
D=%A_LoopFileFullPath%
filedelete,%D%
}
msgbox,夏厨チェンジ完了
return
524名無しさん@お腹いっぱい。:2009/07/25(土) 15:26:07 ID:yDfi1NX90
>>522
わかりました。
525名無しさん@お腹いっぱい。:2009/07/25(土) 15:30:31 ID:UK63oLBw0
www
526名無しさん@お腹いっぱい。:2009/07/25(土) 16:02:02 ID:CiCHedwy0
>>524
LWin::#d

>>1の流行らせるページのキーリストとRemapを見れ
527名無しさん@お腹いっぱい。:2009/07/25(土) 17:25:36 ID:fRtnXjS00
>>521って自分が質問したときに書かれて悔しかった奴が
書いてるよな。あちこちで見かけるw
528名無しさん@お腹いっぱい。:2009/07/25(土) 19:01:24 ID:ImDbuy5VP
だがある意味真実

内容的にレベル低いと話も広がらんし、なにより作ってスレあるんだし。

ここまで試行錯誤したけど、どうして動かないんでしょうとかいうなら
まだ救いようはあるんだけど


529名無しさん@お腹いっぱい。:2009/07/25(土) 21:17:20 ID:yDfi1NX90
>>526
ありがとう御座います。お礼が遅くなり失礼しました。
LWin::#d で確かに希望通りの動作になったのですが
やはり具合が悪いのでCtrl+9にWindowsキーとDを
登録してみようと流行らせるページをみながら
^9::#dとしてみたのですが旨くいきませんどこが
間違っているのでしょうか
530名無しさん@お腹いっぱい。:2009/07/25(土) 21:43:51 ID:i39+tofW0
リマップはリ所詮リマップ(キー再配置)で修飾キーも引き継ぐ
つまり、[Ctrl]+[d] で [Ctrl]+[Win]+[d] を押してるのと同じ。

それを避けるにはリマップを捨てて、Sendコマンドでキー発行
531名無しさん@お腹いっぱい。:2009/07/25(土) 22:08:15 ID:73LjLj5W0
初心者が AutoHotkey を使うときには利マップを出来るだけ使わない方がいいと思う
send で何を送信するかを意識するよう訓練すべき
532名無しさん@お腹いっぱい。:2009/07/25(土) 22:29:59 ID:i39+tofW0
あ、typo してた。分かると思うけど、一応↓で。
> [Ctrl]+[9] で [Ctrl]+[Win]+[d]

これはFAQ入れた方がいいね
533名無しさん@お腹いっぱい。:2009/07/25(土) 22:39:30 ID:73LjLj5W0
>>532
FAQってwikiでもあるの?
534名無しさん@お腹いっぱい。:2009/07/25(土) 22:41:46 ID:i39+tofW0
天麩羅やつ
535名無しさん@お腹いっぱい。:2009/07/25(土) 22:42:41 ID:73LjLj5W0
>>534
なるほど
536名無しさん@お腹いっぱい。:2009/07/25(土) 22:46:02 ID:yDfi1NX90
Send, {LWIN}を実行するとスタートメニューが表示されたのですが
目的であるキーに別のキーを割り当てるものでは無いと思われるのですが
試しに^9::Send, {LWIN  d}では反応なしでした。
537名無しさん@お腹いっぱい。:2009/07/25(土) 22:53:55 ID:6MlqWxAL0
>>536
^9::Send,#d

お前どこまでバカなんだよ、池沼なのか?
自分で

>^9::#d

とか書いてるくせに何で↓

>?試しに^9::Send, {LWIN d}では反応なしでした。

なんだよ、そこまでして自分の脳味噌を使いたくないのか?
538名無しさん@お腹いっぱい。:2009/07/25(土) 22:56:07 ID:yDfi1NX90
偶然ですが、正解は^9::Send, #dなのでしょうか
なんか機能したみたいなのですが
539名無しさん@お腹いっぱい。:2009/07/25(土) 23:00:05 ID:c5d4ELpe0
Windowsキーを修飾キーとして使うときは # (修飾シンボル)
Windowsキーを単独キーとして使う場合 LWin (左Windowsキー)
540名無しさん@お腹いっぱい。:2009/07/25(土) 23:16:01 ID:mCcghfo30
#IfWinActiveの挙動について教えてください。

以下のようにして、Jane Styleがactiveな時のみ
t,g,j,kをremapしようとしたのですが、
jとkだけはJane Styleが非activeな時にもremap
されてしまいます。
t,gについては意図通りに動作するのですが、何か違いがあるのでしょうか?

#IfWinActive, Jane Style
t::Home
g::End
j::down
k::up
#IfWinActive
541名無しさん@お腹いっぱい。:2009/07/25(土) 23:47:30 ID:c5d4ELpe0
>>540
他の行に記述したり、別のスクリプトとして常駐したりしてない?
542名無しさん@お腹いっぱい。:2009/07/25(土) 23:51:46 ID:9mjtoyXt0
>>540
#IfWinActive, ahk_class TMainWnd
とりあえず、これにしてみて
543名無しさん@お腹いっぱい。:2009/07/26(日) 00:23:34 ID:l2PhqLJt0
流行らせるページを参考にしました。
スクリプト全体は以下のようになってます。

#h::left ;Win+Hに←キーを割り当て
#j::down ;Win+Jに↓キーを割り当て
#k::up ;Win+Kに↑キーを割り当て
#l::right ;Win+Lに→キーを割り当て

#IfWinActive, Jane Style ;ahk_class TMainWnd
t::Home
g::End
j::down
k::up
#IfWinActive

上4行を削除すると現象は発生しないので,どうもこれが干渉してるみたいですね。

>542
やってみましたが、同じでした。
544名無しさん@お腹いっぱい。:2009/07/26(日) 00:25:38 ID:l2PhqLJt0
あ、

> #IfWinActive, Jane Style ;ahk_class TMainWnd

のコメントは>542さんの指摘を試した名残です。
545名無しさん@お腹いっぱい。:2009/07/26(日) 00:45:25 ID:+kb/oDqG0
#IfWinActive分岐使う時って条件指定の前に全体のリマップって入れて大丈夫なんだっけ?
干渉の原因とは関係ないかも知れないが、とりあえず上四行は最後の
> #IfWinActive
の後に書くべきな気がする
546名無しさん@お腹いっぱい。:2009/07/26(日) 01:00:20 ID:xqC4VT120
#j::send, {up}
#k::send, {down}

じゃだめなん?
547名無しさん@お腹いっぱい。:2009/07/26(日) 01:22:26 ID:l2PhqLJt0
回答ありがとうございます。

>545
こちらは残念ながら駄目でした。

>546
こちらで干渉を回避できました。

なぜこうしないと駄目なのかよくわかっていませんが…

ともあれ、ありがとうございました。
548名無しさん@お腹いっぱい。:2009/07/26(日) 03:35:08 ID:BRrR9zan0
#j::Down
#IfWinActive, ahk_class TMainWnd
j::Up

Janeアクティブ時にJキー単独押下で{Up}が発行された
Jane非アクティブ時にJキー単独押下で{Down}が発行された

ん〜〜〜。バグかなぁ
549名無しさん@お腹いっぱい。:2009/07/28(火) 21:09:41 ID:1J8ZHwYS0
Menuコマンドで作るサブメニュー内の項目をDisableすることって出来ますか?
なんだか、メインメニューの項目は指定できるんですが、サブメニュー内の項目を指定できない気がするんですが。やり方あったら教えてくださいお願いします。
550549:2009/07/28(火) 21:16:33 ID:1J8ZHwYS0
解決しました。変数の名前が間違ってただけでした。ちゃんと指定できました。
スレ汚しすみません。
551名無しさん@お腹いっぱい。:2009/07/29(水) 03:04:44 ID:myOrrYOb0
>>540
Process,Exist,Jane2ch.exe
if ErrorLevel
{
IfWinExist,ahk_class TMainWnd
{
IfWinActive
{
t::Home
g::End
j::Down
k::Up
}
}
}
552名無しさん@お腹いっぱい。:2009/07/29(水) 03:14:41 ID:G3cU/w1W0
よくある勘違いだな、これ。単なるグローバルなキー設定してるだけ。
553551:2009/07/29(水) 04:20:28 ID:myOrrYOb0
>>552さん
ご指摘ありがとうございます。勘違いしていました。

Process,Exist,Jane2ch.exe
if ErrorLevel
{
IfWinExist,ahk_class TMainWnd
{
#IfWinActive,ahk_class TMainWnd
t::Home
g::End
j::Down
k::Up
#IfWinActive
}
}
554名無しさん@お腹いっぱい。:2009/07/29(水) 08:27:03 ID:35/6XsS5P
??
555名無しさん@お腹いっぱい。:2009/07/29(水) 08:36:13 ID:TqVlfNLW0
>>553
これでちゃんと動くの?
これで>>552の指摘している動作じゃなければ、かなり使えるテクだと思うが
556名無しさん@お腹いっぱい。:2009/07/29(水) 09:02:39 ID:mvcJSAzT0
それより>548でいわれてる干渉の問題が解決してるかが
気になる
557名無しさん@お腹いっぱい。:2009/07/29(水) 10:37:06 ID:4734M1IE0
文法的にめちゃくちゃな気がするんだが…
貼る前に自分で動作検証してるんか? >553
558名無しさん@お腹いっぱい。:2009/07/29(水) 12:06:29 ID:G3cU/w1W0
>>553
やりたいことは分かるけど、それじゃ動かない。
#If〜とその内部のリマップ部分は「定義」で、通常のコード部分とは独立してる(はず)。
(リマップじゃない「::」でのホットキー定義でも同様)

AHKから見たら以下と同じ。

Process,Exist,Jane2ch.exe
if ErrorLevel
{
 IfWinExist,ahk_class TMainWnd
 {
  ; 空っぽ
 }
}

#IfWinActive,ahk_class TMainWnd
 t::Home
 g::End
 j::Down
 k::Up
#IfWinActive

どうしても複数条件で#IfしたいならAutohotkey_L。
559名無しさん@お腹いっぱい。:2009/07/29(水) 12:57:15 ID:3cSo6QhS0
>>540のはおとなしくバグ報告するしかないんじゃね?
560名無しさん@お腹いっぱい。:2009/07/29(水) 22:57:20 ID:GT4m+lRV0

>>127 関連情報

他プロセスのIMEの状態の取得、制御
[External IME Controler -> 技術解説] (Internet Archive)
ttp://web.archive.org/web/20051217130748/www.zero.co.jp/develop/free/o1/index.html
メンドクサス 
TTBaseのプラグインにでも改造する方がまだ楽なのかな?
561551:2009/07/29(水) 23:02:26 ID:myOrrYOb0
ID:G3cU/w1W0さん
大変参考になるレスありがとうございました。
562名無しさん@お腹いっぱい。:2009/07/29(水) 23:12:37 ID:gQWGxkCX0
>>558
AutoHotkey_Lって日本語の解説サイトは無いよね?
便利そうなことは解るがすべての機能が解らない
563名無しさん@お腹いっぱい。:2009/07/29(水) 23:36:22 ID:G3cU/w1W0
>>562
本家との違い:
1) #If 任意の「式」を用いてキーマップ定義ができる
2) メニューにアイコン表示ができる
3) Exeやトレイアイコン描画の向上
4) GUIのテキスト表示のレンダリング方法を変更できる
5) 正規表現にマッチした文字列を引数にして関数を呼べる
6) Send, {Asc XXXX}のUnicode版が使える

目玉は(1)。 ユーザ定義関数作って #If で使うととても便利。
特にマウスの場合アクティブじゃなくても操作したりするので重宝。
(ただし、LastFoundWindowは適応されない)

例) トレイの時計部分でホイールを回すと音量変更
#If MouseOver("", "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)
}

日本語解説が必要は程の機能の違いは無いと思う。
564名無しさん@お腹いっぱい。:2009/07/29(水) 23:41:35 ID:h/yCH0hg0
>>563
解説ありがとう
なるほどねキーマップの定義が便利そうだ
早速導入してみるよ
565名無しさん@お腹いっぱい。:2009/07/30(木) 04:55:12 ID:YTo3wX1A0
サイドボタン1を「PageUp」に割り当てて、
右クリックしながらサイドボタン1を押すと「Home」となるようにしたいのですが、

XButton1::PgUp
~RButton & XButton1::send,{Home}

これだと右クリックから指を離すと、右クリックメニューが出てしまいます。
メニューを出さない方法をお教え願います。
566名無しさん@お腹いっぱい。:2009/07/30(木) 09:46:41 ID:3V7s4WWX0
Send,{Esc}
右クリ単体押しも効かなくなってもいいなら ~ を取る
567名無しさん@お腹いっぱい。:2009/07/30(木) 10:07:17 ID:+beqOprl0
こういうのって、マウスジェスチャーのほうがいいと思うけどな。
568名無しさん@お腹いっぱい。:2009/07/30(木) 10:12:08 ID:k5QbYldw0
>>565
余計なお世話かもしれないけど、左右クリックをトリガーにするのはやめた方がいいんじゃないかな。
ご指摘にとおりメニューが出たりしてめんどいし、~をはずして条件分岐でSend,{RButton}するのも不具合がでることが多い。

俺ならサイドボタン1を押しながら右クリックにする。
XButton1 up::Send,{PgUp}
XBUtton1 & RButton::Send,{Home}
569名無しさん@お腹いっぱい。:2009/07/30(木) 11:08:32 ID:YTo3wX1A0
>>566

XButton1::pgup
RButton & XButton1::
send,{Home}
Send,{Esc}
return

この記述の仕方だとう右クリメニュー出ちゃうんですよ。
右クリ単体押しはどうしても欲しいです。

>>567
ノーマウスジェスチャーがモットーです。

>>568
左右クリックをトリガーにするのは難しいんですね・・・
サイドボタンを押しながらという発想はありませんでした。
うまく作動しましたどうもありがとうございます。
570名無しさん@お腹いっぱい。:2009/07/30(木) 11:21:26 ID:YTo3wX1A0
>>567
もしかしてマウスジェスチャーソフトで肩代わりするということでしょうか?
たしかに「右クリ押しながら他のボタンを押すと作動する」という設定が
マウスジェスチャーソフトにありますよね。
便利だったので、AHKでもできるかなと思った次第です。
なのでマウスジェスチャーソフト入れるのが一番の解決みたいですね。
ありがとうございます。
571名無しさん@お腹いっぱい。:2009/07/30(木) 12:25:03 ID:3V7s4WWX0
>>569
>この記述の仕方だとう右クリメニュー出ちゃうんですよ。
解決してるみたいだから完全な蛇足だけど。

566の一行目はメニューを「出さない」じゃなくて、「出してから消す」案な
>右クリックから指を離すと、右クリックメニューが出てしまいます。
なんでKeyWaitで押下解除待ってから投げる。

568も言ってるように左右クリックトリガで本来の動作を殺すと色々めんどくさい。
XBUtton1トリガで代用効くんならそのほうがいいんじゃね
572名無しさん@お腹いっぱい。:2009/07/30(木) 13:03:26 ID:JcbD380uP
結局、ドラッグをどうするかによるんだよね
これを切り捨てるなら簡単な話で、
 RButton & XButton1:: Send {Home}
 RButton:: Send {RButton}
で良い。

一度RButton Downを発生させちゃうと、Upさせないとずっとドラッグのモードになってしまうし、
そこでUpを送ると、どうしてもコンテキストメニューが出てしまう。

マウスジェスチャーでは、クリックされた段階ではRButton Downを送らずに
途中で認識処理が中止された段階になってはじめて、遅延的にRButton Downを発生させてる。
これと同じことをやればいいだけの話なんだが、いかんせん挙動が少し変わる感じは否めない。

やはり>>568が良いと思う。
573名無しさん@お腹いっぱい。:2009/07/30(木) 14:06:55 ID:yr20WaY70
>>571
KeyWaitでやってみたいと思います。うまくいきそうです。

>>572
右クリックを組み合わせた動作がこんなに難しいとは思いませんでした。
574名無しさん@お腹いっぱい。:2009/07/30(木) 18:13:23 ID:YTo3wX1A0
>>571
うまく行きました。現状ではこれがベストです。本当にどうもありがとうございました。
575名無しさん@お腹いっぱい。:2009/07/30(木) 18:14:08 ID:YTo3wX1A0
アドバイス下さったみなさまどうもありがとうございます。助かりました。
576名無しさん@お腹いっぱい。:2009/07/30(木) 19:49:42 ID:57Aq4sv70
右ドラッグ併用するなら、
リストビューのアイテム上にマウスががあるときのみボタン押下直後に右ボタンDown送って、
それ以外は離す直前におくるってやれば何とかなる

以下はAutoHotkey_Lの場合

#If !Lvm_HitTest()
$RButton::
 RButton:=True
 KeyMap=1
 KeyWait, RButton
 KeyMap=0
 If (RButton)
  Send, {RButton}
 Return
#If (KeyMap == 1)
XButton1::
 Send, {Home}
 RButton:=False
 Return
#If
XButton1::PgUp

Lvm_HitTest は ttp://pc12.2ch.net/test/read.cgi/software/1230694774/501
577名無しさん@お腹いっぱい。:2009/07/30(木) 19:58:33 ID:UsVZEU/K0
右クリックメニュー消すのは
Send,{Esc}よりWinClose,ahk_class #32768 のほうがいいと思う
578名無しさん@お腹いっぱい。:2009/07/30(木) 20:32:45 ID:YTo3wX1A0
>>576
難しすぎて今すぐには理解できませんが、
貴重な時間と労力をさいて下さり感謝します。
ちなみに右ドラッグは併用しないと思います。

>>577

XButton1::pgup
~RButton & XButton1::
send,{Home}
KeyWait,RButton
WinClose,ahk_class #32768
return

だと右クリックメニューが出てしまいます。
579名無しさん@お腹いっぱい。:2009/07/30(木) 21:17:23 ID:57Aq4sv70
>>577
FireFoxとかだと独自描画タイプだから、うまくいかないんだよねぇ
580名無しさん@お腹いっぱい。:2009/07/30(木) 21:21:01 ID:UsVZEU/K0
>>578
そのままだとたまに消せないことがあるな
KeyWait,RButtonの下にSleep,1を追加したら問題無くなった
あと、右クリメニューのクラスが#32768以外になってるソフト(OfficeやFirefoxとか)だと動かない
適宜追加してやる必要があるのが難(Officeだとahk_class MsoCommandBarPopup)

Send,{Esc}を常に送るようにすると
右クリメニューが出ないようなコントロールの上で発動したら
予期せぬ動作になる可能性があって困るかな、と思ったので
581名無しさん@お腹いっぱい。:2009/07/30(木) 21:28:43 ID:57Aq4sv70
メニューが出るのが遅いもの(エクスプローラなど)だと、
メニューが出る前にメニューを探してCloseするから(空振り)動かないこともあるね。

SetTitleMatchMode, RegEx
WinWait, ahk_class #32768|MozillaDropShadowWindowClass,,0.5
If (ErrorLevel==0) {
  ControlSend,, {Esc}
}
Return

WinCloseに反応しないんで、ControlSend で
582名無しさん@お腹いっぱい。:2009/07/30(木) 21:51:15 ID:YTo3wX1A0
>>579
情報ありがとうございます。PC作業のほとんどがFireFoxです。

>>580
どうもお気遣いありがとうございます。
Sleep,1を追加でうまく動きました。
いまのところFirefoxでもいい感じに動いてます。

>>581
これは凄い。とても具合がいいです。使わせていただきます。
どうもありがとうございました。
583名無しさん@お腹いっぱい。:2009/07/30(木) 22:03:35 ID:3V7s4WWX0
Escだと窓ごと消える動作のアプリとかあるからな。確かに怖い
ちなみにESCの代わりにALTを送ってもコンテキストメニューは消せる。
これはこれでウィンドウメニューにフォーカスが行ってしまったりで面倒だけどな
584名無しさん@お腹いっぱい。:2009/07/31(金) 09:08:37 ID:nEPioUDm0
>>583
窓ごと消える動作にアプリに出会ったときにALT使わせていただきます。
ありがとうございました。
585名無しさん@お腹いっぱい。:2009/07/31(金) 09:09:26 ID:nEPioUDm0
ALTもいい感じです。
586名無しさん@お腹いっぱい。:2009/07/31(金) 19:22:48 ID:Foi3CfJu0
すばらしい流れ
適当にスリープしてEsc送ってただけだったんですごく快適になった
587名無しさん@お腹いっぱい。:2009/08/01(土) 01:25:07 ID:uTaCcU6o0
メニューの設定について質問します
以下のような単純なメニューを作成しました。

#SingleInstance FORCE
#UseHook
#persistent

Menu, MyMenuBar, Add, Test (&T), MyRoutine
Gui, Menu, MyMenuBar
Gui, Show, w100 h20
Return

MyRoutine:
msgbox,test!
return

これは意図したとおりに動きます

しかし、つぎのようにキーフックの設定を付け加えると、とたんに動かなくなってしまいます

f::
send,t
return

もちろんここで想定しているのは、fを押すことでMyRouteneが呼び出されることです
何か間違った記述をしているのでしょうか?
588名無しさん@お腹いっぱい。:2009/08/01(土) 01:54:46 ID:xGwOK5jG0
AHKのメニュー(トレイ含む)がアクティブになっているときにホットキーが効かないのは「仕様」でつ

別プロセスならおk
589名無しさん@お腹いっぱい。:2009/08/01(土) 01:56:49 ID:uTaCcU6o0
>>588
ありがとうございます。
確かに別プロセスなら正常に動作しました。
仕様でしたか
590名無しさん@お腹いっぱい。:2009/08/01(土) 23:27:27 ID:U4mEaP7U0
ブラウザから

[Document Popup Menu]
Item, "ページタイトルをコピー" = Execute program, "C:\Program Files\AutoHotkey\AutoHotkey.exe", "C:\Program Files\AutoHotkey\clipboard.ahk -op_t %u"
Item, "タイトルとURLをコピー" = Execute program, "C:\Program Files\AutoHotkey\AutoHotkey.exe", "C:\Program Files\AutoHotkey\clipboard.ahk -op_tu %u"
Item, "ページのアンカーを作成" = Execute program, "C:\Program Files\AutoHotkey\AutoHotkey.exe", "C:\Program Files\AutoHotkey\clipboard.ahk -op_anch %u"
Item, "Markdown Anchor" = Execute program, "C:\Program Files\AutoHotkey\AutoHotkey.exe", "C:\Program Files\AutoHotkey\clipboard.ahk -op_md_anch %u"

のようにして呼び出そうとしてるんだけど、clipboard.ahkを置いてあるパスに半角スペースが入っているとうまくいきません。
""で囲まれてるから%A_Space%も使えないし、""で囲まないとオプションの引数が渡せません。
何かいい方法ないでしょうか。
591名無しさん@お腹いっぱい。:2009/08/01(土) 23:47:53 ID:fV0IZJQz0
>>590
そのブラウザはOperaかな
半角スペースを %20 に置き換えてみるとか(試してないので動くか解らない)

または clipboard.ahk をコンパイルしてExe化して利用するとか。
592名無しさん@お腹いっぱい。:2009/08/01(土) 23:51:19 ID:cwnKC4IK0
よくわからんが
""C:\Program Files\AutoHotkey\clipboard.ahk" -op_t %u" とか?

最後の手段はショートファイルネームかね
593名無しさん@お腹いっぱい。:2009/08/02(日) 00:10:52 ID:5sc45ibg0
AHKからコントロールパネルにある電源オプションの
電源プランを変更したりってできますか? OSはVistaで、
一定時間アイドル状態なら省電力プランに切り替えたりという動作をさせたいです。
594名無しさん@お腹いっぱい。:2009/08/02(日) 00:20:26 ID:RQx/1jj/0
>>591-592
Operaですね。
どうもだめっぽいのでしばらくC:\直下に置いて使いつつ、ahkが固まったらexe化でもしようと思います。
ショートファイルネームはぐぐったけどよくわかりませんでした。
595名無しさん@お腹いっぱい。:2009/08/02(日) 00:29:12 ID:0vCIKdix0
OperaのExecute Programの引数は厄介だよな
>>592のように"を2つ続けると、引数指定が終わったものとみなされてしまうし
解決策は
・ショートファイルネーム使って引数を "C:\Progra~1\AutoHotkey\clipboard.ahk -op_t %u"とする
・AHKインストール時にahkに直接引数を渡せるオプションを付けて
 Execute program, "C:\Program Files\AutoHotkey\clipboard.ahk","-op_t %u"
596名無しさん@お腹いっぱい。:2009/08/02(日) 00:36:28 ID:0vCIKdix0
http://ashula.info/opera/tips/opera_ex_helper_wsh_for_kestrel
のように1アクション挟んで引数を解釈し直す方法もあるけどちょっと面倒臭い
597名無しさん@お腹いっぱい。:2009/08/02(日) 00:41:26 ID:lPys/t/x0
Exeにして任意のパスに置く。そう頻繁に書き換えないでしょ
598名無しさん@お腹いっぱい。:2009/08/02(日) 00:41:37 ID:RQx/1jj/0
>>595
あ、Progra~1でいけたんですね。
試してみたらできました。とりあえずこれでいこうと思います。
みなさんありがとう。
599名無しさん@お腹いっぱい。:2009/08/02(日) 00:43:22 ID:PgJxs4740
>>593
powercfg.exeコマンドで電源オプションの設定を変更する
600名無しさん@お腹いっぱい。:2009/08/02(日) 10:15:59 ID:5sc45ibg0
>>599
おお、こんなコマンドあったんですね。
IME操作する時みたいに、DLL呼んだりしないとだめなのかと思ってました。
ありがとうございました。
601名無しさん@お腹いっぱい。:2009/08/02(日) 11:19:41 ID:Ii9IPWNJ0
AHKの場合ドロップパラメータはショートファイルネームになるっぽいので
↓こんなスクリプトを作ってデスクトップにでも作っとくと調べるの楽かも
;----- dorp.ahk ------
Loop,%0%
MsgBox, % %A_index%
ExitApp
;-------------------


しかしショート/ロングごちゃ混ぜでもパスって通るんだな
知らんかったわ
>"C:\Progra~1\AutoHotkey\clipboard.ahk
602名無しさん@お腹いっぱい。:2009/08/02(日) 17:23:08 ID:TPASeAzC0
;クリップボードにコピーしたPathNameがショートならロングに、ロングならショートに変換。

;行末の改行や複数行を考慮し、1行目だけ抽出。
;※クリップボードがアイコンを右クリックしてコピー(Ctrl+C)したものならロングファイルネームに置き換えられる。
RegExMatch(Clipboard, ".*", $)
Clipboard=%$%
ClipWait, 0.5
IfNotExist, %Clipboard%
{
msgbox, ファイルやディレクトリが存在しません。
exitapp
}
Clipboard:=GetShortLongPathName(Clipboard)
ClipWait, 0.5
Msgbox, %Clipboard%
Return

;PathName = 変換したいPathName
;BufferSize = 変換したPathNameを格納するバッファサイズ(単位はByte)
GetShortLongPathName(PathName, BufferSize=2000){
VarSetCapacity(ChangedPath, BufferSize)
; チルダ "~" が含まれているならショートファイル名と見なす
if(RegExMatch(PathName, "~"))
DllCall("kernel32\GetLongPathName",str,PathName,str,ChangedPath,int,BufferSize)
else
DllCall("kernel32\GetShortPathName",str,PathName,str,ChangedPath,int,BufferSize)
Return, ChangedPath
}
603名無しさん@お腹いっぱい。:2009/08/02(日) 17:55:58 ID:EjJLgIzFP
たぶん、一番簡単なのは

Loop %clipboard%, 1
{
MsgBox %A_LoopFileShortPath%
}
604名無しさん@お腹いっぱい。:2009/08/02(日) 18:12:53 ID:TPASeAzC0
おろ、組み込み変数としてあったのかー
ヘルプ見たらロングファイルネーム変換もあるよorz
605名無しさん@お腹いっぱい。:2009/08/02(日) 19:16:24 ID:zHnDjETJ0
http://www34.atwiki.jp/hetacode/
http://www.sage-p.com/fsdg03.htm
みんなこういう機能よりも書き方的なところで、「できれば上手く、できなくともこれだけは」っていうのあります?
スクリプト・プログラム書きはこれが初めてで完全に独学で、ある程度書いてるものが長くなってきたんで
こういうの興味でてきたんだけども
しかし自分の書いたの見直すと、見事に「下手で汚いコード」ですよ
606名無しさん@お腹いっぱい。:2009/08/02(日) 20:32:59 ID:R0ONn4HN0
どうせ他人に見せるモンでもないしと、頭に思い描いたコードを
そのまま記述して、動いたら放置するクセがある。
そのせいで、常駐メインスクリプトが200KBを超えてきた。

続けているうち、グローバル変数が競合するという実害までも出てきた。
いまは、

 小ネタ類を関数化(ついでに、グローバル使わないよう変更)→ライブラリに移植

という作業を暇ができたら随時やっている。

ただ、使用頻度的に、メインに残すべきなのか、ライブラリに以降すべきなのか、
判断に迷うコードが、いくつもある。
607名無しさん@お腹いっぱい。:2009/08/02(日) 21:09:41 ID:Ua3/78Ax0
AHK自体がいろいろな言語のより集めだから
気をつけないと何をやっているのか忘れてしまうことがある

ところで、関数とサブルーチンでは、AutoHotkeyの処理上
どのような違いがあるの?
608名無しさん@お腹いっぱい。:2009/08/02(日) 21:40:49 ID:EjJLgIzFP
内部的には、って意味なら
コール毎に生成・破棄されるスタックフレームの量が
パラメータやローカル変数の分だけ違うくらいなんでは。
609名無しさん@お腹いっぱい。:2009/08/02(日) 21:43:23 ID:Ua3/78Ax0
>>608
どうも
納得したよ
610名無しさん@お腹いっぱい。:2009/08/02(日) 21:59:42 ID:Ii9IPWNJ0
サブルーチンはステップ実行の延長上 (≒Gotoでも飛べる実体のある行)
関数はクラスとして実行時に作られるもの、みたいな認識かね。

動作的に一番違うのは再帰時や複数スレッドから同時に呼ばれた時
サブルーチンは処理中に別スレッドからCallされた場合、コンフリクトを起こす可能性がある。
関数はグローバル変数使ってない限りはそういう心配はない。
611名無しさん@お腹いっぱい。:2009/08/02(日) 22:54:35 ID:EjJLgIzFP
OOPLとごっちゃになってるようだけど

どっちもParse時にスタティックなコードブロックして配置されるし、
呼び出しについても古典的なコールスタックを利用しているだけ

そんなんでは「近頃の若いモンはOOPから入るから基礎がなっとらん!!」
と言われちゃうぞw
612名無しさん@お腹いっぱい。:2009/08/02(日) 23:58:30 ID:zHnDjETJ0
みんな上級者ですね…
とりあえず関数に渡すデータはほぼグローバル変数でやってたんで、引数をもっと活用したいです…
613610:2009/08/03(月) 00:04:34 ID:IHgLtg210
オブジェクト指向プログラミング言語のことをOOPLと言うのか、はじめて知った。
そんな自分はアセンブラプログラマー崩れ
窓プログラムのことはあんまりよくわからんで適当書いた、スマン
614名無しさん@お腹いっぱい。:2009/08/03(月) 00:23:48 ID:7+TIAAKl0
競合の危険性については>>610で十分説明できてると思うよ。
>>605を見ると、フラグの多用は可読性的にダメみたいね。

flag=0
ifexist,あああ
 flag++
ifexist,いいい
 flag++
ifexist,ううう
 flag++

if flag>0
 {
 なんたら(ファイルがあったときの処理)
 }
else
 {
 かんたら(ファイルが1つも見つからなかったときの処理)
 }


みたいな感じで常用してるけど、ほかによい書き方はあるのかな
615名無しさん@お腹いっぱい。:2009/08/03(月) 00:25:34 ID:Hm+i/Ke+0
>>605コピペ
へたなコードの書き方
基礎編

サブルーチン(関数)を長くする。数百行
コピペ多用
ネストを深くする
フラグを多用する
マジックナンバーを使いまくる
識別子(変数名、関数名)は意味不明に
グローバル変数つかいまくり
616名無しさん@お腹いっぱい。:2009/08/03(月) 02:38:18 ID:/M/ktmLV0
>>614
こんな感じでいいんじゃない?

test:
 filepath=あああ,いいい,ううう
 loop, parse, filepath, `,
  ifexist, %A_LoopField%
  {
   msgbox, ファイルがあったときの処理
   return
  }
 msgbox, ファイルが1つも見つからなかったときの処理
return
617名無しさん@お腹いっぱい。:2009/08/03(月) 06:22:36 ID:Kg7eU1aj0
If FileExist(boo) || FileExist(foo) || FileExist(woo)
 do something

でいいんじゃないの。
618名無しさん@お腹いっぱい。:2009/08/03(月) 08:25:46 ID:N4Zne+zm0
>>617
すっきりしていていいな
619名無しさん@お腹いっぱい。:2009/08/03(月) 17:49:31 ID:zhwBiIExO
Opera用のスクリプトを
Item, "ページのアンカーを作成" = Execute program, "C:\ahk\AutoHotkey.exe", "C:\ahk\clipboard.ahk -op_anch %u"
という風に呼び出そうとしていますが、使ってみると
The script file "C:\ahk\clipboard.ahk -op_anch http:\2ch.net\" does not exist. Create it now?
と出て使えません。どうも引数もファイル名の一部と見なしてファイルがないと言ってるようです。
何がおかしいんでしょうかね?



620名無しさん@お腹いっぱい。:2009/08/03(月) 17:53:14 ID:7C2KXRnC0
>>619
operaのスクリプトの書き方がわからないけど
"をエスケープして書く方法があるんじゃない?
"\"C:\ahk\clipboard.ahk\" -op_anch %u"
とか
"""C:\ahk\clipboard.ahk"" -op_anch %u"
みたいな感じで
621名無しさん@お腹いっぱい。:2009/08/03(月) 17:56:19 ID:Kg7eU1aj0
>>619 >>590からの流れを読め

つか、Operaの解説サイトでAHKスクリプトでも配ってんのか?
これはAHKの問題でも何でもないから、解説とかあるならきちんとして欲しいな
622名無しさん@お腹いっぱい。:2009/08/03(月) 18:08:54 ID:uVzntXFqP
ウチの10βではその記述でも動作するので、もう一度パスの確認をオススメする。
もっともOperaのExecute programの仕様はバージョンによって結構変ってきたりするんで
一概にそうだとも言い切れないが。

コンパイルしてexeにしてしまうか、.ahkを関連付けしてるなら
Execute program, "c:\foo\bar.ahk", "-op_anch %u"
とするのが一番安全かも。
623名無しさん@お腹いっぱい。:2009/08/03(月) 18:30:32 ID:zhwBiIExO
何をやってもダメで、試しにOperaを9.64から9.63に戻したらそれだけで解決しました。
Operaのバカ。

624名無しさん@お腹いっぱい。:2009/08/03(月) 19:21:23 ID:vHxXarLZ0
Opera9.64だと
Execute program, "C:\ahk\AutoHotkey.exe", "C:\ahk\clipboard.ahk -op_anch %U"
という風に、変数%uを大文字にしないと引数がスペース区切りにならない

Opera WikiにExecute Programの仕様は書いておいたほうがいいな
625名無しさん@お腹いっぱい。:2009/08/03(月) 19:22:18 ID:7r8nciBQ0
ホットキーが押されてる間だけスクリプトを実行するようにしたいんだけど、
どうすればいいの?
626名無しさん@お腹いっぱい。:2009/08/03(月) 19:42:46 ID:/M/ktmLV0
a::
 loop
 {
  スクリプト
  if !getkeystate("a")
   break
 }
return
627名無しさん@お腹いっぱい。:2009/08/03(月) 19:46:44 ID:7r8nciBQ0
>>626
おぉ、thx
628名無しさん@お腹いっぱい。:2009/08/05(水) 09:06:04 ID:IxtO6jKO0
autohotkey_l の {u+xxxxx} に関わる質問です
こういう設定をしました。

str := "[]"

StringReplace, str, str, ` , {u+FF40}, All
StringReplace, str, str, [ , {u+FF3B}, All
StringReplace, str, str, ] , {u+FF3D}, All

a::
send,%str%
return

もちろん[]を出したいのですが
なぜか`]が出ます
置き換えをする順番を変えると、次のときに同じ問題が起きてしまいます

str := "`´"

StringReplace, str, str, [ , {u+FF3B}, All
StringReplace, str, str, ] , {u+FF3D}, All
StringReplace, str, str, ` , {u+FF40}, All
StringReplace, str, str, ´ , {u+00B4}, All

a::
send,%str%
return


これで[´が出ます
置き換える順番をいじるだけではなくて、根本的に解決したいのですがどうすればいいのでしょうか
629名無しさん@お腹いっぱい。:2009/08/05(水) 10:33:44 ID:7m27ElKyP
str := RegExReplace(str, "\x81\x4d", "{u+FF40}", "", -1)
str := RegExReplace(str, "\x81\x6d", "{u+FF3B}", "", -1)
str := RegExReplace(str, "\x81\x6e", "{u+FF3D}", "", -1)
630名無しさん@お腹いっぱい。:2009/08/05(水) 10:39:08 ID:WqUZhKsr0
`はエスケープ文字だよ
``で解決しないなら #EscapeChar でエスケープ文字変えてみたら?
http://lukewarm.s101.xrea.com/Scripts.html#escape
http://lukewarm.s101.xrea.com/commands/_EscapeChar.html
631名無しさん@お腹いっぱい。:2009/08/05(水) 12:58:03 ID:IxtO6jKO0
>>629
できました!
SJIS のコードを直接記述すればいいんですね
勉強になりました

>>630
説明不足で済みません
>>628で使っているのは全角の方でした
632名無しさん@お腹いっぱい。:2009/08/05(水) 19:49:01 ID:mn9WQLpa0
ホットキー長押しの記述ってどうやんの?
633名無しさん@お腹いっぱい。:2009/08/05(水) 20:59:51 ID:7m27ElKyP
a::
t := t ? t : A_TickCount
if( t!=-1 and A_TickCount-t>2000 ) {
t := -1
MsgBox 長押し
}
return

a up::
if( t!=-1 ) {
; 普通
Send {blind}a
}
t := 0
return
634名無しさん@お腹いっぱい。:2009/08/05(水) 21:59:28 ID:mn9WQLpa0
ありがとうございます!でもワケワカメ
635名無しさん@お腹いっぱい。:2009/08/05(水) 22:02:16 ID:6MDczc/i0
>>632
おまえ、ニュー速のマウススレから来ただろ
636名無しさん@お腹いっぱい。:2009/08/05(水) 22:04:22 ID:k/1kGDDr0
SnapItやFFolder↓みたいな
ttp://www.neko.ne.jp/~freewing/software/ffolder/

フォルダのサイズをスクロールバーが出ない大きさにリサイズ

というのをAHKでやりたいのですが
リサイズ基準を何にするかで迷ってます

今現在は横スクロールバーが出なくなるまでloopで
少しずつ大きくしてるのですが、スマートじゃないので・・・

何か動作的に美しい方法はないでしょうか?
637名無しさん@お腹いっぱい。:2009/08/05(水) 22:13:09 ID:mn9WQLpa0
>>635
ビンゴ!
638名無しさん@お腹いっぱい。:2009/08/05(水) 22:17:52 ID:mn9WQLpa0
>>633
最初は分からなかったけどだんだんわかってきたwこりゃいいわ
639名無しさん@お腹いっぱい。:2009/08/05(水) 22:37:28 ID:6MDczc/i0
>>637
ようこそ、無限な可能性を秘めるAutoHotkeyの世界へ
640名無しさん@お腹いっぱい。:2009/08/05(水) 22:42:02 ID:qSvZp/Dc0
>>636
Win32APIごり押しなら・・・

■自動配置の場合
・LVM_GETITEMCOUNTで個数を調べる
・LVM_GETITEMRECTで1個のアイテムの矩形の大きさを調べる
・最適な幅・高さを計算して、ウィンドウをリサイズ
・グループ化表示してるともっと面倒(グループヘッダを考慮するのでマンドイ)

■自動配置でない場合
・アイテムの個数分だけLVM_ITEMRECT送って top,leftの最小値、right,bottomの最大値を調べる
 (このとき、他プロセスメモリを読めるようにしないとだめ)
・min-top, min-leftまでLVM_SCROLLで移動
・ListViewの大きさを max-left, max-bottomから計算してウィンドウをリサイズ

結構めんどくさい
641名無しさん@お腹いっぱい。:2009/08/05(水) 22:45:07 ID:qSvZp/Dc0
・難しくないけど、面倒
・構造体とポインタが分からないと厳しい
・殆どSendMessageなんだけど、結果が書き込まれるのは他プロセスのメモリ領域なので
 他プロセス内にメモリ確保して、ごにょごにょしないと出来ない
642名無しさん@お腹いっぱい。:2009/08/05(水) 23:19:57 ID:7m27ElKyP
http://technet.microsoft.com/en-us/library/bb774883(VS.85).aspx

SendMessage 0x1040, -1, -1, SysListView321, A
width := ErrorLevel & 0xffff
height := ErrorLevel >> 16

純粋にコントロールの幅と高さなので、ウィンドウのサイズに換算する時は、
タイトルやメニューバー、枠、ステータス行なども加算する必要があると思う

SendMessageのlParam次第で、幅が800だったら〜みたいなことも出来る模様
643名無しさん@お腹いっぱい。:2009/08/06(木) 01:07:58 ID:xEVLnPif0
>>640-642
レスありがとうございます
試行錯誤しながらやってみます
644名無しさん@お腹いっぱい。:2009/08/06(木) 19:27:50 ID:5MUy1juC0
マウスの拡張ボタンで音量の変更とそれを表示するプログレスバーを作ったのですが、
このスクリプトでは最初にプログレスバーを表示すると
プログレスバー表示→WinSet,TransColorによる透明化 という過程を通る時にプログレスバーが白く点滅しまい、
それが嫌なのですがどうすればいいでしょうか
hideなども使ってみたのですが、上手くいかなかったので(最初にhideを行うと透明化が行われない)


F15::
Progress,b w550 y740 CWwhite,,,Volume
WinSet,TransColor,white,Volume
Loop
{
GetKeyState,mousestate,vk7Esc066

if mousestate=U
{
Sleep,350
Progress,Off
break
}

if mousestate=D
{
SoundSet,+3
SoundGet, master_volume
Sleep,30
Progress,%master_volume%
}
}
return
645名無しさん@お腹いっぱい。:2009/08/06(木) 20:03:47 ID:fREtRa7M0
Hideで透明化が行われないのは、非表示ウィンドウを見つけられないから
DetectHiddenWindows, On で見つけられる
646名無しさん@お腹いっぱい。:2009/08/06(木) 20:25:12 ID:5MUy1juC0
できました。
ありがとうございました
647名無しさん@お腹いっぱい。:2009/08/07(金) 21:49:45 ID:2/Zn1Oo00
プロセスAが存在して、かつプロセスBが存在して、
かつプロセスCが存在しないとき

にのみ実行するというスクリプトを書きたいんですがどう書けばいいでしょうか?
ひたすら Process,Exist と if ErrorLevel でフラグでも立てて場合分けするしかないですか?
648名無しさん@お腹いっぱい。:2009/08/07(金) 22:44:58 ID:UPEwGzsT0
上2行をコードにするとそうなるし、そうしか書きようが無いと思うけど
649名無しさん@お腹いっぱい。:2009/08/07(金) 23:02:37 ID:2/Zn1Oo00
>>648
そうですかー
ErrorLevelじゃなくて特定の変数に状態を入れられたらいいんですけどね
650名無しさん@お腹いっぱい。:2009/08/07(金) 23:11:36 ID:dgZk1njc0
直は無理だけど代入はできるっしょ

Process,Exist,A
PidA:=ErrorLevel
Process,Exist,B
PidB:=ErrorLevel
Process,Exist,C
PidC:=ErrorLevel
If (PidA && PidB && !PidC) {
;実行処理
}
651名無しさん@お腹いっぱい。:2009/08/07(金) 23:23:45 ID:2/Zn1Oo00
>>650
あ、なるほど。自分で入れてやればいいんですね。
何で気づかなかったんだろ・・・
652名無しさん@お腹いっぱい。:2009/08/07(金) 23:50:08 ID:2/Zn1Oo00
特定のディレクトリ下の実行ファイルが、実行中か否かで場合分けってできますか?
Process, Exist, C:\bin\*
とかやっても無理でした。プロセス名じゃないから当然かもしれませんが。
653名無しさん@お腹いっぱい。:2009/08/07(金) 23:51:22 ID:UPEwGzsT0
見通し良くするために、関数にしてもいいんじゃないの

If ProcessExist("a.exe") && ProcessExist("b.exe") && !ProcessExist("c.exe")
{
 〜何か〜
}
ProcessExist(processName) {
 Process,Exist, %processName%
 Return ErrorLevel
}
654名無しさん@お腹いっぱい。:2009/08/07(金) 23:57:21 ID:UPEwGzsT0
>>652
PIDからExeのフルパスを得られる getProcessExeNameNT.ahk を使う
655名無しさん@お腹いっぱい。:2009/08/08(土) 00:26:55 ID:t6TsDKn10
なんといえばいいのかわからないが>>653みたいに
組み込みで()が付かない関数の()つきバージョンを
網羅したahkファイルないんだろうか
656名無しさん@お腹いっぱい。:2009/08/08(土) 00:38:36 ID:ExcrmmL10
>>654
ありがとうございます。この関数使って次のように書いたら目的が果たせました!

Loop, 9999
{
PrcPath := getProcessExeNameNT(A_Index)
IfInString, PrcPath, C:\bin\
{
MsgBox, C:\bin\ 下のプロセス発見
return
}
}
657名無しさん@お腹いっぱい。:2009/08/08(土) 00:51:06 ID:ExcrmmL10
と、思いましたが、500ms間隔のSetTimerサブルーチンに組み込んでるんで
これだと半端じゃ無く重いですorz
なんかもうちょっと賢い書き方はできないものか・・・
また明日にでもがんばってみます。
658名無しさん@お腹いっぱい。:2009/08/08(土) 00:53:24 ID:HM22mfeu0
いやそこは WinGet,var,List を使おうよ…

>>655
つ 言い出しっぺの法則
659名無しさん@お腹いっぱい。:2009/08/08(土) 01:13:43 ID:pRjiCigE0
>>656
ひでぇ。PID 総当たりかよw

#SingleInstance, force
#Persistent
#NoEnv

TargetFullPath = C:\Program Files\Mozilla Firefox\firefox.exe
SplitPath, TargetFullPath, ExeOnlyName
SetTimer, Timer1, 500

Return

Timer1:
 Process, Wait, %ExeOnlyName%
 If (TargetFullPath = getProcessExeNameNT(ErrorLevel))
  MsgBox, あった
 Process, WaitClose, %ExeOnlyName%
 MsgBox, 閉じた
 Return
660名無しさん@お腹いっぱい。:2009/08/08(土) 01:17:01 ID:pRjiCigE0
あ、パスがマッチしない時にReturnしないとパス違いが逢った場合にマズい

 If !(TargetFullPath = getProcessExeNameNT(ErrorLevel))
  Return
 MsgBox, あった
 Process, WaitClose, %ExeOnlyName%
661名無しさん@お腹いっぱい。:2009/08/08(土) 06:11:53 ID:/c9VjIKX0
vimのように
●hjklでカーソルを移動させるカーソル移動モード
●編集モード(hjklでカーソルが移動しない、普通に文字が打てるモード)
この2つのモードを"shift+変換"で切り替えるようにしたいです。
プログラミング初心者の自分で2つほど書いてみましたが、期待した動き方にはできませんでした。
恥ずかしいことにもうわからないので、目指すもののメモと作ったものをうpしました。
マニュアルを読んでこの有様です。ソースは可読性とか考えてません。すいません。
ttp://www1.axfc.net/uploader/Sc/so/25445.zip
どこをどのように直せばよいでしょうか。もしくはもっといい方法があったら教えてください。
これから用事があるので夜また来ます。お願いします。
662名無しさん@お腹いっぱい。:2009/08/08(土) 07:24:51 ID:pRjiCigE0
>>551-558 なので >>5 Q13
663名無しさん@お腹いっぱい。:2009/08/08(土) 08:29:28 ID:pRjiCigE0
AutoHotkey_Lでなくても簡単に変数でキーマップ切り替えできないもんかとやってみた
リソース消費としては良くないと思うが、コードは分かりやすいかも

KeyMapGuiNo = 97
KeyMap = 0

Gui, %KeyMapGuiNo%:Default
Gui, +LastFound +ToolWindow
Gui, Show, NA Hide, KeyMap%KeyMap%
GroupAdd, KeyMapGui, % "ahk_id " WinExist()

+vk1Csc079::
 KeyMap++ == 2 ? KeyMap:=0 :
 Gui, %KeyMapGuiNo%:Show, NA,KeyMap%KeyMap%
 Tooltip, KeyMap=%KeyMap%, % A_CaretX+10, % A_CaretY+20
 SetTimer, TooltipOff, -2000
 Return
#IfWinExist, KeyMap1 ahk_group KeyMapGui
 h::Left
 j::Down
 k::Up
 l::Right
#IfWinExist, KeyMap2 ahk_group KeyMapGui
 h::Home
 j::PgDn
 k::PgUp
 l::End
#IfWinExist

TooltipOff:
 Tooltip
 Return
664名無しさん@お腹いっぱい。:2009/08/08(土) 09:27:31 ID:ExcrmmL10
>>658-659
WinGet,ver,List でうまく動きました。ありがとうございました。
665名無しさん@お腹いっぱい。:2009/08/08(土) 10:04:37 ID:qGvimYv/P
>>661
; モード毎の定義 モード名_モディファイア_キー名 := "送るキー、もしくはラベル"
CursorMode_h := "{Left}"
CursorMode_j := "{Down}"
CursorMode_k := "{Up}"
CursorMode_l := "SendRightAndTips"
NormalMode_Alt_h := "Help"

; キーをアサイン (押されたキーと同じキーをSendする場合もあるので$付き
keys := "h,j,k,l,!h"
Loop Parse, keys, `,
 HotKey $%A_LoopField%, EvalAndSend

; デフォルトモード
Mode := "NormalMode"
; モード切り替え
+vk1Csc079::Mode := (Mode="NormalMode") ? "CursorMode" : "NormalMode"

; 次に続く
666名無しさん@お腹いっぱい。:2009/08/08(土) 10:05:53 ID:qGvimYv/P
EvalAndSend:
 key := A_ThisHotKey
 ; $は要らない
 StringReplace key, key, $,
 ; モディファイアキーは適当な文字列に置き換え
 StringReplace key, key, !, Alt_
 ; モード名とキーから変換
 k := %Mode%_%key%
 if( isLabel(k) ) {
  gosub %k% ; ラベルが存在するなら、そちらを呼ぶ
 }
 else if( k<>"" ) {
  Send %k% ; 定義が存在するなら、そのキーを送る
 }
 else {
  Send %key% ; 未定義は押されたキーそのまま
 }
return

; --- 以下サブルーチン ---
; CursorModeで l が押された時に実行されるラベル
SendRightAndTips:
 Send {Right}
 TrayTip , , Right!
return

; NormalModeで alt+h が押された時に実行されるラベル
Help:
 MsgBox help
return
667名無しさん@お腹いっぱい。:2009/08/08(土) 11:12:27 ID:HM22mfeu0
>>665
IDがgvim
668名無しさん@お腹いっぱい。:2009/08/08(土) 12:58:59 ID:DY2FB0KE0
error at line1ってエラーがでて起動できなくなった・・・('A`)
669名無しさん@お腹いっぱい。:2009/08/08(土) 13:21:30 ID:DY2FB0KE0
設定ファイルの先頭行に日付が挿入されてました・・・^^;;;
670名無しさん@お腹いっぱい。:2009/08/08(土) 19:02:24 ID:dE/qgmd20
三項演算子って使ったことないけど、if elseに比べてスマートね
671名無しさん@お腹いっぱい。:2009/08/08(土) 21:12:44 ID:vW6Jp6SI0
>>663,>>665-666
両方とも11行目を自分で何とかしな!という愛が溢れています。
悲しいことに意味がほとんどわからないので
マニュアル見ながら再び試行錯誤してみます。
ありがとうございました。
672名無しさん@お腹いっぱい。:2009/08/08(土) 21:53:55 ID:C+FMEphO0
>>661
ホットキーの記述が1行ならReturnは不要だけど、
複数行になる場合はReturnが記述されているところまで実行される
仮に「コピー (2) 〜 autohotkey.ini」が正常に動作したとしても
Returnが最終行にあるため、Shift+変換を押すと全てが実行されてしまう。
それとIF〜文の記述だけど
If %KeyMap% = 1  これはだめ(左側の変数を %% で括るとだめ)
If KeyMap = 1 こう記述するのが正しい

流行らせるページのトップページにあるAutoHotkey解説やサンプルをよーく見て勉強するといいよ。
下記はうpされていた「コピー (2) 〜 autohotkey.ini」のIF文を三項演算に置き換えて修正を加えたもの。

#InstallKeybdHook
+vk1Csc079::
KeyMap = % !KeyMap ? 1 : 0
tooltip, % !KeyMap ? "編集モード" : "移動モード"
sleep, 1000
tooltip
return
$*H::Send, % !KeyMap ? "{Blind}{h}" : "{Blind}{Left}"
$*K::Send, % !KeyMap ? "{Blind}{k}" : "{Blind}{Up}"
$*J::Send, % !KeyMap ? "{Blind}{j}" : "{Blind}{Down}"
$*L::Send, % !KeyMap ? "{Blind}{l}" : "{Blind}{Right}"
$*U::Send, % !KeyMap ? "{Blind}{u}" : "{Blind}{PgDn}"
$*I::Send, % !KeyMap ? "{Blind}{i}" : "{Blind}{PgUp}"
$*Y::Send, % !KeyMap ? "{Blind}{y}" : "{Blind}{End}"
$*O::Send, % !KeyMap ? "{Blind}{o}" : "{Blind}{Home}"
$*N::Send, % !KeyMap ? "{Blind}{n}" : "{Blind}{AppsKey}"
673661=671:2009/08/09(日) 01:17:56 ID:NzfrsKo60
>>663,>>665
すいません。本当にごめんなさい。
全角スペースをそのまま使って動かないと悩んでいました。
全角スペースの変わりにTAB使うと期待したとおり動きました。本当にすいません。
ありがとうございます。
>>672
動きました。ありがとうございます。
コピー(2)を作る前に同じIF文を作って
%をつけたりはずしたりしてもよくわからなかったので、
マニュアルを読んで数値比較のときは%をつけるものだと思っていました。
ですが、マニュアルにはしっかりと変数同士の比較のときは%をつけると書いてありました。
マニュアルが読めていません。他のスクリプト読んでも意味不明です。
でも諦めません。いつかきっと自分で全部書きます。ありがとうございました。
674672:2009/08/09(日) 02:40:33 ID:rHtlUbHj0
あー、変なことしてる。
#InstallKeybdHook を指定しているから各ホットキー記述の行頭にある $ は不要
675名無しさん@お腹いっぱい。:2009/08/09(日) 16:07:06 ID:hvpp+GmF0
AppsKeyのないキーボードを使っているので

!sc070::Send {AppsKey}

で実現させようとしたところ、ポップアップが出るには出るのですが、一瞬だけ表示されてすぐに消えてしまいます。
ポップアップを表示させ続けるにはどうしたらいいしょうか。
676名無しさん@お腹いっぱい。:2009/08/09(日) 16:23:57 ID:X1oZkfj00
今すぐキーボードで、 [Shift]+[F10] を押してみるんだ
677名無しさん@お腹いっぱい。:2009/08/09(日) 16:33:54 ID:LUAr7kJw0
>>675
メニューが消える理由は >583

試してみたが 頭に $つけても上手くいかないな XPSP3
修飾キーをALT以外に変えるの無難じゃね
678名無しさん@お腹いっぱい。:2009/08/09(日) 16:59:46 ID:hvpp+GmF0
>>676
片手で手軽な動作で実現させたかったのです。

>>677
ありがとうございます。
修飾キーをRCtrlにしたら(Ctrlだけではなぜか無効)うまくいきました。
679名無しさん@お腹いっぱい。:2009/08/09(日) 17:03:02 ID:hvpp+GmF0
あっすみません、Ctrlだけでもいけました。
たぶんつづりをまちがえていた模様です。
680名無しさん@お腹いっぱい。:2009/08/09(日) 17:10:46 ID:X1oZkfj00
両キー押し上げのタイミングでいいなら

!sc070::
KeyWait, sc070
KeyWait, Alt
Send, {AppsKey}
Return
681名無しさん@お腹いっぱい。:2009/08/09(日) 20:41:12 ID:hvpp+GmF0
>>680
ありがとうございます。
そんな方法もあったんですね。
勉強になりました。
682名無しさん@お腹いっぱい。:2009/08/09(日) 22:21:38 ID:hl5/x3Tg0
下のようにして s を押下しても a は表示されずに b と表示されます。
X = %W% だけや Y = %H% だけなら a と表示されるのに
and で結ぶと必ず偽になってしまうのは何故でしょうか?

s::
X := 10
Y := 20
W := 10
H := 20
If (X = %W% and Y = %H%)
MsgBox, a
Else
MsgBox, b
Return
683名無しさん@お腹いっぱい。:2009/08/09(日) 22:48:12 ID:LUAr7kJw0
If (X=W and Y=H)

%%で囲うのは ( )がないIfのパターンの時
684名無しさん@お腹いっぱい。:2009/08/10(月) 00:40:33 ID:I6xNVesH0
コマンドライン引数で取得したパスがフォルダーなのか?ファイルなのか見分ける方法を教えてください。
685名無しさん@お腹いっぱい。:2009/08/10(月) 04:11:39 ID:Os9HqjKH0
属性をみる
686名無しさん@お腹いっぱい。:2009/08/10(月) 09:17:39 ID:IZhmgwQD0
ダメ文字うざいなあ
TitleMatchModeをRegExにして IfWinActive で エディタ|エラー とかやるとヒットしやがらないとか・・・
いちいち エディ\x83\x5e|エラ\x81\x5b とやらないとダメとか非効率的過ぎる
687名無しさん@お腹いっぱい。:2009/08/10(月) 10:58:03 ID:q8DoN4Jg0
ダメ文字つか正規表現使う限りは半角英数タイトルだってエスケープは避けられんでしょ
特にTitleはスペース2個以上続いてても誤爆する可能性あるし
↓みたいな関数作って常に経由するようにしたらいい

RegEscape(pattern) {
return RegExReplace(RegExReplace(pattern, "\s", "\s")
, "(?P<pre>(?:^|[^\x80-\x9F\xE0-\xFC])[\x80-\x9F\xE0-\xFC])"
. "(?P<esc>[\[\]\{\}\|\^\\])"
, "${pre}\${esc}")
}
688名無しさん@お腹いっぱい。:2009/08/10(月) 11:16:17 ID:cMgQyL7CP
慣れてくれとしか言えんわ
もしくはマルチバイト文字に関しては本家に改善要望出すとか。

日曜プログラマには面倒な話かもしらんけど、
なるべくクラス名とか使うとか、変換するライブラリを作っておくとか
自衛策はいくらでもあるし。
689名無しさん@お腹いっぱい。:2009/08/11(火) 19:08:38 ID:PgOnvXDv0
普通の記述で、リマップと同じ動作を行う方法はありませんか?
JoyStickだと、方向キーはGetkeyStateを使うしかなく、他のボタンも何故かリマップが使えなくなってしまいます。
知ってる方いましたら教えて下さい
方向キーの入力やボタンの入力には下記のスクリプトを書きましたが、
やはりリマップとは少し違うようになってしまうので


#Persistent
SetTimer,JoyTimer,50
return

JoyTimer:
GetKeyState, JoyXkey, JoyX
GetKeyState, JoyYkey, JoyY
if JoyXkey=100 ;右ボタン
Send,{Right}
if JoyXkey=0 ;左ボタン
Send,{Left}
if JoyYkey=100 ;下ボタン
Send,{Down}
if JoyYkey=0 ;上ボタン
Send,{Up}
return

Joy2::
send,{enter}
return

Joy3::
send,{BackSpace}
return
690名無しさん@お腹いっぱい。:2009/08/11(火) 20:40:00 ID:74mR/8bv0
ホットキー:: Send じゃ動作が微妙→リマップ搭載
の流れでバージョンアップしてった記憶があるので
完全な置換方法はないんじゃないかね。
691名無しさん@お腹いっぱい。:2009/08/11(火) 22:11:13 ID:JmmleByF0
窓の杜 - 【NEWS】Windows 7の新機能を利用できるライブラリ「Windows API Code Pack」v1.0が公開
http://www.forest.impress.co.jp/docs/news/20090811_308454.html
692名無しさん@お腹いっぱい。:2009/08/11(火) 22:58:29 ID:UZtW8Eo90
右コントロールとカンマ で発動させたいのですが、
下記ではうまく動きません。
 RCtrl & ,::

こうすると、構文エラーになってしまいました。
 RCtrl & `,::

ちなみに同じ方法で、ピリオド「RCtrl & .::」は、認識できました。
カンマはどのように記述すればOKでしょうか?
693名無しさん@お腹いっぱい。:2009/08/11(火) 23:04:13 ID:54xM/3pc0
>^,::MsgBox, Hoge hoge
694名無しさん@お腹いっぱい。:2009/08/11(火) 23:05:24 ID:54xM/3pc0
あ…、行頭の ">" はアンカーでなく、キー左右を識別する修飾子
695名無しさん@お腹いっぱい。:2009/08/11(火) 23:35:27 ID:PgOnvXDv0
>>690
そうなのですか(´・ω・`)
ありがとうございます
696名無しさん@お腹いっぱい。:2009/08/12(水) 00:47:33 ID:4ijfawZ40
>>689
俺もそれとほぼ同じ方法使ってるよ
キーリピート以外は困らないからそれでいっかって
697名無しさん@お腹いっぱい。:2009/08/12(水) 01:02:55 ID:SXoefWZw0
>>693
ありがとうございます。
さっそく変えてみましたが・・・やはりカンマのキーは反応しませんでした。

カンマの部分をピリオドに変えてみたところ 「>^.::」 は、反応しました。
698名無しさん@お腹いっぱい。:2009/08/12(水) 01:09:05 ID:xEgUlF6y0
>>697
>^vkBC::MsgBox, Hoge hoge
699名無しさん@お腹いっぱい。:2009/08/12(水) 01:13:48 ID:xEgUlF6y0
;JoyStickでキーをリピート。
;※全角スペースをTabスペース(半角スペース)に置き換える。
SetTimer,JoyTimer,20
return

JoyTimer:
JoyStickNumber=1
GetKeyState, JoyXkey, %JoyStickNumber%JoyX
if JoyXkey=100 ;右ボタン
 JoyStickRepeat(JoyStickNumber . "JoyX", JoyXkey, "Right")
return

1Joy2::JoyStickRepeat(A_ThisHotkey, "D", "Enter")
1Joy3::JoyStickRepeat(A_ThisHotkey, "D", "Bs")

JoyStickRepeat(JoyStick, n, key) {
 loop, {
  send, {Blind}{%key%}
  if(A_Index=1){
   loop, 20 { ;リピートされるまでの待ち時間約200ms(20*10ms)
    sleep, 10
    GetKeyState, Joykey, %JoyStick%
    if Joykey!=%n%
     break
   }
  }else
   sleep, 30 ;リピート間隔
  GetKeyState, Joykey, %JoyStick%
  if Joykey!=%n%
   break
 }
}
700名無しさん@お腹いっぱい。:2009/08/12(水) 01:16:26 ID:SXoefWZw0
>>698
できた〜〜〜〜〜thx!
701名無しさん@お腹いっぱい。:2009/08/12(水) 03:01:32 ID:7RMhHcUQ0
>>699
ありがとうございます
こんな素敵なスクリプトに作り直して頂きとても嬉しいです

知らなかった記述法など、凄く勉強になりました
大切に使わせてもらいますね^^
702名無しさん@お腹いっぱい。:2009/08/12(水) 23:45:35 ID:YBR8uEr50
「;」と「;=」と記入したときの違いがわかりません。
何が違うのですか?
703702:2009/08/12(水) 23:46:57 ID:YBR8uEr50
ごめんなさい。
「:」と「:=」の違いです。
704名無しさん@お腹いっぱい。:2009/08/13(木) 03:26:10 ID:9ys3wLMh0
フォルダの表示状態(一覧とか詳細とか縮小版とか)を取得する方法はないでしょうか?

ControlGetでフォルダのSysListView32のStyleを取得すれば
判別できるかもと思ったのですが、どの状態でも同じ値が返ってきます
705名無しさん@お腹いっぱい。:2009/08/13(木) 04:49:40 ID:0djq91CD0
>>704
ViXで試したらちゃんと表示形式を変更すると値が変わるんだが、
Explorerだとうまくいかないね
706名無しさん@お腹いっぱい。:2009/08/13(木) 06:53:30 ID:hZDz53Xz0
LVM_GETVIEW ( http://msdn.microsoft.com/en-us/library/bb761091%28VS.85%29.aspx )

#IfWinActive, ahk_class CabinetWClass
Pause::
; LV_VIEW_ICON:=0, LV_VIEW_DETAILS:=1, LV_VIEW_SMALLICON:=2, LV_VIEW_LIST:=3, LV_VIEW_TILE:=4 SendMessage, LVM_GETVIEW:=0x108f, 0, 0, SysListView321
Tooltip, %ErrorLevel%
Return


707名無しさん@お腹いっぱい。:2009/08/13(木) 06:56:56 ID:hZDz53Xz0
あ、、、操作ミスったorz
; LV_VIEW_ICON:=0, LV_VIEW_DETAILS:=1, LV_VIEW_SMALLICON:=2, LV_VIEW_LIST:=3, LV_VIEW_TILE:=4
SendMessage, LVM_GETVIEW:=0x108f,,, SysListView321
でつ。

縮小版とアイコン表示は同じ戻り値が返る。(アイコンの大きさが異なるだけなので)
708名無しさん@お腹いっぱい。:2009/08/13(木) 10:37:45 ID:HeLr2xfU0
>>703
どこを混同しているのかすらわからない
類似箇所ないだろ
709名無しさん@お腹いっぱい。:2009/08/13(木) 12:55:08 ID:/bp41JnQ0
>>708
It's a 夏厨
710名無しさん@お腹いっぱい。:2009/08/13(木) 12:58:12 ID:/qcwRUmd0
>>703
var = hoge ;hogeという文字列を代入
var := hoge ;hogeという変数の値を代入
711名無しさん@お腹いっぱい。:2009/08/13(木) 14:10:39 ID:PdTB0rzZ0
>>706-707
ありがとうございます
こういう方法があったのかぁ
712名無しさん@お腹いっぱい。:2009/08/13(木) 18:30:26 ID:crcJT5Lo0
>>703
;----- スクリプト(1) ここから ------
a = 1
b = 2
c = 3
d = a + b + c
e = %a% + %b% + %c%
f = % a + b + c
g := a + b + c
h := a b c
i := a . b . c
j = %a% . %b% . %c%
k = % a . b . c
msgbox, , 代入結果, a = %a%`nb = %b%`nc = %c%`nd = %d%`ne = %e%`nf = %f%`ng = %g%`nh = %h%`ni = %i%`nj = %j%`nk = %k%
;----- スクリプト(1) ここまで ------


;----- スクリプト(2) ここから ------
; A と B は記述方法が異なるだけで結果は同じ。
a = 1

; if文で記述 これをAとする。
if !a
msgbox, , if文, 0
else
msgbox, , if文, 1

; 三項演算子で記述 これをBとする。
; : は if文 でいうところ else みたいなもの
msgbox, , 三項演算子, % !a ? "0" : "1"
;----- スクリプト(2) ここまで ------
713名無しさん@お腹いっぱい。:2009/08/13(木) 21:31:29 ID:mHIrBCFu0
>>709
ごめん

>>710
>>712
ありがとうございました。理解できました。
714名無しさん@お腹いっぱい。:2009/08/14(金) 01:53:03 ID:NS9L2X8G0
AHK単体で
・CapsLock と 左Ctrl の交換
・特定アプリ (MSワード や IE7) での IMEのON/OFFの右Altなどへの割り当て
は上手くできないという認識ですが、
前者はレジストリ書き換えによるスキャンマップ変更で対応できるとして
後者は、AltIMEやmayu と併用するくらいしかないでしょうか。
715名無しさん@お腹いっぱい。:2009/08/14(金) 03:59:22 ID:8E4Yw/P/0
> ・特定アプリ (MSワード や IE7) での IMEのON/OFFの右Altなどへの割り当て
#IfWinActive ahk_class OpusApp
RAlt::vkF3sc029
でイナフ
716名無しさん@お腹いっぱい。:2009/08/14(金) 07:05:50 ID:n0zGaKIW0
IE7は無いけど、IE8で確認したけど挙動がおかしい?(XP SP3, Ahk1.0.48.03, IE8.0.6001.18702)
MS-Wordはバージョンが書いてないけど、2002じゃ無問題。

LAlt::
RAlt::
 Tooltip, %A_ThisHotkey%
 KeyWait, %A_ThisHotkey%
 Tooltip
 Return

動作確認で上記スクリプトを使った。(押下中のみキー名をチップ表示、Alt入力は*普通は*隠される)
UseHookを使わないでもフックでホットキーが設定される。

(A) Altを乗っ取ってキー入力を隠せない (たまにそうでない時もあった、再現方法不明)
   キー押下中、Altキーリピートが発生しているような感じでメニューバーの出退を繰り返す。
(B) チップ表示はキー押下と押下解除を検知して正常に動いている
(C) [Alt]+[F4]などの組み合わせは効かない。

ん〜、これってDirectInputとやらで拾ってるのかなぁ。だとしたらAHKじゃ料理できない?

@ドライバ    デバイスからの入力を偽装                  mayu, AltIME など
 ↓
ADirectInput  拾うだけ、すり替え不可能                   ゲームとか
 ↓
BLLフック    拾って捨てられる、VK発行で別キーにアサイン変更   AHK, keyhac, yamy など
 ↓
C前面窓

IEはAで拾って捨てられないから、AHKが拾える → (B)の挙動
が、Aでキー状態を拾えるからAHKで捨てても隠せない → (A)の挙動

でもキーリピートの要な状態になるのはよく分からん。
717名無しさん@お腹いっぱい。:2009/08/14(金) 08:44:44 ID:q3cXuBfBP
>>716と同じ環境だけど、IE8でも普通に動作してるな
(A)のような挙動は発生していない

DLL使ったIMEの状態セットは出来んけど、
RAlt:: Send !{vkF3sc029}
なら、問題なく切り替わるし、悪影響も出ない
718名無しさん@お腹いっぱい。:2009/08/17(月) 05:03:52 ID:I90vx+LZ0
ゲームパッドとマウスジェスチャーを組み合わせるような話って
このスレで出た事ある?
無線のパッドで何でも出来るようになったら
ごろ寝でも使えるしめちゃくちゃ楽じゃね?www
って思ってやってみようとしてるんだが、
多少弄ったことがある程度の俺には難しそうで・・・。

とりあえず、MouseGesture.ahkと
ttp://www.autohotkey.com/docs/scripts/JoystickMouse.htm
これを元にやってみようと思うんだが、
登録するのがJoyボタンだと押下状態にならないのと、
カーソルの動きがぎこちない(リンクの上を通過する時引っかかる感じ)
ことが問題だ。
719名無しさん@お腹いっぱい。:2009/08/17(月) 05:34:28 ID:OIYhov2q0
ごろ寝操作するならゲームパッドより
トラックボール(ハンディタイプ)+マウスジェスチャーがオススメ
720名無しさん@お腹いっぱい。:2009/08/17(月) 07:44:56 ID:uizTvTRQP
>>718
定番の高速化の呪文付けるとか。

#NoEnv
Process Priority,,High
SetBatchline -1

それから、パッド持ってないからそのスクリプトは試してないが、
俺が自分でマウスジェスチャ作ってみた時は

>> SetTimer 監視処理, 10

よりも、

>> Loop
>> {
>>  監視処理
>>  sleep 10
>> }

の方が追従性が良かったような記憶。
721名無しさん@お腹いっぱい。:2009/08/17(月) 11:05:21 ID:YQlbhHiz0
ウィンドウのメインメニューを非表示にする方法って、SetMenuでメニュー変更するしかないのかな?
表示非表示トグルしようと思うとGetMenuでハンドルをどこかに保存しとかないといけないのが気に入らない
722名無しさん@お腹いっぱい。:2009/08/17(月) 13:14:03 ID:92l6WzZ50
ゴロ寝研究歴10年の俺としては、

・PS3のBDリモコン(3000円程度で買える。どこへ向けても操作可能)
・GlobePIE(PS3リモコンの信号を、普通のキー入力に変換する)
・AHK(さいごに料理)

の組み合わせが有力という結論になった。
723名無しさん@お腹いっぱい。:2009/08/17(月) 16:54:00 ID:I90vx+LZ0
>>719,720,722
人少なそうだったからこんなにレス貰えるとは思わなかった。
ありがとう。

>>719
確かにトラックボールも魅力なんだけど、
リクライニングチェアに座りながら〜とかのように、
近くに安定した置き場所がなくても使えるという点で、
ゲームパッドでやってみようと思ったんです。

>>720
これはいい呪文をありがとう。
これでカーソルはスムーズに動くようになりました。
一応修正として、3行目は
SetBatchline -1 → SetBatchlines -1
のようです。

>>722
俺が今使ってるのはLogicoolのGPW-600なんだが
GlobePIEてのはそれでも使えるのかな?
ちょっと見てくる。

またしばらくぼちぼちやってみて報告に来ます。
724名無しさん@お腹いっぱい。:2009/08/18(火) 11:29:14 ID:juAkb4is0
フリーズしたブラウザの終了・再起動を作っているんだけど、
Process, Closeってハングアップしたソフトを強制終了できないんだね。
taskkill.exeを使ったほうがいいみたい。
725名無しさん@お腹いっぱい。:2009/08/18(火) 11:40:24 ID:juAkb4is0
>>724
自己レス
taskkillでも無理だったw
×押して「このプログラムは応答していません」を出すか、タスクマネージャからしか無理だった┐(´ー`)┌
726724:2009/08/18(火) 11:44:08 ID:juAkb4is0
ググレカスだったつД`)・゚・。・゚゚・*:.
Run, taskkill.exe /PID %hwnd% /F,, Hide
/Fが必要だったみたい
727名無しさん@お腹いっぱい。:2009/08/18(火) 13:43:52 ID:iaC8nTZU0
余談だけど、WinGetClassでハングしたウィンドウからクラス名を取ろうとすると "Ghost" ってクラス名が返るよ
728名無しさん@お腹いっぱい。:2009/08/19(水) 21:23:20 ID:7SqL6uYp0
glovepieならwiiリモコンも使えるよ。
リモコンでどう操作するかセンスがいるが
ゴロ寝で片手で操作できる。
729名無しさん@お腹いっぱい。:2009/08/19(水) 22:05:56 ID:8rDH5cks0
個人的には、"ThinkPlus USBトラベルキーボード ウルトラナビ付" が最強だと思っている。
730名無しさん@お腹いっぱい。:2009/08/19(水) 22:24:14 ID:oumRRGs/0
こんなデカイのじゃ、普通のキーボードと、なんも変わらないじゃん。
http://satopie.typepad.jp/blog/WindowsLiveWriter/R0010412-1-8x6.JPG

ごろ寝で操作するには、どこに置いても指の操作位置が変わらないデバイスが必要。
肝は、少ないボタン数のデバイスでいかに自分の欲する機能を実装させるか、
その目的を、上手にカスタマイズさせられるかどうかがポイントだよ。
731名無しさん@お腹いっぱい。:2009/08/19(水) 22:55:26 ID:I875sztR0
Wiiリモコンはごろ寝時じゃマウスと同程度にしか使えないんじゃないの
と思ったけどヌンチャクスティックは使えるか
732名無しさん@お腹いっぱい。:2009/08/19(水) 22:59:11 ID:HSTF41/g0
>>723
トラックボールの無線タイプで手に持って使えるやつがあるよ
733名無しさん@お腹いっぱい。:2009/08/20(木) 00:05:58 ID:03ggZ+Ah0
>>732
http://www.clevery.co.jp/eshop/c/c2160301/
の下三つみたいなタイプのこと?
734名無しさん@お腹いっぱい。:2009/08/20(木) 01:32:08 ID:4zWm1u8l0
>>733
そう、そんなやつ。
その3つの中ではボールが大きいアクロス製が操作性しやすいと思う。
(個人的に、ボールが小さ過ぎると操作性が良くない)
735名無しさん@お腹いっぱい。:2009/08/20(木) 11:20:35 ID:caHSkIPk0
MouseGesture2 になるかもしれませんが、エクスプローラの
空白部分のダブルクリックで上位フォルダへという動作を
実現出来ないでしょうか。
736名無しさん@お腹いっぱい。:2009/08/20(木) 13:24:34 ID:4dA8Ktir0
DoubleClickTime:=DllCall("User32.dll\GetDoubleClickTime", "Int")
#IfWinActive, ahk_class CabinetWClass
~LButton::
If (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<DoubleClickTime && LVM_HITTEST()==1)
Send, {Backspace}
Return
; マウス直下が ListView のときにマウスポインタの下に何があるかを調査
; [戻り値] なし:非ListView, 1:LVHT_NOWHERE, 2:LVHT_ONITEMICON, 4:LVHT_ONITEMLABEL, 8:LVHT_ONITEMSTATEICON
LVM_HITTEST() {
MouseGetPos,,,,hwnd,3
WinGet,pid,PID,ahk_id %hwnd%
VarSetCapacity(point,8)
DllCall("GetCursorPos","UInt",&point)
SendMessage, LVM_SCROLL:=0x1014, 0, 0,, ahk_id %hwnd%
If (ErrorLevel) {
p:=DllCall("kernel32.dll\GlobalAlloc","UInt",0x40,"UInt",8,"UInt")
NumPut(NumGet(point,0),p+0,0),NumPut(NumGet(point,4),p+0,4)
DllCall("user32.dll\ScreenToClient","UInt",hwnd,"UInt",p)
hp:=DllCall("kernel32.dll\OpenProcess","UInt",0x001F0FFF,"UInt",0,"UInt",pid,"UInt")
pi:=DllCall("kernel32.dll\VirtualAllocEx","UInt",hp,"UInt",0,"UInt",24,"UInt",0x1000,"UInt",0x4,"UInt")
DllCall("kernel32.dll\WriteProcessMemory","Int",hp,"UInt",pi,"UInt",p,"Int",8,"Int",0)
SendMessage, LVM_HITTEST:=0x1012,0,%pi%,,ahk_id %hwnd%
DllCall("kernel32.dll\ReadProcessMemory","UInt",hp,"UInt",pi+8,"UIntp",flag,"UInt",4,"UInt",0)
DllCall("kernel32.dll\VirtualFreeEx", "UInt",pi, "UInt",0, "UInt",0x8000)
DllCall("psapi\CloseProcess","UInt",hp)
DllCall("kernel32.dll\GlobalFree","UInt",p)
Return (flag & 0xF)
}
}
737名無しさん@お腹いっぱい。:2009/08/20(木) 13:29:19 ID:4dA8Ktir0
・ LVM_HITTESTは前スレのパクって少し改造
・ 左ペイン有りタイプ(ahk_class ExplorerWClass)のやつはレスの行数・バイト数の関係で割愛した
・ XP SP3(x86)でしか試してない
738735:2009/08/20(木) 14:14:21 ID:caHSkIPk0
す…すごい…完璧に動作しました…。。
まさかそのまま回答貰えるとは思いませんでした。感動です。
有り難う御座いました。
739名無しさん@お腹いっぱい。:2009/08/20(木) 15:34:10 ID:1ncIAtQe0
>>736
お見事
これを作るのにどれくらいの時間を要したのですか?
740名無しさん@お腹いっぱい。:2009/08/20(木) 16:00:10 ID:FmGT29Wc0
何この便利なソフト
741735:2009/08/20(木) 16:24:49 ID:caHSkIPk0
この機能のためだけにファイラ使ってたので
本当に有り難いです。
742名無しさん@お腹いっぱい。:2009/08/20(木) 18:08:34 ID:iaxJO6Ep0
#EscapeCharでエスケープ文字を別のものに変えようと思うのですが
お勧めの文字を教えてください。
743名無しさん@お腹いっぱい。:2009/08/20(木) 18:19:40 ID:E5+T4k9IP
そんなものは無い

普通、エスケープ文字の変更なんて、必要に迫られた時に一時的に変えるもんだ

コードは全部自分で書く、他人やネット上のコード資産を流用するつもりはない、
公開するつもりもないというなら、別に止めはしないけど

\でも何でも好きにすればいい
744名無しさん@お腹いっぱい。:2009/08/20(木) 19:31:07 ID:iaxJO6Ep0
>>743
理解できた。一時的に書き換えて戻すんですね。
745名無しさん@お腹いっぱい。:2009/08/20(木) 20:28:15 ID:b+2ZWZ9Y0
このソフトのWinset,Topってちゃんと機能してる?

レジストリの
HKCU\Control Panel\Desktop\ForegroundLockTimeout
の値に関係なく、時々しか動かないのはなぜなんだろう
746名無しさん@お腹いっぱい。:2009/08/21(金) 06:25:52 ID:lsLS9ZVq0
AHK は API コールしてるだけでしょ。

大抵は WinActivate か WinSet, TopMost で事足りそうだけど
747名無しさん@お腹いっぱい。:2009/08/21(金) 22:19:18 ID:J8RJMDPM0
AHKはジョイスティックのボタンを押すとキーボードのキーの押すってことは
実現できるみたいだけど逆にキーボードのキーを押すとジョイスティックの
ボタンのボタンを押したことにするってのはAHKで実現できます?

ジョイスティックにしか対応していないゲームを
キーボードで好きなキーの組み合わせでプレイできたらいいなぁと考えてます
748名無しさん@お腹いっぱい。:2009/08/22(土) 01:11:00 ID:MIjZVFJ50
そのゲームで試してみればいいんじゃね
749名無しさん@お腹いっぱい。:2009/08/22(土) 05:00:45 ID:ukRNjdkk0
>>747
無理だよ。
AHKではジョイスティック状態を見て仮想キー発行するだけで、
乗っ取りもできないし(≒アサイン変更できない)、
特定のジョイスティックが操作されたことをエミュレートすることも出来ない。
750名無しさん@お腹いっぱい。:2009/08/22(土) 07:45:26 ID:4yMo+qdkP
ドライバの範疇になるからね
一応、公式にもPPJoyなどを使えって書いてある
ttp://www.autohotkey.com/docs/misc/RemapJoystick.htm

PPJoy  ttp://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
GlovePIE ttp://carl.kenner.googlepages.com/glovepie
751747:2009/08/22(土) 22:55:45 ID:oFJnOXgA0
>>749
分かりやすい解説ありがとうございます

>>750
公式のそのページのImportant Notesに書いてありますね
見落としていました。すみません
PPJoyを入れてからPPJoyKeyというもので設定することで実現できそうです
GlovePIEはよく分からないので調べてみることにします


ところでAHKは最近使い出したんだけど便利ですね
だらーっとマウスだけでPC使いたいときにタスク(ウィンドウ)の切り替えが
めんどくさいと思ったのでタスクバーにカーソルがあるときにホイールを
回すとタスクバーの並びの順番で次々とウィンドウが切り替わる
スクリプトを作ってみました

数年前はTaskWheelってソフトがあったのですけど動かなくなってて(XPあたりから?)
困ってたのですけどAHKで実現できたので感動です
752名無しさん@お腹いっぱい。:2009/08/23(日) 00:42:01 ID:WR+enDZt0
修飾キーの仮想的な押し下げを取得するにはどうすればよいのでしょうか

753名無しさん@お腹いっぱい。:2009/08/24(月) 00:40:12 ID:8rMNgYTs0
ProcessMem.ahkを使用して、TVTestのボリュームの数値を取得したいです。
VOLの変更は0〜100で、writeProcMem(PID,0x004E92D4,00000000)〜writeProcMem(PID,0x004E92D4,64000000)で出来たのですが、
GETVOL := readProcMem(RUN,004E92D4,Int)を実行すると、
Error: This DllCall requires a prior VarSetCapacity.
The program is now unstable and will exit.
って出てしまいます。どうしたら取得できるのか教えてください。
754753:2009/08/24(月) 00:42:10 ID:8rMNgYTs0
訂正
○GETVOL := readProcMem(PID,0x004E92D4,Int)
×GETVOL := readProcMem(RUN,004E92D4,Int)

○で実行すると上記のエラーになります。
755名無しさん@お腹いっぱい。:2009/08/24(月) 03:20:41 ID:lLdR6vld0
>>754
3番目の引数で型指定する場合には
ダブルクォーテーションで囲まないと駄目なんじゃないかな
756名無しさん@お腹いっぱい。:2009/08/24(月) 06:06:06 ID:gxjGqeBk0
検索ソフト Everything では Tab キー入力で 選択状態の部分が
検索語入力欄 (Edit1) と 検索結果一覧 (EVERYTHING_LISTVIEW1) とで
入れ替わります。
どちらが選択状態にあるのかを ControlGetFocus を使って特定しようとしましたが
うまくいきませんでした。
選択状態にあるのと、Focus があたっているのとは別物のようです。
選択状態にある ClassNN を特定するにはどうすればよいでしょうか?



757名無しさん@お腹いっぱい。:2009/08/24(月) 07:48:34 ID:9v5tgYpqP
>>756
選択状態 = フォーカスが当たってる = 操作もしくは入力が行なわれる箇所、って意味でなら
普通にControlGetFocusで取得できるけどな
Everything zip版1.2.1.371 WinXP SP3

取得するタイミングやその周辺のコードに問題があるのでは?
どうしても解決できないなら、その「うまくいかない」コードを張った方が良いと思う
758名無しさん@お腹いっぱい。:2009/08/24(月) 08:44:53 ID:KOAXq7FY0
>>751
>だらーっとマウスだけでPC使いたいときにタスク(ウィンドウ)の切り替えが
kwsk
759名無しさん@お腹いっぱい。:2009/08/24(月) 09:39:03 ID:gxjGqeBk0
>>757
検証ありがとうございました。
ControlGetFocus を使って取得することができました。
自分なりに手を尽くして投稿したつもりでしたが、
「できたよ。」 と言われて、見直してみると解決しました。
恥ずかしい限りです。
760名無しさん@お腹いっぱい。:2009/08/24(月) 10:01:53 ID:8rMNgYTs0
>>755
出来ました。
ありがとうございました。
これで8時間悩んだ自分が情けないです。
761751:2009/08/24(月) 22:39:03 ID:wQL2LMl60
>>758
需要あるか分からないけど詳しく書くよ

DllCall駆使してタスクバーに並んでいるタスクの中から現在TBSTATE_CHECKEDである
タスクのボタン(クリックしたらボタンが凹むけどこの状態)を見つけてその次か前の
ボタンに対応するウィンドウをWinActivateするって関数を作りました

でホイールを回すときにMouseGetPosとWinGetClassを実行しカーソル以下の
ウィンドウのクラスを得てShell_TrayWndだったら(タスクバー上なら)その関数を呼ぶって作り

最初に見つかったTBSTATE_CHECKEDの次か前をWinActivateするだけなので
Ctrl+クリックで複数押してると挙動が怪しい気がする
762751:2009/08/24(月) 23:08:35 ID:wQL2LMl60
ついでに余談ですが最初は律儀にタスクバーのボタンに対応するウィンドウが
アクティブかどうかをチェックするようにしてたんだけど
タスクバーにあるものと実際にアクティブであるウィンドウが異なるものがあるみたい
(TApplicationとか)だったので単純にボタンがTBSTATE_CHECKEDかどうかを
条件にすると悩まなくて良くなった

正直プログラムはあまり分かっていないので(ウィンドウハンドルって何ってレベルなので)
ネットで見つけた参考になるソースからコピペしつつ思いつくままに作ったものです

試行錯誤の結果とりあえず動いているからいいやって感じのコードで
誰か替わりに綺麗なものを作って欲しいぐらいです

見せるのが恥ずかしいですけど具体的なコードを見てみたいということ
でしたらどこかアップロード先を教えてください
コードは(たぶん無駄に)長いのでここに書くと迷惑だと思います……
763名無しさん@お腹いっぱい。:2009/08/25(火) 00:55:18 ID:ad9CTBgs0
>>751
758じゃないけど俺もkwsk
ttp://www.axfc.net/
764名無しさん@お腹いっぱい。:2009/08/25(火) 08:23:54 ID:/AgQRfaoP
751じゃないけど、Lexicos版を張っておくので参考にしてみては
ttp://www.autohotkey.com/forum/topic462.html
765名無しさん@お腹いっぱい。:2009/08/25(火) 08:31:27 ID:xp7sy24k0
Ctrlキーがきかなくなったので、Caps LockキーをCtrlキーに割り当てたくて以下のようにしましたが、
うまく動作しません。

sc3A::Send, ^

どのようにすれば所望の動作が得られるのでしょうか?
766名無しさん@お腹いっぱい。:2009/08/25(火) 09:06:41 ID:ZRyaJZa30
>>3
767名無しさん@お腹いっぱい。:2009/08/25(火) 09:15:54 ID:xp7sy24k0
>>766
Change Keyで対処できました
768名無しさん@お腹いっぱい。:2009/08/25(火) 09:40:25 ID:AjcuNiRt0
>>761-762
こことか?

スクリプト投稿スレ
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1092315194/
769751:2009/08/26(水) 01:22:25 ID:9kfLAdmg0
>>764
すでにあるんですねー
フォーラムを探してみらタスクバーとかボタン関係のライブラリもあるのか……
自作のは微妙感が出てきましたけどちょっと手直しして一応上げることにします

AutoHotkeyを流行らせるページにアップローダーが
あるようなのでそちらをお借りすることにしました
タスクバー上でホイールを回転するとタスクを切り替えるスクリプト
http://lukewarm.s101.xrea.com/up/file/115.zip

なお「最後に見つかった」TBSTATE_CHECKEDの次か前をWinActivateするように変更しています

一部はネットで見つけたコードそのままですけど変数名が何の略なのか知らなかったりするし
中途半端な64bit対応なような……たまたま動いているだけだったりするとアレですね
DllCallでの引数で特に型が正しいかすごく心配

そんな程度のあまりWindowsプログラミングに詳しくない人が作ったものですので
そのあたりの不備があればご指摘いただけると助かります
770751:2009/08/26(水) 01:44:38 ID:9kfLAdmg0
さっそくコードに不備がありました
TBBUTTON構造体のdwDataを2回も取得していました
これはただ無駄なだけでしょうけど適当にお読み変えください……
771名無しさん@お腹いっぱい。:2009/08/26(水) 01:56:33 ID:Sr4AOWAI0
>>769
ためしに動かしてみたら、正常に動いたよ。おもしろいね。
ところでchech_cursor_on_taskbar() のchechは、checkのtypo?
772769:2009/08/26(水) 23:21:54 ID:9kfLAdmg0
>>771
typoです
自分ではなかなか気がつかないものですね

typo修正とホイールの回転がウィンドウに伝わってしまうことがあるようなので
ちょっと変更してアップロードしなおしておきました
http://lukewarm.s101.xrea.com/up/file/115.zip
773名無しさん@お腹いっぱい。:2009/08/28(金) 22:15:00 ID:2oFsDOlf0
SciTE4AutoHotkey で日本語を表示させるにはどうしたらいいですか?
774名無しさん@お腹いっぱい。:2009/08/28(金) 22:29:35 ID:PBJHqi5p0
ここで上がったマウスジェスチャ(マウスを回すとスクロールする)のソースを参考に、actionscriptでマウスジェスチャを実験して成功した。
これでクリックの代わりに縦にこする、横にこする、時計周り、反時計回りなどに反応するFLASHが作れる。
ありがたやありがたや。
775名無しさん@お腹いっぱい。:2009/08/28(金) 23:25:24 ID:QRUCRQn40
>>773
AutoHotokeyを流行らせるアップローダ - 114.zip じゃ駄目なのん?
776名無しさん@お腹いっぱい。:2009/08/28(金) 23:28:07 ID:bzK5sEKm0
>>774
どれですか?
それって、ホイールがついていないマウスでも
簡単にスクロールできるようになるということ?
777名無しさん@お腹いっぱい。:2009/08/28(金) 23:41:11 ID:PBJHqi5p0
kurukuruscroll.ahk
というスクリプトです。このスレだったか、前スレ以前のやつだったかは失念。
778名無しさん@お腹いっぱい。:2009/08/29(土) 00:02:28 ID:7kxPApEp0
>>777
ありがとうございます。過去ログをあさってきました。これですかね


>492 :名無しさん@お腹いっぱい。:2009/03/21(土) 00:19:19 ID:JP2qPQY00
> 某スレで盛り上がってたので書いてみました。
> カーソルをくるくる回すとスクロールします。
> ttp://lukewarm.s101.xrea.com/up/file/105.zip
779名無しさん@お腹いっぱい。:2009/08/29(土) 17:35:58 ID:/hb86p7b0
FileMoveDir, C:\hoge\hogehoge, C:\hoge\fuga, 2
とするとフォルダ名hogehogeをfugaにリネーム出来ますが

FileMoveDir, C:\hoge\hogehoge, C:\hoge\HOGEHOGE, 2
の様に大文字小文字の違いしかないとhogehogeのままでリネーム出来ません

一度hogehogeを他の名前fugaにすればHOGEHOGEに出来ますが多少ブサイクです
FileMoveDir, C:\hoge\hogehoge, C:\hoge\fuga, 2
FileMoveDir, C:\hoge\fuga, C:\hoge\HOGEHOGE, 2

なので何か他に、名前が大文字小文字の違いしかなくてもリネームする方法はありませんか?
ただのFileMoveだとその場合でもリネーム出来るんですが
780名無しさん@お腹いっぱい。:2009/08/29(土) 18:09:13 ID:P2NMjwtz0
>>779
StringCaseSense
文字列の比較で大文字小文字を区別するかを設定する
781名無しさん@お腹いっぱい。:2009/08/29(土) 18:23:59 ID:qfay6CwSP
これもけっこうブサイクだとは思うけど
DllCall("MoveFileEx", Str, "C:\hoge", Str, "C:\HOGE", Int, 0x09)

パラメータの意味はMSDN見てくれ
782名無しさん@お腹いっぱい。:2009/08/29(土) 18:48:01 ID:N8jh+zOH0
>>99をskkimeでも実現させたいです
>>103のアドバイスにより、
それっぽいウィンドウクラス名は見つけました

ahk_class MSCTFIME Composition
ahk_class SkkImeTextService CandidateListUI Wnd Class

これを正規表現にどう追加すればよいのか解りません
783名無しさん@お腹いっぱい。:2009/08/29(土) 18:55:14 ID:9MJwAM550
ぐぐれば
784名無しさん@お腹いっぱい。:2009/08/29(土) 19:24:01 ID:qfay6CwSP
>>782
1.5の場合なら、変換中が SKKIME1.5UCompStr で
候補窓が SKKIME1.5UCand

普通に

#IfWinExist ahk_class SKKIME1.5UCompStr
#IfWinExist ahk_class SKKIME1.5UCand
ESC::Send, ^g

だとか、

if( WinExist("ahk_class SKKIME1.5UCompStr") or WinExist("ahk_class SKKIME1.5UCand") ){
 hogehoge
}

とかすればいいと思う
785名無しさん@お腹いっぱい。:2009/08/29(土) 19:25:53 ID:N8jh+zOH0
>>784
あれ、では私が取得したと思っていたウィンドウクラスは誤りでしたか
ありがとうございます
786名無しさん@お腹いっぱい。:2009/08/29(土) 19:47:14 ID:qfay6CwSP
あーすまない、XPの話なんでVistaだと違うかもしんない
それでも、固定文字列なんだから正規表現など使わずに普通に記述すれば問題ないと思う
787名無しさん@お腹いっぱい。:2009/08/29(土) 19:47:21 ID:PwvVqkRB0
HDDあさったら出てきた >>99氏の改造版関数
現役で使われて可能性のあるIMEだとあとはJapanistくらいか?
持ってないからクラス調べられないけど

IME_GetConverting(WinTitle="A",ConvCls="",CandCls="") {

  ;IME毎の 入力窓/候補窓Class一覧 ("|" 区切りで適当に足してけばOK)
  ConvCls .= (ConvCls ? "|" : "")         ;--- 入力窓 ---
      . "ATOK\d+CompStr"           ; ATOK系
      . "|imejpstcnv\d+"           ; MS-IME系
      . "|WXGIMEConv"            ; WXG
      . "|SKKIME\d+\.*\d+UCompStr"      ; SKKIME Unicode

  CandCls .= (CandCls ? "|" : "")         ;--- 候補窓 ---
      . "ATOK\d+Cand"            ; ATOK系
      . "|imejpstCandList\d+|imejpstcand\d+" ; MS-IME 2002(8.1)XP付属
      . "|mscandui\d+\.candidate"      ; MS Office IME-2007
      . "|WXGIMECand"            ; WXG
      . "|SKKIME\d+\.*\d+UCand"       ; SKKIME Unicode

  WinGet, pid, PID,% "ahk_id" WinExist(WinTitle)
  tmm:=A_TitleMatchMode
  SetTitleMatchMode, RegEx
  ret := WinExist("ahk_class " . CandCls . " ahk_pid " pid) ? 2
    : WinExist("ahk_class " . ConvCls . " ahk_pid " pid) ? 1
    : 0
  SetTitleMatchMode, %tmm%
  return ret
}
788名無しさん@お腹いっぱい。:2009/08/29(土) 20:17:16 ID:/hb86p7b0
>>780-781
StringCaseSenseは特定のコマンドでしか有効でないようでダメでしたが

MoveFileExのDllCallで出来ましたのでこれを使おうと思います
ありがとうございました
789名無しさん@お腹いっぱい。:2009/08/30(日) 02:13:56 ID:AM5y33yK0
>>788
StringCaseSenseはダメだったかw

無変換TABで、直近アクティブだった窓と行き来しようと思うんけど、
こんなショートカットってもともとなかったっけ?思い出せない。
Alt,WinとTab,Escの組み合わせじゃ無理だった。

SetTimer, GetID
return

GetID:
WinGet, id,, A
if id not in %id1%,%id2%
{
if (id!=id2)&&(Previousid!=id1)
id1:=id
else
id2:=id
}
Previousid:=id
WinWaitNotActive, ahk_id %id%
return

~vk1D & TAB::
if (id = id1)
WinActivate, ahk_id %id2%
else
WinActivate, ahk_id %id1%
return
790名無しさん@そうだ選挙に行こう:2009/08/30(日) 08:24:15 ID:oGkA+FvIP
GetWindow()で直下のウィンドウを得る方法もあるよ
(非表示ウィンドウが返る場合もあるので、IsWindowVisible()で判断する)

~vk1D & TAB::
hWnd := WinActive("A")
Loop
{
hWnd := DllCall("GetWindow", UInt, hWnd, Int, 2 ) ; 2 = GW_HWNDNEXT
if( DllCall("IsWindowVisible", UInt, hWnd ) )
break
}
WinActivate ahk_id %hWnd%
return
791名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:44:02 ID:AM5y33yK0
>>790
いいと思ったけど、またあのやっかいな問題が出てきたw
>やっかいなのがDelphi製のソフトのTApplicationというクラス名のウィンドウ。
>可視ウィンドウ扱いで、タスクバーにはこのウィンドウのタイトルが表示されるが、実際には大きさがゼロで画面には表示されない。

あと、ALTTABでも交互にはできるけど、最前面表示のウィンドウがあると23番目で交互するみたい。
>>789で、まあ使える程度だけど、満足しようと思う。
792名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:53:59 ID:AM5y33yK0
たまにWinCloseでも、WinKillでも終了しないソフトがある。

PostMessage, WM_QUIT:=0x12,,,, A
PostMessage, 0x112, 0xF060,,, A ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
上は、プログラムの終了。下は、ウィンドウを閉じる。
って認識でいいのかな?

WM_QUITがProcess,Closeみたいに強制終了じゃないなら、使おうと思うんだけど。
793名無しさん@そうだ選挙に行こう:2009/08/30(日) 17:50:02 ID:W9cphzuH0
このソフトって、キーコードでリマッピングしてるのかな?
それとも、キー配列に独自のナンバリングして管理してるのかな。
> < , . の挙動が不審。
英語キーボードの配列っぽい挙動になってる。
794名無しさん@お腹いっぱい。:2009/08/31(月) 09:12:30 ID:0KCMuPm10
AutoHotkey104803_Install.exe

Win32.Banker
が入っとってんけど既出?
http://files.uploadr.net/053ebd6c0c/Virustotal.%20MD5-%2052ce421af6ea59e569ee85477a2948b4%20Win32.Banker_1251677179041.jpg
795名無しさん@お腹いっぱい。:2009/08/31(月) 10:22:06 ID:fZ4Tm5cA0
>>794
>>794 のリンク先の画像見ると
結果 1/41(41種類のアンチウイルスエンジンのうち1種類がウイルスであると判断)で 2.44% だよな?

>Win32.Bankerが入っとってんけど
ちゃんとそのファイルの存在を確認したのか?

確認したのなら公式サイトに報告せにゃならんのだぞ?
796794:2009/08/31(月) 10:46:02 ID:0KCMuPm10
>>795
ディレクトリ見てもWin32.Bankerは見当たらんかったので可能性は低いんですね
何もなければいいんですが。お騒がせしました
797名無しさん@お腹いっぱい。:2009/08/31(月) 15:27:16 ID:fwzGyLK60
>>794に倣って AutoHotkey_Lの方をスキャンしてみた

ファイル名 AutoHotkey_L.exe
結果: 1/41 (2.44%)

eSafe 7.0.17.0 2009.08.30 Suspicious File

798名無しさん@お腹いっぱい。:2009/08/31(月) 15:38:56 ID:fwzGyLK60
AutoHotkeyの方は、McAfeeも反応するみたいだ

ファイル名 AutoHotkey.exe 受理 2009.08.31 06:35:34 (UTC)
結果: 2/41 (4.88%)

eSafe 7.0.17.0 2009.08.30 Suspicious File
McAfee-GW-Edition 6.8.5 2009.08.31 Heuristic.BehavesLike.Win32.Packed.C
799名無しさん@お腹いっぱい。:2009/08/31(月) 18:53:23 ID:9qxRFhF+0
例によってUPXが反応してるとかじゃなくて?
800名無しさん@お腹いっぱい。:2009/09/01(火) 09:27:40 ID:KAZzyOut0
ファイルを右ダブルクリックとかマウスホイールクリックしただけで
指定したソフトが起動してそのファイルを開いた状態で開けるよう設定するにはどうすればいいでしょうか?

具体的にはzipやrarをマウスホイールクリックしただけで
一発でそのファイルをマンガミーヤ(画像閲覧ソフト)で見れるようにしたいです

よろしくお願いします。
801名無しさん@お腹いっぱい。:2009/09/01(火) 10:03:24 ID:f8W/Z9JB0
どうせ、そういうZIPファイル等は特定のフォルダに入れているんだろうから
"ポチエス"か何かのファイルパスによって動作させるアプリを切り替えるツールを使うと楽かと

書いたとおりの動作をさせたいなら、
ホットキーをトリガーとしてフォーカスのあるアイテムのパスを取得して、
それを特定のexeに引数渡しをすればいいだけじゃないの
802名無しさん@お腹いっぱい。:2009/09/01(火) 10:05:18 ID:SE5UsAF70
803名無しさん@お腹いっぱい。:2009/09/01(火) 10:22:12 ID:EIQLEOtvP
久々の丸投げ質問だがw、作ってスレって無くなったのかね?

一番簡単な方法は、「送る」フォルダにアプリのショートカットを作って、
右ボタンとnとショートカットの先頭文字を送るとか

これとはまた別に選択ファイルを取得するのにCOMを使う方法などもあるけど
それはまた自分で試行錯誤してから具体的に聞くべき。
804名無しさん@お腹いっぱい。:2009/09/01(火) 10:42:55 ID:KAZzyOut0
>>801-803
ありがとうございます。
AHKでの設定はわからないのでとりあえず>>801さんに教えていただいた
ポチエスというのを使ってみたいと思います。
805名無しさん@お腹いっぱい。:2009/09/01(火) 10:48:01 ID:TXMcIrNa0
「設定」ってなんなんだよ。根本的に理解してなさすぎて不愉快だ
806名無しさん@お腹いっぱい。:2009/09/01(火) 10:50:02 ID:MnEK7gTa0
そんなレベルでピリピリせんでも・・・
807名無しさん@お腹いっぱい。:2009/09/01(火) 11:53:20 ID:f8W/Z9JB0
どこかで紹介か誘導でもされたんでしょ
文面からしていじるのが嫌そうだから(別に悪いことではない)、
そういうときは、完成品を勧めるのがお互いにとって幸せだよ。
808名無しさん@お腹いっぱい。:2009/09/01(火) 12:53:25 ID:cT8Q3d960
; 簡単ウィンドウ移動&リサイズ
^LButton:: Send,!{Space}M{Down}{Up}
^RButton::
   WinGetPos,,,w,h,A
   w -= 8
   h -= 8
   MouseMove,%w%,%h%
   Send,{LButton down}
   return
809名無しさん@お腹いっぱい。:2009/09/01(火) 13:24:44 ID:/3ZjD4QG0
>>808で思い出したけど、
↓のWM_NCHITTESTを監視してタイトルバーにいるように振舞う方法って
既存のアプリやフォルダで実現する方法ってないのかな?

703 :名無しさん@お腹いっぱい。[sage] :2008/11/13(木) 20:34:10 [夜] ID:zthSOgTK0 (PC)
GUIウィンドウのコントロールの無いところをドラッグしてウィンドウを移動したい。
GUIはタイトルバーなし (-Caption)。

OnMessageで、 WM_MOUSEMOVE(0x200) 受け取る関数を作る
で、LButton押下されたら初期押下地点からの移動差分だけ WinMove してるんだが
追従性が悪くてマウスポインタが窓の外にでると駄目になるorz

こういう窓ってよくあるけど、レスポンスよく実装するにゃどうすればいいのかな。

704 :名無しさん@お腹いっぱい。[sage] :2008/11/13(木) 22:41:54 [夜] ID:hwA95Qvn0 (PC)
>>703
OnMessage(0x84,"WM_NCHITTEST")
WM_NCHITTEST(){
Return 2
}
でどうだろう。
810名無しさん@お腹いっぱい。:2009/09/01(火) 14:08:03 ID:P5A3yJ5a0
WM_NCHITTEST()の中でMouseGetPosして
既存のアプリやフォルダかどうかを見りゃいいんじゃね?
811名無しさん@お腹いっぱい。:2009/09/01(火) 14:35:34 ID:EIQLEOtvP
自分のGUIでなければ、WM_NCHITTEST()は来ないでそ

ものすごい遅レスが許されるなら、>>809の703には↓この方法が一番良いと思う。
ttp://www.autohotkey.com/forum/viewtopic.php?p=64185#64185

先の703の追従性が悪いのはOnMessageで処理するからで、
普通に↓このスクリプトのようにLoopで監視する分には十分なレスポンスが得られるはず
ttp://www.autohotkey.com/forum/topic27487.html

要するに何を言いたいかというと、>>809には↑の方法じゃダメなのかということなんだが…
812名無しさん@お腹いっぱい。:2009/09/01(火) 15:03:06 ID:/3ZjD4QG0
>>811
>要するに何を言いたいかというと、>>809には↑の方法じゃダメなのかということなんだが…
おk、です。てかforumにもっとスマートな方法が載ってたんですね・・・
ありがとうございました。
813名無しさん@お腹いっぱい。:2009/09/02(水) 04:06:46 ID:dOseEPBa0
>>811
これはいいね!便利だわ
814名無しさん@お腹いっぱい。:2009/09/02(水) 12:23:07 ID:4io6iu4s0
たびたび申し訳ありません。ProcessMem.ahkを使って文字の抜き出し方法を教えてください。

004E9090 : 00 00 42 00 6F 00 6E 00 44 00 72 00 69 00 76 00 B o n D r i v
004E90A0 : 65 00 72 00 5F 00 53 00 70 00 69 00 6E 00 65 00 e r _ S p i n e
004E90B0 : 6C 00 5F 00 48 00 44 00 50 00 32 00 5F 00 30 00 l _ H D P 2 _ 0
004E90C0 : 30 00 2E 00 64 00 6C 00 6C 00 00 00 00 00 00 00 0 . d l l

を抜き出したいときにどのように書き込めばいいんですか?

??
Driver := readProcMem(PID,004E9092,??????????)
MsgBox,1%Driver%

よろしくお願いします
815名無しさん@お腹いっぱい。:2009/09/02(水) 16:36:50 ID:WcfERU7h0
#IfWinActiveで複数のウィンドウに同じスクリプトを実行させたいのですが、
簡単に記述する方法ってありませんでしょうか…

#IfWinActive ahk_class CS40FrameWnd
{
 4::
{ GetKeyState, state, Space, P ;Spaceキーの押下げ状態取得(押下げ="D")
 if ( state = "D" ) ;spaceキー押下げ中
{
send,^7 ;左回転
}
else
{
send,4
}
}return
816名無しさん@お腹いっぱい。:2009/09/02(水) 16:40:53 ID:WcfERU7h0
}
#IfWinActive

間違えて編集途中で送信してしまいましたorz

上記のスクリプトを他の複数のahk_class下で実行したいのですが、
全てのahk_classで同じ文章を記述せずにすむ方法があったらご教授下さい
817名無しさん@お腹いっぱい。:2009/09/02(水) 16:45:30 ID:kd2NXzSm0
>{ GetKeyState, state, Space, P ;Spaceキーの押下げ状態取得(押下げ="D")
> if ( state = "D" ) ;spaceキー押下げ中
>{
>send,^7 ;左回転
>}
>else
>{
>send,4
>}
>}return

俺なら、これを関数化して、ごまかす
818名無しさん@お腹いっぱい。:2009/09/02(水) 17:42:11 ID:V1rbptz9P
>>814
流行らせるページの ProcessMem.ahk の話だと思うけど、あのスクリプトの63行目には間違いがある。
× size:=VarSetCapacity(s,len)+1
○ size:=VarSetCapacity(res,len)+1

文字列を読み出す場合は、適当に大きなサイズを指定すればいい。
不要な分もコピーされるが、ahkの文字列は普通のC文字列だから
\0が出現するまでの部分が普通に文字列として扱われる。

Driver := readProcMem(PID,0x004E9092, 512) ; アドレスが16進なら先頭に0xを付ける

律儀にやるなら、readProcMem(PID, address , "UChar" )で\0が出現するまで1キャラずつ読むとか。
819名無しさん@お腹いっぱい。:2009/09/02(水) 18:05:02 ID:V1rbptz9P
>>815
(1) ウィンドウグループを使う
GroupAdd WinGroupShell, ahk_class CabinetWClass
GroupAdd WinGroupShell, ahk_class ExploreWClass
#IfWinActive ahk_group WinGroupShell
(省略)

(2) SetTitleMatchModeを正規表現にする
SetTitleMatchMode RegEx
#IfWinActive ahk_class CabinetWClass|ExploreWClass
(省略)

(3) サブルーチンもしくは関数にする。(省略)

一見すると(2)の方が行数が少なくて良いように思えるけど、
NotActiveの判断の場合ではうまくいかないとか、
正規表現の誤爆、クラス名とタイトル名の条件ではorできないとかいろいろあるので、
汎用性のある書き方としては(1)の方法が良いと思う
(もちろん、その辺を理解して使う分には(2)でもかまわないが)
820名無しさん@お腹いっぱい。:2009/09/02(水) 23:57:32 ID:WcfERU7h0
>>817 >>819
ありがとうございます! こんなやり方があったとは…
GroupAddすごい助かりました。コミスタは10くらいあるツールウィンドウが全て
違うクラス名持ってたもので、おかげでスクリプト全体が非常にスッキリできました。

サブルーチン化も別のアプリ間で同じスクリプトを共有できるものに使ってみようと思います。
821名無しさん@お腹いっぱい。:2009/09/03(木) 00:11:49 ID:FOHNTRBx0
>>814
地デジ録画マニアの俺は、その文字列に興味があるんだけど、
Spinelから何の情報を取ろうとしてるの?
822名無しさん@お腹いっぱい。:2009/09/03(木) 00:20:10 ID:/nzhwjum0
デスクトップを右クリックする方法はないでしょうか?
「画面」のプロパティを開いてスクリーンセーバーの時間を変更するスクリプトを
書きたいのですが、ここだけつまづいてしましました。
823名無しさん@お腹いっぱい。:2009/09/03(木) 00:33:29 ID:jWWeZ1cr0
>>822
run, control.exe desk.cpl`, `, 1

;というか、RegWriteでレジストリを直接書き換えた方が手っ取り早いんちゃう?
;http://www.itmedia.co.jp/help/tips/windows/w0633.html
824名無しさん@お腹いっぱい。:2009/09/03(木) 00:39:04 ID:/nzhwjum0
>>823
ありがとうございます!

デスクトップが見えている座標にマウスを移動し(もしくはウインドウをどかし)RButtonをSend…
と思っていたのですが、こんな神業のようなことは不要でしたね。
825815:2009/09/03(木) 01:30:29 ID:uzj9KcZt0
すみません、もうひとつ質問を…
特定のキーが押されたときだけキーのリマップを起こす方法ってありますか?
スペースキーを押している時だけ、 LAlt::LShift となるように、とか
826名無しさん@お腹いっぱい。:2009/09/03(木) 01:48:17 ID:ZWQssqNr0
WheelAccelを使用してるんですが、
firefoxで「shift + ホイール上下」で横スクロールってできないんですか?
827名無しさん@お腹いっぱい。:2009/09/03(木) 03:28:05 ID:mVeUjCFM0
>>825
AutoHotkey_Lなら楽。

#If GetKeyState("Space", "P")
LAlt::LShift
#If


>>826
WM_MOUSEHWHEEL(0x20E)に対応してないみたい。
リダイレクトも加速しない、アクティブ窓だけでいいなら↓を追加

#IfWinActive, ahk_class MozillaUIWindowClass
+WheelUp::WM_MOUSEHWHEEL(-A_EventInfo)
+WheelDown::WM_MOUSEHWHEEL(A_EventInfo)

WM_MOUSEHWHEEL(delta) {
 CoordMode, Mouse, Screen
 MouseGetPos, x, y, hwnd, 3
 PostMessage, 0x20E, delta*120<<16, x|y<<16,, ahk_id %hwnd%
}

※ 全角スペース利用につき注意
828名無しさん@お腹いっぱい。:2009/09/03(木) 04:00:04 ID:ZWQssqNr0
>>827
どうもありがとうございます!助かりました。
829名無しさん@お腹いっぱい。:2009/09/03(木) 04:03:54 ID:uzj9KcZt0
>>827
ありがとうございます、Autohotkey_Lを入れて使ってみました。
Space+LAltがSpace+Shiftとして動いてくれました!

ただ気になることが… 上記スクリプトを使ってSpace+LAlt(shift)押した後、
Altより先にSpaceを押し上げると、その後Altを離してもShiftキーが
押しっぱなしになるという現象が起きました。
これは回避できないものでしょうか?
830名無しさん@お腹いっぱい。:2009/09/03(木) 12:29:37 ID:8v4GqrX10
二重起動防止ランチャとしても使えるんだな

^!C::
    IfWinExist, PowerToy Calc
    {
        WinActivate
    }
    else
    {
        Run, PowerCalc.exe
    }
    return
831名無しさん@お腹いっぱい。:2009/09/03(木) 12:54:16 ID:U26EFRMW0
>>818
出来ました。ありがとうございました。
ドライバーを変更すると同じ場所に重ねて記録して最後に00がつくので、
最終的に>>818をヒントに、00が出現するまで1キャラずつ読むようにしました。

>>821
TVTestのメモリから現在使用中のドライバーを取得です。
Spinelの文字はTVTest側で使っているドライバー名です。

832名無しさん@お腹いっぱい。:2009/09/04(金) 03:18:59 ID:VOAjgfBc0
firefoxで
『テキスト選択→マウス中央ボタンクリック→新しいタブにgoogle検索結果を開く』
というのは可能でしょうか?(中央ボタンの他の機能はそのままで)

MButton::send, ^{RButton}s
だと他の機能まで制限されるんですよ。
833名無しさん@お腹いっぱい。:2009/09/04(金) 04:13:58 ID:PJ3o1joo0
>>832
書き方間違ってるよ。

条件分けがテキストを選択してるかどうか、になるから面倒くさい。
普通に、マウスジェスチャに登録したほうがいいと思うけど。
834名無しさん@お腹いっぱい。:2009/09/04(金) 04:21:31 ID:VOAjgfBc0
了解しました。
835名無しさん@お腹いっぱい。:2009/09/05(土) 04:21:20 ID:F+JQ6UZN0
ブラウザとアドレスを指定してウェブページを開かせることって
できますか?
デフォルトのブラウザを変えずにやりたいんですが
836835:2009/09/05(土) 04:35:43 ID:F+JQ6UZN0
I::
Run ,C:\Program Files\Mozilla Firefox\firefox.exe http://images.google.com/
return

でできました
837名無しさん@お腹いっぱい。:2009/09/05(土) 12:55:40 ID:l8yqvqqK0
流行らせるページのウィンドウ縮小スクリプトSmallWin.ahkを使いたいのですが
ノートPCなのでMButtonがありません。
そこで、MButtonをエミュレートしようと思い、まず次のように書いてみました。
#LButton:: MButton
MButton:: MsgBox, test
しかし、Winキー押しながら左クリックしても test と表示されずに、
MButtonが送られるだけのようです。
こういう場合どうするのがよいのでしょうか?
838名無しさん@お腹いっぱい。:2009/09/05(土) 13:23:22 ID:mJUJYiKx0
>>837
#LButton::MsgBox
839名無しさん@お腹いっぱい。:2009/09/05(土) 13:26:10 ID:5MGCTsqU0
SmallWin.ahk 内の
~MButton up::
の下に
#LButton up::
を追加


キーループの動作は~付けたり外したりして色々試してみたら?
840名無しさん@お腹いっぱい。:2009/09/05(土) 17:59:00 ID:l8yqvqqK0
>>838>>839
ありがとうございます
とりあえず
#LButton up::
を追加することでウィンドウを縮小させることはできました。
しかし、ダブルクリックしても元に戻ってくれません。
MsgBoxをはさんで確認してみたところ
OnDblClick が呼ばれてないようなのですが
原因のわかる方いますでしょうか?
841名無しさん@お腹いっぱい。:2009/09/05(土) 19:22:57 ID:5MGCTsqU0
ダブルクリック時にもWinキー押しこんでね?
縮小ウィンドウ上で普通に左ダブルクリックで解除されたよ
842名無しさん@お腹いっぱい。:2009/09/05(土) 19:37:51 ID:jJvMRZFj0
両ボタンクリックで中クリックになるだろうけどね。
843名無しさん@お腹いっぱい。:2009/09/05(土) 20:20:09 ID:ORBgauuy0
mouseMove.ahk
デュアルモニタ使用時、マウスカーソルをもう一方の画面まで持って行くのが面倒なので、
ホイールクリック(中ボタン)で、マウスカーソルをもう一方のモニタ上へ移動する。
切り替え前の座標は保存されるので、モニタ1->2->1と切り替えた場合、切り替え前のモニタ1での座標に戻る
;ここから

1stMouseX=500
1stMouseY=500
2ndMouseX=1200
2ndMouseY=500 ;座標の初期値


MButton::
CoordMode,Mouse, Screen
MouseGetPos, mouseX , mouseY
if mouseX > 1024 ;座標が1024より大きければ、モニタ2にカーソルがある
{
2ndMouseX = %mouseX%
2ndMouseY = %mouseY%
MouseMove, %1stMouseX%, %1stMouseY%
}
else{

1stMouseX = %mouseX%
1stMouseY = %mouseY%
MouseMove, %2ndMouseX%, %2ndMouseY%

}
return
;ここまで
844名無しさん@お腹いっぱい。:2009/09/05(土) 20:47:45 ID:l8yqvqqK0
>>841
いえ、Winキーは離してます
左ダブルクリックしたら一瞬ウィンドウ全体が灰色になるだけで元には戻ってくれません。
ちゃんと動いてる人がいるってことはスクリプトは問題ないのか・・・
何が干渉してるんだろ

>>842
やってみましたが私の機種ではなりませんでした
845名無しさん@お腹いっぱい。:2009/09/05(土) 22:22:04 ID:5MGCTsqU0
つか環境晒したら?
OSやメーカー製マウスドライバで動作変わることって結構あるし
機種書けば同じPC持ってる人が情報くれるかもしれん

ちなみに自分(841)はXP SP3 で問題なく動いてる。
846名無しさん@お腹いっぱい。:2009/09/06(日) 14:28:20 ID:V4deazYF0
send,で3つ以上のキーを渡したい時はどうすれば良いんでしょうか。

;spaceを押すとshift+alt+a
Space & a::
send +!a
return

shiftをdownさせてるあいだに2つのキーを送って、
そのあとshiftをupさせる事ができれば簡単そうなんですが
そんな事できますか?
847sage:2009/09/06(日) 14:29:42 ID:V4deazYF0
sage忘れてしまいました。。
848名無しさん@お腹いっぱい。:2009/09/06(日) 14:57:07 ID:yeuxCU9Y0
{Shift Down}!a{Shift Up}
849名無しさん@お腹いっぱい。:2009/09/06(日) 18:34:21 ID:5Uoycv7r0
>>844>>845
原因わかりました。
タイトルバーをダブルクリックしたらウィンドウシェードする
TTBaseのWinShadeというプラグインを入れていまして
ダブルクリックイベントがそっちにもっていかれるのが原因のようです。
OnMessage(0x00A3,"OnDblClick") を
OnMessage(0x00A6,"OnDblClick") にして
SmallWinの方の解除を右ダブルクリックにして回避することにしました。
850名無しさん@お腹いっぱい。:2009/09/06(日) 18:38:45 ID:bS/XUBDN0
コードをみてウィンドウメッセージを変えられるスキルがあって、
なぜフック系のアプリを常駐させていることに気づかないのか
851名無しさん@お腹いっぱい。:2009/09/06(日) 20:09:04 ID:V4deazYF0
>>848
ありがとうございます!
ShiftDownさせてSetKeyDelayも設定したらうまく動きました。
Space & a::
SetKeyDelay, 0, 50
send {ShiftDown}^a{ShiftUp}
return
852名無しさん@お腹いっぱい。:2009/09/07(月) 17:51:03 ID:i1Qy9e7e0
ところで、
最小化のコマンドとして
send, !{space}n 
と記述するのではなく、
そのまま最小化させる書き方ってあるかな?

最小化させるときに左上にメニューが見えるのが気になるし、
出てくるメニューに最小化が存在しないこともたまにあったりして・・・
853名無しさん@お腹いっぱい。:2009/09/07(月) 18:11:14 ID:JXeEucXF0
>>852
http://lukewarm.s101.xrea.com/commands/WinMinimize.html

PostMessageでもダメなら send, !{space}n を使ってる
854名無しさん@お腹いっぱい。:2009/09/07(月) 18:18:43 ID:i1Qy9e7e0
>>853
サンクス!
855名無しさん@お腹いっぱい。:2009/09/07(月) 21:22:43 ID:3rQpbyIj0
Bluetoothの周辺デバイス検索をAHKから呼び出す方法ってないでしょうか。

ノートPCの簡易セキュリティで考えていて、スタンバイから復帰後、
BT検索を行い、自分の携帯が近くにない場合、AHKからPCをシャットダウンさせる方法で
考えています。シャットダウンさせるとBIOSパスワードになって、そこのパスワードを
知らないと二度とPCを起動できなくなる、、、てな寸法です。

いま使ってるBTは、東芝スタックのUSBタイプと、Broadcomの内蔵型ですが、
タスクトレイで左クリックすると、まったく別のインターフェース画面が出ます。

BTのUI画面って、チップメーカーによってバラバラみたいなんですが、
コマンドラインから呼び出す方法か、OS標準の検索機能がほしいところです。

あんまり、BTでこういうことをやってる人は少なそうですが、
なにかヒントになるスクリプトまたはコマンドは、ないでしょうか。
856名無しさん@お腹いっぱい。:2009/09/08(火) 08:03:44 ID:zaaM81LjP
オプション付けてテキスト、xmlに保存できるみたいよ
ttp://www.nirsoft.net/utils/bluetooth_viewer.html
857名無しさん@お腹いっぱい。:2009/09/08(火) 08:31:23 ID:ymLR2zfY0
webページにある同じ名前のcheckの2番目をチェックする場合
JavaScriptの場合"document.all.check[1].checked=true"
でうまくいくのですが、これを流行らせるページで配布されているActiveX
を使う場合どう記述すれば良いのでしょうか。

858名無しさん@お腹いっぱい。:2009/09/08(火) 09:13:57 ID:zVzhpV4b0
WSHでその操作を出来るようになったら、同梱の sample_IE.ahk を見て改造する。
859名無しさん@お腹いっぱい。:2009/09/08(火) 14:11:09 ID:AEtGIeKK0
857です
自己解決しました
860名無しさん@お腹いっぱい。:2009/09/08(火) 14:49:08 ID:Qs2gfBb80
>>859
>webページにある同じ名前のcheckの2番目をチェックする場合
>JavaScriptの場合"document.all.check[1].checked=true"
>でうまくいくのですが、これを流行らせるページで配布されているActiveX
>を使う場合どう記述すれば良いのでしょうか。
をしようとGoogleにて検索して、ここまで来ました。
どう自己解決したのでしょうか?
861名無しさん@お腹いっぱい。:2009/09/08(火) 16:14:22 ID:9D+8zgZE0
860です
自己解決しました
862iwaken:2009/09/08(火) 22:35:24 ID:/QVkOwzn0
alt +n
ノートパッドを起動し
ファイルメニューの
名前をつけて保存というキーを自動で立ち上げる HOTKEYを定義するんはどうしたらよいでしょうか?
うまくうごかせません  みなさまご教授ください
863名無しさん@お腹いっぱい。:2009/09/08(火) 22:42:07 ID:C2L7y/1b0
うまくうごかないスクリプトを晒せば、このスレで自動的に修正される
864iwaken:2009/09/08(火) 22:58:43 ID:/QVkOwzn0
ありがとうございます。 
まだ習いたてなので恥ずかしいですが こんな感じです
!n::
Process,Exist,notepad.exe
If ErrorLevel<>0
WinActivate,ahk_pid %ErrorLevel%
else
Run,notepad.exe
send,!f
send,!a
865名無しさん@お腹いっぱい。:2009/09/08(火) 23:07:47 ID:Cjqk/QDy0
send,!fa
866名無しさん@お腹いっぱい。:2009/09/08(火) 23:17:12 ID:zHWPDAgE0
867iwaken:2009/09/08(火) 23:22:50 ID:/QVkOwzn0
すごい・・・
できました。ありがとうございます。 
しばらくいろいろな機能をつかってみます
またご教授お願いします。 iwaken
868名無しさん@お腹いっぱい。:2009/09/08(火) 23:26:30 ID:C2L7y/1b0
以上、自動スクリプト修正プログラムでした。
869名無しさん@お腹いっぱい。:2009/09/09(水) 17:18:39 ID:ge43LJrF0
変数内に指定文字列があるかどうかで分岐
IfInString, var, SearchString

これってSearchStringが空だと真になるんだね。
870名無しさん@お腹いっぱい。:2009/09/09(水) 18:29:03 ID:c8rW2A+H0
autotrimをoffにしてる予感
871名無しさん@お腹いっぱい。:2009/09/09(水) 18:46:45 ID:aCuTGVM4P
ahkに限らずほとんどの言語処理系がそうなると思う
872名無しさん@お腹いっぱい。:2009/09/10(木) 21:38:24 ID:EBZZSlVq0
ホイール回転を取得する方法ってないですか?
GetKeyStateだと1度ホイールを回すと、ホイールを回してなくても
ずっと押されっぱなしだと判定されてしまうので・・・
873名無しさん@お腹いっぱい。:2009/09/11(金) 01:30:10 ID:0Ax/dify0
ホイール回転を取得するだけなら

loop {
wu+= % wheel="wheelup" ? 1 : 0
wd+= % wheel="wheeldown" ? 1 : 0
tooltip, WheelCount`nUp %wu%`nDown %wd%
wheel=
sleep, 10
}
return

wheelup::
wheeldown::
wheel=%A_ThisHotkey%
return
874名無しさん@お腹いっぱい。:2009/09/11(金) 03:11:44 ID:/r8h9Uta0
>>873
あ、A_ThisHotkeyがあったんだorz
ありがとうございました
875名無しさん@お腹いっぱい。:2009/09/11(金) 16:26:01 ID:j/iTYInj0
エディタなどに文字列を確実に挿入する方法って
clipboard変数に代入して十分sleepしてからsend, ^vするしかないんでしょうか
sleepしなくていい方法ありませんか
876名無しさん@お腹いっぱい。:2009/09/11(金) 17:52:25 ID:XgebDrjf0
下記の場合だとツールチップbbbしか更新しないけど、
LoopとかWhileってあとから実行したほうが、えらいのか。
割り込ませるって無理かな?普通にTimer回して条件分岐するしかない?
#Persistent
a:=1, b:=1
settimer, aaa, -1
settimer, bbb, -1
return

aaa:
While a=1 {
tooltip, aaa%A_TickCount%, 1, 1, 1
sleep,100
}
return

bbb:
While b=1 {
tooltip, bbb%A_TickCount%, 100, 100, 2
sleep, 100
}
return
877名無しさん@お腹いっぱい。:2009/09/11(金) 17:59:03 ID:Ydw2S7zN0
>>875
WinWait使って条件分岐するとかは?
エディタ側のコマンドラインオプションでやれればそれが一番だと思うけど。
878名無しさん@お腹いっぱい。:2009/09/11(金) 18:12:12 ID:i+cknPN00
>>876
後から動いた方のスレッドが終わるまで、先にタイマで呼ばれた方のスレッドは動かないよ。
そのコードだと、片方しか動かないのは仕様。(>>4参照)

てか、書いてある程度の処理なら、1000ms間隔のタイマー二つ動かせばいいだけだとじゃないの。
もし、KeyWaitとかWinWaitとかを並列で動かしたいなら、また別の話になるけど。
879名無しさん@お腹いっぱい。:2009/09/11(金) 18:42:37 ID:XgebDrjf0
>>878
ToolTip:
ToolTipvar:=ToolTipvar ? 0 : 1
While ToolTipvar=1
こんなの入れて、トレイメニューでツールチップのON/OFFをしようと思ったんだけど、一つしか動かなくて無理だったんだよね。
ただ、ひとつはタイマーで動かす下記だと二つ動くけど、>>4とは矛盾しない?ってか、俺の理解度が低いのかw

#Persistent
a:=1, b:=1
settimer, aaa, 100
settimer, bbb, -1
return

aaa:
tooltip, aaa%A_TickCount%, 1, 1, 1
return

bbb:
While b=1 {
tooltip, bbb%A_TickCount%, 100, 100, 2
sleep, 10
}
return
880名無しさん@お腹いっぱい。:2009/09/11(金) 18:45:54 ID:XgebDrjf0
ああ、処理系等が二つ入らないってことかw
ごめん
881名無しさん@お腹いっぱい。:2009/09/11(金) 19:05:31 ID:0Ax/dify0
こんなやつ?

#Persistent
ToolTipvar_a:=ToolTipvar_b:=1
settimer, ShowTooltip, 100

ShowTooltip:
tooltip, % ToolTipvar_a ? "aaa" . A_TickCount : "" , 1, 1, 1
tooltip, % ToolTipvar_b ? "bbb" . A_TickCount : "" , 100, 100, 2
sleep, 100
return

1::ToolTipvar_a:=ToolTipvar_a ? 0 : 1 ; 1でTooltip 1をOn/Off
2::ToolTipvar_b:=ToolTipvar_b ? 0 : 1 ; 2でTooltip 2をOn/Off
882名無しさん@お腹いっぱい。:2009/09/11(金) 19:07:11 ID:1PdBzt1U0
>>876
元スレッド →→→
          ↓タイマー割込 (-1なので、settimer後数ステップ動作してから)
スレッドaaa    →→→
              ↓タイマー割込
スレッドbbb        →→→→→→→→→→→→→→→ (終了しないからaaaには戻らない)

>>878
元スレッド →→→
          ↓タイマー割込 (-1なので、settimer後数ステップ動作してから)
スレッドbbb    →→→         →→→→        →→→→
               ↓タイマー割込 ↑    ↓タイマー割込↑ (100ms間隔)
スレッドaaa         →→→→→→      →→→→→
883名無しさん@お腹いっぱい。:2009/09/11(金) 19:22:21 ID:i+cknPN00
一定時間経ったら消すとかならタイマーとかが必要なのは分かるけど、
トレイメニューでOn/Offするなら、イベントドリブンなコードを書けるから
ループとかタイマーとかは必要ないと思うなぁ。
884名無しさん@お腹いっぱい。:2009/09/11(金) 21:56:26 ID:jpgqQMgJ0
複数タイマ動かすこと自体は問題ないと思うが
タイマーから呼ばれたルーチンは待たせずすぐ抜ける構造にしておくべきだろう
(そもそもループ内スリープ使わなくていいようにタイマーがあるんだと思うし)

879だったら SetTimerじゃなくて Gosub,bbb とするか
元スレッド内でループ回すなりしたらいい事だと思う
885名無しさん@お腹いっぱい。:2009/09/11(金) 22:28:47 ID:XgebDrjf0
>>881-884
それぞれラベルひとつで更新するチップを表示させようとしたら、無理だったのかも。
A_ThisLabel等使って、それぞれタイマー回すことにします。
886名無しさん@お腹いっぱい。:2009/09/11(金) 22:34:00 ID:XgebDrjf0
>>879っぽいのでうまく行ってた分、もうひとつ足したときに混乱しちゃって。

>>884
>タイマーから呼ばれたルーチンは待たせずすぐ抜ける構造にしておくべきだろう
これは金言だね。
887名無しさん@お腹いっぱい。:2009/09/11(金) 23:00:31 ID:XgebDrjf0
とりあえず、ごちゃごちゃしてるけど、上のラベルを呼び出すたびにツールチップON/OFF
できたわ、有難う、助かった。
ToolTip_1:
ToolTip_2:
StringTrimLeft, WhichToolTip, %A_ThisLabel%, 8
%A_ThisLabel%switch:=%A_ThisLabel%switch ? "OFF" : "ON"
if (%A_ThisLabel%switch="ON")
settimer, %A_ThisLabel%Timer, 1000
else {
settimer, %A_ThisLabel%Timer, Off
ToolTip,,,,%WhichToolTip%
}
return

ToolTip_1Timer:
ToolTip,aaa,,,1
return

ToolTip_2Timer:
ToolTip,bbb,,,2
return
888名無しさん@お腹いっぱい。:2009/09/11(金) 23:05:35 ID:XgebDrjf0
>>887
%A_ThisLabel%switch:=%A_ThisLabel%switch ? 0 : 1
if %A_ThisLabel%switch
だったw最後に格好つけで余計なことしちゃった。
889名無しさん@お腹いっぱい。:2009/09/12(土) 00:06:06 ID:1mAjgFGL0
あんまちゃんとコード見てないけど、メニューアクションでのOn/Offだったら
883で言われてるようにタイマ使う必要なくないか?

ToolTipは一回表示したら意図的にクリアするまでは表示しっぱなしになるので
同じ内容で表示更新する意味ってあんまりないような。
マウスに常に追従して欲しいってことなのか?
それか実際は "aaa" or "bbb" にあたるテキスト部が随時更新されてるとかだろうか
890名無しさん@お腹いっぱい。:2009/09/12(土) 10:01:32 ID:rFfwYOcr0
何で本当にやりたいことを書かないんだろう

動作にあまり意味の無い中途半端なコードを貼られても
具体的にどういう状況でどのような制約条件があるか分からないから
的確なアドバイスが出来ない

勝手に解決しているようだけど、何だか見ていて消化不良な感じw
891名無しさん@お腹いっぱい。:2009/09/13(日) 01:46:51 ID:G5W1lxZ/P
現在接続中の無線LANのSSIDを取得するいい方法ありませんか?
892名無しさん@お腹いっぱい。:2009/09/13(日) 02:04:27 ID:ZvKYb75g0
DllCall で DeviceIoControl 叩けば出来そうな気がする
893名無しさん@お腹いっぱい。:2009/09/13(日) 13:23:35 ID:NbxhIbBU0
みなさま始めまして。
AutoHotKeyでドラッグ&ドロップを実現したいと思って半年。
サンプルすら見つけられません・・。
どなたかご教授願えればと思いまして書き込みました。

現在左ALTに左クリックを、右ALTに右クリックを割り当てています。
この左クリックにドラッグ&ドロップ機能を付けたいのです。
ヒントをいただければ助かります。
どうぞ宜しくお願い致します。
894名無しさん@お腹いっぱい。:2009/09/13(日) 13:29:37 ID:N4AsxbMH0
>>893
始めまして
895名無しさん@お腹いっぱい。:2009/09/13(日) 13:32:43 ID:NbxhIbBU0
>>894
ご返事ありがとうございます!
2ch書き込みは数年していませんでしたので新鮮です。
896名無しさん@お腹いっぱい。:2009/09/13(日) 13:37:27 ID:zQgOAHyj0
ALTつかいたいときに、どうすんの?
897名無しさん@お腹いっぱい。:2009/09/13(日) 13:42:36 ID:NbxhIbBU0
>>896
私はMac内のVMwareFusion内のXPを使用してますので、
例えばCTRL+ALT+DELを押したい時はVMの機能を使います。
またどうしてもの時は、AutoHotKeyをExitします。
でも自分の使用法の場合、不思議と殆ど使わないですね。
898名無しさん@お腹いっぱい。:2009/09/13(日) 13:47:45 ID:zQgOAHyj0
そうなんだ。まあそれは人それぞれだけど

「左クリックにドラッグ&ドロップ」の意味がわからない
何にD&Dするのかよくわかんない

単に長押しを検出したいならkeywaitとかマウスの位置を調べればすぐ
できると思うが。

サンプルが見つからないんじゃなくて、あまりにも簡単すぎて
サンプルを作るまでもないような問題じゃないかと
899名無しさん@お腹いっぱい。:2009/09/13(日) 13:57:31 ID:NbxhIbBU0
>>898
ヒントをありがとうございます。
そうなんですか?それ程簡単な事なんですか・・・。
左クリックにドラッグ&ドロップの表現は失礼しました。

左ALTキーでドラッグ&ドロップを実現して、
普通のマウスの左ボタンと全く同じ機能を持たせたいです。

長押しとマウスの位置ですか・・・。
900名無しさん@お腹いっぱい。:2009/09/13(日) 14:20:21 ID:kcPkN7Cc0
具体的にどうやりたいのかちゃんと書いて。

マウス使わないでALTキーだけでどうやってモノつかんだり
マウスポインタ動かしたりするつもりなの?

ポインタは矢印キーで動かして、とか何かほかのアクションが必要でしょ
方法が決まっていれば、「やり方」のコードは提示できるかもしれないが
操作アイディア自体も考えて下さいってのはNGな
901名無しさん@お腹いっぱい。:2009/09/13(日) 14:32:41 ID:NbxhIbBU0
>>900
漠然としていてすみませんでした。
ポインタはマウスで動かします。
マウスの左ボタンの役目を左ALTキーで代替させたいです。
なぜこんな事をやりたいかといいますと、
指でマウスボタンを押す事がなぜか耐え難い程苦痛になってきたからです。
いろいろマウスを買い換えてみましたが、結果的にキーボードをマウスボタンの代わりに使う事が快適だと分かりました。
現在は、
LAlT::Send,{LButton}
RAlT::Send,{RButton}
と設定しています。
902名無しさん@お腹いっぱい。:2009/09/13(日) 14:35:57 ID:/ux988dZ0
>>901
Altを押し下げたときにマウスのボタンを押下したままにして
Altを押し上げたときにマウスのボタンを押上げれば?
903名無しさん@お腹いっぱい。:2009/09/13(日) 14:41:33 ID:Z8xguH6h0
LALT::Lbutton
RALT::Rbutton

↑でダメなら↓

LALT::
Send, {Lbutton Down}
keywait, LALT
Send, {Lbutton Up}
Return

RALT::Rbutton
Send, {Rbutton Down}
keywait, RALT
Send, {Rbutton Up}
Return
904名無しさん@お腹いっぱい。:2009/09/13(日) 14:43:35 ID:Z8xguH6h0
腱鞘炎になってるのなら左手でマウス操作がオススメ
慣れるのに1〜2週間くらいかかるけど
905名無しさん@お腹いっぱい。:2009/09/13(日) 14:51:36 ID:NbxhIbBU0
>>903
ありがとうございます!!!!!出来ました!!!
感動しました!!!
また、903より前に書き込んで頂きました全ての皆様にも感謝申し上げます!!!
906名無しさん@お腹いっぱい。:2009/09/13(日) 15:01:03 ID:NbxhIbBU0
>>904
左手マウス、数年前から何度かチャレンジして来ましたが、
急いでいる時とかどうしても上手く扱えなくて右マウスに戻ってしまってました。
奮発してHHKB Pro2を使っていますので、キーボードクリックは凄く快適です。
907名無しさん@お腹いっぱい。:2009/09/13(日) 15:08:24 ID:Z8xguH6h0
>>906
そう、慣れない内は右手に戻るんね
急いでないときは常に左手で操作するとか
毎日必ず30分間は左手で操作するとかやってると1〜2週間で
右手とほぼ同等に操作できるようになるよ。
908名無しさん@お腹いっぱい。:2009/09/13(日) 15:14:44 ID:NbxhIbBU0
>>907
そうなんですか。
毎日継続する事が大事なんですね(^^;)。
幸い左右どちらでも使えるマウスがありますので、
今回教えていただいたAutoHotKeyと併用してみます。
ありがとうございました。
909名無しさん@お腹いっぱい。:2009/09/13(日) 16:49:15 ID:e+2HBenb0
俺も右利きだけどマウスは左手派
すぐ慣れるかどうかは年齢にもよるし一概に言えないけど、メリット多いからガンガレ
910名無しさん@お腹いっぱい。:2009/09/13(日) 17:46:14 ID:BWRuQ+9R0
メリット:エロゲをやる時…
911名無しさん@お腹いっぱい。:2009/09/13(日) 18:46:29 ID:CJ/VEa0o0
メリットは動画と画像見るときかなぁ
912名無しさん@お腹いっぱい。:2009/09/13(日) 18:49:07 ID:zQgOAHyj0
ブラウザの住所氏名入力欄とかで、入力ボックスのフォーカスを左マウスで移動させながら
右で優雅にキーを打つ・・・理にかなってすばらしいと思うが俺は馴染めなかった
913名無しさん@お腹いっぱい。:2009/09/13(日) 20:34:16 ID:tdIwpGjg0
左手マウス試してみた。
マウス操作はけっこう普通にできた。
いいかも。
でもマウスで選択してCtrl+Cでコピーとかどうすればいいの?
ああそっか。右手でCtrl+Cすればいいのか。
いいかも。
914名無しさん@お腹いっぱい。:2009/09/14(月) 00:00:28 ID:r0WrQkL/0
ときどきALTが押したままの状態になる症状が出てストレスを感じています。
ALTを2回押すとALTが解放されるので、当面はそれで対処してますが、根本的な解決策があると助かるのですが。。
窓使いの憂鬱と併用なので、窓使いの憂鬱の方のカスタマイズ設定の問題である可能性はあります。。
すんません。アドバイスよろしくお願いします。
915名無しさん@お腹いっぱい。:2009/09/14(月) 00:05:10 ID:0Y/UAoXz0
修飾キー押しっぱなしってのは何度か出てる問題だな
対処法も過去ログにあったはず
916名無しさん@お腹いっぱい。:2009/09/14(月) 01:03:54 ID:0cWmJZrW0
AHKじゃ対処療法しかできないよ。
917名無しさん@お腹いっぱい。:2009/09/14(月) 02:14:43 ID:1hpkFrUA0
>>914
Setpointを使ってるなら、あきらめるしかない。

俺は、settimerの1秒モードで、altが30秒以上押されていたら
画面にtooltipsの警告を出すコードを常設している。
918914:2009/09/14(月) 02:19:53 ID:yK/PFntw0
>>915-917
ありがとうございます

>>917
setpoint使ってます。。
そのコード、貼り付けていただけないでしょうか?
919名無しさん@お腹いっぱい。:2009/09/14(月) 02:31:31 ID:1hpkFrUA0
#そのままじゃ動かないよ。考え方の参考に

もろもろ初期化

settimer,1000,setpoint_check
return


;SetpointでAltが押しっぱなしになる症状を検出
setpoint_check:
if pushcheck("Alt")
 altcount++
else
 altcount=0

if altcount>30
 {
 msg=ALT押しっぱなし
 tip(msg,500)
 }
return


関数 tip() pushcheck() は含まれてないからそのままじゃ動かない。
見れば何やってるかわかるだろうから適当に見繕ってくれ
920名無しさん@お腹いっぱい。:2009/09/14(月) 09:04:33 ID:R0ttejZe0
>>912
フォーカス移動ならTABでいいんじゃね
921名無しさん@お腹いっぱい。:2009/09/14(月) 09:26:06 ID:XLdK/2Sx0
>>914
>>236のようにチルトボタンを利用しているならSetPointが必須らしいけど
そうでなければ>>234のようにマウス設定をAutoHotkeyに任せれば回避出来るかも。
922914:2009/09/14(月) 21:54:27 ID:yK/PFntw0
>>919
ありがとうございます
923名無しさん@お腹いっぱい。:2009/09/16(水) 17:29:31 ID:NOXTtfoG0
IE画面上の右クリックメニューをホットキーに割り当てたい場合はどう書けばいいの?
具体的にはIrvineなんだけど、
「IrvineへすべてのURLを送る」というやつにctrl+Qを割り当てたいんだけどさ。
誰か教えてくれよ。
924名無しさん@お腹いっぱい。:2009/09/16(水) 18:05:22 ID:Ya7sowWH0
>>923
http://lukewarm.s101.xrea.com/Examples.html
http://lukewarm.s101.xrea.com/commands/ControlFocus.html
http://lukewarm.s101.xrea.com/Hotkeys.html
http://lukewarm.s101.xrea.com/KeyList.html

;IE7の場合(IE8を入れてないのでIE8は知らん)
#IfWinActive, ahk_class IEFrame
^q:: ; Ctrl+Q
ControlFocus, Internet Explorer_Server1 ;ページ表示部分にフォーカス移動
Send, {AppsKey} ;コンテキストメニュー(を開く)
Send,{Up 3} ;メニューの下から3番目が「IrvineへすべてのURLを送る」として↑×3
Send,{Enter}
Return
925名無しさん@お腹いっぱい。:2009/09/16(水) 18:07:10 ID:VHgjLSWs0
キー送ればいいんじゃないの。

右クリックかShift+F10送って
メニュー(ahk_class #32768)がでるのを待ってから
メニューのアクセラレータキーを送る

って感じで良いでしょ
926名無しさん@お腹いっぱい。:2009/09/16(水) 18:16:14 ID:Ya7sowWH0
Irvineのオプションで右クリックに追加すると
メニューのアクセラレータキーが無い
927名無しさん@お腹いっぱい。:2009/09/16(水) 19:01:47 ID:ZY4rg9Ie0
別の右クリックいじるソフトでアクセラレータキー付けれるよ
928名無しさん@お腹いっぱい。:2009/09/16(水) 19:02:29 ID:w0mC1sEJP
>>924の下から3行目をよく見るんだな
929923:2009/09/16(水) 21:15:41 ID:NOXTtfoG0
おー、IE8ではできたよ。サンクスメン。
しかしsleipnir上では動かないんだな、オウチ。
Internet ExplorerのところをSleipnirに変えても反応なしさHAHAHA。
もう少しなんだよ、頼むぜ。
930名無しさん@お腹いっぱい。:2009/09/16(水) 21:22:33 ID:4AfCjRLZ0
>>929
おいおい条件後出しはやめてくれよHAHAHA
IEで動いたんなら、後はちょっと調べて書き換えるだけだぜブラザー
931名無しさん@お腹いっぱい。:2009/09/16(水) 21:39:09 ID:ow8aJebY0
本日の小ネタ成果物

IEで、何かをデスクトップにDLした際、直接開くことをしないでデスクトップの
フォルダを開きたいときがある。そのとき「フォルダを開く」を押しても、デスクトップの場合だけ

「指定したリンク先は、デスクトップ上にあります。」

と出て、フォルダを開いてくれない。なんちゅーお節介な機能を実装しやがって。

この動作が気に入らないから、上記ダイアログが出たら、ダイアログを閉じて、
そのあとデスクトップをexplorerで開くようにした。
settimerで1秒ごとに巡回すればOK

WinGetTitle, wT, A
if wT=リンク先を探す
 {
 ControlGetText,var,Static2,A
 if var=指定したリンク先は、デスクトップ上にあります。
  {
  send,{Enter}
  run,%A_Desktop%
  }
 }
932923:2009/09/16(水) 21:42:52 ID:NOXTtfoG0
できたぜ
光速でIrvineに突っ込めたぜ
サンクスメーん
933名無しさん@お腹いっぱい。:2009/09/17(木) 01:21:23 ID:8Gco69HA0
条件分岐ifにANDを使うときのやり方で質問です
「 if 変数1 in 1,2,3 」 と 「 if (変数2) 」 をANDでつなげようと思ったのですが、
前後をひっくり返したりカッコをつけたりいろいろな形で試してみても
前にある条件しか有効にならず、後ろに置いた条件はコメント状態です
この二つの条件分岐をANDでくっつけるにはどうしたらいいでしょうか
934名無しさん@お腹いっぱい。:2009/09/17(木) 01:43:00 ID:FXDWbeDR0
コマンドタイプの If と、式タイプの If はつなげられないよ
単純に If のネストをする(1)か、全部「式」にする(2)か、どっちか。

(1)
If var1 in values
{
 If (var2)
 {
  ; 真のときの処理
 }
}

(2)
If (var1==1 || var1==2 || var1==3) && (var2)
{
 ; 真のときの処理
}

935名無しさん@お腹いっぱい。:2009/09/17(木) 02:59:42 ID:2TdKNjg60
>>934
分かりやすい解説ありがとうございます
よーし明日も頑張るぞ
936名無しさん@お腹いっぱい。:2009/09/17(木) 08:14:27 ID:VRFdtWySP
if( IsInValues(var1,"1,2,3") and var2 ) {
 ; hogehoge
}

IsInValues(var, list)
{
If var in %list%
Return True
Else
Return False
}
937名無しさん@お腹いっぱい。:2009/09/17(木) 18:22:32 ID:epQR3r3e0
選択文字列をクリップボード経由せず
取得する方法ってありますか?
ようは第二クリップボードを作って
クリップボードへのコピーに反応する別のプログラムの動作を
やり過ごしたいんですが

938名無しさん@お腹いっぱい。:2009/09/17(木) 19:28:35 ID:VRFdtWySP
エディトコントロールなら ControlGet で取得できる
それ以外ならば、具体的にアプリ名や状況、取得して何をやりたいのかなどを書けば
誰かが別の解決方法を提示してくれるかも

もしくは、そのコピーに反応する別のプログラムとやらをどうにかするという方法もあるだろうし
939名無しさん@お腹いっぱい。:2009/09/17(木) 20:45:08 ID:FXDWbeDR0
WinSelectMenuItem や Control、PostMessage で一時停止にしてからコピーするって手もあるよ
940名無しさん@お腹いっぱい。:2009/09/18(金) 13:52:32 ID:6MK1Acl20
特殊な使い方ですが、

F1キーに 文字1
Ctrl+F1キーに文字2
Shift+F1キーに文字3
Alt+F1キーに文字4 を割り振ろうとして

F1::1
^F1::2
+F1::3
!F1::4

と定義したが、Ctrl,Shift,Altで修飾した定義は
うまく動作しませんでした。

設定まちがってますかね?
941名無しさん@お腹いっぱい。:2009/09/18(金) 14:09:06 ID:YfntvPtdP
Sendコマンドを使う
F1:: Send 1
^F1:: Send 2
(省略)

リマップ a::bは下記と等価だから、修飾キーも判断されてしまう
*a::
SetKeyDelay -1
Send {Blind}{b DownTemp}
return

*a up::
SetKeyDelay -1
Send {Blind}{b Up}
return
942名無しさん@お腹いっぱい。:2009/09/18(金) 14:35:22 ID:6MK1Acl20
>>941
できました!
ありがとうございました!!
943名無しさん@お腹いっぱい。:2009/09/19(土) 21:30:54 ID:aACxfL9r0
アイコン表示をしたいahkのアイコンを変えてみたけど、探すのが大変。
デフォルトアイコンの偉大さを思い知るわ。
944名無しさん@お腹いっぱい。:2009/09/20(日) 12:47:01 ID:n4UKHsUK0
GUIコマンドで引数に応じたテキストを表示するかっこいい通知ウィンドウを作りたいと思ってます
考えてるのは背景に画像を表示してその背景上に通知文字を表示するといったものです

まずスプラッシュイメージを表示して、その上から透過したGUIで文字表示という
方法でやろうかとおもっているのですが
背景が透明で文字だけ表示するGUIの作り方がわかりません

WinSet, Transparent, 0で設定すると文字まで消えちゃう・・・
945名無しさん@お腹いっぱい。:2009/09/20(日) 14:41:46 ID:jL64FcYF0
Region & TransColor でどうにか汁
946名無しさん@お腹いっぱい。:2009/09/20(日) 17:53:48 ID:8MRoreiIP
普通にBackgroundTransでいいんじゃね
文字と画像で別々の透過度を指定したいなら、2つGUIを重ねるとか

Gui +LastFound -Border ToolWindow
Gui Margin, 0, 0
Gui Add, Picture, , C:\Windows\しゃくなげ.bmp
Gui Add, Text, xm+20 ym+20 cFFFFFF BackgroundTrans, TextString
WinSet, Region, 3-3 w128 h128
Gui Show
947名無しさん@お腹いっぱい。:2009/09/20(日) 18:02:04 ID:+FqvHa2u0
SplashImage 使わないでも1つのGUIでどうにかなるけどね。
背景画像は透過PNGなどで予め透過画像にしておけばいい。

TransColor = 000001
Gui, +LastFound +ToolWindow -Caption -Border +AlwaysOnTop
Gui, Color, %TransColor%, %TransColor%
Gui, Margin, 0, 0
Gui, Font, s16, あくあフォント
Gui, Font, q3 ; AutoHotkey_L ならこれが効いてアンチエイリアスをオフに出来る
Gui, Add, Picture, x0 y0 , 背景画像.png
Gui, Add, Text, x50 y70 BackgroundTrans cBlack, サンプルスクリプトの予感!!
WinSet, TransColor, %TransColor%
Gui, Show
948名無しさん@お腹いっぱい。:2009/09/20(日) 18:45:12 ID:n4UKHsUK0
GUIだけでそのまま出来たんですか
知りませんでした
Gui, Show, NAにすればフォーカスも奪われずに表示できますね
使わせてもらいます
949名無しさん@お腹いっぱい。:2009/09/22(火) 23:10:52 ID:QP5TzsHo0
HDUSのリモコンなんですが
^F16::Send, Shift または ^F16::Shift
としてもShift単独でなく修飾キーも押されたことになってしまいます。
なんとかなりませんか?
950名無しさん@お腹いっぱい。:2009/09/22(火) 23:17:43 ID:gCYRaCiU0
^F16::Send, {Shift}
951名無しさん@お腹いっぱい。:2009/09/22(火) 23:33:50 ID:QP5TzsHo0
入力結果を^Shift^ではなくShiftにしたいということです
952名無しさん@お腹いっぱい。:2009/09/22(火) 23:42:31 ID:8kUIQ97D0
>>951
なるよ
953名無しさん@お腹いっぱい。:2009/09/22(火) 23:45:13 ID:Ma+YsCie0
>>951
>>243-244,529-530,940-941
954名無しさん@お腹いっぱい。:2009/09/22(火) 23:46:41 ID:Ma+YsCie0
次のテンプレに↓いれようぜ

Q:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
  これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
   ^1::Send, {Esc}
955名無しさん@お腹いっぱい。:2009/09/23(水) 00:02:48 ID:QP5TzsHo0
^F16::Send, {Shift} の入力結果は +^ でした。
私の目的はキーリピートが発生しなければ良さそうです。
956名無しさん@お腹いっぱい。:2009/09/23(水) 00:21:11 ID:ZvPjkUm50
^F16::
Keywait, Ctrl
Send, {Shift}
Return
957名無しさん@お腹いっぱい。:2009/09/23(水) 00:22:33 ID:GEtdsmCm0
ということで当初よりのキーリピートの発生しない ^F16::Shift を妥協して使います。
出来ないということがわかりました。本当にありがとうございました。
958名無しさん@お腹いっぱい。:2009/09/23(水) 00:46:29 ID:QoQA+ZLl0
つか[F16]ってのが気になってんだけど、そういう実キーがある拡張キーボードなのか、
SetPointとかで仮想キー発行させてんのかで動作って変わったりするんじゃね?

ちなみに $^F12::Send, {Shift} とかやった場合はどうなる?
やっぱりCtrl発行されんのかい?
959名無しさん@お腹いっぱい。:2009/09/23(水) 00:51:48 ID:sBoYTXmA0
>>958
質問者の情報提供が少なすぎるのがそもそもの大問題なんだが、

>HDUSのリモコンなんですが

これを部外者が補足説明すると、地デジチューナー。
リモコンが付属してて、HIDで認識する。
ボタンを押すとF16〜F24やCTRL+F16などが押された状態になる。


そもそも、地デジと全然関係ないスレで「HDUSなんですが」って書いて
相手に正確に伝わるかどうかとか考えないことが、俺的に不思議。
960名無しさん@お腹いっぱい。:2009/09/23(水) 01:05:14 ID:d2Ia2Rvw0
>>959
ググりゃわかるだろ。

そもそも、地デジと全然関係ないスレで補足説明って書いて
相手にくどいと思われるかどうかとか考えないことが、俺的に不思議。
961名無しさん@お腹いっぱい。:2009/09/23(水) 01:36:30 ID:+iyUXEWm0
なに逆切れしてんのよ
最初から説明しとけば済む話でしょ
962名無しさん@お腹いっぱい。:2009/09/23(水) 02:36:39 ID:LbA54mw80
autohotkey と qtclipの最新版を併用することができません
autohotkeyの方で ^v を設定してqtclipを使ってみました
そしたら文字の出力のところで、autohotkeyの ^v が貼り付けの動作を奪い取ってしまいます

そこで^v の設定で
qtclipから ^v が送られてきたときは素直に ^v を出し、
それ以外の時は test を送信するということをしたいです
GetKeyState("ctrl")を使ってどうにかできないかと考えたのですが、
qtclipから ^v が送られてきたことを判定する方法がいまいち思いつきません

どう修正すればいいでしょうか

#NoEnv
SendMode Input

#InstallKeybdHook
#UseHook

^v::
; msgbox,% GetKeyState("ctrl")
send,test

return

963名無しさん@お腹いっぱい。:2009/09/23(水) 02:43:42 ID:3vW5mf2h0
Pオプション付けて物理的な押下状態を取得してみれば、といい加減にレス
964名無しさん@お腹いっぱい。:2009/09/23(水) 10:53:43 ID:rnq/Cubc0
IMEがオンの時のキーアサインを 一か所に記述する方法ってないよね?
各アプリごとにif imeがオンなら的に記述するのは可能っぽいけど
そんな面倒なことはさすがにやりたくない。
965名無しさん@お腹いっぱい。:2009/09/23(水) 11:15:35 ID:QoQA+ZLl0
>>959
ああ、リモコンの押下情報を拾いたいって話だったのか。補足サンクス
自分はてっきり、リモコン「に」何かをさせるためのコマンドをAHKから
投げたいのかと思ってたんだわ。

>ググりゃわかる
ググってもらうこと前提での質問はさすがにどうかと思うが。
実機触ったことない奴は最初から及びじゃないって話だったら謝るが
特殊デバイスとの明記があっても実際はそこは関係なく
AHKの基本的な挙動部分のアドバイスで解決してるパターンも多い品

>>964
LoopかSetTimerでIME状態を定期チェックして
HotkeyコマンドをまとめてON/OFFしたら?
966名無しさん@お腹いっぱい。:2009/09/23(水) 12:13:13 ID:6ioiqGbMP
>>964
AutoHotkey_Lを使うとか、関数でラッパーを作るとか。
どのくらいの数のキーアサインがあって、どれくらい複雑なのを書いてるのかにもよるだろうけど、
関数やサブルーチン化すれば何とでもなる気がする。

キーアサインの見た目をスッキリさせたいだけなら、
定義ファイルを読んで動的にHotkeyコマンドでアサインするスクリプトにすればいいと思うよ。

以下、ラッパーの例:

F12:: SwitchByIMEStatus( "IME_ON_" . A_ThisHotKey, "aaa" )

SwitchByIMEStatus( IME_OnKey, IME_OffKey )
{
 KeyOrLabel := IME_GET() ? IME_OnKey : IME_OffKey
 if( isLabel( KeyOrLabel ) ) {
  gosub %KeyOrLabel%
 }
 else {
  Send %KeyOrLabel%
 }
}

;
IME_ON_F12:
 MsgBox IME_ON_%A_ThisHotKey%
return
967名無しさん@お腹いっぱい。:2009/09/23(水) 12:17:08 ID:byEpQsx60
>>949
俺もユーザーだけどそれリモコン側の仕様だから諦めれ
968名無しさん@お腹いっぱい。:2009/09/24(木) 00:47:16 ID:S38f/Qa80
>>963
ありがとうございます
それならなんとかなりそうです
969名無しさん@お腹いっぱい。:2009/09/24(木) 16:22:46 ID:DtBc3Rqs0
IMEがONだったらOFFにするという処理じゃなくて
それ自体をONにならないようにする事は可能ですか?
970名無しさん@お腹いっぱい。:2009/09/24(木) 16:27:16 ID:DYoozoKf0
・On/Offを制御するキーを無効化@AHK
・On/Offを制御するキーを無効化@IME設定
・タイマー監視してOnになったら即座にOffにする@AHK
・IMEを削除@コンパネ
971名無しさん@お腹いっぱい。:2009/09/24(木) 16:33:27 ID:UyV85G8yP
どういう状況でONにしたくないのか具体的に書くべき
972名無しさん@お腹いっぱい。:2009/09/24(木) 16:34:26 ID:MWui31/h0
IME wo sakujo sitemimasita
nihongo kakenai
973名無しさん@お腹いっぱい。:2009/09/24(木) 16:53:32 ID:DtBc3Rqs0
海外のゲームなのですがゲームの裏でIMEがONになると
AHKでキー無効化(自分で設定した)しているのでOFFに出来なくなります。
何個かキーを同時に押すのが原因なのか不明ですがIMEがONになることがあります。
それでIME自体を一時的に無効化出来ないかという発想になりました。
974名無しさん@お腹いっぱい。:2009/09/24(木) 16:54:08 ID:XOiOazUs0
質問者じゃないけど、どういう状況でONにしたくないのか・・・
ブラウザのFirefoxやIEで、URL入力バーにカーソルを置いたときに、
IMEがオンだったら自動的にIMEオフにできると便利かも、と思った。

IEなら

#IfWinActive ahk_class IEFrame
~F6 up::
~Lbutton up::
ControlGetFocus, cgf,A
if cgf=Edit1
 {
 ;IMEをオフ
 send,{vkF3sc029}
 }
return
#IfWinActive

で、できた。
ただIMEのON/OFFがトグル動作になるのでその対策は誰か頼む

Firefoxは、Control関連がほとんど取得できないので厳しいか。
URL入力欄にカーソルがあることを、識別させる方法ないかな
975名無しさん@お腹いっぱい。:2009/09/24(木) 17:27:07 ID:FLcpHl050
>>973
基本、IMEの状態はアプリ毎に保持してるから、別のアプリでONになったものが、他に影響を与えないはず。
(ATOKなんかは、グローバルに切り替える設定があった気がするけど…)
もしゲームの中で、コンパネの入力言語の切り替えに設定されてるキーを押しちゃってONになるのなら、
そちらの設定を無効にすれば良いと思う。

それでも発生するなら、対症療法的に>>970のようにタイマー使う方法が確実かも。

>>974
Firefoxにはその手のアドオンがあったはず。
特定のフィールドで自分の好みでというなら、AHKよりもユーザJavaScriptの方が
onFocusのイベントが使えるので、綺麗に書けると思う。
FirefoxならJavaScript+FlashProxyなどで、IEならJavaScriptのみでいけたと思う
976名無しさん@お腹いっぱい。:2009/09/24(木) 17:49:37 ID:wDsPraqV0
IMEで思い出したけど

ttp://www.vector.co.jp/soft/win95/writing/se085141.html
の AgainTyper みたいなのをAHKで造るいい方法はないかな?

タイマーで ControlGetFocus して Edit とか Combobox なら監視〜
とかやると AttachThreadInput の多用でダブルクリックが効かなくなるし・・・


>>974
>ただIMEのON/OFFがトグル動作になるのでその対策は誰か頼む
IME関係の関数がうpろだにあるんでそれを使えば明示的にオン/オフできる
977名無しさん@お腹いっぱい。:2009/09/24(木) 20:51:33 ID:DYoozoKf0
まっとうにやるなら、グローバルフック(AHK単体では無理)する必要があるとおもう。

てか、フォーカスのある場所が変わると指定の関数(orサブルーチン)を呼ぶ機能がAHKに欲しい。

OnFocusChange("HogeFunc")

HogeFunc(hwnd, classNN) {
 WinGetClass, class, ahk_id %hwnd%
 If (class = "IEFrame" && classNN = "Edit1")
  IME_Set(0)
}

dllで作れば何とかなるらしいとは分かるが、作れないw
978名無しさん@お腹いっぱい。:2009/09/24(木) 21:38:13 ID:DO4QqIKd0
>>976
AgainTyperの細かい挙動は知らんのだけど、過去ログでそれっぽいものはあったよ

AutoHotkey スレッド part6
http://pc11.2ch.net/test/read.cgi/software/1219130051/271-273,279-281
979名無しさん@お腹いっぱい。:2009/09/25(金) 00:12:16 ID:RNpkcNtC0
>>974
>>976がいうとおり、
send,{vkF3sc029}じゃなくてIME_SET(0)を使うべき
そうすればトグルの問題は解決する
980名無しさん@お腹いっぱい。:2009/09/25(金) 00:27:28 ID:GGpS0qzg0
関数組み込まなくても
IMEの設定で「IME-オフ」を適当なキーに割り当てて
そのキーをSendするという方法もある
981名無しさん@お腹いっぱい。:2009/09/25(金) 01:14:05 ID:Jfkb4kqj0
>>978
これ一時期使ってたけど、うちの低スペックマシンにはつらすぎた
982名無しさん@お腹いっぱい。:2009/09/25(金) 02:12:35 ID:ImZboX9h0
アップローダに上げられたIMEチェッカの改良版を作ってる人を見つけた

解説 http://blechmusik.xrea.jp/resources/keyboard_layout/DvorakJ/inc/IME.txt
コード http://blechmusik.xrea.jp/resources/keyboard_layout/DvorakJ/inc/IME.ahk

使ってみたのだけど、

IME_GET()

を呼び出して、アクティブウインドウのIME状況を知りたかったんだけど、
常にゼロが帰ってきてしまう。どうやって使えばいいんだろう。
983名無しさん@お腹いっぱい。:2009/09/25(金) 02:18:28 ID:ImZboX9h0
ちなみに関数を引用すると

> IME_GET(WinTitle="")
> ;-----------------------------------------------------------
> ; IMEの状態の取得
> ; 対象: AHK v1.0.34以降
> ; WinTitle : 対象Window (省略時:アクティブウィンドウ)
> ; 戻り値 1:ON 0:OFF
> ;-----------------------------------------------------------

俺のAHKは1.0.47.05だったがダメだった
984名無しさん@お腹いっぱい。:2009/09/25(金) 02:44:54 ID:WcTvLFes0
>>983
構造体のメモリを確保してないからだよ。

#Persistent
; 48バイトを確保して初期化しておく
VarSetCapacity(stGTI, 48)
DllCall("RtlFillMemory", "UInt", &stGTI, "UInt", 48, "UChar", 0)
DllCall("RtlFillMemory", "UInt", &stGTI, "UInt", 1, "UChar", 48)

SetTimer, getImeTimer, 500
return

getImeTimer:
tooltip, % IME_GET()
return
985名無しさん@お腹いっぱい。:2009/09/25(金) 03:13:06 ID:iLvMLypl0
>>984
おお動いたありがとう。
986名無しさん@お腹いっぱい。:2009/09/25(金) 03:54:41 ID:QHVB3Q8l0
>>978
サンクス、試してみます
987名無しさん@お腹いっぱい。:2009/09/25(金) 19:47:48 ID:j07RXB3U0
>>982
これ試したらいつの間にかIME状態取れなくなってた秀丸8βでも値取れた。

オリジナルの Ime.AhkだとバックグラウンドのIMEステータスも一応見れるので、
GetWindowThreadProcessId でスレッドID取得しするようにしてみたんだけど
アクティブ時は上手くいくのにバックグラウンドだとスレッド情報がうまくとれない(´・ω・`)
(戻り値は1で帰ってくるのでGetGUIThreadInfo関数自体は成功してるみたいなのに
スレッド情報は空になっている)

なんかおまじないが必要なんだろうか


settimer,timer1,200
return
+ESC::ExitApp
988つづき:2009/09/25(金) 19:51:45 ID:j07RXB3U0
Timer1: ;マウス下のウィンドウのスレッドIDを取得

MouseGetPos,mx,my,mhwnd
ThreadId := DllCall("GetWindowThreadProcessId",UInt,mhwnd,UInt,0,UInt)

; GUIスレッドの情報を取得
VarSetCapacity(stGTI, 48, 0)
NumPut(48, stGTI, 0, "UInt") ; DWORD cbSize;
ret:= DllCall("GetGUIThreadInfo", Uint,ThreadId, Uint,&stGTI)
cbSize := NumGet(stGTI, 0, "UInt")
flags := NumGet(stGTI, 4, "UInt")
hwndActive := NumGet(stGTI, 8, "UInt")
hwndFocus := NumGet(stGTI, 12, "UInt")
hwndCapture := NumGet(stGTI, 16, "UInt")
hwndMenuOwner := NumGet(stGTI, 20, "UInt")
hwndMoveSize := NumGet(stGTI, 24, "UInt")
hwndCaret := NumGet(stGTI, 28, "UInt")
rcCaret_l := NumGet(stGTI, 32, "UInt")
rcCaret_t := NumGet(stGTI, 36, "UInt")
rcCaret_r := NumGet(stGTI, 40, "UInt")
rcCaret_b := NumGet(stGTI, 44, "UInt")

;Message:WM_IME_CONTROL wParam:IMC_GETOPENSTATUS
imests := DllCall("SendMessage", UInt,DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwndFocus), UInt, 0x0283, Int,0x0005, Int,0)

;↓改行長いって怒られた。下繋げて下さい
Tooltip, imests=%imests%`nGetGUIThreadInfo=%ret%`nThreadId=%ThreadId%`nProcessId=%ProcessId%`n`n
cbSize=%cbSize%`nflags=%flags%`nhwndActive=%hwndActive%`nhwndFocus=%hwndFocus%`nhwndCapture=%hwndCapture%`n
hwndMenuOwner=%hwndMenuOwner%`nhwndMoveSize=%hwndMoveSize%`nhwndCaret=%hwndCaret%`n
rcCaret_l=%rcCaret_l%`nrcCaret_t=%rcCaret_t%`nrcCaret_r=%rcCaret_r%`nrcCaret_b=%rcCaret_b%

Return
989名無しさん@お腹いっぱい。:2009/09/25(金) 23:16:33 ID:VEuCex6/0
質問しようかと思ったがスレも終了とはついてない。
新スレで質問させていただきます。
990名無しさん@お腹いっぱい。:2009/09/25(金) 23:20:24 ID:gLjU/yn40
>>989
すげー質問がくるんだろうなー(`〜´)y-~~~
991名無しさん@お腹いっぱい。:2009/09/25(金) 23:23:06 ID:aKBzNl6i0
まだ、次スレないのか。建てるか。
992名無しさん@お腹いっぱい。:2009/09/25(金) 23:39:09 ID:aKBzNl6i0
建てた。異論は認める。

AutoHotkey スレッド part9
http://pc12.2ch.net/test/read.cgi/software/1253888736/
993名無しさん@お腹いっぱい。:2009/09/26(土) 01:21:52 ID:QCvI6Osl0
乙しつつ埋め
994名無しさん@お腹いっぱい。:2009/09/26(土) 05:02:05 ID:JGvN8cyx0
995名無しさん@お腹いっぱい。:2009/09/26(土) 05:02:55 ID:JGvN8cyx0
埋め
996名無しさん@お腹いっぱい。:2009/09/26(土) 05:03:17 ID:bwP8Emjr0
うめー
997名無しさん@お腹いっぱい。:2009/09/26(土) 05:03:29 ID:wCAO+XhV0
うめうめ
998名無しさん@お腹いっぱい。:2009/09/26(土) 05:03:52 ID:JGvN8cyx0
999名無しさん@お腹いっぱい。:2009/09/26(土) 05:04:04 ID:8D2IrUBq0
1000名無しさん@お腹いっぱい。:2009/09/26(土) 05:04:13 ID:ipSzmwem0
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。