10/09/26 06:54:22 nkRDvKD10
ありがとうございました。
179:名無しさん@お腹いっぱい。
10/09/26 23:55:01 npQ7FQgg0
AutoHotkey_L 更新
Revision 60 - September 24, 2010
Added: File.Encoding for changing or retrieving the codepage in use by a File object.
Added: Variadic functions and function-calls and indirect mode for callbacks.
Added: Object.Clone()
Changed: ByRef parameters no longer require the caller to supply a variable.
Changed: Obj.foo := "" now frees foo's contents as originally intended (but still doesn't remove the field).
Changed: OnMessage functions now tolerate optional and ByRef parameters.
Changed: RegisterCallback now enables execute access on callbacks in 32-bit builds (already did in 64-bit builds).
Changed: RegisterCallback now treats explicit ParamCount="" as omitted.
Fixed: For-loop was treating non-expression "0" as true for scripted enumerators.
Fixed: ComEvent (ComObjConnect) not working on the ANSI build.
Fixed: ComEvent (ComObjConnect) not correctly backing up/restoring local vars when calling a function which is already running.
Fixed: Buffer overflow in A_EndChar when there is no end char.
Fixed: Func->mNextFunc not inititialized to NULL (used only by LowLevel scripts).
Debugger: Added the capability to retrieve an object's contents (with a supported debugger client).
Debugger: Fixed a few bugs.
----
可変長引数は便利そうだ。
DllCallの引数に配列オブジェクトを渡すことが出来たみたいで、
可変長引数との連携でDLLの関数のインポートが簡単にできそうでフォーラムが盛り上がっとる。
180:名無しさん@お腹いっぱい。
10/09/27 00:03:23 5TbViGzm0
なるほど、ふむふむ
ほうほうなるほどねーなるほど、うん、なるほどね
すみません英語わかりません
181:名無しさん@お腹いっぱい。
10/09/27 00:38:35 7U+YabrZ0
Cdecl には便利だなぁ
Random, value, 0, 999
MsgBox,% sprintf("%d = 0x%08x", "Int", value, "Int", value)
sprintf(format, params*) {
VarSetCapacity(buff, 1024) ; バッファ長は適当
params.Insert(1, "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf"))
params.Insert(2, "Ptr"), params.Insert(3, &buff)
params.Insert(4, "Str"), params.Insert(5, format)
params.Insert("Cdecl Int")
If DllCall(params*)
Return buff
}
182:名無しさん@お腹いっぱい。
10/09/27 16:10:50 LQAeJ7X/0
IMEがONになっているときだけ、
A & $B::などのコンビネーションキーを有効にするには、
どうすればいいでしょうか?
IMEがOFFのときには、A押しっぱでAのキーリピートを発生させたいです。
当方、WinXP、AutoHotkey_L使用。IME.ahk導入済みです。
以下、うまくいかなかった残骸。
Hotkey,If,(IME_Get() == 0)
Hotkey,a & $b, Off
Return
Hotkey,If,(IME_Get() == 1)
Hotkey,a & $b,LabelA
Return
LabelA:
Send,{Blind}@
Return
183:名無しさん@お腹いっぱい。
10/09/27 18:12:37 MKGzi6kB0
> Hotkey,If,(IME_Get() == 0)
AutoHotkey_Lは使ってないので文法に違いがあるのかも知れんけど
こういう書き方ってできるんだっけ?
あと、IME_Get() はLoopかSetTimerで定期的に見てやらんといかんのでは?
184:名無しさん@お腹いっぱい。
10/09/27 19:12:21 WJ6+ZZnJ0
>>182
>>9に書いてあるけど、AHK_Lならこんな感じでできる。
#If (IME_GET() == 1)
a & $b::Send,{Blind}@
#If
185:名無しさん@お腹いっぱい。
10/09/27 20:35:00 T8of1KY90
コマンドラインで受け取ったときの%1%とかを関数の中で使う場合
p1 = %1%
IF( p1 ){
って使うしかない?
あとLにするデメリットって何かあるっけ?
2バイト文字を1文字あたり2文字として扱ってるスクリプトがたくさんあると
移行がめんどくさそうだけど
186:名無しさん@お腹いっぱい。
10/09/27 22:14:52 7U+YabrZ0
> p1 = %1%
ってのは、しょうがないとおもって諦めて同じようにやってる。
それ以外のデメリットというか、非互換はDllCall系かな。
ANSI版の関数を決め打ちで呼んでいるスクリプトは修正が必要。
旧流行らせるページのものは殆どこれに該当。
ユニコード版の場合、そこの ActiveX は使わないのが吉。ComObjCreate() を使うべし。
187:名無しさん@お腹いっぱい。
10/09/28 13:55:48 VotiS8pN0
autohotkey_lの話が出ているので便乗して質問します。
ime.ahkを使っています。
goolge日本語入力で、sendで漢字を表示しようとすると文字化けします。
ユニコードでソースを保存しているのですが、なぜかそうなってしまいます。
microsoft imeとatokでは問題ありません。
google日本語入力とautohotkey_lの相性問題でしょうか?
188:名無しさん@お腹いっぱい。
10/09/29 00:35:58 bWv2wkfB0
簡単な再起呼び出し自体はなんとなくわかるのですが
RegExでの再起呼び出しの仕方がよく分かりません
どなたか例を書いていただけないでしょうか
189:名無しさん@お腹いっぱい。
10/09/29 02:10:37 FDn4qtCl0
; 後方参照 : マッチした語句を参照
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])[ア-ン]\1
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :
; 再帰 : パターンの再利用
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])(?1)(?1)
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :
190:182
10/09/29 12:45:50 UMOsfPx00
>>184
ありがとうございます。
ずいぶんシンプルな記述ができるのですね。
昨日、遠回りな記述を発見しまして、それでずっと書いていましたが、これで少しは楽できそうです。
↓遠回りな記述
$b::
If(IME_Get() == 0)
{
Send,b
}Else
{
If(GetKeyState("a","P") == 1)
{
Send,{Blind}@
}Else
{
Send,b
}
}
Return
191:名無しさん@お腹いっぱい。
10/09/29 18:04:59 bWv2wkfB0
>>189
ありがとうございます
今後利用させていただきます
192:名無しさん@お腹いっぱい。
10/09/30 15:48:01 VH7s/lU20
AutoHotkeyで文字列を置換したいのですが…わかりません。
RegExReplace() を使って正規表現による置換をすれば、できるようなのですが難しくてわかりません。
やりたいことは、文字列中のアットマーク以降の文字だけに置換したいのです。
例
"あいうえお@かきくけこ" → "かきくけこ"
"abcd@efgh" → "efgh"
"0123456@789" → "789"
文字数は決まっていません。
エクセルとかだと、ワイルドカードを使って「*@」を取ってしまえばできるのに。
教えてください。お願いします。
193:名無しさん@お腹いっぱい。
10/09/30 16:01:14 EZTOI8wM0
これつかって、アクティブウインドウを中央に配置 できる?
194:名無しさん@お腹いっぱい。
10/09/30 16:11:35 4NVtvZdn0
WinMoveでできるよ
195:名無しさん@お腹いっぱい。
10/09/30 16:18:28 TR4zMDWK0
>>192
RegExReplaceでやりたいなら
unko =
(
あいうえお@かきくけこ
abcd@efgh
0123456@789
)
unko := RegExReplace(unko,"`n).*?@(.*?)",$1)
msgbox,% unko
196:名無しさん@お腹いっぱい。
10/09/30 16:29:05 VH7s/lU20
>>195
出来ました。
.*? を使えばエクセルのワイルドカード*と同じように使えるのですね。
ありがとうございます。
正規表現って難しいですね。
その代わりいろんなことができるのでしょうけど。
197:名無しさん@お腹いっぱい。
10/09/30 18:54:12 5DqLBhFu0
AutoHotkey_LのUnicode版で標準入出力ってどうすればいいですか?
>>11だと文字コードをどう変換してもうまく動作してくれないです。
198:197
10/10/01 08:02:15 /Nakdzh+0
ここにあるUnicode版AutoHotkey_L用の関数で出来ました
URLリンク(www.autohotkey.com)