AutoHotkey スレッド part9

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
2名無しさん@お腹いっぱい。:2009/09/25(金) 23:26:17 ID:aKBzNl6i0
■関連記事のあるサイト

AutoHotkey メモ - Principia
http://principia.s54.xrea.com/index.php?AutoHotkey メモ
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/09/25(金) 23:28:14 ID:aKBzNl6i0
■ リマップ・キー割り当て

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

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

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

Q6:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A6:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
  キーボードフックを利用する方法でも回避可能。
4名無しさん@お腹いっぱい。:2009/09/25(金) 23:29:46 ID:aKBzNl6i0
■ マウス関連

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

Q2::キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない・・・
A2::マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
5名無しさん@お腹いっぱい。:2009/09/25(金) 23:30:41 ID:aKBzNl6i0
■ IME関連

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

Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:一部のアプリではできる。(IMEの入力・変換窓がMS-Wordのようにインライン化しているアプリでは無理)
ttp://pc12.2ch.net/test/read.cgi/software/1243005818/99,787 を参照

■ ジョイスティック関連

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

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

Q3:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A3:AutoHotkeyではできません。
6名無しさん@お腹いっぱい。:2009/09/25(金) 23:32:23 ID:aKBzNl6i0
■ 日本語の取り扱い
AuthoHotkeyは英語圏でつくられたソフトでマルチバイト文字列のことを全く考慮していないので以下の問題が起き得る。

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

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

Q2:A_ScriptDir、A_LoopFileName や SplitPath の結果がおかしいことがあるんだけど?
A2:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
  対象となりうる文字:
    ―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx\\
  これは、>>1にある「駄目文字微対策版」を使うことで回避できる。
7名無しさん@お腹いっぱい。:2009/09/25(金) 23:33:46 ID:aKBzNl6i0
■ スクリプト仕様
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
  複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
  が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。

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

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

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

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

Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。
8名無しさん@お腹いっぱい。:2009/09/25(金) 23:34:44 ID:aKBzNl6i0
■ AutoHoekey_Lって具体的にどう違うの?

本家との違いは以下の通り
(1) #If 任意の「式」を用いてキーマップ定義ができる
(2) メニューにアイコン表示ができる
(3) Exeやトレイアイコン描画の向上
(4) GUIのテキスト表示のレンダリング方法を変更できる(アンチエイリアスOFF等)
(5) 正規表現にマッチした文字列を引数にして関数を呼べる
(6) Send, {Asc XXXX}のUnicode版が使える

目玉は(1)。 ユーザ定義関数作って #If で使うととても便利。

例1) [Ctrl]+[Alt]+[Space]で On/Off 切り替え。変数がOnの時のみIKJLでカーソル移動可。
 ^!Space::KeyMap:=!KeyMap
 #If (KeyMap=1)
  I::Up
  K::Down
  J::Left
  L::Right
 #If

例2) トレイの時計部分でホイールを回すと音量変更
 #If MouseOver("ShellTray_Wnd", "TrayClockWClass")
 WheelUp::SoundSet,+5, Master
 WheelDown::SoundSet, -5, Master
 #if
 MouseOver(win, ctrl="") {
  MouseGetPos,x,y,hwnd,class2,1
  WinGetClass, class1, ahk_id %hwnd%
  Return InStr(class1, win) && InStr(class2, ctrl)
 }
9名無しさん@お腹いっぱい。:2009/09/26(土) 00:12:10 ID:kVxzc/os0
Q:[Ctrl]や[Shift], [Alt]が押されっぱなしになることがあるけど、これってAHKのせい?
 もしそうじゃないとしたら、AHKで何か対処できる?
A:報告が多くありますが、よく分かっていません。以下のような報告があります。
  ・Logicool(Logitec) の "SetPoint" は「クロ」との報告があります。
  ・窓使いの憂鬱をデュアルコア以上のプロセッサで使っている場合に起きるという報告もあります。
  ・VMWareが悪さしているという報告もあります。
 上記のソフトはAHKより下位(物理層寄り)なので、AHKでは物理的にキーが押されているとしか分かりません。
 タイマーでキー押下を監視して一定時間以上押下されていたら警告を出したり、
  SetPoint を再起動などで対処していたりするようです。

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

#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%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
10名無しさん@お腹いっぱい。:2009/09/26(土) 01:07:34 ID:HqILfQEt0
>>1おつです。
>A2::マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
とのことですが、

XButton1::pgup
XButton2::pgdn

を、キーボードの「PageUp」「PageDown」と同じようにキーリピートさせたいのですが、
どう記述すればいいか教えてください。
11名無しさん@お腹いっぱい。:2009/09/26(土) 01:23:59 ID:EqdgxjNj0
★ローカルルール★

1.管理職以上の書き込み禁止
2.退職希望者かOB以外の書き込み禁止
3.会社の為の是正項目は事実のみの記載とする
4.会社の不利益情報は社会通念と法律に大きく反する部分のみ
5.上記項目に該当外はスレに書込み禁止ならびに削除依頼対象とする
12名無しさん@お腹いっぱい。:2009/09/26(土) 01:33:38 ID:kVxzc/os0
一例)
・良点: Sleepを使わないので元キーを高速連打してもOK
・欠点: 単一スレッドなので割り込みスレッドでWait系をされると面倒

XButton1::SendWhileButtonPress("{Down}")

; 送るキー(Sendコマンドで書くヤツと同じ), 押下解除を待つキー, 最初待ち時間 リピートの待ち時間
SendWhileButtonPress(Keys, WaitKey="", FirstDelay="0.7", RepeatDeley="0.03") {
 KeyDelayBack:=A_KeyDelay
 WaitKey := (WaitKey=="") ? WaitKey:=A_ThisHotkey : WaitKey
 SetKeyDelay, 0
 Send, %Keys%
 KeyWait, %WaitKey%, T%FirstDelay%
 While (ErrorLevel) {
  Send, %Keys%
  KeyWait, %WaitKey%, T%RepeatDeley%
 }
 SetKeyDelay, %KeyDelayBack%
}
13名無しさん@お腹いっぱい。:2009/09/26(土) 02:49:34 ID:8ty4pJPH0
>>1
新スレ乙

キーワード「autohotkey」を含む新着エントリー - はてなブックマーク
http://b.hatena.ne.jp/keyword/autohotkey?sort=hot&threshold=5
14名無しさん@お腹いっぱい。:2009/09/26(土) 05:10:03 ID:od9XnudZ0
いちおつ
15名無しさん@お腹いっぱい。:2009/09/26(土) 13:37:55 ID:ki3IU1040
★ローカルルール★

解答できない質問には口をはさまない
16名無しさん@お腹いっぱい。:2009/09/26(土) 16:23:26 ID:zYxRZ2As0
更新が一気にきたぞ

1.0.48.05 - September 25, 2009

Fixed crash of SendMessage and PostMessage when wParam or lParam is omitted (broken by 1.0.48.04). [thanks Lexikos]

1.0.48.04 - September 25, 2009

Fixed StringSplit to work properly inside functions of compiled scripts (broken by 1.0.35.01). [thanks engunneer & Lexikos]

Fixed SendPlay not to wait for the release of the Windows key prior to sending an "L" keystroke (broken by 1.0.48.01). [thanks Lexikos]

Fixed A_EndChar to be valid when the B0 option is present, and to be empty when there is no ending character (broken by 1.0.44.09). [thanks Al2000]

Fixed FormatTime to yield a valid time of day even when the specified month is out-of-range (broken by 1.0.48.00). [thanks silveredge78]

Fixed FileCreateDir to support a leading backslash even when it is the only backslash; e.g. \dir. [thanks jaco0646]

Fixed GuiControl/GuiControlGet/Gui/SendMessage to work reliably even when they trigger a callback or OnMessage function. [thanks Lexikos]

Fixed RegExMatch() not to produce too few replacements when an empty-string match is followed by a non-empty-string match.

Changed "While()" to be recognized as a loop rather than a function. [thanks Crash&Burn]

Improved UrlDownloadToFile to support FTP and Gopher. [thanks Lexikos]

Improved the stdout/asterisk mode of FileAppend to write immediately rather than lazily to standard output. [thanks Lexikos]

Added full support for "if % expression". [thanks kenomby]
17名無しさん@お腹いっぱい。:2009/09/26(土) 21:11:32 ID:kVxzc/os0
AutoHotkey_Lもキテル〜

Revision 32 - September 26, 2009

* Fixed: Send/PostMessage crash when less than three parameters were specified.

Revision 31 - September 26, 2009

* Added: Object/array support and numerous minor changes to make this possible.
* Added: Support for While(expression) with no delimiting space.
* Added: Trim, LTrim, RTrim.
* Added: A ~= B; equivalent to RegExMatch(A, B). May be removed in a future revision.
* Fixed: An incompatibility with LowLevel.
* Changed: Characters [, ] and ? are no longer valid in variable names. Consequently, ? (ternary) no longer requires a space on either side.
* Changed: Optional parameters may now be omitted at any position in the parameter list of a non-dynamic function call.
 Since this works by automatically inserting the parameter's default value at load-time, it is not supported or allowed for dynamic function-calls.
* Debugger: Various minor changes to make program flow easier to follow while stepping through code.
* Optimization: If DllCall's first parameter is a literal string which identifies a function already present in memory, it is replaced with the actual address of the function.
* Updated from v1.0.48.03 to v1.0.48.04.

---------

てか、Objectサポートきてる!
まだ実験的実装らしいけど、プロパティ持てるからデータの引き回しは楽になりそうだ。
18名無しさん@お腹いっぱい。:2009/09/26(土) 22:19:16 ID:kVxzc/os0
最早、別言語な気がするw

; ここからおまじない
"".base.__Get := "Default_Get_PseudoProperty"
"".base.is := "Default_is"
Default_Get_PseudoProperty(nonobj, key)
{
 if key = length
  return StrLen(nonobj)
}

Default_is(nonobj, type)
{
 if nonobj is %type%
  return true
 return false
}
; ここまでおまじない

str = あいうえお
int = 100

MsgBox, % """" str """の長さは" str.length "バイト"
MsgBox, % """" int """は" (int.is("number") ? "数値" : "数値以外")
MsgBox, % """" str """は" (str.is("number") ? "数値" : "数値以外")
19名無しさん@お腹いっぱい。:2009/09/26(土) 22:36:05 ID:3kevBnT00
形もつけれるみたいだから、継承のない(?)クラスって解釈でいいのかな
20名無しさん@お腹いっぱい。:2009/09/26(土) 23:19:00 ID:kVxzc/os0
Javascriptみたいにプロトタイプベースで、Javaなどとは違い静的なクラス定義はしないで、
インスタンス作ったらガンガンとプロパティとかメソッド増やせる感じ。
あと、現有インスタンスのプロパティなど引き継いで新規インスタンスの生成はできるみたい。

まぁ、あんまり深く分からなくても配列が使えるようになっただけでもデカい。
プロパティだけならMapみたいなもんだから、キーは英数字だけになるけど、だいぶ使いやすいと思う。
(多元配列はオブジェクトの入れ子で実現できなくもない、とのこと)

[JS]
var obj = new Object();
obj.say = showMsg;
obj.say("Hello!");
function showMsg(msg) {
 WScript.echo(msg);
}

[AHK_L]
obj := Object()
obj.say := "ShowMsg"
obj.say("Hello!")
ShowMsg(msg) {
 MsgBox, %msg%
}

メソッド内で this"相当を使うのは結構面倒。
21名無しさん@お腹いっぱい。:2009/09/27(日) 00:04:46 ID:5qF759KL0
>>18
str.length ってことがAutoHotkeyで出来るようになるとは
想像していなかったw
今回の更新はかなり大がかりなものだったろう
22名無しさん@お腹いっぱい。:2009/09/27(日) 00:25:48 ID:UdfwTt6tP
なんかもうここまで追加するなら構文周りも整理して別言語にしたほうが
23名無しさん@お腹いっぱい。:2009/09/27(日) 02:03:33 ID:sd9C/ANs0
個人的には完全マルチスレッドにして欲しい
24名無しさん@お腹いっぱい。:2009/09/27(日) 02:04:01 ID:KfEpDEOn0
不特定数の戻り値を呼び元のスコープに渡したい時に便利だなぁ。

If (ret := BREGEXP_Match("あいうえおかきくけこさしすせそたちつてと", "/([あ-お]+)[^さ-そ]+([さ-そ]+)/k")) {
 str := "matched :""" ret.matched
 Loop, % ret.submatched
  str .= "`nSubmatch " A_Index " : " ret[A_Index]
 MsgBox, % str
}
BREGEXP_Match(target, pattern, offset=1) {
 hModule:=DllCall("LoadLibrary",Str,"BREGEXP.DLL")
 offset-- < 1 ? offset:=0 :
 pRExp=0, VarSetCapacity(msg,256)
 if DllCall("BREGEXP.DLL\BMatch", "Str",pattern, "UInt",&target+offset, "UInt",&target+StrLen(target), "IntP",pRExp, "Str",msg, "Cdecl Int") {
  result:=Object()
  pArray1:=NumGet(pRExp+0, 32, "Int"), pArray2:=NumGet(pRExp+0, 36, "Int")
  result.submatched:=NumGet(pRExp+0, 40, "Int")
  start:=NumGet(pArray1+0, 0, "Int"),length:=NumGet(pArray2+0, 0, "Int")-start
  VarSetCapacity(value, length+1, 0x00)
  DllCall("RtlMoveMemory", "Str",value, "Int",start, "Int", length)
  result.matched:=value
  Loop, % result.submatched {
   start:=NumGet(pArray1+0, 4*A_Index, "Int")
   length:=NumGet(pArray2+0, 4*A_Index, "Int")-start
   VarSetCapacity(value, length+1, 0x00)
   DllCall("RtlMoveMemory", "Str", value, "Int",Start, "Int",length)
   result[A_Index]:=value
  }
 }
 DllCall("BREGEXP.DLL\BRegFree", "UInt",pRExp)
 DllCall("FreeLibrary", "UInt", hModule)
 Return result
}
25名無しさん@お腹いっぱい。:2009/09/27(日) 16:30:33 ID:RivZcGJb0
thisみたいなのを使うとしたら __Call でどうにかしないとだめ?
obj.func じゃなく func(obj) みたいにしたほうがいいのか
26名無しさん@お腹いっぱい。:2009/09/27(日) 18:59:35 ID:QlSFOaMVP
メソッドの第一引数がthisでしょ。
Pythonだとselfという名称をよく使うけど、それと一緒かと。

Obj := Object("name", "DefaultName")
Obj.ShowName := "Obj_ShowName"

a := Object("base", Obj, "name", "MyName" )
; "MyName"の次に"abcd"が表示される
a.ShowName()

Obj_ShowName( self )
{
 name := "abcd"
 MsgBox % self.name
 MsgBox % name
}
27名無しさん@お腹いっぱい。:2009/09/27(日) 20:13:33 ID:w8RWvQ9d0
ウィンドウ、アプリごとに異なる第二のコンテキストメニューを出す
スクリプトをちまちま書いてるんだけど
そういうのが設定ファイルだけで済むような
フレームワークってすでにあったりしますか?
28名無しさん@お腹いっぱい。:2009/09/27(日) 23:38:29 ID:JeuL8jO+0
Objectやら何やら可能にするなら、もういっそrubyとかでのDSLでも
良いんじゃないかって感じがしてきた。
29名無しさん@お腹いっぱい。:2009/09/28(月) 12:53:08 ID:osZ+Tna60
エクスプローラでファイルのパス名を取得してクリップボードに入れたいのですが、
タイトルバーにパス名 の設定にしてそこから…以外に、取得する方法ってあるんでしょうか?

Window Spyで >>>>( TitleMatchMode=slow Visible Text )<<<< に
表示されてるトコあたりからゲットできればいい気がするんですが…
30名無しさん@お腹いっぱい。:2009/09/28(月) 13:16:45 ID:Couq7dy70
>>29
エクスプローラの選択ファイルで何かするときは
Ctrl+Cしたファイル情報を文字列化するのが便利

send, ^c
sleep, 200
clipboard := clipboard . ""
31名無しさん@お腹いっぱい。:2009/09/28(月) 14:01:34 ID:B+JRl/yG0
ClipWait使おうぜ…

#NoTrayIcon
#NoEnv
Clipboard=
Send, ^c
ClipWait
Clipboard=%Clipboard%
32名無しさん@お腹いっぱい。:2009/09/28(月) 15:37:25 ID:aEZJxxhv0
>>31
ClipWaitなら一応待機時間付けといた方が良い。
無選択でコピーしようとしたときにいつまでも待機しちゃうから。
33名無しさん@お腹いっぱい。:2009/09/28(月) 16:16:38 ID:JNXFXCDoP
>>29
ShellFolder() : エクスプローラのPathおよび選択ファイルを取得
 ttp://www.autohotkey.com/forum/topic20701.html
ShellDesktop() : デスクトップで選択されたファイルを取得
 ttp://www.autohotkey.com/forum/topic20701-42.html
34名無しさん@お腹いっぱい。:2009/09/28(月) 16:40:25 ID:lOoztPzz0
車輪の再発明にならないようにこの手の情報をまとめたページがほしいな
35名無しさん@お腹いっぱい。:2009/09/28(月) 17:45:02 ID:5BEcG0uoP
言い出しっぺの法則と言ってな
36名無しさん@お腹いっぱい。:2009/09/28(月) 17:49:10 ID:eaHkjm6k0
おっさんだけが通用するルールだっけ
37名無しさん@お腹いっぱい。:2009/09/28(月) 18:05:20 ID:l01M+E3n0
というかもうあるだろ
38名無しさん@お腹いっぱい。:2009/09/28(月) 19:08:56 ID:JNXFXCDoP
とりあえず、テンプレには「困った時は公式フォーラムを検索しろ」を追加しておくべきかと

Scripts & Functionsカテゴリの表題をざーっと見るだけでも、
ライブラリやTipsにどんなもんがあるかくらいはだいたい分かるので、
十分まとめサイト的な使い方もできるしね
39名無しさん@お腹いっぱい。:2009/09/28(月) 20:37:35 ID:CmTLbLiY0
オブジェクト指向対応わろた
日本語の解説ページはまだない?
40名無しさん@お腹いっぱい。:2009/09/28(月) 21:18:02 ID:eT2wGyq30
Autohotkey_L自体日本語解説を見ないわけだが。
4110:2009/09/28(月) 22:54:54 ID:58Qn72m30
ヒントだけでも教えてもらえませんか
42名無しさん@お腹いっぱい。:2009/09/29(火) 00:18:01 ID:SsyCv88+0
>A2::マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
43名無しさん@お腹いっぱい。:2009/09/29(火) 00:27:45 ID:LU/MvGey0
つか>>12が答えなんじゃないの?
44名無しさん@お腹いっぱい。:2009/09/29(火) 03:05:32 ID:vACS/ghZ0
オブジェクト指向とは、でググったけどさっぱり。
AHK一筋だと、新世界の出来事だわ。
45名無しさん@お腹いっぱい。:2009/09/29(火) 04:11:09 ID:fI6rd7fb0
AHKで閉じた世界だと無理に覚える必要はあまりなんじゃないのかな。
ただ、データの入れ物としては便利。
46名無しさん@お腹いっぱい。:2009/09/29(火) 05:57:04 ID:gSzgA3lX0
オブジェクトを何に使おうかなと考えると多すぎてきりがないな。
とりあえず配列っぽいものだけ使っていくか
47名無しさん@お腹いっぱい。:2009/09/29(火) 08:29:20 ID:XjAIZFMP0
>>43 気付きませんでした。

>>12 どうもありがとうございます。
「SetKeyDelay, 0」という行がエラーで読み込まれないのですが、
数値を自分で変えて入力すればいいのでしょうか
48名無しさん@お腹いっぱい。:2009/09/29(火) 09:12:36 ID:8h1fBk/U0
49名無しさん@お腹いっぱい。:2009/09/29(火) 12:01:48 ID:RR7ni7KvP
たぶん全角空白の取り忘れ
50名無しさん@お腹いっぱい。:2009/09/29(火) 12:33:59 ID:a9RSl18V0
>>3のQ3をやったら
This line does not contain a recognized action.
と怒られるんだが
51名無しさん@お腹いっぱい。:2009/09/29(火) 12:58:52 ID:vACS/ghZ0
>>50
::じゃないか?
8スレ目から変わってるw
52名無しさん@お腹いっぱい。:2009/09/29(火) 13:07:58 ID:Juf0Qce80
7スレまではちゃんと::だったのにねぇ
53名無しさん@お腹いっぱい。:2009/09/29(火) 13:08:34 ID:a9RSl18V0
>>51
それに気づいて半角になおしたが動かなくて
コピペし直して、半角にしたら動いた
レスサンクス
54名無しさん@お腹いっぱい。:2009/09/29(火) 19:07:50 ID:lm2BCjno0
質問があります。

Windows終了時に、Excel 2007の保存確認ダイアログを全部「はい」で閉じたいのですが、よい方法はありませんでしょうか?
現在は、下記のようにしているのですが、
Windows終了時以外も自動で閉じてしまいます。
Windows終了時を検出する(終了を押したことを検出する)ことは可能でしょうか?

SetTitleMatchMode, RegEx

SetTimer, OnTimer, 1000
return

OnTimer:
 ; Auto save Excel
 IfWinExist, Microsoft Office Excel ahk_class #32770
 {
    WinActivate
    Send, {ENTER}
  }
return
55名無しさん@お腹いっぱい。:2009/09/29(火) 19:36:55 ID:RR7ni7KvP
>>54
シャットダウン等はWM_POWERBROADCASTメッセージを監視すればいい
ttp://www.autohotkey.com/forum/viewtopic.php?t=40008

OnMessageで待機しておいて、シャットダウンだと分かったら
WinWaitで保存確認ダイアログが出るのを待って、その後でEnter遅れば良いかも
56名無しさん@お腹いっぱい。:2009/09/29(火) 21:31:16 ID:XjAIZFMP0
>>48 誘導ありがとうございます。このページみて勉強します。
>>49 動きました!
>>12 ありがとうございます!最っ高です!!
57名無しさん@お腹いっぱい。:2009/09/29(火) 23:54:59 ID:AsIoHLSK0
>>55
そこのサンプル使ってみた
スタンバイや休止では動くけどシャットダウンは感知しないな

シャットダウン時に処理させるならOnExitがある
俺はSysGet,var,8192をタイマー実行させてシャットダウンを感知させてる
58名無しさん@お腹いっぱい。:2009/09/30(水) 00:13:51 ID:CeJVUo0U0
スマートな方法じゃないけど
「事前処理(終了や保存)を済ませてからスタンバイへ移行する」
というスクリプトを書いてデスクトップにおいてる。
スタンバイのみだと寂しいので再起動、電源を切るも同様に置いてる。
59名無しさん@お腹いっぱい。:2009/09/30(水) 01:07:52 ID:okbjhsBF0
>>55
ttp://www.winapi-database.com/Message/WM/WM_POWERBROADCAST.html
>WM_ENDSESSION = &H16
>機能
>WM_QUERYENDSESSIONメッセージの結果として全てのトップレベルウィンドウに送られる。
>このメッセージはセッションが実際に終了するかどうかをアプリケーションに知らせる。
こっちじゃないの?
60名無しさん@お腹いっぱい。:2009/09/30(水) 04:03:30 ID:rlgTPYRJ0
発動すると過去8個分のクリップボードの内容を選択するコンテキストメニューを表示して
何か選んだらその内容をカレントのカーソル部分に流し込むスクリプトクレクレ
61名無しさん@お腹いっぱい。:2009/09/30(水) 04:16:15 ID:nMSOwgQy0
そういうクレクレならAHKでやる必要がないなぁ。

最強クリップボード拡張ソフトはこれだ!Part9
http://pc12.2ch.net/test/read.cgi/win/1239074322/
6254:2009/09/30(水) 15:16:19 ID:WEPYNDxu0
>>55 >>57 >>59
ありがとう、試してみます。

>>58
いろんな手段でシャットダウンするので(それこそPCの電源ボタン押したりとか)、
シャットダウン用のスクリプト用意して、というのはちょっと無理っぽい
63名無しさん@お腹いっぱい。:2009/10/01(木) 22:52:42 ID:A7VOGOg80
すみませんが少しお尋ねします。連続打鍵で特定のショートカットキーを押
したことにしたいのですが、そういった処理は可能でしょうか。
具体的にどのような使い方をするかと言うと、現在は Crrl+D でクリップボ
ード拡張ソフトを呼び出しているのですが、これを Ctrl や Shift や Alt
の連続二回押し(もしくは三回押し)で呼び出せるようにしたいのです。
64名無しさん@お腹いっぱい。:2009/10/01(木) 23:48:57 ID:NBwxoDJI0
連続打鍵の検出と、それをトリガーとして特定のキー発行もできるよ。
だだ、そのソフトがキーを拾ってくれるかは分からないけど。

~LCtrl::
KeyCount := (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) ? KeyCount+1 : 1
Tooltip, 連打回数 = %KeyCount%
KeyWait, LCtrl
Tooltip
Return

キー発行は Tooltip のところを変えれば何とかなるよ
65名無しさん@お腹いっぱい。:2009/10/02(金) 20:27:22 ID:b+04cKHI0
一応、連打ホットキーっていうそのものズバリなソフトはあるけどね
66名無しさん@お腹いっぱい。:2009/10/02(金) 21:47:54 ID:99+Q0SgU0
>64,>>65
どうもありがとうございます。AutoHotkeyは初めてですが何とか頑張ってみます。
67名無しさん@お腹いっぱい。:2009/10/03(土) 00:18:53 ID:aG8yTLhK0
AutoHotkey v1.0.48.04.L32 のバグなんだろうけど…
関数内で local 宣言した変数のうちいくつかが何故か static 扱いになってしまっている。

この現象が起きるスクリプトで該当部分を走らせると100%再現する。
本家のものでは再現しないし、以前のAHK_Lでも再現しない。
てかずっと常用しているスクリプトの挙動がおかしくて気づいた。

1000行以上あるスクリプトで該当関数は数十行なんだけど、
関数が関数を呼んで何てことになっているので、再現できる最小コードが上手く割り出せない。

もうチョイ調べてみるけど、それでも分からないなら丸ごとLexikosタソに送るしか無いかねぇ・・・
68名無しさん@お腹いっぱい。:2009/10/03(土) 05:15:13 ID:PGN0BmtR0
質問があり、失礼いたします。

AutoHotKeyにてprintfデバッグのような方法はありませんでしょうか?
デバッグのような作業をどのようにしたものか?と思いまして
69名無しさん@お腹いっぱい。:2009/10/03(土) 05:24:43 ID:gnRe4SZn0
IEのタブを指定して閉じるみたいなことできませんか?
70名無しさん@お腹いっぱい。:2009/10/03(土) 06:19:46 ID:Wv0Y3Opo0
>>68
ListVars コマンドを使う。
ListVars だとアクティブウィンドウが変わって困るなら↓みたいにやる

DllCall("AllocConsole")

Loop, 20 {
 StdOut("hoge " . A_Index)
 Sleep, 1000
}
msgbox

StdOut( text ) {
 static hStdOut=-1
 if (hStdOut = -1) {
  hStdOut := DllCall("GetStdHandle", "UInt", STD_OUTPUT_HANDLE:=-11)
  if ErrorLevel
   return -1
 }
 text .= "`n"
 ret := DllCall("WriteFile", "UInt", hStdOut, "UInt", &text, "UInt", StrLen(text), "UIntP", bytesWritten, "UInt", 0)
 return bytesWritten
}

>>69
AHKのビルトインコマンドだけじゃ無理。COM操作では何とかなるかもしれない。
URLやタイトルを指定してってのなら出来そうだけど、N番目のタブって指定ならどうだろう…
7168:2009/10/03(土) 06:46:02 ID:PGN0BmtR0
>>70
ありがとうございます。

なるほど・・・。

より簡易的なら、
MsgBox := DllCall("RegisterWindowMessage", Str,"MetaTrader4_Internal_Message", Int)
MsgBox, UNKOOOOOoooooooo!!!!!!

するとか、ドキュメントを見ていたのですが

OutputDebug Mankooo!!!

とかでDebugViewで監視とかもいけますね。
助かりますた。
72名無しさん@お腹いっぱい。:2009/10/03(土) 13:15:51 ID:mDXunvhi0
OutputDebugStringつかって出力して
それトラップするツール作るなり拾ってくるなりすればいいんじゃね。
AHKではやらないけどIDEついてない開発環境ではそれなりに有効。
73名無しさん@お腹いっぱい。:2009/10/03(土) 17:28:41 ID:Y0AyX3Wh0
Autohotkeyでセミコロンにスティッキーシフトの
機能あてるには
どうしたらいいんでしょうか
74名無しさん@お腹いっぱい。:2009/10/04(日) 02:25:27 ID:Mwmirs220
指定ウィンドウをアクティブにならないようしたいんですが
このソフトでできませんか?
7568:2009/10/04(日) 06:34:32 ID:MGN4M+SU0
>>72
APIのOutputDebug がまさにそのようです。
OutputDebugStringを見るには、MS配布のDbgViewがありますので・・・
76名無しさん@お腹いっぱい。:2009/10/04(日) 13:04:10 ID:vwp7cn8y0
API使わんでも標準コマンドにあると思うが。
7768:2009/10/04(日) 15:13:00 ID:MGN4M+SU0
>>76
ごめん、標準ライブラリのコマンドのことをAPIっていったの
78名無しさん@お腹いっぱい。:2009/10/05(月) 16:22:39 ID:2bmPua6X0
msgbox,% 2 ** 100

これを実行すると、マイナスがつく値が表示されます
桁あふれの症状だと思います

ただしい値を表示するにはどうすればよいのでしょうか
79名無しさん@お腹いっぱい。:2009/10/05(月) 17:22:53 ID:wiYrt6QJ0
・桁あふれした場合を考慮した計算ルーチンを自分で作る
・桁数指定できる数値型を持つプログラム言語やDBを使って計算させて、文字列にキャストしした結果を得る
80名無しさん@お腹いっぱい。:2009/10/05(月) 17:28:54 ID:2bmPua6X0
>>79
2番目の方ならすぐにできますね
どうもありがとう
81名無しさん@お腹いっぱい。:2009/10/05(月) 23:35:30 ID:LmUo0q1s0
>>73
StickeyShiftっぽいもの。
1レスに入りきれないのでうpした
http://lukewarm.s101.xrea.com/up/file/116.zip
82名無しさん@お腹いっぱい。:2009/10/06(火) 13:19:52 ID:kOB3zr4P0
>>74
ならないようには無理かも。
アクティブなった瞬間に非アクティブにすることなら可能。
83名無しさん@お腹いっぱい。:2009/10/06(火) 14:47:31 ID:sqDuIHpi0
settimer なり loop なりで、
アクティブじゃない場合はひたすら
winset bottom し続ければいいんじゃね
84名無しさん@お腹いっぱい。:2009/10/06(火) 18:07:32 ID:kujl6R2z0
>>81
ありがとうございます!
窓使いの憂鬱から乗り換えたんですが
色々分からないことが多くて…
スクリプト読んで勉強させてもらいます
85名無しさん@お腹いっぱい。:2009/10/08(木) 01:40:28 ID:nwph0l6B0
>>20
配列が使えるということは分かったけど
配列の逆順ソートとかは出来るのかな?
autohotkey_lの説明を見てもよく分からなかった
86名無しさん@お腹いっぱい。:2009/10/08(木) 09:27:52 ID:2ApdAYol0
定義済みクラスは現状1コしかない。Javaだと java.lang.Object 相当のみ。
ソートさせたいならメソッド作ればおk。
87名無しさん@お腹いっぱい。:2009/10/08(木) 10:03:01 ID:bll6pBgmP
>>85
そのうち標準で実装されるだろうけど、当面はこちらでしのぐという手もある
ttp://www.autohotkey.com/forum/topic49736.html
88名無しさん@お腹いっぱい。:2009/10/09(金) 23:58:11 ID:Kve3ULGg0
キーボードの任意のキーを2回連続で叩いたときに、2回目以降のキー入力を無効化したいんですが
何かいい方法はないでしょうか?
あるソフトで同じキーを叩くとツールがトグル変更されるのを防ぎたいんですが…
89名無しさん@お腹いっぱい。:2009/10/10(土) 09:03:08 ID:fCoF6bz7P
A_PriorHotkey と A_TimeSincePriorHotkey で何とかできるんじゃね

間にホットキー割り当てしてないキーが挟まれることを考えると面倒だけど、
連打という条件があればある程度無視できるだろうし
90名無しさん@お腹いっぱい。:2009/10/10(土) 16:32:46 ID:vvEVP3uQ0
>>74
WS_EX_NOACTIVATE をセットすればいいんじゃないかな。
WinSet, ExStyle, +0x08000000, A
91名無しさん@お腹いっぱい。:2009/10/10(土) 17:20:55 ID:WEp40DfR0
SetTimerでラベルまで飛ばしたあと戻すにはreturnを使うのが一般的なんでしょうか?
92名無しさん@お腹いっぱい。:2009/10/10(土) 18:04:15 ID:G/Qa0Lno0
>>89
ありがとうございます、できました!
b::
if ( A_PriorHotkey = "b" )
return
else
send, b
return
93名無しさん@お腹いっぱい。:2009/10/10(土) 18:47:33 ID:9IMzkdnq0
>>91
タイマーは時限実行(の繰り返し)だから、戻り元なんて無いよ。
強いて言えばスクリプト中に無い AutoHotkey のコア部分が呼んでいる。

それに、その使い方なら、Gosub が適切かと思う。
一定時間後に特定ラベルを実行してそれの終了を待つなら Sleep + Gosub。
94名無しさん@お腹いっぱい。:2009/10/10(土) 23:04:13 ID:jf81PmzV0
>>9
これ解決しないかなぁと思いつつ
使い続けています…
95名無しさん@お腹いっぱい。:2009/10/11(日) 00:04:25 ID:4DhyoRbu0
>>9の問題は日本語環境以外でも発生するのかな
公式forumを見てみてもよくわからない
96名無しさん@お腹いっぱい。:2009/10/11(日) 00:50:00 ID:iRMIsFxD0
Ctrl + A にカーソルキー左を割り当てました。
オートリピートがかかると、何回かにいっぺん a が
入力されてしまいます。
これを回避するにはどうすればよいでしょうか?
97名無しさん@お腹いっぱい。:2009/10/11(日) 02:22:39 ID:wR1LnNNu0
^a::
Send, {left}
KeyWait, a
Return
98名無しさん@お腹いっぱい。:2009/10/11(日) 12:59:04 ID:DqXjSTmF0
VBやCで作成したプログラムからAHKのスクリプトを起動してある処理を実行させるとします
その実行結果を返値としてC等のプログラムが受け取る方法はありませんか?
99名無しさん@お腹いっぱい。:2009/10/11(日) 14:58:17 ID:ms13pzkK0
ExitApp,1 が、Cで言うところの exit(1) に相当する
100名無しさん@お腹いっぱい。:2009/10/11(日) 17:15:16 ID:3nElxR8C0
>>93
ありがとうございます。
101名無しさん@お腹いっぱい。:2009/10/12(月) 01:09:25 ID:oCexzZF20
多重起動できるアプリの各ウィンドウの判別ってどうすればいいんでしょうか?
ある動画プレーヤーで判別したいんですが、クラス名は同じだし、タイトル名も
再生ファイルごとに変わっちゃうので判別には使えない…
何か他に方法ありませんでしょうか
102名無しさん@お腹いっぱい。:2009/10/12(月) 02:44:35 ID:FCh1YpoN0
あるプレイヤーとか、複数の同一クラスのウィンドウから一つを特定して何をしたいかとか、
重要なことが書いてなくて何とも言えない。

強いて言えば、WinGet, list, List, ahk_class hogehoge で取得したリストの並びは
ウィンドウの重なり順のはず。
103名無しさん@お腹いっぱい。:2009/10/12(月) 06:38:29 ID:oCexzZF20
>>102
Saiなどのペイントソフトを使用中に資料としてプレーヤーを開いてる事があるのですが、
ペイントソフトがアクティブの時に右Winキーなどを押下してる間だけ一つ下のプレーヤーアプリを
アクティブにして早送り・巻き戻しなどの操作ができるようにしたいなと思ってます。
その際、一つ前のプレーヤーアプリのIDのようなものを変数に格納しておけばいいのかな、と思った次第で…

class名やタイトルバーでウィンドウを判別する方法しか知りませんで、
WinGetでとれる個別IDの類の存在を初めて知りました……ど初心者で申し訳ない。勉強になりました。

すみません、もう一つ質問を…
現在アクティブなアプリのウィンドウ並びで一つ下のアプリをWinActiveなどでアクティブ化する方法は
ありませんでしょうか?
ペイントソフトをアクティブにする直前に使っていたプレーヤー、画像ロダ、ブラウザなどをアクティブ化できれば
IDをいちいち格納・指定しなくてもいい気がしました。
104名無しさん@お腹いっぱい。:2009/10/12(月) 08:32:39 ID:Ky9AiqoyP
>>103
How to get the id of the next or previous window in Z order?
ttp://www.autohotkey.com/forum/topic35141.html
105名無しさん@お腹いっぱい。:2009/10/12(月) 11:38:35 ID:KwLzdXGx0
VistaでUAEオンにするとSendPlayが効かなくなる問題って
何か解決する方法無いんでしょうか?
106名無しさん@お腹いっぱい。:2009/10/12(月) 21:15:57 ID:WQdfTX8M0
>>101
ウィンドハンドルで
107名無しさん@お腹いっぱい。:2009/10/12(月) 23:36:17 ID:b3o6aJ5t0
ぶっちゃけ、Alt+Tabでいいんじゃないの。
(RWinないからLWinで書いてる)

LWin::
Send, !{Tab}
KeyWait, %A_ThisHotkey%
Send, !{Tab}
Return
108名無しさん@お腹いっぱい。:2009/10/13(火) 17:29:22 ID:oilpzN330
firefoxのアドオンの
「auto copy(テキスト選択で自動コピー、マウスホイールクリックでペースト)」が
大変便利なんですが、
autohotkeyを使用して、すべてのアプリケーションでこの機能を実現できますか?
109101:2009/10/13(火) 17:36:58 ID:9Du/ZfOf0
>>102,>>104,>>106-107
ご教示ありがとうございました!
最終的にシンプルかつ目的に合致した>>107のやり方に落ち着きました。お美事にございまする。
110名無しさん@お腹いっぱい。:2009/10/13(火) 22:54:45 ID:KYqq6xvI0
ある操作を自動化するのにスクリプトを組んでいるんですが
どっかで間違えているらしく正常に動かないのでゆっくり動かして
確かめたいんですが、各コマンドの間にsleepを挟む以外に方法って
ないでしょうか?
111名無しさん@お腹いっぱい。:2009/10/13(火) 23:29:07 ID:CfH5Rc5r0
やる内容によるなぁ。
変数に値が入っているかどうかなら、ListVars とか MsgBox などで変数内容が妥当かを見る。
Send コマンドでメニュー操作してるなら、アクセラレータキーを1個ずつ増やしてきちんと選択されているかを見る。
マウス操作などでは、マウス直下の座標とかクラスとか見たりする。
操作対象にきちんとフォーカスが当たっているかで、ControlGetFocus したりとかする。
場合によっては、Return とか Exit で処理をぶつ切りにするのも手だ。(処理中断後の状態で判断)

簡単なものなら一気に書いて実行でいいけど、1コマンドずつ実行結果が妥当かどうかを見るしかないと思う。
112名無しさん@お腹いっぱい。:2009/10/13(火) 23:31:03 ID:CfH5Rc5r0
というか、操作対象が無いとか、操作失敗した時に分かるしんで、ErrorLevel 活用するのがいいと思うよ。
113名無しさん@お腹いっぱい。:2009/10/14(水) 06:21:53 ID:2iV2XYo10
どうしてもわからなかったので質問させてください

例としてJaneを表示させたり非表示にさせたりするスクリプトです。

#Persistent
Menu, TRAY, add,hide,hide
Menu, TRAY, add,show,show
start:
loop
{
sleep,10000
winshow,Jane
}
hide:
winhide,Jane
goto,start
show:
winshow,Jane
goto,start

タスクトレイアイコンから右クリックで表示、非表示を何度か繰り返すと
その後トレイからの操作ができなくなるんですが、なぜでしょうか?
114名無しさん@お腹いっぱい。:2009/10/14(水) 08:51:11 ID:9+zp8QhyP
・Auto-executeセクション(start:以下のループ)が無限ループになってる
・各メニュー操作後goto,startで戻るから、メニューによって起動されたスレッドは永遠に終了しない

#MaxThreadsで指定しないとスレッドの最大数は10だから、
9回メニューを操作すると、起動時のスレッドを含めて最大値の10に達する

各メニューの処理は、goto,startではなく return で終了させる
Auto-executeセクションの処理の最後には明示的にreturnを書いて、他のホットキーラベルなどの処理に突入しないようにすべき

それからstart:の下の無限ループが少しひっかかるけど、
あくまで例だと思うので、きっとそこは何か意味があるんだろうね
115名無しさん@お腹いっぱい。:2009/10/14(水) 11:45:53 ID:3lK90bBz0
いろいろと間違ってたみたいですね。
ありがとうございました。
116名無しさん@お腹いっぱい。:2009/10/14(水) 17:26:51 ID:VKdtet290
対象の優先度を取得して条件に合わせて変更するというの作れないかなあ
ただ変更するだけの項目は見つけられたのだけど
117名無しさん@お腹いっぱい。:2009/10/14(水) 17:41:47 ID:9+zp8QhyP
>>116
プロセスの優先度?

GetPriority()
ttp://www.autohotkey.com/forum/post-80548.html#80548
118名無しさん@お腹いっぱい。:2009/10/14(水) 17:59:15 ID:VKdtet290
>>117
あったんだ
ありがとう
119名無しさん@お腹いっぱい。:2009/10/14(水) 19:05:00 ID:eZKSVy9Y0
質問です。
Autohotkeyスクリプトを複数常駐させる一括起動スクリプトを作っているのですが、
その中のいくつかを残して一括終了させるにはどうすればいいのでしょうか?
できれば、その常駐するスクリプトはコマンドラインで終了コマンドを受け取ってという方法を使わない方法で考えているのですが思いつきません。
ご教授下さい。
120名無しさん@お腹いっぱい。:2009/10/14(水) 19:57:03 ID:rR+p+5Gy0
色々やり方はあるね

1) メインウィンドウを閉じてしまう、残す側のスクリプトに仕込んで何らかのトリガで実行。
  終了させられる側は何もしない。
DetectHiddenWindows, On
WinClose, A.ahk ahk_class AutoHotkey
WinClose, B.ahk ahk_class AutoHotkey
WinClose, C.ahk ahk_class AutoHotkey

2) 一括終了対象のスクリプト全部で同一ホットキーで終了させるようにする
  ホットキーには ~ をつけて入力を奪わないようにする
  残す側は何もしない。

3) OnMessage と PostMessage で終了命令のやりとりをする
  両方に仕込みが必要。
121名無しさん@お腹いっぱい。:2009/10/14(水) 20:07:42 ID:VKdtet290
>>117
コピペレベルの能力じゃうまく使い方わからなくて挫折した
122名無しさん@お腹いっぱい。:2009/10/14(水) 20:50:24 ID:Sm/2sZS50
>>120
ありがとうございます。
ですが、表現言葉足らずです。ごめんなさい。
終了させる側のスクリプトに仕込まない方法を知りたかったのです。
>>2にある1 Hour Softwareをたくさん使っていまして、絵を描くときや文字を書くときなどそのときどきにそのとき必要なスクリプトを起動させときたいと思い立ったのです。
いくら便利だからといって全部常駐させるのはあまりに数が多いし、干渉してしまうのもあるので。
タイトルバー持つモノなら起動後のタイトルバーを記憶してで可能なのですが、
常駐しての水面下で動くモノだとどのようにして特定すればよいかわからないのです。
idやpidも試みたのですが、できたりできなかったりでした。
このような複数常駐する単体ソフトも珍しいので検索しても思うようなのが引っかかりませんでした。
123名無しさん@お腹いっぱい。:2009/10/14(水) 22:37:43 ID:rR+p+5Gy0
>>122 こんなのでいい?
#NoEnv
#NoTrayIcon
#SingleInstance, Force
DetectHiddenWindows, On
Gui, Add, ListView, Grid Checked w400 r10, Path|PID|hwnd
Gui, Add, Button,, &Close Selected
Gui, Add, Button, x+10 yp+0, &Refresh
Gui, Show,, Ahk Killer
Gosub, ButtonRefresh
Return
GuiClose:
 ExitApp
ButtonCloseSelected:
 row:=0
 While (row:=LV_GetNext(row, "C")) {
  LV_GetText(hwnd, row, 3)
  WinClose, ahk_id %hwnd%
 }
ButtonRefresh:
 Process,Exist
 MyPid:=ErrorLevel,LV_Delete()
 WinGet, list, List, ahk_class AutoHotkey
 Loop, % list
 {
  WinGetTitle, title, % "ahk_id " list%A_Index%
  WinGet, PID, PID, % "ahk_id " list%A_Index%
  If (pid!=MyPid)
   LV_Add("Check", RegExReplace(title, " - AutoHotkey v1(\.\d+)+(\.L\d+)*",""), PID, list%A_Index%)
 }
 LV_ModifyCol(1),LV_ModifyCol(2),LV_ModifyCol(3)
 Return
124名無しさん@お腹いっぱい。:2009/10/14(水) 22:59:10 ID:Pmlqip040
>>111
>>112
ありがとうございます。いろいろ方法があるのが分かったので
いろいろ試してみます。
125名無しさん@お腹いっぱい。:2009/10/14(水) 23:23:18 ID:vrTl6XIR0
>>123
すごい

WinGet, list, List, ahk_class AutoHotkey以降の列挙の仕方が目からうろこでした。
ほんとにありがとうございます。
126名無しさん@お腹いっぱい。:2009/10/15(木) 01:05:21 ID:NEBUo+kH0
特定のウィンドウを決められた位置で表示したいのですが
127名無しさん@お腹いっぱい。:2009/10/15(木) 01:30:42 ID:NEBUo+kH0
途中で送信してしまいました。すみません

特定のウィンドウを決められた位置で表示したいのですが
どういった方法が良いのか模索しています。

例えば Jane Style のビューアのウィンドウはデュアルディスプレイ環境で
サブの画面に表示させておいてもこれを閉じて開き直すとメインの方で
表示されてしまいます。いつもサブの方で開いておきたいという希望です。

Loop 内で WinWait でウィンドウが現れるのを待ち現れたら SetTimer を
仕掛けて 1秒おきに移動させるというスクリプトを作りました。
WinWaitClose でウィンドウがいなくなったらタイマーを
オフにするようにしました

動作は概ね期待通りなんですがウィンドウが現れた後 1秒ごとに
移動を実行しているのは無駄な処理であるような気がします。
ウィンドウが特定の場所にいるときは何もしないようにした方がよいかなと
思うのですがあるウィンドウの位置を知る方法ってありますか?
1秒おきに移動させるようなことをしておいても別に問題ないでしょうか?
128127:2009/10/15(木) 01:42:35 ID:NEBUo+kH0
127 に追加です。
サブの画面に表示されるようにしたいウィンドウは
他にも幾つかあります。Loop の中で WinWait で特定の
ウィンドウを待っているとそこから先に進まなくなります
そこで 1つのスクリプトの中で複数のループを同時に動かすことってできますか?
似たようなスクリプトを作って複数走らせるようにするしかないですかね
129名無しさん@お腹いっぱい。:2009/10/15(木) 01:48:49 ID:ougdSEPE0
ウィンドウが指定位置と指定サイズになければ移動するって関数を作って
それをタイマーで回すとかは?

多分もっといい方法はあると思うけど
130127:2009/10/15(木) 02:50:44 ID:NEBUo+kH0
ちょっと長くて申し訳ないのですがスクリプトを貼り付けます。
最初 >>127 は次のようにしていました。

#Persistent
Loop
{
WinWait, ahk_class TImageForm
SetTimer, move_jane_viewer, 1000
WinWaitClose, ahk_class TImageForm
SetTimer, move_jane_viewer, Off
}

move_jane_viewer:
WinMove, ahk_class TImageForm,, 1600, 0
return

これだとまずはループの最初で WinWait で止まりますが
他のウィンドウが現れたときはそちらも移動させたいので困っています
131127:2009/10/15(木) 02:52:39 ID:NEBUo+kH0
自分が考えた案では SetTimer は負の値にすると 1度だけ実行されると
あるので次のようにしてみました

#Persistent

SetTimer, move_jane_viewer, -1000
SetTimer, move_notepad, -1000

move_jane_viewer:
Loop
{
WinWait, ahk_class TImageForm
WinMove, ahk_class TImageForm,, 1600, 0
WinWaitClose, ahk_class TImageForm
}
return

move_notepad:
(上と同じで ahk_class Notepad とする)

期待に反してそれぞれのループが独立して動いてくれません
動かしてみると Notepad の WinWaitClose で止まってしまい
そのときに Jane のビューアを開き直してみても移動しません
これは「A5:「擬似マルチスレッド」です」が原因なのかなと思いますが
良い解決策が思いつかなくて相談しに来ました

ちなみにそもそも行いたいのはウィンドウが現れたときに特定の位置に
移動させたいのであって、ウィンドウが存在するときはいつも特定の位置に
あるようにしておきたいということではありません……
最悪それでも良いのですが無駄に移動するのも鬱陶しいなぁと思いました
132127:2009/10/15(木) 02:58:32 ID:NEBUo+kH0
>>129
調べてきました。WinGetPos ってのが使えそうですね!
ウィンドウが存在するか & 指定位置にあるかを確認して
必要なら移動して (その後何かを待たずにすぐ終わる) 関数を作り
それをタイマーで呼ぶというのは良さそうです
よく考えると WinWait で待たないといけない訳じゃないですね

タイマーの使い方をよく分かってない気がしました
勉強し直してきます。スレ汚しすみませn
133名無しさん@お腹いっぱい。:2009/10/15(木) 03:18:40 ID:y4RX1Uo50
>>128
>7のQ5参照
LoopからタイマーをON/OFFするのではなく、タイマを常にONにして
通常はチェックだけして抜けるようにするようにすればいい
大事なのはWaitやSleepなど時間のかかる処理を入れないこと。

Timer1:
  IfWinExist, ウィンドウ名
  {
    WinGetPos, X,Y,W,H
    If (ウィンドウポジションがサブディスプレイにいない時)
      WinMove 任意の位置へ移動
  }
return

あと、127の挙動だとメインディスプレイへの移動を常に禁止してるけど
起動時に一発だけ位置調整するのではだめなん?
それだったらアプリ呼んで自分はすぐ死ぬ起動用スクリプト作ればいい。

Run, hoge.exe
WinWait, hoge
WinMove 任意位置
ExitApp
134名無しさん@お腹いっぱい。:2009/10/15(木) 03:19:26 ID:y4RX1Uo50
すまんリロってなかった
135名無しさん@お腹いっぱい。:2009/10/15(木) 21:20:08 ID:HWcEPzTy0
カーソルを画面右隅に持ってきたら指定ウィンドウを右隅から出して
カーソルが領域から出たら右隅に隠して見えなくしたいんですが
カーソルが右隅にくるまで待つようなことできないでしょうか?
136名無しさん@お腹いっぱい。:2009/10/15(木) 21:33:43 ID:UkAD4uly0
タイマーとMouseGetPosでいけるでしょ
137名無しさん@お腹いっぱい。:2009/10/16(金) 00:13:53 ID:ArK3dZLp0
ポップアップメニュー(ahk_class #32768)のメニュー項目のテキストをどうにかして取得できないもんだろうか。
138名無しさん@お腹いっぱい。:2009/10/16(金) 02:12:00 ID:XZ2GC7uQ0
ただランダムに数を生成するだけではなく、一回生成した数は生成しない
または生成した数があったら、もう一度生成し直す繰り返しの文って
どう書けばいいんでしょうか?
どうやって生成した事があるかを確かめばいいのかが分かれば、
一歩進めると思うんですが
139名無しさん@お腹いっぱい。:2009/10/16(金) 02:47:11 ID:iSdv+YsB0
最初に作っちゃえばいいんじゃないの

Loop, 10
 Random_List .= A_Index "`n"

Sort, Random_List, Random

MsgBox, 乱数リスト`n--------`n%Random_List%

Loop, 11
{
 firstDelim:=InStr(Random_List, "`n")
 rnd := SubStr(Random_List, 1, firstDelim-1)
 StringTrimLeft, Random_List, Random_List, % firstDelim
 MsgBox, % A_Index "個目 : " rnd
}
140名無しさん@お腹いっぱい。:2009/10/16(金) 08:50:34 ID:k5KdAourP
141137:2009/10/17(土) 00:38:08 ID:yQ2wv/5r0
>>140
おぉ、ありがと。
これでメニューの誤爆を回避できそうだ。
142名無しさん@お腹いっぱい。:2009/10/19(月) 15:20:23 ID:npoxA9QJ0
ウィンドウ移動させる場合、瞬時にその座標に移動させるのではなく
マウスでドラッグしたときのように徐々にその座標に移動していくようにできませんか?
143名無しさん@お腹いっぱい。:2009/10/19(月) 15:33:52 ID:lwMUrJS40
firefoxで
RButton::Send,{Enter down}{Enter up}
ってやるとメニューが開いちゃうんだけどプロの皆さん何とかなりませんか?
144名無しさん@お腹いっぱい。:2009/10/19(月) 22:18:45 ID:x1GXSlED0
いちいち多重キー設定がめんどくさくて、
スペースキー1発とかでアプリ別に動作割り当てしたいんだが、

#IfWinActive ahk_class XXX
space::
Send,{○○}
return
#IfWinNotActive ahk_class XXX

とかで、全然ほかの動作に影響を与えず、とあるアプリの動作時だけ
1つのキー押下でアプリごとにいくらでも別動作できますね。
145名無しさん@お腹いっぱい。:2009/10/19(月) 22:27:13 ID:x1GXSlED0
こんな激しく便利なものがあるなんて、全然知らんかった。
アプリごとにいっちいちahkファイルまるごと置き換えてたわ。
146名無しさん@お腹いっぱい。:2009/10/19(月) 23:55:26 ID:T6G00cb60
ホットキーラベル内でIfWinActiveで分岐している方が補ほど建設的だ。
147名無しさん@お腹いっぱい。:2009/10/20(火) 04:04:48 ID:A9asdz6r0
タスクマネージャ見るとAHKが5個くらい起動してるときあるんですが
どういう原因が考えられますか?
148名無しさん@お腹いっぱい。:2009/10/20(火) 09:14:41 ID:BEtwzhZE0
>>147
俺もその現象に悩んでる。
スタートメニューからメモ帳を2つ起動したら、
タスクマネージャにnotepad.exeが2個あるんだよね…
なんでだろ…
149名無しさん@お腹いっぱい。:2009/10/20(火) 09:34:28 ID:s3Ag/ZIYP
俺のところもペイントを2つ起動したら、mspaint.exeが2つできる
不思議だな
150名無しさん@お腹いっぱい。:2009/10/20(火) 15:12:09 ID:WSGprG6f0
Hotstringの終了文字をAlt+Enterに限定したいんだが
どう書いたらよいだろうか。

#Hotstring EndChars NewChars!`n

この書き方だと'!'が修飾キーとはならず、'!'と'Enter'でそれぞれ発動してしまう。
151名無しさん@お腹いっぱい。:2009/10/20(火) 22:36:01 ID:mzwYYemS0
150だが、*オプションつけとけば何ら問題が生じない事に気づいたよ。
スレ汚しスマソ
152名無しさん@お腹いっぱい。:2009/10/21(水) 23:24:41 ID:d9c5mufK0
ファイルを開く/閉じるダイアログ上で ホットキーで 新しいフォルダ作成しようと思ったら
右上のアイコンのクリックエミュするしかないのかな。
エクスプローラ上では↓でできているんだけど

~^K::
  WinGetClass,cls,A
  if (cls=CabinetWClass || cls=ExploreWClass)
    Send,!fwf
return
153名無しさん@お腹いっぱい。:2009/10/21(水) 23:42:03 ID:Kw4MAH7e0
>>152
WM_COMMAND で何とかするのもありかな。コマンドID は inspect_toolbar_ids.ahk で調べる。

#IfWinActive, ahk_class #32770, FolderView
^k::
 ControlGet, hwnd, HWND,, ToolbarWindow321
 PostMessage, 0x111, 40962, hwnd
 Return
154名無しさん@お腹いっぱい。:2009/10/22(木) 00:28:24 ID:eVhNA7dt0
>>153
うおお dです。すごく楽になった。
155名無しさん@お腹いっぱい。:2009/10/22(木) 00:36:53 ID:/4I3lKc20
AutoHotkeyのコンパイルしたスクリプトを早く動かすにはどうすればどうすればいいですか?
priority や SetKeyDelayの設定値をいじることは分かるのですが

これ以外にコンパイル時のオプションや裏技などがあれば知りたいです
コンパイルには Compile_AHK II を使っています
http://www.autohotkey.com/forum/topic22975.html
156名無しさん@お腹いっぱい。:2009/10/22(木) 01:00:38 ID:dvjmu4140
裏技ってw

スクリプトの通る行数(Loopを展開した分も含める)が多い場合は、
SetBatchLinesで自動挿入されるスリープの間隔と長さを変更すると、
かなり実行速度は変わる。
〜Delay も大量にウィンドウやキー・マウス操作をするなら短くした方が速くなる。

ファイル操作とかだけで、AHKだけで完結するならスリープの間隔は無くても構わないけど、
他アプリを操作す場合、息つく暇もなくマンドを送ってもそれを処理する暇がないかもしれない。
157名無しさん@お腹いっぱい。:2009/10/22(木) 01:12:44 ID:/4I3lKc20
>>156
SetBatchLinesの設定を忘れていました
ありがとうございます
158名無しさん@お腹いっぱい。:2009/10/22(木) 09:11:36 ID:0tm34foAP
その他の定番では、#NoEnv や ListLines Off なんかもある
ttp://www.autohotkey.com/docs/misc/Performance.htm

ちなみにコンパイルしても実行速度そのものは全く変わらない
ttp://www.autohotkey.com/docs/Scripts.htm#ahk2exe
むしろ、起動時に解凍する処理が入ってしまうので、
AHKが既に入ってるPCで実行するなら、コンパイルするメリットは無いと思う
159名無しさん@お腹いっぱい。:2009/10/22(木) 15:19:18 ID:hKXTn6IM0
そういえば、ヒアドキュメントつかえば >>6 の Q1 は割と簡単に回避できるよな。
`nとか使えないけど

MsgBox,
(LTrim `
 〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔
)
160名無しさん@お腹いっぱい。:2009/10/23(金) 09:42:23 ID:59IK6ISe0
便乗ですが、>>140 で取得したコンテキストメニューで、全項目の取得はできました。

この取得をさらに拡張して、取得中にsettimerで定期巡回して、
いまフォーカスが合っている(選択されている)メニュー項目を取得する方法ってありますか?

やりたい動作は、たとえば2ch専ブラJaneStyle等の書き込み欄でCtrl+Spaceを押すと
AA呼び出し が出ますが、これに近いインターフェースを汎用的に作りたいです。

コンテキストメニューの項目にカーソルを合わせると、その項目に合った本文を
コンテキストメニューの右側にtooltipsで表示させたいです。

tooltipsで表示する部分は作り終えましたが、コンテキストメニューの
フォーカスを取得する方法で難儀しています。

AHKのMenuコマンドでメニュー選択待ち中はスクリプトがストップするようなので、
別プロセスで監視&表示支援を行う方法で考えています。
161名無しさん@お腹いっぱい。:2009/10/23(金) 14:04:53 ID:4j+1qnPM0
自前でメニュー出して、更にタイマーでツールチップ出すってことなら、その方式が無理。
自前のメニュー表示中はホットキーとかタイマー動かないから。

SetTimer, Timer1, On
Menu, X, Add, ああああ, Dummy
Menu, X, Add, いいいい, Dummy
Return
^Space::Menu, X, Show
Timer1:
 Tooltip, %A_Now%
Dummy:
 Return
162名無しさん@お腹いっぱい。:2009/10/23(金) 14:09:43 ID:4j+1qnPM0
↑のが面倒なんで、俺はクリップボード履歴とか入力補助はツールチップでやってる。
これだと他にツールチップ出せないけどw

#NoEnv
SendMode Input
text_1 = ああああああああああああ
text_2 = いいい`n`nいいいいいいいいいいい
text_3 = ううううう`nううううううう`nううううううう
text_count = 3
Process, Exist
GroupAdd, MyTips, ahk_class tooltips_class32

^Space::
 text_no:=1
 Goto, ShowTip
#IfWinExist, ahk_group MyTips
Up::
 text_no := (text_no==1) ? text_count : text_no-1
 Goto, ShowTip
Down::
 text_no := (text_no>=text_count) ? 1 : text_no+1
ShowTip:
 Tooltip, % text_%text_no%, %A_CaretX%, %A_CaretY%, 1
 Return
Enter::
 Send, % SendConv(text_%text_no%)
Esc::
HideTip:
 Tooltip,,,,1
 Return
163名無しさん@お腹いっぱい。:2009/10/24(土) 00:18:28 ID:NN72tQIY0
APIで自力でメニュー書けばなんとかなるんじゃなかろうか>自前でメニュー表示
http://www.winapi-database.com/Window/Menu/index.html


そういえば昔、JaneのAAMenu.txtをAHKでメニュー化して好きなとこに貼りつけるスクリプト作ったなぁ
複数行のツールチップは結局諦めたが。
164名無しさん@お腹いっぱい。:2009/10/24(土) 19:54:36 ID:dcICKd/J0
AutoHotkey_L - Revision 33 - October 3, 2009

* Fixed: Local variables were not automatically freed for functions which return objects or pure numbers.
* Fixed: Two separate reference-counting errors related to ternary operator and Object().
* Fixed: If a string returned by a scripted object function was assigned directly to a variable, the variable's length was set incorrectly.
* Fixed: If the last operation in an expression retrieved a string from a temporary object, the object and string were freed prematurely.
* Fixed: Numeric strings with special formatting were not preserved when returned from a function via a variable or passed to a recursive function.
* Fixed: If the final result of an expression (other than for Return) is an object, correctly yield an empty string instead of silently aborting the thread.
* Fixed: __Delete meta-functions sometimes overwrote temporary values in the deref buffer.
* Added: An address retrieved via &object may be cast back into an object reference by using Object(address).
165名無しさん@お腹いっぱい。:2009/10/24(土) 19:55:29 ID:dcICKd/J0
AutoHotkey_L - Revision 34 - October 24, 2009

* Changed: Setting a value within an object to an empty string now stores the empty string rather than removing the key-value pair from the object. _Remove can still be used to completely remove key-value pairs.
* Changed: Command names must be terminated with a space, tab or comma. The following characters no longer bypass this requirement: <>:+-*/!~&|^[]. For instance, syntax errors such as MsgBox< foo and If!foo are now caught at load-time.
* Fixed: Return now properly handles expressions which result in a variable containing an object. For instance, Return x:=y, Return (x), Return x,... and similar should work now (Return x already worked).
* Fixed: Multi-parameter get/set did not correctly support meta-functions for multiple objects (such as for x and x[y] in the expression x[y,z]).
* Fixed: Cascading object-assignments such as the x[y]:=z in r:=x[y]:=z could not yield numbers or objects - broken by L33.
* Fixed: x._Remove(y) crashed the script or removed the wrong item if x did not contain y.
* Fixed: x.=y, if x.y=... and similar. May affect other expressions.
* Fixed: Standalone ternary expressions no longer requires spaces. For instance, x? F(1) : F(2) is now allowed.
* Debugger: On script exit, disconnect debugger *after* releasing objects to allow debugging of __Delete handlers.

大きな変更はないね。
>>67 は Rev.33 で直ったようだ
166名無しさん@お腹いっぱい。:2009/10/24(土) 20:01:40 ID:dcICKd/J0
と思ったけど、 If(a=b) みたいに分かち書きしてないのが結構跳ねられる。
管理人さんのは結構あるなぁ・・・。まぁ一括置換でやるからいいけど。
167名無しさん@お腹いっぱい。:2009/10/24(土) 23:30:51 ID:cFC3Nvri0
>>166
> If(a=b) みたいに分かち書きしてない
ってどういうこと?
ここで言う分かち書きって
If (a=b)

If(a = b)
のどっちですか
168名無しさん@お腹いっぱい。:2009/10/24(土) 23:44:04 ID:dcICKd/J0
>>167
前者。存在しない関数を呼ぶな!って怒られる。

一応断っておくけど、本家じゃなくてLexikos版のほうね。
169名無しさん@お腹いっぱい。:2009/10/25(日) 01:23:24 ID:uz1j+Lb30
あーなるほど、今まで>>167の下みたいに書いてたけどそういう話があったのか
170名無しさん@お腹いっぱい。:2009/10/25(日) 13:53:52 ID:eLBFyi+O0
いっちいちややこしい複数キーバインドでアプリごとに使い分けしてたが、
アプリ単位で設定できるんだなー
全然しらなかった。メインのAutohotkeyファイルがクソ長くなったり、
どこに何書いたか分からなくなったり、重複したり、実にアホくさいことしてた。

;;;;メモ帳開始;;;;;;;;;
#IfWinActive ahk_class Notepad
#Include メモ帳.ahk
#IfWinNotActive ahk_class Notepad
;;;;メモ帳終わり;;;;;;;

こんだけで
F1::とか単純なキーをアプリごとにいくらでも別挙動にして使えるだな。
アプリ別にアホみたいに割り当てできる>>かつahkファイルが無駄に長くならない。
なんて知らんかった。ifでアプリ別分岐とかもいらねーじゃん。
もっと速くおしえてくれよ。
171名無しさん@お腹いっぱい。:2009/10/25(日) 14:08:25 ID:O7/Dl8+40
>>170
HAHAHA!…俺も知らなかったorz
172名無しさん@お腹いっぱい。:2009/10/25(日) 14:41:39 ID:XH3nm//b0
>>170
それって本家版?lexikos版?
173160:2009/10/25(日) 15:40:17 ID:iXgpRWpO0
>>160のポップアップメニュー拡張の件です。

>>161-162
おっしゃるとおり同一スクリプトの別スレッドじゃ無理そうなので、
AHKそのものを別スレッドで稼働させる方法で考えています。
ただ、>>163のAPI関連は理解の範囲を超えてしまうので、代案はないか

・・・と悩んでいたところ、AHK本家サイトで同じ悩みを解決した先駆者がいました!

Need Help to add MenuitemID to dynamic menuitem tooltip
http://www.autohotkey.com/forum/topic48734.html

提示されたサンプルコードで、予定通りの動作をしました。
これをベースに実装してみます。
174160:2009/10/25(日) 16:22:01 ID:bbIN2Plw0
と思って自前で組んだAHKポップアップメニューを読もうとしたら、
IDは読めるものの、文字列が「-1」になってしまって読めませんでした。

余計なカスタマイズが原因かと思って、以下の最小構成でテストしましたが
AHKが出すポップアップメニューは、このままではダメそうです。

たとえばこのスクリプトで

#persistent
#SingleInstance FORCE
Menu, test, add, Item1, MenuHandler
Menu, test,show
return
MenuHandler:
MsgBox You selected %A_ThisMenuItem% from menu %A_ThisMenu%
return

フォーカスを合わせて選択確定前に「Item1」という文字列を、別PIDで実行するAHKで
抜き取りたいのですが、どのへんに手を入れれば読めるようになりそうでしょうか。

なお、>>173でリンクを貼ったスクリプトで、ExplorerやIEのポップアップメニューは
IDも文字列も、選択中の文字列がリアルタイムに全部読めています。
175名無しさん@お腹いっぱい。:2009/10/25(日) 20:10:54 ID:GdG1LF240
COM.ahk・vbs使わずに管理人さんのActiveXでTTSしたい
ttp://lukewarm.s101.xrea.com/test/read.cgi/bbs/1146398137/39
声変えるのって
inv(sapi, "Voice=", inv(inv(sapi, "GetVoices", "name = Microsoft Mary"), "Item", 0))
じゃだめですか?
176名無しさん@お腹いっぱい。:2009/10/26(月) 10:46:41 ID:aL7f9Ydj0
Shiftきーを単独で押した時の動作を割り当てたいのですが
どのように条件を書けばいいですか?
デフォルトのShiftキー+各キーの機能は殺さないままにしたいです。
177名無しさん@お腹いっぱい。:2009/10/26(月) 13:04:59 ID:yJPcjUFO0
こんな感じ?

#NoEnv
~Shift::
 AnyKeyPress:=0
 KeyHook(true, 0xA0)
 KeyWait, vkA0
 KeyHook(false)
 If (!AnyKeyPress)
  Send, {Space}
 Return
KeyHook(enable, ignoreVKey="") {
 static hModule, hKeybordLL, hHook, keyInfo:="0000"
 If (!hKeybordLL)
  hKeybordLL:=RegisterCallback("KeybordLL", "", 3, &keyInfo), hModule:=DllCall("kernel32.dll\GetModuleHandle", "UInt",0, "UInt")
 If (!hHook && enable) {
  NumPut(ignoreVKey, keyInfo, 0, "Int")
  Return (hHook:=DllCall("user32.dll\SetWindowsHookEx", "Int",0x0D, "UInt",hKeybordLL, "UInt",hModule, "UInt",0, "Int"))>0
 } Else If DllCall("user32.dll\UnhookWindowsHookEx", "UInt",hHook, "Int") && !(hHook:=0)
  Return true
}
KeybordLL(nCode, wParam, lParam) {
 global AnyKeyPress
 vk:=NumGet(lParam+0, 0, 4), ignoreVKey:=NumGet(A_EventInfo+0, 0, "Int"), AnyKeyPress |= (vk != ignoreVKey)
 Return (wParam==0x100 && vk==ignoreVKey) ? 1 : DllCall("user32.dll\CallNextHookEx", "UInt",0, "Int",nCode, "UInt",wParam, "UInt",lParam, "Int")
}

キーフック使わないで、任意のキーが押されたかどうかを判定する方法ってあるのかな。
178176:2009/10/26(月) 13:17:47 ID:aL7f9Ydj0
>>177
おお〜すごい!ありがとうございます。使わせてもらいます。
これだけ沢山スクリプトを書かないと実現できないんですね。
どうりで自分みたいな素人が試行錯誤してもできなかったわけだ。
179名無しさん@お腹いっぱい。:2009/10/26(月) 13:40:19 ID:E9pqProa0
>>177
横レスで済みませんが
> KeyHook(true, 0xA0)
の0xA0って具体的に何のキーですか?
VKeyの値のようですが……
180名無しさん@お腹いっぱい。:2009/10/26(月) 15:41:19 ID:yJPcjUFO0
>>179
キーフックを使って何かキーをおしたらグローバル変数 AnyKeyPress をTRUE(=1)にするんだけど、
今回のように特定のキーを押している間の場合はキーリピートが発生したりするので、
そいつを無視するために無視するVKeyを指定しろって事。
Shift の VKey は 0xA0 なんでそう指定した。
他のキーでやるならメインウィンドウのメニュー>View>KeyHistory で調べる。
181名無しさん@お腹いっぱい。:2009/10/27(火) 01:56:58 ID:2TFfB5VE0
OSはXPで、AHKスクリプトの動作状況の把握として、sounbeepでPCの内蔵ビープを鳴らすのが
好きなんだけど、VISTAとWin7は、サウンドチップのデコーダ経由で出てしまうね。

例:
soundbeep,2000,100
soundbeep,1000,100

それでも、その音がOS側で完全にエミュレートできてれば何も問題が無いのだけど、
常に0.2秒ほど遅れて(頭切れで)出てくることと、音長や音程もズレてる。

しょうがないからDOS用のビープを鳴らすソフトを探してきて使ってみたら、
なんと、AHKと同じズレた音が出てきた。

どうやらVista以降では、OSそのものがBEEP音を鳴らす機能を廃止してしまったようで。
なにかうまい回避策ないでしょうか。
182名無しさん@お腹いっぱい。:2009/10/27(火) 11:36:40 ID:JUNZbM8m0
スクリプトのショートカットをクイック起動に登録してメディアプレイヤーの制御などに使っているのですが
押すたびにラグがあるので本体を常駐させたいのですが出来ますか?
183名無しさん@お腹いっぱい。:2009/10/27(火) 15:22:34 ID:4akZ5m1v0
出来るよ。
常駐させてキーやマウスで機能実行するなら、ホットキーラベルを追加するだけでいい。
多分1行追加でいける。
184名無しさん@お腹いっぱい。:2009/10/28(水) 04:52:13 ID:gMeOGTkK0
>>183
すみません、ググってもやり方がわかりませんでした。
exe化するとクイック起動のボタンの数だけタスクトレイのアイコンが出来そうなのですが・・・
185名無しさん@お腹いっぱい。:2009/10/28(水) 05:38:45 ID:T9f31LPF0
こんな単純なことを、これだけヒントもらってわかんないなら、
もうめんどくさいから具体的にスクリプトをここに書いてみなよ。
だれかが改変してくれるから。
186名無しさん@お腹いっぱい。:2009/10/28(水) 05:46:55 ID:gMeOGTkK0
>>185
すいません。

デスクトップを表示するボタンとして
>Send,#m

マイコンピュータを表示するボタンとして
>Run,Shell:DriveFolder

現在は上記の様な一行のスクリプトをクイック起動フォルダに入れて
クイック起動ツールバーから押せるようにしています。
上記の二つのボタンは連打することはないので気にならないのですが
音量調節ボタンなどは押す度に起動と終了を繰り返すためラグが気になってしまいます。
187名無しさん@お腹いっぱい。:2009/10/28(水) 10:26:05 ID:MaTjc0Rz0
キーアクションじゃなくてマウスで操作するためのショートカットアイコンが欲しいんだよね?
上2点についてはわざわさAHK通す意味ないでしょ。

クイック起動バーに [デスクトップの表示] アイコンを再登録する方法
http://support.microsoft.com/kb/190355/ja

マイコンピュータを表示
エクスプローラ上からマイコンピュータのアイコンつかんで
右ドラッグでクイック起動バーに持ってって離す→ショートカットをここに作成


ボリュームコントロールは SNDVOL32.EXE のショートカットでも突っ込んどくか
コマンドラインでボリューム+-できる軽いフリーソフトでも探したら?
どっちにしてもAHKから起動する必要ないから。Windows標準のショートカット.lnk作れ
http://colspan.net/blog/2005/08/09105655.html
http://www.gigafree.net/media/volume/
188名無しさん@お腹いっぱい。:2009/10/28(水) 12:34:33 ID:ukOud2KQ0
親切だな
久々2chで心がなごんだ
189名無しさん@お腹いっぱい。:2009/10/28(水) 19:42:06 ID:lHFn5A3+0
このスレには、環境改善に積極的で優秀な人材がそろってる
190名無しさん@お腹いっぱい。:2009/10/28(水) 20:16:23 ID:7JfOaujw0
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 35 - October 25, 2009
* Fixed: Standalone expressions beginning with two or more "dots", such as x.y.z(). (Broken by L34.) Note that '(' or '[' or ':=' is still required.

小さなバグfixのみ
191名無しさん@お腹いっぱい。:2009/10/28(水) 21:04:02 ID:5J68dJud0
クリップボードを介さない文字列の貼り付けをしたいのですがどうやっていいのかわかりません
ご教授お願いします
192名無しさん@お腹いっぱい。:2009/10/28(水) 21:18:14 ID:exkyDATA0
>>191
・いっきにsendする
・loopで1文字づつsendする
・クリップボードの内容を退避しておき、目的のものを貼り付けて、最初に退避したものを戻す

いろいろあるさ
193名無しさん@お腹いっぱい。:2009/10/28(水) 21:24:51 ID:7JfOaujw0
SendMode, Input
#1::Send, % SendConv("ほげ`nホゲ`nHoge")
SendConv(str) {
 Loop, PARSE, str
 {
  If isKanji && RegExMatch(A_LoopField, "[\x40-\x7E\x80-\xFC]")
   isKanji := false, keyStroke .= "{ASC " . (Asc(lastChar)<<8|Asc(A_LoopField)) . "}"
  else If RegExMatch(A_LoopField, "[\x81-\x9F\xE0-\xFC]")
   isKanji := true, lastChar := A_LoopField
  else If RegExMatch(A_LoopField, "[#!\+\^\{\}]")
   keyStroke .= "{" . A_LoopField . "}"
  else If (A_LoopField="`n")
   keyStroke .= "{Enter}"
  else
   keyStroke .= A_LoopField
 }
 return keyStroke
}
194名無しさん@お腹いっぱい。:2009/10/28(水) 21:34:39 ID:5J68dJud0
ありがとうございます
修行不足でした
まだ読み解けてませんがモノします
195名無しさん@お腹いっぱい。:2009/10/29(木) 00:06:28 ID:HuOzJKa70
http://www.aerotap.net/
これとahkが連携出来たら面白そう
196名無しさん@お腹いっぱい。:2009/10/29(木) 01:08:48 ID:wPINOb6a0
トラックポイントの弄りすぎで中指人差し指の筋痛めてる者としてはちょっと気になるな
Webカメラ持ってないんで試せないが反応速度度かどうなんだろう
197名無しさん@お腹いっぱい。:2009/10/29(木) 02:01:19 ID:8h3JEcxW0
#persistent
sum:=1
loop,
{
inputbox,vx
sum:=vx+sum
}
vy:=(sum-1)
vy/=25000
msgbox,%vy%
というスクリプトのloopからenterキー連打で抜けて、その後の命令に移らせたいんですが
どうすればいいでしょうか?
198名無しさん@お腹いっぱい。:2009/10/29(木) 02:30:19 ID:gE/hohW30
Enter連打ってのが、何も入力しない場合にループ終了、ってのなら↓みたいな感じ?

sum := 0
Loop
{
 InputBox, value, Title, Sum = %sum%,,200,120
 If (ErrorLevel > 0 || value == "")
  Break
 sum += value
}
MsgBox, Sum = %sum%

----

#Persistent が何で付いているんだろう・・・
199名無しさん@お腹いっぱい。:2009/10/29(木) 02:56:24 ID:9im39Kx40
>>198
inputboxのウィンドウが出てる時に、何らかの操作をすればloopから抜けられればいいだけでした。
enterだと入力あとの決定と被りますね。
特に考えずに付けてましたが、今のこれだけだと不要ですね> #〜
200名無しさん@お腹いっぱい。:2009/10/30(金) 22:55:37 ID:ZbkvDVcHO
規制くらっているのでケータイから失礼します

http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1095764510/264
に書き込んだ者です

あれからオプションいじったり関数いじったりしてもさっぱり機能しません
書いてあるようにregファイルの中身を取り出したいのです
教えて下さい
201名無しさん@お腹いっぱい。:2009/11/01(日) 22:20:21 ID:XW0mys910
もう参加してる人いるかもだけど

UNICODE version AutoHotkey (needs your tests and helps)
ttp://www.autohotkey.com/forum/topic50485.html
> I just translated the source codes of AutoHotkey to support Unicode, and it can be built now.
> However, it might be considered to be problematic and need your helps.

> Known issues (discussions required):
> 1. Transform, Unicode, * has been disable in the meantime.
>   A more complete charset conversion routine has been planed.
> 2. File IO. I'd like to know how FileRead, FileReadLine,
>   FileAppend should be implemented.
202名無しさん@お腹いっぱい。:2009/11/01(日) 23:05:13 ID:BlFNW9gf0
これはダメ文字がなくなると解釈していいの?
203名無しさん@お腹いっぱい。:2009/11/01(日) 23:52:32 ID:Oh0snGPMi
ちょっと試してみた。

■ `系統(>>6 Q&A1)
・ 直書きでおk。(ソースファイルがUnicodeだから当然か)
■ \系統(>>6 Q&A2下段)も
・ A_ScriptDir, A_ScriptNameなどの変数は0x5cを含んでいても正常動作。
・ SplitPath は0x5cを含んでいても正常動作。

■ その他
・ StrLen, SubStr, はキャラ単位でやる
・ ListVars に表示されるのはキャラ単位の長さ
・ VerSetCapacity はバイト単位。
・ NumPut/NumGetはバイト単位で動いているように見える。
・ (重要) クリップボードへの代入は文字化けする

>>6 の諸問題は解決できると思う。
204名無しさん@お腹いっぱい。:2009/11/01(日) 23:57:49 ID:+f3PnfL+0
>>203
おお、これはかなりの神更新かも。

A_LoopfilefullpathとかSplitPathを使うと正しく処理できず、
抜いたファイル名をifexistでいちいち確認して例外処理面倒だったが、
ようやく解決しそうだ
205202:2009/11/02(月) 00:11:38 ID:1jfL0zxP0
くそっ、規制解除されてたのか。携帯で入力面倒だったw

>>203 の補足
・ Loop, PARSE の区切り文字なしはキャラ単位。「\」などを区切り文字にしても大丈夫。
・ Loop, (files) も正常動作。 A_LoopFileName 等もおk。
・ クリップボードの件は、内部コードのUTF16LEのデータをCP932のデータとしてクリップボードに渡しているっぽい。
 例) Clipboard = あいうえお ; u3042, u3044, u3046, u3048, u304A
   で貼り付けると 「B0D0F0H0J0」になってる (0x42 0x30 0x44 0x30 0x46 0x30 0x48 0x30 0x4a 0x30)
206名無しさん@お腹いっぱい。:2009/11/02(月) 00:19:53 ID:g9KGsVdb0
あれ、 >>201 のは規制に巻き込まれて書きこめずにいた頃のだからちょっと古いね。

今の
Known issues (discussions required):


 1. Transform, Unicode, * has been disabled in the meantime. Use "Transfrom, FromCodePage|ToCodePage" instead.
 2. "AStr" data type can not receive the changes of DllCall().

になってますね。
他になにかあれば今のうち参加した方がいいんでしょうねぇ……。 

英語できる方々 〜
207名無しさん@お腹いっぱい。:2009/11/02(月) 13:21:11 ID:Z///OhQg0
A_LoopFileFullPath や A_ScriptDir は現状のでも大丈夫なはずだけど。
駄目なのは SplitPath や A_LoopFileDir、A_LoopFileName あたり

UNICODE版だとRegEx周りも対応されるのかな
もういちいち頭に [^\x80-\x9F\xE0-\xFC] とか付けなくても良くなるのだろうか。
208名無しさん@お腹いっぱい。:2009/11/03(火) 03:12:06 ID:QG8QRF+K0
test
209名無しさん@お腹いっぱい。:2009/11/03(火) 15:26:49 ID:aCAqg/RM0
私はcに近い形で書いているが、
autohotkeyのコーディング規則はどうしてる?
210名無しさん@お腹いっぱい。:2009/11/03(火) 15:56:39 ID:svIYH7Vp0
>>209
参考までにサンプルを書いてみてもらえると面白いかも。
人それぞれ違いはあると思うが、俺はDOSのバッチから以降組なので1行1命令を徹底
211名無しさん@お腹いっぱい。:2009/11/03(火) 16:08:46 ID:CXVHGrFd0
アプリを再起動するAutoHotKeyの関数を書いてみたんですが、上手くいかんとです…
2chブラウザのJaneとか終了が重いアプリだと、終了はするんですが再起動してくれなす。
うまい書き方ないでしょうか?

;;; restart app
RestartActiveApp()
{
  WinGet, name,ProcessName,A
  WinGet, pid,PID,A
  FullPath :=GetModuleFileNameEx(pid)
  WinClose , A
  WinWaitClose,  A
  ;Process, Close,%pid%
  Run,%FullPath%
  ShowSplashText("restart @ " . name)
}

;;; show splash text
ShowSplashText(Text, Time = 600)
{
  SplashTextOn,,, %Text%
  Sleep, %Time%
  SplashTextOff
}

(続く)
212名無しさん@お腹いっぱい。:2009/11/03(火) 16:09:27 ID:CXVHGrFd0
(続いた)

GetModuleFileNameEx(ProcessID)  ; modified version of shimanov's function
{
  ; #define PROCESS_VM_READ           (0x0010)
  ; #define PROCESS_QUERY_INFORMATION (0x0400)
  hProcess := DllCall( "OpenProcess", "UInt", 0x10|0x400, "Int", False, "UInt", ProcessID)
  if (ErrorLevel or hProcess = 0)
    Return
  FileNameSize := 260
  VarSetCapacity(ModuleFileName, FileNameSize, 0)
  CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
  DllCall("CloseHandle", hProcess)
  Return ModuleFileName
}

使用例:

!^r::
  RestartActiveApp()
  return

みたいに使います。

終わり
213名無しさん@お腹いっぱい。:2009/11/03(火) 16:14:30 ID:XAJ743sY0
Janeとかは、ウインドウが消滅しても、裏でいろいろ処理してて
20秒後くらいに終わる場合がある。
なのでWinwaitcloseで息災起動するんじゃなくて
process,existで監視して、かつ数秒時間を置けば問題ないかと

俺がそういう関数を作るなら、1分1秒急ぐ仕事じゃなければ
processが居なくなった後もsleep,3000とか適当にはさんで
どんなアプリでも正常に動くように安全運転するようにしてる
214名無しさん@お腹いっぱい。:2009/11/03(火) 16:15:57 ID:XAJ743sY0
× 息災起動
○ 即、再起動

win7IMEの馬鹿野郎
215名無しさん@お腹いっぱい。:2009/11/03(火) 16:56:59 ID:ScOpU5nY0
Process ならWaitCloseがあるじゃまいか
216211:2009/11/03(火) 17:40:54 ID:CXVHGrFd0
>>213
なるほど…メインウインドウ終了しても、プロセスが残っているせいなんですね。

>>215
それだ!
Processは試したのに、マニュアルちゃんと読んでなかったwww WaitCloseあったのか

これで今の所、Janeの再起動が上手く行くようになりました。

;;; restart app
RestartActiveApp()
{
  WinGet, name,ProcessName,A
  WinGet, pid,PID,A
  FullPath :=GetModuleFileNameEx(pid)
  WinClose , A
  ;WinWaitClose,  A
  Process, WaitClose,%pid%
  Run,%FullPath%
  ShowSplashText("restart @ " . name)
}

起動時のコマンドライン引数は無視しているとか、細かい不都合がありますが、
どうしても困った時に対処することにます。

ありがとうございました!
217名無しさん@お腹いっぱい。:2009/11/03(火) 17:53:45 ID:J1hB14beP
流行らせるページのマウスジェスチャに、引数を取得する処理があった記憶
218211:2009/11/03(火) 18:28:18 ID:CXVHGrFd0
少しつまりました。

Firefoxの再起動はFirefoxアドオンのQuick Restart(ショートカットCtrl+Alt+R)を使いたいのですが、
Firefoxの場合だけ、グローバルのCtrl+Alt+Rを無視してウインドウにCtrl+Alt+Rを送るにはどうしたものでしょうか?

#IfWinActive, Mozilla Firefox ahk_class MozillaUIWindowClass
!^r::Send, !^r
#IfWinActive

だと、無限ループするし、
!^r::!^r
だと、グローバルのCtrl+Alt+Rが反応してしまいます orz

このような場合どうしたものでしょうか?

>>217
MG_CommandLine(pid=0)
ですね。今度試してみます。
219名無しさん@お腹いっぱい。:2009/11/03(火) 18:38:20 ID:PQt/JUGH0
自分の「閉じて開きなおす」はこんな感じ
Path2_ProcessExeNameNT()は GetModuleFileNameEx() と同内容
Janeのリスタート率が異常に高いw

restart:
  WinGet, PID, PID, A
  dir := Path_RemoveFileSpec(Path2_ProcessExeNameNT(PID))
  cmd := Path2_GetCommandLine(PID)
  WinClose,ahk_id %hWnd%,,120000
  DetectHiddenWindows,ON
  Process,Exist,%PID%
  If (ErrorLevel) && !WinExist("ahk_id " hWnd) {
    WinGet,l,List,ahk_pid %PID%
    Loop,%l%
      WinClose, ahk_id l%A_index%,,60000
  }
  Process,WaitClose,%PID%
  Run,% cmd, % dir
return

;  フルパス名からディレクトリを取出す
Path_RemoveFileSpec(path)  {
  VarSetCapacity(t,260,0)
  DllCall("msvcrt.dll\_mbscpy",UInt,&t,Str,path)
  DllCall("SHLWAPI.DLL\PathRemoveFileSpecA", Str, t)
  return t
}
220名無しさん@お腹いっぱい。:2009/11/03(火) 18:38:29 ID:PQt/JUGH0
; コマンドラインを取得 MouseGesture2 MG_CommandLine()改
Path2_GetCommandLine(pid=0){
  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)
  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
}
221名無しさん@お腹いっぱい。:2009/11/03(火) 18:45:33 ID:PQt/JUGH0
>>218
リロードしてなかった
再帰イベント防止なら #UseHookか、$を使う
222211:2009/11/03(火) 18:57:24 ID:CXVHGrFd0
>>218の件ですが、
ウインドウに直接送ればいいか、ということで、
!^r::ControlSend,, !^r
としたら上手くいきました。

また、>>221 のように、
グローバルなキー定義を$で定義して、
#IfWinActive, Mozilla Firefox ahk_class MozillaUIWindowClass
$!^r::Send !^r
#IfWinActive

のようにしたところ、大丈夫でした。

いろいろやり方ありますね。
ありがとうございました。

>>119-120
うはわざわざコードまで。ありがとうございます。
せっかくなので参考にして組み込んでみます。
223名無しさん@お腹いっぱい。:2009/11/03(火) 19:02:15 ID:ScOpU5nY0
DLLCallを使える人はうやらましいなあ
224名無しさん@お腹いっぱい。:2009/11/03(火) 19:49:03 ID:9BR1IeYV0
この手のスクリプトだと仕方ないことだろうけど
車輪の再発明率の高さがすさまじいな
225名無しさん@お腹いっぱい。:2009/11/03(火) 20:23:28 ID:aCAqg/RM0
DllCallの類を使えるようになれば便利だとは思うけど
実際のところよくわからない
どういうもので勉強すればよいのでしょう
226名無しさん@お腹いっぱい。:2009/11/03(火) 20:44:55 ID:w4b2vqfq0
Path_Relative(p1,p2)
{
Loop, 2
{
q%A_Index% := 0
If (RegExMatch(p%A_Index%, "\\$") > 0)
{
q%A_Index% := 16
}
}
VarSetCapacity(p0, 256)
DllCall("shlwapi\PathRelativePathToA", Str,p0, Str,p1,Int,q1, Str,p2,Int,q2)
Return p0
}
/*
------------------------------------------------------------------------------
shlwapi.dll
------------------------------------------------------------------------------
PathRelativePathToA(lpszPath, lpszFrom, dwAttrFrom, lpszTo, dwAttrTo)
lpszPath : 相対化されたlpszToのパス
lpszFrom : lpszToのパスが相対の基準とする絶対パス
dwAttrFrom: lpszFromのパスがディレクトリの場合は16、ファイルの場合は0を指定
lpszTo : lpszFromのパスに対して相対化される絶対パス
dwAttrTo : lpszToのパスがディレクトリの場合は16、ファイルの場合は0を指定
*/
DllCall使い始めてまだ間もないんだけどこんな感じ
これは自作の相対パス生成関数なんだけど
なんか新しく出来るっぽいのはVarSetCapacityで空間作ってやる
文字列っぽいのはstr
整数っぽいのはintって感じでやると結構うまくいくよ
winapi検索して→PathRelativePathToA(lpszPath, lpszFrom, dwAttrFrom, lpszTo, dwAttrTo)みたいな情報を仕入れていじってみるので勉強中
227名無しさん@お腹いっぱい。:2009/11/03(火) 20:49:40 ID:QG8QRF+K0
クリップボード履歴をとりたいです
使えるサンプルスクリプトはどこかにありませんか?
228名無しさん@お腹いっぱい。:2009/11/03(火) 21:35:56 ID:PQt/JUGH0
DllCallは構造体入るものは途端に敷居が高くなるよね。
Path関係は Shell Utility API を一通り関数化しておくと大抵何とかなる。
>201でUNICODE版の話題が出る直前に作った ダメ文字対応 SplitPath関数

SplitPath(path, byref OutFileName="", byref OutDir="", byref OutExtension="", byref OutNameNoExt="", byref OutDrive=""){
  ;URL処理は本家に任せる
  If(Instr(path,"://"))  {
    SplitPath,path,OutFileName,OutDir,OutExtension,OutNameNoExt,OutDrive
    return
  }
  ;フォルダパスを除いたファイル名 フォルダパスのみの場合は、空になる
  OutFileName := DllCall("SHLWAPI.DLL\PathFindFileNameA", Str,path, Str)
  If (RegExMatch(OutFileName,"(?:^|[^\x80-\x9F\xE0-\xFC])\\"))
    OutFileName := ""
  ;フォルダパス(最後の「\」を含まない) ファイル名のみの場合は、空になる。
  VarSetCapacity(OutDir,260,0)
  DllCall("msvcrt.dll\_mbscpy",UInt,&OutDir,Str,path)
  DllCall("SHLWAPI.DLL\PathRemoveFileSpecA", Str, OutDir)
  OutDir := RegExReplace(OutDir,"(?<=[^\x80-\x9F\xE0-\xFC])\\$")
  ;ファイルの拡張子(「.」は含まない)
  OutExtension := RegExReplace(DllCall("SHLWAPI.DLL\PathFindExtensionA",Str,path, Str),"^\.")
  ;拡張子を除いた名前部分を格納する
  OutNameNoExt :=RegExReplace(OutFileName,"\..*$")
  ;ドライブ文字(「:」付き)やネットワーク上のパスのマシン名を格納する
  OutDrive:=SubStr(path,2,1)=":" ? SubStr(path,1,2) : SubStr(path,1,2)="\\" ? RegExReplace(path
                 ,"(?<=[^\x80-\x9F\xE0-\xFC])\\.*$","","",-1,3) : ""
}

>>227
このあたりとか?
http://lukewarm.s101.xrea.com/myscripts/Clipboard.zip
管理人さんのコードは定義関連の値を直値で入れてる場合が多くて逆引き解読はけっこう困難
229名無しさん@お腹いっぱい。:2009/11/03(火) 21:39:28 ID:CXVHGrFd0
DllCallてWin32 APIとか使わないと出来ないとか、使った方が楽てときに使うものでしょ
230名無しさん@お腹いっぱい。:2009/11/03(火) 22:15:53 ID:hqRCM1Gh0
>>218
#IfWinNotActive 使うといいよ。

>>228
Path 関連は http://msdn.microsoft.com/en-us/library/bb773559%28VS.85%29.aspx の中のAPIを使う方が確実。
kernel32.dll の lstrcpy も併用。

てかMSDNデザイン変わって軽くなってる。

----

DllCallは使わないに超したことない。標準コマンドで出来るなら速いし楽。
開いたり閉じたり、確保したり解放したりしなくていいし。
231名無しさん@お腹いっぱい。:2009/11/04(水) 10:22:32 ID:WBmXmfsc0
toolipsで表示する際に見やすくするため、日本語の全角と半角の混じった文章を、
指定文字数ごとに改行をつけたいのですが、
日本語の2バイト文字の1バイト目が分割点になると文字化けしてしまいます。

そこで末尾が日本語の場合は1バイト増えることを許容するとして、
文字化けが無いように分割するような方法または関数は無いでしょうか。
232名無しさん@お腹いっぱい。:2009/11/04(水) 10:31:07 ID:LCq3Tjqi0
IsDBCSLeadByte
233名無しさん@お腹いっぱい。:2009/11/04(水) 11:49:13 ID:r4U1qe150
space & d:: Send, a
これでaが入力されずにdになってしまいます
何がいけないのでしょうか?
234名無しさん@お腹いっぱい。:2009/11/04(水) 14:20:35 ID:oXu1cuaN0
ちゃんとaが入力されるよ?
235名無しさん@お腹いっぱい。:2009/11/04(水) 14:44:06 ID:r4U1qe150
>>234
まじかー
どんだけ基本的なものを書いても実行できないんだよね
しかたなくコピペをいじる程度しか出来ない
絶望した!
236名無しさん@お腹いっぱい。:2009/11/04(水) 17:15:29 ID:NWpOxJ7B0
ちゃんと起動できていないんじゃ・・・
237名無しさん@お腹いっぱい。:2009/11/04(水) 17:34:52 ID:GEmyZ4FP0
PC持ってないんじゃ…
238名無しさん@お腹いっぱい。:2009/11/04(水) 17:36:47 ID:jwMvZ5L50
まさかとは思いますが、この「AutoHotKey」とは、あなたの想像上の存在にすぎないのではないでしょうか。
もしそうだとすれば、あなた自身が統合失調症であることにほぼ間違いないと思います。
239名無しさん@お腹いっぱい。:2009/11/04(水) 18:21:29 ID:+Oo34Y9t0
>>233
全角文字記号空白が混入している、
改行コードが win,dos 系じゃない
?
240名無しさん@お腹いっぱい。:2009/11/04(水) 18:40:18 ID:r4U1qe150
解決しました

ctrl+Eで編集ではなく、.ahkを編集する必要があったんですね
1年悩みました
241名無しさん@お腹いっぱい。:2009/11/04(水) 19:06:38 ID:8ra/3sBL0
1年って、どんだけw
242名無しさん@お腹いっぱい。:2009/11/04(水) 22:07:17 ID:9+zcw1OnO
Alt+Ctrl+Spaceを押しながらマウスの左クリックした時のみ、
左ボタンを押し下げた直後に左ボタンを強制的に押し上げた状態にする…ってできませんでしょうか?

コミックスタジオというお絵描きソフトで、Alt+Ctrl+Space+左クリック(押し下げ時点)で「キャンパスの縮小」ができるのですが、
先にAltキーを離してから左ボタンを押し上げると「キャンパスの拡大」を併発してしまうというバグがありまして、
それをAHKのお力で回避できないものかと思ってるんですが…
243名無しさん@お腹いっぱい。:2009/11/04(水) 22:30:19 ID:8ra/3sBL0
できるよ。面倒だけど。
3キー同時押し+マウスボタンなんてひどいキーアサインだなぁ。
そのキーストロークの発行を別のキーのアサインした方がよっぽど楽だと思う。
244名無しさん@お腹いっぱい。:2009/11/04(水) 22:51:11 ID:9+zcw1OnO
>>243
グラフィックソフトではよくあるものなんです
スペースキー押しながらドラッグで「キャンパスの移動」を基準として、
Ctrlつけると拡大、Ctrl+Altで縮小、Alt付けて回転、とか

ほんとは上記の問題も左ボタン押し下げ前にAltを離さないように気をつければ
いいの話なんですが、作業が手馴れてスピードアップしていくとどうしても
頻発してしまうもので…
245名無しさん@お腹いっぱい。:2009/11/04(水) 23:24:48 ID:0r+ApFARP
まずは何をやってみて、どうダメだったのかを書いてみては?
まさかとは思うが、何の努力もしないでやり方だけ貼ってくれなんて言ってないよね?
246名無しさん@お腹いっぱい。:2009/11/05(木) 03:03:33 ID:ajC652VW0
XPからWin7に乗り換えたのだけど、ウインドウ描画をAeroにしたら PixelGetColor で
画面内のRGBカラーを取得するコマンドが、1回当たり30msec位かかるようになってしまった。

ウインドウデザインをClassicにすると、ほぼ0msecで取得できる。AHKのバージョンは1.0.48.03

うちだけの現象かもしれないので、Aero使ってる人いたら下記の検証スクリプトを
ClassicとAeroで走らせて、結果を教えてもらえませんか?
以下、動作検証用スクリプト(動作確認済み。走らせると結果がクリップボードに入ります)

−−−−−
before:=A_Tickcount

count=1000
loop,%count%
{
PixelGetColor, color, 1,1, RGB
}

after:=A_Tickcount
dif:=after-before
msg=PixelGetColor %count%回取得テスト OS=%A_OSVersion% 結果=%dif% msec
msgbox,%msg%`n`nOKを押すと、結果をクリップボードにコピーします
Clipboard=%msg%
return
−−−−−

当方PCスペック C2Q9550 4GB G45オンボ Aeroは不透明で使っている
ウインドウデザインがClassicだとスクリプトは31msecで終わる Aeroだと20秒〜30秒で不定
XPのサブPCは60msec

#PixelGetColorをつかって、動画再生ソフトのシークバーがどの位置にあるかを検出していたのだけど、
#これだけ遅いと使い物にならないから別の方法を考えねば・・・。
247242:2009/11/05(木) 05:15:37 ID:SJ1FY5NTO
すみません、以前作って失敗したスクリプトを再建中に思いついた
やり方を試してみたらうまくいってしまいました…

~^!Lbutton::
 { GetKeyState, state, Space, P
  if ( state = "D" )
   MouseClick, Left
 }return

以前は~Lbottunの中で、GetKeyStateでCtrl、Alt、Spaceの押し下げ状態を
それぞれバラで取得して、if文で見る…ってやり方やってました
お騒がせしてすみません
248名無しさん@お腹いっぱい。:2009/11/06(金) 16:16:07 ID:IhALmN6B0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 36 - November 4, 2009

* Changed: If x.y or similar is immediately followed by an open-bracket ([),
 the right-most identifier preceding the bracket is treated as the first parameter of the operation.
 For instance, a.b.c[d] is equivalent to ObjGet(a.b,"c",d) and x.y[z]:=v is equivalent to ObjSet(x,"y",z,v).
 Previously each sub-expression preceding a bracket was evaluated separately.
* Changed: If a method-call such as x.y() is followed immediately by an assignment,
 the parentheses are treated as brackets. For instance, x.y(z):=v is now equivalent to ObjSet(x,"y",z,v).
* Fixed: If(expr) and While(expr) with no delimiting space or comma.

>>166-168 の件はスペース入れなくてもいいようになったみたい。
249名無しさん@お腹いっぱい。:2009/11/06(金) 21:15:27 ID:ZGdYJVFo0
>>247
そんなわけ分からんキーバインドより>>144でアプリ単位でF1からF12,Pause,insert,その他もろもろの
キー単体に動作割り当てしとけよ。
250名無しさん@お腹いっぱい。:2009/11/07(土) 08:15:02 ID:bxvew3wUP
どんなキーアサインにしようが、人の勝手
251名無しさん@お腹いっぱい。:2009/11/07(土) 08:30:19 ID:Qv+bHEOc0
よくそんな変態キーバインドを無数のアプリごとにつけられるな。ahkファイルも膨大な行なんだろうな。
記憶力がすごいんだね。俺はバカで記憶力もないので簡単なキーバインドにするわ。
252名無しさん@お腹いっぱい。:2009/11/07(土) 09:11:17 ID:bxvew3wUP
もともとの話は、標準のキーバインドの誤爆を回避するためであって、
別に独自に変態仕様にしてるわけじゃないんじゃね

別に>>249みたいな考えもあって当然だとは思うけど、既に単純なキーは埋まってるとか、
利用頻度が低いとか、慣れの問題とか、PC、職場環境云々で、人には色々事情があるだろう

何だか勝手に>>251みたいな想像する方がよほど気持ち悪いわ
253名無しさん@お腹いっぱい。:2009/11/07(土) 09:20:22 ID:1tEBwyKg0
>>251
よく箸みたいなめんどくさいもん使うよなww
フォークとスプーンのが遥かに簡単なのにwww

って言ってるようなもん
254名無しさん@お腹いっぱい。:2009/11/07(土) 10:19:54 ID:Qv+bHEOc0
いや、単純にahkファイルを分割しないとAutoHotkey.ahkファイルが
長くなりまくってぐちゃぐちゃになるだろ。
分割するならアプリ単位でした方が編集も容易ってだけ。

単独ahkで簡単に編集できますかね? 大量にキー登録してるやつ、苦労してないの?
255名無しさん@お腹いっぱい。:2009/11/07(土) 10:30:24 ID:Qv+bHEOc0
AutoHotkey.ahkには
#IfWinActive ahk_class ●
#Include ●.ahk
#IfWinNotActive ahk_class ●

を書いてくだけなので、すっきりする。
;GoogleChrome
#IfWinActive ahk_class Chrome_WidgetWin_0
#Include GoogleChrome.ahk
#IfWinNotActive ahk_class Chrome_WidgetWin_0
とかだけ

htmlだってページごとに分割してあるから呼び出しとか編集しやすいんだろ。
巨大な1つのhtmlファイルに全部のHP情報を書いて、更新してるHPサイトないだろ。
いたらすごいがw

ティム・バーナース・リーがhtml作ったのも分散させたほうが管理と更新が楽だと思ったから。
256名無しさん@お腹いっぱい。:2009/11/07(土) 11:10:25 ID:0/fYRRyK0
>>254
別に苦労しないんだが。長くなってきてもアウトライン使えば良いし
まあそれはそれでスッキリしそうだけど趣味の範囲だと思う
257名無しさん@お腹いっぱい。:2009/11/07(土) 11:29:42 ID:B2zpZxiz0
>>255
どうせなら
#IfWinActive ahk_class ●
をIncludeするahkファイルに移動させて
AutoHotkey.ahk には
#Include ●.ahk だけをずらーっと並べてもいいんじゃね
まぁ、好みなんだろうけど
258名無しさん@お腹いっぱい。:2009/11/07(土) 12:11:18 ID:bxvew3wUP
どういう経緯で長いファイルの分割方法の話になったのが理解できないんだけど、
(どうみても勝手に自分で話膨らませてるだけだよね?w)
管理の話をするのなら、自分も>>257のようにahk_class何たらの部分もinclude内に含めるかな。
クラス名のような変わりやすい定数は、複数のファイルに分散させない方が良いと思うので。

それから、htmlを作った理由は、もっと別に有意義な目的があったと思うけど…
管理と更新程度の話なら、普通にincludeやライブラリ、makeなどで既に解決されてたし。
259名無しさん@お腹いっぱい。:2009/11/07(土) 12:16:01 ID:intpFENO0
>>258
定数で思い出したんだけど
autohotkeyの場合、定数の呼び出しと変数の呼び出しでは
ほかの言語のように実行速度と処理が違うのかな
260名無しさん@お腹いっぱい。:2009/11/07(土) 12:35:10 ID:0/fYRRyK0
よくよく読んでみると ID:Qv+bHEOc0 が物凄い勢いで話し曲げてるのか
261名無しさん@お腹いっぱい。:2009/11/07(土) 12:53:03 ID:TMyC4X3q0
#IfWinActive サポート以前からAHK使ってるんで今さら整理すんのマンドクサ
っつーのは個人的な私見だが、ホント余計なお世話だと思う。
細かくahk分割することが必ずしも有効だとも思わんし

「わけ分からんキーバインド」だってCG系アプリの常識に則ってるって書いてあるじゃん
フォトショ等の他のデファクトスタンダードアプリのキーバインドを踏襲してんだろうから
変えたらかえって分かりにくくなるんだろ。
262名無しさん@お腹いっぱい。:2009/11/07(土) 14:53:44 ID:FC/c6aRs0
>>144発見した俺スゲェ天才
って思いきや反応が薄かったので
わざわざ蒸し返してみました
263名無しさん@お腹いっぱい。:2009/11/07(土) 15:43:58 ID:FgbnAgzl0
ソース分割の方法なんて好きにするといいよ。それぞれメリットデメリットがある。
#IfWinNotActive, 〜 は不要というか、 #IfWinActive の方がいい。

複雑な条件こそ AutoHotkey_L の #If が有用なんだけどな。

#If WinActive("hogehoge") && GetKeyState("Space")
^!LButton::Send, {Blind}{LButton}

とかでいいはず。
264名無しさん@お腹いっぱい。:2009/11/07(土) 16:07:43 ID:4beMFbgn0
少し質問があります。

NetBeansという統合環境のエディタでCtrl+Sを押した時に、
背後に開いているGoogle Chromeを同時に更新しようとしています。

以下のように書いたのですが、一度更新したらChromeを一度アクティブにしないと
更新ができません(以前はできていたような木がするのですが、何故かできなくなってしまいました orz)
こういった場合にどのようにしたものでしょうか?

; NetBeans IDE
#IfWinActive, NetBeans IDE ahk_class SunAwtFrame
$^s::
  Send, ^s
  ControlSend,, {F5}, . ahk_class Chrome_WindowImpl_0
return
#IfWinActive
265264:2009/11/07(土) 16:18:43 ID:4beMFbgn0
Chromeの代わりにFirefoxだと問題ありませんでした。

  ControlSend,, {F5}, Firefox ahk_class MozillaUIWindowClass
266名無しさん@お腹いっぱい。:2009/11/07(土) 17:32:36 ID:NjOhuvBV0
>102 名前:名無しさん@お腹いっぱい。 Mail:sage 投稿日:2009/11/06(金) 22:02:27 ID:u3mykk8m0

>タスクバー上でマウスホイール回すとアクティブなウィンドウを順々に変えていけるソフト教えてください
>OSはXPです


>117 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/11/07(土) 04:47:31 ID:G1NLu7ic0
>>114
>hkodetchTaskWheelは作ってくれスレに作者がいるんで要望出してみるのもいいかも。
http://pc11.2ch.net/test/read.cgi/software/1219471811/233

>AHKで同じようなのを作った人もいる。
http://pc12.2ch.net/test/read.cgi/software/1243005818/769

dat落ちで見れない・・・
誰かkwsk・・・
267名無しさん@お腹いっぱい。:2009/11/07(土) 17:34:13 ID:FC/c6aRs0
268名無しさん@お腹いっぱい。:2009/11/07(土) 17:35:41 ID:sFu4/8dZ0
769 751 sage 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プログラミングに詳しくない人が作ったものですので
そのあたりの不備があればご指摘いただけると助かります
269名無しさん@お腹いっぱい。:2009/11/07(土) 17:38:42 ID:NjOhuvBV0
>>267-268
ありがと
270名無しさん@お腹いっぱい。:2009/11/07(土) 20:22:43 ID:2yvcGSPS0
いろんなレベルのヤツが混在してるなw
271名無しさん@お腹いっぱい。:2009/11/08(日) 05:34:00 ID:3Xlw69x80
>>266
こんなソフトありませんかスレでそれ書いたの俺だわww

dat落ちのリンクだってことをすっかり失念してた
上も下も落ちてるんだよなorz
272名無しさん@お腹いっぱい。:2009/11/08(日) 14:24:36 ID:8B/ITYip0
低レベルの奴ですみません

特定のスレッドでのみ、キーの入力間隔を一定時間開けるようにするにはどうすればいいの?
SetKeyDelayだとスクリプト全体にかかっちゃうよね
毎行Sleepで間隔開けるしか思いつかないんですが…
273名無しさん@お腹いっぱい。:2009/11/08(日) 14:38:59 ID:dBvTYxAq0
Loop, Parse, Var
Send, %A_LoopField%
Sleep, ***

とか
274名無しさん@お腹いっぱい。:2009/11/08(日) 15:28:53 ID:QiKwL0PB0
>SetKeyDelay
>この設定の基本値は、スクリプトの最初のAutoExecuteセクションで設定する。
>ホットキーなどで新たに起動されたスレッドでは、設定は基本値に設定される。

だから基本値はAutoExecuteで指定して
特定のスレッドのみ送信前にSetKeyDelayし直してやればいいんでない?
それか不安だったら

save := A_KeyDelay
SetKeyDelay, 50
send,hoge
SetKeyDelay, %save%

てやるとか。
275名無しさん@お腹いっぱい。:2009/11/08(日) 19:06:39 ID:JUXohyv80
上の方ででているunicode版のautohotkeyを使っているひとはいますか
ついにautohotkey_lの機能をそのまま移植したらしいのです
日本語ユーザーにとってはunicode版を使うデメリットってないのでしょうか
276名無しさん@お腹いっぱい。:2009/11/08(日) 19:27:46 ID:f8Y0xLMqP
他人の作ったスクリプトが、期待した通りに動作しない可能性がある
(スクリプトの文字コードの問題、文字列の扱いなど)

お節介かもしらんけど、フォーラムの該当POSTを読んだ上でこういう質問をしているのなら、
両者の違いや変更点を正しく認識できていないのだと思う
その辺を理解して自分で臨機応変にコードの修正などが出来ると確信するならば、使っても良いとは思うけどね
277名無しさん@お腹いっぱい。:2009/11/09(月) 01:40:33 ID:A1Hre8XP0
dllcall の質問です。
autohotkeyのgetkeystate を使わずに win32api のgetkeystate を使って
capslockの状態を取得できるか試しました。
そうしたらcapslockの状態を取得できないのです。
このスクリプトがどこか誤っているならば教えてください。お願いします。

sc03a & f::
;GetKeyState Function ()
;http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx

; SHORT GetKeyState(
; int nVirtKey
; );

nVirtKey:="0x3A"
msgbox,% DllCall("GetKeyState", "int", nVirtKey)
return
278名無しさん@お腹いっぱい。:2009/11/09(月) 01:52:36 ID:/99e6h9E0
>>277
>>3のQ1だからどうしようもないんちゃう
279名無しさん@お腹いっぱい。:2009/11/09(月) 02:32:18 ID:oux/YXQT0
最近AHKを使い始めましたが、>>9の症状が起こり困っております。
報告にあるようなソフトは使っておりませんが、Ctrl、Alt、Shiftが時々押しっぱなしになります。
非常に厄介なので、押し下げ状態を感知して押し上げ状態にするような事はAHKスクリプトで
対処できるでしょうか?

今のところ、AHKはキーリマップ、ランチャ程度の使い方しかしていなく、スクリプトなど書いた事が
ないので、対処法がありましたら貼っていただけるとありがたいのですが。。。
280名無しさん@お腹いっぱい。:2009/11/09(月) 10:11:46 ID:JieKSa3i0
検知は >9の下にあるアラート改造して Tooltipの変わりに
Send,{%keyname% Up}  したらいいんでない?

参考 モデファイヤキーをトグルするスクリプト
http://d.hatena.ne.jp/eamat/20051122/p1
281名無しさん@お腹いっぱい。:2009/11/09(月) 10:41:57 ID:/99e6h9E0
>>279
>>9に書かれているのはあくまで例であって他カスタマイズ系ソフトでも
起こり得る可能性は十分にある。(マウスやキーボード付属の専用ドライバ&ユーティリティを含む)

また、カスタマイズ系では無くても特定のアプリケーション操作時に発生するのであれば
最新Verに更新したり、以前のVerに戻すことで(1〜5つ前のVerに順に戻してみるとか)
改善されることもある。
282279:2009/11/10(火) 01:04:26 ID:gJzKcghB0
>>280
参考サイトまで書いてくださりありがとうございます。
そのサイトとリファレンスを読みながら奮闘中です。
とりあえず>>9のスクリプトを理解することから始めないと。。。

>>281
なるほど。色々な要因がありうると言う事ですね。
マウスやキーボード専用ソフトは入れておりません。
どの状況においても発生するので、他の何か(常駐ソフトなど)が原因かもしれません。
自分の分かるところから調べてみようと思います。
283名無しさん@お腹いっぱい。:2009/11/10(火) 02:18:57 ID:V0sJTfwT0
言われて気づいたが俺も >>9 けっこうしょっちゅう起こってるわ

・窓使いの憂鬱入れてる
・Vista SP2 32bit
・CPU Quad Core Q6600
・Logicoolのマウスではない
・vmwareは入れてない(coLinuxは入れてる)

参考まで
284名無しさん@お腹いっぱい。:2009/11/10(火) 09:10:09 ID:4WARU0R30
窓使いの憂鬱を入れてたときは結構あったけど、
使うのやめてからは起きなくなったなー。
Logicool は常用してる。
285名無しさん@お腹いっぱい。:2009/11/10(火) 10:54:23 ID:hqa3rzOm0
うちのノートじゃ
右Ctrlと左CTrlで挙動が違ってて
あれこれ苦労したもんだ
286名無しさん@お腹いっぱい。:2009/11/10(火) 11:11:23 ID:QXaBUUzJP
うむ、モディファイキーの〜up downをアサインしたり自分でSendしたりすると、
たいてい右と左の扱いで面倒になることが多い
ちゃんと検証すれば法則はあるんだろうけど、面倒だからいつも別の方法に逃げてるなw
287名無しさん@お腹いっぱい。:2009/11/10(火) 17:45:01 ID:sI7toqlv0
永久規制やっと解除。

Unicode版の件。
作成日2009/11/06のバイナリ(SHA-1: 1b7b154deba87b78fea164ca4884f8c7f9170a08)で試行

クリップボードの件は直ってる感じ。

正規表現はちょっと微妙。でも大幅に便利
・ SJIS で 0x5c を含む文字が \ にマッチしなくなっている。
 例: RegExMatch("表示", "\\") は False
・ [a-z], [あ-お] などは通る。(文字コード範囲なので [あ-お] だと ぃ,ぅ,ぇ,ぉ もマッチ)
・ 文字クラス( [:alpha:] とか) が通らない。\w, \W, \s, \S, \d, \D などは大丈夫。
・ 名前付き後方参照すると落ちる。今のところ再現性100%。今のところ、名前付きじゃなければ平気。
  例: RegExMatch("abcdef", "(?P<hoge>[a-z]+)", $) → 強制終了

>>275
・ メモリ使用量は確実に増える。
・ 直接メモリいじるヤツは改変が必須
・ Shift_JIS でスクリプトが書けない。


てか、まだバグ出し切ってない感じ。
288名無しさん@お腹いっぱい。:2009/11/10(火) 18:02:25 ID:uImB7Nmz0
永久じゃないじゃん
289名無しさん@お腹いっぱい。:2009/11/10(火) 20:08:10 ID:eItTlA7B0
>>287
どうもありがとうございます。
正規表現がより正確につかえるようになりつつあることはわかりました
ただ、名前付き後方参照のその処理はひどいですね

>>288
永久規制という名の規制がここ数日大規模に行われていたんですよ

290名無しさん@お腹いっぱい。:2009/11/12(木) 13:12:23 ID:uPPFfRhS0
Parsing Loop について質問させて下さい。

data := "a`nb`nc`n"
Loop, Parse, data, `n
{
data .= A_Index = 2 ? "hogehoge`n" : ""
msgbox, % A_LoopField
}
msgbox, % data

上記例のように、パーシングされる文字列をループ内で更新しても、ループそのものは影響を受けません。
このような変更をループに反映させるにはどのような方法があるでしょうか。
291名無しさん@お腹いっぱい。:2009/11/12(木) 14:00:28 ID:SSzS6IDmP
data := "a`nb`nc`n"
p := 1
Loop
{
 data .= A_Index = 2 ? "hogehoge`n" : ""
 if( RegExMatch(data, "m`n)^.*$", a, p)=0 ) {
  break
 }
 MsgBox % a
 p += StrLen(a) + 1
}
MsgBox % data
292290:2009/11/12(木) 15:15:37 ID:uPPFfRhS0
>>291
すばらしいです。大変参考になりました。
こんな感じでやってみようと思います。

data := "ab`ncd`nef`n"
p := 1
While, RegExMatch(data, "m`n)^.*$", a, p)
{
 data .= A_Index = 2 ? "hogehoge`n" : ""
 MsgBox, % a
 p += StrLen(a) + 1
}
MsgBox, % data
293名無しさん@お腹いっぱい。:2009/11/12(木) 19:51:07 ID:9X/uOe4IO
すまん、ものすごい低レベルな質問させてくれ
if A_PriorHotkey = %A_ThisHotkey%
こう書くと真になるのに、カッコ閉じて
if ( A_PriorHotkey = %A_ThisHotkey% )
とすると偽になっちゃうのはなんで?

テンプレの>>7では意味同じって書いてあるけどならないんです…
294名無しさん@お腹いっぱい。:2009/11/12(木) 19:59:57 ID:SSzS6IDmP
()の中は式として評価される
式の中では%%による変数展開は不要なので、変数名そのままで参照する

if ( A_PriorHotkey = A_ThisHotkey )
295名無しさん@お腹いっぱい。:2009/11/12(木) 20:53:17 ID:9X/uOe4IO
なるほどなっとく
ありがとう できましたー
296名無しさん@お腹いっぱい。:2009/11/13(金) 09:14:44 ID:nWWSVrpe0
AHKで作られたNewtonPadというソフトで、
タッチパッドに触れた状態で指定のキーを押す事で
マウスのミドルクリックと同じ動作をさせることが出来るようなのですが

キープッシュではなく、タッチパッドに触れた状態で左クリックをする事で
マウスのミドルクリックを再現することってAHKの技術的に可能なんでしょうか?

キーボードだと少し遠いのと、他の機能は特に使わないので
可能ならば自分に合うものを作ってみたいなと思っているのですが
297名無しさん@お腹いっぱい。:2009/11/13(金) 10:57:37 ID:TCkRORdU0
ミドルクリックエミュ自体は可能
でもボタンの入れ替えは操作体系がややこしくなるんで、
思ってたほど使い勝手良くならないのが実状だったりする。

つかキー入れ替えなんて調べればすぐわかるAHKのいろは部分だよ
それすら自分で確認できず人に聞いてるような状態で組み込みできるのか?
見た感じNewtonPadのソースは公開されていないみたいだし
ThumbRemapあたりを弄ってどうにかする必要があると思うが
298296:2009/11/14(土) 02:43:43 ID:2lmQfpvK0
>>297
ありがとうございます
1から覚えるつもりでいじくりながらやってみたいと思います
299名無しさん@お腹いっぱい。:2009/11/14(土) 10:31:55 ID:OzPMv0Hu0
#c::
DetectHiddenWindows,On
Process, Close, example.exe
return

常駐プログラムをホットキーで停止させるために、上記のような方法を使っているのですが、
この方法だとアイコンが残ったままになってしまいます
消す方法を教えていただけると助かります
なお、traycmdと言うソフトを用いて右クリック→終了を自動化する方法は、
一瞬メニューが出てしまい都合が悪いです(フルスクリーン状態だと勝手に画面が切り替わってしまう為)
それ以外の方法でお願いします
300名無しさん@お腹いっぱい。:2009/11/14(土) 11:05:14 ID:9crpWo0f0
>>299
強制終了になるからアイコン残ったままになるのかな
WM_CLOSEを投げてやればうまくいかな?
301名無しさん@お腹いっぱい。:2009/11/14(土) 11:08:10 ID:VhYO7vXBP
・WinCloseを使う
・終了のショートカットキーを送る
・リソース覗いたりして終了Msg#を調べて、SendMessageする
302名無しさん@お腹いっぱい。:2009/11/14(土) 11:30:23 ID:mbmb71sq0
>>299
トレイアイコンだけでも非表示のウィンドウがあって大抵はそれを閉じてしまえば終了できる。
で、手っ取り早いのが、プロセスに紐付くウィンドウを非表示のものも含め片っ端から閉じてしまう方法。

#c::
DetectHiddenWindows, On
Process, Exist, sample.exe
pid := ErrorLevel
WinGet, list, List, ahk_pid %pid%
Loop, % list
WinClose, % "ahk_id " list%A_Index%
Return

だけど、未保存のデータがあって保存するか、などのダイアログが出るタイプだとうまくいかない。
(新たにダイアログウィンドウがでるため)
うまくいかないなら、アプリ固有の操作で終了させてやる必要があるね。
303名無しさん@お腹いっぱい。:2009/11/14(土) 21:39:14 ID:Jb0IhbLW0
2ストロークキーについて教えてください。

以下のようなスクリプトを作りました。

~space::
Input,InputChar,I L1 T2,{Esc},WheelUp,WheelDown
if ErrorLevel=Match
{
if InputChar=WheelUp
MouseClick, left, 500, 500
if InputChar=WheelDown
Send,l
}
return


spaceキー(down up)の次に、マウスWheelUp、WheelDown以外の信号(キー入力・マウスクリックなど)があった場合、
直ちにInputの呪縛を解除し、入力信号通りの命令を実行したいのですが・・・


何とかなりますでしょうか?
よろしくお願いします。


304名無しさん@お腹いっぱい。:2009/11/14(土) 23:41:15 ID:ba/I35Vs0
よくわからんがフラグ立てるか Hotkey ON/OFF でやるほうが楽じゃない?
305名無しさん@お腹いっぱい。:2009/11/15(日) 02:42:27 ID:OoLN7iOd0
Input は InputBox で文字入力しているもんだと思った方がいい
306名無しさん@お腹いっぱい。:2009/11/15(日) 08:03:40 ID:tWLAnLzs0
a := 条件式 ? b : c ? d : e
上記の三項演算子の式をif文でどう表せるか教えて下さい。
307名無しさん@お腹いっぱい。:2009/11/15(日) 08:17:31 ID:OoLN7iOd0
慣れないと分かりづらい罠
If (expression)
 a := b
Else If (c)
 a := d
Else
 a := e


Switch〜Case みたく書いた方が分かりやすい。(※演算子で始まる行は前の行と結合する)
a := (式1) ? value1
  : (式2) ? value2
  : (式3) ? value3
  : defaultValue
308名無しさん@お腹いっぱい。:2009/11/15(日) 09:24:57 ID:UNlsg4YS0
AHKってNHKとどう違うんですか?
309306:2009/11/15(日) 09:33:24 ID:tWLAnLzs0
>>307さん、ありがとうございました。

教えていただいたのを参考にして>>9の三項演算子をif文でどう表せるか試しているのですが、動きません。
どこが間違っているか教えて下さい。

if !GetKeyState(A_LoopField)
{
%A_LoopField% := 0
}
else if !%A_LoopField%
{
%A_LoopField% := A_TickCount
}
else
{
%A_LoopField% := %A_LoopField%
}
if (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur)
{
alert := "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]"
}
else
{
alert := ""
}
310名無しさん@お腹いっぱい。:2009/11/15(日) 09:58:50 ID:AlmjA+9iP
alert := じゃなくて、 alert .= じゃないの
あと、三項演算子の構文上必要だから書いている部分は削っても良いとは思う
( %A_LoopField% := %A_LoopField% とか、alert .= "" とか)
311306:2009/11/15(日) 10:40:57 ID:tWLAnLzs0
alert:=をalert.=置き換えで、動きました。
>>310さん、ありがとうございました。
312名無しさん@お腹いっぱい。:2009/11/16(月) 22:35:29 ID:rz4m4ps80
キー入力フォーカスが変更された時に任意の関数を呼び出す。
ttp://www.autohotkey.com/forum/viewtopic.php?t=19367 にある wineventhook.dll を
AHKまたはスクリプトのあるフォルダに置いて利用。

FocusHook("HookHandler")

FocusHook(function, hook_dll="wineventhook.dll", event=0x00008005, msg=0x550) {
 adhw := A_DetectHiddenWindows
 DetectHiddenWindows, On
 If IsFunc(function)
  && DllCall("LoadLibrary", "Str", hook_dll)
  && DllCall(hook_dll . "\reghook", "UInt", WinExist("ahk_class AutoHotkey ahk_pid " . DllCall("GetCurrentProcessId","UInt")), "UInt", msg, "UInt", event, "UInt", event, "UInt", 0)
  OnMessage(msg, function)
 DetectHiddenWindows, %adhw%
}
HookHandler(wParam, lParam) {
 global hFocus, focus_info
 CoordMode, Tooltip, Screen
 SetWinDelay, 0
 SetFormat, Integer, Hex
 hFocus := hwnd := NumGet(lParam+8, 0, "UInt")
 WinGetTitle, Title, A
 WinGet, exe, ProcessName, ahk_id %hwnd%
 While (hwnd) {
  WinGetClass, c, ahk_id %hwnd%
  str := ":" . c . str
  hwnd := DllCall("GetParent", "UInt", hwnd, "UInt")
 }
 focus_info = %exe%:%title%%str%
 Tooltip, %focus_info%, 0, 0
}
313名無しさん@お腹いっぱい。:2009/11/16(月) 22:41:29 ID:rz4m4ps80
>>312 の補足
・ フォーカス取得にAttachThreadInputを利用しないのでダブルクリックが効かない問題はない。
・ フォーカスが変更されたときの通知なのでタイマー等と違い無駄な処理がない。

AutoHotkey_L と組み合わせれば、コントロールの重なりを窓使いの憂鬱のように扱うことが可能。

#If RegExMatch(focus_info, "SysListView32:Edit$")
Pause::MsgBox, Edit@ListView

#If RegExMatch(focus_info, "ComboBox:Edit$")
Pause::MsgBox, Edit@ComboBox

#If RegExMatch(focus_info, ":Edit$")
Pause::MsgBox, Edit@Other or Normal
314名無しさん@お腹いっぱい。:2009/11/17(火) 00:40:27 ID:qi7MhQcA0
例えば,同じ拡張子のtxtでも,
txtの前が20091116のような数字の羅列の場合は「秀丸」で,
そうでないないら「メモ帳」で開く
というようなラッパーのような動作をするahkは既にどこかにあったりしないでしょうか。

メニューが出るようなものは見つけたのですが,
メニュー選択は必要としていません。

どうぞよろしくお願いします。
315名無しさん@お腹いっぱい。:2009/11/17(火) 00:54:08 ID:7H/DS5+tP
そういうのは自分で作るのが早いし融通も利くよ。
サンプルを拾うまでも無いレベルで作れるから。
数字の羅列を判別したければ、この辺を参考に。

If var is [not] type
http://lukewarm.s101.xrea.com/commands/IfIs.html

ファイル名といえば俺は、携帯電話から抜き取る撮影動画ファイルが
いつも同じ名前になって管理が面倒なので、ahkをつかって更新時刻でリネームさせてる。

リネームのついでに携帯電話の専用形式を一般的な形式にトランスコードさせて、
さらについでに、デバイスがUSBで刺されたら勝手にファイルを抜き取って
HDDに保存したのを確認したら、デバイスを取り出す動作まで自動化させた。
AHKってほんと便利だなぁ。
316名無しさん@お腹いっぱい。:2009/11/17(火) 01:26:59 ID:QPJ1Vxrw0
>ラッパーのような動作をするahk
ルール決め打ちで作って自分専用で使ってる人はいるんじゃない?
でも ファイル名判別のための分岐条件は314の希望とは違うだろうし
あるかないかわからないものを探すより自分で書いた方がはやいと思うよ。

設定ルールをiniで指定してどんな条件にも対応可能な汎用的なものなら
無理にAHKで苦労して作らなくても、ポチエスの「名称による関連付け専用版」 があるし。
>メニューが出るようなもの
もしこれ ポチエスのこと言ってるんだったら設定でメニュー出ないようにもできるよ。
readme熟読してみ
317名無しさん@お腹いっぱい。:2009/11/17(火) 01:57:48 ID:FZeshcNd0
既製品ならポチエスだわな。ルールが記述がなじめなくて使ってないけど。

ファイル内容をある程度(数行)パースしてから振り分け先を決めるとか、
引数起動できないアプリの窓(無いなら起動して)にドロップをエミュレートするとか、
画像や動画だったら開いているビューワにドロップするとか、
ZIPだったら特定の拡張子がはいっているなら解凍して実行するとか、
変態的なことはやってる。
318名無しさん@お腹いっぱい。:2009/11/17(火) 02:24:28 ID:0t6VXI+G0
特定のキーをCtrl+Shiftに置き換えようと思って+^とか+CtrlとかCtrlShiftとかやって奮闘してたんだけど
もしかしてただではできない感じ?
319名無しさん@お腹いっぱい。:2009/11/17(火) 02:42:53 ID:FYProct10
アイドルタイムを定期的にクリアするにはどうしたらいいのかしら
動画サイトの長いの見てたりするときにモニタが省電力モードに移るのを
キー入力やマウス操作をすることなく阻止したい
320名無しさん@お腹いっぱい。:2009/11/17(火) 03:02:35 ID:FZeshcNd0
>>318
修飾キーとして使いたいならリマップじゃ無理。
例)
Pause::Send, {Ctrl Down}{Shift Down}
Pause Up::Send, {Shift Up}{Ctrl Up}

>>319
タイマーで最前面ウィンドウ監視。
特定のタイトルやクラスで(>>312をつかってもいいかも)、
かつアイドル時間が一定値を越えていたら何も起きそうもない{F24}とかを送る。
または、HKEY_CURRENT_USER\Control Panel\PowerCfg\CurrentPowerPolicy を一時的に書き換える。
321名無しさん@お腹いっぱい。:2009/11/17(火) 08:52:31 ID:vUwgbnqJ0
最近この手の話に興味があって参考にしているのですが

bluetooth機器はGlovePIEがなくてもautohotkeyだけで制御できるものなのでしょうか?

GlovePIEもスクリプトがあるのですがDLLの使用などを考える場合は

autohotkeyのほうがいいのかと思うのですが

まだ調べ始めて日が浅いのでよろしくお願いします。
322名無しさん@お腹いっぱい。:2009/11/17(火) 09:16:04 ID:8MpJRuydP
ひとくちにBluetooth機器と言っても色々あるけど、GlovePIEの名が出てきているので、
ジョイスティック(コントローラ)の話だと思って話を進める。

AutoHotkeyでは、ジョイスティックの入力をもとに、マウスやキー入力イベントを発生させることはできるけど、
その逆に、AutoHotkey側からジョイスティックの入力イベントを発生させることはできない。

つまり、ジョイスティックでOSを操作したりする場合には問題ないけど、
ゲームでのマクロのように、ゲームアプリに対して一連のジョイスティックの入力イベントを発行するような用途には使えない。
(AutoHotkeyからGlopePIEのスクリプトを起動すれば出来ないこともないけど)

どういう機器を使って何をどう制御したいのかを書けば、もっと具体的な回答が得られると思う
323名無しさん@お腹いっぱい。:2009/11/17(火) 09:32:03 ID:vUwgbnqJ0
>>322

BDリモコン(bluetooth機器)でGlovePIEを介してXBMCをコントロールしています。

これはここのページのとおりにすればできました、。
ttp://ameblo.jp/gaia/archive1-200907.html

これで満足するばautohotkeyは必要なかったのですが

次にBDリモコンをバッファロー製学習リモコンPC-OP-RS1と連動させて
他の家電の赤外線リモコンを集約したいと考えています。

有志の方によってPC-OP-RS1の制御DLLはすでにあるようでこれに
指令を送る方法を探していてautohotkeyでできるのではないかということになりました。
ttp://1c3.world.coocan.jp/wiki/index.php?%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EBDLL%A4%F2%BA%EE%A4%ED%A4%A6#p92ca3d9

それでautohotkeyを調べていると下記のサイトでautohotkeyだけで
BDリモコンを使用しているような記載があり
ttp://junsan45.blogspot.com/2009/10/bdremoconautohotkey.html

当初はautohotkeyでキーを割り当ててGlovePIE<->autohotkey間の
受け渡しをしようと考えていたのですがその必要もないのではないか
と思い聞いてみました。
324名無しさん@お腹いっぱい。:2009/11/17(火) 10:05:56 ID:8MpJRuydP
BDリモコン → PC受信 → [XBMC制御] or [PC-OP-RS1で発信]
という流れなのかな

確認手順としては以下のような流れだと思うけど、こればかりは自分で確認するしかないのでは。

(1) BDリモコンの入力を全てahkで扱えるか(Joy1〜32とかCtrl+F13〜などで来るなら出来るのだろう)
(2) ahkでXBMCを制御できるか(GlovePIEで出来るのならOKなのだと思う)
(3) ahkで、PC-OP-RS1制御DLLを使えるか(API自身は簡単に見えるけど、やってみないと分からない)
325名無しさん@お腹いっぱい。:2009/11/17(火) 10:19:25 ID:vUwgbnqJ0
>>324

了解です。確認してみます


私が妄想していることはautohotkeyで実現できる可能性はあると理解してよいのですよね?

そもそもまだautohotkeyがどのようなソフトか完全に理解できていませんので




326名無しさん@お腹いっぱい。:2009/11/17(火) 12:03:03 ID:YRFKRvsq0
ひとつのスクリプトに、流行らせるページの

TaskTrayIcon.ahk
ProcessMem.ahk
SystemMonitor.ahk

をIncludeしたらファンクション定義が重複してると怒られた(´・ω・`)
327名無しさん@お腹いっぱい。:2009/11/17(火) 12:13:08 ID:QPJ1Vxrw0
管理人さんのスクリプトはミドルクリックをトリガにしたものが結構多い
一度に複数組み込むなら交通整理が必要
328名無しさん@お腹いっぱい。:2009/11/17(火) 12:19:19 ID:QPJ1Vxrw0
ホットキーじゃなくて関数重複か
AllocとRtlMoveMemoryあたりだな
329名無しさん@お腹いっぱい。:2009/11/17(火) 12:24:26 ID:YRFKRvsq0
〜ProcessHandleと〜Allocだったかな
適当に整理して一つのahkに纏めた
330名無しさん@お腹いっぱい。:2009/11/17(火) 14:16:20 ID:Bve+ajmO0
>>201のUnicode版を使おうと思ったのですが、起動しません。
Windows7上でexeを叩くと「サンプルスクリプト作るかい?」と出て、Noとすると終了。YesとするとMy documentのアクセス許可が無くて無理、といわれ終了。
管理者として実行、XP互換などやっても起動しませんでした。
WndowsXPの別のPCで起動してみても、一瞬CPU使用率80%くらいまでAHKが持っていって、その直後に終了してしまいます。

本家・ダメ文字版AutohotkeyLともに問題なく動いてるのですが、なにか根本的なインストール方法が悪いのでしょうか。
331名無しさん@お腹いっぱい。:2009/11/17(火) 14:24:29 ID:FYProct10
>>320
ありがとう
F12までしかないキーボード使ってるけど送れるのかな
試してみる
332323:2009/11/17(火) 15:50:15 ID:vUwgbnqJ0
ttp://1c3.world.coocan.jp/wiki/index.php?%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EBDLL%A4%F2%BA%EE%A4%ED%A4%A6#p92ca3d9

にある
pc-op-rs1-control.dllというDLLを読み込ませてみようとしたのですが
バージョン情報をうまく表示してくれませんでした?
どこが悪いでしょうか

#v::
DllCall( "pc-op-rs1-control.dll\GetModuleVersion", "UInt", MejVer, "UInt", MinVer )
MsgBox, %MejVer2%
return
333名無しさん@お腹いっぱい。:2009/11/17(火) 17:28:57 ID:FZeshcNd0
>>330
スクリプトのパス渡さないと何もせずに終了する。スクリプト渡すと動く@XP SP3 32bit

>>331
キーボードになくても平気

>>332
APIリファレンスの通りだよ。バッファ確保してそのポインタ(メモリ上のアドレス)を渡す。
(以下は>>7 Q6 で)

#NoEnv
dll = pc-op-rs1-control.dll
hModule := DllCall("LoadLibrary", "Str", dll)
If !(hModule) {
 MsgBox, %dll% のロードに失敗
 ExitApp
}
VarSetCapacity(pMajVar, 4, 0x00) ; バッファ確保
VarSetCapacity(pMinVer, 4, 0x00)
If (DllCall(dll . "\GetModuleVersion", "UInt", &pMajVar, "UInt", &pMinVer, "Int") == 0) { ; 0:PCOPRS1CONTROL_RET_OK
 MejVer := NumGet(pMajVar, 0, "UInt")
 MinVer := NumGet(pMinVer, 0, "UInt")
 MsgBox, , %Dll% のバージョン情報, Major Version%A_Tab%%MejVer%`nMinor Version%A_Tab%%MinVer%
} else {
 MsgBox, バージョン取得失敗
}
334323:2009/11/17(火) 17:56:21 ID:vUwgbnqJ0
>>333

ありがとうございます。
できました。

全部できたらまとめてみます

335名無しさん@お腹いっぱい。:2009/11/17(火) 18:45:58 ID:LuWQ5X/00
以前慣性スクロールの話があったので作ってみました。
連続でホイール回すと加速して慣性が働きます

~WheelUp::
~WheelDown::
If(A_PriorHotkey=A_ThisHotKey && A_TimeSincePriorHotkey<100) ;大きくすると感度が上がる
buf++
Else
buf=0
SetTimer,Slip,30
Return

Slip:
If(buf>1)
{
StringTrimLeft,Key,A_PriorHotkey,1
Send,{%key% %buf%}
buf-=0.2 ;小さくするとホイール加速と慣性増加。0.4くらいがちょうど良いかも
}
Else
SetTimer,Slip,Off
Return
336名無しさん@お腹いっぱい。:2009/11/18(水) 01:05:41 ID:UfZDh6jC0
>>314
便乗ですが、
メモ帳トラッパー
のようなものをAutoHotkeyで実現するにはどうしたらいいですか?
337名無しさん@お腹いっぱい。:2009/11/18(水) 01:15:44 ID:7WRUAJtG0
コマンドライン引数を解釈して、適宜振り分けしろとしか言えんなぁ
引数の文字列だけみるのなら AutoHotkey である理由はあまりないけど
338名無しさん@お腹いっぱい。:2009/11/18(水) 01:22:37 ID:7WRUAJtG0
あ、振り分けは要らんのか。
なら、貰った引数を他のアプリにそのまま引き渡すように書いてコンパイル。
アプリの指定はスクリプトに直に書いたり、INIやレジストリから読んだりする。
339名無しさん@お腹いっぱい。:2009/11/18(水) 02:12:16 ID:t369MxvUP
>>335
ホイール加速スクリプトを自作して使ってたけど、
それに替えてみたらものすごく調子が良くなった
自分のはタイマーを使ってなかったから、
大量にキーを送ると逆スクロールしたりしてたよw
載せてくれてありがとう
340名無しさん@お腹いっぱい。:2009/11/18(水) 02:37:42 ID:UfZDh6jC0
>>337
ありがとうございます。

ahkはexeにしてテキストファイルに関連付けするのでしょうか?

AutoHotkey.iniに書いてnotepad.exeが呼ばれたということを監視して,
それを違うエディタにすり替えるということは難しいでしょうか。
341名無しさん@お腹いっぱい。:2009/11/18(水) 02:44:21 ID:5bLsGb7l0
342名無しさん@お腹いっぱい。:2009/11/18(水) 03:00:29 ID:C8rA+Brf0
>>340
メモ帳トラッパーもnotepad.exeをすり替えてるだけみたいだけど?
343名無しさん@お腹いっぱい。:2009/11/18(水) 03:48:07 ID:DZi24RHW0
コンパイルするよりArghelperを使うほうが楽
問題はノートパッドがシステムで保護されてるので
セーフモードで置き換えないととか言う話だった希ガス

ノートパッドの出現を監視して
タイトルバーなりDLLCALLなりからファイルパス引っ張ってきて
即座にノートパッドはクローズして他のエディタで開くってな
スクリプトなら出来そうだが
344名無しさん@お腹いっぱい。:2009/11/18(水) 03:54:28 ID:7WRUAJtG0
XP移行はシステムファイル保護の対象だから置き換えは厳しいよ。

起動監視はできる。COM で WMI をごにょごにょすりゃいい。
ただAHKでやるのはかなり面倒。

ぶっちゃけ関連付け変えた方がいいとおもう。
345名無しさん@お腹いっぱい。:2009/11/18(水) 10:37:46 ID:VKvausHN0
>>333
ありがとう、Unicode版動きました。
でも、現状では「つかえねー」の一言。

Msgbox,Answer is あいうえお
という命令の結果が「Answer is ??????????」
変数名に日本語使えなくなってるし、全然ダメじゃん。

フォーラムに要望出してくるか。
346名無しさん@お腹いっぱい。:2009/11/18(水) 10:40:43 ID:5JhGkRnF0
autohotkeyでFFolderと同じ動作って実現可能でしょうか?
最近64bitのOSに変えて使えなくて困ってます。
347名無しさん@お腹いっぱい。:2009/11/18(水) 11:37:20 ID:qNjK4q330
>>345
CP932をUTF8として読むとそうなる
何でそうなるかは注意書きを読んでないから

>>346
コマンドいくつかの組み合わせで出来るか?というならば、No
ガリガリ頑張ってやって最終的にできるかと言われれば、おそらく Yes

ダブルクリック検知して、マウスが今どこにいるかで適宜処理分岐ってのを書く
SmartResiseってのは苦行・荒行になりそうな感じ
348名無しさん@お腹いっぱい。:2009/11/18(水) 12:33:53 ID:wyh1UAQW0
入れてないけど多分このあたりかね
>287
>・ Shift_JIS でスクリプトが書けない。

ていうか 345は>275-276あたり読んで出直してこい
自力でインスコもできない上、すぐ「つかえねー」とか安易に結論出す奴は
テスト版さわんなよ
349名無しさん@お腹いっぱい。:2009/11/18(水) 16:31:10 ID:o+zRHPa80
基本的なことをお聞きします。

文字列のHEX値をバイナリに変換して変数に入れる命令はありますか?

逆にバイナリを文字列のHEX値にすることはできますか?

よろしくお願いします。
350名無しさん@お腹いっぱい。:2009/11/18(水) 19:27:36 ID:B/8EofFN0
両方できる。

AHKは変数は文字列型のみと思っていい。
値の文字列が数値を表したものなら、10進/16進に関わらず数、値計算のときは数値として扱われる。
計算結果の数値も、変数に格納される場合は文字列に変換される

で、変数に格納される時に10進/16進のどっちに変換するかをしていするコマンドが SetFormat。

; 文字列として格納される
a = 0x1234
MsgBox, %a%
; 計算結果を再代入することで指定形式になる
; 未指定の場合はデフォルトで10進表記
a += 0
MsgBox, %a%
; 16進数にする場合はコマンドで切り替える
SetFormat, Integer, Hex
a += 0
MsgBox, %a%
351名無しさん@お腹いっぱい。:2009/11/18(水) 21:08:25 ID:B/8EofFN0
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 37 - November 7, 2009

* Added: Support for obj[method_name](params) object-call syntax.


Revision 38 - November 17, 2009

* Added: #MenuMaskKey directive to change which key is used to mask Alt/Win keyup events.
 See this thread for background information.
* Changed: If x[1,2]:=3 creates an object for x[1], it's base is no longer automatically set to x.base.
 See the documentation for a method of controlling this behaviour.

#MenuMaskKey は
「通常、Alt と Win みたくキー押下時は何も起こらないけど、押下解除時にメニューがアクティブになる。
AHKのホットキー機能では押下解除時にCtrlを送ることでこれを隠蔽している。
このCtrlを送ることが一部のアプリではウマくないらしいので、キーを変更できるようにしたぜ。」
とのこと。
352名無しさん@お腹いっぱい。:2009/11/18(水) 23:19:02 ID:gxEoeecg0
>>351
え?それってもしかして「かな」キーを押し上げたときに
なぜか挿入されてしまう ctrl をスクリプトの初期設定で
修正できるということですか?
353名無しさん@お腹いっぱい。:2009/11/18(水) 23:57:40 ID:B/8EofFN0
そんなことあんの?
これで発行する Ctrl はキー棋歴にでるけど、ひらがな(vkF2sc070)だと出ないよ。

Alt と Win で確認する方法は↓
#UseHook
#Space::
!Space::
KeyWait, LWin
KeyWait, RWin
KeyWait, Alt
KeyHistory
return
354名無しさん@お腹いっぱい。:2009/11/19(木) 00:42:37 ID:LNiNCjtm0
以前このスレで、既定のサウンドデバイスを変更するスクリプトを見かけた気がするのですが、もしどなたか持っていたら張ってもらえないでしょうか
355名無しさん@お腹いっぱい。:2009/11/19(木) 01:04:33 ID:4kGUQPB10
356名無しさん@お腹いっぱい。:2009/11/19(木) 01:08:07 ID:Auf4sZEG0
これVista 7 のサウンドデバイスでも使えるかな?
357名無しさん@お腹いっぱい。:2009/11/19(木) 01:40:44 ID:se20uIno0
>>355
おお、過去スレでこんな便利なスクリプトを書いてくれた人がいたのか。
BTヘッドホンとスピーカを毎回切り替えるのが面倒で、ジャストタイミングだ。

>>356
Win7Ult32bitで、とりあえず取得は動いた。

ただ、文字化け&右端が切れてる。正常時の動作がどうなるのかを
まだ把握して無いけど、動きそうな予感

SoundDevice_GetDeviceList("wave","out")

結果
> Xs[J[ (2- High Definition
> fW^ I[fBI (S/PDIF) (2
> Bluetooth Audio Renderer (Bluet
> Bluetooth Hands-free Audio (Blu
358名無しさん@お腹いっぱい。:2009/11/19(木) 10:12:59 ID:ttGjLOuS0
>>350

ほーAHKってかわった発想をするんですね

ありがとうございます。

359名無しさん@お腹いっぱい。:2009/11/19(木) 19:15:37 ID:aXU7CVVe0
awk と同じ
360名無しさん@お腹いっぱい。:2009/11/19(木) 21:38:08 ID:Qppixh0c0
無変換キーに、「-」
Shift+無変換キーに、「無変換」
を割り当てたいのだけど

vk1Csc079:: -
+vk1Csc079:: vk1Csc079

としてみても、Shift+無変換で「=」になってしまうのですが
どう割り当てればいいのでしょうか?
361名無しさん@お腹いっぱい。:2009/11/19(木) 21:41:56 ID:cqypbK1g0
>>360
>>3 Q2
362名無しさん@お腹いっぱい。:2009/11/19(木) 23:48:22 ID:j7aQkvKL0
補足すると、>>3 の Q6 も関係する

そのスクリプトだと、[Shift] + [無変換] を押した時、[無変換] を発行。
それを更にAHKが拾って、押下中のシフトを加味して [Shift] + [-] を発行するから。
363名無しさん@お腹いっぱい。:2009/11/20(金) 00:33:24 ID:UzYy4DOD0
ありがとうございました。両方ともキーを送るようにすることで思い通りに動かす事が出来ました。
あとなぜか何度も無変換と書きましたが変換キーの間違いでした・・・
364名無しさん@お腹いっぱい。:2009/11/20(金) 10:16:04 ID:4p8pkoxp0


変数の中にキーの文字列が入っていて

eval関数のようなもので実行して割り当てるようなことはできますか?

365名無しさん@お腹いっぱい。:2009/11/20(金) 11:28:27 ID:Nzbq/weY0
コマンドのHotkeyで可
366名無しさん@お腹いっぱい。:2009/11/20(金) 12:04:55 ID:4p8pkoxp0
>>365
ありがとうございます。
367名無しさん@お腹いっぱい。:2009/11/20(金) 16:08:18 ID:4p8pkoxp0
>>365
おんぶにだっこで申し訳ありません
Hotkeyコマンドを使う場合ラベルを使用しないといけないようなのですが

処理も動的に自動生成して変更したいと思っています。

できればラベルでなく直接命令を書く方法か
関数に引数を渡す方法があればよいのですが
そういったことはできませんか
368名無しさん@お腹いっぱい。:2009/11/20(金) 17:40:08 ID:DI3GJNnzP
ファイルにコード掃き出してRunするとか

一応フォーラムにも動的実行のライブラリがいくつかあるので、探してみてはいかが
(かなり使い方が限定されるだろうけど)
369名無しさん@お腹いっぱい。:2009/11/20(金) 20:35:56 ID:wChuSKGP0
370名無しさん@お腹いっぱい。:2009/11/21(土) 02:06:36 ID:ZXg4x3Gw0
>>367
何を以て動的処理といってるか知らんけど、
AHKでは全てのホットキー処理は(::で定義するモノも含めて)全てサブルーチンだよ。

直接命令をかくとか関数とか書いてるけど、
処理開始のトリガで行う処理の塊(サブルーチンラベルからReturnまで)が
どこかを明示しなきゃ逝けなんだから。

予め定義した処理をいくつかサブルーチンとして定義しておいて、
何らかの判断でHotkeyコマンドで切り替えるなり、
処理分岐の専用のサブルーチンをHotkeyコマンドで割り当てておいて、
実体しょりは定義済みサブルーチンに飛ばすとか、
いくらでもやりようがあると思う。

あと、書き捨ての短いスクリプトを一時的に実行したいなら >>2のACConsole(or類似品)を使うといいよ。
で、有用だなとおもったらメインスクリプトに昇格させて、
適当なサブルーチンで貼り付けて動的にラベル呼び出しすればいい。
371名無しさん@お腹いっぱい。:2009/11/21(土) 02:35:13 ID:ZXg4x3Gw0
; 任意のホットキーに任意のサブルーチンを割り当て(割り当て対象は1つ)
; ComboBoxにサブルーチン名をキー入力すれば定義済みの任意の処理を割り当てられる

Menu, Tray, Add
Menu, Tray, Add, Hotkey Config, GuiSHow
Gui, Add, Hotkey, vKey
Gui, Add, ComboBox, vSubName, Sub1||Sub2|Sub3
Gui, Add, Button,, OK
GuiShow:
 Gui, Show
 Return
ButtonOK:
 Gui, Submit
 If (Key && KeyAssigned && Key!=KeyAssigned)
  Hotkey, %KeyAssigned%, Off
 If (Key) {
  Hotkey, %Key%, %SubName%, UseErrorLevel
  If (ErrorLevel)
   MsgBox,,割り当て失敗, エラーコード:%ErrorLevel%
  Else
   KeyAssigned:=Key, SubAssigned:=SubName
 }
 Return
Sub1:
Sub2:
Sub3:
 MsgBox, ホットキー "%A_ThisHotkey%" で 処理 "%A_ThisLabel%"を実行
 Return
372名無しさん@お腹いっぱい。:2009/11/21(土) 02:50:54 ID:aHEcUN3q0
>>370
>あと、書き捨ての短いスクリプトを一時的に実行したいなら >>2のACConsole(or類似品)を使うといいよ。

>The topic or post you requested does not exist

oh...
373367:2009/11/21(土) 09:01:49 ID:t89Jr1em0
>>368-371
ん〜なかなか

ラベルの飛んだ先でA_ThisHotkeyかA_ThisLabelを利用して
分岐するようなものを考えてみます。

同じ処理で渡したいパラメータがたくさん(100個くらい)でてきそうなので
それだけキーを割り当てをする記述は避けたいと思っています
できればループ処理でパラメータだけ代えれるようなものを考えたいです。


374名無しさん@お腹いっぱい。:2009/11/21(土) 10:21:54 ID:PTEFXqUG0
とりあえず固定ラベルに飛んでから、%FuncName%() したらいいんじゃね?

Sub1:
Sub2:
Sub3:
 %A_ThisLabel%(A_ThisHotkey)
 Return

とか
375367:2009/11/21(土) 14:57:20 ID:t89Jr1em0
こんな感じにしてみました。


#a = 000
#b = 111
Keys = #a,#b
StringSplit, KeyArray, Keys, `,
Loop, %KeyArray0%
{
Hotkey,% KeyArray%a_index%, MyLabel
}
return
MyLabel:
MsgBox,% %A_ThisHotkey%
return

しかしよくよく考えるとこの方法で
100個もホットキーって用意できないですよね
キー3つはだめなようですし

376名無しさん@お腹いっぱい。:2009/11/21(土) 17:38:34 ID:m0i/WsZUP
モディファイアキー付ければいくらでもできるでしょ

というか、適切なアドバイスを得たいなら、本来やりたい事をもっと具体的に書いた方が良いと思う
山ほど動的にキーマクロを定義・生成したいとかそんな感じなのかね
377名無しさん@お腹いっぱい。:2009/11/21(土) 17:49:22 ID:ftqdZD5d0
>>375
lexikos版の#if使ったほうがいいかもしれん
378名無しさん@お腹いっぱい。:2009/11/21(土) 22:13:45 ID:8pUcDHXt0
2つ質問です。
1つ目
>123に
Loop, % list
の様に、変数を%で囲んでない物と囲んでいる物があるのですが、理由と使い分け方を教えて下さい。

2つ目
AHKのウインドウで変数をみた時の
[1 of 3]
等の数字の意味を教えて下さい。
379名無しさん@お腹いっぱい。:2009/11/21(土) 22:46:59 ID:jH/yZzLC0
Loop, % list
AutoHotkeyは % 以降(行末まで)を式として扱うので、
%で囲まなくてもその変数(List)を参照する。

a = 1
b = 2
c := a + b
d = % a + b
msgbox, c = %c%`nd = %d%


AutoHoekey Help の ListVars からのコピペ

Each line in the list consists of:
1) The name of the variable.
2) The length of the variable's contents and the variable's capacity. For example: [50 of 63]
3) The first 60 characters of the variable's contents.

エキサイトさんによる上記の翻訳

リストの各線は以下から成ります。
1) 変数の名前。
2) 変数のコンテンツと変数の容量の長さ。 例えば: 63の50
3) 変数のコンテンツの最初の60のキャラクタ。
380名無しさん@お腹いっぱい。:2009/11/21(土) 23:34:32 ID:ADUWdcbl0
ありがとうございます。
解説の式の所に書いてあるんですね。
書いてもらった例が分かり易かったんで納得しました。
381名無しさん@お腹いっぱい。:2009/11/22(日) 01:49:53 ID:gZQuYM7K0
以前autohotkeyスレで拾ったime操作のスクリプトがうまく動きません
ime_funk.ahkというものです。
skkimeで半角英数やひらがなに切り替えたいのですが、うんともすんともいいません
そもそも状態を取得できないようです
skkimeのソースに入っている ddskimic\btmncmode.cpp にて
それらの状態を保持している変数が宣言されていることはわかりました

これをもとにして上のことをautohotkeyで成功させるにはどうすればいいのでしょうか
382290:2009/11/22(日) 02:38:08 ID:iFRQw8Wx0
>>381
これ動きますか?

#1:: Ime(1) ; Win + 1 で On
#2:: Ime(0) ; Win = 2 で Off

Ime(value)
{
DetectHiddenWindows, On
SendMessage, 0x283,0x006, value,, % "ahk_id "DllCall("imm32\ImmGetDefaultIMEWnd", UInt, WinActive("A"), UInt)
DetectHiddenWindows, Off
}
383名無しさん@お腹いっぱい。:2009/11/22(日) 08:45:23 ID:wVs+W4JRP
>>381
ウチの環境(XP SP3 SP3, SMMIME1.5)ではWM_IME_CONTROL(0x283)で制御、取得できているから
呼び方の問題なのでは。

どのime_funck.ahkなのか分からないけど、ウィンドウタイトルを引数に渡す関数のやつなら、
問答無用でアクティブウィンドウ("A")を指定してやればいいかも
384名無しさん@お腹いっぱい。:2009/11/22(日) 10:58:33 ID:upg6kiLK0
Unicode版いい感じに進んでるなぁ。良さげな更新を抜粋。

[Tue, 10 Nov 2009 05:34:38 +0000]
- Changed: "Transform, HTML" now take an addtitional parameter to decide how to convert the non-ASCII chararters.

[Fri, 13 Nov 2009 02:01:25 +0000]
- Added: Abstract IO layer for reading and writing text is constructed, the files without BOM is read with system code page.
 This layer may also be used in compiled scripts.

[Sun, 15 Nov 2009 13:49:51 +0000]
- Added: Advanced file IO supports. (experimental)

[Mon, 16 Nov 2009 07:27:12 +0000]
- Fixed: RegEx named subpatterns.

[Mon, 16 Nov 2009 09:02:42 +0000]
- Added: Comments of class TextFile.

[Tue, 17 Nov 2009 02:30:48 +0000]
- Added: New command FileEncoding to set default file encoding.
- Fixed: RegEx sub-patterns.
- Changed: A_EventInfo is available in RegEx callouts, but the users must be noted that the offsets are not converted.

[Wed, 18 Nov 2009 15:02:33 +0000]
- Changed: "SetFormat, Integer" can now format hex numbers in uppercase letters. (H and h are different)
- Changed: Added a workaround for "WindowsForms10.SysListView32". (reported by Sean)

[Fri, 20 Nov 2009 14:18:14 +0000]
- Fixed: Try to send Unicode characters by SendInput().

[Sat, 21 Nov 2009 15:16:58 +0000]
- Added: Use VarSetCapacity(var, -2) to update the internal length of "var" which contains ANSI string.
385名無しさん@お腹いっぱい。:2009/11/22(日) 11:01:10 ID:sS8Yb+jB0
誰か言語仕様一から見直してくれねえかなーマジで・・・
386名無しさん@お腹いっぱい。:2009/11/22(日) 11:30:11 ID:upg6kiLK0
一から変えてもいいけど、ユーザは減ると思うな。
それに、俺は慣れてしまったw

あと、関数とかオブジェクトバリバリだと、他の言語を知らない人はかなり苦労すると思う。
387名無しさん@お腹いっぱい。:2009/11/22(日) 12:09:48 ID:wVs+W4JRP
ttp://mindtrove.info/articles/monitoring-global-input-with-pyhook/
Python+pyhookという手もあるけど、今使ってる資産もそれなりにあるので移行が面倒臭くて手を出してないw

ahkコマンドに相当する拡張モジュールを書けば移行も楽かもと思う今日この頃w
(倉の作者が作ってるpyautoがそれに近いかもしれんけど、あっちは最近全く更新無いんだよね)
388名無しさん@お腹いっぱい。:2009/11/22(日) 13:06:43 ID:vIbnTNjg0
質問します。

キャプションバーのマウス中クリックで、ウインドウの最小化をしたいのですが、
以下のようなコードでは左側のサブモニタで正しく動作しません。
Firefoxではどこでクリックしても最小化したり、他のウインドウでは最小化すらされません。

修正したいのですがどのようにしたものでしょうか?


; push middle button on title bar, then minimize window
~MButton::
  CoordMode, Mouse, Screen
  MouseGetPos,x,y,hwnd
  SendMessage, 0x84, 0, x|y<<16,, ahk_id %hwnd% ; WM_NCHITTEST
  If (ErrorLevel==2) ; HC_CAPTION
;    ShowSplashText(x)
    PostMessage, 0x112, 0xF020,,, ahk_id %hwnd% ; WM_SYSCOMMAND / SC_MINIMIZE
Return
389388:2009/11/22(日) 13:40:23 ID:vIbnTNjg0
なんか、サブディスプレイ側だとx座標がマイナスになるけど、
x | y <<16 で負の符号が消えるせいかもしれない。xを16bit int にすることってできないんでしょうか?
390名無しさん@お腹いっぱい。:2009/11/22(日) 13:44:35 ID:upg6kiLK0
SendMessageの前に以下の2行を追加、でいけるかな。

x += x < 0 ? 0xFFFF : 0
y += y < 0 ? 0xFFFF : 0
391名無しさん@お腹いっぱい。:2009/11/22(日) 13:45:36 ID:upg6kiLK0
>>389
たぶんそう。で >>390
392388:2009/11/22(日) 14:21:31 ID:vIbnTNjg0
POINT構造体を意識したら上手く行きました!!お騒がせしました。ありがとうございました。

; push middle button on title bar, then minimize window
~MButton::
  CoordMode, Mouse, Screen
  MouseGetPos,x,y,hwnd
  
  VarSetCapacity(point,4)
  NumPut(x, point, 0, "Short")
  NumPut(y, point, 2, "Short")
  SendMessage, 0x84, 0, NumGet(point, 0, "UInt"),, ahk_id %hwnd% ; WM_NCHITTEST
  ;ShowSplashText(NumGet(point, 0, "UInt"))
  ;ShowSplashText(x . ", ". y)
;  ShowSplashText(NumGet(point, 0, "Short") . ",  " . NumGet(point, 2, "Short"))
  If (ErrorLevel==2) ; HC_CAPTION
;    ShowSplashText("Minimize!")
    PostMessage, 0x112, 0xF020,,, ahk_id %hwnd% ; WM_SYSCOMMAND / SC_MINIMIZE
Return
393388:2009/11/22(日) 14:25:13 ID:vIbnTNjg0
>>390 >>391
うほ、入れ違いでした。
>>390でも上手く行きますね。こちらの方が簡単だw

ありがとうございました。
394名無しさん@お腹いっぱい。:2009/11/22(日) 14:29:39 ID:vIbnTNjg0
ついでなのですが、>>390はどういう意味合いなんでしょうか?
正の時はそのままで、負の時は32bit全部立っているのを足す?うーん?
395名無しさん@お腹いっぱい。:2009/11/22(日) 14:35:22 ID:vIbnTNjg0
ああやっとわかった。16bitの負の符号のbitを立てるってことかw 俺頭悪いなー
396名無しさん@お腹いっぱい。:2009/11/23(月) 01:11:30 ID:RoGtmcUO0
>>384
>- Fixed: RegEx sub-patterns.

上の方で出ていた正規表現がらみのバグがつぶされたのかな
そうだとしたらかなりよさげ
397名無しさん@お腹いっぱい。:2009/11/23(月) 01:26:28 ID:Si0ROsa40
>>382
ありがとうございます。

環境をきちんと書いていませんでした。
skkime 1.5 最新版を vista sp2 32bit で使っています。

そのスクリプトでは skkime のon/off をうまく操作できませんでした
skkime とともに入れているatok 2009 でそのスクリプトを動かしたら、
atok 2009 ならon/off を切り替えれることがわかりました

>>383
xp で問題ないのであれば、vista の環境に依存する問題ですかね
398397:2009/11/23(月) 01:27:56 ID:Si0ROsa40
追記です

試したime_func.ahkは
AutoHotkeyを流行らせるページのアップローダの
029.zip に入ってます
399名無しさん@お腹いっぱい。:2009/11/23(月) 06:01:24 ID:b8No/44E0
>>396
ちょっと試したけど直ってる。サブマッチ名に日本語つかってもきっちり怒ってくれた。

MsgBox, % RegExMatch("abcdef1234", "(?P<ほげ>[a-z]+)", $) ? $ : ErrorLevel
→ 「Compile error 42 at offset 4: syntax error in subpattern name (missing terminator)」

----

bregexp.dll(正規表現), shlwapi.dll(パス操作), msvcrt.dll(マルチバイト文字列操作), nkf32.dll(文字コード変換)
等はもう使わなくていいようになるのも近いなぁ。

でも、JIS(CP50220), EUC-JP(CP51932) は読み込みはOKだけど、書き込みはうまくいかないなぁ…
以下のスクリプトで、out.txt が0バイト。無い時は作られるし、CP932だと正常出力される。

SetWorkingDir, %A_ScriptDir%
FileEncoding, CP50220 ; JIS
FileRead, str, test.eml
MsgBox, % str
FileEncoding, CP51932 ; EUC-JP
FileAppend, %str%, out.txt

まともにつかえるようになるのは、もうちょいだな。
400名無しさん@お腹いっぱい。:2009/11/23(月) 15:25:02 ID:ISfjBIQx0
>>397
ime_func.ahkの名称がついてるのはかなり古いものだと思います
といってもやってることは >382 と同じなのでそれでダメならちょっとわからないですね。
SKKIMEはアンインストールしてしまったので今検証できませんが
XPでは動いていたと思います。

---
基本は変わらないですが、一応新しいののリンク貼っときますね。

IME.ahk (2009.07.02)
・hogeさんとこの IME_IsConverting() 入れ込み
・ソース整理、DetectHiddenWindowsのOn/Off廃止
http://www6.atwiki.jp/eamat/pub/MyScript/IME_20090703.zip
401名無しさん@お腹いっぱい。:2009/11/23(月) 21:29:35 ID:tMcdP+HH0
どなたかAHKHIDを使ってキーボードごとに設定できるスクリプトお願いします。
http://www.autohotkey.net/~TheGood/AHKHID/

APIとかわけわかんないよ。。。
402名無しさん@お腹いっぱい。:2009/11/24(火) 01:07:40 ID:Z6s8S6Im0
AHKのポップアップメニューを出すときに、ポップアップメニューがアクティブになってしまうのですが
下のウィンドウからアクティブ状態を奪わないで表示することって出来ないのでしょうか?

エクスプローラでファイル名を変更中にポップアップメニューを出した場合に
名前の変更をそのまま続けたままの状態にしたいのですが
403名無しさん@お腹いっぱい。:2009/11/24(火) 06:46:40 ID:QpmWgsP20
無理じゃないのかなぁ
ちなみにアクティブ状態もキーフォーカスも元ウィンドウのままなはずだけど
(キーだけは奪う)

メニュー出しながら名前を変える意味がよく分からないけど、
右クリすると画像のサムネイルがでる拡張でもいれてんのかね
404名無しさん@お腹いっぱい。:2009/11/24(火) 10:19:56 ID:wu7CiwDG0
gui使ってメニュー代わりのウィンドウを表示するしかないのかな
405367:2009/11/24(火) 15:17:40 ID:C1ieN64O0
>>376
激しく遅レスすみません

>>323
をしようとしています。

すでにPC-OP-RS1の制御はできるところまで来ています。

家電の赤外線も大量に調べました。

現在使いたいホットキーの数は155です。

エクセルで整理中ですが使用できるホットキー一覧のようなものってありませんでしょうか

406405:2009/11/24(火) 16:47:10 ID:C1ieN64O0
とりあえずHotKeyDefineちゃんというのを使って調べてみます。

足りるかな

407名無しさん@お腹いっぱい。:2009/11/24(火) 16:56:19 ID:BC/kOdLV0
>>323=>>367 なのか。何で>>367でそう書かないかないんだろ?
キー一覧は http://lukewarm.s101.xrea.com/KeyList.html

キートップが155あるわけじゃないだろうから、
もし機器切り替えボタンとか設置するなら、AutoHoekey_L 使うほうが圧倒的に楽。

機器が5個。^F13〜^F17を割り付けたボタンを機器切り替え、HogeFunc()が制御要の関数だと仮定。

DeviceId = 1

^F13::DeviceId:=1
; (中略)
^F17::DeviceId:=5

#If (DeviceId = 1) ; デバイス1用の割り当て
^F18::HogeFunc(param1, param2, param3, ・・・・)
^F19::HogeFunc(param1, param2, param3, ・・・・)
^F20::HogeFunc(param1, param2, param3, ・・・・)

#If (DeviceId = 2)
;   (中略)

#If (DeviceId = 5)
^F18::HogeFunc(param1, param2, param3, ・・・・)
^F19::HogeFunc(param1, param2, param3, ・・・・)
^F20::HogeFunc(param1, param2, param3, ・・・・)
408名無しさん@お腹いっぱい。:2009/11/24(火) 17:08:18 ID:C1ieN64O0
>>407

ありがとうございます。

AutoHoekey自体、まだ慣れていないもので
AutoHoekey_Lというのがあるのを知りませんでした。

GlovePIEのほうだけで機器モード切換をしようと考えていましたが
AutoHoekey_Lを使えばさらに実用的になりそうですね

409名無しさん@お腹いっぱい。:2009/11/24(火) 23:17:36 ID:xABS12D50
>>400
ありがとうございます。
xpで確認したら、きちんと動作しました。
早速それを使わせていただきます。
うまく動かなかったのはやっぱりvistaのせいだと思います。
410名無しさん@お腹いっぱい。:2009/11/25(水) 05:49:40 ID:HIR2Pk3d0
AutoHoekey_L #if を使ってキー割り当てを動的に変更したかったんだけど
それをアプリ毎に適応する方法が分からなくてずっと悩んでたんだが
英文だから忌避してたリファレンス読んでやっと分かったよ・・・

#If WinActive("ahk_class xxx") and (xxxflag = 1)
XButton1::Ctrl
XButton2::Shift
#If WinActive("ahk_class xxx") and (xxxflag = 2)
XButton1::1
XButton2::Alt

みたいに書けばアプリ毎に条件つきでショートカット切り替えられたんだね
こんな独り言残しとけば誰かの役に立つんだろうか
411名無しさん@お腹いっぱい。:2009/11/25(水) 19:51:17 ID:lTHWhpVc0
・DatAutoDL2
AutoHotKeyを使った2ちゃんねるのログの自動収集、
特定キーワードを含むレスの抽出など。
書き込み補助ツールも同梱
ttp://www.netamitan.com/tools/
412名無しさん@お腹いっぱい。:2009/11/26(木) 06:44:55 ID:2jS32+vF0
>>402-404
PAP(Pop up in Application Process)という機能のことだと思う
↓クリップボード管理ツールとかである奴だわ
ClipUtltFuncComp - ClipUtltComp
http://www.wikihouse.com/ClipUtltComp/index.php?ClipUtltFuncComp

どうやって実装するかは知らんので、クリップボード管理ツールでソース公開されているものとか参考にしたらどうだろうか。
clcl-perとか
413名無しさん@お腹いっぱい。:2009/11/26(木) 11:53:35 ID:qyXxuUu10
windowsキーを押すためにはどうしたらいいんでしょうか?

^z::#
^z::{LWIN}

もだめでした
414名無しさん@お腹いっぱい。:2009/11/26(木) 11:58:19 ID:qyXxuUu10
訂正

^z::Send, #
^z::Send, {LWIN}
415名無しさん@お腹いっぱい。:2009/11/26(木) 12:12:35 ID:eBz/F13d0
^z::Send, {Ctrl Up}{LWin}{Ctrl Down}
416名無しさん@お腹いっぱい。:2009/11/26(木) 12:22:46 ID:qyXxuUu10
>>415
ありがとうございます。できましたが

なぜそのような指定になるのでしょうか?

Winキーだけですか?
417名無しさん@お腹いっぱい。:2009/11/26(木) 12:26:32 ID:6iBaMVqu0
>>3
Q2
418名無しさん@お腹いっぱい。:2009/11/26(木) 12:29:49 ID:eBz/F13d0
正直よく分からんw

Ctrl押下解除を待てば動くんで>>415みたくしたんだけど、
^z::
KeyWait, Ctrl
Send, {LWin}
Return

↓が動かない。不思議。
^z::
Send, {Ctrl Up}
Send, {LWin}
Send, {Ctrl Down}
Return
419名無しさん@お腹いっぱい。:2009/11/26(木) 12:31:31 ID:eBz/F13d0
>>417
いや、>>3 Q2なら、 Send, {LWin} で動くっしょ。
420名無しさん@お腹いっぱい。:2009/11/26(木) 20:10:34 ID:gpZcIW8u0
YYYYMMDD形式の日付で、その日付の曜日を調べるにはどうしたらいいでしょうか。
A_WDayは今現在の曜日を調べられますが、これと逆のことがやりたいです。
421名無しさん@お腹いっぱい。:2009/11/26(木) 20:12:06 ID:xEoXmZc60
× これと逆のこと
○ 任意の日付を与えて、その日の曜日を調べたい

自己レスです。
422名無しさん@お腹いっぱい。:2009/11/26(木) 20:28:02 ID:SI9WSgHCP
Date := "20091127"
FormatTime DayOfWeek, %Date%, WDay
423名無しさん@お腹いっぱい。:2009/11/26(木) 21:43:45 ID:kUasqUZh0
Unicode版の件
[Thu, 26 Nov 2009 09:51:33 +0000]
- Added: Find the library in the sub-directory "Lib" of the directory contains the main script (A_ScriptDir).

これいいなぁ、便利だ。
"Lib"サブフォルダにある関数ライブラリスクリプトの自動検索機能。
拾ったライブラリを"Lib"フォルダにぶち込めばいいだけなんでかなり楽。

以下の構成で、"test.ahk" を実行すれば自動で関数 "Hoge_fuga()" 探して "Hoge.ahk" をインクルードしてくれる。

+ [A_ScriptDir]
 + test.ahk
 +[Lib]
  + Hoge.ahk

----- test. ahk -----
Hoge_fuga()
------------------

----- Hoge.ahk -----
Hoge_fuga() {
 MsgBox, %A_LineFile%
}
------------------
424名無しさん@お腹いっぱい。:2009/11/26(木) 21:50:26 ID:msGPBxGK0
>>422
Thx!できました。
425名無しさん@お腹いっぱい。:2009/11/26(木) 22:29:15 ID:a3xQSbgR0
>>423
これって通常バージョンにも無かったっけ?
426名無しさん@お腹いっぱい。:2009/11/26(木) 23:23:20 ID:kUasqUZh0
「%A_MyDocuments%\AutoHotkey\lib」 か 「{AutoHotkey.exeのフォルダ}\lib」 のものだけが対象。
427名無しさん@お腹いっぱい。:2009/11/26(木) 23:34:01 ID:J8WdDNq20
Lib\_作りかけ や Lib\_NotUse とかのサブフォルダ掘ってる身としては困るがな(;´Д`)

個人的にはIncludeは明示的にやりたい派
自動Includeよりディレクトリパスを省略できるLIBフォルダが欲しい。
cの #include <hoge.h> みたいなの

それか
#Include %ScriptDir%\Hoge.ahk
ってやったら LIB\Hoge.ahk は無視してくれるとかl。
先に見つかった方を優先してDuplicationエラーにしないとか。
汎用関数含んだスクリプトを 配布するときいつも面倒臭い
428名無しさん@お腹いっぱい。:2009/11/26(木) 23:39:36 ID:J8WdDNq20
あなんか勘違いしてた。
>426のLIB以下のサブフォルダ、じゃなくて
%A_ScriptDir%\Lib の自動検索機能なのか。

Duplicationエラーさえおこらなきゃ配布時の問題は解決できそうだね
429名無しさん@お腹いっぱい。:2009/11/26(木) 23:41:17 ID:8gOB5iHS0
だよなぁ。>配布時に面倒

俺は配布物を配るとき、コンパイルしたあとに自分で逆コンパイルしてみて、
Libフォルダの中のどれがインクルードされてるのか、毎回確認してる。

やべぇこれは恥ずかしい・・・と思うようなコードが含まれていたら、
それをはずす作業で別コードを作ってるうちに疲れて公開を挫折する。

最初から配布しても恥ずかしく無いレベルに仕上げておけば問題ないのだろうけどね。
性格的にムリだ
430名無しさん@お腹いっぱい。:2009/11/26(木) 23:49:29 ID:kUasqUZh0
検索順序は↓の通りなんで、ごちゃ混ぜのライブラリじゃなきゃ重複は起きにくいと思う。
(本家 及び lexikos版は (2),(3)のみ)

(1) %A_ScriptDir%\Lib
(2) %A_MyDocuments%\AutoHotkey\lib
(3) {AutoHotkey.exeのフォルダ}\lib
431名無しさん@お腹いっぱい。:2009/11/26(木) 23:57:25 ID:3hKOrwaX0
>>430
これなら通常の用途でもautohotkeyのunicode版を使う価値がありそうだね
それにしてもこのスレではunicode版やlexikos版の情報が早くて
とても参考になるわ
432名無しさん@お腹いっぱい。:2009/11/27(金) 02:26:45 ID:84l1XkkP0
コマンドプロンプトの画面で入力するときに
IMEのon/offを知りたいのですが
どうすれば取得出来ますか?
何かライブラリはあるでしょうか。
433名無しさん@お腹いっぱい。:2009/11/27(金) 21:55:45 ID:DMEgwFtIP
1KB程度の短いテキストファイルを読んだ後、重複読み込みを防止するためにファイルを
削除したいのですが、下記のように、微妙なタイミングで挙動が異なります。

これだと変数に代入されず、期待した動作にならない
 file=C:\test.txt
 fileread,ret_data,%file%
 filedelete,%file%

あいだにウエイトを入れると OK になる
 file=C:\test.txt
 fileread,ret_data,%file%
 sleep,1000
 filedelete,%file%

sleep,1000 で、とりあえず動いていますが、
万が一高負荷で読み取れなかったりしたら困るので、
もうすこし確実に動作させる方法を知りたいです。

ファイルを読んで、変数として読み込まれたことを確認した後で削除するには、
どう書くのがよいでしょうか。
434名無しさん@お腹いっぱい。:2009/11/27(金) 22:12:09 ID:SeCgBnAh0
file=C:\test.txt
fileread,ret_data,%file%
IfEqual, Errorlevel, 0, filedelete,%file%
435名無しさん@お腹いっぱい。:2009/11/27(金) 22:42:14 ID:DMEgwFtIP
>>434
ありがとうございます・・・が!読めなかった原因は別にあったことが判明しました。

test.txtに格納された内容の文字コードがUnicodeのときに、
結果が正しく読み取れない状態になる、というオチでした。

エディタがUnicode対応で自動で変換して表示していたおかげで、
テストメッセージの内容を差し替えるまでまったく気づきませんでした。

これもUnicode版のリリースとともに、意識しないですむようになるのかな。
436名無しさん@お腹いっぱい。:2009/11/27(金) 23:01:46 ID:i1ZwdGHo0
まだ開発版だけど、現状でも動くよ。
ただし、文字エンコードを明示しないと駄目。

SetWorkingDir, %A_ScriptDir%
FileEncoding, UTF-16 ; コマンドで扱うコードを明示
FileRead, data, data.txt
MsgBox, % data
437名無しさん@お腹いっぱい。:2009/11/28(土) 01:57:12 ID:Ni8ykrbR0
sciteのフォントが全然変わらないんだけど、どうして?これではダメなの?デフォは小さすぎて目が痛くなります。

code.page=932
character.set=128
if PLAT_WIN
ffont.base=font:MS ゴシック,size:18
font.small=font:MS ゴシック,size:18
font.comment=font:MS ゴシック,size:18
font.code.comment.box=$(font.comment)
font.code.comment.line=$(font.comment)
font.code.comment.doc=$(font.comment)
font.text=font:MS ゴシック,size:18
font.text.comment=font:MS ゴシック,size:18
font.embedded.base=font:MS ゴシック,size18
font.embedded.comment=font:MS ゴシック,size:18
font.monospace=font:MS ゴシック,size:18
font.vbs=font:Lucida Sans Unicode,size:18
438名無しさん@お腹いっぱい。:2009/11/28(土) 02:16:34 ID:xVBB/6TEP
唐突になにいってんの?
変数定義しただけで、いったいなにがやりたいんだか・・・
439名無しさん@お腹いっぱい。:2009/11/28(土) 02:26:35 ID:Ni8ykrbR0
これだけじゃフォントが変わらないのですか?
ググったら、この手の例文がいくつかあったのでコピペしたんですけど、あの読みにくいフォントのままで困っています。
こんなのをお手本にしたんですけど、変化がなくて…
http://hammm.blog21.fc2.com/blog-entry-31.html
440名無しさん@お腹いっぱい。:2009/11/28(土) 02:37:38 ID:vHLdVna+0
>>439
何でここで聞くの?
441名無しさん@お腹いっぱい。:2009/11/28(土) 02:42:41 ID:xVBB/6TEP
>>439
で、そのリンク先のソフトとAHKとで、何の関係があるんだ?
442名無しさん@お腹いっぱい。:2009/11/28(土) 03:33:57 ID:U0lXYIo+0
>>440
>>441
これ知らない人が多いのに驚いたw
http://www.autohotkey.net/~fincs/SciTE4AutoHotkey_2/web/
443名無しさん@お腹いっぱい。:2009/11/28(土) 07:41:02 ID:24u62XnL0
関連は無くはないだろうけど、誰もがつかってるわけじゃない。
きちんとネタ振りしないと。
データ定義だけ見せられても、エスパースレでもこれじゃ無理だよ。
444名無しさん@お腹いっぱい。:2009/11/28(土) 08:52:17 ID:zT6qWBdLP
アナタは知らなくても、他の誰かが知っていることもあるんだし、即レスで否定しないでも、
しばらく待って、誰もコメントできない状態になってから、そのようにアドバイスすればいい話
それじゃ、無知を晒してるだけだよ。

ところで、話題はsciteに戻るんだけど、
sciteって、>>437みたいな定義を設定ファイルに書くんだよね。

if PLAT_WINの下の行が ffont になってるからじゃない?
>>ffont.base=font:MS ゴシック,size:18
 ^^^^^^
それでもダメなら、その設定を貼り付けている設定ファイル(通常はGlobal Optionだと思うけど)、貼り付ける場所が間違っているとか。
先頭に貼り付けても、後続の設定で上書きされちゃうから、
既存の設定を消去するか、もしくは最後に貼り付けないとダメ。
445名無しさん@お腹いっぱい。:2009/11/28(土) 09:10:53 ID:N9XHLbx+0
SciTEスレでも立ててそっちでやりなよ
AHKのみに関連する話題でもないし、ここでやるには無駄が多すぎる
446名無しさん@お腹いっぱい。:2009/11/28(土) 09:13:49 ID:zT6qWBdLP
日本じゃマイナーでスレも無いし、フォーラムでscite for ahk(>>442)配布してるんだから、少しくらい大目にみてくれよw
あなた方が無駄にレスしなきゃ、数レスで終わるんだし
447名無しさん@お腹いっぱい。:2009/11/28(土) 09:16:28 ID:N9XHLbx+0
だからこそ話題があるならスレを立てとけば、あとから試す奴が助かるじゃないか
このスレでやって流れたらそれで終わり、無駄過ぎる
448名無しさん@お腹いっぱい。:2009/11/28(土) 09:20:10 ID:24u62XnL0
淡々と答えだけ書けばいいのに
449名無しさん@お腹いっぱい。:2009/11/28(土) 09:38:04 ID:46oJSxCE0
>>439
ahk.style.properties

# Base (background, base font) を
サイズ指定こみで変更してみて下さい。

どうやらこっちのプロパティファイルが優先されるみたいです。
450名無しさん@お腹いっぱい。:2009/11/28(土) 09:53:58 ID:zT6qWBdLP
>>447
別スレでやれという指摘はごもっともだと思います。
大切なスレを汚してしまい大変申し訳ありませんでした。
これで終了とさせてください。

ですが、最後に>>448さんにだけ一言。
あなたが>>443で排他的な態度を取らなかったならば、私も答だけを書いていたと思います。
「淡々と答だけを」という点では、お互い様です。 あなたにだけは言われたくありませんでしたね。
451名無しさん@お腹いっぱい。:2009/11/28(土) 10:02:44 ID:24u62XnL0
何を憤っているか知らんけど、質問内容が唐突すぎないようにしろよって書いただけじゃん

ぶっちゃけね、「秀丸やEmEditorの使い方押しえれ!」っていってるのと変わらんのよ。
それを自覚して慎ましくやりゃ誰も文句いわんよ。
452名無しさん@お腹いっぱい。:2009/11/28(土) 10:09:04 ID:46oJSxCE0
>>450
scite じゃなくて SciTE4AutoHotkey についての質問ならそれほど問題にはならなかったような気が。

それから>>449 は SciTE4AutoHotkeyの日本語化パック使用で >>444 のタイポなしでのものでした。
- このレスも邪魔だって言われるかもしれないけど。とりあえず自分のレスはこれで終わります。
453名無しさん@お腹いっぱい。:2009/11/28(土) 10:23:33 ID:UsA20pUA0
このスレでSciTEと言われたら普通SciTE4AHKのことじゃね
秀丸やEmの話題と同じと言ってるヤツはモグリ
454452:2009/11/28(土) 10:57:22 ID:46oJSxCE0
『自分のレスはこれで終わります』とか言ってて何なんですが、
>>453 をみて自分がずいぶんな思い込みをしてたので訂正。
SciTE4AutoHotkeyって後発のプロジェクトだったのをすっかり失念してました。
SciTE=SciTE4AHKだと脳内変換してました。
ttp://www.autohotkey.com/forum/topic9656.html
ttp://www.autohotkey.com/forum/topic6886.html
>>449>>452 は間の抜けたレスでしたね。すいません。
455名無しさん@お腹いっぱい。:2009/11/28(土) 11:28:27 ID:zb9U0ck80
SciTEもSciTE4AutoHotkeyも存在は知ってたけど、いきなりsciteて書かれても分からんよ
常用してないエディタの正式名称やスペルなんて覚えてないし
字面のイメージでしか認識してないから
せめて小文字じゃなくてSciTE て書いてくれてたらそんなエディタあったなって思い至るけど
456名無しさん@お腹いっぱい。:2009/11/28(土) 12:35:29 ID:Z6afaOPd0
分からなかったら、とりあえずスルーしてればいいんじゃね

そりゃ詳しく書くにこしたことはないけど、
一方で実際にSciTEのことだと分かって回答してる人もいるわけだし

SciTEのことを知らなかった、気付かなかった人が一方的に騒いでるようにしか見えないんだけど
457名無しさん@お腹いっぱい。:2009/11/28(土) 13:15:58 ID:zb9U0ck80

分からないAHKネタなら「スルーしろ」でいいけど、そもそもAHKとの関連性が
見いだせなかったのが今回の問題点だろ。質問主自身も非を認めてる。
見当違い(に思われても仕方ない)書き込みに、「スレ違い」って指摘が出るのは普通だし
それを「SciTE4AHK知らないなんてモグリ」なんて煽られた連中が哀れだって話だよ。

このスレ、以前から必要以上に住人にエスパーやスルー能力を求める人がいるけどさ
質問する側にきちんと趣旨が分かるように書けって言うのは普通のことだろが。
458名無しさん@お腹いっぱい。:2009/11/28(土) 13:41:10 ID:xVBB/6TEP
たしかに俺はそのソフトの存在を知らなかったが、一番の問題は、
>>437が、ソフトの質問なのか、AHKの質問なのか、はてや単にソフトに対する愚痴なのか、
第三者から見て、まったく意味のわからない文章だということ。

しかも 「どうして?」 とか 「ダメなの?」 とか感情ばっかりで質問の内容が不明確で、
そのあとでフォローすべきタイミング(>>439)があったのに、相変わらず感情に任せている。
最低限、AHKスクリプトを編集する**というソフトの設定で困った と書いておけばよかった。

このスレは、もうずっと前から、スクリプトのテクや使い方で情報交流している流れだから、
そこへAHK以外の設定ファイルを唐突に書かれても、意味が通じない人がほとんどだろう。

多数の人が見ている中で、質問と回答で成り立っている当スレでは、
わかりやすい質問と、汎用的に応用できる回答を目指すことで、うまく機能する。

ちなみに、AHK以外のソフトであっても、困ってることを最初にちゃんと書けば、
「その困りごとを、いかにしてAHKで解決するのか」 という趣旨に変わるため、
ほとんどの場合はスレ違いにはならない。

例。このスレのちょっと前に、特定の絵描きソフトのショートカットの話があったが、
質問者が 「こういう状況で困っているから回避策は無いか」 と宣言していた。
だからそのソフトを知らない人でも混乱しなかったし、わからない人はスルーした。
興味のある人は回避策をレスした。

見ていただけの人は 「ふーん、絵描きソフトって癖があるのだな」 と記憶に残った。
これが本来の正常な流れでしょ。

今回の該当者は、質問の仕方がひどすぎて他人を混乱させた。これは反省すべきだろう。
459名無しさん@お腹いっぱい。:2009/11/28(土) 13:43:09 ID:N9XHLbx+0
最早掘り下げる話題でもない、誰が悪かろうが何だろうが既に事は終わった
460名無しさん@お腹いっぱい。:2009/11/28(土) 14:29:40 ID:U0lXYIo+0
質問したものです。こんなに紛糾するとは思いませんでした。すんませんでした。
一般のSciTE用の単独スレ自体ない状態なので、当面はこのスレでSciTE4AutoHotKey関連の質問をさせていただけると助かりますがいかがでしょうか?

461名無しさん@お腹いっぱい。:2009/11/28(土) 15:11:37 ID:xVBB/6TEP
つまり 質問者 ID:Ni8ykrbR0 = ID:U0lXYIo+0(賛同者がいないからID変えて煽り+今頃お詫び)

さらには
 P2をつかって別人を装って、質問の回答を得ようとする+煽り(ID:zT6qWBdLP)
 ID変わったのを忘れたのか、そのままP2のIDで>>450で詫びてるチョンボ

ということか。

>あなた方が無駄にレスしなきゃ、数レスで終わるんだし

を返すなら、おまえが感情任せのクソ文章を書かなければ、誰も不愉快にならなかった
462名無しさん@お腹いっぱい。:2009/11/28(土) 15:19:23 ID:U0lXYIo+0
>>461
俺は事務所で質問したときにID:Ni8ykrbR0だった。家に帰ってからID:U0lXYIo+0だ。
あとは別人。社会人だから別人を装うほど暇じゃないぞ。
463名無しさん@お腹いっぱい。:2009/11/28(土) 15:34:18 ID:46oJSxCE0
>>460
まずは >>437 の件
(SciTE4AutoHotkeyなら)Fontサイズの問題は >>449 で解決しませんでしたか?
他の方法は…一手間余分にかかるけど
SciTEUser.propertiesの
font.monospace=font を好みのフォント(サイズ)で設定しておいて
Ctrl+F11 で切り替えるとか かなぁ。他にも方法はあるかもしれませんが。

>当面はこのスレでSciTE4AutoHotKey関連の質問を
単発だったらまだしも、流石にそれはちょっと厳しいんじゃないスか?
SciTE4AutoHotkeyだったら日本語化パックに"Localize-ja">"SciTEDocJa"が同梱されてるんでそれを参考に設定してみて下さい、ってもう読んでるのかな?
あとは
SciTEDoc
ttp://www.scintilla.org/SciTEDoc.html
SciTE 日本語翻訳
ttp://h12u.com/scixx/about162plusjpn.html
SciTE4AutoHotkey v2 Stable - Released.
ttp://www.autohotkey.com/forum/topic41503.html
とか。

なんていうか 頑張って下さい。
464名無しさん@お腹いっぱい。:2009/11/28(土) 15:58:57 ID:mZXjDfb60
流れを読まずに。俺的Unicode版のまとめ(1 of 2)

■ スクリプトファイル
Unicode(UTF-8 or UTF-16LE with BOM)または、OSの標準コードページのどちらでも記述可能。
実行ファイル名を変更することでスクリプト読み込み時のコードページを変更できる。
(a) "AutoHotkeyU.exe" : UTF-8 で読み込み
(b) "AutoHotkey.exe" : システムのコードページで読み込み(日本語WinだとシフトJIS)

※1 BOMがある場合は UTF-16 LE と見なす
※2 (b)の場合従来の「`(0x60)」をエスケープした形式は不要となる。
 表記どおりのままとなるので >>6のQ1 の対処法は外す必要がある。

■ スクリプト内での文字の扱い
全角・半角を問わず全ての文字は同等に文字単位で評価される。
・文字列長 (※1)
  StringLen, StrLen()
・文字位置/文字区切り
  StringGetPos, SubStr(), StringSplit, Loop,PARSE(※2), String(Trim)Left/Right
・マッチング・置換
  IfInString, If var in 〜, StringReplace, RegExMatch, RegExReplace
・文字コードはユニコード
  Asc(), Chr()
・ コードページを指定して変数内の文字コードを変更可能に
  TransForm

※1 全/半角混在文字列のバイト長を得ることで、「見た目上の長さ」を取得しているときは注意
  また、メインウィンドウで開いた変数表示(ListVars)での表記も文字単位となる
> hoge[5 of 63]: あいうえお
※2 Loop, PARSE で区切り文字無しの場合は、文字毎にループが回る
465名無しさん@お腹いっぱい。:2009/11/28(土) 16:00:05 ID:mZXjDfb60
俺的Unicode版のまとめ(2 of 2)

■ ファイルの取扱い
テキストファイルは特に指定をしなければOSのコードページ(シフトJIS)で読み込み可能(従来通り)。
"FileEncoding"(新設) コマンドを利用することで読み書き時のエンコーディングを指定可能に。(※1)

オブジェクト(クラス) "File" が追加された。
アクセスモード(読専、追記、BOMの取扱など)を指定してファイルを開く事が出来る。
ファイルオブジェクトに対して、読み書き、シーク、EOF検知などができる。

バイナリ読み書きが可能になった。

※1 読み込まれた段階で内部ではユニコードになっているので注意。

■ DllCall
・ user32/kernel32/comctl32/gdi32内の関数ででANSI版とUnicde版があるもので
  コール時に末尾の指定が無い時はUnicode版を利用する。
  DllCall("DeleteFile", "UInt", &filename)
  → "DeleteFileW"をコール(従来版から変更しなくていい)
・ 文字型 "Str" はユニコード扱い。ANSI文字列を扱いたい場合は、新設の "AStr" を使う。
  明示的にユニコードにしたい場合は新設の "WStr" を使う。

■ 64ビット対応
・ ポインタで使う整数精度が何バイトかを知ることが出来る PtrSize() 関数を新設。
・ DllCall で扱うポインタ(従来はUIntで代用)の授受に "IntPtr" 型を新設。

■ その他
・ 16進数の出力内容で、大文字/小文字を選択可能に
・ ビルトイン変数 "A_OSVersion" で Win7 対応
・ ビルトイン変数 "A_IsUnicode"(新設) でユニコード版かどうかを知ることが可能に
466名無しさん@お腹いっぱい。:2009/11/28(土) 16:27:25 ID:mZXjDfb60
連投スマソ。もうちょっと追加。

■ 正規表現
・内部処理がユニコードになったので、シフトJISで0x5cを含む文字(>>6 Q2下段)であっても
 正規表現のエスケープ記号(\)にはマッチしなくなった。
・文字コードの範囲指定で(ひらがな→/[ぁ-ゞー]+/)などのマッチングが可能に

■ その他2
・(新設)「%A_ScriptDir%\Lib」にある関数ライブラリスクリプトの自動検索(>>423-431)
・AutoHotkey_Lの機能(>>8)

----
新機能で色々遊んでみたスクリプト

; 文字列を現キャレット位置に流し込む(Clipboardを介さない)
#UseHook
#1::StrSendr("ほげほげ")
StrSendr(str) {
 tmp := A_FormatInteger
 SetFormat, Integer, Hex
 Loop, PARSE, str
  Send, % "{U+" . Asc(A_LoopField) . "}"
 SetFormat, Integer, %tmp%
}

; AutoHotkey_L の Regular expression callouts と併用
RegExMatch(address, "^(.+?)([都道府県])[\s ]*(.+?)([市区町村])(.+)$(?CFunc1)")
Func1(m) {
MsgBox,%m1% %m2%`n%m3% %m4%`n%m5%
}
467名無しさん@お腹いっぱい。:2009/11/28(土) 16:31:44 ID:QplHx+If0
ウィンドウサイズや位置を固定させるコマンドありませんか?
468名無しさん@お腹いっぱい。:2009/11/28(土) 16:51:15 ID:mZXjDfb60
>>467
「ウィンドウサイズや位置を固定させる」ってのは以下のどっちだろうか

(A) あるソフトを起動した時にいつも同じ位置・サイズで表示したい
ショートカットの代わりにAutoHotkey経由で起動させて、
ウィンドウが出たら位置を移動する、って方法で擬似的に可能

; 例) メモ帳を起動したら指定位置・サイズに移動
Run, notepad.exe,,, pid
WinWait, ahk_class Notepad ahk_pid %pid%
WinMove,,, 100, 100, 600, 400

(B)ソフト起動後のウィンドウをマウスやキーボードで操作してもウィンドウが動かないようにしたい
元々あるコマンドをいくつか組み合わせるだけでは無理。

・ グローバルフックを行って、ウィンドウ移動のメッセージを全部捨てれば可能
 → 完璧に動作するだろうけど、外部DLLが必要など凄くめんどう
・ タイトルバーを掴んでのマウスで移動を何とか避けられればい
 → WM_NCHITTESTをマウス直下に送ってHTCAPTION(0x02)の場合にLButtonを殺す
469名無しさん@お腹いっぱい。:2009/11/28(土) 16:56:49 ID:mZXjDfb60
もう1個。

(C) もし移動してしまっても、所定位置にすぐ戻ればいい
タイマーで該当ウィンドウを所定位置・サイズにし続けるコマンドを発行し続ける

#Persistent
SetTimer, Timer1, On
Return
Timer1:
IfWInExist, ahk_class Notepad
WinMove,,, 100, 100, 600, 400
Return
470名無しさん@お腹いっぱい。:2009/11/28(土) 17:25:16 ID:zT6qWBdLP
俺は自作自演扱いになってるようだね。質問者の方には大変申し訳ないことをしたと思う。

>>450をちゃんと読んでもらえれば、その中に>>444で回答を書いていることに言及しているのが分かると思う。
口調を丁寧にしたのは、スレ違いの指摘は正当なものだと思ったので、ちゃんと謝罪すべきと思ったから。

質問は分かりやすく、詳細に書けというあなた方の指摘は正しいし、それに文句を言うつもりは全く無い。

だが、俺には当の質問はそれほど意味不明なものだとは思えなかったし、
「詳しく書け」と「何の関係がある」と言うほどのものでもないと思った。
分かる人には分かるだろうし、何のことか分からないなら黙っていればいいのに、とも思った。
かえって質問者への敷居を高くしてるだけにしか見えなかった。

>あなた方が無駄にレスしなきゃ、数レスで終わるんだし
これは感情まかせでも何でもない。
あなた方が「何のことか分からない」と無駄にレスをつけなければ、普通に誰かが回答して終わってたと思う。

もはや見解の相違としか思えないので、これ以上の議論は不毛だと思う。
だが、質問者が誤解されたままというのは申し訳ないので、本当の最後として書かせてもらった。
471名無しさん@お腹いっぱい。:2009/11/28(土) 17:34:37 ID:mZXjDfb60
なげーよ。スレ違い。
472名無しさん@お腹いっぱい。:2009/11/28(土) 18:01:09 ID:xVBB/6TEP
>>462
ならなぜ>>442で別人を装ったんだ?

>>442で「IDちがいますがこのリンク先に書いてあるソフトです」とでも
書けば誤解が無かったし、ここまでスレを混乱させずに済んだはずだろ。

というか通常はそんなことをわざわざ書かなくても話は通じるし問題も無いが、
あたかも別人であるかのような書き方で「これを知らないやつがいて驚いた」
みたいに質問者を擁護する文を、自分自身で書いた理由が不明。

この理由が明確にならない限り、悪意に満ちた自演と捕らえられても仕方ない。
自分の犯した失態を、自演してまでスレを混乱させてごまかす気なら、
もうそれは立派な妨害行為だから、もう二度と参加するな。
473名無しさん@お腹いっぱい。:2009/11/28(土) 18:37:49 ID:YpnRIJZz0
Unicode版とL版そのうち統合するのかな?
474名無しさん@お腹いっぱい。:2009/11/28(土) 18:46:17 ID:mZXjDfb60
>>473
もうしてる。
ファイルオブジェクトとか作ってるし、もう切り離せないんじゃないかな。
475名無しさん@お腹いっぱい。:2009/11/28(土) 18:48:55 ID:os1KOhK60
俺が「Autohotkey_ひまわり」作るから少し待て
476名無しさん@お腹いっぱい。:2009/11/29(日) 02:02:53 ID:iB2nlpEc0
>>469
ありがとうございます。
Bを試してみます。
477名無しさん@お腹いっぱい。:2009/11/29(日) 04:49:46 ID:JxrO7rna0
使い始めたばかりでテンプレにある症状と同じかはわかりませんが
Ctrlキーが押しっぱなしになる原因が自分の場合ですがわかりました

~RCtrl:: a ;文字は特に何でも良い
~Ctrl:: a

上のどちらかををキーマップをしてるときに
外部のアプリケーションからCtrlキーが送られるとCtrlキーが押しっぱなしになるみたいです
自分の場合では、マウ筋からウィドウを閉じるCtrl+Wキーを送ったり
CLCLからCtrl+Vでの貼り付けを行うと必ず再現します
RCtrlキーを押すと直ります
478名無しさん@お腹いっぱい。:2009/11/29(日) 11:12:08 ID:bawCMB8i0
教えてください
MouseGesture.ahkを使っています
ホイール回転↓で「その場スクロール」モードに入り
ホイール回転↑か他のボタン押下で「その場スクロール」から抜けたいのですが
どのように設定したら良いでしょうか?
479名無しさん@お腹いっぱい。:2009/11/29(日) 13:23:24 ID:yIVISl7M0
>>478
Loop{
 If GetKeyState("Lbutton","P")
  Break
 MG_InstantScroll()
}

これだと左クリックでスクロール解除
480名無しさん@お腹いっぱい。:2009/11/29(日) 14:12:33 ID:i/CZXmMn0
>>477
うお、長年マウ筋にCLCLと一緒に使ってたんだが気付かなかった
これでたまにctrlが押しっぱなしになるっていう長年の疑問が解けたよ!教えてくれてありがとう!
481478:2009/11/29(日) 14:47:19 ID:bawCMB8i0
>>479
早速のレスありがとうございました。
希望通りの動作になりました!
ただ、マウ筋のフリースクロールの代わりにしようと思っていたのですが
意外とその場スクロールが適用できるアプリって少ないんですね・・・
フリースクロールだけのためにマウ筋起動しておくのも何だし、
その場スクロールを幅広く適用できる何か良い方法はないでしょうか?
482名無しさん@お腹いっぱい。:2009/11/29(日) 14:57:32 ID:NSRLB4Rr0
Unicode版にSC.bin 付き来たー。
そろそろ乗り換えかな

ttp://www.autohotkey.com/forum/viewtopic.php?t=50485
483名無しさん@お腹いっぱい。:2009/11/29(日) 15:13:15 ID:/GG8d2tr0
SC.binって何?
484名無しさん@お腹いっぱい。:2009/11/29(日) 15:22:41 ID:NSRLB4Rr0
コンパイルの時に必要なおまじないファイル。本家とLexikos版とUnicode版でそれぞれ違う。

対応する AutoHotkeySC.bin をCompilerフォルダにぶち込めば、
派生版のスクリプトても問題なくコンパイル可能になる。

ここ( ttp://www.autohotkey.com/forum/viewtopic.php?t=22975 )のCompile_AHK II を使えば
コンパイル毎にAutoHotkeySC.binを切り替えることもできるよ。
485名無しさん@お腹いっぱい。:2009/11/29(日) 15:26:52 ID:/GG8d2tr0
>>484
なるほどー
ありがとう
486名無しさん@お腹いっぱい。:2009/11/29(日) 18:22:10 ID:y4Rd1M5n0
ポップアップメニュー形のランチャを作ってみたいのですが、
一例を示していただけないでしょうか?
487名無しさん@お腹いっぱい。:2009/11/29(日) 18:52:51 ID:8RGsPRck0
AHKのメニューでランチャ作るのはめんどいよ
ポチエスかShorterあたり使うほうが楽
488名無しさん@お腹いっぱい。:2009/11/29(日) 19:18:43 ID:NSRLB4Rr0
>>486
ちょーてきとーだけど。
スクリプトあるフォルダに"App"フォルダを作ってメニューに表示したいショートカットをぶち込む
Pauseでメニュー表示

#NoEnv
#SingleInstance, Force
App_Dir = %A_ScriptDir%\App
Menu, M1, Add ;
Pause::
 Menu, M1, DeleteAll
 Loop, %App_Dir%\*.lnk
 {
  SplitPath, A_LoopFileName,,,, name
  Menu, M1, Add, %name%, LaunchApp
 }
 Menu, M1, Show
 Return
LaunchApp:
 Run, open %App_Dir%\%A_ThisMenuItem%.lnk
 Return
489名無しさん@お腹いっぱい。:2009/11/29(日) 19:26:31 ID:y4Rd1M5n0
>>487
コメントどうもです。
shorter使ってるんですが、64bit非対応なんで今のうちに移行すべきと思いまして。

>>488
ありがとうございます。今から試してみます。
490名無しさん@お腹いっぱい。:2009/11/29(日) 19:29:26 ID:5L/0/Wrn0
>>482
コンパイルしても動かない・・・。
491名無しさん@お腹いっぱい。:2009/11/29(日) 19:50:24 ID:y4Rd1M5n0
>>488
無事動きました!
内容は自分には高度なんで、勉強して自分なりに改造してみます。
ありがとうございました。
492名無しさん@お腹いっぱい。:2009/11/29(日) 21:26:09 ID:WNUa6UZa0
shorterもどきなら流行らせるページの掲示板かどこかに完成品があったはず
493名無しさん@お腹いっぱい。:2009/11/29(日) 22:05:48 ID:hSx2UTuO0
>>482
おお、遂にきたか
494名無しさん@お腹いっぱい。:2009/11/29(日) 22:19:32 ID:q/T8dqXP0
AHKのメニューは同じ名前を使うと怒られるから
ショーターの代わりにはなんなかったな
階層を再現するのも面倒くさかったし…(つーかできなかった)
495名無しさん@お腹いっぱい。:2009/11/30(月) 00:07:06 ID:ZnapzAS40
>>494
そうそう、あとアイコン表示できないのが残念すぎる。
AutoHotkey_Lはメニューアイコン表示できるみたいだから、統合Unicode版には期待

iniファイルからメニューを作成し、表示するスクリプト
一応階層化メニュー対応
http://www6.atwiki.jp/eamat/pub/MyScript/iMenu.zip
496名無しさん@お腹いっぱい。:2009/11/30(月) 00:18:25 ID:tZIl2zVj0
オブジェクトがサポートされたんだから
そのうち無名関数とかも無茶な文体で追加してくれるはず
497名無しさん@お腹いっぱい。:2009/11/30(月) 00:46:02 ID:noO16KcW0
階層化は関数の再帰呼び出しでできた。
1レスに納めるのの無理やり感は否めない。

#NoTrayIcon
Menu, % CreateMenu(A_Programs , "M1"), Show
Return
CreateMenu(dir, menu_name) {
 local name, count
 count:=0
 Loop, %dir%\*.*, 2
 {
  count++
  SplitPath, A_LoopFileName,,,,name
  Menu, %menu_name%, Add, %name%, % ":" CreateMenu(A_LoopFileFullPath, menu_name . "_" . count)
 }
 Loop, %dir%\*.lnk, 0, 0
 {
  count++
  %menu_name%_%count% := A_LoopFileFullPath
  SplitPath, A_LoopFileName,,,,name
  Menu, %menu_name%, Add, %name%, ExecLink
 }
 If (count<1) {
  Menu, %menu_name%, Add, (none), Dummy
  Menu, %menu_name%, Disable, (none)
 }
 return menu_name
}
ExecLink:
 Run, % %A_ThisMenu%_%A_ThisMenuItemPos%
Dummy:
 Return
498名無しさん@お腹いっぱい。:2009/11/30(月) 01:25:21 ID:HX9CLYc+0
return

Return
とかがすごく気になる俺ガイル
499名無しさん@お腹いっぱい。:2009/11/30(月) 02:06:26 ID:PoMg2lvw0
関数やコマンドは一部を大文字にして、変数は全部小文字
とかは自分で決めるものらしいけども、ある程度決まってた方が
人のを読むとき読みやすいんで、確かにみんなどうしてるんでしょ
500名無しさん@お腹いっぱい。:2009/11/30(月) 03:54:59 ID:DabK3KaV0
>>474
横からだけど、ほんとだ。
プロセス詳細が AutoHotkey_L (Unicode) になってた。
501名無しさん@お腹いっぱい。:2009/11/30(月) 05:52:17 ID:obXfmaQM0
久々に来たら、ものすげー盛り上がっててワロタw

次からテンプレに入れとけw
http://kats.twinstar.jp/vms/goodquestion.html
502名無しさん@お腹いっぱい。:2009/11/30(月) 17:42:35 ID:mmReHmFj0
>>486
探せば他にも色々あると思うけど、手元にある情報だけ列挙してみる。

[module]
MMenu
ttp://www.autohotkey.com/forum/topic17674.html

[library]
Menu wrapper library
ttp://www.autohotkey.com/forum/topic40529.html

[Windows OS enhancer and application launcher]
FavMenu (Outdated)
http://www.autohotkey.com/forum/topic12412.html

[その他]
Menu Icons v2 (stdlib)
ttp://www.autohotkey.com/forum/topic21991.html
503名無しさん@お腹いっぱい。:2009/11/30(月) 19:28:30 ID:UoIfMG8Q0
Lexikos版のオブジェクトは結構進化してんのな。

配列は結構便利だ。オブジェクトもキーにできるとは恐れ入った。
でも、キー一覧のオブジェクトを得るメソッドか、イテレータみたいなのが欲しいところ。
自分で実装すればいけるけど、標準で欲しい。

デストラクタみたいなのが使えるから色々解放するのにも便利だ。
スクリプト終了時も有効(global と staticのみ)なんで、
OnExitなしでいけるから利用ライブラリの独自の解放処理を考慮しなくていいのも嬉しい。

objBase := Object("__Delete", "Test_Delete", "__Set", "Test_Set")
objGlobal := Object("base", objBase, "name", "ぐろ〜ばる君")
hoge(objBase)
MsgBox, Press OK to Exit
hoge(base) {
 objLocal := Object("base", base, "name", "ろ〜かる君")
}
Test_Set(self, name, value) {
 if (name = "name")
  MsgBox,, %value%, おぎゃ〜!
}
Test_Delete(self) {
 MsgBox,, % self.name, 死にまーす!
}
504名無しさん@お腹いっぱい。:2009/11/30(月) 20:51:14 ID:mRx3P2Hd0
>>502
使いこなせば、かなり便利そうなスクリプトですね。
そのリンク先のMMenu.ahkをいまテストしているのですが、ちょっと質問です。

サンプルスクリプトを走らせるとNetoworkのメニューにチェックが入っていますよね。
http://www.autohotkey.net/~majkinetor/MMenu/Screenshots/Capture_1.gif

これを、Networkメニューを押すたびにチェックをつけたり、はずしたりして、
欄外でクリックしたり、メニューを消したとき(MMenu_Show()の直後、Exitappの一歩手前)
で、チェックマークの状況を取り出すことは可能でしょうか。

>MMenu_Add( main, "Network", icn, 0, "c ivNet")

これのcがあるとチェックマークが入り、-cにすると外れるようですが、
サンプルのままだと、一度クリックするとOnMMenuに飛んで、メニューが消えます。
参考になるサンプルを紹介していただけるだけでも助かります。
505486:2009/11/30(月) 22:49:33 ID:OOZFPPlE0
>>502
情報ありがとうございます。
まだまだ勉強が足りないのでじっくり理解していきます。
他の方もいろいろと情報ありがとうです。
506名無しさん@お腹いっぱい。:2009/11/30(月) 23:16:45 ID:mmReHmFj0
>>505
MMenuだったらAPIMenu.ahk だかそんな名前のファイル無かったっけ?多分そこに色々情報あると思うんだけど。
確かWinAPIのラッパだったと思うから GetMenuItemInfo とかその辺で検索してみればサンプル見付かるんじゃないかな?
無理そうなら機能拡張するか別の方法探すか。

今、別件、野暮用ちう。御免ね。
507名無しさん@お腹いっぱい。:2009/12/01(火) 11:11:46 ID:f6IG6a580

DllCallで呼び出せるDLLってなんでもOKなんでしょうか?

C++で作らせたDLLを読ませようとした場合、読める環境と読めない環境がありました。

読めない環境でVBランタイムや.netのランタイムなどをごちゃごちゃ入れたら

読めるようになりました。どれが効いたのかわかりません。

それが効いたのかも確証はありません
508名無しさん@お腹いっぱい。:2009/12/01(火) 11:39:22 ID:+HLwJOwm0
http://pc11.2ch.net/test/read.cgi/software/1219130051/868-870
> 870 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/12/13(土) 22:41:47 ID:JAFWrcS10
> >>868
> C++で作られてるっぽいので内部名が違うみたい?
> 詳しくないけどとりあえず以下の方法でできたっぽい。
> Dependency Walker等でMiniSmtpMailer.dllを開いて関数名を調べる
> SmtpGetVersionの内部名は"?SmtpGetVersion@@YAKXZ"っぽいとわかるので、
> DllCall("MiniSmtpMailer.dll\?SmtpGetVersion@@YAKXZ")
> 他の関数は試していない。

http://pc12.2ch.net/test/read.cgi/software/1230694774/204-208
> 206 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/02/04(水) 21:27:31 ID:Ut7+efCd0
> >204
> 多分呼び出し規約が stdcall になってるので関数名を extracter@4 にすれば呼び出せるかも。
>
> 207 名前:206[sage] 投稿日:2009/02/04(水) 21:38:23 ID:Ut7+efCd0
> 補足。
> dll 側のコードはそのままで、DllCall するときに extracter@4 で呼ぶって意味ね。VC だと _extracter@4 かも。
> @以降の数字は引数に使用するスタックのサイズ。今回は int が 1 つなので 4。
> gcc だと -Wl,-kill-at というオプションを渡すと @ 以降がなくなって extracter で呼べるようになるはず。
> VC 側の同等オプションは知らね。DEF ファイル使えば制御はできると思う。
509ひみつの文字列さん:2024/07/05(金) 19:10:11 ID:MarkedRes
日本国またはアメリカ合衆国、もしくはその両方の著作権法に触れる内容であると疑われることから表示できません。
510名無しさん@お腹いっぱい。:2009/12/01(火) 23:12:38 ID:D+TGSQub0
>>509
俺もおかしくなった。

1回目だけじゃなく2回目以降もたまに短くなる
511名無しさん@お腹いっぱい。:2009/12/03(木) 11:56:17 ID:LaMuXTV+0
ちょっと上の方でランチャやmenuが話題になってたけど最近のではこれが面白かった
RADIAL MENU
ttp://www.autohotkey.com/forum/topic50813.html
右クリック長押し click&hold Rbutton
512名無しさん@お腹いっぱい。:2009/12/03(木) 16:21:48 ID:uOVWJCz4P
XPからwin7に乗り換えたら、タスクトレイでバルーン表示をさせると
フォアグラウンドのウインドウフォーカスが奪われてしまうようになった。

#ifwinactiveで囲ったホットキー定義で、Processnameを確認せずに、
ウインドウ指定を「A」で済ますような手抜きスクリプトが誤動作するようになった。

ahkのバルーンに限らず、ほかのソフトのバルーンでも発生する模様。
なにか対策ないかな。
513名無しさん@お腹いっぱい。:2009/12/03(木) 20:20:03 ID:FECCcDoI0
Migemo検索しようとすると、ANSI版だと外部ライブラリにデータを引き渡すために
色々やらなきゃならないからあまり速度はでなかったけど、Unicode版だと速いなぁ。

以下はローマ字からmigemoエンジン使って正規表現パターンを作り出すだけの手抜きライブラリ。

migemo:=Migemo_Open("C:\Program Files\cmigemo-1.2-dll\dict\migemo-dict")
str = モンキーパンチ
If RegExMatch(str, migemo.Query("monkey"), $)
 msgbox, % $

;--------"migemo.ahk" start ------------
Migemo_Open(dict) {
 If DllCall("LoadLibrary", "Str", "migemo.dll", "IntPtr")
  Return Object("base", Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery")
   , "handle", DllCall("migemo.dll\migemo_open", "AStr", dict, "IntPtr"))
}
Migemo_ObjQuery(self, word) {
 Transform, query, FromCodePage, 0, DllCall("migemo.dll\migemo_query", "IntPtr", self.handle, "AStr", word, "Str")
 Return query
}
Migemo_Close(self) {
 If DllCall("migemo.dll\migemo_close", "IntPtr", self.handle, "Int")
  self.hMigemo := 0
}
Migemo_ObjDelete(self) {
 self.close()
}
;--------"migemo.ahk" end ------------
514名無しさん@お腹いっぱい。:2009/12/03(木) 21:48:25 ID:4xyl9Y2B0
Google日本語入力入れてみた。ON/OFFはできるが
IMC_GETCONVERSIONMODE / IMC_SETCONVERSIONMODE あたりが怪しい
[詳細なテキストサービスのサポートをプログラムすべてに拡張する]にチェックするとうまく動かないっぽい

Windows版:Google 日本語入力のアイコンがひとつだけ表示されますが、日本語に変換できません。
http://www.google.com/support/ime/japanese/bin/answer.py?hl=jp&answer=166771


IME.ahk
・IME 状態チェック GUIThreadInfo 入れ込み
 IEや秀丸8βで状態が取れなかったのを対応
・Google日本語入力β 向け調整
ttp://www6.atwiki.jp/eamat/pub/MyScript/IME20091203.zip
515名無しさん@お腹いっぱい。:2009/12/04(金) 18:16:58 ID:JxyA6u/XP
Win7(Vista)のExplorerで、現在選択しているファイル名を取得したいです。

XPでは下記の方法で取得できていましたが、Win7だと取得できないようです。
 controlget filename, list, selected col1, SysListView321, A

Win7で、現在居るフォルダ名は下記で取得できました
 ControlGetText,cur_dir,ShellTabWindowClass1,A

が、ファイル名はどうしても取れず。なにかよい方法はありますでしょうか。
516名無しさん@お腹いっぱい。:2009/12/04(金) 18:50:29 ID:Fhg8yQ9H0
Windows7 64bitで、
104キーボードのWinキーを変換キーに、右ALTキーをWinキーにして、
概ねうまくはいってるものの、
Win+Lだけが、右ALTでは無く、元のWinキーで動作してしまう。
64bitだからかな?

スクリプトは、
RWin::vk1Csc079
RAlt::RWin
517名無しさん@お腹いっぱい。:2009/12/04(金) 18:52:53 ID:wcbDR3GL0
32, 64に関わらず、Win+L や Ctrl+Alt+Del はフックより先にOSが拾っちゃうんじゃないのかな
518名無しさん@お腹いっぱい。:2009/12/06(日) 00:39:00 ID:cafXvx0y0
会社のパソコンを管理者権限で使わせてくれないため
CapsLock<->Control入れ替えができず大変苦労してるのですが、
やっぱりまだAHKでCapsLock入れ替えは無理ですかね。
こうなったら「変換」キーあたりにコントロールを持ってくる
変態配列しかないかと思ってるのですが。
519名無しさん@お腹いっぱい。:2009/12/06(日) 01:08:09 ID:SVsALUGU0
その辺は、動作原理的に無理というか考慮してない。(>>3)

繭のフック系派生のyamyではNLSキーという機能でスキャンコードマップのレジストリを一時的に書き換えて
それを読み込むモジュールを強制的に再ロードさせるみたいな事で無理矢理やっているみたいだけど。
は上手くいってるのと上手く言ってないのと両方あってよくわからん。

ttp://sourceforge.jp/projects/yamy/wiki/NLSKeyProblem
520名無しさん@お腹いっぱい。:2009/12/06(日) 01:21:37 ID:+V/Nq+Qp0
Windowが最大化されたときに、直後に割り込んでリサイズすることで似非ビッグデスクトップ化したいと思ったのだが、
イベントフックしようと思ったらこれはもしや外部DLL必須なのか。
この手の用途だとどんな手法が有るでしょうか。
521名無しさん@お腹いっぱい。:2009/12/06(日) 01:38:39 ID:JjxX0q1Q0
>>518
>こうなったら「変換」キーあたりにコントロールを持ってくる
>変態配列しかないかと思ってるのですが。

JCtrl?
522名無しさん@お腹いっぱい。:2009/12/06(日) 01:48:25 ID:TuWGq5Sx0
JBeef
523名無しさん@お腹いっぱい。:2009/12/06(日) 01:50:21 ID:SVsALUGU0
>>520
WinEvent拾うとと結構色々分かるんだけど、最大化のイベントって色々見てる限り分からん。
以下は移動開始/終了の検知。

#NoEnv
#Persistent
#SingleInstance, Force
DllCall("SetWinEventHook"
 , "UInt", EVENT_SYSTEM_MOVESIZESTART:=0x0000000a ; event_id from
 , "UInt", EVENT_SYSTEM_MOVESIZEEND:= 0x0000000b ;event_id to
 , "UInt", 0 ; ModuleHandle
 , "UInt", RegisterCallback("WinEventHookProc")
 , "UInt", 0 ; All Process
 , "UInt", 0 ; All Threads
 , "UInt", 0x0003 ; WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
 , "UInt")

WinEventHookProc(hWinEventHook, event, hwnd, idObject, idChild, thread, time)
{
If (hwnd)
 {
  WinGetClass, class, ahk_id %hwnd%
  action := event = 0x0000000b ? "END" : "START"
  Tooltip, Move %action% / %class% (%hwnd%)
 }
}

ちにみに、イベントは見るだけ(WINEVENT_OUTOFCONTEXT)しかできない、
拾って捨てたりするなら(WINEVENT_INCONTEXT)ばDLLは必要みたい。
524名無しさん@お腹いっぱい。:2009/12/06(日) 02:53:13 ID:+V/Nq+Qp0
>>523
ありがとうございます。確かに最小化などはイベントがありますが、最大化は有りませんね・・・
うーむどうした物やら
525名無しさん@お腹いっぱい。:2009/12/06(日) 05:33:21 ID:+V/Nq+Qp0
うーんダメだ、SetWindowsHookEx と WH_CALLWNDPROC でWindow最大化が取れるのではと期待するのだが、
この辺りの知識が皆無でやり方の見当が付かない。
526名無しさん@お腹いっぱい。:2009/12/06(日) 09:14:06 ID:SVsALUGU0
>>525
ここ( http://www.autohotkey.com/forum/viewtopic.php?t=19367&start=0) にCBTフック用の汎用Dllがあった。
cbthook.rar ってやつ。(トピック1件を表示するURLはよく分かんない)
これに入っている ahkhook.dll 使うと拾えたよ。

DetectHiddenWindows, On
hModule := DllCall("LoadLibrary", "Str", "ahkhook.dll")
hHook:=DllCall("ahkhook.dll\reghook"
 , "UInt", 5
 , "UInt", WinExist("ahk_class AutoHotkey ahk_pid " . DllCall("GetCurrentProcessId","Uint"))
 , "UInt", 0x550
 , "UInt", (TRUE << HCBT_MINMAX))

OnMessage(0x550 + HCBT_MINMAX, "CBT_MinMaxHandler")

CBT_MinMaxHandler(wParam, lParam, msg, hwnd) {
 DllCall("ReplyMessage", "UInt", 2)
 WinGetTitle, title, ahk_id %wParam%
 action := (lParam & 0xFFFF) == 3 ? "Maximize" ; SW_MAXIMIZE = 3
   : (lParam & 0xFFFF) == 6 ? "Minimize" ; SW_MINIMIZE = 6
   : "Restore" ; SW_RESTORE = 9
 Tooltip, [%action%] %title%
}
527名無しさん@お腹いっぱい。:2009/12/06(日) 09:15:33 ID:SVsALUGU0
あ、定数が抜けてる…

HCBT_MOVESIZE = 0
HCBT_MINMAX = 1
HCBT_QS = 2
HCBT_CREATEWND = 3
HCBT_DESTROYWND = 4
HCBT_ACTIVATE = 5
HCBT_CLICKSKIPPED = 6
HCBT_KEYSKIPPED = 7
HCBT_SYSCOMMAND = 8
HCBT_SETFOCUS = 9
528名無しさん@お腹いっぱい。:2009/12/06(日) 21:57:03 ID:+V/Nq+Qp0
おお、ありがとうございます!! 動作しました!
この辺りのフォーラムもざらっと見てはいたのですが、今回はやはり外部DLL必要ってことですかね。
SetWindowsHookで大方のフックが可能なので、取れない最大化だけ情報が希薄にorz
そしてSetWindowsHookExはマウス・キーボード用のフック例しか出てこないww
とまぁ私の方向性に問題有りでした。動けばOKですよね。
大感謝です。
529Tet:2009/12/06(日) 23:44:02 ID:v3pJ0zej0
SciTE4AutoHotkey v2.1 がそろそろ来そうな雰囲気ですね。
ttp://www.autohotkey.com/forum/post-315747.html#315747

/*
(使っている人がいたのかどうか分りませんが)今まで勝手にメニュー日本語化パックをUPさせて戴いてきましたが、
個人的な事情から 次回より手掛けないことにしましたので、一応報告させて戴きます。
*/

530名無しさん@お腹いっぱい。:2009/12/07(月) 02:51:31 ID:YyhBt78s0
SendMessageでWM_GETMINMAXINFO(0x24)を投げたら最大化状態のサイズを弄れるのではと考えているのですが、
lParamのMINMAXINFO構造体を云々のあたりで躓きました。
LONGのPOINT構造体なのでahkのintをstrとして・・・????の辺りでorz
この辺りのメッセージ使った例とかあれば教えてもらえないでしょうか。
531507:2009/12/07(月) 10:03:42 ID:ocCl2pO60

>>507ですが
DllCallで.NET Frameworkのランタイムを入れないとdllが読み込めないようです。

これはdllのほうの問題なのでしょうかそれともahkのほうが問題なのでしょうか


532名無しさん@お腹いっぱい。:2009/12/07(月) 14:29:01 ID:uvXC4NSo0
>>520
>Windowが最大化されたとき
>>523
>最大化のイベント
>>530
>メッセージ使った例

この辺の話ですか?
OnMessage for Minimize, Maximize, Restore
ttp://www.autohotkey.com/forum/post-294295.html#294295

はずしてたら御免なさい

/** おまけ
List of Windows Messages
ttp://www.autohotkey.com/docs/misc/SendMessageList.htm

MsgSeeker - An Advanced Technique. (要 messages.txt)
ttp://www.autohotkey.com/forum/post-444.html#444
messages.txt - a long list of messages - An Advanced Technique.
ttp://www.autohotkey.com/forum/post-10579.html#10579

AHK Messenger - GUI For PostMessage/Sendmessage
ttp://www.autohotkey.com/forum/topic32142.html
*/
533名無しさん@お腹いっぱい。:2009/12/07(月) 15:08:04 ID:OUf0yRsw0
>>532
残念ながら外してる…。AutoHotkeyのプロセス自信が窓だったら簡単なんだけどね。

>>530
簡単に言うと、
(1) 構造体の定義を参照して、その分のメモリを確保 (VarSetCapacity)
(2) データ定義に従いデータを格納 (NumPut)
(3) 構造体のポインタ(先頭アドレス)をSendMessageで送る
(4) 構造体に入ったデータを取り出す (NumGet)

ってことになるけど、対象ウィンドウが他プロセスの場合は
相手メモリ空間にメモリを確保して構造体を作ってやらなければならない。
似たような使い方は↓を参照。

ttp://lukewarm.s101.xrea.com/test/read.cgi/bbs/1157529465/106
ttp://pc12.2ch.net/test/read.cgi/software/1243005818/736

と、ここまで書いておいて何なんだが >>520 を実現しようとするなら、
グローバルフック使って「最大化が発生するとき毎に」このメッセージをトラップして
この構造体の中身を書き換えてやる必要があるんじゃないだろうか。
534名無しさん@お腹いっぱい。:2009/12/07(月) 16:24:32 ID:YyhBt78s0
>>532
独自ではない外部Windowにメッセージを投げる際にparamの構造体をahk側でどのように表現するのか、
というあたりなのですが、前提が間違ってるとか含めて指摘していただけるとありがたく。
>>533
おおお、かなり猛烈に参考になりますと共に手を付けてない範疇すぎて全くアレです。がんばります。精進します。
懸念材料としてはWM_GETMINMAXINFOで1モニタサイズ以上の数値を入れても無視される可能性がw
# >>520ですが、ゆるーいビッグデスクトップ化目的なので、最大化されてから希望サイズと異なる場合に一端戻して再度最大化とかで。
主要ソフトは何故か最大化状態でWinMoveで下に引き延ばせるようなので、上下連結モニタの場合は要件に収まる動作ができてます。
左右には伸びてくれません。移動は出来るのですが。最大化を検知して最大化を解除し指定サイズにリサイズなら可能なんですが、
大変使い勝手の悪い巨大Windowになるので、そのあたりなんとかならんかということで最大化時のサイズ指定というところに。
535名無しさん@お腹いっぱい。:2009/12/07(月) 19:59:48 ID:sZDGrlo90
ahkファイルを実行して取得したPIDを他のahkファイルで取得するにはどうしたらいいですか?
536名無しさん@お腹いっぱい。:2009/12/07(月) 21:05:38 ID:M6VZgSIb0
PID取得した方から別AHK立ち上げるならコマンドライン引数
両方とも常駐してるなら、PostMessage & OnMessage
537名無しさん@お腹いっぱい。:2009/12/08(火) 00:55:39 ID:C5hEPusx0
>534
WM_GETMINMAXINFO ってシステム側がメッセージ投げてアプリケーション側が値を設定して返す
メッセージのはずなので外部から投げても無意味。
よって、>534 みたいにフックという話になるけど SetWindowHookEx では SendMessage 関連の場合は
値を確認できるだけで変更は認められていないはず。
従ってウィンドウプロシージャのすり替え(サブクラス化)が必要なんじゃないかと。
具体的には SetWindowLongPtr で GWLP_WNDPROC を使う。
自分が処理しないメッセージは元のウィンドウプロシージャに渡してやる。
他プロセスの場合メモリ空間が別だというのはそのままなのでそこは対処が必要。
自分はフックを利用して相手側メモリ空間に DLL を読み込ませてすり替えたことはある。
538名無しさん@お腹いっぱい。:2009/12/08(火) 00:58:09 ID:C5hEPusx0
>534 じゃなくて >533 だた。
アプリ側から WM_GETMINMAXINFO の応答が返っているように見せなければならない、ということね。
539名無しさん@お腹いっぱい。:2009/12/08(火) 04:05:48 ID:r7a1Yk450
すんませんうごきました
#Include test12_setting.ahk
DetectHiddenWindows, On
HCBT_MINMAX := 1
hModule := DllCall("LoadLibrary", "Str", "ahkhook.dll")
hHook:=DllCall("ahkhook.dll\reghook", "UInt", 5, "UInt"
, WinExist("ahk_class AutoHotkey ahk_pid " . DllCall("GetCurrentProcessId","Uint"))
, "UInt", 0x550 , "UInt", (TRUE << HCBT_MINMAX))
OnMessage(0x550 + HCBT_MINMAX, "CBT_MinMaxHandler")
CBT_MinMaxHandler(wParam, lParam, msg, hwnd) {
DllCall("ReplyMessage", "UInt", 2)
if (lParam & 0xFFFF) = 3 ; Window Maximize
{
WinGet, active_id, ID, A
WinGetPos, x, y, w, h, ahk_id %active_id%
MonitorNum := GetMostOverlapMon(x, y, w, h)
GetMonitorSize(MonitorNum, mX, mY, mW, mH)
; SetSize(MonitorNum, set_x, set_y, set_w, set_h)
Multiply_X := 2
Multiply_Y := 1
Position_X := -1920
Position_Y := 0
set_x := mX+Position_X
set_y := mY+Position_Y
set_w := mW*Multiply_X-1
set_h := mH*Multiply_Y-1
WinMove, ahk_id %active_id% ,, set_x , set_y , set_w , set_h
; Tooltip, id:%active_id% | Mon:%MonitorNum% | %mW%x%Multiply_X% %mH%x%Multiply_Y% %mX%+%Position_X% %mY%+%Position_Y% |
return
}
}
540名無しさん@お腹いっぱい。:2009/12/08(火) 04:37:43 ID:r7a1Yk450
>>537
そのあたりのキーワードでごりごりググって見つけたサンプルなんかを動かしてて発見したのですが、
Windowを最大化した後にサイズ変更して成功する場合があるんですよね。で、判ったのは、
モニタ解像度ピッタリ(整数倍とか)に変更使用とするとダメなので、-1しておけば変更できるという・・・
その結果、>>539のような実験ahkで動作しました(win7x64Aero)。多数のヒントありがとうございます>諸氏

あちこち端折ってありますが、前半でahkhook.DLLを用いてWindow最大化イベントをフックしてます。
if (lParam & 0xFFFF) = 3{ }の中身で最大化時の処理を書いてますが、
アクティブWindowの位置からモニタNoを割り出し(省略)、予め指定されたサイズに変更してます。
その際に幅と高さを-1しないと動作しなかったというわけですねorz
(削りすぎてイミフなコードになってますが実際はモニタNo毎に倍率やポジションを別途設定してます。)
これでWindowを最大化すると、Windowの場所に応じて最大化後にリサイズされ複数モニタにまたがった最大化Windowになります。
元のサイズに戻すと通常のサイズに戻りますので大変ユーザフレンドリでございます。ほんと助かりました。

動けばいいんですが、細かい疑問点として、
・DllCall("ReplyMessage", "UInt", 2) は何用なんでしょうか。無くても動作してるみたい。
・WinGet, active_id, ID, AでアクティブWindowを拾ってますが、
 本来は最大化されたWindowを拾うのが筋だとは思います。でもやり方判らずw
・各モニタNo毎に数種のパラメータを設定しておく、といった類のユーザ設定変数の指定で、お奨めの手法はあるでしょうか。
 IniReadが煩雑すぎて#Includeと x := pref_%var1%_%var2% 的な力業でやっつけてあるんですが、見た目が酷いです(10モニタほどあります)。
・Winの画面設定などでモニタNoが変更されてもSysGet, Monitor_numbers , 80で拾うモニタ番号は起動時か何かの状態のままww
とかでしょうか。すんません半分メモになってしまいました。感謝を。
541名無しさん@お腹いっぱい。:2009/12/08(火) 12:29:20 ID:nyM4TOlk0
>>534
>ahk側でどのように
もしかして… CreateRemoteThread+あれ でゴニョゴニョする方のですか?
この方法の大変さや危険性とか分った上での話だと思いますが
片方づつのサンプルなら多分、両方ともあちらのフォーラムで見付かると思います。(そこからがまた大変ですけど)
- といってもdll使って動いている様なので今となっては必要無い情報ですね。忘れて下さい。
542名無しさん@お腹いっぱい。:2009/12/08(火) 12:45:25 ID:QjTiF1Ie0
>>540
分かるところだけで。

>・DllCall("ReplyMessage", "UInt", 2) は何用なんでしょうか。。
cbthoo.rar 内のサンプルに↓の記述
 DllCall("ReplyMessage", "UInt", 2) ;reduce possibility of deadlock

>・WinGet, active_id, ID, AでアクティブWindowを拾ってますが、
>>526でウィンドウタイトルは何で引っ張ってるかを見れば分かる。MSDNでは↓
ttp://msdn.microsoft.com/en-us/library/ms644977%28VS.85%29.aspx


>見た目が酷いです
これは好き好きじゃないのかな。
Monitor_1=100,200,300,400,・・・・
Monitor_2=100,200,300,400,・・・・
とかにして、毎度Splitしてもそんなに遅くないと思うけど。
あとはオブジェクトの配列にするのも手。
543名無しさん@お腹いっぱい。:2009/12/08(火) 23:18:01 ID:16lSlnPq0
あるフォルダの中のファイルすべてを
最終更新日(yyyyMMddHHmmss)+拡張子にリネームしたいのですが、
最終更新日が秒まで同じ場合に、何かよい対処方法はないでしょうか?

秒以下の時刻を取得できれば、その値をファイル名に含めればいいのですが、
できないようなので、最終更新日が同じファイルがあれば a,b,c…
と添字を付けてファイル名の重複を回避しようと考えています。

このときに、秒以下の時刻順に a,b,c… と付けるためには、
Loop でファイル名順でなくて日付順にファイルを取得する必要があり、
手が止まってしまいました。

具体的には次のようなリネームをしたいのですが、お知恵を拝借願います。
↓日付順
ファイル.txt → 200912082313.txt
ファイル(1).txt → 200912082313a.txt
ファイル(2).txt → 200912082313b.txt
544名無しさん@お腹いっぱい。:2009/12/08(火) 23:30:57 ID:dUR+zywN0
>>543
リネームソフトを使う、で即解決
545名無しさん@お腹いっぱい。:2009/12/09(水) 00:02:44 ID:XNKy1SF/P
>>543
俺はこうやってる
 loop内でバッチを作る。そのとき先頭を更新日にする
 ソートする。更新日で並ぶ
 loop,parseで精査。やばい項目を加工するバッチへ出力する
 バッチを実行。ほっとくと終わってる

バッチでやらないで直接filemoveでやってもよいが、バッチでやると
処理が止まったときになにが原因か目で追うことができるので便利
546名無しさん@お腹いっぱい。:2009/12/09(水) 00:07:03 ID:zZrWF/UP0
まぁ、Frexible Renamer 使うのが一番手っ取り早いわな。
ファイル名重複時の連番も楽だし。

どうしてもAHKでやる必要があるなら、リネーム前に数えてSuffix付与するくらいじゃないのかね

Loop, %target_dir%\*.txt
 FileMove % A_LoopFileFullPath, % GetNewPath(A_LoopFileFullPath, A_LoopFileTimeModified)

GetNewPath(orgPath, newName) {
 SplitPath, orgPath,, dir, ext, name
 dir := dir ? dir . "\" : ""
 count := 0
 While FileExist(newPath := dir . newName . countToSuffix(count) . "." . ext)
  count++
 Return newPath
}

CountToSuffix(count) {
 Return !count ? ""
  : (count<=26) ? Chr(Asc("a") + count - 1)
  : "(" . (count-26) . ")"
}
547名無しさん@お腹いっぱい。:2009/12/09(水) 00:42:12 ID:a/e6OCHvP
>>546
すげぇw 俺のつかってる自作のやつの5分の1くらいのコード量だ。
548名無しさん@お腹いっぱい。:2009/12/09(水) 01:08:31 ID:2jZgljJa0
>>541
あ、いえ、その時は構造体をahkで作って渡したら動くんじゃないかと思ってたので
>>542
う!? ahk_id %wParam%で行けたのか。試してみたつもりだったのに今やってみたら動くorz ありがとうございます
毎回splitですか、それもそうかも。考えてみます。配列とかハッシュとか使いたいw

>>543
rubyなんかを使えるなら数行で書けると思うんで、ahkは不向きじゃないかなぁ
549名無しさん@お腹いっぱい。:2009/12/09(水) 01:13:49 ID:8h7Yw38N0
配列は unicode 版と lexikos 版で使えるみたいだけど
ハッシュはどうなんだろう
550名無しさん@お腹いっぱい。:2009/12/09(水) 02:29:10 ID:zZrWF/UP0
ハッシュはもう普通に使える

key1 := "あいうえお"
key2 := "String with Space"
hoge := Object(key1, "かきくけこ")
hoge[key2] := "fuga fuga"
MsgBox, % ObjGet(hoge, key1) "`n" hoge[key2]
551名無しさん@お腹いっぱい。:2009/12/09(水) 13:50:35 ID:AWQCqLUR0
うわあ、乗り換えるかどうか迷うなぁ
もういっそ本家が消えてくれたら楽なんだがw
552名無しさん@お腹いっぱい。:2009/12/09(水) 20:35:24 ID:2tfz2ULx0
>>544-546
ありがとうございます。>>543 ではコア部分だけを書いたのですが、
実はリネームの前後にAHKでやってる処理があって、
それとの連携からAHKでリネームしたいという要望でした。
AHKからリネームソフトを制御するという手も考えられますが…

>>545 でも秒以下の更新時刻を取得できなければ同じだし、
>>546 でも Loop が名前順に処理するから、下の変更後のようになりますよね?
これが右端のようになってほしいわけです。

更新時刻        元ファイル名  変更後       ↓こうなってほしい
2009-12-09 04:15:28.99 ファイル(0).txt 20091209041528.txt 20091209041528a.txt
2009-12-09 04:15:29.51 ファイル(1).txt 20091209041529.txt 20091209041529.txt
2009-12-09 04:15:28.47 ファイル.txt  20091209041528a.txt 20091209041528.txt

で、考え直してみたのですが、秒以下の更新時刻を取得できない以上、
ファイル.txt と ファイル(0).txt とのどちらが先か後か判別できないから
>>543 では条件不足だったようです。Nを数字として次の条件を利用しないと不可能だと思います。
・(N)が付いていないファイルは、同名の(N)が付いてるファイルより更新時刻が古い
・(N)が付いてるファイルは更新時刻順と名前順が一致する

これで、まず(N)なしのファイルだけ >>546 でリネームして
そのあとに(N)付きのファイルだけ >>546 でリネームするというように
2段階で処理すれば右端のようにできそうですが、
(N)なしのファイルだけでLoopを回すことってできるでしょうか?
553名無しさん@お腹いっぱい。:2009/12/09(水) 20:44:22 ID:g+Eh+cTc0
つ 正規表現
554名無しさん@お腹いっぱい。:2009/12/09(水) 22:19:32 ID:qyvNdnqNP
リネームするときに同名ファイルを調べてすでにあったら
重複しないa-zのアルファベットを付加とかじゃだめなのか
555名無しさん@お腹いっぱい。:2009/12/09(水) 23:12:43 ID:8h7Yw38N0
>>549-550
配列とハッシュはグローバル変数として扱えますか?
つまり、関数内外で配列とハッシュを使いたいのですが
556名無しさん@お腹いっぱい。:2009/12/09(水) 23:30:45 ID:FPSSWg2E0
>>555
どんなスコープでも使えるよ。

global_obj := Object(1, "ほげ", 2, "ふが") ; スクリプトが終わるまで消えない

func1()

func1() {
 global global_obj
 local_obj := Object() ; 関数が終わる時に消える
 local_obj[1] := "hoge"
 local_obj[2] := "fuga"
 func2(global_obj)
 func2(local_obj)
 func2(Object(1, "This", 2, "is", 3, "test", 4, "object")) ; この行の式が終わる時に消える
}

func2(obj) {
 static static_obj
 If !IsObject(static_obj)
  static_obj := Object("count", 0) ; スクリプトが終わるまで消えない
 static_obj.count := static_obj.count + 1
 Loop % obj._MaxIndex()
  MsgBox,, % static_obj.count, % obj[A_Index]
}

557名無しさん@お腹いっぱい。:2009/12/09(水) 23:34:00 ID:2tfz2ULx0
>>553
ありがとうございます
これで何とかできそうです

>>554
基本的にはそうなんですが
新しいファイルを先にリネームして
古いファイルを後からリネームしてしまうと
時刻順とa-zの順が逆転してしまうのを避けたいんです
558名無しさん@お腹いっぱい。:2009/12/09(水) 23:59:24 ID:8h7Yw38N0
>>556
ありがとうございます。
そうでしたか
559名無しさん@お腹いっぱい。:2009/12/10(木) 12:10:53 ID:WCwm2/nC0
WindowPad - multi-monitor window-moving tool
http://www.autohotkey.com/forum/topic21703.html
560名無しさん@お腹いっぱい。:2009/12/10(木) 15:12:21 ID:IDLxiKx70
サスペンドした時とサスペンド解除した時に音を1回だけ鳴らしたいんだけど
サスペンド状態ってどうやって現すの
いちいち聞いてたら切りないから、こういう関数?コマンド?を探す時はどこを参照すればいいのか教えてそこのエロガッパ

if state suspend = 1
if state = suspend, On
if suspend, On
if suspend = On
if suspend = 1
全部だめ
SoundPlay, %A_WinDir%\Media\ding.wav
561名無しさん@お腹いっぱい。:2009/12/10(木) 15:30:25 ID:OBZWnh5R0
っ 組み込み変数 (A_IsSuspended)
562名無しさん@お腹いっぱい。:2009/12/10(木) 15:42:35 ID:IDLxiKx70
>>561
ありがとう
ttp://www.autohotkey.com/forum/topic31239.html
(A_IsSuspended) playsoundで検索したらここの3番目の書き込みの一番上の段落に完成例が載ってた
563名無しさん@お腹いっぱい。:2009/12/10(木) 17:57:59 ID:a9yYkoLj0
AutoHotkeyの初心者スレってありませんか?
564名無しさん@お腹いっぱい。:2009/12/10(木) 18:04:11 ID:zzLeWQvl0
ここでいいんじゃね。
1レス消費するのに数ヶ月掛かるからわざわざ別けていないと思われ。
565名無しさん@お腹いっぱい。:2009/12/10(木) 18:16:25 ID:7AwpGnvE0
>>563ここで問題ないYO!
質問の仕方に問題なければお兄さんたちが優しくレクチャーしてくれるYO!

>>564の周りだけ時空が歪んでいるようだNE!
566名無しさん@お腹いっぱい。:2009/12/10(木) 18:24:41 ID:a9yYkoLj0
では恐縮ですがここで質問させてもらいます
ジョイスティックの十字キーにキーボードのキー入力を割り当てたいんですが可能でしょうか
具体的にはプレステのコントローラをコンバーター経由で繋いでるのですが、
Sendコマンドで他のボタンは認識してくれますがjoyX,Yの反応がありません
そして入力信号をキーボードと同じにしたいのです
現状ではボタンを押すとuとdが一回だけログに残ります
これをキーボードでキーを押しっぱなしにする、離すという信号と同じにしたいのです
なにかヒント頂けると助かります
567名無しさん@お腹いっぱい。:2009/12/10(木) 18:53:47 ID:zzLeWQvl0
>>566
ttp://mimizun.com/log/2ch/software/1243005818/689-699
の質問(689)とレス(699)が参考になるんじゃね

>>567
歪んでた!
568名無しさん@お腹いっぱい。:2009/12/10(木) 20:41:50 ID:a9yYkoLj0
>>567
ありがとうございますとても参考になります
色々と試してみます
569名無しさん@お腹いっぱい。:2009/12/10(木) 22:47:46 ID:zzLeWQvl0
;キーリピートせずにキーを押したままにする場合。
;これが動かないなら >>7 の Q6

#Persistent
#SingleInstance, force

SetTimer,JoyTimer2,20
return

JoyTimer2:
 HoldKyeDownJoy("JoyX", 0, "Left", JoyXLeft) ; コントローラーの左ボタンをキーボードの←にする
 HoldKyeDownJoy("JoyX", 100, "Right", JoyXRight) ; 右ボタンを→
 HoldKyeDownJoy("JoyY", 0, "Up", JoyXUp) ; 上ボタンを↑
 HoldKyeDownJoy("JoyY", 100, "Down", JoyXDown) ; 下ボタンを↓
return

HoldKyeDownJoy(JoyXY, n, key, ByRef JoyXYVar1)
{
 JoyStickNumber=2
 GetKeyState, JoyXYVar2, %JoyStickNumber%%JoyXY%
 if(JoyXYVar2=n) { ;左ボタン
  if(!JoyXYVar1)
   send, {Blind}{%key% down} ; キーを押し下げる
  JoyXYVar1=1
 }else{
  if(JoyXYVar1)
   send, {Blind}{%key% Up} ; キーを開放する
  JoyXYVar1=0
 }
}
570名無しさん@お腹いっぱい。:2009/12/11(金) 00:53:17 ID:eHSi0epO0
>>569
ありがとうございます
認識されました
十字キーの入力はそれぞれ
JoyY,0(十字キー↑) JoyY,100(十字キー↓) といった風に割り当てられているのでしょうか?
例えば現在spaceが入力キーのプログラムをJoyX,0に置換するとエラーがでます
Joy2ボタンに置換するとちゃんと動くのですがそんな単純なものではないのでしょうか
571名無しさん@お腹いっぱい。:2009/12/11(金) 00:54:23 ID:eHSi0epO0
>JoyX,0に置換

JoyY,0ですすみません
572名無しさん@お腹いっぱい。:2009/12/11(金) 02:47:34 ID:5FvxOQB30
HoldKyeDownJoy(JoyXY, n, key, ByRef JoyXYVar1)
という関数(>>569の下半分がそれ)に値を渡して
キーを押したままの状態にしているだけですのでキーリピートはしません。
キーリピートさせたいなら>>567のリンク先の699をまるまるコピペで使えます。

HoldKyeDownJoy(JoyXY, n, key, ByRef JoyXYVar1)
の第1引数はコントローラーのX軸(左右)or Y軸(上下)を指定。
第2引数は、左右のどちらか or 上下のどちらかを 0 or 100 で指定。
第3引数はエミュレートするキーボードのキーを指定。
第4引数は第1+第2で指定したボタンの押し下げ状態を格納する変数(押しているなら1、でなければ0)


HoldKyeDownJoy("JoyX", 0, "Left", JoyXLeft)
んで、↑はコントローラーX軸の0(つまりコントローラーの左)で
キーボードのカーソルキー ←(Left)を押したままにする、ということ。

それと
> if(JoyXYVar2=n) { ;左ボタン
の「;左ボタン」というのは全く関係ないので無視してね。

> JoyStickNumber=2
これはテストした私のPC環境のコントローラーIDが2だからです。
適当に修正して使ってください。

それとやりたいことをもっと具体的に書いてください。
自分で書いたスクリプトを載せてもらったほうが解りやすいアドバイスがつきますよ。

AutoHotkeyの基本は>>1の「AutoHotkeyを流行らせるページ」に詳しく解説してあります。
573名無しさん@お腹いっぱい。:2009/12/11(金) 12:24:32 ID:KOQwJlG/0
単純にキーやボタンにアプリの起動やキーマクロを割り当てたいだけなんだけど
押し心地がよくて場所をとらなくてかつシンプルでかっこいいような
キーボードとかテンキーとかジョイスティックとかないかなあ
そういう視点で見るといまいちいいのがない。。。
574名無しさん@お腹いっぱい。:2009/12/11(金) 13:19:15 ID:I9CL6OKy0
っ 自作
575名無しさん@お腹いっぱい。:2009/12/11(金) 15:42:04 ID:02F3SsmD0
今まで猫まねきでしかキーを変更出来ないアプリがあったんだけど
このような恐らくドライバレベルでキーを弄ってると思われる
プログラムにAHKでキーを渡せる方法って何かありますか?
576名無しさん@お腹いっぱい。:2009/12/11(金) 15:48:49 ID:02F3SsmD0
ってテンプレみる限りAHK単体では無理っぽいのかなぁ
577名無しさん@お腹いっぱい。:2009/12/11(金) 17:41:43 ID:eHSi0epO0
>>572
詳しい解説ありがとうござます
おおよその感じは掴めました
やりたいのはこのページttp://www3.atwiki.jp/sai/pages/219.htmlの変換と無変換のキーをJoyY↑↓に
置換するという単純なことなのですがどうにもうまくいきません
578名無しさん@お腹いっぱい。:2009/12/11(金) 20:06:38 ID:u52gFXut0
16進数の数字を10進数にしたいのですがそんな関数ってないでしょうか?
579名無しさん@お腹いっぱい。:2009/12/11(金) 20:37:38 ID:JddkiQx+0
0x付けときゃ勝手に数値になるだろ
580名無しさん@お腹いっぱい。:2009/12/11(金) 21:01:40 ID:8gGra4fT0
581名無しさん@お腹いっぱい。:2009/12/12(土) 20:23:52 ID:q+ijMYZE0
Process, Close, AAAexe
と書いたのですが 実行しているユーザーが自分であれば終了するのですが
SYSTEMが実行しているものが終了されません

何かよい方法はないでしょうか
582名無しさん@お腹いっぱい。:2009/12/12(土) 21:08:52 ID:rrNjnSSB0
ビルトインコマンドでやるのはあきらめて、"taskkill"をRunすりゃいいんじゃないのかね
583名無しさん@お腹いっぱい。:2009/12/12(土) 21:16:26 ID:L1BKCVpI0
>>582
taskkillで書いたbatファイルを実行と言うことですか?
584名無しさん@お腹いっぱい。:2009/12/12(土) 21:28:42 ID:rrNjnSSB0
直接実行でもバッチ経由でもどっちいいんでないの

RunAsとかで別ユーザで起動するとATOKのトレイが残るからWinWaitCloseで待ってから
Run, taskkill /fi "username eq administrator" /fi "imagename eq atok20mn.exe"
とかやってる
585名無しさん@お腹いっぱい。:2009/12/13(日) 15:02:42 ID:9LChYtUk0
autohotkey_lで
ハッシュの要素数を数え上げる処理をしたいのですが
うまくいきません

hoge := Object()

key1 := "test"
key2 := "hoge"
key3 := "bar"

hoge[key1] := "あああ"
hoge[key2] := "いいい"
hoge[key3] := "ううう"

msgbox,% hoge._MaxIndex()
;;; => 3 と表示したい

どこにミスがあるのでしょうか?
586名無しさん@お腹いっぱい。:2009/12/13(日) 15:11:42 ID:W4dv7DfY0
>>584
ありがとうございます。

batだと結局画面が出てきてしまうのでjava script作ってRUNする形で逃げました^^;
587名無しさん@お腹いっぱい。:2009/12/13(日) 15:33:53 ID:yVHFf5Vl0
>>585
_GetMaxIndex() メソッドは整数キーの中の最大値のみを返す。
一つも整数キーが無い場合は空白文字列を返す。

以下に、てきとーに和訳したのをうpしたので、参考までにどぞ
ttp://sites.google.com/site/agkh6mze/translation/object#Methods
588名無しさん@お腹いっぱい。:2009/12/13(日) 16:19:54 ID:9LChYtUk0
>>587
ドキュメントの和訳ですか!ありがとうございます。参考にします
589名無しさん@お腹いっぱい。:2009/12/13(日) 16:25:53 ID:5Vyklyrz0
>>587
585じゃないけどすばらしすぎるw
サイト作ってよw
590名無しさん@お腹いっぱい。:2009/12/13(日) 17:10:17 ID:W4dv7DfY0
10秒ごとにプロセスを監視して対象があればプロセス終了、再起動というのを作ってコンパイルしたのだけれど
実行すると右下のタスクアイコンに表示されますよね。

これを不可視にしてバックグラウンドで動かすことは可能ですか?
不可視モードで起動するって言うのはauthotkeyはないような。
591名無しさん@お腹いっぱい。:2009/12/13(日) 17:14:14 ID:yZz6LsKcP
>>590
冒頭に
#NoTrayIcon
592名無しさん@お腹いっぱい。:2009/12/13(日) 17:25:56 ID:W4dv7DfY0
>>591
ありがとおおおおおお(人-)謝謝(-人)謝謝
593名無しさん@お腹いっぱい。:2009/12/13(日) 19:37:24 ID:ttdCxiKv0
>>577
倍率や回転操作がスライダーで細かく出来て面白そうだったので
下記3つの追加/修正したものをそのリンク先に
ファイル(HkSaiSlider_for_JoyStick_0001.zip)としてうpした。

・JoyStickの上下でズーム、JoyStickの左右で回転(上下で回転、左右でズームも可)
・スライダーの位置の記憶(記憶する/しないを選択可)
・角度回転時にループ
594名無しさん@お腹いっぱい。:2009/12/13(日) 21:17:41 ID:LJiseJSq0
エディタのxyzzyにキーを送りたいのですが、うまくいきません。

下記のように
F6::
ControlSend,, ^o, xyzzy
return

のように書いたのですが、^oが送られないみたいです。
他のアプリ(notepadなど)へはOKです。

WinActivateして、Sendする方法ではキーは送れたのですが、そうすると現在のアプリの裏でバックグラウンドでキーがおくれません

多分アプリ自体ではなくアプリウインドウ内に(?)に送らないといけないのですが、どのようにしたものでしょうか?
595名無しさん@お腹いっぱい。:2009/12/14(月) 22:38:36 ID:4bB9IhQx0
AutoHotkey_L更新 http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 39 - December 2, 2009
* Fixed (Debugger): Error in Base64 decoding used by property_set.

Revision 40 - December 13, 2009
* Changed meta-functions and multi-param behaviour to improve flexibility.
 Meta-functions are now invoked *before* searching for an appropriate field in each base object;
 however, values in x.base will override meta-functions defined in x.base.base.
 Chaining meta-functions (inheritence) is now possible by avoiding "Return"
* Improved Default Base functionality to be more consistent with real objects.
* Changed (Debugger): While stepping through code, skip all braces except those which end a function.
* Changed (Debugger): When stepping onto the hidden "Exit" at end of the script,
 consider it to be *below* the last physical line to avoid confusion.

baseの継承の仕方がちょっと変わった。
596名無しさん@お腹いっぱい。:2009/12/14(月) 22:49:41 ID:aRWJ8wIp0
これは仕様が固まるまで手を出さない方がいいかな
てかもう何がなんだか・・・
597名無しさん@お腹いっぱい。:2009/12/14(月) 23:50:13 ID:cH2fJ0hH0
>>593
まさに求めていたのはその動作でした
上下ズームと回転の割り当てができました
ただ残念なことに自分のだと同じ倍率をブルブルと行った来りしてうまく動きません
ブルつきながらもズームはしているようなのですが一定位置で止まってそこから動きませんでした
数値を変えたり色々と試してはいるんですがどれが直接起因しているのかまだ掴めていません
そこで動作している以前のスクリプトにjoy部分を組み込んで見たのですが今度は脱出処理が悪いのか
断続的な入力になってしまいキー入力のようにスムーズになりません
おしいところまでは来ていてあと一歩だと思うのでもう少しサイトで勉強してみます
お手数かけました
598名無しさん@お腹いっぱい。:2009/12/15(火) 00:19:27 ID:FzwUiZgr0
>>597
中の説明にも書いてるけど、SAIを起動してからスクリプトを実行しないとそうなるよ。
また、スクリプト実行後にナビゲーターサイズを変更(横幅の変更)すると正常動作しない。
毎回ナビゲーターの幅(スライダーの長さ)をチェックしてもいいんだけど、
ナビゲーターサイズ(スライダーの長さ)を頻繁に変更することはまずないだろうから
前仕様のままにしてる。
599名無しさん@お腹いっぱい。:2009/12/15(火) 01:31:07 ID:6RQkGlaD0
>>598
スクリプトは必ずSAI起動後に実行しています
ナビゲーターサイズは統合型のデフォルトのままです
独立にしても動作は変わらなかったです
ちなみに今かろうじてスムーズに動作しているのはこの状態のキーボード入力の方なのですが
http://www.dotup.org/uploda/www.dotup.org458741.txt.html
600名無しさん@お腹いっぱい。:2009/12/15(火) 02:05:03 ID:FzwUiZgr0
>>599
X := W/2
の部分を
X:=x+(w/2) ; SAI Wikiで公開されているもの
に置き換えてみては。

うちの環境は X:=x+(w/2) だと動かないので X := W/2 に置き換えてる。
それが影響してるかも。
601名無しさん@お腹いっぱい。:2009/12/15(火) 02:34:20 ID:6RQkGlaD0
>>600
うーん変わらないですね…
なぜかナビゲータのサイズが変わっても動作に影響が出ないです
なんとなくドラッグのループ処理がうまくいってない気がするのでそこら辺から切り崩してみます
602名無しさん@お腹いっぱい。:2009/12/15(火) 02:43:08 ID:wmw3cna80
PCに搭載されている物理搭載メモリ量を取得したいのですが、何か良い方法ありませんか?
603名無しさん@お腹いっぱい。:2009/12/15(火) 03:24:34 ID:6RQkGlaD0
キター!できました!
回転角度のループを止めてSliderAdjSizeを30000ぐらい増やしたら綺麗に動きました
さっきまでが信じられないくらい安定してます
これもみなさんのおかげです
長々と初歩的な質問に付き合って頂きありがとうございました
604名無しさん@お腹いっぱい。:2009/12/15(火) 03:42:13 ID:FzwUiZgr0
>>603
>>600の部分を変更した場合、下記を変更する必要があった
k=4
Loop
{
; 回転角度をループ
 if Ttext=回転角度
  nowX := (nowX>=SliderW-k ? k : (nowX<=k ? SliderW-k : nowX))+minADD
 else
  nowX := (nowX>=SliderW-k ? SliderW-k : (nowX<=k ? k : nowX))+minADD

の部分を

k=4
SliderX2:=SliderX-(SliderW/2)
SliderW2:=SliderX+(SliderW/2)
Loop
{
; 回転角度をループ
 if Ttext=回転角度
  nowX := (nowX>=SliderW2-k ? SliderX2+k : (nowX<=SliderX2+k ? SliderW2-k : nowX))+minADD
 else
  nowX := (nowX>=SliderW2-k ? SliderW2-k : (nowX<=SliderX2+k ? SliderX2+k : nowX))+minADD

これで回転がループしないなら、各変数をTooltipやMsgBoxで表示させつつ
動作確認すると問題箇所を見つけやすいよ。
それと、If文は条件に一致したら直ぐしたの行を実行するので、
そこに空行(改行)を入れたらIf文の意味が無い。
{ }で括ってブロック化している内側なら空行(改行のみ)を入れても動くけど。
605名無しさん@お腹いっぱい。:2009/12/15(火) 04:18:13 ID:6RQkGlaD0
>>604
重ね重ねすみません
これで完全動作に近づけます
スクリプトがこんな便利で強力なものだとは知りませんでした
ちょっとづつ他の動作にもトライしてみます
606名無しさん@お腹いっぱい。:2009/12/15(火) 19:55:23 ID:KDuw6Sya0
vkXXscYYY & Z::Send,^
で^が入力されないんですけどなんでですか?
607名無しさん@お腹いっぱい。:2009/12/15(火) 20:00:50 ID:qlb1vnorP
>>606
なんでXとかYで隠して質問をわかりにくくするの?
608名無しさん@お腹いっぱい。:2009/12/15(火) 20:16:51 ID:sQGuz6nz0
Send, {^}
609名無しさん@お腹いっぱい。:2009/12/15(火) 21:43:11 ID:UQQjmlzo0
>>606
>>608が答えているとおり
AutoHotkeyの文字出力でまず躓くのは、
修飾キー(+=Shift,^=Ctrl,!=Alt,#=Win)そのものを出力するには
波括弧でくくらなきゃいけないということ

610名無しさん@お腹いっぱい。:2009/12/15(火) 22:43:44 ID:KDuw6Sya0
みなさんありがとうございました。
本当助かりました。
611名無しさん@お腹いっぱい。:2009/12/16(水) 18:29:42 ID:BPj8u3vu0
GuiControl,-Redraw と GuiControl,+Redrawについて質問します

ウィンドウ上にTextやCheckboxを沢山配置しています
どうもコントロールを追加するたびにウィンドウを再描写しているようです

そこで、この再描写を停止し、特定のタイミングで一挙に再描写したいのですが、
GuiControl,-Redraw と GuiControl,+Redrawを使えばこれができますか?

Gui,Add
http://lukewarm.s101.xrea.com/commands/Gui_Add.html

>リストビューなどで大量の項目を追加・削除・変更する前に
>GuiControl,-Redraw,ControlIDで再描画を停止し、
>終了後に+Redrawで再開させることでパフォーマンスを改善できる。

私がしたい処理でこれを応用できないでしょうか
612名無しさん@お腹いっぱい。:2009/12/17(木) 00:54:05 ID:s3GWqlW60
カタカナひらがなキーでデスクトップを表示、は
vkF2sc070::Run, desktop,C:\Users\Username
でできるんだけど、
Altキーを押しながらカタカナひらがなでDドライブを表示したい。
でもどうしてもDドライブを指定する書式が分からん。
ご教示してたもれ
613612:2009/12/17(木) 00:55:34 ID:s3GWqlW60
書き忘れたけどwindows7です。
614名無しさん@お腹いっぱい。:2009/12/17(木) 00:58:33 ID:Z/hsGXjwP
run,d:\
でいいじゃん
615名無しさん@お腹いっぱい。:2009/12/17(木) 01:06:43 ID:s3GWqlW60
確かにAltキーを修飾しないとそれでいけた。
!vkF2sc070::Run,d:\
だといけない。
vkF2sc070を何かで囲う必要があるのかな?
616名無しさん@お腹いっぱい。:2009/12/17(木) 01:27:06 ID:s3GWqlW60
Shift,Altは駄目だけどCtrlだけは修飾できた。
でもAltに割り当てられんとあんま意味ない。
まあいいや寝る。とりあえず>>614ありがと
617名無しさん@お腹いっぱい。:2009/12/17(木) 01:50:21 ID:KKbPosTD0
これでどうだ?

!vkF5::
!vkF6::
msgbox, % a_thishotkey
return

;!vkF6はIMEがONの場合
618名無しさん@お腹いっぱい。:2009/12/17(木) 02:07:50 ID:SoaiYFQq0
ちょっとスレ違いになるかも知れませんが、
CapsLockとctrlキー入れ替えを、ログオフや再起動せずにできるソフトってないですか?

ネットカフェや施設のパソコンなどでは
再起動した時点でレジストリなどはデフォルトに戻ってしまって困っています。
なんとかできる方法ないですかね?
619名無しさん@お腹いっぱい。:2009/12/17(木) 02:38:56 ID:s3GWqlW60
>>617
スゲエエエ 成功した
もうなんでうまくいくのかすらわからないけど
っていうかなんでvkf5なのかもわからないけど
ありがとうございます

ちょっとなんでコレで動くのか考えてみます。
620名無しさん@お腹いっぱい。:2009/12/17(木) 07:31:07 ID:dBurXLoJ0
621名無しさん@お腹いっぱい。:2009/12/17(木) 10:59:23 ID:xLXz75DJ0
たぶんDirectInputを使うゲームでカスタマイズが有効にならないのですが、こんなもんなのでしょうか?
対処法はないものでしょうか?
窓使いの憂鬱で設定したのはドライバレベルのせいか有効みたいです
622名無しさん@お腹いっぱい。:2009/12/17(木) 12:05:17 ID:HNAPQ/aW0
623名無しさん@お腹いっぱい。:2009/12/17(木) 21:15:00 ID:khb9k0wv0
窓使いの憂鬱とAHK使ってるけど
窓使いの憂鬱とyamy、のどか
AHKとAHKL
の違いがよく分からない
624621:2009/12/17(木) 23:23:20 ID:xLXz75DJ0
>>622
おお!これですよ、これ。詳しい解説ですね。すばらしい。ありがとうございます。

のどかが窓使いの憂鬱のVista以降対応版でちゃんと動くのなら個人的にはレジストしていいな。
しかしyamyは存在意義が難しいですね。LLフックならAutoHotKeyの方が自由ききますからね。

>>623
>>622のリンク先読んだら詳しく書いてあるよ。
625名無しさん@お腹いっぱい。:2009/12/18(金) 12:41:16 ID:gWmS2DYZ0
結局のところネカフェや余所のPC触る機会が多い人は
・CapsLockとctrlの入れ換えは諦める
・USBマイキーボードを持ち歩く
の二択しかないのかね

USキーボードなら日本語OS&AHKでも入れ換え効くんだっけ?
リアルフォみたいにハードウェア側でキー入替できるタイプなら万能だろうけど
626名無しさん@お腹いっぱい。:2009/12/18(金) 14:30:04 ID:ydBIooum0
PS/2キーボード持ち歩いて猫まねきのほうがよくね
再起動はいらないだろあれ
627名無しさん@お腹いっぱい。:2009/12/18(金) 17:17:03 ID:gWmS2DYZ0
いや、PS/2はPC起動中に挿しても認識しないし、下手すると壊れますよ
628名無しさん@お腹いっぱい。:2009/12/18(金) 17:31:10 ID:GdJrTbHM0
信心が足りないから認識しないんだよ
Plug and Prayだ
629名無しさん@お腹いっぱい。:2009/12/18(金) 17:33:36 ID:OTnZ3aWX0
しかしPrag and Preyに
630名無しさん@お腹いっぱい。:2009/12/18(金) 17:34:39 ID:OTnZ3aWX0
なんという恥ずかしいミス
Plug and Prey
631名無しさん@お腹いっぱい。:2009/12/19(土) 01:23:52 ID:3TjhWhqM0
そういや猫はUSBキーボードでもPS/2変換コネクタ使えば動いたな
ロジのワイヤレスのキーボードも動作した
Setpointの設定も動作する
流石にロジのG15には通用しなかったが
632名無しさん@お腹いっぱい。:2009/12/19(土) 19:07:12 ID:BOjb/UGe0
変換コネクタかました段階でOS側にはPS/2として認識されるのでは?
だとしたら結局再起動しないと動かないと思うけど
633名無しさん@お腹いっぱい。:2009/12/19(土) 19:27:55 ID:hRRQSutm0
ハード板のキーボード系スレ覗いているのかと思ったぞ
634名無しさん@お腹いっぱい。:2009/12/19(土) 23:15:43 ID:3TjhWhqM0
話題がないからなー
便利Tipsでも晒せば

635名無しさん@お腹いっぱい。:2009/12/20(日) 01:22:29 ID:BHCQf8/10
ゲームのキーカスタマイズに特化した
AHK LowLevel作ってくれ
636名無しさん@お腹いっぱい。:2009/12/20(日) 22:36:11 ID:w7UGT8kX0
autohotkey_l の object を使った配列と
autohotkey 従来の疑似配列では
どちらの方が早く処理しているのか気になります
どこかで解説していませんか?

Objects [Revision 31〜] (hoge)
http://sites.google.com/site/agkh6mze/translation/object

配列
http://lukewarm.s101.xrea.com/misc/Arrays.html
637名無しさん@お腹いっぱい。:2009/12/20(日) 22:56:05 ID:rO3n43JQ0
start := A_TickCount
Loop, 100000
 var_%A_Index% := 1
dur1 := A_TickCount-start

start := A_TickCount
arr := Object()
Loop, 100000
 arr[A_Index]:=1
dur2 := A_TickCount-start

MsgBox, % dur1 "`n" dur2

意外だ、代入だけやってみたが、objectの方が全然速いなぁ。
638名無しさん@お腹いっぱい。:2009/12/20(日) 23:20:56 ID:w7UGT8kX0
>>637
ありがとうございます。
私の環境ではこうでした

515
125

10万回代入を繰り返したら約400ミリ秒の違いがでました
単純に計算すれば、代入250回あたり1ミリ秒の差が生じるのですか
この差は大きいですね
639名無しさん@お腹いっぱい。:2009/12/21(月) 00:00:07 ID:qd9b8G6eP
>>637
これって現状は AHK_L のバージョンだけの機能なんだよね?
Unicode版とあわせてメインと統合してくれないかな・・・
640名無しさん@お腹いっぱい。:2009/12/21(月) 00:25:30 ID:Di/JaW6P0
属性を取得して表示するということをやってまして
FileGetAttrib,Attrib,%SetF%
StringReplace,Attrib,Attrib,R,R 読み取り専用`n
StringReplace,Attrib,Attrib,A,A アーカイブ`n
StringReplace,Attrib,Attrib,S,S システム`n
StringReplace,Attrib,Attrib,H,H 隠しファイル`n
StringReplace,Attrib,Attrib,N,N 通常`n
StringReplace,Attrib,Attrib,D,D ディレクトリ`n
StringReplace,Attrib,Attrib,O,O オフライン`n
StringReplace,Attrib,Attrib,C,C 圧縮`n
StringReplace,Attrib,Attrib,T,T 一時ファイル`n
MsgBox,%Attrib%
このように分かりやすく付け足してみて
Temporary Internet Filesで試してみたところ
S システム
H 隠しサ 一時ファイル
ァイ 圧縮

D ディレクトリ
このようなおかしな結果になってしまいました
隠し までは正常でしたが隠しフまで置き換えたところでぐちゃぐちゃ
どのような対策ができるでしょうか
641名無しさん@お腹いっぱい。:2009/12/21(月) 00:32:58 ID:fUUDUnakP
>>640
たったの1文字を対象にReplaceしてるから、
置換済みの全角日本語の中に1文字が含まれると化けるんだと思う
642名無しさん@お腹いっぱい。:2009/12/21(月) 00:50:58 ID:5SiS/uZo0
「フ」 は 0x83 0x74 の2バイトで構成されている。文字コードの0x74は単体では 「t」。

で、AHKは2バイト文字なんか知らないので、
かつ、StringCaseSense がデフォルトの、大文字小文字を同一視になっている(はずな)んで、
>StringReplace,Attrib,Attrib,T,T 一時ファイル`n
のところで置換される

Unicode版を使えばそのままのコードで大丈夫なんだけど…
本家でやるなら方法を変えて↓みたくするとか

str =
IfInString, attrib, R
 str = %str%R 読み取り専用`n
IfInString, attrib, A
 str = %str%A アーカイブ`n
 :
MsgBox, %str%
643名無しさん@お腹いっぱい。:2009/12/21(月) 01:17:00 ID:Di/JaW6P0
>>641-642
ありがとう問題が解決しました
本家を使っているので今回の回答は参考になりました
644名無しさん@お腹いっぱい。:2009/12/21(月) 12:43:01 ID:5SiS/uZo0
■ AutoHotkey_L 更新
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 41 - December 20, 2009
* Fixed: Floating-point numbers were equivalent to an empty string when used as keys in objects.
 They are now converted to numeric strings in the current float format, as originally intended.

■ AutoHotkeyU も更新
http://www.autohotkey.com/forum/viewtopic.php?t=50485
http://ku.myftp.org/~jackie/git/?p=autohotkey.git;a=log;h=HEAD

Sat, 19 Dec 2009 17:15:48 +0000
* L41 - Fix floating-point keys in objects; code maintenance
* Fixed floating-point keys in objects - convert to string instead of "".
* Changed AutoHotkey output paths to be tidier.
* Changed lib_pcre intermediate and output paths.
* Added .gitignore for files which should not be tracked.
* Fixed PostBuildSC.ahk for SC (minimum size) configuration.
* Removed unused Object::FindField overload.

Sat, 19 Dec 2009 15:46:29 +0000
* Fixed: A mistake when merged with fincs's codes.
* Fixed: Truncated object properties (string type).
* Changed: TRACE() macro doens't require ATL.
* Fixed: The invalid Unicode character (U+FFFD).
645名無しさん@お腹いっぱい。:2009/12/22(火) 20:16:15 ID:F2LOp0qP0
Sendで文字を送りたいのですが、常にIMEをオフにして文字列を送るのにいい方法って無いでしょうか?

今はこんな感じで、どうにかやっているのですが
うまく切り替えられないことが多く、日本語入力のままで変な風に送られてしまう事があります

Send, {vkF2sc070} ;[ひらがなカタカナ]キーで一度IMEをONにする。
Sleep 200
Send, {vkF3sc029} ;[半角/全角]キーでIMEをOFFにする。
Sleep 200
Send, %str%
646名無しさん@お腹いっぱい。:2009/12/22(火) 20:32:56 ID:J+3+AnV40
>>645
http://www6.atwiki.jp/eamat/pub/MyScript/ の IME.ahk をつかう。

If IME_Get()
 IME_Set(0)
Send, %str%
647名無しさん@お腹いっぱい。:2009/12/22(火) 21:16:33 ID:PQ28vUyK0
>>644
>Floating-point numbers were equivalent to an empty string when used as keys in objects.

この意味がいまいち分からない
object のキーとして浮動小数点を使用したときには、
(そのキーに結びつけられる)値を文字列0にするってこと?
648名無しさん@お腹いっぱい。:2009/12/22(火) 22:08:33 ID:B9HXAlUO0
>647
使ってないのに推測で答えるけど浮動小数点数だとまともに等値の判別が
できなくてキーとして使えないから空文字列として扱うってことだと思う。
649名無しさん@お腹いっぱい。:2009/12/22(火) 22:42:29 ID:iAippfD60
キーとして空文字列を指定したとして扱うってことじゃね。
650名無しさん@お腹いっぱい。:2009/12/22(火) 22:48:48 ID:PQ28vUyK0
>>648-649
なるほど
empty string って空文字のことか
早とちりしていた
ありがとう
651名無しさん@お腹いっぱい。:2009/12/22(火) 22:51:59 ID:J+3+AnV40
> * L41 - Fix floating-point keys in objects; code maintenance
> * Fixed floating-point keys in objects - convert to string instead of "".
こっちの方が分かりやすい。
652名無しさん@お腹いっぱい。:2009/12/23(水) 09:07:35 ID:TxSgbTAg0
autohotkey_lのサイトにつながらない
autohotkey ドメインのほかのページにはつながるのに
もしかして閉鎖した?
653名無しさん@お腹いっぱい。:2009/12/23(水) 09:10:12 ID:Ug8+phVE0
ちゃんと繋がるけど
654名無しさん@お腹いっぱい。:2009/12/23(水) 09:45:41 ID:TxSgbTAg0
え?私の方ではつながらないよ
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
だよね?
655名無しさん@お腹いっぱい。:2009/12/23(水) 10:18:20 ID:Ug8+phVE0
そのURLだよ。鯖も生きてるし、内容もちゃんと取れる。
セキュリティソフトのログみるとかするなりして、別の要因を探ってくれ。
656621:2009/12/23(水) 10:46:15 ID:EMukRKRg0
>>635
ドライバ署名取得で法人化が必要なため、3000円/台のライセンスになr(ry
657名無しさん@お腹いっぱい。:2009/12/23(水) 10:52:26 ID:JERuce4N0
UAEオンの状態でSendPlay使うのに、自己署名証明書つけてコンパイルし直してるんだけど、
ドライバ署名も自己署名でいけないのかな?
自作のCAをシステムに登録してさ。
658名無しさん@お腹いっぱい。:2009/12/23(水) 10:53:11 ID:JERuce4N0
アラブ首長国連邦乙。UACでした。
659名無しさん@お腹いっぱい。:2009/12/23(水) 10:58:05 ID:EMukRKRg0
>>9
のCtrlおしっぱでアラートだすスクリプトですが、
単体で(ctrl_alert.ahkとかで保存して)実行すると動くんですが、AutoHotKey.iniに書くとうまく動いてくれません。
うまく動かす方法ないでしょうか?
AutoHotKey.iniで
#include ctrl_alert.ahk
してもうまくいかんです。
660名無しさん@お腹いっぱい。:2009/12/23(水) 11:58:10 ID:s7w2T77C0
どういう風にうまくいかないんだよ・・・
エスパーじゃないんで分からんわ
661名無しさん@お腹いっぱい。:2009/12/23(水) 12:02:52 ID:Ug8+phVE0
・サブルーチンラベル「Alerter:」以降はIniの最後に、それより前はAutoexecセクションに貼る。
・グローバル変数が被ってるなら変更す
662名無しさん@お腹いっぱい。:2009/12/23(水) 13:48:19 ID:dJGS8gqXP
関係ないが、>>9で使われている三項演算子って書き方が、
ahkを2年ゴリゴリ使っていてもいまだに、ぱっと見ただけではさっぱり理解できないわ。

人のプログラムを順番に読むときなどで、まず上から下へ、
同一行では左端から右端へ読んでいくよね。

左端が命令かと思って読んでいって、行内で「?」マークが登場したとたん、
左端は単なる命令じゃなくて、条件になるんだよね。

俺はifでちゃんと全部バラすのが、他人にも理解しやすい書き方な気がする。
三項演算子ってのは、コードの圧縮以外にどんなメリットがあるの?
663名無しさん@お腹いっぱい。:2009/12/23(水) 14:07:17 ID:HkWDI/xz0
コードの圧縮がメリットなだけだろ。
特にこういう所に書くには行数を減らさないといけないし。
664名無しさん@お腹いっぱい。:2009/12/23(水) 14:25:58 ID:Ug8+phVE0
If (a > 1)
 hoge :=10
else
 hoge := 20

よりは

hoge := (a>1) ? 10 : 20

の方が式1個なので速い。

ただし

hoge := (a>1) ? 10 : hoge

だと

If (a>1)
 hoge :=10

よりは遅い
665名無しさん@お腹いっぱい。:2009/12/23(水) 14:52:48 ID:Ccu3xBu00
666名無しさん@お腹いっぱい。:2009/12/23(水) 19:43:59 ID:7yTDN+tn0
>>659
AHKファイルの場所指定が間違っているとかいうオチ?
667名無しさん@お腹いっぱい。:2009/12/23(水) 21:42:31 ID:0BT5V6ul0
>>665
繋がる

てか繋がらんという奴はプロキシさすとか
他の所から落とすとかは考えないのか?
668名無しさん@お腹いっぱい。:2009/12/23(水) 21:54:59 ID:Hb98cgeJ0
繋がらないからプロキシ、なんて普通考えないだろ
動画サイトとかならともかく
669名無しさん@お腹いっぱい。:2009/12/24(木) 01:50:14 ID:sfifE7hi0
autohotkeyだけでbigIntを使えますか?
670名無しさん@お腹いっぱい。:2009/12/24(木) 08:06:49 ID:AiIfIuh00
64ビット符号付き整数までサポート
671名無しさん@お腹いっぱい。:2009/12/24(木) 12:51:10 ID:UAcUYV6X0
StringReplaceで改行を他の文字に置換できないんですが、仕様ですか?
672名無しさん@お腹いっぱい。:2009/12/24(木) 13:17:50 ID:AiIfIuh00
んなーこたぁない

str =
(
1行目
2行目
3行目
)
MsgBox,, Original, %str%
StringReplace, str, str, `n, <br>, All
MsgBox,, Replaced, %str%

多分 FileRead でテキストモードで読んでないのではないかとエスパー。
AHKでの改行は内部的にはLF(0x0A)なので、SJISのCRLF(0x0D+0x0A)だとCRが残る。
テキストモードで読み込むと、CRLF→LF変換して変数に格納してくれる。

FileRead, str, *t data.txt
673名無しさん@お腹いっぱい。:2009/12/24(木) 13:24:08 ID:UAcUYV6X0
>>672
さすがエスパー。FileReadで読んでます。
ちょっと試してみますね。ありがとうございました。
674名無しさん@お腹いっぱい。:2009/12/24(木) 13:25:00 ID:sfifE7hi0
>>670
本当ですね。これは便利です
675名無しさん@お腹いっぱい。:2009/12/24(木) 21:48:09 ID:AoXo7ZoJP
filereadで変数に入ったファイルで、文字コードがEUCのものがあります。
これをAHK内部でShiftJISに変える方法なんて、ありますか?

nkfという外部コマンドでためしたところ速度が遅すぎて実用的ではないことと、
できればEUC形式のファイルを読んだ後に、ahk内部で変換をやりたいです。
676名無しさん@お腹いっぱい。:2009/12/24(木) 22:50:17 ID:j+sGfUxO0
ConvertINetMultiByteToUnicode
677名無しさん@お腹いっぱい。:2009/12/24(木) 22:52:17 ID:j+sGfUxO0
直接変換するときにはConvertINetStringか
日本語のMSDNには載ってないから注意
678名無しさん@お腹いっぱい。:2009/12/25(金) 11:23:08 ID:GRZRhB9E0
ファイルをexeにドロップしてIniWriteしたら
exeのディレクトリではなくドロップしたファイルの
ディレクトリにiniが作成されるんですが
絶対パスを指定せずにexeのディレクトリにiniを作成するには
どうすればよいでしょうか?
679名無しさん@お腹いっぱい。:2009/12/25(金) 11:43:18 ID:TE3aUn/m0
A_ScriptDir
680名無しさん@お腹いっぱい。:2009/12/25(金) 11:53:08 ID:GRZRhB9E0
なるほど
ありがとうございました。
681名無しさん@お腹いっぱい。:2009/12/25(金) 16:43:40 ID:BXDb68jJ0
他のスクリプトに簡単に切り替える方法はありますか?

今は、一度 ahk を終了し、再度別のスクリプトで起動していますが、やや面倒。
682名無しさん@お腹いっぱい。:2009/12/25(金) 17:08:09 ID:0J/8KN7I0
両方に、トレイメニューなり、ホットキーなりをトリガーにして、
Run, %A_AhkPath% "切り替え対象スクリプト.ahk"
ExitApp
とかにすればいいんじゃないのかな。

もし頻繁に切り替えるようなら、二つのスクリプトを統合して何らかの変数で動作を
切り替えるようにするのも手だと思う。

また、ウィンドウ毎にホットキーを変えたいという理由でスクリプトの切り替えをしているなら、
#IfWinActive を使えばアクティブウィンドウ毎にキー定義を返ることが出来るので検討されたし。
683名無しさん@お腹いっぱい。:2009/12/25(金) 17:21:28 ID:BXDb68jJ0
>>682
>Run, %A_AhkPath% "切り替え対象スクリプト.ahk"
>ExitApp

ありがとうございます。やってみます。

#IfWinActive などは、一部使っているのですが、なるべく簡単なスクリプトにしておくほうが
いいと思い、わざわざ手動切り替えしていました。
684名無しさん@お腹いっぱい。:2009/12/25(金) 19:12:18 ID:1h/vSt/g0
GUIでコントロールごとにドロップの受付の可否を決めることは出来ないのでしょうか?
685名無しさん@お腹いっぱい。:2009/12/26(土) 12:15:05 ID:EM/isUwV0
標準機能じゃできないかも
GuiDropFilesサブルーチンで A_GuiControl を参照してどこにドロップされたかを
判断して処理分岐すれば実質的には変わらない感じになるけどね

Gui, Add, Edit,w300 r3 vEdit1
Gui, Add, Edit,w300 r3 vEdit2
Gui, Show, h200
Return
GuiClose:
 ExitApp
GuiDropFiles:
 If (A_GuiControl="Edit1")
  GuiControl,, Edit1, % A_GuiEvent
 Return
686名無しさん@お腹いっぱい。:2009/12/26(土) 22:36:53 ID:cBt+joHm0
なんだか基本的な質問で申し訳ないのですが、
Win + WheelDownでWin + {+}
という事がしたいのですが、(Win7で拡大鏡操作)
LWin & WheelDown::SendInput,{LWINDOWN}{+}{LWIN UP}  ;(←いろいろ試したあげく妙な組み合わせ状態)
という記述ではアクティブウィンドウに+が送信されてしまったりします。
Win & WheelDown :: run,〜〜;という例は良く見つかるのですが、
既出だとは思いますがヒント頂けないでしょうか。よろしくお願いします。
687名無しさん@お腹いっぱい。:2009/12/27(日) 05:38:56 ID:Kmr3Y67d0
"ファイル名を指定して実行" の入力内容を得るにはどうしたら良いでしょうか。
au3_spy の "TitleMatchMode=slow Visible Text" の部分だけを取りだしたいのですが、
DetectHiddenText と WinGetText を組み合わせてもうまくいきませんでした。
また入力部分のクラスは "Edit1" らしいのですが、ここからは入力内容は取れませんでした。

宜しくおねがします。
688名無しさん@お腹いっぱい。:2009/12/27(日) 05:58:43 ID:VeBSCJHU0
そんなところの文字列を取得して、なにをやりたいのか不明だけど、
win7で

ControlGetText,var,ComboBox1,A
または
ControlGetText,var,Edit1,A

で取れたよ。これを0.1秒ごとに連続で監視して、
ウインドウが消滅した時点の文字列を確定にする・・・とかかな
689687:2009/12/27(日) 06:42:14 ID:Kmr3Y67d0
>>688
できました!!
目的は "ファイル名を指定して実行" をちょびっと便利に使おうというのが目的です。
Windows 7 x64 にしたら、今まで使っていた 32 ビット型コマンドラインランチャーは
System32 内のファイルを直接たたけないことが分かったので、
"ファイル名を指定して実行" を使って、欲しい機能は AHK で実装しようという試みです。
690名無しさん@お腹いっぱい。:2009/12/27(日) 15:29:20 ID:02VOOn8t0
流行らせるページのWheelRedirect.ahk
Win7のcmd窓で動作しない気がする。
動作しないというか、アクティブでもスクロールしないw(およそ原因は理解できる)
691名無しさん@お腹いっぱい。:2009/12/27(日) 17:14:10 ID:8Bl92HVs0
MouseGetPosでclassNNがとれないからでしょ
692名無しさん@お腹いっぱい。:2009/12/27(日) 19:30:54 ID:02VOOn8t0
うん、その回避方法も知りたかったんだけどw
とりあえずctrlは諦めてhwndで代替する例(cmd窓なら問題ないだろう)

*WheelDown::
CoordMode,Mouse,Screen
MouseGetPos,x,y,hwnd,ctrl,3
wp:=0xFF880000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6
lp:=y<<16|x
IfWinExist,ahk_id %hwnd%
{
if ctrl =
SendMessage,0x84,0,%lp%,,ahk_id %hwnd%
else
SendMessage,0x84,0,%lp%,,ahk_id %ctrl%
If ErrorLevel=4294967295
MouseGetPos,,,,ctrl,2
Loop,%A_EventInfo%
if ctrl =
PostMessage,0x020A,%wp%,%lp%,,ahk_id %hwnd%
else
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}
return
693名無しさん@お腹いっぱい。:2009/12/27(日) 20:45:01 ID:00vfL9BD0
前のスレでも幾つかでてきたと思いますが
流行らせるページのサンプルスクリプトのうち
うまくうごかないものが一定数でてきているかと思います

簡単なものでもかまいませんから、どなたかまとめてくれませんか
694名無しさん@お腹いっぱい。:2009/12/27(日) 21:38:30 ID:1ty7m/pp0
隗より始めよ
695名無しさん@お腹いっぱい。:2009/12/27(日) 22:41:58 ID:02VOOn8t0
環境によって失敗する関数、とかが判ってないと、環境依存したスクリプトが多く投稿されてしまうとは思うね。
Win98系→NT系ほどではないけど、Vista/Win7で随分デスクトップ周りが変更されたみたいだし。

>>686
わからんがsend先を何かいじってみるとか?
関係ないが結構おもしろいなこれw>ルーペ
696名無しさん@お腹いっぱい。:2009/12/27(日) 23:53:03 ID:VeBSCJHU0
はやらせるページに載ってた下記のコマンド

Transform,Clipboard,Unicode,%string%

Transform
http://lukewarm.s101.xrea.com/commands/Transform.html

Clipboardを経由して、UnicodeをShiftJISに変換してる。
これを、1分に1回の頻度で24時間実行していると、数ヶ月に1回ほどの低頻度で

「Can't open clipboard for reading」

と出てしまう。

このダイアログが出ると、スクリプトが完全に停止してしまうため、困った。
なにか回避方法ないかな?
697687:2009/12/28(月) 02:10:53 ID:z/Ki7tCx0
Windows 7 上で、AHK のスクリプトを管理者権限で走らせています。
ここから、通常のユーザー権限で別アプリケーションを起動するにはどうしたら良いでしょうか。
RunAs を使ってみましたが、イマイチ期待通りに動作しません。
698名無しさん@お腹いっぱい。:2009/12/28(月) 18:00:25 ID:FCRMkGG4P
これを使用したいのですが、どこかに初心者用の導入ページありませんか?
>>8のように
@使うソフトによってキーマップを切り替えて
Awaitを使って1行の簡単なスクリプトを動かしたいです。(Qのあと15ms秒後Fを押す)
おしえてください。
699名無しさん@お腹いっぱい。:2009/12/28(月) 18:09:46 ID:5CHAgwNw0
>>698
>>1
AutoHotkeyを流行らせるページ
以外の大きなサイトは多分ない。
初心者には敷居が高いのは事実なので、2,3日悩むのは覚悟した方がよろし。

Aに関してのヒントを書くと、waitに相当するのは主にsleepだよ。
700名無しさん@お腹いっぱい。:2009/12/28(月) 18:31:35 ID:FCRMkGG4P
>>699
ご親切にありがとうございます。
初心者向けのサイトみてみたがほんとになさげですね。
覚えらんない人のためのオンラインソフト備忘録さえも
軽くしか触れてないし。
すげー革命的なソフトっぽいのに

キーマップの切り替え、簡単なwaitということなら
窓使いの憂鬱つかえということなんですが、
先を見越して包括的なソフトのAHKに移りたいんですよね。
年末年始全部これに費やしそうで怖い
701名無しさん@お腹いっぱい。:2009/12/28(月) 20:11:03 ID://W2Z09h0
>>700
繭スレに誤爆してるぞw
繭もAHKもウィンドウ毎にキーマップ定義するのは同じくらいの労力だよ

簡単な例:メモ帳で[Ctrl]+[1]を雄とウィンドウの端で折り返しをトグル

#IfWinActive, ahk_class Notepad
^1::Send, !ow

上の例が分かれば、必要な分だけ似たような構造で書き連ねるだけ。
702名無しさん@お腹いっぱい。:2009/12/28(月) 20:58:37 ID:5CHAgwNw0
これ適当な所に記述しとくとスクリプト書くのに楽だよ

;hogehoge.ahkが開いている時は、F5キーで上書き保存後にリロード
#IfWinActive,hogehoge.ahk
F5::
Send,^s
reload
#IfWinActive
703名無しさん@お腹いっぱい。:2009/12/28(月) 21:17:52 ID:FCRMkGG4P
>>701
うはwwwまじだwww 向こうに訂正レスしてきます。

レスありがとうございます。教えてもらった情報をつかって
ちょっとづつ設定してちゃんと動くようになってます。
過去スレとか教えてもらった情報を抜粋して紙ソフトに残していっています。
なんとか目処が立ちそうです。sleepもちゃんと動いてくれたし。
たどりつきたいところまでははるかに遠いですが前進してるのはわかるのでまだ楽だわ。
ただ疑問が山のようにあるw

>>702
スクリプトを書き直してリロードの際に使わせてもらいます。
いままでクラフトランチでやってました。頻繁にリロードしますし
704名無しさん@お腹いっぱい。:2009/12/28(月) 21:55:54 ID:qbOKhesd0
Win7に以降してから、キーのリピート(と言ったらいいかわかりませんが・・・)で困ってしましました。
XPだと、例えば

#IfWinActive,Microsoft Excel ahk_class XLMAIN
^l::Send,^{PgDown} ;右のシートへ移動

と記述したら、Ctrlを離さないでlを押し続けると、さらに次のシートへ移動できたんですが
Win7だと機能しません。
他の記述を全部なくしてこれだけにしても、フックを使っても使わなくてもダメでした。

OSの仕様が変わったからなのでしょうか?何か解決策ありませんでしょうか?
705名無しさん@お腹いっぱい。:2009/12/28(月) 22:49:08 ID:FCRMkGG4P
うぉWIN7に、シームレスに移動できんのか。
706名無しさん@お腹いっぱい。:2009/12/28(月) 23:35:32 ID:5CHAgwNw0
>>704
windows7だが
いくよ?
#IfWinActive,Microsoft Excel ahk_class XLMAIN
^l::send,^{PgDn}
でCtrl離さないでLで次のシートにいける。
707704:2009/12/29(火) 00:36:33 ID:cVve7R7N0
>>706
すみません、常駐一個一個切っていったらyamyが原因でした。
これでのCtrlとCapsLock入れ替えが怪しいかと。
でもXPではきちんと動いていたので、いろいろ試行錯誤してみます。
708名無しさん@お腹いっぱい。:2009/12/29(火) 01:37:32 ID:ZNXI7IE+0
yamyとautohotkeyって同じhook を使用していた気がする
競合しやすいのでは?
709名無しさん@お腹いっぱい。:2009/12/29(火) 04:10:39 ID:wVwaG/1j0
質問があります.
基本すべてのアプリケーションに同じキーバインドをしようとしてます

ただ,一部例外があって,複数の例外アプリを指定したい場合は
どうすればいいんでしょう?

#IfWinNotActive ahk_class MozillaUIWindowClass
#IfWinNotActive ahk_class Notepad

とすると,最後に指定したアプリは例外として扱えますが,
最後以外はキーバインドが適用されてしまいます.
710名無しさん@お腹いっぱい。:2009/12/29(火) 04:49:45 ID:zRN4iEfn0
>>709
http://lukewarm.s101.xrea.com/Window.html
http://lukewarm.s101.xrea.com/commands/GroupAdd.html


GroupAdd, GroupHoge, ahk_class MozillaUIWindowClass
GroupAdd, GroupHoge, ahk_class Notepad

#IfWinNotActive, ahk_group GroupHoge
711名無しさん@お腹いっぱい。:2009/12/29(火) 06:56:08 ID:jfSc+oxuP
初歩的な質問ですが、質問させてください。
特定のウィンドウでのみのリマップに抜け道を作る方法を
教えてください。

別ソフトのグローバルホットキー(Ctrl+Space)を生かしておきたい
一方でとあるソフトにSpace:T を割り当てたいのです。

つまりSpeceオンリーのときはTを割り当てたいのですが、
Ctrl+Spaceのときはいままでどうり別ソフトのグローバルホットキー
を働かせたいのです。

http://lukewarm.s101.xrea.com/remap.html
の下から2・3行目に
Hotkey, *a, off
という表記がありますがこの箇所の説明がまったく
わかりません。Hotkey, *space, off では抜け道つくれませんでした。
前後につける文字列が間違っているのかもしれませんが。
~space:: のように記述するとどちらの設定もワークしてしまいます。

以下のように現在記述しております。

#IfWinActive,ahk_class TextEditorWindow
Hotkey, *space, off
Hotkey, *space up, off
Space::t

すいません。よろしくお願いします。
712名無しさん@お腹いっぱい。:2009/12/29(火) 08:42:00 ID:8Bk5ZmZi0
やり方としては、リマップをしないでホットキー定義を行う。
リマップはキー自体を他のキーに置き換えるから。(>>3 Q&A2参照)

Space::Send, t

とだけしておけば Space 単独押下の時だけのキー割り当てとなる。

※ Hotkey〜はコマンドなので、実行時にその行を通った時しか有効じゃない。
713名無しさん@お腹いっぱい。:2009/12/29(火) 12:57:44 ID:jfSc+oxuP
>>712
申し訳ないです。ありがとうございました。テンプレを読み返すべきでした。
sendを一度試してみるべきだとは一度頭をよぎったのですが。
これからは人に聞く度合いのしきい値をあげようと思います。
一部の機能しか使っていませんが、ほんとにいいソフトですよね。
プログラムに若干興味がでてきます。
ありがとうございました
714名無しさん@お腹いっぱい。:2009/12/29(火) 13:05:07 ID:pk4uh2O90
訊ねるしきい値を上げるより、頭を過ぎったことを試す方が先じゃね?
715名無しさん@お腹いっぱい。:2009/12/29(火) 13:06:49 ID:pk4uh2O90
あ、しきい値を上げるのか。スマン。
書き込みのしきい値を上げてくるわ・・・
716名無しさん@お腹いっぱい。:2009/12/30(水) 01:59:36 ID:vivp0eRr0
autohotkey_l で配列が使えるようですから
ruby のreadlinesのようなことをしたいのですが

逆引きRuby - ファイルアクセス
テキストファイルの特定の行を読み込む
http://www.namaraii.com/rubytips/?%A5%D5%A5%A1%A5%A4%A5%EB%A5%A2%A5%AF%A5%BB%A5%B9#l6

object を使ってどう設定すれがよいのでしょうか
717名無しさん@お腹いっぱい。:2009/12/30(水) 08:26:10 ID:AORkXnhW0
新規オブジェクト作って、ファイルを1行ずつ読んで格納するだけでしょ。
718名無しさん@お腹いっぱい。:2009/12/31(木) 10:15:54 ID:UKAo2qDQ0
Numpadに対応した方向移動を行うゲームにおいて
(たとえばnum7だと左斜め上、num6だと右といったような)
W(上)A(左)S(下)D(右)で操作したく、苦心しております。

W押下中にnum4を連打、といったスクリプトはなんとか出来たのですが、
W押下中に、さらにAを押下するとその間num7を連打、といったものは出来ないでしょうか。
w::
SetKeyDelay,50
Loop
{
Sleep, 10
GetKeyState, state, w, P 
if state = U
break         
Send,{vk26sc048} ;num4を送る

GetKeyState, state, a, P
if state = D
Loop
{
Sleep, 10
GetKeyState, state, a, P
if state = U
break
Send,{vk24sc047} ;num7を送る
}
}
return

これでは反応してくれませんでした。
719名無しさん@お腹いっぱい。:2009/12/31(木) 11:40:09 ID:S7NM6BdO0
w::WasdFunc("NumPad8", "a", "Numpad7", "d", "NumPad9")
a::WasdFunc("NumPad4", "w", "Numpad7", "s", "NumPad1")
s::WasdFunc("NumPad2", "a", "Numpad1", "d", "NumPad3")
d::WasdFunc("NumPad6", "w", "Numpad9", "s", "NumPad3")

WasdFunc(defaultKey, case1, key1, case2, key2) {
 key := GetKeyState(case1, "P") ? key1 : GetKeyState(case2, "P") ? key2 : defaultKey
 Send, {%key% DownTmp}
}
720名無しさん@お腹いっぱい。:2009/12/31(木) 11:43:05 ID:T/3gu3H20
>>719
横レスだが
GetKeyState をそういう風につかうという発想に驚いた
何かに転用できそうだ
721名無しさん@お腹いっぱい。:2009/12/31(木) 12:20:58 ID:KYxaJy2Q0
ゲームってことはWおしながらA押して、A離したらWが反応してほしいだろうから
スマートじゃないけどこんな感じ?

w::
s::
a::
d::
Loop
{
Sleep, 10
GetKeyState, stateW, w, P
GetKeyState, stateS, s, P
GetKeyState, stateA, a, P
GetKeyState, stateD, d, P
if(stateW = "D") {
Send, % stateA = "D" ? "{Numpad7}" : (stateD = "D") ? "{Numpad9}" : "{Numpad8}"
}else if(stateS = "D") {
Send, % stateA = "D" ? "{Numpad1}" : (stateD = "D") ? "{Numpad3}" : "{Numpad2}"
}else if(stateA = "D") {
Send, {Numpad4}
}else if(stateD = "D") {
Send, {Numpad6}
}else{
break
}
}
return
722名無しさん@お腹いっぱい。:2009/12/31(木) 13:24:56 ID:SXrEWhoJ0
みんな三項演算子好きだよなw
723名無しさん@お腹いっぱい。:2009/12/31(木) 14:54:03 ID:7ki43cquP
三項演算子好きについて

C言語「キサマらの居る場所は既に我々が30年前に通過した場所だッッッ」
724名無しさん@お腹いっぱい。:2009/12/31(木) 21:57:54 ID:UKAo2qDQ0
>>719,721
まさに求めていた通りの動作でした。
諦めかけてましたがこんなにあっさり上手くいくとは!
725名無しさん@お腹いっぱい。:2010/01/01(金) 06:24:31 ID:gNmK5VdHP
おれテンプレもまともに読まずに質問してたな。
それだけ文字読むのを苦にしてるっつーことか
726名無しさん@お腹いっぱい。:2010/01/03(日) 20:27:42 ID:kim56Rdo0
#IfWinNotActive ahk_class Chrome_WidgetWin_0

が無視されるわ クラス名Notepadに変えたらうまくいくから、chromeのクラス名まちがってんのかなぁ・・・
727名無しさん@お腹いっぱい。:2010/01/03(日) 20:37:54 ID:3RDZAyps0
>>726
Chrome_WindowImpl_0
じゃない? Window Spy(AU3_Spy.exe)で調べたらいいよ。
728名無しさん@お腹いっぱい。:2010/01/03(日) 20:51:06 ID:kim56Rdo0
>>727
うおおおおおおお!!!!
それでした。さっきはじめてwindow spyなるものも知れたし、勉強になるなぁ。
729名無しさん@お腹いっぱい。:2010/01/04(月) 12:35:52 ID:BP1by4Om0
#IfWinActive ahk_class Notepad


#IfWinNotActive ahk_class Notepad

こういう書き方をしたときって、条件以下の記述にすべて影響するじゃないですか。
Break的なものってないんですかね。
730名無しさん@お腹いっぱい。:2010/01/04(月) 12:54:11 ID:8hSI2FEA0
#IfWinNotActive
の1行を入れるとそれ以降はウィンドウに関わらない設定になる。

AHK_Lでは
#If
だけの行でもいい
731名無しさん@お腹いっぱい。:2010/01/04(月) 12:55:32 ID:8hSI2FEA0
間違えたw

#IfWinActive

の一行な
732名無しさん@お腹いっぱい。:2010/01/04(月) 13:17:51 ID:BP1by4Om0
おおおお!!なるほど クラス指定しないifwinactiveを入れればいいのか!
ありがとう!!
733名無しさん@お腹いっぱい。:2010/01/06(水) 09:41:36 ID:KNsSvrpi0
UNICODE版でmsgboxとかに日本語使ったら文字化けするんですが仕様ですか?
734名無しさん@お腹いっぱい。:2010/01/06(水) 09:55:19 ID:O/P/U4vs0
もちろん仕様
お前は使うな
735名無しさん@お腹いっぱい。:2010/01/06(水) 11:32:44 ID:4pSqWS5f0
736名無しさん@お腹いっぱい。:2010/01/06(水) 22:20:34 ID:b8+BtiN/0
~RIGHT & Shift::Send,xxx
が動くのに、
~RIGHT & Ctrl::Send,xxx
が動かない。。 なんで?
737名無しさん@お腹いっぱい。:2010/01/06(水) 22:40:47 ID:4pSqWS5f0
妙な組み合わせだな

Lexikos版かUnicode版で

#If GetKeyState("Right")
Shift::Send, xxx
Ctrl::Send, yyy
738名無しさん@お腹いっぱい。:2010/01/06(水) 22:55:05 ID:b8+BtiN/0
>>737
派生版があるの知らなかった
試してみますサンクス
739名無しさん@お腹いっぱい。:2010/01/07(木) 06:09:53 ID:4nzYhUzK0
体が金色になって手が真っ赤に萌えるのか
740名無しさん@お腹いっぱい。:2010/01/07(木) 13:26:39 ID:TPSuGlaa0
メモ帳とかにアンダーバー"_"を送ろうとした時、Sendコマンドだとちゃんと"_"になるのですが
ControlSendコマンドだと"\"になってしまうのですが何故でしょうか?
741名無しさん@お腹いっぱい。:2010/01/07(木) 20:41:04 ID:rOXHH/Jh0
XMLSocketの接続はできるかしら
躓いてしまいました
742名無しさん@お腹いっぱい。:2010/01/08(金) 10:52:45 ID:FalgWUZ70
流行らせるページのInputの説明に
「入力を待っている間は、ホットキーやメニューなどで新たなスレッドが割り込むことが可能。」
とありますが、新たなスレッドが割り込まないようにするにはどうすればよいですか?
743名無しさん@お腹いっぱい。:2010/01/08(金) 11:15:08 ID:Iz7AlO0z0
suspend
744742:2010/01/08(金) 11:44:54 ID:FalgWUZ70
>743
おおなるほどっ!
ありがとうございました。
745742:2010/01/08(金) 15:33:41 ID:FalgWUZ70
すみませんさっき質問した者です。
以下のスクリプトで1秒以内にキーボードでABと入力した場合、
「ab」と入力されると思ったのですがなぜか「ba」と入力されます。
なぜ順番が入れ替わってしまうのか教えてください。
また順番が入れ替わらないようにする方法があったら教えてください。

$a::
Input,var,T1,
Send,a
Return
$b::
Input,var,T1,
Send,b
Return
746名無しさん@お腹いっぱい。:2010/01/08(金) 16:22:54 ID:JoHcK+lP0
aのinput待ち中にbが割り込んでsend,bして戻ってsend,aするからbaになる
747742:2010/01/08(金) 16:31:35 ID:FalgWUZ70
>746
割り込みの意味をちゃんと考えていませんでした。
たしかにその通りですね。
うまい回避方法はないでしょうか。
748名無しさん@お腹いっぱい。:2010/01/08(金) 17:24:06 ID:rs3qm6ch0
その例だと最終目的がちょっとよく分からない (ただの例なのか、大文字に変換したいのか)
Inputを使っている理由も。

特定キーで文字を出力したいならHotstringを使う手もあるよ
749名無しさん@お腹いっぱい。:2010/01/08(金) 17:26:17 ID:HcatVB760
なにがしたいのかよくわからんが
criticalにするとか
750742:2010/01/09(土) 14:30:29 ID:AxEDv1940
アクセス規制でレス遅れました。

>748
親指シフトのエミュレータを作ってみようと思っています。
アルファベットキーに対してシフトキーが少し遅れた場合にもシフトキーを有効にするためにInputを使っています。

>749
Criticalでうまくいきました!
ありがとうございました。
751名無しさん@お腹いっぱい。:2010/01/09(土) 17:27:50 ID:AzFOSpdK0
ひさしぶりにスレを覗いたらAutoHotKeyが大変化している!
AutoHotKeyLにUだと…!?
752名無しさん@お腹いっぱい。:2010/01/09(土) 17:34:37 ID:uae1oDZOP
_U 使ってみたらMouseGesture.ahkの設定ダイアログがズレちまってたので戻した
誰か書き換えてくれー
753名無しさん@お腹いっぱい。:2010/01/09(土) 18:29:42 ID:WyQWf7vU0
新しいアレイライブラリーを発見しました。
AHKAとかSimplaArrayとかのもありますけどこれが一番ですね。
ttp://www.autohotkey.com/forum/viewtopic.php?p=322534#322534
754名無しさん@お腹いっぱい。:2010/01/10(日) 22:17:37 ID:g8fugXjZ0
キャレット位置にマウスカーソルを移動するのはA_CaretX、A_CaretY、MouseMoveで出来ますが、逆に
マウス非対応テキストエディタ等でマウスクリック位置にキャレットを直接移動させる方法はありますか?

MouseGetPos, xpos, ypos
A_CaretX := xpos
A_CaretY := ypos
↑こんな感じで出来るかなと思ったけど駄目でしたorz
755名無しさん@お腹いっぱい。:2010/01/10(日) 22:27:18 ID:pmE8tX9E0
多分無理。そもそも組み込み変数は読み取り専用で、代入しても意味がない。
具体名が無いから分からないけど、汎用のWinAPIも多分通らないんじゃないのかね。
756名無しさん@お腹いっぱい。:2010/01/10(日) 22:52:58 ID:b+8dM31v0
>>753
速さを売りにしているライブラリか
おもしろそう
757名無しさん@お腹いっぱい。:2010/01/11(月) 00:18:02 ID:+FA6Ijzp0
>>754
>マウス非対応テキストエディタ
なにそれこわい
>>755が言うように、具体名がないとなんとも言えん(´・ω・`)
758名無しさん@お腹いっぱい。:2010/01/11(月) 08:51:20 ID:AHgefbu/0
コマンドラインのBATコードを、ahkの内部でfileappendで作成し、

runwait , GenerateNow.bat , , hide

で起動して、バックグラウンドで定型処理をさせる使い方を多用しています。
コマンドライン中でエラーが出たときなどで「再試行しますか?」などのキー入力を
求められるとき、ウインドウにアクセスすることが出来ず手詰まりになってしまいます。

runwait , GenerateNow.bat , , min

で最小化で起動すれば、このようなエラー時の対処が可能ですが、
これだとプロセスを起動するごとにタスクバーに新規ウインドウがチラチラ出現してしまい、
日常の作業に支障が出てしまいます。

そこで質問ですが、普段はhideで進行させておき、キー入力を求められる状況になったときだけ、
コマンドプロンプトの対話ウインドウを開く方法なんて、ないでしょうか。

あるいは、バッチ側の処理として、errorlevelが通常の処理以外じゃないときに、
エラーフラグの役割をさせるファイルを、特定の場所に作成します。そのファイルの存在を
ahk側で監視して、ファイルの存在を確認できたときに、ahk側からhideのウインドウを表示状態にする。
、、、なんてことは可能でしょうか。
759名無しさん@お腹いっぱい。:2010/01/11(月) 10:48:23 ID:Lz8DTXJC0
runwaitじゃなくてrunで起動して
プロセスがいなくなるorエラーファイルの存在を
タイマかループで監視したらいいんでない?

個人的にはわざわざbat生成せんでもAHKのrunコマンドで
順次処理させてしまいたいところだが、標準入出力の処理が
めんどくさいことは変わらないか
760754:2010/01/11(月) 13:25:28 ID:GIcwgxCp0
マウス非対応テキストエディタはEngineer's Padです。
DllCall()、SetCaretPos()、SetSel()あたりでもうちょい試行錯誤してみます。
761名無しさん@お腹いっぱい。:2010/01/11(月) 19:19:17 ID:N16Qqc+eP
Guiで、ウィンドウ全面にAero Glassが利いてるようなGUIって作れませんか?
762名無しさん@お腹いっぱい。:2010/01/11(月) 21:42:39 ID:JruK2A1m0
Windows 7 で AHK_L Unicode を使用しています。
ジョイスティックの入力を A_TimeIdle に反映させるにはどうしたら良いでしょうか。
763名無しさん@お腹いっぱい。:2010/01/11(月) 22:41:41 ID:aVhsHmU50
>>761
半透明ならTransparent設定で手軽にできるけど、それ以外は厳しいんじゃないかな

>>762
操作したかどうかをボタン押下と方向ボタン入力を監視。
操作したと見なしたら、マウスをちょっと動かすか、キーを送る

マウスなら1ドット左右に振る(MouseDeleyとSpeedは0に)、など。
キーならF24とか使わなそうなのを送る、など。
764名無しさん@お腹いっぱい。:2010/01/11(月) 23:20:03 ID:ziiOtBRJ0
>>760
ピクセルの色見るしかないと思うよ

>>761
ぐぐっただけで読んでないけど
ttp://www.autohotkey.com/forum/topic31236.html
765762:2010/01/12(火) 00:39:54 ID:NgEiRFRt0
>>763
なるほど、そういう手ですね。
ちょっと試してみます。
ありがとうございました。
766名無しさん@お腹いっぱい。:2010/01/12(火) 01:34:21 ID:+PgcwT1KP
知恵を拝借できないでしょうか?
ControlSendを使って非アクティブのアプリを終了させたいのです。

単機能ソフトのCloseを使ってプロセスから終了させるとOSがシャットダウンしてしまうので
当該アプリのバーにALT F4を送るようにしたいのです。カーソルを当該アプリのバー上で
クリックしてからALT F4を押すと異常なくアプリが閉じてくれます。

終了させたいアプリはFEATHER2006というキャプチャーボードのテレビ視聴ソフトで、
画面の端にバーとして張り付くタイプのものです。(隠れたりするモードにも設定でできます)
次のように試しに書いてみました。

#n::
DetectHiddenWindows,On
ControlSend,FEATHER_App1,!F4,ahk_class F2006_AppBar
return

上を試してみたのですがまったく反応がありません。 
AU3にて取得した当該アプリバーの情報は次のとおりです。
767名無しさん@お腹いっぱい。:2010/01/12(火) 01:35:56 ID:+PgcwT1KP
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
ahk_class F2006_AppBar
>>>>>>>>>>>>( Mouse Position )<<<<<<<<<<<<<
On Screen: 1220, 603 (less often used)
In Active Window: 116, 603
>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: FEATHER_App1
Text: FEATHER
Color: 0xF0F0F0 (Blue=F0 Green=F0 Red=F0)
>>>>>>>>>>( Active Window Position )<<<<<<<<<<
left: 1104 top: 0 width: 176 height: 994
>>>>>>>>>>>( Status Bar Text )<<<<<<<<<<
>>>>>>>>>>>( Visible Window Text )<<<<<<<<<<<
FEATHER
CTL

sendmessageならできそうというレスを過去ログでみたのですが
あまりにも難解っぽくヒントがないのでControl Sendでやってみようと思っています。
ご教授いただけないでしょうか?よろしくお願いします。
768名無しさん@お腹いっぱい。:2010/01/12(火) 01:46:08 ID:NgEiRFRt0
>>767
#n:: WinClose, ahk_class F2006_AppBar
または
#n:: WinKill, ahk_class F2006_AppBar
はどうですか?
769名無しさん@お腹いっぱい。:2010/01/12(火) 02:03:29 ID:+PgcwT1KP
>>768
ありがとうございます! 実現できてちゃんと動きました。
すぐに回答いただきほんと助かりました。
WinCloseっていう式があったのはじめて知りました。こういう式の一覧が
流行らせるページにあるんだろうか、まだ読み込んでいないみたいですね。
AHKは凄い

非アクティブのウインドウ・アプリ操作もできるようなことが私にとって
AHKにかなり魅力を感じたのですが、さっきのControl Closeのなにが
駄目だったのか気になります。これから非アクティブの操作しようと思っても
同じところで行き止まりになる気がします。

とにもかくにもありがとうございました。助かりました。引き続き調べてみます。
770名無しさん@お腹いっぱい。:2010/01/12(火) 02:11:09 ID:KiDUDDr10
!F4→!{F4}
じゃね
771名無しさん@お腹いっぱい。:2010/01/12(火) 02:23:51 ID:+PgcwT1KP
>>770
レスありがとうございます。
そこ前から気になっていたので両方を何度も試したのですが
無理でした。{F4}って書き方は以前から迷っているやり方で気にとめていました。
いまやってもやっぱり無理でした。アプリ側の問題なのかな。
772名無しさん@お腹いっぱい。:2010/01/12(火) 02:23:59 ID:NgEiRFRt0
773名無しさん@お腹いっぱい。:2010/01/12(火) 03:21:12 ID:+PgcwT1KP
>>772
リンクありがとうございます。その一覧上から下まで眺めてみます。
付属のヘルプは英語なので読めないw
あといまさらですが>>776のF4の書き方、まちがって書いてしまってますね。
774名無しさん@お腹いっぱい。:2010/01/12(火) 15:09:29 ID:YDo3CtlD0
タスクバーの最前面表示をON/OFFしたくて、
WinSet, AlwaysOnTop, ON, ahk_class Shell_TrayWnd
ってやってみたんですけど最前面表示になってくれません。
タスクバーには効かないんでしょうか。
775名無しさん@お腹いっぱい。:2010/01/12(火) 17:53:02 ID:PP+jNlAw0
>>773
ttp://www6.atwiki.jp/eamat/
ここに流行らせるページをchmヘルプにしたものがありまっせ
776名無しさん@お腹いっぱい。:2010/01/12(火) 18:57:56 ID:G5Yw15pm0
メニューに不特定数の項目を追加したいんですが
対応するラベルで処理を振り分けると言うことは
もしメニュー項目が1000個作られる可能性がある場合は
あらかじめ1000のラベルを作っておかないといけないと言うことでしょうか?
どのメニューを選んだかさえわかれば、あとは関数で同じ処理が出来てしまうような内容なのですが
777名無しさん@お腹いっぱい。:2010/01/12(火) 19:35:09 ID:eYnbDmH00
Loop, 10
{
Random, rnd, 1, 100
Menu, M1, Add, 項目%rnd%, MenuAction
}
Menu, M1, Show
Return
MenuAction:
MsgBox, メニュー「%A_ThisMenu%」の上から%A_ThisMenuItemPos%番目の「%A_ThisMenuItem%」を選択
Return
778名無しさん@お腹いっぱい。:2010/01/12(火) 22:34:47 ID:G5Yw15pm0
>>777
ありがとうございました!
サンプルがとてもわかりやすかったです
779名無しさん@お腹いっぱい。:2010/01/12(火) 23:01:28 ID:zAArunIz0
規制テスト
780名無しさん@お腹いっぱい。:2010/01/12(火) 23:24:20 ID:+PgcwT1KP
ウインドウハンドルの適切な取得の方法をおしえてください
僕のやり方では知ったウインドウハンドルをControlSendのあとに続けても
どのアプリでも動いてくれません。(ほとんどの場合ClassNNをオーソドックスに入れると動く)

いま躍起になってるアプリなのですが
Controlsendにてキーを送りたい先のアプリケーションのClassNNが
SysListView323なので、おそらくこれが原因で動いてくれません。
なのでウインドウハンドルなるものを直接指定してする必要があるようなのです。

いまやっているウインドウハンドル取得の方法
#u::
ControlGet, WhichTab, Hwnd, , SysListView323, PeCaRecorder
if ErrorLevel <> 0
MsgBox There was a problem.
else
MsgBox Tab #%WhichTab% is active.
return

これにてダイアログで出現した#0x40ae2というのを
ControlSendの最初にいれて
#P::
run C:\PeCaRecorder\PeCaRecorder.exe
WinWait, PecaRecorder, , 2
ControlSend,#0x40ae2,{F5},ahk_class #32770
return
としているのですが、PeCaRecorder.exeが起動するだけです。
どなたかヒントいただけませんか?
781名無しさん@お腹いっぱい。:2010/01/13(水) 02:08:29 ID:WT26LyS1P
>>780の下から四行目のところを次のように試しに改変しました
ControlSend,,{F5},ahk_id 0x6039a
これで一時的には動くのですが、プログラムが起動のたびに
ウインドウハンドルを変えるので結局使えなくなりました。
782名無しさん@お腹いっぱい。:2010/01/13(水) 02:14:50 ID:QO5FysDu0
>>781
プログラムが起動のたびにウインドウハンドルの値を取得すればいいのでは?
783名無しさん@お腹いっぱい。:2010/01/13(水) 02:19:38 ID:WT26LyS1P
レスありがとうございます。なるほどAHK側で起動毎にウインドウハンドルを取得させるんですか?
むずかしくて今はわかりません。みてみます。
いままでは、手動で自分でDisplayWindowInfoOnMouseOver.exeというのを起動して
そこでコピペした文字列を自分でiniに張り付けていました。
784名無しさん@お腹いっぱい。:2010/01/13(水) 06:59:25 ID:wPFFKYtu0
ウィンドウが作られる度に毎回ハンドルは変わるので、ウィンドウハンドルは、毎度取得し直す必要があるよ
AHKの起動毎じゃなく、ホットキーで呼び出す毎に。
785名無しさん@お腹いっぱい。:2010/01/13(水) 07:48:55 ID:WT26LyS1P
>>784
ありがとうございます。WINGETでいいのかな、いま格闘してますが
ぜんぜんあかんw
786名無しさん@お腹いっぱい。:2010/01/13(水) 08:37:12 ID:WT26LyS1P
あまりテストしてませんが、なんとか動くようになったみたいです。
ググってでてきたHPのものを一部コピペしたので何故そうなるかまったくわからない。
とりあえず報告まで

;ペカの起動マクロ
#P::
run C:\PeCaRecorder\PeCaRecorder.exe
SetTitleMatchMode, 2 ;なにこれ?
Sleep, 500 ;起動してすぐF5は利かないみたいなので
WinGet, FF,, PeCaRecorder ;大文字小文字区別。拝借してきたよーわからん。
ControlSend,, {F5}, ahk_id %FF%
return
787名無しさん@お腹いっぱい。:2010/01/13(水) 11:40:42 ID:co7wmGxK0
コマンドは全部流行らせるページに解説あるんだから
それぞれ一行づつ調べたらいいよ

PeCaRecorderとやらはよく知らないが林檎の木のSS見た感じだと
TitleMatchModeはデフォ(1:前方一致)のままでもよさげ
もし多重起動可能なアプリだったらRunで起動させる時にPID取得した方が確実
788名無しさん@お腹いっぱい。:2010/01/13(水) 12:01:42 ID:gGRzoWSQ0
>>775
以前からchmとしてのヘルプが欲しいと思っていたのでが、
作成している方がいらっしゃったのですね。
普段xyzzyを使っているのでカーソル位置の関数等を
F1で直ぐに検索出来て凄くありがたいです。
789名無しさん@お腹いっぱい。:2010/01/13(水) 12:52:44 ID:P+V0QsoZ0
AHKって指定したトレイアイコンの上で〜っていう条件はできませんよね?
MouseGesture.ahk使ってfoobar2000のトレイアイコンの上で進む戻るボタンを押すと次の曲前の曲をやりたいのですが
790名無しさん@お腹いっぱい。:2010/01/13(水) 13:51:31 ID:hJw9anCw0
ImageSearchでいけそうかも
791名無しさん@お腹いっぱい。:2010/01/13(水) 14:17:48 ID:wPFFKYtu0
マウス直下のタスクトレイアイコンのアイコン番号を取得
番号は0始まり、該当しない場合は-1を返す
取得した番号は、流行らせるページの「タスクトレイアイコン操作」と組み合わせて使う。
http://lukewarm.s101.xrea.com/myscripts/index.html

Tra_GetyIconNo_UnderCursor() {
 CoordMode, Mouse, Screen
 MouseGetPos, x, y, hwnd, classNN
 TrayIconNo := -1
 If (classNN == "ToolbarWindow321" && hwnd == WinExist("ahk_class Shell_TrayWnd")) {
  MouseGetPos, ,,, ctrl,2
  sizeOfStruct := VarSetCapacity(POINT, 4*2, 0x00)
  NumPut(x, POINT, 0, "Int")
  NumPut(y, POINT, 4, "Int")
  DllCall("ScreenToClient", "UInt",ctrl, "UInt", &POINT)
  WinGet, pid, PID, ahk_id %ctrl%
  If (hProcess := DllCall("OpenProcess","UInt", 0x38, "UInt", 0, "UInt", pid, "UInt")) { ; PROCESS_VM_OPERATION(0x08)| PROCESS_VM_READ(0x10) | PROCESS_VM_WRITE(0x20)
   If (remote_buffer:=DllCall("VirtualAllocEx", "UInt", hProcess, "UInt", 0, "UInt", 20, "UInt", 0x1000, "UInt", 0x0004, "UInt")) { ; MEM_COMMIT(0x1000), PAGE_READWRITE(0x0004)
    If DllCall("WriteProcessMemory", "UInt",hProcess, "UInt",remote_buffer, "UInt",&point, "UInt", sizeOfStruct, "UInt", NULL, "Int") {
     SendMessage, 0x445, 0, remote_buffer,, ahk_id %ctrl% ; TB_HITTEST(0x445)
     TrayIconNo := ErrorLevel
    }
    DllCall("VirtualFreeEx", "UInt",hProcess, "UInt",remote_buffer, "UInt",0, "UInt",0x8000) ; MEM_RELEASE(0x8000)
   }
   DllCall("psapi\CloseProcess","UInt",hProcess)
  }
 }
 Return TrayIconNo 
}
792名無しさん@お腹いっぱい。:2010/01/13(水) 16:33:53 ID:P+V0QsoZ0
>>790-791
す、すげえ・・・
ありがとうちょっと弄ってきます
793名無しさん@お腹いっぱい。:2010/01/14(木) 19:32:11 ID:38pJVb+z0
>>775
見た事あるアドレスだと思ったら、IME.ahkの人のサイトなのね。
感謝感謝
794名無しさん@お腹いっぱい。:2010/01/14(木) 20:39:43 ID:7S+aWtqd0
アクティブウィンドウのサイズをツールチップ表示したくて下のようにしてみたのですが
リサイズしている時はツールチップ更新してくれません
アドバイスください

Loop
{
WinGetPos,,, Width, Height, A
ToolTip, %Width% x %Height%
Sleep, 200
}
795名無しさん@お腹いっぱい。:2010/01/14(木) 20:55:30 ID:TXm4FWBv0
~LButton::
 If InStr(A_Cursor, "Size") {
  While GetKeyState("LButton") {
   WinGetPos,,, w, h, A
   Tooltip, %w% x %h%
   Sleep, 20
  }
  Tooltip
 }
 Return

以下は、Lexikos/Unicode版用
#If InStr(A_Cursor, "Size")
~LButton::
 While GetKeyState("LButton") {
  WinGetPos,,, w, h, A
  Tooltip, %w% x %h%
  Sleep, 20
 }
 Tooltip
 Return
796名無しさん@お腹いっぱい。:2010/01/14(木) 23:00:40 ID:7S+aWtqd0
>>795
ツールチップがうまく出ないのですがどうもこちらのマウスの問題な気がしますので
もうちょっといろいろ試してみたいと思います
どうもありがとうございました
797名無しさん@お腹いっぱい。:2010/01/15(金) 12:45:25 ID:f3iDxyoZ0
autohotkey で ime を操作するライブラリ IME.ahk では
Text Services Framework (TSF) を操作できません
どうすれば操作できるようになりますか?
798名無しさん@お腹いっぱい。:2010/01/15(金) 19:57:43 ID:xHptcjMO0
>>797
具体的にやりたい事がわからんけど、最新(>>514)のIME.ahkでGETしてからSETで操作できるかと
799796:2010/01/15(金) 22:05:00 ID:kybTvzty0
ツールチップが出なかったりリサイズ中にツールチップが更新されなかったのは
マウスとか関係なく視覚効果を全部切っていたのげ原因でした…
800名無しさん@お腹いっぱい。:2010/01/17(日) 15:30:16 ID:T4YJWT+U0
>>797
IME.ahkは旧タイプAPI(IMM32)での制御なので、Google日本語入力などの
TSF(詳細なテキストサービス)じゃないと動かないIMEだと
ON/OFFくらいしか操作できないです。

TSF関数のノウハウがあるならDllCallあたりでゴニョゴニョするとどうにかなるかも。
上手くいったらフィードバックしてくれると嬉しい
801名無しさん@お腹いっぱい。:2010/01/17(日) 20:32:25 ID:W20YkhWN0
ちょいと質問なんですがAHKでデスクトップをアクティブ化とか最前面に持ってこれたり
しますか?自分でWinActiveForceとかWinSetとかはつかってみたんですがどうもうまくいかなくて。
だれかできてる人がいたら教えてください。
802名無しさん@お腹いっぱい。:2010/01/17(日) 20:44:33 ID:7Ez/58PW0
WinActivate, ahk_class Progman
で、デスクトップにフォーカス当たるけど、そういうことじゃないのね
803名無しさん@お腹いっぱい。:2010/01/17(日) 20:48:10 ID:+hNvmvi90
単純にSend,#mじゃ駄目なんかね。
804名無しさん@お腹いっぱい。:2010/01/17(日) 21:22:38 ID:W20YkhWN0
>>802
うお、すご、そんなこともできたんですね。
>>803
今もそれ使ってるんですが、何かの弾みでウィンドウの順番が変わってしまうことがあって、
それでデスクトップを一番手前に持ってこれればウィンドウの順番変わらないんじゃないか?ということで聞いてみたんですが、
この文章書きながら、あれ、デスクトップアクティブにした後ウインドウの順番戻すにゃどうすれば・・・とか新たな疑問がががが。
ともかく即レス感謝です!
805名無しさん@お腹いっぱい。:2010/01/17(日) 21:33:08 ID:T4YJWT+U0
ん? DeskLamp や Desk Topmost みたいなのをやりたいわけじゃないのか
昔あれAHKでやりたかったけど、単純に AlwaysOnTop じゃ無理なんだよね

・透過ウィンドウを全画面配置し、デスクトップ上のアイコンをコピーして同じ位置に配置する
もしくは
・Regionで上に重なってるウィンドウに穴を空け、デスクトップ上のアイコンを直接弄れるようにする
とかやれば擬似的にはそれっぽくなるのかな
後始末や操作のフィードバック(アイコンをドラッグして並べ替えしたり)まで考えるとしんどいけど
806名無しさん@お腹いっぱい。:2010/01/18(月) 15:58:44 ID:ZCdcBnwiP
Send, #d
ならトグルできるけどそういうことではなく?
807名無しさん@お腹いっぱい。:2010/01/18(月) 22:27:19 ID:7yuPKeXX0
Sleepのディレイに変数を使う事はできないですか?
Sleep, hoge
sleep, %hoge%
無理でした。

処理の待ち時間を条件で変えたいのですが。
808名無しさん@お腹いっぱい。:2010/01/18(月) 22:33:52 ID:RsYpdqb10
書式的には後者でいける
809名無しさん@お腹いっぱい。:2010/01/19(火) 12:24:16 ID:n/foSsxk0
数字が入ってないとか
グロ変と被った名前付けてるとか
810名無しさん@お腹いっぱい。:2010/01/19(火) 15:51:22 ID:57fV+qPP0
あんま変な略し方しないでくれw
811名無しさん@お腹いっぱい。:2010/01/19(火) 16:10:47 ID:MtdivDU70
たしかに、グロ変つかいすぎると、settimerを回したときなんかに動作がグロくなるな
812名無しさん@お腹いっぱい。:2010/01/19(火) 16:42:34 ID:JGbn5Idc0
既出だと思うけど、
ジョイスティックを接続していない状態でジョイスティック関連のスクリプトを実行していると
autohotkeyがどんどん重くなるっぽいね
813名無しさん@お腹いっぱい。:2010/01/19(火) 17:16:51 ID:57fV+qPP0
どんな感じのスクリプト?
814名無しさん@お腹いっぱい。:2010/01/19(火) 18:47:22 ID:7f2GU+2R0
joystick, up down
Hold me
Enjoy!
815名無しさん@お腹いっぱい。:2010/01/19(火) 22:47:41 ID:pQXMyaOX0
最初に無変換をコンビネーションキーで設定させると、
~vk1Dsc07B & I:: Send,{Up}
ほかのアプリ限定でまたべつに無変換キーに別のsendを割り当てても
#IfWinActive,ahk_class
このアプリで無変換キーに割り当てたスクリプトsendが動かないですね。

とりあえずいまのところ#IfWinNotActiveで回避はしているのですが、
回避できるウインドウは一つだけですよね?

なにかイイ方法ご存知ありませんか?
816名無しさん@お腹いっぱい。:2010/01/19(火) 23:12:42 ID:cLYzJAI60
817名無しさん@お腹いっぱい。:2010/01/19(火) 23:58:48 ID:pQXMyaOX0
>>816
レスありがとうございます。たしかにそれでいけそうです。
しかし動かない。書き方をチェックしてるのですが。
なぜだろう。ありがとうございました
818名無しさん@お腹いっぱい。:2010/01/20(水) 01:01:04 ID:40M4C8QT0
GroupAdd, GroupHoge, ahk_class Notepad
#IfWinNotActive, ahk_group GroupHoge
Q::
Send, {Q}
Sleep, 10
Send, {5}
return
#IfWinNotActive

と書いているのですが、メモ帳の上でQ押してもマクロが動いてQ5と書いてしまう。
上から2行がスルーされて一般適用になってる? なにがいけないんだろう
819名無しさん@お腹いっぱい。:2010/01/20(水) 01:24:22 ID:xkhDUvo60
>>818
そのままコピペして実行してみたけど正常に動いたよ。
とりあえず、基本的な対処法としての
全てのAutohotkeyファイルを終了して再実行したり、
Windowsの再起動をやってみては
820名無しさん@お腹いっぱい。:2010/01/20(水) 01:28:42 ID:40M4C8QT0
>>819
テストありがとうございます。そうですか、、、。
いまだにちゃんと動かない。iniの上下の記述が悪いんだろうか。
気にして見てるんですけど。
グループ作成でつまづいているっぽいけど。うーむ。再起動してこよう
821名無しさん@お腹いっぱい。:2010/01/20(水) 01:37:42 ID:bTZxZn3C0
>>iniの上下の記述が悪いんだろうか
とりあえず検証するときはほかのスクリプトは消してしようぜ
822名無しさん@お腹いっぱい。:2010/01/20(水) 01:43:20 ID:40M4C8QT0
>>821
ありがとうございます。そうしてみます。代用のiniつかってやってみます。
ぜんぜんでけん
823名無しさん@お腹いっぱい。:2010/01/20(水) 01:47:24 ID:40M4C8QT0
ほんとでした。テストでまっさらのautohotkey.iniに>>710
書いたらちゃんと動きました。なにが悪いんだろう。書き残しないはずなんだが
824名無しさん@お腹いっぱい。:2010/01/20(水) 01:48:55 ID:bTZxZn3C0
もう寝るんで
つAuto-executeセクション
825名無しさん@お腹いっぱい。:2010/01/20(水) 01:55:52 ID:40M4C8QT0
ありがとうございます。
>Auto-executeセクション
よくわかりませんが、あとで調べさせてもらいます
826名無しさん@お腹いっぱい。:2010/01/20(水) 02:18:07 ID:EsidVYCI0
質問です。
「¥」キーを押したら、
「a」「i」とふたつのキーコードが連続で入力される
というようにしたいのですが、
(ワンキーで、特定のキーシーケンスを入力したい)
どう書いたらよいのでしょうか?
827名無しさん@お腹いっぱい。:2010/01/20(水) 02:24:03 ID:SoJzv8eS0
<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
828名無しさん@お腹いっぱい。:2010/01/20(水) 03:05:24 ID:40M4C8QT0
>>825
悪いところがわからないので、>>818をautohotkey.iniの
先頭にもっていったら動くようになった。

Auto-executeセクションの意味が流行らせるページ読んでもやはりわからない。
autohotkey.iniのメモ帳の先頭何行はそのセクションなんだろうか。
それともただスクリプトが実行される範囲でreturnまでのことをいうのだろうか。
わからない。>>114に書いてるようにほかの行にまで連続実行が突入しているのだろうか
return行は調べているのですが。
ありがとうございました。ちょっとググります。
829名無しさん@お腹いっぱい。:2010/01/20(水) 03:47:33 ID:EsidVYCI0
オレも流行らせるページだいぶ頑張って読んだけど、
普段プログラミングとかしない人なので、
さっぱり分からない・・・。
のどか(旧窓使いの憂鬱)みたいな
初心者向けの解説があるとありがたいんだけどな。
830名無しさん@お腹いっぱい。:2010/01/20(水) 05:28:18 ID:xkhDUvo60
Send/SendRaw/SendEvent/SendInput/SendPlay
http://lukewarm.s101.xrea.com/commands/Send.html
キー/マウスボタン名一覧
http://lukewarm.s101.xrea.com/KeyList.html
KeyHistory
http://lukewarm.s101.xrea.com/commands/KeyHistory.html
Hotkeys
http://lukewarm.s101.xrea.com/Hotkeys.html


;日本語キーボードのBackSpaceの左側の\
\::Send, ai
;または
vkDCsc07D::Send, ai


;/の右側にある\
vkE2sc073::
Send, a
Send, i
Return
831名無しさん@お腹いっぱい。:2010/01/20(水) 05:58:23 ID:40M4C8QT0
AHKは神ソフト
832名無しさん@お腹いっぱい。:2010/01/20(水) 07:05:47 ID:WCIldwPO0
Auto-execute で困っている人、#Include は使ってる?
833名無しさん@お腹いっぱい。:2010/01/20(水) 07:58:19 ID:OJGlPc4FP
>>828
スクリプトが読み込まれると、最初にReturnかExitあるいはホットキーラベルが現れるか、スクリプトの終わりに達するまでが実行される。
この部分のことを、auto-executeセクションと呼ぶ。

流行らせるページを探すんじゃなくて、何故"Auto-executeセクション"そのものでぐぐらない?!
あと書くのはGroupAdd〜だけでいい
834名無しさん@お腹いっぱい。:2010/01/20(水) 08:22:02 ID:40M4C8QT0
>>832
私でしょうか?
#Includeがないと思ったら探したらありました。
>#include ime_func.ahk
>^vk1Dsc07B:: IME_OFF("A")
>return
これをファイルの先頭にもっていきました。

>>833
すいません。
>スクリプトが読み込まれると
もうこの時点でわからない。AHK起動時にiniを読み込んだときという解釈でいいのかな。
>あと書くのはGroupAdd〜だけでいい
だけでいい、ってのが分かりませんがしばらく自力でやります。

ありがとうございました
835名無しさん@お腹いっぱい。:2010/01/20(水) 11:19:39 ID:A9VL/mrF0
変数に入れた文字列(通常のShiftJIS)を、EUC-JPの数字表記に変えたいです。

http://ash.jp/code/codetbl2.htm

この表でいうと、たとえば

 亜 → B0A1
あいうえお → a4a2a4a4a4a6a4a8a4aa

みたいに、変換元の2バイトコードを、4文字の16進数の数字表記に変えたいです。
URLの検索ワードの加工で使いたいのですが、うまい方法はないでしょうか。
836名無しさん@お腹いっぱい。:2010/01/20(水) 12:11:54 ID:0ak1med90
なんだかえらい面倒なことになってるな
Autoexec.batを知らん世代だと概念そのものがわかんないのか

>>834
Auto-executeセクションとは、スクリプト(この場合はAutoHotkey.iniファイル)の先頭部分のこと
AHK起動して一番最初に実行されるので初期化しておきたい内容を記述する。
GroupAddはこの「Auto-executeセクション」に書かないとダメ
#Include云々は、それ入れるとAuto-executeセクション終わっちゃうことがあるから
GroupAddはそれより上の行に書けってこと。
837826:2010/01/20(水) 12:35:01 ID:EsidVYCI0
>>830さん
おお。
ありがとうございます!
838名無しさん@お腹いっぱい。:2010/01/20(水) 12:41:58 ID:30wCpFfn0
>>835
>URLの検索ワードの加工で
URLエンコード ってことでおk?

過去スレ AutoHotkey 3 の102,104,867 あたりかな?

ue:
ttp://craft.office.vg/index.php?%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC&word=%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
- SJIS、EUC、UTF-8、変換しない

AHKで使える検索プラグイン:
ttp://kaede.to/~canada/doc/searchit-for-ahk
- UTF-8 、EUC-JP、 シフトJIS 対応らしい

参考:
AutoHotKeyでURLエンコードしてみる:
ttp://orera.g.hatena.ne.jp/misttrap/20070214/p1
- UTF-8ベース

向こうのフォーラムだと
URL Encoding Function
ttp://www.autohotkey.com/forum/topic38893.html
なんてのがあった
839名無しさん@お腹いっぱい。:2010/01/20(水) 14:12:46 ID:A9VL/mrF0
>>838
たくさんのURLとヒントを、どうもありがとうございます。そうです、URLエンコードです。

過去スレ102のue(Clipboard版)は、変換中にクリップボードが破壊されてしまうので、
ほかのスクリプトを平行して動かしている関係で、厳しいです。

>searchit:
ランチャで、最終的にブラウザを起動するようです。
途中の変換結果だけ返却してくれればベストだったのですが。

>AutoHotKeyでURLエンコードしてみる:
これ、使ってます! UTF8の場面では便利に使わせてもらっているのですが、
今回はShiftJIS→EUC-JPなので、残念ながら活用できませんでした。
これのテーブル表を書き換えると、EUC仕様になるのかも・・・。

>フォーラムのコード
動かしてみましたが、違う結果が出てきたので、
UTFか、URL内のダメ文字(空白など)を置き換える用途のようです。

先に進めないと困るので、現在は、変換したい文字を、fileappendで
ファイルとして書き出して、コマンドラインアプリのnkf.exeでEUC-JPに変換して、
できたファイルをfilereadで読んで、なんとか切り抜けることにします。

ただこれだと、外部コマンドを呼び出す関係で、短い複数文字列を一括で処理すると、
変換時間がネックになるので、あとでやばくなりそうです。

ahk内部の文字列操作だけでやれればベストなのですが、もうちょっと探してみます。
情報ありがとうございます。ひきつづきよろしくお願いします。
840名無しさん@お腹いっぱい。:2010/01/20(水) 22:28:05 ID:3YWtB3Fr0
やっつけで作成。
EUC-JPとは言っても MS仕様の eucJP-ms なので、一部の文字マッピングが思ったものと違うかもしれない。

※ Unicode版では正常に動かない(ConvertINetUnicodeToMultiByteを使う)

; SJISからEUCに変換する
EUC_ConvertTo(srcStr) {
 Return ConvertINetString(srcStr, CP_SJIS:=932, CP_EUCJP:=51932)
}

; EUCからSJISに変換する
EUC_ConvertFrom(srcStr) {
 Return ConvertINetString(srcStr, CP_EUCJP:=51932, CP_SJIS:=932)
}

; 内部用関数
ConvertINetString(srcStr, srcEncoding, dstEncoding) {
 Mode := 0
 srcSize := StrLen(srcStr)
 dstSize := srcSize *3
 VarSetCapacity(dstStr, dstSize, 0x00)
 DllCall("mlang.dll\ConvertINetString", "UIntP", Mode, "UInt", srcEncoding, "UInt", dstEncoding, "Str", srcStr, "IntP", srcSize, "Str", dstStr, "IntP", dstSize, "Int")
 Return dstStr
}
841名無しさん@お腹いっぱい。:2010/01/20(水) 22:35:34 ID:40M4C8QT0
>>836
わかりやすいです。ありがとうございます。把握できそうです。でも
Auto-executeセクションに入れないといけないキーワードがどれかなんて
わからない。あまりにも当たり前のことなのかもしれないけど。
GroupAddの流行らせるページにもそのことが明示されてない。
例をみればふつうの人は分かるんでしょうけど、俺はわからん。
説明ありがとうございました。掲示板でヘルプしてくださるおかげで
AHKを使えてます。AHKは神
842名無しさん@お腹いっぱい。:2010/01/20(水) 23:39:51 ID:A9VL/mrF0
>>840
ありがとうございます!おかげさまで動きました!

その関数で帰ってきたEUC文字を、下記で再度1バイトずつバラして
16進数2桁にしたところ、URLで使用可能な希望通りの動作になりました。


str:=EUC_ConvertTo(srcStr)
SetFormat, IntegerFast, hex
out=
loop,parse,str
 {
 N:=Asc(A_LoopField)
 stringreplace,N,N,0x
 out=%out%%N%
 }
msgbox,結果→%out%

↑バラし部分。とりあえず動いていますが、もっと効率の良い戻し方があるような気が・・・


sample「秋葉原」
 秋葉原      ←元
 ↓
 スゥヘユクカ     ←EUC
 ↓
 bda9cdd5b8b6 ←最終
843名無しさん@お腹いっぱい。:2010/01/20(水) 23:56:06 ID:3YWtB3Fr0
>>842
どこかで文字数分だけループ回さなきゃいけないことは代わりはないのは確か。
どうしても速度をだしたいなら関数内でループ回した方が多少は効率はいいはずだけど、
気にならないならそのままでいいんじゃないかな
844名無しさん@お腹いっぱい。:2010/01/21(木) 12:18:52 ID:gapsn3tZ0
>>841
いやキーワード別に対応が分かれてるわけじゃないから。
GroupAddだからAuto-executeセクションに入れないといけないってわけじゃない。

わからんわからん言ってる人間に無理に説明しても
お互いしんどいだけだからこの辺でやめるけど
順次処理と割り込み処理の概念さえ理解できれば何とかなるよ、たぶん
845名無しさん@お腹いっぱい。:2010/01/21(木) 12:26:37 ID:NRKBKtKi0
見事にこれに当てはまってるな

<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
846名無しさん@お腹いっぱい。:2010/01/21(木) 16:16:28 ID:GToXyHe30
Run, C:\Program Files\Internet Explorer\iexplore.exe %URL%
IEオプションで現在のウィンドウの新しいタブでリンクを開く設定にしてるんだけど
URLを渡す度に新規ウィンドウで立ち上がってしまう
すでにIEが起動していたらアクティブにして新規タブを開くkeyを送って
アドレスバーにControlSendRawするって強引な方法を使ってみたけど
こんなことしなくてもいい方法知ってる人いたら知恵を貸してください
847名無しさん@お腹いっぱい。:2010/01/21(木) 17:08:19 ID:kddwe19s0
848名無しさん@お腹いっぱい。:2010/01/21(木) 18:46:15 ID:GToXyHe30
そのリンクをみると利用したいコマンドラインオプションはないみたいだね
849名無しさん@お腹いっぱい。:2010/01/21(木) 18:54:54 ID:/PZepwb10
IEが既定のブラウザなら
Run,%URL% で新規ウィンドウ作らずに開くが
850名無しさん@お腹いっぱい。:2010/01/21(木) 19:12:34 ID:GToXyHe30
>>849
目から鱗
IEのパスは必要なかったのね
思い通りの動作になって満足
どうもありがとうございました
851名無しさん@お腹いっぱい。:2010/01/22(金) 23:37:43 ID:ruKNOc290
Hotstringを使って"@"+"/"などでよく使う単語を入力しています↓

:*:@/::
Clipboard=>>1
Send,^v
Return

USBで持ち運びできるようなIMEが欲しかったので
この方法を利用して似非IMEを作ろうとしたのですが
例えば同じ入力で複数の単語を使い分けたい場合("@"+"/"で『>>1乙』と『これはポニテじゃ(AA略』など)
どうしたらいいのかわからなくなりました。
多分Menuコマンドとかを利用してポップアップメニューを出して選択できるようにすればいいのかなと思うのですが・・・
どなたかご助言いただけないでしょうか
852名無しさん@お腹いっぱい。:2010/01/22(金) 23:47:43 ID:8iijn8mN0
Google日本語入力の制御において、
変換キーを押すことに関して、
IMEがOFFならONにして、ONなら変換するというのは
まだできないみたいですね。
ベータだからしょうが無いですね、待つしか。
853名無しさん@お腹いっぱい。:2010/01/22(金) 23:58:45 ID:k3ZlN1Au0
>>852
今試したら出来たよ。
854名無しさん@お腹いっぱい。:2010/01/23(土) 01:13:29 ID:c9dz6awH0
>>853
まじですか?吉報。ググリ方が足らんようですね。
無変換を含んだコンビネーションをGoogle日本語入力変換中に多用したいので
AHK.iniで無変換単独のキー動作を無効にしたいと思ってるんですが、
これもうまくいかない。
855名無しさん@お腹いっぱい。:2010/01/23(土) 05:29:18 ID:c9dz6awH0
>>853
「Google日本語入力キー設定」というGoogle日本語入力側からの設定ではおっしゃるとおり
>>852の動作が実現できました。

Google日本語入力のキー設定はデフォのままで、AHK側からの設定で上と同じことはできないんでしょうか?

無変換のみのキー設定を無効にするのもGoogle日本語入力で設定すればできますが、AHK側からはできないのかな。
自分がやってみたんですが無理でした。
856名無しさん@お腹いっぱい。:2010/01/23(土) 05:35:09 ID:JE6+faUq0
runコマンドで起動ファイルのあるディレクトリを自動で作業ディレクトリにすることはできないかな
一つずつ指定していくのは長くなるし面倒だし
857名無しさん@お腹いっぱい。:2010/01/23(土) 12:12:08 ID:LDRI5tYa0
>>855
具体的に何を試して駄目だったかを書くといいよ

>>856
AHKでなくOSの仕様なんで、諦めて1個ずつ指定しよう
858名無しさん@お腹いっぱい。:2010/01/23(土) 12:31:16 ID:OxfbZGvn0
>>856
俺は

run(cmd)

という関数を作って、そっちで自分好みの環境を全部構築してる
859名無しさん@お腹いっぱい。:2010/01/23(土) 13:05:17 ID:xyz8fOVS0
>>855
$sc07B::return

>853は↓じゃだめなん? 試してないけど。

$sc079::
if (IME_GET()) {
Send,{Space} ; 変換に割り当ててるキー
} else {
IME_SET(1)
}
return
860名無しさん@お腹いっぱい。:2010/01/23(土) 13:06:12 ID:xyz8fOVS0
×853
○852
861名無しさん@お腹いっぱい。:2010/01/23(土) 15:29:02 ID:JE6+faUq0
>>857-858
仕様じゃしょうがないなあ
頑張って関数こしらえてみるか
862名無しさん@お腹いっぱい。:2010/01/23(土) 23:18:42 ID:gXVIBUYH0
>>851です。

本家の解説を見ながら試行錯誤してみてポップアップメニューを出す所まではできたのですが
その先でまた詰まってしまいました。
スクリプトは以下のものなのですが↓
これがTest.ahkでは動くのですがAutoHotKey.iniに記述すると動いてくれません(MyMenuが存在しませんとエラーが出ます)
どこが間違っているのでしょうか?

:*:a/::
Menu, MyMenu, Show
(※ahkファイルの場合は@ & /::Menu, MyMenu, Show)

Menu, MyMenu, Add, >>1乙, >>1
Menu, MyMenu, Add, ポニテ, これはポニテじゃ(AA略
return

>>1乙:
Clipboard=>>1
Send,^v
return

これはポニテじゃ(AA略:
Clipboard=これはポニテじゃ(AA略
Send,^v
return
863名無しさん@お腹いっぱい。:2010/01/23(土) 23:47:32 ID:LDRI5tYa0
・ まず、スクリプトは上から順に実行される
・ ホットキーやHotStringはそのキーのラベルの行から順に実行される
・ メニューは作ってからじゃないと表示できない
864名無しさん@お腹いっぱい。:2010/01/23(土) 23:50:28 ID:OxfbZGvn0
他人がとやかく言う筋合いは無いのを承知で聞くけど

> :*:a/::

これは、どんな思想でこんな複雑 かつ わかりにくいホットキーを使おうとしてるの?

あとラベルに日本語は使わないほうがいい。後で絶対ハマルよ。
865名無しさん@お腹いっぱい。:2010/01/24(日) 01:47:50 ID:X9taIE6I0
>>863
わかりやすい説明ありがとうございます
見直してみて、最初の部分を以下の形にしたら望む動作になりました。
(実行の順番などに加えて、どうもreturnの意味をよく分かっていなかったみたいですorz)

:*:a/::
Menu, MyMenu, Add, >>1乙, >>1
Menu, MyMenu, Add, ポニテ, これはポニテじゃ(AA略
Menu, MyMenu, Show
return
〜〜〜〜〜

>>864
そのキーは使いたい単語が少なかった時の名残で特に意味はないんです
@〜なんてめったに押しませんし、憶えやすかったとかいう程度の理由でそういう組み合わせにしてました。
実際に上のスクリプトを使う時にはホットキーを:*:Itiotu::みたいにしようと思っています。

あと「日本語はハマる」というのは将来的にどっかでバグる?ってことでしょうか?
あんまり複雑な処理をするつもりはない(というかそんなスキルがない)ので大丈夫じゃないかなーとは思うのですが・・
866名無しさん@お腹いっぱい。:2010/01/24(日) 02:13:32 ID:++1NGFYKP
>>859
後述の複数段の式ですが、AHK起動の際ににエラーがでます。
if (IME_GET()) {
の部分にダイアログのなかで矢印がでます。

$sc07B::return に関してはコレを設定するとほかに割り当てている
無変換キーとのコビネーションキーが全部死んでしまいます。

(したいこと)
google日本語入力やATOK側で設定いじらずに
AHK側で設定して、
1.変換キーでIME ONをしたい
2.無変換キーのみの押下による反応をなしにしたい 
867名無しさん@お腹いっぱい。:2010/01/24(日) 05:50:46 ID:SDvANUa10
飛び飛びすぎて流れが読めんが、まさかIME.ahkいれてないんじゃ…?
http://www6.atwiki.jp/eamat/pub/MyScript/IME20091203.zip
これ落として解凍して出てくるIME.ahkを何処か自分が決めたahkファイル置き場に置く
それからそのIME.ahkをエディタで開いて中の28〜92行目(動作確認用 内部ルーチン の行から ExitApp の行)まで削除して上書き保存
IME.ahkと同じフォルダに新たに(既存のでもいいけど…)ahkファイルを作って、
エディタで開いてこんな感じでIME.ahkを始めの方でincludeする↓

#Include %A_ScriptDir%
#Include IME.ahk

$sc079::
if IME_GET() {
Send,{Space} ; 変換に割り当ててるキー(sc079でもいいか)
} else {
IME_SET(1)
}
return

俺はこれで動く
あともう一つの方は普通ならコンビネーションキー設定すると、一つ目のキーの元々の機能はデフォで無効化されるはずだし、
俺はGoogle日本語変換は入れてないしでどういう状況なのか分からん
俺も無変換をコンビネーションキーに設定してるが…
sc07B & C::
msgbox, おめでとうございます
return
sc07B Up::return
sc07B Down::return
こういう感じにしても駄目なの?
868名無しさん@お腹いっぱい。:2010/01/24(日) 07:41:58 ID:++1NGFYKP
>>867
詳しくありがとうございます。やってみました。
IME.ahkは入ってるようでした。最新版の上と同じやつ(?)が。

変換キーでIMEONをする方法ですが、現時点で結論からいうと、
デフォでGoogle日本語入力だと普通に変換キーを押すとIMEONになります。。
なにかすいません。テキストエディタとAHKを再起動したらそうなりました。

前半部の#Include %A_ScriptDir%
ですが、これを記入すると下のようなポップアップが始終ついてまわります。
http://img641.imageshack.us/img641/6249/imeokasii.gif
なので削除してみました。

2.ですが、たしかに無変換キーにコンビネーションキーを設定すると一つ目のキーは無効化されるのですが、
無変換キーに限っては、文章の書き始め、変換のし始めは、単独の無変換キーの動作がいきており、
コンビネーションを使って無変換を押すとカタカナ変換してしまいます。

無変換キーを鬼のように使い倒すっていうスレがあって、他の人も無変換キーにコンビネーションを割り当てていることから
私のAHKの設定が悪いのだとおもうのですが、いまのままだと無変換キーにコンビネーションを使うのは
向いてないと思うようになりました。
869名無しさん@お腹いっぱい。:2010/01/24(日) 08:12:10 ID:oTRsvk6R0
無変換キー単独の機能が最初生き延びていることにてついて
{blind}を入れて様子をみてみます。不具合が起こる確率が減ったような
870名無しさん@お腹いっぱい。:2010/01/24(日) 09:58:59 ID:kQj1C03B0
espstつかえばいいじゃんとおもた
871名無しさん@お腹いっぱい。:2010/01/24(日) 12:03:35 ID:oTRsvk6R0
ちょっと話題変わるのですが、
ひらがなキーを修飾キーに使うのは適さないというのは常識なのでしょうか?

平仮名キーとアルファベットのコンビネーションを複数割り当てて、
それらを一度両方続けて使うと、以後平仮名キーを押さなくても
常に押した状態になってアルファベットだけを押しても
平仮名キーとのコンビネーションの機能が働いてしまう。
vkF2sc070をそのまま使うのがだめなのかな。
872名無しさん@お腹いっぱい。:2010/01/24(日) 12:12:33 ID:oTRsvk6R0
[CapsLock(英数)]と同様に[ひらがな]もだめみたいね。
873名無しさん@お腹いっぱい。:2010/01/24(日) 18:06:38 ID:HSmXiUcH0
>>871
通常のキーは押し下げでDown、開放でUpと変化しますが、
Windows日本語版のひらがな、半角/全角、CapsLockなどは
押すたびにトグル状態が変化します。
つまり、押し下げ時のみ状態が変化し(Up→Down、またはUp→Down)
開放したときに変化しません。
なので、そのまま修飾キーとして利用することは出来ません。
>>3の Q1 に説明してあるようにChangekeyなどを使って「ひらがな」キーを
普段使わないF13〜F24などに変更し、それを修飾キーとして利用することは可能です。


以下は前スレ359の後半をコピペ

ということでひらがなキーをF13に置き換える手順。
AutoHotkeyで任意のキーをF13にリマップする。
例えばF12をF13にリマップし、スクリプトを実行させる。
F12::F13
Changekeyを起動する。(Changekeyが無いならググって入手する)
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」、該当するキーは「該当なし」と表示される。
(0x0064 はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると
「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。
「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
874名無しさん@お腹いっぱい。:2010/01/24(日) 18:24:04 ID:HSmXiUcH0
× つまり、押し下げ時のみ状態が変化し(Up→Down、またはUp→Down)
○ つまり、押し下げ時のみ状態が変化し(Up→Down、またはDown→Up)
875名無しさん@お腹いっぱい。:2010/01/25(月) 12:25:01 ID:slPcvwYMP
ジョイパッドの"スライダ"のアナログ値を取得出きませんか?
directplayとかで引き出さないとだめ?
876名無しさん@お腹いっぱい。:2010/01/25(月) 20:02:57 ID:hB1o+IMD0
前スレで出た、FnMapper使えば何とかなるかなぁ・・・
http://uawks.googlecode.com/issues/attachment?aid=5614292902990076938&name=FnMapper.ahk

ジョイスティックだと、
Usage = 4
UsagePage = 1
にする。

ただウチにはスライダーのあるヤツがないから何とも言えない
877名無しさん@お腹いっぱい。:2010/01/26(火) 01:55:32 ID:uRRTr8hm0
ブックマーク整理してたんで貼り

標準入出力を扱いたい
 http://www.autohotkey.com/forum/topic34517.html
ListViewで大きな画像を扱いたい
 http://www.autohotkey.com/forum/topic26855.html
GUIで標準のもの以外を使いたい
 http://www.autohotkey.com/forum/topic19509.html
GUIを手軽に作りたい
 http://www.autohotkey.com/forum/topic20097.html
DllCallで定数調べるのマンドクセ
 http://www.autohotkey.com/forum/topic39598.html
コンパイルユーティリティ
 http://www.autohotkey.com/forum/topic22975.html
HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい
 http://www.autohotkey.com/forum/topic23072.html
Windowsのイベントをフックして色々やりたい
 http://www.autohotkey.com/forum/topic27146.html
878名無しさん@お腹いっぱい。:2010/01/26(火) 05:37:20 ID:aeZVCwD80
>>873
レスありがとうございます。その三つのキーは仕組み自体が他と違うのですね。
キー置き換えしかないみたいですね。
常駐ソフトがひとつ増えるのが気になりますが、暫定的なもので、
マユを入れることにします。

すいません。追加でまた質問なのですが、ごくごく簡単なマクロで
ゲーム画面の一定の位置を時間を置いて次々にマウスクリックしていく
ことってAHKでできるのでしょうか?
おしえてください。海外の掲示板でそういう式を見た覚えがあったのですが
879名無しさん@お腹いっぱい。:2010/01/26(火) 05:56:48 ID:aeZVCwD80
流行らせるページの「CLICK」の項目見つけましたが、どうやらできるみたいですね
880名無しさん@お腹いっぱい。:2010/01/26(火) 06:19:38 ID:I22SLP9I0
>>878
Changekeyは常駐ソフトじゃないよ
881名無しさん@お腹いっぱい。:2010/01/26(火) 07:17:11 ID:aeZVCwD80
>>880
すいません。書き方が足りませんでした。ChangeKeyは再起動が必要になったり
敷居が若干高いので、自分の方法論がある程度固まるまでは容易に変更ができる
マユにしておこうと思いました。
 そんな機会ないかもしれないのに、仕事場で共用で使うパソコンでカスタマイズ環境を
作りやすくするにはということを考慮したりしてしまうので。

 あと、ウインドウの特定の位置をクリックするのを自動化するの、とりあえず今のところ
望むことが実現できました。AHKは神。プログラム知らない僕にとって仕組みがすごすぎて楽しい。
882名無しさん@お腹いっぱい。:2010/01/26(火) 13:22:30 ID:ffrf3Nlg0
どうでもいいけどいいかげん連投する前に調べる癖つけなさいよ、神の人
883名無しさん@お腹いっぱい。:2010/01/26(火) 20:28:01 ID:jH+CKAQs0
最近autohotkeyを入れてみました。
ホットキーでタスクバーの大きさを変えるには
どうすれば良いでしょうか?

#9::WinMove, ahk_class Shell_TrayWnd, , ,100,,

としても、動いてくれません、、

タスクバーは下ではなく、右端おいてあって、
30⇒100ピクセルくらいに大きさを変えたいのです。
884名無しさん@お腹いっぱい。:2010/01/26(火) 20:34:24 ID:pmerGxxL0
英語配列のキーボードにしてAlt+`を押すのが面倒だったので、
AutoHotKeyで左AltにAlt+`を割り当てたのですが、
日本語キーボードの半角/全角キーの場合と違って
確定させずにIMEをOffにすると、その部分が消えてしまいます。
半角/全角キーと同じ動作にさせる方法ってないですか?
885名無しさん@お腹いっぱい。:2010/01/26(火) 20:40:33 ID:I22SLP9I0
>>884
IMEの設定でその動作を選択できるのでIME設定を見直してみては?
886名無しさん@お腹いっぱい。:2010/01/26(火) 21:45:07 ID:uRRTr8hm0
>>883
実際にドラッグしないと変わらないんで、ドラッグエミューレートすりゃいいんじゃない

CoordMode, Mouse, Screen
MouseGetPos, oX, oY
WinGetPos, xx,yy,ww,hh, ahk_class Shell_TrayWnd
x := xx+ww-1
y := Round((yy+hh)/2)
MouseClickDrag, L, x, y, 99+xx, y
MouseMove, oX, oY
887名無しさん@お腹いっぱい。:2010/01/26(火) 22:19:14 ID:MFTwXULF0
エクスプローラで右クリックしたときに表示されるメニューの
「元に戻す〜」で戻される操作の具体的な内容を取得することは出来ないでしょうか?

ツールバーの「編集」→「元に戻す」の場合は、メニューをポイントすればステータスバーに
どういう操作をしたのを元に戻すか、という具体的な内容が表示されるのですが、
右クリックだと表示されないのでなんとかしたいのです。
888名無しさん@お腹いっぱい。:2010/01/26(火) 22:36:48 ID:pmerGxxL0
>>885
MSIMEにそんな設定ありますか?
探してみたんですが、見つかりませんでした。
ネット上には、半角/全角キーだと入力が確定してOffになり、
Alt+半角/全角だと未確定部分が消えてOffになるなんて
話もでていましたが、どうなんでしょう?
889名無しさん@お腹いっぱい。:2010/01/26(火) 22:42:53 ID:uRRTr8hm0
>>887
メモリ覗いてもわけわかめだろうし、メニューの文字列とるのが確実なのかなぁ。

#IfWinActive, ahk_class CabinetWClass
Pause::
 Send, !e
 WinWait, ahk_class #32768,, 0.5
 If (!ErrorLevel) {
  SendMessage, 0x01E1, 0, 0
  str := (ErrorLevel!=1) ? RegExReplace(GetMenuString(ErrorLevel, 0), "(?:^元に戻す - |\(.+$)") :
 }
 Send, {Alt}
 MsgBox,, 元に戻す操作, % str
 Return

GetMenuString(hMenu, nPos) {
 length := DllCall("GetMenuString", "UInt", hMenu, "UInt", nPos, "UInt", 0, "Int", 0, "UInt", 0x0400) ; MF_BYPOSITION
 VarSetCapacity(str, (length+1) * (A_IsUnicode ? 2 : 1))
 DllCall("GetMenuString", "UInt", hMenu, "UInt", nPos, "Str", str, "Int", length + 1, "UInt", 0x0400)
 Return str
}
890名無しさん@お腹いっぱい。:2010/01/26(火) 22:50:45 ID:b5ShGj3c0
>>887
> ツールバーの「編集」→「元に戻す」の場合は、メニューをポイントすればステータスバーに
> どういう操作をしたのを元に戻すか、という具体的な内容が表示されるのですが、

初めて知ったw
891名無しさん@お腹いっぱい。:2010/01/27(水) 00:34:51 ID:OJCtFlHc0
>>888
MS-IMEを使っているとするなら、
IMEのキー設定で Alt+` の「入力文字のみ」の部分が「IME-オン/オフ」になっているはずなので、
その「IME-オン/オフ」の部分を右クリックして「削除」。
※私は英語キーボードを持っておらず、Alt+` に割り当てられているのかを確認していません。
  Alt+` が無い場合はそれに相当するキー割り当てを探すか、
  新たに半角/全角と同設定のキー設定を追加し、それをAHKで左Altに割り当てるといいかも。

逆に、変換中にIMEをOffにしても削除しないようにするには、
同項目を「IME-オン/オフ」に設定するといい。
892891:2010/01/27(水) 00:40:36 ID:OJCtFlHc0
逆に、変換中にIMEをOffにしても削除しないようにするには、
同項目を「IME-オン/オフ」に設定するといい。

ではなく、

逆に、変換中にIMEをOffにないようにするには
同項目を「IME-オン/オフ」に設定するといい。


と修正してるときに気づいたけど、確定して変換?ってことは動作が違うなぁ・・・
893名無しさん@お腹いっぱい。:2010/01/27(水) 18:45:09 ID:rg7kcGiV0
そういえば、2kまでは右クリックからでもステータスバーに戻す内容が表示されたような記憶が・・・
なんで挙動を変えてしまったんだろうかなぁ

>>889
レスありがとうございます。
ただ、表示されるメニュー自体は右クリックでもAlt+Eでも同じなので・・・

>メモリ覗いてもわけわかめだろうし、メニューの文字列とるのが確実なのかなぁ。
やっぱり例で示して下さったのと同じような感じで
Send,!e→StatusBarGetTextをするしかないのかなorz
894名無しさん@お腹いっぱい。:2010/01/27(水) 18:49:15 ID:jestxfLL0
>>890
おれもw

>>886
面白いね。
タスクバーを引き出せるのなら、
+^z:: タスクバーに並ん出る順にウィンドウ切り替え

ができそう。
AltTabの時に出てくるアイコンの代わりなりそうだけど・・・
895名無しさん@お腹いっぱい。:2010/01/27(水) 20:23:11 ID:OJCtFlHc0
>>884
前スレ99を利用したら同じ動作を行うことが出来るんじゃないかな
文字入力中or変換中なら Send, {Enter} してからIMEをOffにするとか。


99 名前:名無しさん@お腹いっぱい。 [sage] 投稿日:2009/06/02(火) 18:58:42 ID:xwgWw2A40 (PC)
対象窓で、文字入力中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
}
896名無しさん@お腹いっぱい。:2010/01/27(水) 23:13:37 ID:2bNWj/Fu0
XMLパーサ探してたらXPATHがあった。結構使いやすい。
http://www.autohotkey.com/forum/topic17549.html

それよりも、AHK_LのObject強力すぎ。もうどの言語だか分からないw
http://www.autohotkey.com/forum/topic49433.html

URLDownloadToFile, http://www.google.com/search?q=test, %A_Temp%\google.html
FileRead, google_html, %A_Temp%\google.html
COM_Init()
html := COMo("htmlfile")
html.write(google_html)
h3 := html.getElementById("res").getElementsByTagName("h3")
Loop, % h3.length
 output .= A_Index . ": " . h3[A_Index-1].innerText "`n"
Msgbox, % output
html := "" ; free it!
COM_Term()
FileDelete, %A_Temp%\google.html
897名無しさん@お腹いっぱい。:2010/01/27(水) 23:17:33 ID:NQOWI2SdP
>>894
↓このスレで前に張られてた

; タスクバーに並んでる順にウィンドウ切り替え
+^z::
WinGetTitle active_window, A
Send !{Esc}
WinWaitNotActive %active_window%
WinGet state, MinMax, A
if(state < 0)
{
WinRestore A
}
return
898名無しさん@お腹いっぱい。:2010/01/27(水) 23:32:41 ID:FDJCPhyx0
本家フォーラムを行くたび、これが気になってしまう
http://www.autohotkey.net/~majkinetor/-Avatars/scaryroboo3k.gif
899名無しさん@お腹いっぱい。:2010/01/27(水) 23:45:17 ID:2bNWj/Fu0
ヨーだも気になるw
900名無しさん@お腹いっぱい。:2010/01/28(木) 00:47:12 ID:+gqXeKPy0
>>894
>>897
>タスクバーに並んでる順にウィンドウ切り替え
なら多分これが一番かな?
http://www.autohotkey.com/forum/topic462.html
端まで行ったら反対側に行くことも出来る
901名無しさん@お腹いっぱい。:2010/01/28(木) 06:34:13 ID:xbFRWPzk0
>>900

>>897との違いはなんですか?
897も右端までいったら一番左を選択しますよね?
902名無しさん@お腹いっぱい。:2010/01/28(木) 11:08:35 ID:62zYhmO40
誰かTrackWheel使いで、アイコンを変更してる人居ないですか?

聞きたいのは、32bitカラーの透過カラーを含むアイコンでもちゃんと表示
されているかどうかということです。

AHKの仕様なのか作り方の問題なのか知りたくて・・・
ちなみにこういうの作りました。
ttp://www1.axfc.net/uploader/Sc/so/77283
903名無しさん@お腹いっぱい。:2010/01/28(木) 11:24:18 ID:62zYhmO40
何が問題なのか書いてなかったですね。

透過カラー部分が黒く塗りつぶされた形で表示されてしまいます。

もう一つ補足しますと、透過カラーといっても切り抜いて指定した形に
表示することの透過ではなく、文字通りの色が透けていて背景がぼんやり
見えているということです。

OSはWin7で、GreenfishIconEditorで作成。
icoではなくcurで保存し、それをWinのマウスカーソル変更プロパティで
適用したものは正常に透過します。
904名無しさん@お腹いっぱい。:2010/01/28(木) 15:29:07 ID:7uUI6/He0
あんまりその辺詳しくないんだけど。アルファブレンドだとおもう。

例のアイコンはカーソルではない。(カーソル置き換えだとチラつくためGUIにしている)
実際にはGUI窓上にアイコンを配置している。そうなるとGUIの背景色とアイコンの透過色がブレンドされる。
WinAPIでGUIの背景色(単色)の透過の指定をしているため、GUI上でブレンドされた色は透過されない。

アルファブレンドで透過させる方法じゃなくて、単一の透過色を持つようなアイコンにするといいかもしれない。
905名無しさん@お腹いっぱい。:2010/01/28(木) 16:58:07 ID:62zYhmO40
>>904
レスありがとうです。

自分も全然詳しくないのですがなるほど、アルファブレンドと聞いて合点がいきました。
あれから少し試行錯誤して挫折していましたが、これは単純に作るしかなさそうですね。

これでそれなりになったので終了します。どうもありがとうございました。
ttp://www1.axfc.net/uploader/Sc/so/77286
906名無しさん@お腹いっぱい。:2010/01/28(木) 21:13:11 ID:7uUI6/He0
エクスプローラ及びデスクトップでF2でファイル名変更の際に拡張子部分以外を選択した状態にする。
拡張子が全角の場合失敗するかもしれない(Unicode版は無問題)

SetTitleMatchMode, RegEx
#IfWinActive, ahk_class CabinetWClass|ExploreWClass|Progman
~F2::
 ControlGetFocus, classNN
 If (classNN != "SysListView321")
  Return
 Loop {
  ControlGetFocus, classNN
  If InStr(classNN, "Edit")
   Break
  If (A_TimeSinceThisHotkey>500)
   Return
  Sleep, 50
 }
 ControlGetText, itemName, %classNN%
 StringGetPos, pos, itemName, ., R1
 If (count := StrLen(itemName)-pos) {
  BlockInput, On
  SetKeyDelay, 0
  Send, {LShift Down}
  Send, {Left %count%}
  Send, {LShift Up}
  BlockInput, Off
 }
 Return
907名無しさん@お腹いっぱい。:2010/01/28(木) 21:38:35 ID:NYBO8ExJ0
文字コードをSJISからUTF-8に変えるのあったっけ
ユニコード文字のファイル名の処理でAutoHotkeyUに変えてみようと思ってるんだけど
いままで作ったのの変換作業がめんどくさいなと思って
908名無しさん@お腹いっぱい。:2010/01/28(木) 22:35:11 ID:7uUI6/He0
Loop, *.txt とかで得られるファイル名自体がUTF16なんで、
SJISとかUTF8とか気にしなくてもいいような気がするけど

直接じゃなくて、 SJIS → UTF16 → UTF8 ならできるよ。

TransForm, utf16, FromCodePage, 932, % sjis
TransForm, utf8, ToCodePage, 65001, % utf16
909名無しさん@お腹いっぱい。:2010/01/28(木) 22:48:14 ID:Kp63ZUMn0
NKFとか使った方が速いんでないか
910名無しさん@お腹いっぱい。:2010/01/28(木) 22:49:26 ID:veo6bkC90
ドロップダウンリストのリストをあとから追加することはできるんですが
追加ではなく更新はできませんか?
911名無しさん@お腹いっぱい。:2010/01/28(木) 23:31:34 ID:NYBO8ExJ0
>>908
これ使っていっきにやってみるサンクス!!
912名無しさん@お腹いっぱい。:2010/01/28(木) 23:33:19 ID:Me08hYE20
■ AutoHotkey_L 更新
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 42 - January 28, 2010

* Merged with AutoHotkeyU. See comparison of features.
* Numerous bug-fixes and improvements, some relating to the merge.
913名無しさん@お腹いっぱい。:2010/01/29(金) 01:06:52 ID:TrftciIg0
>>906
Dの直下にあるファイルに効かなかった

XP使用
914名無しさん@お腹いっぱい。:2010/01/29(金) 01:19:10 ID:raNOBJ1P0
AHK_L rev42 俺的まとめ

簡単に言うと。AutoHotkeyUのいいとこ取りをしたけどユニコードは採用しない。
だけどANSIじゃなくてデフォルトコードページで文字を扱うよ。

・ スクリプトは従来通りANSI(SJIS)で書く。加えて、UTF8/UTF16LEでもスクリプトが書けるけどBOMを付けてね。
・ 文字はデフォルトコードページで取り扱う。(UTF8やUTF16LEで書いてあっても変換して格納)
・ 「`(0x60)」系の駄目文字はなさそう。
 → 「MsgBox, AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」は正常に表示
・ パスに「\(0x5c)」が含まれる場合でも正常に取り扱われるようになってるっぽい。
 → A_ScriptName, A_ScriptDir, A_LoopFileName, SplitPath とかは無問題。
・ ユニコード系の組み込み変数。コマンドや関数は捨てた
 → A_IsUnicodeは捨て。PtrSize→A_PtrSize、StrGet(address)はANSIで取得。
・ FileEncodingコマンド等は有効なので様々なコードページでファイルを扱える。
・ DllCallとかもANSI系。
 → 関数は"A"系を使う。AStr/WStrは使える。IntPtr→Ptrに変更(IntPと混同を避けるため)。

----

駄目文字は無くなったと思っていいのかな。
正規表現は相変わらずだと思う。「RegExMatch("表示", "\\")」の結果は2。
915名無しさん@お腹いっぱい。:2010/01/29(金) 16:46:04 ID:JptKlGL90
>>914
となるとだめ文字対策を全くしなくても良くなった?
いいね。

>正規表現は相変わらずだと思う
正規表現を使う置換もまだだめなのかな。


それと英語がよく分からないから質問します。
>items marked AHKL are specific to ANSI or Unicode builds in AutoHotkey_L (i.e. may not apply to AutoHotkeyU).
このAHKLはAutoHotkeyUとは別物でAutoHotkey_Lの別バージョン?
AutoHotkey_Lの別バージョンならどういう設定で起動します?
916名無しさん@お腹いっぱい。:2010/01/29(金) 19:28:46 ID:raNOBJ1P0
Unicode版はAHKLのユニコード対応版でバイナリは別物(作者も)。ブツは>>201
起動オプションとかではない。
917名無しさん@お腹いっぱい。:2010/01/29(金) 22:58:32 ID:xNgzxTwQ0
Loop文の中で動いているスクリプトを途中で終了(強制終了)させたいんだけど
良い方法ありませんか?タスクマネージャーからの終了は面倒なので。

^ESC::ExitAPP
loop{
〜長いスクリプト〜
}

これはダメでした。
918名無しさん@お腹いっぱい。:2010/01/29(金) 23:43:27 ID:2kP2ZoEo0
ループ中で、ESCをGetkeystateで調べて、押されていたらbreakする
919名無しさん@お腹いっぱい。:2010/01/30(土) 00:08:48 ID:MWkargJ10
ime.ahk の IME_GetConverting について質問です。

Excel のセルに対して文字入力中 or 変換中でも 0 しか取得出来ないのですが、
どうにかして、IMEがONの時の「未入力状態」と「入力中」の区別を付ける方法はないでしょうか。
Excel のバージョンは2003です。IME は MS-IME2003 と 2002 で試しました。

候補リストが出ればちゃんと CandCls でマッチして 2 になるんだけど。
変換中文字列の上で win+3 を押しても XLMAIN の 0 しか取得出来ない。

「オプション-編集と日本語入力-編集中の文字列を文書に挿入モードで入力する」は Word にしか見当たらず、
該当オプションを変更したら Word上では IME_GetConverting が 1 になることは確認しました。

念のために詳細なテキストサービスを無効にみましたが Excel上では何も変わらなかったですorz
920名無しさん@お腹いっぱい。:2010/01/30(土) 00:54:33 ID:s5JpMfYXP
w以外のキー連続して入力するとっっっっっっっっっzってなるのどうにかならないの
XPでもそうだったし7でも同じ
921名無しさん@お腹いっぱい。:2010/01/30(土) 00:56:23 ID:s5JpMfYXP
書き込むスレ間違っちゃったの
922名無しさん@お腹いっぱい。:2010/01/30(土) 03:34:16 ID:Vi96l/nA0
>>335と流行らせるページのMy Scriptsにあるホイールリダイレクトを同時に使えないもんでしょうか
923名無しさん@お腹いっぱい。:2010/01/30(土) 10:52:57 ID:JojNZ9Pf0
Unicode版でBOMなしUTF-8のテキストファイルを読み込むにはどうしたらいい
文字化けしちゃってうまくいかない
924名無しさん@お腹いっぱい。:2010/01/30(土) 11:35:58 ID:Yh2bE+7f0
>>919
今のところ解決方法は出てない

>>922
同時は無理。>>335のSendしてる所をリダイレクトの機能に置き換えれば可能だと思う

>>923
>>464
925名無しさん@お腹いっぱい。:2010/01/30(土) 11:54:00 ID:DcwztakL0
流行らせるページのMy Scriptにある「タスクトレイアイコン操作」が
Win7 64bit版だと全く値を取得できなくなってしまいました。
32bit版だとWin7でも動きます。

これさえ大丈夫なら完全に移行できるんですが…
どなたかよろしくお願いします。
926名無しさん@お腹いっぱい。:2010/01/30(土) 12:20:41 ID:JojNZ9Pf0
>>924
なるほどFileEncodingを使うんだね
覚えたありがとう
927名無しさん@お腹いっぱい。:2010/01/30(土) 14:51:03 ID:QYoce48S0
runwaitを、何千回、何万回と呼び出していると、ほんのたまーーーーに不定期に

「runwaitで実行すべきファイルが見つからない。このスレッド終了するわ」

と出て止まってしまうのだけど、こういう経験ある人いる?

サーバのログを、種類ごとに選別&区分けして、深夜にZIPで固めるスクリプトなどで、
1ヶ月くらいノンストップで動いてるのに、たまにこれでコケてしまってて困ってる。

実行してるファイルは固定なので(具体的には7z.exe)、なくなるはずが無いのに、おかしい。
ウイルス対策ソフトは入れていないから、実行の強制おあずけや、横取りも無いはず。

こういう場合、どう対処したらいいだろ?


AHKのバージョンは 1.0.48.03
928名無しさん@お腹いっぱい。:2010/01/30(土) 14:57:13 ID:Yh2bE+7f0
第3引数にUseErrorLevel指定して、ErrorLevelチェックしてリトライ
929名無しさん@お腹いっぱい。:2010/01/30(土) 15:20:24 ID:QYoce48S0
>>928
なるほどthx、それはやってなかったので追記してみます
930名無しさん@お腹いっぱい。:2010/01/30(土) 21:13:30 ID:kj6BFvKm0
>>918
thx! 全スクリプトの中から、更にループしてる所にラベル作って上手くいきました。
931名無しさん@お腹いっぱい。:2010/01/31(日) 09:10:34 ID:Jj+Ccwpi0
Pauseキーはトグル(?)なので、このソフトでは
うまくコンビネーションでホットキーにできないみたいですね。
932名無しさん@お腹いっぱい。:2010/01/31(日) 09:32:15 ID:8bG2dQkc0
んなこたぁねぇべ
pause & space::
pause & left::
pause & right::
pause & up::
pause & down::
 tooltip, %A_ThisHotkey%
 return
933名無しさん@お腹いっぱい。:2010/01/31(日) 09:48:41 ID:MQvaYmYmP
AutoHotKey_Lについてなんだけど
>MsgBox, AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」は正常に表示
これ正常に表示される?されないんだが…
934名無しさん@お腹いっぱい。:2010/01/31(日) 12:19:31 ID:Jj+Ccwpi0
>>932
あれ、、そうなんですか、すいません。
まったく同じ式をコピペで書いても sleepは動いてPauseは動かないで
AHKのせいかと思っていたのですが。

;DOpusアクティブ
Sleep & D::send, ^{Numpad0}
Pause & D::send, ^{Numpad0}

こう書いてもPauseのほうはうごかないんで。
935名無しさん@お腹いっぱい。:2010/01/31(日) 12:51:03 ID:99viyz4q0
>>934
ウチもコンビネーションで使うと動かないわ
>>932さんは動いているようなので環境依存なのかな?
936名無しさん@お腹いっぱい。:2010/01/31(日) 12:57:59 ID:BdMAsP7K0
動かないって人は、それを書くと同時に、AHKのアイコンで右クリしてOpenを開いて、
View→Keyhistoryを開いて、どんな状況になってるのか、ログを貼り付けてくれよ。

直接は関係なくて今は流し見してるような人にとっても、
後で参照して役に立つスレにしてほしい。
937名無しさん@お腹いっぱい。:2010/01/31(日) 13:19:46 ID:Jj+Ccwpi0
>>936
僕の場合こうなってます。
13 045 s d 2.20 Pause
13 045 s u 0.02 Pause
44 020 d 0.14 D
44 020 u 0.19 D
74 03F # d 0.81 F5

>後で参照して役に立つスレにしてほしい
そうですね。このスレの過去ログをdat化するのがしんどい
938名無しさん@お腹いっぱい。:2010/01/31(日) 13:26:16 ID:sZ2XAull0
dat化って…
元からdatじゃね?
939名無しさん@お腹いっぱい。:2010/01/31(日) 16:36:47 ID:klPNqN2u0
Pauseも環境依存だった気がしたが実際はどうだったかな。
流行らせるページ確認しにいったらそもそも日本語環境における
Locks系キーの挙動についての注記自体なかったわ

>>937
環境依存かどうかの検証だったら
OSとかPC型番(ノートだとドライバが特殊な場合がある)とか
キーボードの種類や型番とかも書いた方が吉
(あ、あともちろんAHKの派生種類やバージョンも)
940名無しさん@お腹いっぱい。:2010/01/31(日) 20:49:03 ID:STSUCUWU0
ファイルの内容の一部分だけを書き換えたいとき
FileReadで全部読み込んでReplaceしてFileDeleteしてFileAppend
ってやらないとだめかな
容量が大きいと時間がかかって効率がよくない
941914:2010/01/31(日) 22:16:38 ID:uZvK3+8k0
>>933
う゛、間違ってるね。スマソ。
テストした時に置き換えてやったはずなんだが、AHKUのままだったらしい。

で、ちょっと再テストししたところで、そういえばL43でてるから落として上書いて再テストしたら再現しない・・・
したらUnicode版になってた。>>201 のではなく、LexikosビルドのUnicode版に。

fincsビルドのUnicode対応版はちょっと動きが怪しかったがLexikosビルドはどうだろう・・・
942名無しさん@お腹いっぱい。:2010/02/01(月) 12:23:49 ID:RmTDXWHH0
ATOKはF1〜F12までしか認識しません。ATOKにF13とか送りたいんだけど、どうしたらいいのかな?
943名無しさん@お腹いっぱい。:2010/02/01(月) 22:39:45 ID:ikVx2zgf0
意味ワカンネ。
キーを送る事自体でなく、キーを送ることで機能を呼び出せるのが目的何じゃないの?
944名無しさん@お腹いっぱい。:2010/02/02(火) 01:10:11 ID:Tyg0TGPZ0
>>943
すみませんね。
たとえば、変換操作をスペースじゃなくて、F13で呼び出せたら便利だなと思いまして。
というのは、ATOK自体でそこそこキーアサインを変えられるのですが、今ひとつ使えるキーが少ないのでAHKでなんとかならないかなと思いまして…
945名無しさん@お腹いっぱい。:2010/02/02(火) 01:22:17 ID:2K90lawU0
>>944
F13::Space
じゃだめなん?
946名無しさん@お腹いっぱい。:2010/02/02(火) 01:26:13 ID:Tyg0TGPZ0
>>945
#IfwinActiveみたいにATOKにだけ特定にキーを送れたらと思いました。
後出しで本当に済みません…
947名無しさん@お腹いっぱい。:2010/02/02(火) 01:32:34 ID:2K90lawU0
>>944
>>895をそのまま利用、または応用すればいいんちゃう
948名無しさん@お腹いっぱい。:2010/02/02(火) 11:35:34 ID:UcO+RgdN0
sleipnirでフルスクリーンにしたとき、
標準ツールバーが強制的にonになってしまうのですが、autohotkeyでこれをoffにすることは出来ますか?
949名無しさん@お腹いっぱい。:2010/02/02(火) 12:18:40 ID:KFibNFge0
フルスクリーンオフのショトカトキーに
ツールバー有無確認とツールバーオフの動作を仕込むとか
950名無しさん@お腹いっぱい。:2010/02/02(火) 13:13:00 ID:hDFfdfLz0
だれか流行らせるページの管理人が作ってるこのスクリプト使ってみた人いない?
ttp://lukewarm.s151.xrea.com/test/read.cgi/b/1264431038/
951名無しさん@お腹いっぱい。:2010/02/02(火) 13:54:30 ID:aBInE6EsP
それなら、キーカスタマイズAPI完備な
常駐XULRunnerアプリがいいナリ
Firefoxみたいにアドオンでいろんな機能を入れたいナリ
952名無しさん@お腹いっぱい。:2010/02/02(火) 14:42:33 ID:VzeCxUKf0
>>950
初めて知った。AHKの処理中に、複数の外部コマンドで組み合わせていた作業が、
簡単に出来そう。右も左もわからないまま、実行してみたら、サンプルは一通り動いた。

tcp_server
 ローカルPC内でTCPサーバを動かす。サンプルだと80番で待機となるので、
 ブラウザで自分のアドレスを開くと、それだけでそのままサンプルテキストが表示される。

tcp_client
 Googleのトップページを、テキストで取得するサンプル。

tcp_server、tcp_clientは、使い方次第でいろいろ化けそう。

簡単な置き換えなら・・・
AHKのGUIウインドウで、なんらかのレポートを表示していた作業を、
ブラウザの127.0.0.1をrunで開いて、あとの体裁はブラウザに丸投げ。

AHKのrunで、別スレッドに指示を与えて、結果をもらう とかも出来るか。
ネット上のデータ収集とか、文字コードの変換とか。

あとは、tcp_serverを外向きに公開して自分でアクセスする目的で認証させて、
テレビ録画PCの予約管理とか、PIM管理やスケジューラとか、簡単に出来そう。

ただ、俺はAHKに体が慣れてしまったので、サンプルを増やしてほしい。
というわけでぜひ、NILを自分で流行らせるページ を作ってください>管理人氏
953名無しさん@お腹いっぱい。:2010/02/02(火) 15:04:19 ID:dWq1y1Y60
anhttpd で AHK でCGiやってみた時は苦行だったw
ただ、簡単にキー送ったり出来るから面白かった。
954名無しさん@お腹いっぱい。:2010/02/03(水) 18:00:26 ID:MvvEEslM0
http://www.autohotkey.com/forum/viewtopic.php?p=328920&highlight=#328920

LexikosはANSIビルドとUnicodeビルドがあるみたいなこと書いてるけど、
Unicodeビルドしか見あたらないんだが・・・

ところで、 >>509 は次バージョンで直すと言ってるね

> (前略)
> I've identified an issue with A_Desktop and similar built-in variables (specifically, ones which use ReadRegString)
> which prevents the code above and below from working correctly:
>  Code:
>   MsgBox %A_Desktop%\test.html ; omits \test.html
> For the time being, the following appears to work:
>  Code:
>   MsgBox % A_Desktop "\test.html"
> It should be fixed in the next revision.
955名無しさん@お腹いっぱい。:2010/02/03(水) 22:53:13 ID:j5gV8sXtP
>>950
マウスフックが出来るようになったらしいな。
この調子でキーボードとウィンドウ操作に対応したら、次スレは要らないな。
956名無しさん@お腹いっぱい。:2010/02/03(水) 22:56:59 ID:j5gV8sXtP
>>950
マウスフックが出来るようになったらしいな。
>>980くらいまでにキーボードとウィンドウ操作に対応したら、次スレは要らないな。
957名無しさん@お腹いっぱい。:2010/02/03(水) 22:58:15 ID:j5gV8sXtP
p2重すぎ舐めんな
958名無しさん@お腹いっぱい。:2010/02/04(木) 00:04:11 ID:+zpEG2eB0
質問です
WinActivateとControlFocusは一部のハングしたアプリ等で実行すると処理が停止してしまうようです
そこでWinActivateの代わりに
DllCall("SetForegroundWindow",UInt,ウィンドウのハンドル,Int)
としたところ、これは正常に動きます
しかし、ControlFocusの代わりに
DllCall("SetForegroundWindow",UInt,コントロールのハンドル,Int)
としたところ、ウィンドウがちらついたり非アクティブになってしまいます
何か解決策はありますか?
959名無しさん@お腹いっぱい。:2010/02/04(木) 00:25:18 ID:GvxTuLbm0
スレッドにアタッチしてSetFocus関数呼べばフォーカスは変えられるけど、
ハングしたウィンドウが反応するかどうかは知らん。

ハングしているウィンドウからクラス名取ろうとすると"Ghost"ってのが取得できるから
確認してからやればいいんじゃないの。

というか、既にAHKの範疇じゃないw
Win32API質問箱 Build84
http://pc12.2ch.net/test/read.cgi/tech/1259478896/
960名無しさん@お腹いっぱい。:2010/02/04(木) 02:06:31 ID:+zpEG2eB0
>>959
どうやらそのAttachThreadInput()の後のSetFocus()で処理が一時停止するようです
WinActivateの手続きにもAttachThreadInput()→SetForegroundWindow()があるため同じ結果になるようです
http://www.autohotkey.com/forum/topic47610.html

まあそんなに普段気になる問題でも無いので…
問題が切り分けられただけでも十分です。ありがとうございました
961名無しさん@お腹いっぱい。:2010/02/04(木) 10:08:09 ID:HGPq3oBv0
ここもム度が増してきたな
962名無しさん@お腹いっぱい。:2010/02/04(木) 19:50:29 ID:8U+Wt4mI0
だってスクリプト言語のスレだし
963名無しさん@お腹いっぱい。:2010/02/04(木) 20:02:01 ID:6hLVMidy0
そろそろ次スレだな
テンプレとかは今のまま?
964名無しさん@お腹いっぱい。:2010/02/05(金) 00:21:22 ID:F8yKHQaX0
個人的に >877 はテンプレとして追加したい
965名無しさん@お腹いっぱい。:2010/02/05(金) 00:26:46 ID:4FKyFHJn0
Q1:[CapsLock(英数)][ひらがな][半角/全角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題。
 日本語環境だとLock系キーや[ひらがな][半角/全角]の動作はトグルキーとなる。
 つまり、通常のキー(アルファベットやファンクションキーなど)とは異なり
 OS側がキーUp/Down情報を正しく返してこないのでAHKのみで対処は無理。
 ドライバレイヤーでのリマップソフト(窓使いの憂鬱など)や、レジストリ変更でリマップを行う(ChangeKeyなど)を利用して
  [CapsLock]を別の普段使わないキー([F13]〜[F24]など)に割り当ててからAHKで利用すると良い。

例:ChangeKeyを使って[ひらがな]を[F13]にする手順。
AutoHotkeyで任意のキーをF13にリマップする。
(例えばF12をF13にリマップし、スクリプトを実行)
F12::F13
Changekeyを起動する。(Changekeyが無いならググって入手する)
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」、該当するキーは「該当なし」と表示される。
(0x0064 はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると
「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。
「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
966名無しさん@お腹いっぱい。:2010/02/05(金) 01:12:09 ID:XSBU+IrW0
>>964
こんなのがあったのか。なにげにすごい情報を見落としてた。

>>877のHIDダイレクト入力のスクリプトをWin7で動かしてみたら、
ロジクールのSetPointを常駐させなくても、チルトの認識が出来た。

チルトを倒すと、btnflの値が800になり、チルトの傾斜を認識できる。
deltaが120で右倒し、-120で左倒し。

これってWin7だと、デフォルトで出来るんだっけ?

XPでもチルトを識別できるなら、CtrlやAltの押しっぱなし誤認識の
元凶といわれているSetPointと完全におさらばできるかも。
967877:2010/02/05(金) 20:30:54 ID:vHI0wqdh0
今更ながらリンク間違ってたのに気づいた。それにしても、JaneViewのFireFoxの履歴からちょこっと見るは便利だわw

一番下段に誤り有り
Windowsのイベントをフックして色々やりたい
× http://www.autohotkey.com/forum/topic27146.html (←PocketPC版のAHKのトピック)
○ http://www.autohotkey.com/forum/topic19367.html


テンプレの件だが、AutoHotkey_Lのユニコード対応版については言及した方がいいんじゃないのかね。
駄目文字については >>6 の最後を↓みたくすればいいとは思うが

> これは、>>1にある「駄目文字微対策版」を使うことで回避できる。」

オブジェクトに関してはむずいなぁ・・・。配列やハッシュなら

> Q: 配列変数やハッシュ(仮想配列)は使ええないの?
> A: AutoHotkey_Lではオブジェクトを利用することで利用できる。
> 例)
>  array := Object()
>  array[1] := 100
>  array.2 := "かきくけこ"
>  MsgBox, % array.1 "`n" array[2]
>  hash := Object()
>  hash["hoge"] := "あいうえお"
>  hash.fuga := x * y * z
>  MsgBox, % hash.hoge "`n" hash["fuga"]

みたいな感じで良さそうだが・・・。
968名無しさん@お腹いっぱい。:2010/02/05(金) 21:01:39 ID:ITu3TNd40
マウス右ボタンを押し下げてるとき、マウスを横に動かすと、画面横スクロール。
これを行いたいのですが、AHKで可能でしょうか?

私の力では無理です。
969名無しさん@お腹いっぱい。:2010/02/05(金) 21:35:15 ID:vHI0wqdh0
出来るよ。ただし、マウス直下のモノによって制御の仕方が結構違うから凄く面倒。

WheelScroll.ahk ( ttp://www6.atwiki.jp/eamat/pub/MyScript/ ) の関数を使うと楽かも。
あとは TrackWheel8( ttp://sites.google.com/site/agkh6mze/trackwheel ) 丸々使うか
970名無しさん@お腹いっぱい。:2010/02/06(土) 10:26:04 ID:8N3G40maP
AutoHotKeyでウインドウを最背面に配置する、といったことはできないものでしょうか?
最前面にするにはアクティブにすればいいだけなのですが・・・
971名無しさん@お腹いっぱい。:2010/02/06(土) 10:45:28 ID:+ZiM+9jl0
今すぐWinSetのページを読み直すんだ
972名無しさん@お腹いっぱい。:2010/02/06(土) 12:14:25 ID:8N3G40maP
>>971
サンクス!
これですね

> Attribute, Value
> (略)
> Bottom: Sends a window to the bottom of stack;
> that is, beneath all other windows. The effect is similar to pressing Alt-Escape.
> For example: WinSet, Bottom,, WinTitle

というかAlt-Escapeでようが済んでしまいました。ショートカット覚えておきます。
本当にありがとうございました。AutoHotKey何でもあるんだな
973名無しさん@お腹いっぱい。:2010/02/06(土) 20:16:19 ID:ABdOL7/C0
クリップボードの半角英数のテキストを
単語ごとに先頭文字を大文字に変換したいのですがAHKだけで可能でしょうか。

どのように記述すればいいのか教えていただけたらうれしいです。
974名無しさん@お腹いっぱい。:2010/02/06(土) 21:30:56 ID:PZP6vYbx0
StringUpper
975名無しさん@お腹いっぱい。:2010/02/06(土) 22:39:34 ID:iwnm22WI0
エラー行を無視してスクリプトを実行させることできるかしら
Lでアイコン付きメニューが作れると知ってメニュー型ランチャーを作ってみたんだけど
うっかり場所変更でアイコンのパスが違ってたりすると実行すらしないから困った
修正するためにファイラーやエディタ類を起動したいとしても
エクスプローラーから掘り下げて起動させないといけない
他のランチャーアプリみたいに不正な場所のみ非表示などで起動させてもらえないものか
976名無しさん@お腹いっぱい。:2010/02/06(土) 22:49:05 ID:SKNEhaMu0
>>975
他のランチャーアプリみたいはそういうエラー処理を作者が組み込んでるんだよ
自作するなら自前で FileExist() でチェックしなけりゃ
あと >928も参考に。
977名無しさん@お腹いっぱい。:2010/02/06(土) 22:56:31 ID:ZqQwwsFN0
コマンドライン引数で /ErrorStdOut じゃ駄目なの?
978名無しさん@お腹いっぱい。:2010/02/06(土) 22:59:18 ID:t7+jrozh0
>>977
実行を続行できなきゃ、意味が無いじゃん
979名無しさん@お腹いっぱい。:2010/02/06(土) 23:19:18 ID:iwnm22WI0
項目一つ一つIfExistでチェックを入れてみることにした
アドバイスthx
980名無しさん@お腹いっぱい。:2010/02/07(日) 04:22:11 ID:mE+xHx350
現在アクティブなウインドウに対して行うスクリプトを
ランチャーのように、文字の一覧から選択して実行するようなことはできるのでしょうか?

指定の箇所をマウスクリックするスクリプトをたくさん登録したいのですが、
どのホットキーがどのスクリプトか忘れるので、見える形になればいいなと思ったのですが。
981名無しさん@お腹いっぱい。:2010/02/07(日) 07:21:39 ID:/1hv7DVJ0
>980
Menu 使えば?
982名無しさん@お腹いっぱい。:2010/02/07(日) 08:37:21 ID:mE+xHx350
>>981
手掛ありがとうございます。
ヘルプにtray以外のサンプルがあればいいのに。まったくわからない
983名無しさん@お腹いっぱい。:2010/02/07(日) 08:44:04 ID:rMH75psS0
選択したいならMenu
ホットキーを思い出せればいいのならToolTipにホットキー一覧書いて表示する手もある。

>>979
>項目一つ一つIfExistで
ベタで書いてるのかな。エラー処理入れるならファイルパスを
バッファに入れてからループで回すと楽だよ。もしくは関数化するとか
984名無しさん@お腹いっぱい。:2010/02/07(日) 09:53:17 ID:mE+xHx350
ToolTipで表示される文字列を多段表示させることはできないのでしょうか?
3Dゲーム中、段落をわけて長文を表示させたいのです。

現在過去ログを漁ってそれを流用しようとしているのですが。
#Persistent
AutoHideTooltip("このツールチップは5秒で消えます", 5000)

AutoHideTooltip(msg, dur,x="",y="") {
Tooltip, %msg%,%x%,%y%,20
SetTimer, AutoHideTooltip_HideTip,-%dur%
return
AutoHideTooltip_HideTip:
Tooltip,,,,20
return
}

おしえてください。
985名無しさん@お腹いっぱい。:2010/02/07(日) 10:09:17 ID:rMH75psS0
`n
986名無しさん@お腹いっぱい。:2010/02/07(日) 11:05:10 ID:mE+xHx350
>>985
ありがとうございました。できました。
おそろしく長い一行になりそうです。
987名無しさん@お腹いっぱい。:2010/02/07(日) 13:04:24 ID:dY9+LfFuP
若干面倒だけど1行ごとに代入していけば良いんじゃないかな

msg .= "1行目`n"
msg .= "2行目`n"
988名無しさん@お腹いっぱい。:2010/02/07(日) 13:10:27 ID:KT8ol6Vw0
そういうときは、ヒアドキュメントをつかうといい。

msg=
(
おれは
AutoHotkeyを
愛してる

)
msgbox,%msg%

2行以上の場合は、ヒアつかったほうが、圧倒的に便利。
既存文章のコピペも、いちいち`nに置換せずにそのまま出来る
989名無しさん@お腹いっぱい。:2010/02/07(日) 13:26:14 ID:q0UbybZB0
#Persistent
#NoEnv
CoordMode, Tooltip, Screen
x = 100
y = 100
SetTimer, Timer1, On
Return
Timer1:
Tooltip,
(LTrim Comment
 %A_YYYY%/%A_MON%/%A_DD%(%A_DDD%) ; コマンド内でもヒアドキュメントは有効
 %A_Hour%:%A_Min%:%A_Sec%
), x, y
Return
990名無しさん@お腹いっぱい。:2010/02/07(日) 14:16:39 ID:rMH75psS0
ヒアドキュメントはインデントできないから(やるとそのままメッセージに反映されてしまう)
コードの見通し的にはあんまり好きじゃないんだな。

msg .= "1行目`n"
   . "2行目`n"
   . "3行目`n"

って感じで使うのが多いわ自分の場合
991名無しさん@お腹いっぱい。:2010/02/07(日) 14:27:26 ID:q0UbybZB0
とりあえず建てた・・・

AutoHotkey スレッド part10
http://pc12.2ch.net/test/read.cgi/software/1265518996/
992名無しさん@お腹いっぱい。:2010/02/07(日) 16:08:32 ID:/1hv7DVJ0
>982
以前書いた正しいか良く分からんコード。コマンドライン引数からもモード指定可能。

mode=%1%
If mode =
{
Menu, ModeMenu, Add, Normal, NormalMode
Menu, ModeMenu, Add, Stop, StopMode
Menu, ModeMenu, Add, Reload, ReloadMode
Menu, ModeMenu, Show
}

If mode = stop
...
Exit

NormalMode:
mode=normal
return

StopMode:
mode=stop
return

ReloadMode:
mode=reload
return
993名無しさん@お腹いっぱい。:2010/02/07(日) 16:49:37 ID:Zb8BbnCc0
>>991【乙
994名無しさん@お腹いっぱい。:2010/02/07(日) 23:33:01 ID:Lx4CKe1W0
menuってすげー使いにくいと思う
995名無しさん@お腹いっぱい。:2010/02/07(日) 23:38:52 ID:5vuFkgxp0
そういうところ誰か作り直さないのかなほんと
996名無しさん@お腹いっぱい。:2010/02/08(月) 00:26:48 ID:OFqcvQAx0
俺は
menu(str)
って関数を作って、愛用している。

str=
(
ABC
DEF
GHI
JKL
)
ret:=menu(str)

ってやると、

ABC
DEF
GHI
JKL

という4項目のメニューが表示されて、選択するとretに文字列が返却される。
キャンセルするとヌルが返却される。

これで、単純な選択肢を出したいだけなら、もう何も考えずバンバン使えてる。
色づけとかチェックマークとか、必要なオプションは適宜、引数で渡してる。
997名無しさん@お腹いっぱい。:2010/02/08(月) 04:23:48 ID:5m5XLAARP
ツールチップを表示するのをホットキーに割り当てて複数回押すと
記述がどんどん追加されていくのがかなしい。ずっと同じ表示だけしてくれればいいのに。

>>992
どこに各々のコマンドというか、マウスクリックさせる指令を入れるのでしょうか?
mode=とreturnの間に入れたら、stopに入れたメニュー項目を選択したらnormalのも実行されてしまいます。


998名無しさん@お腹いっぱい。:2010/02/08(月) 05:52:09 ID:OPrWP2Zz0
>>995
NILScriptに期待しる
999名無しさん@お腹いっぱい。:2010/02/08(月) 05:53:01 ID:xV2GFLdk0
どういう動作を期待してどんなことをしたら、意図した動作にならなかったか
を書かないと誰も答えられないよ
出来れば最小限のコードも添える
1000名無しさん@お腹いっぱい。:2010/02/08(月) 06:04:40 ID:E8wytssM0
0
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。