AutoHotkey スレッド part10

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
2名無しさん@お腹いっぱい。:2010/02/07(日) 14:04:46 ID:q0UbybZB0
■ 関連記事のあるサイト

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

1 Hour Software by Skrommel - DonationCoder.com
http://www.donationcoder.com/Software/Skrommel/
Tips N Tricks(公式フォーラムのトピック)
http://www.autohotkey.com/forum/topic8795.html&highlight=gui
3名無しさん@お腹いっぱい。:2010/02/07(日) 14:07:32 ID:q0UbybZB0
■ リマップ・ホットキー割り当て

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

 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
  「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
  というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
  リマップ( F12::F13 )を解除する。

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

Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
 例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
   sc07B & I::Send, {Blind}{Up}
   sc07B & K::Send, {Blind}{Down}
   sc07B & J::Send, {Blind}{Left}
   sc07B & L::Send, {Blind}{Right}
4名無しさん@お腹いっぱい。:2010/02/07(日) 14:09:07 ID:q0UbybZB0
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
  #UseHookで全部にキーボードフックを適応する方法でも可。

■ マウス関連

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

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

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

Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

■ ジョイスティック関連等

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

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

Q3:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A3:AutoHotkeyではできません。

Q4:Bluetoothリモコン等を使えたらいいなぁ・・・
Q5:過去ログを漁るといいかも。
6名無しさん@お腹いっぱい。:2010/02/07(日) 14:13:02 ID:q0UbybZB0
■ 日本語の取り扱い
AuthoHotkeyは英語圏でつくられたソフトでマルチバイト文字列のことを全く考慮していないので以下の問題が起き得る。
なお、ユニコード対応されたAutoHotkey_Lでは以下の問題は発生しない。

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

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

Q2:A_ScriptDir、A_LoopFileName や SplitPath の結果がおかしいことがあるんだけど?
A2:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
  対象となりうる文字:
    ―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx\\
  これは、>>1にある「駄目文字微対策版」を使うことで回避できる。
7名無しさん@お腹いっぱい。:2010/02/07(日) 14:14:51 ID:q0UbybZB0
■ スクリプト仕様
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名無しさん@お腹いっぱい。:2010/02/07(日) 14:16:35 ID:q0UbybZB0
■ AutoHoekey_Lって具体的にどう違うの?

本家との違いは以下の通り
(1) ユニコード対応されているので、駄目文字(>>6)が無いなど日本語の取り扱いが楽。
(2) #If 任意の「式」を用いてキーマップ定義ができる
(3) メニューにアイコン表示ができる
(4) Exeやトレイアイコン描画の向上
(5) GUIのテキスト表示のレンダリング方法を変更できる(アンチエイリアスOFF等)
(6) 正規表現にマッチした文字列を引数にして関数を呼べる
(7) Send, {Asc XXXX}のUnicode版が使える
(8) 配列変数や連想配列として使えるオブジェクトの導入。

目玉は(1)および(2)。 ユーザ定義関数作って #If で使うととても便利。
例1) [Ctrl]+[Alt]+[Space]で On/Off 切り替え。変数がOnの時のみIKJLでカーソル移動可。
 ^!Space::KeyMap:=!KeyMap
 #If (KeyMap=1)
  I::Up
  K::Down
  J::Left
  L::Right
 #If

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

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

#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%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名無しさん@お腹いっぱい。:2010/02/07(日) 14:26:39 ID:q0UbybZB0
お役立ちリンク

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

キーボードのキーアサインや、Up/Downの状態を知りたければ、
AHKを常駐させて、トレイアイコンで右クリしてKeyHistoryを開けば、出てくる。
F5でリフレッシュされるので、調べたいキーを押した後、F5を連打する。

KeyHistoryは、キーを押した後にF5を押してリフレッシュしないと
内容が表示されない。また、F5でリフレッシュすると、F5を押した、という内容も
合わせて出てくるため、少々見にくい。

そんなときは>>10

「HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい」

のリンク先にあるスクリプトを実行する。コンソール(DOSプロンプトウインドウ)が
でてきて、そのウインドウへ、リアルタイムにキーの上げ下げ状況が表示される。

PrintScreenや、日本語入力などの特殊キーにHotkeyを定義しようとして、
うまく動かない場合は、これで調査すると、原因を掴みやすい。
12名無しさん@お腹いっぱい。:2010/02/07(日) 18:45:42 ID:q0UbybZB0
ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報

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

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

#1::Talk("<NUMK VAL=" A_Hour ">じ/<NUMK VAL=" A_Min " COUNTER=ふん>")

; phrase: 喋る内容(音声記号列という名の文字列)
; speed:速さ(遅50〜300速)
; sync:喋り終わるまで待つかどうか(真偽値)
Talk(phrase, speed=100, sync=true) {
 static hModule, hMe
 If (!hModule) {
  hModule := DllCall("LoadLibrary", "Str", "AquesTalk2Da.dll", "Ptr")
  hMe := DllCall("AquesTalk2Da\AquesTalk2Da_Create", "Ptr") ; 合成エンジン作成
 }
 If (sync) {
  Return DllCall("AquesTalk2Da\AquesTalk2Da_PlaySync", "AStr", phrase, "Int", speed, "UInt", 0, "Int")
 } Else {
  If DllCall("AquesTalk2Da\AquesTalk2Da_IsPlay", "Ptr", hMe, "Int") ; 喋り中なら
   DllCall("AquesTalk2Da\AquesTalk2Da_Stop", "Ptr", hMe) ; 止める
  Return DllCall("AquesTalk2Da\AquesTalk2Da_Play", "Ptr", hMe, "AStr", phrase, "Int", speed, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0, "Int")
 }
}

※ 上はAHKL(Unicode)用なので、本家で使う場合は "Ptr"→"UInt", "AStr"→"Str" に置換する
13名無しさん@お腹いっぱい。:2010/02/07(日) 22:48:22 ID:OuZJDkRQ0
新スレ乙

>>1のautohotokey_lのサイトで
ansi ver. とunicode ver.が今日から公開されてるよ
14名無しさん@お腹いっぱい。:2010/02/08(月) 07:28:47 ID:ux6mitJa0
>>12
乙。
SAPI5も期待。
15名無しさん@お腹いっぱい。:2010/02/08(月) 08:51:08 ID:odYM73Fh0
>>12
オレもAquesTalkで時報とかしゃべらせてるw
かなり手軽にできるからイイ
音声だと画面見る必要がないので、いろんな場面でのアラートに便利なんだよね
フルスクリーンのゲームやってても問題ないしな。

ただ、音量をコントロールする方法がわからないから全体のボリューム上げてる時うるさいので困る、
調整方法ってあるのかな?
16名無しさん@お腹いっぱい。:2010/02/08(月) 09:02:39 ID:oYOtFkzP0
>>15
<-v:50>で調整できない?
17名無しさん@お腹いっぱい。:2010/02/08(月) 12:25:02 ID:Rnrgbpwo0
前スレ984です。前スレ999さんのお言葉に甘えさせていただきまして
引き続き教えて君をば

http://pc12.2ch.net/test/read.cgi/software/1253888736/984
のスクリプトに`nを加えれば望む反応が得られるのですが、msgの
代入のやり方がわかりません。おしえていただけませんか?

(差し支えというか、避けたいこと)
・984では`nによって非常に長い一行になるので、.iniに書き込む際にやりづらい
・自分で代入させるとTOOLTIPが消えたあと再表示させると、ポップアップの最下部にふたたび同じ文が追加される。
・ウインドウのフォーカスが移動するのがいやなので、ダイアログで出現するのは避けたい。

menuで選択する方法もいまだに非常に魅力があるのですが、
現時点ではこちらのTOOLTIPのほうが近道だと思っています。
わがままですが、よろしくお願いします。
18名無しさん@お腹いっぱい。:2010/02/08(月) 12:48:09 ID:OFqcvQAx0
だからさー、動かない具体的なコードを、なんで貼り付けないの?
想像だけで話を進めるのは、お互いに疲れるだけでしょ。
19名無しさん@お腹いっぱい。:2010/02/08(月) 13:11:22 ID:hAl1z/Wh0
>>17
:= と .= の違いを調べてみて
20名無しさん@お腹いっぱい。:2010/02/08(月) 14:12:23 ID:Rnrgbpwo0
>>18
http://pc12.2ch.net/test/read.cgi/software/1253888736/984
に過去ログから探してきた僕が手を加える前の具体的なコードがあるんで
それに上手く多段の日本語のメッセを代入する方法おしえてください
21名無しさん@お腹いっぱい。:2010/02/08(月) 14:17:45 ID:bx5M4EB+0
>>20
手を加えて動かないのはどういうコードなのよ?
22名無しさん@お腹いっぱい。:2010/02/08(月) 14:26:56 ID:xV2GFLdk0
例としたスクリプトからは、おまいさんの言うところの上手く動かない部分は見えないわけだが
23名無しさん@お腹いっぱい。:2010/02/08(月) 14:31:20 ID:OFqcvQAx0
>>20
良質なこのスレでこんなことを書きたくないが、ここの住人が協力してくれるのは、
やってみて駄目だった場合のみだ。

<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

説明書は>>1 だ。読む気がないなら失せたほうがいい。
24名無しさん@お腹いっぱい。:2010/02/08(月) 14:32:07 ID:Rnrgbpwo0
動かないコードを貼るとはいってません。
リンク先のコードに代入のやり方を工夫したものを
ください。
25名無しさん@お腹いっぱい。:2010/02/08(月) 14:33:13 ID:Rnrgbpwo0
>>23
やってみてダメだった場合でした。
26名無しさん@お腹いっぱい。:2010/02/08(月) 14:34:17 ID:0OzwSohj0
>>25
7まで当てはまってるな
msg := "1行目`n"
msg .= "2行目`n"
msg .= "3行目`n" . "4行目`n"
. "5行目`n" . "6行目`n7行目`n"
AutoHideTooltip(msg, 5000)
こうか?
27名無しさん@お腹いっぱい。:2010/02/08(月) 14:39:22 ID:Rnrgbpwo0
999 :名無しさん@お腹いっぱい。 [↓] :2010/02/08(月) 05:53:01 ID:xV2GFLdk0
どういう動作を期待してどんなことをしたら、意図した動作にならなかったか
を書かないと誰も答えられないよ
出来れば最小限のコードも添える
-------------------------
これが瞬間飛躍して
”動かない具体的なコードを貼る”になり、それ必須になるのか。
しねよ
28名無しさん@お腹いっぱい。:2010/02/08(月) 14:48:02 ID:OFqcvQAx0
わからない9大理由 1〜9まで、みごとに全部当てはまったw
これにて終了。
29名無しさん@お腹いっぱい。:2010/02/08(月) 14:48:32 ID:0OzwSohj0
( ゚д゚)ポカーン
30名無しさん@お腹いっぱい。:2010/02/08(月) 14:51:32 ID:odYM73Fh0
>>16
レスありがとう。
それは音声記号列用のタグなのかな?なんか使い方がイマイチよくワカランです・・orz
31名無しさん@お腹いっぱい。:2010/02/08(月) 15:06:31 ID:Rnrgbpwo0
>>26
出来ました。動きました。感謝します。
あなたは生きてください。
32名無しさん@お腹いっぱい。:2010/02/08(月) 15:35:46 ID:sAQQrZX30
なんかワロタw
33名無しさん@お腹いっぱい。:2010/02/08(月) 15:50:50 ID:K35U917U0
>>12
これ_Lでやったが動かないね
34名無しさん@お腹いっぱい。:2010/02/08(月) 16:00:16 ID:WhXEFdFiP
音声合成といえば、俺はSofTalkというソフトをrunで呼び出して使っている。
つかっている発声エンジンのコアは>>12と同じ。

dll呼び出しとの違いは、音声用辞書が含まれているので日本語の漢字混じりや、
改行や記号などが含まれていても、そのまましゃべらせることが出来る。

SofTalk
http://cncc.hp.infoseek.co.jp/

インスコ作業が不要なので、初期設定をした後は、フォルダごとコピーすれば
使いまわせる。複数のマシンで同じ設定を使いまわすときに便利。

あらかじめSofTalkの設定で、実行時のウインドウを非表示にしておく。
strに、しゃべらせたい文字を入れて

str=%clipboard%
run,SofTalk.exe %str%

とやると、しゃべる。上記のrunで、短時間で続けて送ったり、小出しに出力しても、
前の言葉をしゃべり終えてから、次の言葉をしゃべる(自動でキューイングされる)

dll呼び出し法で、音声辞書が使えるなら、dllのほうがスッキリするかも。
35名無しさん@お腹いっぱい。:2010/02/08(月) 16:02:13 ID:r7IQE9IA0
>>30
AquesCmdDl の独自拡張なのかもしれない…
音声記号列仕様.pdf には載ってないな
AquesCmdDl のサンプルから引用
>とちゅうで/<-v:50>おんりょーを/へんこうし/<-v:100>もどしま'す。
36名無しさん@お腹いっぱい。:2010/02/08(月) 17:39:12 ID:xV2GFLdk0
>>33
AHKLのL42以前の場合、本家とほぼ同じなんで>>12の最下行をしないと無理だと思う
L43以降なら、ANSIでもUnicodeでもどっちでもおk。

てか、更新キターーーーーーーーーーーーーーーーー

http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 45 - February 8, 2010
* Added _GetAddress; _SetCapacity/_GetCapacity may now operate on a given field. [more info]
* Added workaround for WM_PAINT infinite loop often caused by subclassing.
* Allow obj.() as a means to call the default method of an object; equivalent to obj[""]().
* Dev: Added solution and project files for MSBuild 4.0 & VS2010. [more info]
* Fixed (Unicode): 'Running' column in ListHotkeys.

Revision 44 - February 7, 2010
* Fixed: Attempting to set "nothing" crashed the script. For instance, x[]:=z.
* Fixed (Unicode): Unable to find default script (Documents\AutoHotkey.ahk).
* Fixed (Unicode): A_Desktop, A_ProgramFiles and several other built-in variables which read their value from the registry caused strings to be incorrectly terminated.
* Fixed (ANSI): Characters in the range 0x80-0xFF couldn't be found by InStr or StringReplace.
* Changed (ANSI): Treat ToCodePage/FromCodePage like other unsupported/invalid subcommands.


うは、_GetAddress(key) と _GetCapacity(key): 使えそうだ。これでオブジェクトを構造体にできそうだ。
http://pc12.2ch.net/test/read.cgi/software/1253888736/509 は治ったらしい。
37名無しさん@お腹いっぱい。:2010/02/08(月) 18:14:07 ID:7qJE2wm+0
dq = "
test := dq hoge dq
例えばこんな感じに回りくどい書き方じゃなくても
変数内の文字列に" "を加えて代入させることはできる?
三項演算子の中でやりたいんだけども
38名無しさん@お腹いっぱい。:2010/02/08(月) 18:45:26 ID:xV2GFLdk0
test := """" hoge """"
39名無しさん@お腹いっぱい。:2010/02/08(月) 18:49:17 ID:odYM73Fh0
>>35
そういうのがあるのか、あとで試してみる。thx
40名無しさん@お腹いっぱい。:2010/02/08(月) 18:53:02 ID:hAl1z/Wh0
もしくは Chr(0x22) hoge Chr(0x22)


音声合成面白いね。タイマで回して0分/30分ごとに喋らせても楽しいかも。

そして ID:Rnrgbpwo0はなにが原因だったかわかってないんだろうな、
>19完全にスルーされたしw
41名無しさん@お腹いっぱい。:2010/02/08(月) 19:07:52 ID:7qJE2wm+0
>>38,40
おお、こんなやり方があったのか
一つ成長したよ、ありがとうございます
42名無しさん@お腹いっぱい。:2010/02/08(月) 20:21:16 ID:CmVTkuqf0
>>36
AutoHotkeySC.binデカすぎワロタ
43名無しさん@お腹いっぱい。:2010/02/08(月) 20:38:34 ID:NhLg/1cV0
のびてると思ったら池沼と
教えたがりのバカが来てたのか
44名無しさん@お腹いっぱい。:2010/02/08(月) 20:59:28 ID:ehSZh5bY0
>>42
普通のと比べると倍近くになってるよな
45名無しさん@お腹いっぱい。:2010/02/08(月) 23:05:15 ID:JGgwlgqT0
>>36
ahk2exeでansiのほうをAutoHotkeySC.binを使ってビルドすると

Set Version Error!
Couldn't set Version Info, ResHacker.exe failed!

[FileNames]
Exe=ほにゃらら
SaveAs=ほにゃらら
Log=ほにゃらら

[Commands]
Error: This is not a Win32 executable file.

って表示される
同じ症状の人はいる?
L44までは問題なかったんだけど
46名無しさん@お腹いっぱい。:2010/02/09(火) 21:37:30 ID:4yyXZhUm0
>>45
今試しにコンパイルしてみたけど問題なく起動したよ
47名無しさん@お腹いっぱい。:2010/02/09(火) 21:58:08 ID:UcDm21Yy0
ちょ、明らかに昨日のAutoHotkeySC.binとバイナリが違っているぞ
昨日はファイルサイズ2MB以上あったし
48ひみつの文字列さん:2024/12/26(木) 13:27:52 ID:MarkedRes
日本国またはアメリカ合衆国、もしくはその両方の著作権法に触れる内容であると疑われることから表示できません。
49名無しさん@お腹いっぱい。:2010/02/09(火) 22:22:35 ID:cNKSSkos0
うむ、SC.bin小さくなってるな。あとexeも2/9のタイムスタンプになってるな
50名無しさん@お腹いっぱい。:2010/02/09(火) 22:27:39 ID:cNKSSkos0
てか、結構AHKL使ってる人いるんだな。勿論Unicode版。
ANSI版は使う意味が殆ど無くなってる。
5145:2010/02/09(火) 23:06:56 ID:oV6Wqdud0
皆さんありがとうございます
ただしく動作しました!
52名無しさん@お腹いっぱい。:2010/02/10(水) 01:30:17 ID:mF3I2qto0
お知恵を拝借。

【対象】Win7標準搭載のペイント
【したいこと】文字入力中は通常のキーをsend。それ以外の場合にホットキーとして動作させたい。
【やってみたこと】キャレットの位置変化を見るif文を書きました(下記)。
【問題点】ホットキーが母音(下記の例ではe)の場合、「け」などを入力するときに
 キャレットの位置が変化しないため、if文の中が実行されてしまう。
 子音の場合も、意に反してif文の中が実行されてしまう場合がある(入力が速いときに不具合がある模様)。
e::
preX=%A_CaretX%
preY=%A_CaretY%
send, e
if(A_CaretX==preX && A_CaretY==preY){
Send,!Her
}
return

カーソルの種類(IBeamか否か)で場合分けしても、カーソルの位置によって上手くいかないことがあります。
良い方法があれば教えてください。よろしくお願いします。
53名無しさん@お腹いっぱい。:2010/02/10(水) 02:19:25 ID:VyEl2rdA0
イベントフックしてキャレットの表示・非表示を拾ってフラグの上げ下げをする。で、AHKLの#Ifで条件分岐。
だたし、Firefoxなどの独自ウィンドウだと無理。
★1の行まではAutoexecセクションに書くこと
★2の行の最初のセミコロンを外してWinTitleを適宜設定すれば、「キャレットが未表示かつ特定のウィンドウのとき」とできる。

DllCall("SetWinEventHook"
 , "UInt", EVENT_OBJECT_SHOW := 0x00008002
 , "UInt", EVENT_OBJECT_HIDE := 0x00008003
 , "UInt", 0 ; ModuleHandle
 , "UInt", RegisterCallback("WinEventProc_ShowHide")
 , "UInt", 0 ; All Process
 , "UInt", 0 ; All Threads
 , "UInt", 0x0003 ; WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
 , "UInt")
; ★1

WinEventProc_ShowHide(hWinEventHook, event, hwnd, idObject, idChild, thread, time) {
 global IsCaretShown
 If (idObject == 0xFFFFFFF8) ; OBJID_CARET
  IsCaretShown := (event == 0x00008002)
}

#If (!IsCaretShown) ; && WinActive(winTitle) ; ★2
e::Tooltip, Caret表示無し
54名無しさん@お腹いっぱい。:2010/02/10(水) 02:20:26 ID:RKqY2p5U0
ime.ahk を使えばいいんじゃない?
55名無しさん@お腹いっぱい。:2010/02/10(水) 04:22:28 ID:mF3I2qto0
>>53
トンクス!
AHKL使うの初めてで躊躇ったけど、面倒な目には合わず、今のところ不具合なく動いてます。

ちなみに、★2の部分はこんな感じで使っています。
#If (!IsCaretShown) && WinActive("ahk_class MSPaintApp") ;MSペイント(Win7)のCaret表示無しの時
e::Send,!Her ;消しゴム
i::Send,!Ht ;テキスト入力
x::Send,!Hsh{Home}{Right 3}{Enter} ;ボックス
c::Send,!Hsh{Home}{Right 2}{Enter} ;サークル
p::Send,!Hsh{Home}{Right 5}{Enter} ;多角形
z::Send,!Vm!H{Enter} ;ズーム100%
-::Send,!Vo!H{Enter} ;縮小
+`;::Send,!Vi!H{Enter} ;拡大
+3::Send,!Vg!H{Enter} ;グリッド線のトグル
v::Send,!HseR ;選択(長方形領域)
#If
56名無しさん@お腹いっぱい。:2010/02/10(水) 17:49:42 ID:HlHCopxg0
IfWinActiveを関数で覆ったら、
一番上に書いたIfWinActiveだけが全てのソフトに適用されちゃう。
ひょっとして関数の中だとIfWinActiveは使えないですか?
凄く初歩的な事かも知れず恐縮ですが…

; 閉じる----------------
vk1Dsc07B & w::
modW()
return

; 別ファイル----------------
modW() {
;Google Chrome
#IfWinActive, Google Chrome
send ^w
return

;その他全て
#IfWinActive,
send !{F4}
return
}
57名無しさん@お腹いっぱい。:2010/02/10(水) 17:50:39 ID:HlHCopxg0
こんな感じで書いても常に上のものが適用されてしまいました。
modW() {
WinGetClass,activeClass ,A

if(%activeClass% == Chrome_WidgetWin_0) {
send chrome
} else {
send その他
}
}
58名無しさん@お腹いっぱい。:2010/02/10(水) 18:05:07 ID:R3l2k6Ms0
if(%activeClass% == Chrome_WidgetWin_0) {



if(activeClass == "Chrome_WidgetWin_0") {
59名無しさん@お腹いっぱい。:2010/02/10(水) 18:11:59 ID:R3l2k6Ms0
#If〜系を関数内にいれたらダメ。(頭に#が無い If〜 なら問題ない)


#IfWinActive, Google Chrome
vk1Dsc07B & w::send ^w

#IfWinActive
vk1Dsc07B & w::send !{F4}
6056:2010/02/10(水) 20:32:42 ID:HlHCopxg0
>>58
>>59
ありがとうございます。基本も理解していなかったので助かりました!
キー割り当てを1行にして管理を楽にする為に苦戦していて、
結局、IfInStringで中間一致させてIfWinActiveと同じような事ができました。
スマートじゃない気がしますが…

; 閉じる
vk1Dsc07B & w::modW()

; 別ファイル
modW() {
WinGetClass,activeClass ,A ;ahk_class
WinGetTitle,activeTitle ,A ;title

;ahk_class中間一致
IfInString, activeClass, TTeraPadMainForm, {
send terapad
}

;title中間一致
else IfInString, activeTitle, Chrome, {
send chrome
}

;それ以外
else {
send other
}
}
6156:2010/02/10(水) 21:04:33 ID:HlHCopxg0
何度もすいません…
{の前に改行を入れたら
>>59 さんの言う通り#無しIfWinActiveが使えました。
厳密だったんですね。お騒がせしました。
modW() {
; エラー
IfWinActive, ahk_class TTeraPadMainForm {
send terapad
}

; 成功
IfWinActive, ahk_class TTeraPadMainForm
{
send terapad
}
}
62名無しさん@お腹いっぱい。:2010/02/10(水) 21:20:00 ID:hBS+tp1L0
「TTeraPadMainForm {」
という文字列がマッチしたかどうかを判別するようになるから、
それだとカッコが1つ不足するからエラーになるんだろう。

そういう気づきにくく、かつ発見したときに落胆するようなトラブルが俺は嫌いなので、
カッコは1行に1個で、合成はしないよう徹底している
63名無しさん@お腹いっぱい。:2010/02/10(水) 21:29:55 ID:VyEl2rdA0
エラーになる原因は { が省略された引数と解釈されているため
まぁコマンドタイプの If と 式タイプの If 系が混在してるから分かりにくいのは確か

あと、ブロック内が1行の場合は、{ } は省略出来るんでそれを使うのも手。

IfWinActive, hogehoge
 Send, boo
Else IfWinActive fuga fuga
 Send, foo
Else
 Send, woo

ただ、>.>59のように #IfWinActive を使った方が見通し良くてパフォーマンスも良いと思う。
好き好きだけど。
64名無しさん@お腹いっぱい。:2010/02/11(木) 01:48:55 ID:XsrAWT1b0
既出かな? 「AutoHotkeyを流行らせるページ」終了のお知らせ…。

ttp://lukewarm.s101.xrea.com/
>現在開発中のJavaScriptベースのユーティリティ系スクリプトホスト「NILScript」の普及を目指すため、
>御覧の「AutoHotkeyを流行らせるページ」のコンテンツは、近々抹消される予定です。
>詳しくは http://lukewarm.s151.xrea.com/test/read.cgi/b/1264431038/ を御覧下さい。

これ、本気なの?(´・ω・`)
65名無しさん@お腹いっぱい。:2010/02/11(木) 01:57:51 ID:aX+kY2Jk0
個人に頼り切りだとこういう時弱いね
66名無しさん@お腹いっぱい。:2010/02/11(木) 01:59:52 ID:/twJjVL60
別にヘルプファイル落としとけばいいだろ
67名無しさん@お腹いっぱい。:2010/02/11(木) 02:01:43 ID:XsrAWT1b0
>>66
新参に「このページを読め」って言えなくなる。
68名無しさん@お腹いっぱい。:2010/02/11(木) 02:06:51 ID:pFAmdxxq0
サイト丸々落として保管しとくか…
69名無しさん@お腹いっぱい。:2010/02/11(木) 02:09:10 ID:/twJjVL60
あれ、固まってどっかに置いてなかったっけ?ほとんどサイトと構成が同じやつ
70名無しさん@お腹いっぱい。:2010/02/11(木) 02:09:40 ID:KP/oByhm0
あそこはzip配布してるから欲しい人は今の内に落としておいた方がいいかもな
71名無しさん@お腹いっぱい。:2010/02/11(木) 02:09:58 ID:/twJjVL60
72名無しさん@お腹いっぱい。:2010/02/11(木) 02:10:47 ID:znJ3tE9L0
>>69
下のほうにZIPでダウンロードできるリンク貼ってあるね
73名無しさん@お腹いっぱい。:2010/02/11(木) 02:16:32 ID:6ftLswUb0
AutoHotkeyJP.chmの作者様、最新版Lへの対応をまったりまってます(チラッ
74名無しさん@お腹いっぱい。:2010/02/11(木) 02:32:20 ID:AJqUxm310
うpろだの代わりを探さないといけないな
75名無しさん@お腹いっぱい。:2010/02/11(木) 02:58:37 ID:bhG8/P/R0
抹消される前にNILScritが普及すればいいんじゃないか
76名無しさん@お腹いっぱい。:2010/02/11(木) 03:10:30 ID:aemd22bX0
エイプリルフールネタがどんどん現実になっていくんだな。
77名無しさん@お腹いっぱい。:2010/02/11(木) 07:23:04 ID:2JcAUSiU0
おいおいまだ2月だぞ
エイプリルフールには早すぎねえかw
78名無しさん@お腹いっぱい。:2010/02/11(木) 08:47:42 ID:TQ0o5+gj0
え?
79名無しさん@お腹いっぱい。:2010/02/11(木) 10:47:20 ID:JaY9TbLm0
ちょw
別ページ立ち上げじゃダメですか管理人氏
Java系わからんから今さら移行なんてできないわ
更新停止旧コンテンツ扱いでいいから残しといて欲しいです

>>73
なんかすっかり派生のL版のほうが主流になっちゃいましたね。
自分はいまだ公式ANSI版なんで良くわからんのです。
というか日本語説明のない新機能はもう全然…

wikiなり既存ページなりをchmでまとめるくらいはできるんだけど英訳はむりぽ
80名無しさん@お腹いっぱい。:2010/02/11(木) 11:45:01 ID:qjRfGgUo0
まじかw
バレンタインとエイプリルフールを間違えているんじゃないのか??
81名無しさん@お腹いっぱい。:2010/02/11(木) 11:54:19 ID:/2IOpHsT0
まぁ、しゃーないわな。個人のやる気に依存したものだし。

Wikiにでも移行するか?
ベースはあるわけだし、リファレンスはページ作ってペタペタ貼れば何とかなると思う。
82名無しさん@お腹いっぱい。:2010/02/11(木) 11:55:32 ID:AJqUxm310
この手のソフトって過去の資産の積み重ねが重要だと思うけどなあ
マクロとしての機能的には微妙な秀丸マクロがいまだに使い続けられてるみたいに
新しいソフト出たからって乗り換えようって気にはならないわ
83名無しさん@お腹いっぱい。:2010/02/11(木) 13:13:51 ID:D7r1ZbMI0

>近々抹消

え〜〜 …

























>近々抹消   (゚Д゚≡゚д゚)  http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1193827174/9
         ( ゚Д゚)…??
84名無しさん@お腹いっぱい。:2010/02/11(木) 13:14:36 ID:p+0Dzcwi0
>>83
笑った
85名無しさん@お腹いっぱい。:2010/02/11(木) 13:33:27 ID:AJqUxm310
(^ω^#)ビキビキ
86名無しさん@お腹いっぱい。:2010/02/11(木) 13:38:48 ID:qjRfGgUo0
んにゃろおおおwww
87名無しさん@お腹いっぱい。:2010/02/11(木) 14:02:47 ID:JaY9TbLm0
ククククマー

二ヶ月も前から準備する奴があるかい…
88名無しさん@お腹いっぱい。:2010/02/11(木) 17:27:11 ID:aX+kY2Jk0
AutoHotkeyを流行らせる気なんて最初から無かったページ
この文言はいささか失礼でないかい?
公式からリンクされているし翻訳を通して読んだら日本はなんだと不愉快になると思う
独自にスクリプト言語を開発してるからAutoHotkeyのページは閉じたい
といえばいいだけで、わざわざこんな文を表示させなくてもいいんじゃないか
89名無しさん@お腹いっぱい。:2010/02/11(木) 17:49:26 ID:AZNt7YdWP
本家サイトで、日本国旗のアイコンをクリックすると、
はやらせるページに飛ぶからね。公式に認められたサイトなのに、
そこでAHKを冒涜するような文言を書いてしまうのは、ジョークでも悲しいわ


AHKではここまでしかできません。ここからは我が作のNILScriptでどうぞ
NILScriptで、AHKのこれと同じ表現をするには以下サンプル〜〜〜

みたいな流れで進めてくれると思ってたのに。
90名無しさん@お腹いっぱい。:2010/02/11(木) 22:00:12 ID:bhG8/P/R0
流行るというのは馬鹿に見つかるってことだからな。
91名無しさん@お腹いっぱい。:2010/02/11(木) 22:44:49 ID:HT3UfUot0
だいたいこのソフト自体諧謔精神の塊みたいなもんだろ
92名無しさん@お腹いっぱい。:2010/02/11(木) 22:45:30 ID:/2IOpHsT0
サブルーチンラベルってホットキー用のラベルかどうかに関わらず、
連続して書いてあるものは全部同位のようなふるまいになるんだな。知らなかった。

Menu, Tray, Add
Menu, Tray, Add, Test1, T1
Menu, Tray, Add, Test2, T1
Return
T1:
 MsgBox, A1
T2:
F1::
 MsgBox, A2
F2::
 MsgBox, A3
F3::MsgBox, A4
F4::
F5::
 MsgBox, A5
 Return

[結果]
T1: A1
T2: A2, A3, A4
F1: A2, A3, A4
F2: A3, A4
F3: A4
F4: A5
F5: A5
93名無しさん@お腹いっぱい。:2010/02/11(木) 22:49:13 ID:p+0Dzcwi0
>>92
サブルーチン毎にreturn を書いたらいいんじゃね?
94名無しさん@お腹いっぱい。:2010/02/11(木) 22:52:50 ID:/2IOpHsT0
いや、困ってるんじゃなくて、T1とT2の挙動の差が面白いなと
F4とF5みたいな書き方はマニュアルにあるからしってたんだけどな
95名無しさん@お腹いっぱい。:2010/02/11(木) 22:54:47 ID:p+0Dzcwi0
AutoHotkey_L
Revision 46 - February 11, 2010
96名無しさん@お腹いっぱい。:2010/02/11(木) 23:02:09 ID:p+0Dzcwi0
>>94
なるほど
そういうことだったか

よくよく考えると
F4とF5の設定の直前まで読み込んでしまうってことに
気づいたことはなかった
F4とF5の設定がautohotkey内の処理では特別な処理をしていそう
97名無しさん@お腹いっぱい。:2010/02/11(木) 23:18:46 ID:yuQFWxtU0
javascriptなんて10年くらい触ってなかったがいまは無名関数とかあるのか。勉強するかな
98名無しさん@お腹いっぱい。:2010/02/12(金) 00:10:43 ID:LYoU2A2y0
GuiControl,-Redraw の挙動の質問です

i = 1
Gui, Add, DropDownList, vColor%i%, Black|White|Red|Green|Blue
i = 2
Gui, Add, DropDownList, vVar%i%, foo|bar

これの描写を一旦とめるにはどうすればいいんでしょうか

GuiControl,-Redraw, Color1
GuiControl,-Redraw, Var2

こう設定したんですがそれほど改善されたように思えません
99名無しさん@お腹いっぱい。:2010/02/12(金) 00:11:50 ID:H0IltXMx0
>>96
F3がsingle lineホットキーで
暗黙的にreturnがその後に挿入されるからっぽい
100名無しさん@お腹いっぱい。:2010/02/12(金) 00:31:23 ID:pF95Vend0
ドロップダウンリストは1行表示だから、見えている部分の再描画を抑えたからって
あまり効果が無いような気がする。

リストビューやエディットならアイテムが追加される毎に、内容を描画する矩形の大きさを再計算したり
スクロールバー再描画したり、場合によっては追加時のソート処理したりと、
結構効果があるだろうけどね。
101名無しさん@お腹いっぱい。:2010/02/13(土) 19:16:41 ID:gfFx2Odx0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 47 - February 13, 2010
* Fixed (Unicode): ControlGet,List with ListView controls.
102名無しさん@お腹いっぱい。:2010/02/13(土) 23:21:25 ID:vtEWp5/z0
流行らせるページの管理人のスクリプト「ActiveX」を重宝して使っていたが、
Vistaでは正常に動かないみたい。どなたか使えている人いますか?
−−−
障害が発生しているアプリケーション AutoHotkey.exe、
バージョン 1.0.48.5、タイム スタンプ 0x4abd12a2、
障害が発生しているモジュール ntdll.dll、
バージョン 6.0.6002.18005、タイム スタンプ 0x49e03821、
例外コード 0xc0000374、障害オフセット 0x000afaf8、
プロセス ID 0x2bbc、アプリケーションの開始時刻 0x01caacb03569fb00。
103名無しさん@お腹いっぱい。:2010/02/14(日) 00:12:23 ID:GMmXod950
そこのは最近全然メンテされていないし、古いVER用な感じ。(VarSetCapacityとかNumPut/Get使ってない)
もしUnicode版つかってるなら、まず使えないと思った方がいい。

COM使いたいなら、>>10 の COM Standard Library 使うといいよ。
104名無しさん@お腹いっぱい。:2010/02/14(日) 23:21:21 ID:wwQhDpjA0
よろしくお願いします。
アメリカのYAHOO GROUP で入手したのですが、最後の「名前を付けて保存」で
OKをクリックしてくれません。日本語環境の故でしょうか?

MouseClick,,100,245,2 ;Doppelklick auf das Frequenzfeld bringt den Frequenzdialog
sleep,2000 ;wait until it is ready
WinActivate,Frequency ;get it acitve if it is positioned outside
WinMove,Frequency,,10,200 ,Set the window to the upper left corner to avoid hidden buttons
; MouseClick,,20,40 ;Click into the input window
, sleep,1000
send,%Freq% ;Set the center frequency
sleep,1000
MouseClick,,60,180 ;click kHz
sleep,500 ;and wait for frequency adjustment
MouseClick,,100,180 ;click close
sleep,500
MouseClick,,110,595 ;Recording Button dr・ken
sleep,1000 ;warten bis Dateidialog soweit
MouseClick,,100,215 ;Eingabefeld klicken
sleep,1000
send %Filename% ;Dateiverzeichnis eintragen
MouseClick,,360,210 ;Klick auf Speichern (dann steht er in dem Verzeichnis)
;Perseus should run now
105名無しさん@お腹いっぱい。:2010/02/14(日) 23:33:44 ID:Jp0KDRZJ0
環境や出典元URLはおろか何するためのスクリプトなのかの説明もなしで一体どうしろと
106名無しさん@お腹いっぱい。:2010/02/14(日) 23:52:57 ID:GMmXod950
Lexikos はハッシュに対する for(each) 実装する意向があるみたいだな

>>104
ボタンを自動で押したりするマクロはインスコフォルダにあるAutoScriptWriter使えば自分で作れるよ
107名無しさん@お腹いっぱい。:2010/02/15(月) 00:27:51 ID:ulTVqZrv0
>Lexikos
もう根本的に仕様を見直したほうがいいだろ
108名無しさん@お腹いっぱい。:2010/02/15(月) 00:54:14 ID:7gQIH3QoP
rubyとかpythonみたいなゆとり文法で書きたい…
109名無しさん@お腹いっぱい。:2010/02/15(月) 09:57:44 ID:iBhVVLh70
ひまわりと統合
110104:2010/02/15(月) 10:51:03 ID:X56S6fVe0
申し訳ありません。
下から2番目の

MouseClick,,360,210

がうまくいきません。
子ウィンドウ「名前をつけて保存」の中の、「保存」をクリック
してくれません。クリックする座標値(360,210)を調整すれば
いいのでしょうか?
111名無しさん@お腹いっぱい。:2010/02/15(月) 10:57:13 ID:tYuiJv0t0
保存(&S)のボタンを押せばいいだけなら
Send, !s に変える
112名無しさん@お腹いっぱい。:2010/02/15(月) 12:43:49 ID:qTLXRTDH0
だから何のソフトの子ウィンドウなんだよ。
座標値調整してほしいならSS張るなりなんなりしないと分からんだろ
113名無しさん@お腹いっぱい。:2010/02/15(月) 20:24:28 ID:xfeXLast0
いや、座標ぐらい自分で調べないと
口調は丁寧でも皆の言うこと無視してるし、傲慢だよ
114104:2010/02/15(月) 22:58:42 ID:X56S6fVe0
>>111
うまくいきました。
ありがとうございました。

AUTOHOTKEYの存在自体を昨日初めて
知りました。

皆さんありがとうございました。
115名無しさん@お腹いっぱい。:2010/02/16(火) 08:27:04 ID:246hxMkFP
妙だ
116名無しさん@お腹いっぱい。:2010/02/17(水) 07:16:16 ID:E1rnessw0
質問をさせて頂きたいのですが、CTRL+8 に SHIFT+F10+I(コンテキストメニューからI)
を登録したいのですが、^8::Send, + 以降はどの様に記入すれば宜しいのでしょうか
御回答どうか宜しく御願いします。
117名無しさん@お腹いっぱい。:2010/02/17(水) 08:10:42 ID:LIlsNIKJP
<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

説明書は>>1 だ。読む気がないなら失せたほうがいい。
118名無しさん@お腹いっぱい。:2010/02/17(水) 10:54:04 ID:SB/Op0t+0
次からテンプレのトップにこれを張るべきだな
119名無しさん@お腹いっぱい。:2010/02/17(水) 11:32:11 ID:Vy1TF9k00
まぁ流行らせるページが前倒しエイプリル祭りな今の状況ではご新規さんが戸惑うのも無理ない。

>>116
キーリスト
http://lukewarm.s101.xrea.com/KeyList.html
リマップ
http://lukewarm.s101.xrea.com/remap.html
120名無しさん@お腹いっぱい。:2010/02/17(水) 13:25:36 ID:wixvpnix0
基本的なことですみません。
変数の型digitを演算に使用できるようにするにはどうすればよいでしょうか
具体的には、組み込み変数A_CaretXをキャレット位置から相対的な位置にGUIを表示する際に
調整的に足したり引いたりしたいと思っています。
型変換すれば簡単だと思っていたのですが、どうもそのような関数がないような・・
121120:2010/02/17(水) 14:13:30 ID:wixvpnix0
すいません。解決しました。
ずっと% %A_CaretX%+50というような記述をしていたことが誤りでした。
% A_CaretX+50 これで普通に50がプラスされました。すいませんでした
122名無しさん@お腹いっぱい。:2010/02/17(水) 16:04:26 ID:JvOilw2T0
スクリプトで
Run, xx
を実行すると、アンチウィルスソフトに記録される。
阻止しました と記録されてる時もある。
というのを今日発見した。それだけ。
123名無しさん@お腹いっぱい。:2010/02/17(水) 19:46:43 ID:sPswFt2k0
なんか流行るページが終了のお知らせになってたが
NILScriptってどうなの、またスクリプト書き直しなのか
124名無しさん@お腹いっぱい。:2010/02/17(水) 20:10:14 ID:HZ7rERz20
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1193827174/9
流行らせるページの中の人の興味が無くなって更新が止まってるだけで
AHK自体の開発が止まった訳じゃない
125名無しさん@お腹いっぱい。:2010/02/17(水) 20:52:10 ID:xCYB7r6U0
どうせ今年は「4/1 閉鎖は中止です」→「4/2 中止というのは嘘です」というネタなんだろ
126名無しさん@お腹いっぱい。:2010/02/17(水) 21:02:10 ID:nQhFaGUA0
タスクメイドというソフトを入れてみたら、
タスクトレイアイコンのリストを表示 (by流行らせるページ管理人
のアイコンが表示されなくなってしまいました

どういじったらアイコンでるのかな、、、
127名無しさん@お腹いっぱい。:2010/02/18(木) 04:43:59 ID:SoTSHqda0
>>126
<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

説明書は>>1 だ。読む気がないなら失せたほうがいい。
128名無しさん@お腹いっぱい。:2010/02/18(木) 04:51:58 ID:cD+orEuw0
>>127
さすがにそれは違うだろ。

そのコピペはバカには使いこなせないから、
以降キミはそのコピペを張らないように。
129名無しさん@お腹いっぱい。:2010/02/18(木) 04:53:38 ID:77KJ3kjG0
>>126
アイコン消したんちゃう
130名無しさん@お腹いっぱい。:2010/02/18(木) 06:57:33 ID:H7ljjeoa0
9.逆切れする …自分の思うようにならないと逆切れする。

127のレス通りの馬鹿さ加減だな(笑)
煽り耐性0のようだからこれからもファビョり続けるんだろうなきっと
131名無しさん@お腹いっぱい。:2010/02/18(木) 11:31:31 ID:z46fe8Zr0
>>125の予想、実現すると鬼畜過ぎわろえない
132名無しさん@お腹いっぱい。:2010/02/18(木) 11:56:35 ID:rWQM8utf0
わからないn大理由 のコピペってちょっと説明ベタでエスパーが必要なだけの質問に
やたらベタベタ貼られることが多いよね。本気で始末に負えない丸投げ教えて君でもない限り、
初心者お断りな閉鎖的な流れはあまり作らないで欲しいんだが

>>126
タスクメイドのことはよく知らんけどウィンドウ化したことで
ahk_class が Shell_TrayWnd じゃなくなってたりとか?
アイコン以外の情報は取得できてるんなら 41行目をコメントして

hicon := GetWindowIcon(hwnd)

に差し替え、ファイル末尾に↓を追加でうまくいくかも (全角空白は半角2個に置換してね)
133132 つづき1:2010/02/18(木) 11:58:16 ID:rWQM8utf0
;--- ハンドルで指定されたウィンドウのアイコンハンドルを取得 ---
GetWindowIcon(hwnd){
  ;-- API GetClassLong() で取得 --
  GCL_HICON:=-14,GCL_HICONSM:=-34
  ihwnd := DllCall("GetClassLong",UInt,hwnd,Int,GCL_HICON, UInt)
  IfNotEqual,ihwnd,0,  return ihwnd

  ;-- 無理だったら WM_GETICONを試してみる --
  WM_GETICON:=0x7F,ICON_SMALL:=0,ICON_BIG:=1,ICON_SMALL2:=2
  Loop, Parse, ICON_BIG, |
  {
    SendMessage,%WM_GETICON%,%A_LoopField%,0,,ahk_id %hwnd%
    IfNotEqual,ErrorLevel,0,  return ErrorLevel
  }

134132 つづき2 (終):2010/02/18(木) 11:59:04 ID:rWQM8utf0
  ;-- 無理だったら SHGetFileInfoを試してみる。 --
  PROCESS_ALL_ACCESS:=0x001F0FFF
  ;実行ファイルパスを得る
  hModule:=0,dwNeed:=0,len:=0
  WinGet,pid,pid,ahk_id %hwnd%
  hPrc:=DllCall("OpenProcess", Int,PROCESS_ALL_ACCESS, Int,0,Int,pid, Int)
  if (DllCall("psapi.dll\EnumProcessModules", UInt,hPrc, UIntP,hModule
        , UInt,4, UIntP,dwNeed, Int)){
    max:=VarSetCapacity(filename,256)
    len := DllCall("psapi.dll\GetModuleFileNameExA", Int,hPrc,Int,hModule
         , Str,filename, Int,max, Int)
    filename := substr(filename,1,len)
  }
  DllCall("psapi.dll\CloseProcess",Int,hPrc)
  ; SHGetFileInfo()
  SHGFI_ICON:=0x100,SHGFI_LARGEICON:=0,SHGFI_SMALLICON:=1,SHGFI_OPENICON:=2
  sfi_size = 352 ; Structure size of SHFILEINFO.
  VarSetCapacity(sfi, sfi_size) ;Structure size of SHFILEINFO.
  uFlags := SHGFI_ICON | SHGFI_LARGEICON
  DllCall("Shell32\SHGetFileInfoA", Str,filename, Uint,0, Str,sfi
                  , Uint,sfi_size, Uint, uFlags)
  Loop,4
    ihwnd += *(&sfi + A_Index-1) << 8*(A_Index-1)
  return ihwnd
}
135名無しさん@お腹いっぱい。:2010/02/18(木) 12:27:58 ID:rWQM8utf0
タスク冥土入れてみたが、アイコンだけじゃなく取得内容自体もおかしくなってるね
単純に ahk_classの問題だけみたいなんで
16行目以外の Shell_TrayWnd を TTaskMWndに置換するだけで上手くいくようだ。
132-134は無視してくれ。スレ汚しすまない
136名無しさん@お腹いっぱい。:2010/02/18(木) 13:36:16 ID:FyyfJdOv0
努力した形跡がないから問題なんだろ
これこれこういう方法などで試したけど解決しなかった、とか
その程度すら書いてない
137名無しさん@お腹いっぱい。:2010/02/18(木) 14:25:22 ID:scOfaRfE0
教えてください。BUTTON3を押してもそれに割り当てている機能が
まったく動作しません。どう直せばBUTTON3にアプリの起動とかを
割り当てられますか?

#1::
Menu, FileMenu, Add, something1
Menu, FileMenu, Add, something2
Menu, MyMenuBar, Add, &File, :FileMenu
Gui, Menu, MyMenuBar
Gui, Add, Tab2, x2 y0 w260 h300 , Tab1|Tab2
Gui, Add, Button, x62 y120 w100 h30 , Button3
Gui, Tab, Tab2
Gui, Add, Button, x62 y120 w100 h30 , Button4
Gui, Show, w479 h379, New GUI Window
Return

GuiClose:
ExitApp

something2:
msgbox, something2
return

Button3:
msgbox, Button3
return
138名無しさん@お腹いっぱい。:2010/02/18(木) 14:35:37 ID:cD+orEuw0
ためしてないけど

Gui, Add, Button, x62 y120 w100 h30 , Button3

Gui, Add, Button, x62 y120 w100 h30 GButton3 , Button3

じゃないの。Gコマンドが埋まってない
139名無しさん@お腹いっぱい。:2010/02/18(木) 14:39:00 ID:9+N6xTPq0
細かい事言うとGラベルね。
ttp://www.autohotkey.com/docs/commands/Gui.htm#label
140名無しさん@お腹いっぱい。:2010/02/18(木) 14:39:15 ID:scOfaRfE0
>>138
ありがとうございました。動くようになりました。
はやくおしえてくれてサンクス。
141名無しさん@お腹いっぱい。:2010/02/18(木) 14:41:11 ID:scOfaRfE0
>>139
え・・・えいご
142名無しさん@お腹いっぱい。:2010/02/20(土) 08:35:00 ID:zNbnGs1C0
ドイツ語とかがよかったか?
143名無しさん@お腹いっぱい。:2010/02/20(土) 12:22:33 ID:mEvktR560
バウムクーヘン!(キリッ
144名無しさん@お腹いっぱい。:2010/02/20(土) 17:27:10 ID:BnL2jfTo0
ゾーリンゲン
145名無しさん@お腹いっぱい。:2010/02/20(土) 17:43:39 ID:fPiLOFxfP
思考言語切り替え、日本語をBASICに
146名無しさん@お腹いっぱい。:2010/02/21(日) 08:17:46 ID:AEgXopOx0
>>53
トンクス!
AHKL使うの初めてで躊躇ったけど、面倒な目には合わず、今のところ不具合なく動いてます。

ちなみに、★2の部分はこんな感じで使っています。
#If (!IsCaretShown) && WinActive("ahk_class MSPaintApp") ;MSペイント(Win7)のCaret表示無しの時
e::Send,!Her ;消しゴム
i::Send,!Ht ;テキスト入力
x::Send,!Hsh{Home}{Right 3}{Enter} ;ボックス
c::Send,!Hsh{Home}{Right 2}{Enter} ;サークル
p::Send,!Hsh{Home}{Right 5}{Enter} ;多角形
z::Send,!Vm!H{Enter} ;ズーム100%
-::Send,!Vo!H{Enter} ;縮小
+`;::Send,!Vi!H{Enter} ;拡大
+3::Send,!Vg!H{Enter} ;グリッド線のトグル
v::Send,!HseR ;選択(長方形領域)
#If
147名無しさん@お腹いっぱい。:2010/02/21(日) 09:35:09 ID:2499SXeh0
お仲間にこっそりと忍び込もうとしている者です

今から使おうと思ったらAutoHotkeyとAutoHotkey_Lどちらがいいのでしょうか?

またAutoHotkey_LをDownloadしたのですがファイルがAutoHotkeyに比べて少ないです
AutoHotkeyを解凍したフォルダにAutoHotkey_Lのファイルを上書きしたほうが使いやすいのでしょうか?
148名無しさん@お腹いっぱい。:2010/02/21(日) 09:56:45 ID:fqI9l0LM0
L主体で使うんなら、それでいいと思うよ
本家のインストーラでインスコしてから上書きした方が、
右クリメニューとか .ahk にドラッグ&ドロップできるとか色々便利
149名無しさん@お腹いっぱい。:2010/02/21(日) 13:25:45 ID:P6h0dqJE0
>>123-125
http://lukewarm.s151.xrea.com/test/read.cgi/b/1264431038/12-

http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1193827174/9
例えば本家みたいなフォーラムの起ち上げとか
隠し玉でもあるのかなーとか思ってたりしたんだけど >>125のセンだったのかな…
150名無しさん@お腹いっぱい。:2010/02/21(日) 16:13:35 ID:GuyM2Y3Y0
なんだ。エイプリルフールネタか。急いでマニュアルDLしちまった。
でも、NILScriptって本当に開発しているんだよね?
俺、64bitだから検証できないのだけど
誰か使ってみた?
本気で開発する積もりなのかな。
151名無しさん@お腹いっぱい。:2010/02/21(日) 16:31:42 ID:3BMLrx6j0
閉鎖は本気でしょ。
日本語のドキュメントが必要な人だけ落としておけばいい。
それだけの話。
NILScriptはホットキーが(まだ)使えないらしいから
PやRが付く言語並にスレ違いだろ。
152名無しさん@お腹いっぱい。:2010/02/21(日) 19:33:23 ID:91a8+1jb0
あわてて wget で全部落とした。
貴重な日本語ガイドだから、無くなると困る。

管理人さん、今までありがとうございました。
153名無しさん@お腹いっぱい。:2010/02/22(月) 06:33:41 ID:9f4s0VDH0
一応流行らせるページ2/11あたりの置いときますね
ttp://dl.dropbox.com/u/1751156/public/ahkman.zip
必要でなくなればいいけど。
154名無しさん@お腹いっぱい。:2010/02/22(月) 07:40:21 ID:Ows7DnN00
string := "a`tb`tc"
loop, parse, string, A_Tab
msgbox % A_LoopField

タブ文字で上手くパースできないんですけど、
自分は何を勘違いしているのでしょうか。
教えて下さい。
155名無しさん@お腹いっぱい。:2010/02/22(月) 07:48:45 ID:Ay167nEj0
loop, parse, string, `t
まはた
loop, parse, string, %A_Tab%
156名無しさん@お腹いっぱい。:2010/02/22(月) 07:49:41 ID:Ows7DnN00
"loop, parse, string, %A_Tab%" でした。
157名無しさん@お腹いっぱい。:2010/02/22(月) 07:51:24 ID:Ows7DnN00
>>155
ありがとうございます。ちょっと不思議なのは、`t と %A_Tab% で結果が違うことです。
なんででしょうね???
158名無しさん@お腹いっぱい。:2010/02/22(月) 07:59:46 ID:dsY3Rcop0
AutoTrimだろ
159名無しさん@お腹いっぱい。:2010/02/22(月) 15:22:45 ID:pbdn0hXZ0
・常に使うスクリプト
・あるアプリケーションのみで使うスクリプト
があると思うのですがどのように使い分けていますか?
長いスクリプトで起動してますか?(#Include含む)
別々に起動してますか?

別々のほうがパソコンに優しい気がします
でもExplorerから直接起動したときスクリプトの起動・停止を忘れちゃいます
160名無しさん@お腹いっぱい。:2010/02/22(月) 20:27:21 ID:4U5S4elm0
>>159
用途次第としか言えないなぁ
フック使う常駐系は多重にフックだと遅くなるから一本化したほうがいいけど、
体感できるほど遅いってこともないんで(そうならスクリプトが悪い)、
メンテし易い方でいいんじゃないのかね

----

AutoHotkey_L更新

http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
Revision 48 - February 21, 2010
* Fixed: Standalone obj.() was not recognized as a valid expression.
* ControlSend now uses WM_CHAR to support characters which have no associated keycode.
 For instance, this applies to "…" in an ANSI build (en-US), "∞" in a Unicode build and {U+221e} in either build.
* KeyHistory now shows the full 16-bit character code for VK_PACKET (VK=E7) events.
 Send may indirectly cause these to be generated for Unicode characters.

これちょっと様子見したほうがいいかも
非常駐系でSendすると、常駐してる方が落ちることがある
161名無しさん@お腹いっぱい。:2010/02/23(火) 15:27:44 ID:tzWUW4CT0
MouseGesture.ahkのような設定のできるKeyGesture?.ahkみたいなのありませんか?
地デジチューナーMonsterTV HDUCのリモコンのボタンを押すとCtrl+F13~24、Ctrl+Shift+F13~24というキーを送ってくるのですが
これをAHKで拾ってアプリ(ウィンドウクラス)ごとに別のキーに置き換えて再送信して操作できれば・・
例えば電源ボタン(Shift+F14)が押されたら開いてるウィンドウを閉じる、デスクトップではWindows終了とかです
162名無しさん@お腹いっぱい。:2010/02/23(火) 15:48:29 ID:HsJ9PSFg0
分からんがようするに自分でメモ帳使って^F13::Send !{F4}とか書けないって事?
まあ確かにキー置換だけが目的の人も多いだろうし一個くらいGUIで設定できるようなスクリプトがあってもいいかも
いやあるかも知らんが調べた事がない
163名無しさん@お腹いっぱい。:2010/02/23(火) 16:00:12 ID:tzWUW4CT0
>>162
ああー!なるほど!
そういえばAutoHotKeyってそっちがメインでしたね
MouseGesture.ahkとか便利なもの使ってると忘れてしまう

ただクラス毎の設定追加が大変そう・・
164名無しさん@お腹いっぱい。:2010/02/23(火) 20:07:47 ID:KMdip0ajP
AutoHotKeyを流行らせるページのホイールリダイレクト
ttp://lukewarm.s101.xrea.com/myscripts/WheelRedirect.zip
を入れたところLogicoolマウスのフリースピンモードで高速スクロールさせると
>>4のXX hotkeys have been received in the last XXXXmsってのが出るようになってしまいました
*WheelDown::の前に$をつけても効果がないのですが仕方がないことなのでしょうか
165名無しさん@お腹いっぱい。:2010/02/23(火) 20:54:38 ID:QZdeA1Bw0
指定した任意のプロセスのカレントディレクトリを取得する方法ある?
マルチ環境での使用ソフトに対してそのソフトが起動したディレクトリ基準で操作したい
166165:2010/02/23(火) 21:33:45 ID:KMdip0ajP
~*WheelDown::
  CoordMode,Mouse,Screen
  MouseGetPos,,,hwnd,,
  IfWinExist,ahk_id %hwnd%
    WinActivate, ahk_id %hwnd%
  return

~*WheelUp::
  CoordMode,Mouse,Screen
  MouseGetPos,,,hwnd,,
  IfWinExist,ahk_id %hwnd%
    WinActivate, ahk_id %hwnd%
  return

なんかこれで「ホイールメッセージが来たらウィンドウをアクティブ化」という思い通りの動作してくれました
本当はIfWinNotActiveしてからWinActiveしたかったけどこれ入れるとフリースピン時に>>4のエラーが出る・・
167名無しさん@お腹いっぱい。:2010/02/23(火) 22:00:55 ID:oJgGY9270
>>165
http://d.hatena.ne.jp/eamat/20050826/1125091578
の getProcessExeNameNT(pid) でフルパス取れるんで \ホニャララ.exe を削っていけばいい
168名無しさん@お腹いっぱい。:2010/02/23(火) 22:08:45 ID:oJgGY9270
失礼、exeのフォルダじゃなくて カレントディレクトリ(作業フォルダ)か
GetCommandLineでコマンドライン文字列を取得するのがいいかも

MouseGesture.ahk のなかの関数群にサンプルあったはず
http://lukewarm.s101.xrea.com/myscripts/mousegesture/index.html
169名無しさん@お腹いっぱい。:2010/02/23(火) 22:39:37 ID:QZdeA1Bw0
>>168
ありがとう
データが空になって取得に失敗しちゃうなあ
170名無しさん@お腹いっぱい。:2010/02/24(水) 16:14:42 ID:WoE9fOBP0
inputboxのok,cancelボタンを表示しないで
シンプルに一行の入力欄だけのボックスにしたいんだけど
そういう方法ってない?
171名無しさん@お腹いっぱい。:2010/02/24(水) 17:11:31 ID:3Am/B6ti0
GUIでつくりゃいいんじゃないの。
Gui, ShowしてからWinWaitCloseで待てばモーダルっぽくできるし
172名無しさん@お腹いっぱい。:2010/02/24(水) 19:20:13 ID:kB+NSd9Y0
>>164
#HotkeyInterval 10000
#MaxHotkeysPerInterval 500

くらいにしとけば抑制できるんちゃうかな
それでも頻繁に発生するなら#MaxHotkeysPerIntervalを更に増やしてみるとか

ちなみにLogiのSetPoitは>>9みたいなことが発生するので
できればSetPointをアンインストールしてマウスの全設定をAHKに任せたほうが楽。
それが無理なら試行錯誤するしかないねぇ。
173名無しさん@お腹いっぱい。:2010/02/24(水) 21:15:52 ID:3PH5E2KF0
任意のウインドウを間違って閉じてしまわないように、
閉じないようにするホットキーって割り当てられますか?
且つ、常に全面に来ないようにしたいのですが・・・おしえてください。

まちがって閉じてしまうと復帰にかなり手間がかかるウインドウがある場合があるのです。
このソフトで、任意のウインドウを常に全面にするホットキーの割り当てがあるので
私の望むのもあるかと思い、お伺いしました。
174名無しさん@お腹いっぱい。:2010/02/24(水) 21:42:50 ID:h69ucvUKP
ソフト名を書かない理由は?
それじゃアドバイスできる範囲も限定される。

押してはいけない部分の画像を認識させて、押さないようにするとか。
175名無しさん@お腹いっぱい。:2010/02/24(水) 23:17:20 ID:D0Xqe0rA0
操作するウィンドウをクラス名を指定して除外する、ということをしたいのですが
AHKには文字列比較のできるSwitch文のようなものはありませんか?

If InStr(Hoge,"MozillaWindowClass")
  return 0
If InStr(Hoge,"THogeTextView")
  return 1
〜〜〜〜

を↓のようにできればいいのですが・・

Switch(Hoge)
{
  MozillaWindowClass:
    return 0
  THogeTextView:
    return 1
 〜〜〜〜
}
176名無しさん@お腹いっぱい。:2010/02/24(水) 23:28:45 ID:3Am/B6ti0
一般的な方法論だと

「常に最前面」を解除したいなら、まずはアプリ側の設定を見直す。
それが出来ないなら、WinSet, AlwaysOnTop で何とかする。

閉じさせないには、
1) 閉じるボタン([×])を押させない。
2) 閉じるショートカットキーを無効にする(Alt+F4など)
それでもメニューから選べばどうにでもなってしまうんで完璧には無理かと。

エクスプローラを簡単に閉じさせないようにするのは以下の様な感じ(AutoHotkey_L要)

TaregtClass = CabinetWClass
GroupAdd, NeverClose, ahk_class %TaregtClass%

#IfWinActive, ahk_group NeverClose
!F4::Return
^w::Return

#If MouseIsOverCloseButton(TaregtClass)
LButton::Return

MouseIsOverCloseButton(class="") {
 CoordMode, Mouse, Screen
 MouseGetPos, x, y, hwnd
 WinGetClass, _class, ahk_id %hwnd%
 If (class = _class) {
  SendMessage, 0x84, 0, x|y<<16,, ahk_id %hwnd%
  Return (ErrorLevel == 20) ; 閉じるボタン
 }
}
177名無しさん@お腹いっぱい。:2010/02/24(水) 23:34:57 ID:3Am/B6ti0
>>175
Ifの羅列とSwich〜Caseは意味としては等価だし、面倒だけど仕方ないと諦める。
あとは、必ず何か返すってのなら三項演算子を使うか

Return InStr(Hoge,"MozillaWindowClass") ? 0
    : InStr(Hoge,"THogeTextView") ? 1
    : (デフォルト値)
178名無しさん@お腹いっぱい。:2010/02/24(水) 23:54:17 ID:D0Xqe0rA0
>>177
うーんそうですか・・
If Elseだと例外クラス名を追加するのが面倒そうなので縦にずらりと並べたくて
ありがとうございます、Switchは諦めてその方法でやってみます
179名無しさん@お腹いっぱい。:2010/02/25(木) 00:01:37 ID:RDG3hmMd0
具体的にどんな目的で処理してるか分からないけど、ウィンドウグループ使うといいかも
180名無しさん@お腹いっぱい。:2010/02/25(木) 00:30:11 ID:OOsa3D8v0
>>174
スチームというゲームユーティリティのチャットルームのチャットウインドウです。
通常のウインドウ同様
右上の×を押してしまうか、あるいはALT F4で
いつもまちがって閉じてしまうので。
スチームのみならず、ほかにも一般適用できればと。
IE8のウインドウとか
181名無しさん@お腹いっぱい。:2010/02/25(木) 08:56:08 ID:nSCcbnPV0
関数内でのGUIの変数を動的に指定すると、エラーになってしまう件で質問です。

func()
 {
 loop,10
  {
  Gui,Add, Text,vABC%A_Index%,ABC
  }
 }

これで実行すると、「変数ABC1がグローバル変数じゃないのでダメです」とエラーが出ます。

global ABC1,ABC2,ABC3,ABC4,ABC5,ABC6,ABC7,ABC8,ABC9,ABC10

と個別指定をしたら動きましたが、今回のサンプルは10個ですが、100個とかになると大変です。

はやらせるページの解説では

http://lukewarm.s101.xrea.com/
> 関数内で「Array%i%」のような動的変数を使用した場合、ローカル変数として扱われる。
> ただし、その名前のローカル変数が存在せず、グローバル変数なら存在する場合、
> そのグローバル変数が使われる。
> ローカルにもグローバルにも存在せず、変数を新たに作成しなければならない場合、
> デフォルトの有効範囲で作成される。

とのことですが、今回の事例ではローカルとして扱われてしまってNGということでしょうか。
文字+数字の変数を、まとめてStaticまたはグローバル変数扱いにしたいのですが、先頭に
 global ABC
と記載したら全部グローバルになるかと思いきや、やはりエラーになります。

関数内のGUIで、変数の数字を動的に与えたいのですが、なにかよい対策は無いでしょうか。
182名無しさん@お腹いっぱい。:2010/02/25(木) 09:11:09 ID:rmszZdt60
なーんでせつめいしょよまないかなー
183名無しさん@お腹いっぱい。:2010/02/25(木) 10:01:46 ID:RDG3hmMd0
1) 関数の最初でGlobal で全部広域変数にする
2) 変数割り当てをしない(vXXXXを外す)で、GuiControlGet で取得するようにしてみる。
  その際変数名ではなくて classNN でアクセスする
184名無しさん@お腹いっぱい。:2010/02/25(木) 10:06:46 ID:nwiD1FYC0
>>181
http://lukewarm.s101.xrea.com/Function.html
「デフォルトの有効範囲をグローバルにする」を熟読
185名無しさん@お腹いっぱい。:2010/02/25(木) 14:02:26 ID:nSCcbnPV0
レスありがとうございます。ということは、
Global、Static宣言で、特定の擬似配列だけをまとめて定義することはできない
ということでしょうか。

>>183
なるほど。2案の方法を以前試したことがあるのですが、
GUIのデザインを変更した際(上部に新たなテキストやボタンを追加した場合など)、
ClassNNの「Ststic1」や「Button1」などの数字部分が全部+1ずつズレてしまって
固定で指定してしまったコードの修正に苦労した覚えがあります。

このClassNNの文字(Static1など)を、GUIを置く際に自分で定義することは
可能でしょうか。固定定義ができれば、変数と同じ扱いができそうですが、
この定義を指定するオプションを見つけることができませんでした。

>>184 と >>183の1案
すみません、できれば関数全体をglobalにはしたくないのです。
この関数内でGUIをAddする前段階でローカル変数がたくさんあり、
それを全部local宣言するよりも、GUIで使う変数だけをGlobalにできないか?
と思った次第です。
186名無しさん@お腹いっぱい。:2010/02/25(木) 16:56:35 ID:oYDSFRPB0
>>185
グローバルスコープで
loop,10 {
 ABC%A_Index% := ""
}
したら動いたがだめ?
187名無しさん@お腹いっぱい。:2010/02/25(木) 17:43:55 ID:nSCcbnPV0
>>186
ありがとうございます!これはすごい!うまくいきました。
こちらで以下のコードを実行してみました。

a::
 loop,10
  ABC%A_Index% := ""
 func()
 return

func()
 {
 loop,10
  Gui,Add, Text,vABC%A_Index%,ABC

 msgbox,通過した
 }


↓事前にグローバル変数を一度も使っていないと、最初のとおり以下のエラーが出ました
 実行結果
  Error: A control's variable must be global or static. The current thread will exit.
  Specifically: vABC1

関数の外であらかじめ細工するということですね。勉強になりました。ありがとうございます。
188名無しさん@お腹いっぱい。:2010/02/25(木) 19:56:58 ID:OOsa3D8v0
>>174
きてくれー
189名無しさん@お腹いっぱい。:2010/02/25(木) 21:07:54 ID:9JJeKAth0
やりたい事はAHKで割と簡単に実現可能だから安心して試行錯誤してくれ
>>174,176にアドバイスもあるからがんばってね

不格好でいいならこんなのでも
#Persistent
SplashTextOn,20,0,  nurikabe
WinMove,  nurikabe,,50,100
190名無しさん@お腹いっぱい。:2010/02/25(木) 21:35:55 ID:XqLc4w7H0
CTRL+8 にコンテキストメニューからIの登録をしたいのですが
スクリプトはどのように記載すれば良いのでしょうか
^8::RButton これ以降がどうしても分かりませんお願いします。
191名無しさん@お腹いっぱい。:2010/02/25(木) 23:07:57 ID:tSnJ7ufb0
^8:: Send,{AppsKey}!I

Alt+I じゃなくていいなら !は不要
192名無しさん@お腹いっぱい。:2010/02/25(木) 23:12:29 ID:XqLc4w7H0
>>191
有難う御座います。本当に感謝します。早速やってみます
193名無しさん@お腹いっぱい。:2010/02/26(金) 01:38:44 ID:Hno6A7n50
原因がわからず困っています。ヒントだけでも良いのでお願いします。
【質問内容】最小化されているFirefoxをスクリプトでアクティブにした時、
   一部のキーが一時的に動作しなくなってしまう。これを回避するには?
【使用エンジン】Autohotkey_L
【使用OS】 Windows 7 Professional (32bit)
【Firefoxのバージョン】 3.6
【詳細】
既に開いているFirefoxをアクティブにするスクリプトを書きました。
#F::WinActivate,ahk_class MozillaUIWindowClass
Firefoxが最小化されている状態からこのスクリプトでアクティブにすると、
F11やCtrl+Pなどが一時的に効かなくなってしまいます。
タブをクリックするとキーが効くようになるのですが、原因がわかりません。
Firefox以外(IE, Explorer, cmd.exe, notepad.exe)では同様の症状は見られませんでした。
194名無しさん@お腹いっぱい。:2010/02/26(金) 01:42:34 ID:rlonQula0
要はタブにフォーカスが当たってないんじゃねーの?

Firefoxウインドウが最前面かつタブが最前面じゃないと
いろいろなコマンドが効かなくなった気がする。
195名無しさん@お腹いっぱい。:2010/02/26(金) 03:12:18 ID:OPFEcpMd0
ウインドウの中央(あるいは任意の座標)に2x2ぐらいのドットの箇所だけ
色を変えることって出来ますか?

トグルであるキーを押したら、そのウインドウの中央に赤点を表示させたいのです。

画面に文字を表示させるソフト(背景は透過する)で同様のことができそうなのですが
手間がかかるのとCPUに負荷がかかるのでAHKでできないかと思いまして。
リファレンスでコマンド一覧みてますが、さすがにコレは出来ないっぽいですね。
196名無しさん@お腹いっぱい。:2010/02/26(金) 03:20:12 ID:pN0O/Ebf0
Run コマンドで指定したファイルが見つからない時に
ファイルが見つかりません
って出てくるErrorお知らせウインドウを出てこない、あるいは
数秒で消えるようにしたいのですが可能でしょうか?
197名無しさん@お腹いっぱい。:2010/02/26(金) 04:03:04 ID:L5Oa6HBK0
>>195
2x2のGUIをつくって表示。

sizeW = 2
sizeH = 2
Gui, +LastFound -Caption -Border +ToolWindow +AlwaysOnTop
Gui, Color, Red
Gui, Show, Hide w%sizeW% h%sizeH%

Pause::
 WinGetPos, x, y, w, h, A
 xx := x + Round( ( w - sizeW ) / 2 )
 yy := y + Round( ( h - sizeH ) / 2 )
 Gui, Show, x%xx% y%yy% NA
 Gui, Show, NA
 KeyWait, Pause
 Gui, Hide
 Return

>>196
第三引数に UseErrorLevel
198名無しさん@お腹いっぱい。:2010/02/26(金) 04:42:37 ID:OPFEcpMd0
>>197
ありがとうございます。
すごい。そういうアイデアがあるんですか。いろいろ工夫されてて。なるほど。

しかし、自分初心者なのでそのままその文字列を放り込んでもなんも変化がない。
Pause:: をF3にしたりしてるが、動かない。
前半部のところをiniの先頭にもっていったりして
規則に合わせる必要があるのかな。

とにもかくにも深夜にありがとうございます。やってみます。
199名無しさん@お腹いっぱい。:2010/02/26(金) 05:18:14 ID:OPFEcpMd0
負けました。
200名無しさん@お腹いっぱい。:2010/02/26(金) 05:35:04 ID:OPFEcpMd0
フォーカスが移らずに常にずっとウインドウの中央に赤点を表示する状態を
トグルでオンオフしたいのですが、ちょっと無理ありましたね。
201名無しさん@お腹いっぱい。:2010/02/26(金) 05:40:16 ID:pN0O/Ebf0
>>197
ありがとうございます
ErrorLevelの方向でイケそうです
202名無しさん@お腹いっぱい。:2010/02/26(金) 05:42:33 ID:pN0O/Ebf0
>>197
出来ました
ありがとうございます
速すぎて驚きました
203名無しさん@お腹いっぱい。:2010/02/26(金) 10:47:57 ID:Hno6A7n50
>>194
的確なコメントありがとうございます。おっしゃる通りでした。
次のスクリプトで解決しました(ControlFocus行を追加しました)。
#F::
WinActivate, ahk_class MozillaUIWindowClass
ControlFocus, MozillaWindowClass2, ahk_class MozillaUIWindowClass
return
204名無しさん@お腹いっぱい。:2010/02/26(金) 15:02:39 ID:1tXS2mmz0
>>197
すごい
そんなのを含めて、ahk の本出して。
買います、1冊だけだけど。
205名無しさん@お腹いっぱい。:2010/02/27(土) 00:47:10 ID:NxTcBbwY0
;アクティブウィンドウの閉じるメニュー(閉じるボタン)を消す
MButton::
targetHWND:=WinExist("A")
hMenu:=DllCall("GetSystemMenu", UInt, targetHWND, Int, false)
DllCall("RemoveMenu", UInt, hMenu, UInt, 0x0000F060, UInt, 0x00000000)
DllCall("DrawMenuBar", UInt, targetHWND)
return

;アクティブウィンドウのメニューをデフォルトに戻す
+MButton::
targetHWND:=WinExist("A")
DllCall("GetSystemMenu", UInt, targetHWND, Int, true)
DllCall("DrawMenuBar", UInt, targetHWND)
return

;あくまでも消すだけで、無効化ではない。
206名無しさん@お腹いっぱい。:2010/02/27(土) 09:57:24 ID:LcG7RFta0
アクティブのウィンドウが変わったら処理をしたいです。

テレビを時間指定で録画しています。
録画終了時の動作指定が出来るのですが1つしか設定できません。(任意指定ではなくアプリケーション既定動作)
現状の設定では録画終了時、ウィンドウが開いて15秒以内にキャンセルボタンを押さないとシャットダウンします。

このウィンドウのキャンセルを自動化したいです。
このウインドウは最前面でアクティブになり、大きさも変わらず、ウィンドウタイトルも同じです。
条件に合えば(マウスカーソルがこのポジションにあったら等)キャンセルにしたいです。

タイマーを使う方法は考えたのですが、PCへの負荷を考え今までタイマーは敬遠してきました。
気にするほどではないのでしょうか?
またタイマー以外の方法はありますか?

長文失礼いたしました。
207名無しさん@お腹いっぱい。:2010/02/27(土) 10:13:37 ID:aSefs8jy0
キャンセルボタンを押すのが15秒以内ならタイマー7秒毎に設定しておけば
確実だろうから、それくらいなら殆ど負荷無いはずだよ
一辺テストでやってみるのオススメ
208名無しさん@お腹いっぱい。:2010/02/27(土) 10:17:49 ID:eAaiA2lC0
>>153
トンクス
209名無しさん@お腹いっぱい。:2010/02/27(土) 11:08:08 ID:JcR5DLg70
しかしAHKがこれだけ普及した今NILは成功するんだろうか
210名無しさん@お腹いっぱい。:2010/02/27(土) 11:14:48 ID:HLhm4RU+0
多分しないだろうな。
211名無しさん@お腹いっぱい。:2010/02/27(土) 11:41:27 ID:eNNt8xQn0
>>206
作り方にもよるが、IfWinActive / IfWinExist あたりで目的のウィンドウが
見つからない時はすぐ抜けるようにすればOK
ダイアログ出て即反応するくらいなら 300〜1000msくらいのタイマで充分だし
そのレベルなら殆ど負荷はない
212名無しさん@お腹いっぱい。:2010/02/27(土) 12:06:21 ID:DRJ4jrCF0
>>210
スレが質問で溢れかえることを成功と言うならな
213名無しさん@お腹いっぱい。:2010/02/27(土) 14:02:47 ID:nMd2pIxo0
趣味の範囲で終わるような処理系はどこもレスが少ないよ
仕事とか課題で期限があるところだと質問スレは賑わってるけど
214名無しさん@お腹いっぱい。:2010/02/27(土) 14:06:40 ID:eMSBNw5y0
テキストファイルに改行コードを入れたいのですがどのようにすればようのでしょうか?
やりたいことはcsvの作成です
カンマ区切りで,を入れることはできたのですが改行がわかりませんでした。
一応\nや\rをfileappendで指定してみたのですができませんでした。
215名無しさん@お腹いっぱい。:2010/02/27(土) 14:31:33 ID:z8hXrmFRP
NILでAHKスクリプトがそのまま動くならいいんだけどな
216名無しさん@お腹いっぱい。:2010/02/27(土) 14:33:17 ID:z8hXrmFRP
>>214
AHKは\じゃなくて`じゃない?
217名無しさん@お腹いっぱい。:2010/02/27(土) 14:43:52 ID:I/zAFDqn0
特定のキー"以外全部"にホットキー割り当てる方法ってありますか?
218名無しさん@お腹いっぱい。:2010/02/27(土) 15:52:15 ID:nMd2pIxo0
列挙すりゃいいんじゃね
ただキーロガーのようなきもするが
219名無しさん@お腹いっぱい。:2010/02/27(土) 16:36:40 ID:ZCtKt7300
Alt::return
LAlt::return
RAlt::return
F4::return

と書いても普通に ALT押しながらF4 でアプリが終了できるのはなんで?仕様?
220名無しさん@お腹いっぱい。:2010/02/27(土) 16:41:50 ID:eNNt8xQn0
!F4::return

ってやらないとダメなんでない? 試してないが
221名無しさん@お腹いっぱい。:2010/02/27(土) 19:53:16 ID:QM1jlcfa0
contorolclickで座標指定してボタンを押そうとしているのですが
あるアプリでどうにも押せないボタンがあります(押せるボタンもいくつかあります)
で考えたのですが、WINDOWSPYの座標って目に見えるGUIの座標と大きくズレることってあるでしょうか?
222名無しさん@お腹いっぱい。:2010/02/28(日) 00:57:12 ID:2YMa48KJ0
>>218
やっぱ列挙しかないですかね
223名無しさん@お腹いっぱい。:2010/02/28(日) 08:20:23 ID:hqQGmatFP
>>221
アプリって何?
クラス番号とかが違ってる可能性があるよ。ちゃんと指定しないと送れない。
controlgetでハンドル取得できる?

224名無しさん@お腹いっぱい。:2010/02/28(日) 09:50:42 ID:4lTS3DPz0
>>217
http://www.autohotkey.com/forum/topic31257.html
どういう割り当て方をするのかわからんけど、
単純なものなら上記リンク先のサンプルのようにHotkeyとLoopを使って纏めて出来る。
特定のキー(仮想キーコード)の場合はIf〜とかで分岐して割り当てしなければいい。
225名無しさん@お腹いっぱい。:2010/02/28(日) 12:06:53 ID:OE3e/8Md0
>>223
thx!アプリは音楽系のVSTなんですがやはり指定しないとダメなんですね
ControlGetについて調べたんですが今の自分にはハードル高かいようで
余りスマートじゃないですがMouseClickでカーソルごと動かすことにしますた
226名無しさん@お腹いっぱい。:2010/02/28(日) 12:14:40 ID:NxRBb/pb0
まぁ、一般論だけどボタンに割り振られている機能がウィンドウメニューからでも実行できるなら、
リソースハッカーとかでコマンド番号調べて PostMessage で WM_COMMAND 発行するのも手だ。
227名無しさん@お腹いっぱい。:2010/02/28(日) 12:53:23 ID:mmfflea90
2バイト文字の文字数カウントをしたくてAutohotkey_Lに変えてみたんですが、
Lの方だとMouseGesture.ahkの矢印ナビの偶数番目が文字化けします。
どうしたら直せるんでしょうか。
228名無しさん@お腹いっぱい。:2010/02/28(日) 13:08:02 ID:NxRBb/pb0
文字の取り扱いが異なるので、MouseGesture.ahkをユニコード用に書き直すしかないね。

ANSI版で文字数を数えたいなら↓を使えばいい
MBStr_Length(ByRef s) {
 Return DllCall("msvcrt.dll\_mbslen","Str", s, "UInt")
}
229名無しさん@お腹いっぱい。:2010/02/28(日) 17:34:40 ID:mmfflea90
>>228
そうなんですか。
ナビの表示以外は普通に使えるので、無視して使うことにします。
ありがとうございました。
230名無しさん@お腹いっぱい。:2010/02/28(日) 17:57:31 ID:0RVmbnZi0
URLEncode(str)
{
  →ttp://orera.g.hatena.ne.jp/misttrap/20070214/p1
}

F13::
  Clipboard_bk=%ClipboardAll%
  Clipboard=
  
  Send, ^c
  
  word:=URLEncode(Clipboard)
  
  Run, http://www.google.co.jp/search?q=%word%
  Clipboard=%Clipboard_bk%
  
  return

をAutoHotKey_Lで使ってるんだけどなんか全角文字が全部ERRORになっちゃう
本家なら普通に検索できるんだけれどもしかしてLでは使えない?
231名無しさん@お腹いっぱい。:2010/02/28(日) 17:59:39 ID:0RVmbnZi0
あ、AutoHotKey_LのUnicode版です
232名無しさん@お腹いっぱい。:2010/02/28(日) 18:35:41 ID:NxRBb/pb0
内部ではユニコード扱いなんで、TransForm使って適宜文字コードを変換してから関数に渡せばいい
ttp://sites.google.com/site/agkh6mze/translation/autohotkeyu#TOC-TransForm

それより、もURLエンコードとかするなら文字コードとは何なのかを知らないと困ると思う
233名無しさん@お腹いっぱい。:2010/02/28(日) 19:55:14 ID:0RVmbnZi0
>>232
ありがとうございます
TransForm検索でヒットした
ttp://www.autohotkey.com/forum/topic38893.html
のURI_EncodeComponent()で動きました
234名無しさん@お腹いっぱい。:2010/03/01(月) 01:33:15 ID:DRm4CgWm0
>>227ですが、その後も調べてみたら事故解決しました。
"GDI32.DLL\TextOutA"のAを削ればいいだけでした。
235名無しさん@お腹いっぱい。:2010/03/01(月) 11:19:34 ID:0rDFRvjp0
一応確認しておくけど、AHKを流行らせる〜の中の人がAHKの開発してたんじゃないよな?
この人はただAHKのマニュアルを日本語化してただけだよな?
AHKページの開発自体は続くよな?オープンソースになってたけど誰がどこで開発してるのかわからないので不安になった。
AHKってどこかにデベロッパー用のサイトあるの?
236名無しさん@お腹いっぱい。:2010/03/01(月) 11:24:24 ID:cSMAnxyhP
つ Google
237名無しさん@お腹いっぱい。:2010/03/01(月) 20:10:42 ID:bY/8jCJ10
TTBaseの機能をAHKに一本化したいのですが
どこかにmemo.dllのような付箋スクリプトとか転がってませんか?
ExMenuやClipboardClearのような簡単なものは自前でなんとかできたのですがこれは難しそうでどうにも・・
238名無しさん@お腹いっぱい。:2010/03/01(月) 21:53:39 ID:+zVThDHQ0
そいつの機能はは詳しくは知らんけど、ツールバーとかクリッカブルURLとかあるみたいだし、
AHK標準で使えるGUIコンポーネントだけじゃ実現できなさそう。
239名無しさん@お腹いっぱい。:2010/03/02(火) 22:24:10 ID:La4+gTeO0
>>237
付箋スクリプトじゃないけど
Forms Framework
ttp://www.autohotkey.com/forum/topic53317.html
とか?
GUI部品は一通り揃ってるみたいだし、
RichEdit_AutoUrlDetect とかもあるね。
試してないけど。
240名無しさん@お腹いっぱい。:2010/03/03(水) 12:54:33 ID:bi9tF9o/0
VistaやWin7のエクスプローラで、BackSpaceを押したときのフォルダ移動の挙動で困っています。

XP以前では、BackSpaceを押すと必ず上の階層に戻ったのですが、
Vista以降はIEなどと同じ「1つ前の画面に戻る」なので、上の階層へ進めない場面が多いです。

Vista以降で確実に上の階層へ行くには Alt+↑ を押さなければなりません。

単純にExplorer指定(ahk_class CabinetWClass) において BSをAlt+↑に変えると、
リネームなどをやってるときにBSキーを押すと誤動作してしまいました。

なにかよい手はないかと模索していますがヒントいただけると幸いです。
241名無しさん@お腹いっぱい。:2010/03/03(水) 13:51:07 ID:cOl/9u4c0
リネーム中はフォーカスのあるコントロールのクラスはEdit。
アドレスバー(たぶんEdit1)とは連番が違うのでEdit2とかEdit3とかのはず。
ControlGetFocusでclassNNとって条件分岐かな。
242名無しさん@お腹いっぱい。:2010/03/03(水) 14:11:21 ID:bi9tF9o/0
>>241
ありがとうございます。チャレンジしてみます。
243名無しさん@お腹いっぱい。:2010/03/03(水) 19:50:21 ID:+Mlj7yLt0
#Persistent

Hook:
  OnExit, Unhook
  hHookWndProc := DllCall("SetWindowsHookEx", "int", WH_CALLWNDPROC := 4, "UInt", RegisterCallback("WndProc"), "UInt", 0, "UInt", 0)
  
  If(!hHookWndProc)
  {
    MsgBox, フックに失敗しました
    ExitApp
  }

  return

Unhook:
  DllCall("UnhookWindowsHookEx", "Uint", hHookWindow)
  ExitApp

WndProc(nCode, wParam, lParam)
{
  ToolTip, nCode=%nCode% wParam=%wParam% lParam=%lParam%

  Global hHookWndProc
  return DllCall("CallNextHookEx", "UInt", hHookWndProc, "Int", nCode, "Uint", wParam, "UInt", lParam)
}
244243:2010/03/03(水) 19:54:13 ID:+Mlj7yLt0
あ、コードだけで書き込んじゃった

ウィンドウメッセージを横取りして最小化されたらタスクトレイに格納、というスクリプトを書きたいのですが
試しに>>243でWH_CALLWNDPROCでフックしてみたところなぜかフック失敗してしまいます
WH_CALLWNDPROCをキーボードメッセージをフックするWH_KEYBOARD_LL(13)に書き換えて動かしてみたところそちらは正常に動きました
何かコードに問題があるのでしょうか
245名無しさん@お腹いっぱい。:2010/03/03(水) 19:55:45 ID:P/Nga4rG0
DLL
246243:2010/03/03(水) 20:05:35 ID:+Mlj7yLt0
>>245
すみません、どういうことでしょうか?
DLLCallの記述はたぶん問題ないと思います
247名無しさん@お腹いっぱい。:2010/03/03(水) 20:10:20 ID:P/Nga4rG0
hMod
248名無しさん@お腹いっぱい。:2010/03/03(水) 20:14:54 ID:cOl/9u4c0
>>246
>>245の補足
基本的にグローバルフックはDLLを作る必要がある。

最小化をフックしたいだけならなら、SetWinEventHook で拾える。
ttp://msdn.microsoft.com/en-us/library/dd373640%28VS.85%29.aspx
ただ、非同期で、イベントを捨てることは出来ない。(同期したいならやはりDLLが必要)

#Persistent
myHook := DllCall("SetWinEventHook"
, "UInt", 0x00000016 ; EVENT_SYSTEM_MINIMIZEEND
, "UInt", 0x00000016 ; EVENT_SYSTEM_MINIMIZEEND
, "UInt", 0 ; hModule : self
, "UInt", RegisterCallback("WinMinimizeHandler") ; hWinEventProc :
, "UInt", 0 ; idProcess : All process
, "UInt", 0 ; idThread : All threads
, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
, "UInt")

WinMinimizeHandler(hWinEventHook, event, hwnd, idObject, idChild, thread, time) {
WinGetTitle, title, ahk_id %hwnd%
WinGetClass, class, ahk_id %hwnd%
Tooltip, 「%title% ahk_class %class%」が最小化
}
249243:2010/03/03(水) 20:25:12 ID:+Mlj7yLt0
>>248
おおー!動きました!
SetWinEventHookなんてAPIがあったんですね!
非同期とのことですがいろいろ試してみようと思います

>基本的にグローバルフックはDLLを作る必要がある。
DLLはちょっと手を出しづらいですね・・
それとスクリプトのためにプログラム書くのはなんだかちょっと

お二人とも本当にありがとうございました
250名無しさん@お腹いっぱい。:2010/03/03(水) 21:11:38 ID:4Dn+kT//P
無変換とcで大文字固定のトグルがしたくて
sc07b & c::Send {CapsLock}
ってやって1回押して大文字固定はできたけど、2回目を押しても戻りません
テンプレにロック系は問題ありって書いてありますが、なんとかならないでしょうか?
251名無しさん@お腹いっぱい。:2010/03/03(水) 21:28:34 ID:+oLK872i0
sc07b & c::
If GetkeyState("CapsLock", "T")
SetCapsLockState, off
Else
SetCapsLockState, on
KeyWait, c
Return
252250:2010/03/03(水) 21:43:07 ID:4Dn+kT//P
>>251
思い通りの動作になりました
即レスありがとうございました
253名無しさん@お腹いっぱい。:2010/03/04(木) 10:10:39 ID:JkBB+03i0
なぜかWindows7でAutoHotKey_Lでメニューにアイコン表示させるMI.ahk
ttp://www.autohotkey.com/forum/topic21991.html
が動かなかったから不思議だったんだけど

if A_OSVersion in WIN_VISTA,WIN_2003,WIN_XP,WIN_2000

if A_OSVersion in WIN_7,WIN_VISTA,WIN_2003,WIN_XP,WIN_2000

use_bitmap := (A_OSVersion="WIN_VISTA")

use_bitmap := (A_OSVersion="WIN_VISTA" || A_OSVersion="WIN_7")

にして
MI_ShowMenu()じゃなくて
Menu, メニュー名, Showで呼び出したら表示してくれた
254名無しさん@お腹いっぱい。:2010/03/04(木) 10:26:42 ID:Mhoke+mx0
デスクトップ右下時計表示のところのAutoHtKeyアイコンのダブルクリック動作を変更することは出来ますか?
255名無しさん@お腹いっぱい。:2010/03/04(木) 10:38:44 ID:aGNeeu2oP
joy1 & joy2::
ってできないんだねー・・・。しょぼん
256名無しさん@お腹いっぱい。:2010/03/04(木) 11:56:01 ID:zJknj9gO0
>>255
できなくはない

1Joy1::
ModMode = 1
Modkey = %A_ThisHotkey%
Joykey1 = 1Joy2
Joykey2 = 1Joy3
Joykey =
WinGetPos, , , Width, Height, ahk_class _MIDAGEONL_
While GetKeyState(Modkey) { ; Modkey を押しているなら
Sleep, 20
GetKeyState, Joykey1OutPut, %Joykey1%
GetKeyState, Joykey2OutPut, %Joykey2%
If(Joykey1OutPut="D") { ; Joy1 + Jo2
JoyTooltip(Modkey, " + " . Joykey1)
}Else if(Joykey2OutPut="D") { ; Joy1 + Jo3
JoyTooltip(Modkey, " + " . Joykey2)
}
}
ModMode = 0
If !Joykey ; Joy1 単独
Gosub, 1Joy2
Return

;続く
257256:2010/03/04(木) 11:57:05 ID:zJknj9gO0
;続き

1Joy2::
1Joy3::
If !ModMode
JoyTooltip("", A_ThisHotkey)
Return

JoyTooltip(Modkey, Joykey) {
Tooltip, %Modkey%%Joykey%
Sleep, 500
Tooltip
}
258名無しさん@お腹いっぱい。:2010/03/04(木) 12:04:16 ID:zJknj9gO0
>>254
MouseGesture.ahkのアイコンをダブルクリックすると設定ウィンドウが開くので出来るんちゃう
259名無しさん@お腹いっぱい。:2010/03/04(木) 12:04:18 ID:hVoeuRxW0
AutoHotkey_L つかおうぜ

>>254
>>8 の例2をパクればおk

>>255
~Joy1 & Joy2:: みたいな感じになるけど、出来なくもない

#If GetKeyState("Joy1")
Joy2::〜〜
260名無しさん@お腹いっぱい。:2010/03/04(木) 12:10:50 ID:hVoeuRxW0
あ、>>259 の前半は読み間違えてるのか

Menu, Tray, Default, メニュー項目名
でいいんじゃないの
261名無しさん@お腹いっぱい。:2010/03/04(木) 12:59:01 ID:aGNeeu2oP
>>256みたいにするのが発展性があるのかな。
無数のJoyの組み合わせを、無数のアクションに振り分ける場合、
タイマーorループでJoyの入力を常に監視する方法になるでしょうか。
すこし重くなるね><

>>259は簡単でいいですね!

ありがとうございます。
262名無しさん@お腹いっぱい。:2010/03/04(木) 13:04:41 ID:wt/8rZRP0
素直に専用ソフトを使ったほうがいい>じょいすてぃっく
263名無しさん@お腹いっぱい。:2010/03/04(木) 13:19:11 ID:zJknj9gO0
>>261
Joy1
Joy1+Joy2
Joy1+Joy2+Joy3
上記の組み合わせそれぞれに別の動作を割り当てたい場合はループやタイマー使った方がいいんじゃないかな。
んで、起点のキー(修飾キー)が押された場合のみループorタイマーを実行し、
20〜50ms間隔くらいにしておけばそこまで負荷は高くないかも。(※PC環境による)
こういう特殊な割り当てをしないなら>>262さんがレスしているように専用ソフトがいいかも。
264名無しさん@お腹いっぱい。:2010/03/04(木) 13:29:22 ID:aGNeeu2oP
>>263
どのキーでも起点にできるように命令を組んでみます。
発動するアクションを自由に書けるのがAHKの魅力だね。
>>262
コンビネーション入力できるソフト探してみます。Joytokeyは結局未実装だったんかな。
265名無しさん@お腹いっぱい。:2010/03/04(木) 14:33:38 ID:hVoeuRxW0
JoyToKeyだと「一時的に他のジョイスティック番号を使う」がコンビネーションキー相当だよ
266名無しさん@お腹いっぱい。:2010/03/04(木) 17:47:19 ID:y9q3SJlA0
ttp://d.hatena.ne.jp/eamat/20050826
ここのgetProcessExeNameNT(pid)でファイルパスを取得しているのですが
MPCHomecinema x64やWin7 64bitのエクスプローラ、Internet Explorer x64などの64bitアプリケーションに限って
EnumProcessModulesが失敗しているようです
なんとかして64bitアプリのファイルパスを取得する方法はないでしょうか?
267名無しさん@お腹いっぱい。:2010/03/05(金) 00:37:44 ID:n4YWJWMJ0
以前に某所の裏で 『いくつかの関数ライブラリを本家の方でStandard Libraryとして纏める動き』 について取り上げられてましたけど、どうやら纏まりつつあるようですね。

Ahk Standard Library Collection
ttp://www.autohotkey.com/forum/topic54996.html

このスクリプト - AhkStdLibCollection Explorer - のライセンスはGPLらしいです。
"LICENSE: Please note, the script itself is GNU GPL licensed.
The source code must be open, if you publish modified source of this script."

登録されているスクリプト(関数ライブラリ)はそれぞれ違ったライセンス形態みたいですね。
"The libraries have all its own licenses. "
268名無しさん@お腹いっぱい。:2010/03/05(金) 01:21:59 ID:eAOoAPpx0
>某所の裏
どこ?
269名無しさん@お腹いっぱい。:2010/03/05(金) 01:29:50 ID:uPBjbvvQ0
>>267
Databaso file
libdb.ini
does not exist.

ってメッセージが出る
ここでキャンセルを押すとまっさらな設定画面が現れるよ
どういうことだろう

270名無しさん@お腹いっぱい。:2010/03/05(金) 01:30:38 ID:uPBjbvvQ0
書き忘れた

確認したけど
libdb.ini は LibraryExplorer.ahk と同じディレクトリにある
271名無しさん@お腹いっぱい。:2010/03/05(金) 01:38:10 ID:wSWyBikL0
>>269
_Lだとだめだね。
lib/ini.ahk 971:If (fileSize != StrLen(_Content))
でfileSizeのが2バイト大きい。最後の改行かな?
272名無しさん@お腹いっぱい。:2010/03/05(金) 23:57:47 ID:bkRHcYZE0
MouseGesture2の質問です。

第4ボタン、第5ボタンに機能を割り付けているんですが
エクスプローラで第4ボタン、第5ボタンを使うと
割り付けた機能と同時にフォルダの"戻る"、"進む"が実行されてしまいます。
この、"戻る"、"進む"が実行されないようにしたいのですが、ご存じの方いますか?
ググるとマウ筋での解決法はありましたが、MouseGesture2では解決法を発見できませ
んでした。
273名無しさん@お腹いっぱい。:2010/03/06(土) 00:14:42 ID:KE0HwWc60
>>272
マウスドライバの方でF21とかに割り当てて、
MouseGesture2でF21扱いで設定作る。
274名無しさん@お腹いっぱい。:2010/03/06(土) 03:56:11 ID:P0BYEQvb0
#IfWinActive等でウィンドウ毎にキー定義できるけど、SendModeも同時に設定したいなぁ
275名無しさん@お腹いっぱい。:2010/03/06(土) 06:27:12 ID:hf3cv66H0
Alt::return
LAlt::return
RAlt::return
F4::return

と書いても普通に ALT押しながらF4 でアプリが終了できるのはなんで?仕様?
276名無しさん@お腹いっぱい。:2010/03/06(土) 06:41:07 ID:2+HKCRE50
一回目のレスで答えてもらっとるやん
そういう意味じゃないとしたら
AltやF4単独とAlt+F4(!F4)は別の物として認識されるから仕様と言える
277272:2010/03/06(土) 09:41:16 ID:VmTt9Q7Z0
>>273
ぬお!できた!
そんなやり方もあったかー。3日色々設定試して無理かと思ってたので助かりました。
ありがとう!。
278名無しさん@お腹いっぱい。:2010/03/07(日) 10:26:22 ID:+uBlQJhj0
さっきこのソフト知ったんだけど、無変換キーをALT+TABにしたい。
vk1Dsc07B::!TAB
これだと無変換を押しっ放しにするとリピートするので
リピートしないようにするにはどうすればいいの?

vk1Dsc07B::
Send,!{TAB}
KeyWait,vk1Dsc07B
return
これでいけたけど、一行ですっきりとしたい
279名無しさん@お腹いっぱい。:2010/03/07(日) 10:52:05 ID:UskpE+ud0
>>278
二行になるけど

vk1Dsc07B::return
vk1Dsc07B up::Send,!{TAB}


はどう?
280名無しさん@お腹いっぱい。:2010/03/07(日) 11:01:40 ID:V7srJ3+90
てかCtrlもくっつければいいんじゃないの?

vk1Dsc07B::Send,!^{TAB}

でよくね?
281名無しさん@お腹いっぱい。:2010/03/07(日) 15:33:10 ID:HzMDSMFb0
282名無しさん@お腹いっぱい。:2010/03/07(日) 19:00:58 ID:/6m3TdM80
AutoHotKey_L x64まだー?
283名無しさん@お腹いっぱい。:2010/03/08(月) 08:58:12 ID:7oeSWDYI0
AutoHotKey_Lを使用しています。
WinGetText, var, WinTitle
で取得したテキストを
IfInString, var, あああ
で分岐させたいのですがうまくいきません。(マッチせず次行をパス)
あああ はWindow Spyの
 Visible Window Text
 Hidden Window Text
で確認できる、途中の行の一部を全角文字で指定しています。
var の中に あああ が存在することは
Clipboard =
Send, ^c
で確認しました。
コツみたいなものはあるのでしょうか?
284名無しさん@お腹いっぱい。:2010/03/08(月) 11:20:57 ID:4CYDBN6U0
>>279
これいけた。ありがとう
>>280
? ALT+TABのアプリ切り替え画面が出ないけど
>>281
AltTabコマンドは&を使ってないとダメらしい
vk1Dsc07B & vk1Dsc07B::AltTab
これやってみたけど、さすがにダメだった
285名無しさん@お腹いっぱい。:2010/03/08(月) 11:26:59 ID:qut2iOOI0
vk1Dsc07B::Send,!^{TAB}

ああこれはVistaからの機能だったわ
286名無しさん@お腹いっぱい。:2010/03/08(月) 13:13:41 ID:B+FzVpGl0
>>283
If Var Contains あああ
ではどうよ
287名無しさん@お腹いっぱい。:2010/03/09(火) 23:53:43 ID:OzHkX9rtP
正規表現の抜き出しについて質問です。
以下のコードで、「def.sys」だけを取り出したい場合、どのように記述すればよいでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
str=
(
abc.txt
def.sys
ghi.ini
)
ex=(\n*)(.*\.sys)(.*)
RegExMatch(str,ex,m)
msg=
(
m1=%m1%
m2=%m2%
m3=%m3%
)
msgbox,%msg%
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
m1=「def.sys」が出る前の文字列
m2=「def.sys」の文字列
m3=「def.sys」が出た後の文字列

というのを作りたいのですが、現状だとabc.txtが一緒に取り出されてしまいます。

http://lukewarm.s101.xrea.com/RegEx.html
これを見ると
> ^ 文字列の先頭。
> 「m」オプションが指定されている場合は、各行の行頭。
というオプションがありますが、これをつけても効果がありませんでした。 ← ex=m)^(\n*)(.*\.sys)(.*)

この事例の場合、どのように記述すれば動くでしょうか。よろしくお願いします。
288名無しさん@お腹いっぱい。:2010/03/10(水) 00:28:08 ID:nPrMBjFq0
ちゃんと見てないけど多分改行オプション
289名無しさん@お腹いっぱい。:2010/03/10(水) 00:31:29 ID:40ZBR1Cz0
>>287
s)(.*?\n)(.*\.sys)(.*)
290名無しさん@お腹いっぱい。:2010/03/10(水) 00:33:48 ID:40ZBR1Cz0
違った
s)(.*?\n|)(.*\.sys)(.*)
291名無しさん@お腹いっぱい。:2010/03/10(水) 00:58:50 ID:jB7hH6NqP
>>288
改行オプションって、m)をつければよいというわけではないのでしょうか。

>>290
早速ありがとうございます。
試したところ、def.sysの前にフィルタ候補が増えると、
やはりm2にくっついてしまいます。
これはどのように対処したらよいでしょうか。

str=
(
abc1.txt
abc2.txt
abc3.txt
def.sys
ghi.ini
)

結果

m1=abc1.txt

m2=abc2.txt
abc3.txt
def.sys
m3=
ghi.ini
292名無しさん@お腹いっぱい。:2010/03/10(水) 01:45:31 ID:fDgVUue40
>>291
m)(.*?)(\S*\.sys)(.*)
293名無しさん@お腹いっぱい。:2010/03/10(水) 02:09:19 ID:jB7hH6NqP
>>292
ありがとうございます!動きました。とても助かりました。
294名無しさん@お腹いっぱい。:2010/03/10(水) 10:56:40 ID:aWRg/Lc70
あるアプリケーション使用中にクリップボードに貼り付けをおこないたいです
Send, ^C
以外の方法はありませんか?

イメージ的にはwebブラウザーでマウス中ボタンクリックのスクロールモードです
Ctrlを押した時にスクロールモードが解除されてしまいます
スクロールモードのままクリップボードに貼り付けたいです
295名無しさん@お腹いっぱい。:2010/03/10(水) 11:04:14 ID:X54O5YEO0
>>294
Shift+Insは?
296294:2010/03/10(水) 12:01:53 ID:aWRg/Lc70
>>295
早速のレスありがとうございます
残念ながら駄目でした
297名無しさん@お腹いっぱい。:2010/03/10(水) 14:34:25 ID:t/Gp99Jb0
>>294
"ClipboardAll = "じゃダメなの?
といってもクリップボードに入れる対象が分からんから何とも言えないけど。
298名無しさん@お腹いっぱい。:2010/03/10(水) 15:00:27 ID:nPrMBjFq0
Edit互換コントロールなら ControlGetのSelectedでクリップボード使わないで
選択領域取れるから、そっから Clipboard につっこみゃいいんだがね
対象がブラウザなら大抵IEかGeckoコンポネだからダメだが
299名無しさん@お腹いっぱい。:2010/03/10(水) 18:31:53 ID:KOlLJ6nQ0
★ 的確なレスを貰える可能性を高めるには
・ 環境(OS、AHKのバージョンなど)をきちんと書こう
・ 操作対象となるアプリケーションは具体的な名前を書こう
・ 短くても良いので何のために操作を行うかを書こう
・ スクリプトの書き方で困っている場合は該当部分を晒そう
300名無しさん@お腹いっぱい。:2010/03/11(木) 11:24:52 ID:oyf67dFb0
除外処理をAHK_LのObject()の配列っぽいのを用いて

Loop, List._MaxIndex()
  If( InStr( WinClass, List[A_Index] ) )
    return

で回しているんですが、
クラス名カンマで区切ってList変数にぶちこんで

If(Winclass In List)
  return

の方が良いのでしょうか?
AHK_LのObjectが何かよく分かってなくて気持ち悪い・・C++/STLのvectorみたいなもの?
301名無しさん@お腹いっぱい。:2010/03/11(木) 11:47:12 ID:sRn8yhQo0
>>300
Listから追加削除しないなら後者で十分かつ速いと思う。
Objectが近いのはmapだと思うが。ドキュメント読んでないよね?
302名無しさん@お腹いっぱい。:2010/03/11(木) 11:52:38 ID:oyf67dFb0
>>301
>map
確かにそうですね
ドキュメントは一応翻訳してくれているhogeってページを読んだんですがそれでもなんかわからなくて
追加削除はしないので全部If〜In〜で置き換えてみます
ありがとう
303名無しさん@お腹いっぱい。:2010/03/11(木) 22:52:22 ID:FEcI/vqn0
PrtScしたクリップボードデータを画像データとしてファイル作成できるかな
ただ拡張子をbmpにして作成するだけじゃだめだよね
304名無しさん@お腹いっぱい。:2010/03/11(木) 23:42:00 ID:vIGGgtAq0
クリップボードの解析が目的じゃなくて、スクリーンショットをファイルにするのが目的なら、
IrfanViewとかのコマンドラインでスクリーンショットとれるのを叩いた方が楽。

ttp://pc7.2ch.net/test/read.cgi/software/1129836713/904
> 904 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2006/08/19(土) 16:48:04 ID:cQubjpuu0
> 小ネタ
>
> ; irfanViewのexe を指定
> iview32 := "C:\Program Files\irfanview\i_view32.exe"
> ; 画像の拡張子を指定
> screenShotExt := "png"
> ; 保存先のディレクトリを指定
> screenShotDir := userprofile "\デスクトップ"
>
> 任意のキーバインド::
> ; yyyyMMdd-hhmmss 形式を生成
> file := A_YYYY A_MM A_DD "-" A_Hour A_Min A_Sec
> ; capture=0 なら 画面全部、 1ならアクティブウィンドウ
> Run, "%iview32%" /capture=1 /convert=%screenShotDir%\%file%.%screenShotExt%
305名無しさん@お腹いっぱい。:2010/03/12(金) 00:06:19 ID:C7VruSRG0
外部アプリ起動に使用するRUNについての質問です。
RUN実行のパラメータにexeではなくtxt等のファイルを指定すると
OSで関連付けられたアプリが起動(txtならメモ帳とか)しますが
関連付けられたアプリがない場合、エラーダイアログが表示されます。
このエラーダイアログを出さないよう、RUN実行の前に、関連付けがない事を
検出する方法をご存じの方いませんか?
ちなみに "関連付けがない場合、指定のアプリで開く"
ような動作を行わせたいと考えています。
306名無しさん@お腹いっぱい。:2010/03/12(金) 02:43:30 ID:QIUnEPrd0
>>309
レジストリを参照(RegRead)するとかは?

WindowsXPならレジストリの HKEY_CLASSES_ROOT のルートにある拡張子(例、txt)を参照する。
┣「.txt」の既定値が空欄(未設定)
┃ ┗ 関連付けされていない
┗「.txt」の既定値が設定(txtfile)されている
  ┗ HKEY_CLASSES_ROOT\txtfile\shell\open\command の 既定値を参照する。
     ┣ プログラム(アプリケーションソフト)のパスが記述されていない
     ┃  ┗ 関連付けされていない
     ┗ プログラムが記述されているならプログラムが存在するかチェック。
307名無しさん@お腹いっぱい。:2010/03/12(金) 03:31:54 ID:f+6cd2nY0
>>305
全く試してないけど、runwaitで試しにその拡張子のファイルを開いてみてerrorlevel調べられないかな?
308名無しさん@お腹いっぱい。:2010/03/12(金) 07:15:26 ID:MoPcXtMG0
UseErrorLevel と ファイルの存在確認でいけるんじゃね?

target = hogehoge.hogeExt

IfExist, %target%
{
 Run, %target%,, UseErrorLevel
 If ErrorLevel
  MsgBox, 関連付けなし
} Else
 MsgBox, 実行対象ファイルが無い


309名無しさん@お腹いっぱい。:2010/03/12(金) 07:37:56 ID:H+4LjzZr0
>>308
対象ファイル自体は存在していて、それをRunでExplorerに丸投げすると、
関連付けが無い場合はExplorerのEXEプログラム選択ダイアログが出るね。

エラーレベルは、関連付けがあっても無くても0になる。
そのコードだとファイルの存在有無の判別はできるが、
関連付けがされてるかどうかの判別はできないと思う。

>>306の方法で地道に作るのが確実だろうね。
関連付けを確認したり、いじる関数でもあればラクなんだけどね
そんな関数があったら俺もぜひとも欲しいわ
310名無しさん@お腹いっぱい。:2010/03/12(金) 11:31:27 ID:zgxoZ8EfP
ダイアログが出たかどうかで判別すればいいんじゃね?
っていう消極的解決法
311名無しさん@お腹いっぱい。:2010/03/12(金) 11:34:47 ID:+bHxA0iI0
shell32のFindExecutableAでいいんじゃない?
と言い逃げしようと思ったけど無責任すぎるので

VarSetCapacity(result,260)
path := "C:\A.jpg" ;なんかてきとーな存在するファイルのパス
ret := DllCall("shell32\FindExecutableA", "Str", path, "Int", 0, "Str", result)
msgbox,[%ret%]`n[%result%]

resultに関連付けられてるプログラムのパスが入る
retが32より大きければ成功、32以下は失敗
失敗時resultは空になるからそっちで判断してもいいかな
こんな感じ かな
312名無しさん@お腹いっぱい。:2010/03/12(金) 12:36:39 ID:C7VruSRG0
>>306>>311

皆さんレスありがとうございます。
最終的にはレジストリを彷徨うしかないのかと思って挫折しかけでした。
とりあえず311さんの方法から試してみます。
DllCallとか使いこなすほど熟練してないんでサンプル提示して頂いて助かります。
313305:2010/03/12(金) 23:02:56 ID:C7VruSRG0
>>311

仕事してるフリして教えて頂いた方法で試してみた所
希望通りの動作を実現できました。
ありがとうございました。
314名無しさん@お腹いっぱい。:2010/03/14(日) 15:43:24 ID:2T3SppQh0
AutoHotkey_L - Debugging Features
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/docs/Debugging_Features.htm

ここにある XDebugClient を使ってみたんだが
変数の中身を全く見れないのが難点
autohotkey_l用のdebugger でおすすめのものはある?
315名無しさん@お腹いっぱい。:2010/03/14(日) 16:23:20 ID:3cG1F7d10
>>314
Features:
* View local/global variables.
# Watch user-specified variables.
# Hover over a variable to view its contents.

それ使ったことないからしらんけど、機能としてはあるみたいよ?
316名無しさん@お腹いっぱい。:2010/03/14(日) 16:26:23 ID:3cG1F7d10
と思ったが、>>315はNotepad++用のプラグインか。XDebugClientはこっちか
Features:
Inspect variables - select a variable name, right-click, Inspect.
317名無しさん@お腹いっぱい。:2010/03/14(日) 16:41:29 ID:2T3SppQh0
>>316
変数一覧がないだけでしたか
しつれいしました
318名無しさん@お腹いっぱい。:2010/03/14(日) 16:47:56 ID:hYBZ7x5J0
XDebugClientは便利でたまに使うんだが、
デバッグしたいシーンに限ってフックだったりして速度面で問題があって使えないという罠。
319名無しさん@お腹いっぱい。:2010/03/15(月) 11:15:07 ID:KJn5DEaJ0
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 49 - March 14, 2010

* Added obj._NewEnum().
* Added ObjMethod(obj) for each built-in obj._Method()
* Changed: ObjSet/Get/Call can no longer be called/overridden by script.
* Fixed: Potential crash caused by VK_PACKET check added in L48.
* Fixed: Character codes in VK_PACKET events were potentially misinterpreted as scancodes.
* Fixed: ExcludeText was ineffective after the first matching control.

連想配列の要素を列挙することができるようになったようだ
> ; Create some sample data.
> obj := Object("red", 0xFF0000, "blue", 0x0000FF, "green", 0x00FF00)
>
> ; Enumerate!
> enum := obj._NewEnum()
> While enum[k, v]
> t .= k "=" v "`n"
> MsgBox % tgBox % t

ゆとり文応マンセーです
320名無しさん@お腹いっぱい。:2010/03/15(月) 11:28:49 ID:yBRvui3E0
普通の配列ならLoop, %obj._MaxIndex()の方がスマートなのかな
しかし便利だなあ
321名無しさん@お腹いっぱい。:2010/03/15(月) 11:30:40 ID:PrNDAorv0
前のレスで autohotkey_l の最新版を
いれないほうがいいってアドバイスがあった気がするけど
>>319は大丈夫?
322名無しさん@お腹いっぱい。:2010/03/15(月) 11:46:20 ID:noKqjCwU0
>>321
理由次第じゃないの?
323名無しさん@お腹いっぱい。:2010/03/15(月) 11:54:47 ID:PrNDAorv0
>>160
>非常駐系でSendすると、常駐してる方が落ちることがある
これが直っているかなと思ったのです

>>319の更新リストをみても
それっぽいことが書いてありませんので

324名無しさん@お腹いっぱい。:2010/03/15(月) 12:00:21 ID:noKqjCwU0
1. 古い実行ファイルをバックアップして、新しいのを試す
2. 更新項目が必要なければアップデートしない
どちらかじゃない?
325名無しさん@お腹いっぱい。:2010/03/15(月) 18:54:27 ID:Ky4HB30HP
コンソールで動く実行ファイルの実行結果を、受け取る方法について質問です。
はやらせるページにあるPRunを使用して、tasklistの内容を取得したいのですが、

プロセスを起動して標準出力を読み書き
http://lukewarm.s101.xrea.com/myscripts/index.html

pi:=PRun("tasklist")
PWaitExit(pi) ;終了するまで待ってから読んだ方が確実
r:=PRead(pi)
MsgBox,%r%
PClosehandle(pi)

これはうまくいきました。

次に、詳細情報を取得するオプション(/v)をつけたところ
出力が出ず、msgboxまでたどり着くことができませんでした。

pi:=PRun("tasklist /v")
(以下同じ)

↓これもやってみましたが、これだとコンソールウインドウが出てしまい、
 そこで出力は出ますが、r変数で取り出すことができませんでした。

pi:=PRun("cmd /c tasklist /v")
(以下同じ)

↓このPRun関数はコマンドラインの引数オプションが指定できないのかと思いきや、
 サンプルで提示されているこれは、きちんと動きました。
pi:=PRun("ping google.com")

上記の検証はWin7Ultで行いました。(Win7とXPで使用予定です)
/vオプションをつけた出力を取得するには、どのように対処したらいいでしょうか。
326名無しさん@お腹いっぱい。:2010/03/15(月) 21:25:19 ID:OOr/fuq80
CreatePipeに渡すバッファが足りてないみたい。出力結果が途中までしかバッファに格納出来ていないから、
tasklistはバッファに空きが出来るのを待ってるんだけど、こっちもPWaitExitで延々待ってるもんだから、何時までたっても終わらんw
とりあえずtasklistが終わるのを待ちたいならstdio.ahk PRun()のBufSizeを増やせばおk
327名無しさん@お腹いっぱい。:2010/03/15(月) 21:55:11 ID:Ky4HB30HP
>>326
関数内のバッファ8192を81920にしたところ、こちらでもうまくいきました。
どうもありがとうございます。

ちなみにこのバッファ数値は、メモリが潤沢にある場合、
1000000とかにしてしまっても問題ないでしょうか。

各コマンドが、バッファをどれくらい必要としてるのかがわからないので、
原因不明で止まって困るよりも、メモリを少々過剰に消費させたうえで
確実に動作させたいです。
328名無しさん@お腹いっぱい。:2010/03/15(月) 22:15:32 ID:OOr/fuq80
確実性を重視するならばその方法かな
バッファサイズはデフォルトにしておいて、PWaitExit(pi, 300)とかでもいいと思うけどね
329名無しさん@お腹いっぱい。:2010/03/15(月) 23:20:42 ID:OOr/fuq80
一応スクリプト例も書いておきます。
pi := PRun("tasklist /v")
r=
Loop
{
  if r <>
    break
  PWaitExit(pi, 50)
  r := PRead(pi)
}
MsgBox, %r%
PClosehandle(pi)

コマンドの結果が確実に得られる事が前提ですが。
330名無しさん@お腹いっぱい。:2010/03/15(月) 23:25:25 ID:Ky4HB30HP
了解です。実際にいろいろ走らせて様子を見ながら調整してみます。
ありがとうございました。
331名無しさん@お腹いっぱい。:2010/03/15(月) 23:34:16 ID:Ky4HB30HP
>>329
おーなるほど、こう使うのですね。

こちらの環境では、ループを3回まわって、tasklist/vの内容を取得して
ループを抜けました。
332326:2010/03/16(火) 02:11:00 ID:WdmmxGaL0
あぁ、これ(>>329)じゃpingとかだめじゃん。

Loop
{
  if PWaitExit(pi, 50) <> 0x103 ;コマンドが終了したらループから抜け
    break
  r .= PRead(pi)
}

訂正します。ごめんしてね
333160:2010/03/16(火) 03:51:11 ID:5owUwdfz0
>>321-322
治ってるみたい。少なくともウチの環境では落ちなくなった。
たぶん↓の修正かと。
> Fixed: Potential crash caused by VK_PACKET check added in L48.
334名無しさん@お腹いっぱい。:2010/03/17(水) 13:47:35 ID:NC7U8lis0
スクリプトごとにAutoHotKey.exeが起動するしメモリ使用量も気になって
複数のスクリプトをIncludeでまとめて実行してるんだけれど皆さんどうしてますか
335名無しさん@お腹いっぱい。:2010/03/17(水) 14:19:58 ID:3n0vVHRD0
俺もIncludeで一つにまとめてる
336名無しさん@お腹いっぱい。:2010/03/17(水) 14:30:51 ID:77q1E2dC0
俺も積極的に合成してる。キーフック以外にsettimerで定期巡回系のものをいれて、
例えばアプリの特定のボタンの上にマウスカーソルがあった場合にtips表示させてる。

ヘルプ代わりになって便利になった。表示させる内容を外部ファイルから取り込んで
動的に表示内容を変えたりと、だんだん動作が込み合ってきた。
そのしわ寄せで、すぐ反応してもらいたいキーフックルーチンに対する反応が遅くなってきた。

その他、たとえば1分ごとにルータのping反応を調べたり、ファイルサーバにある特定の
ファイルの存在有無を調べるなど、たまたま操作中にそれが当たるとほかの処理が詰まる。

かといって、全部を分けて起動となると管理が面倒で、とりあえずそのまま使ってる。
けど、なんとかしたい。

部屋の片付けがウマい人は、スクリプトの整理もうまいんだろうね。
小物スクリプトに対するタスクマネージャ的な関数があればいいのかも。
337名無しさん@お腹いっぱい。:2010/03/17(水) 15:26:08 ID:o3HHwbPT0
何だかんだで1万行くらいになってた。
ジョイスティック用に20msのタイマ回してたり、#If で結構複雑な関数使ってたりするけど、
ウェイトのかかるものはなるべく避けて外部スクリプトにしているせいか、重いと思ったことはない。
スクリプトは機能毎に分割しているつもりだけど、依存関係がゴチャゴチャで大変。
338名無しさん@お腹いっぱい。:2010/03/17(水) 21:02:57 ID:hXiGQ14/0
include するときに
if で読み込むかどうかを選択できれば楽になるのにね
なんとかならないものか
339名無しさん@お腹いっぱい。:2010/03/17(水) 22:37:21 ID:NC7U8lis0
>>335-337
まとめてるの自分くらいかと思ってた
ただ初期化とか狩猟処理がややこしくなるんだよね
ありがとう

>>338
たしかに#If〜#Else〜#EndIf的なものはほしい
340名無しさん@お腹いっぱい。:2010/03/18(木) 05:33:38 ID:Jy6mWKx+0
NILScriptにはプラグイン機構が用意されているらしいから管理しやすくなるかな
341名無しさん@お腹いっぱい。:2010/03/19(金) 18:29:13 ID:Q/HdNlhX0
INIファイルなどの設定ファイルを指定して、その内容を読み込んで、
ボタンやEditでON/OFFを編集するダイアログを出すようなGUIって、
公開された関数かライブラリでないですかね?

たとえばこの画面でいうなら、上部のタブがINIファイルのセクションになって読み込まれ、
項目の属性(ON/OFFスイッチか、フォルダ指定か、スライドバーか、など)は
別途なんらかのオプションを指定して表示項目を決めていく感じ

http://img.f.hatena.ne.jp/images/fotolife/b/blechmusik2/20090830/20090830032131.png

なければ1から作ろうと思いますが、汎用のライブラリが
すでにあったらそれを使わせてもらいたいです。
342名無しさん@お腹いっぱい。:2010/03/19(金) 18:51:06 ID:7nm7N1gI0
ぶっちゃけ、INIの行数とスクリプトの行数同じくらいになるとだろうし、
ライブラリだかの機能を覚えるよりスクリプト書いた方が結局は楽だと思う。
343名無しさん@お腹いっぱい。:2010/03/21(日) 20:24:16 ID:A6Nu8+dw0
和訳してみた。簡単だと思ったら凄い大変だった。
http://sites.google.com/site/agkh6mze/translation/autohotkey_l

間違いがあったりするかも知れないが気にしない。
344名無しさん@お腹いっぱい。:2010/03/21(日) 20:33:08 ID:LscW9+JT0
>>343
乙乙
345名無しさん@お腹いっぱい。:2010/03/21(日) 20:58:13 ID:fkVXv90L0
>>343
マジGJ
346名無しさん@お腹いっぱい。:2010/03/22(月) 02:33:56 ID:IRRzI+Zg0
>>343
非常に乙
ささやかながら助力します
こなれていない日本語ですみません

デバッグ機能 (hoge)
http://sites.google.com/site/agkh6mze/translation/autohotkey_l/debugging

* Hovering over a single-letter variable name does not work - for instance, hovering over "a" will attempt to retrieve " a" or "a ".

一文字からなる変数名上にマウスカーソルを合わせてもうまく動作しない
――たとえば、"a"にマウスカーソルを合わせると、" a" と "a " を検索するよう試みる

* Hovering over text will attempt to retrieve a variable even if the text contains invalid characters.

テキストにマウスカーソルを合わせたら、
テキストに無効な文字が含まれているとしても、
ある変数を検索するよう試みてしまう。

* Notepad++ becomes unstable if property_get fails, which is particularly problematic in light of the above. As a workaround, AutoHotkey_L sends an empty property instead of an error code when a non-existent or invalid variable is requested.

Notepad++ が不安定になるのは property_get が失敗したときである。
これは上記の観点から特に問題だ。
一回避策として、AutoHotkey_L では、存在しない変数か無効な変数が要求されると、エラーコードのかわりに空のプロパティを出力する
347名無しさん@お腹いっぱい。:2010/03/22(月) 09:30:07 ID:UVoOFvFQ0
>>346
thx パクらせて貰った。
使わないモノはふいんき(ry)が分からないのでどう訳していいか困るな
348名無しさん@お腹いっぱい。:2010/03/22(月) 21:35:18 ID:m3apHvVF0
ちょっと聞きたいんだけど、IMEとgoogle日本語変換を切り替えるようなスクリプトって
ありますかね?IMEの状態をON/OFFすることまではできたんだけど、そこからがなんとも。
だれかやってる人いたら教えてください!
349名無しさん@お腹いっぱい。:2010/03/22(月) 21:42:57 ID:lZcPc0rZ0
Ctlr+Shiftで切り替えられたと思うけど
350名無しさん@お腹いっぱい。:2010/03/22(月) 21:49:03 ID:m3apHvVF0
349>>
即レス感謝。早すぎびびったw
うーむ、やっぱそれしかないんですかね…。
もっと詳しく書かなかった自分が悪いのですが、
無変換でIMEON、変換でIMEOFF、みたいに
自由なキー1でIMEを使えるようにする、自由なキー2でgoogle日本語変換を使えるようにする、
といった、ちとわがままなことをしたいのです。
どうにも最初から用意されてるキーシーケンスの指定とかCtlr+Shiftとか
ある程度しかカスタマイズできないってのがいやなのです。
あとはテキストサービスと入力言語のウィンドウを呼び出したりも試してみたんですがどうにも
うまくいっていないようでしょんぼりしてるところです。
351名無しさん@お腹いっぱい。:2010/03/22(月) 22:05:01 ID:Znh/uhGu0
「詳細なキー設定タブ」の、「キーシーケンスの変更」でホットキーをそれぞれ割り当てるのはだめなのか?
352名無しさん@お腹いっぱい。:2010/03/22(月) 22:12:03 ID:Z/e8PReq0
どうでもいいけど MS-IME な
省略されるとどのIMEのことだかわかんないんだぜ
353名無しさん@お腹いっぱい。:2010/03/22(月) 22:17:34 ID:m3apHvVF0
>>351
ごもっともなのですが…。というかやっぱそれしかないですかね…。
IME.ahkとか使うと本当に好きなキーでIMEONOFFを切り替えられたので、
もしだれかそのキーシーケンスの変更以外で切り替えができてる人がいたらな〜
と思ったのです。自分もだいぶAHKを愛用してて、
そのキーシーケンスではなんかそのうちキーがかぶってしまいそうで。
(そもそもそのキーシーケンスの変更がもっとカスタマイズできれば文句などなかったのですがOTL)
354名無しさん@お腹いっぱい。:2010/03/22(月) 22:26:25 ID:Znh/uhGu0
>>353
いや何言ってるの。「キーシーケンスの変更」でたとえばCtrl+Shift+0にMS IMEとして
ahkの方で、無変換キーとかにバインドさせればいいだけでしょ?こんな感じで
vk1Dsc07B::^+0
355名無しさん@お腹いっぱい。:2010/03/23(火) 18:27:35 ID:FEWuj2fAP
システムトレイ(タスクトレイ)に表示されているアイコンにカーソルが乗ってるかどうかを
settimerの定期巡回で監視して、カーソルが乗ってるアイコンのプロセス名を
割り出す方法はありますでしょうか。

タスクバー自体は下記のifで認識できました。
#IfWinActive ahk_class Shell_TrayWnd

「タスクトレイアイコン操作 by流行らせるページ管理人」の関数が
用途に近かったのですが、出ているアイコンのアプリに対してクリック等の指示を行うコマンドは
あるものの、カーソル下部のアイコンが何のプロセスなのかを判別する機能はないようでした。
356名無しさん@お腹いっぱい。:2010/03/23(火) 22:02:38 ID:DJGLP2BD0
↓と「タスクトレイアイコン操作 by流行らせるページ管理人」を使えばいける
トレイアイコンのウィンドウは不可視なので、DetectHiddenWindows, On が必須。

; マウスカーソルがトレイアイコンの何番目の上に有るかを返す。番号は1で開始。
;; トレイのアイコン領域意外にある時は、空文字列を返す
Tray_HitTest() {
 size:=VarSetCapacity(point, 8)
 DllCall("GetCursorPos", "UInt", &point, "Int")
 ControlGet, hwnd, HWND,, ToolbarWindow321, ahk_class Shell_TrayWnd
 DllCall("ScreenToClient", "UInt", hwnd, "UInt", &point, "Int")
 WinGet, pid, PID, ahk_id %hwnd%
 If (hProcess:=DllCall("OpenProcess", "UInt",0x38, "Int", false, "UInt", pid)) {
  If (pBuffer:=DllCall("VirtualAllocEx", "UInt",hProcess, "UInt",0, "UInt",size, "UInt",0x3000, "UInt",0x4)) {
   DllCall("WriteProcessMemory", "UInt", hProcess, "UInt", pBuffer, "UINT", &point, "Int", size, "UIntP", byteWritten, "Int")
   SendMessage, TB_HITTEST:=0x445, 0, pBuffer,, ahk_id %hwnd%
   index := ErrorLevel
   DllCall("VirtualFreeEx", "UInt",hProcess, "UInt", pBuffer, "UInt",0, "UInt",0x8000)
  }
  DllCall("CloseHandle", "UInt",hProcess)
 }
 Return index < 0x80000000 ? index+1 :
}
357名無しさん@お腹いっぱい。:2010/03/23(火) 22:28:36 ID:FEWuj2fAP
>>356
おかげさまで動きました。
返却された番号をTray_GetText(idx)に渡したところ、
きちんとテキストも取得できました。

これができなかったら、ローテクでimagesearchでアイコンを識別させるしか
方法を思いつきませんでしたが、希望通りのスクリプトを作れそうです。
どうもありがとうございます。
358名無しさん@お腹いっぱい。:2010/03/24(水) 05:04:59 ID:Y3XOG3bS0
おしえてください。ファンクションキーのダブルクリックのスクリプトで
特定の作業をさせたいのですが、それがF8以降まったく働きません。
F1からF7はちゃんと動くのですが、F8,9,10が動きません。

以下こういうスクリプトです。どこが悪いのでしょう

F8::
if A_TickCount < %F8double%
{
send, {ESC}
sleep, 350
Click 368, 133
sleep, 350
Click 357, 465 ;some action
F8double=0
}
else
{
F8double=%A_TickCount%
F8double+=400
}
return
359名無しさん@お腹いっぱい。:2010/03/24(水) 13:52:25 ID:L2kr7oDg0
>>358
普通に動くよ。他の部分に問題があるかも

ちなみに、以下がメジャーな方法。
F8::
if(A_PriorHotKey == A_ThisHotKey && A_TimeSincePriorHotkey < 400){
tooltip, double tap
sleep, 350
tooltip,
}
return
360名無しさん@お腹いっぱい。:2010/03/24(水) 14:13:08 ID:Vjs+wYE00
>>359
これ物理的にキーを押した場合のみ反応するように出来ませんか?
他のマウ筋のようなキーを発行するソフトにも反応して困ってるんですが
361名無しさん@お腹いっぱい。:2010/03/24(水) 14:40:04 ID:GbWxQ9On0
一から十まで人におんぶにだっこかよ
362名無しさん@お腹いっぱい。:2010/03/24(水) 14:47:51 ID:x5VLF9Vv0
複数のIMEを切り替えるために、Alt+Shiftを置き換えたいんので下みたいに書いたんだけど、うまくいかない。
修飾キーだけを送ることはできないのかな??

a:: send !{shift}
363名無しさん@お腹いっぱい。:2010/03/24(水) 15:53:03 ID:Y3XOG3bS0
>>359
ありがとうございました。非常にたすかりました。
貴殿の示してくれたスクリプトだとF8以降もふつうに動くことが出来ました。
なにが悪かったんだろう。ま、わたしには分からないが。
ありがとうございました。保存しときます。
364名無しさん@お腹いっぱい。:2010/03/24(水) 16:07:47 ID:IZT/6MXp0
>>362
a::
Send, {Alt Down}{Shift Down}
KeyWait, a
Send, {Alt Up}{Shift Up}
Return
365名無しさん@お腹いっぱい。:2010/03/24(水) 16:29:06 ID:Y/vOB7zE0
>>363
>>358のコードをそのまま使ってみたら、ちゃんと動いたぞ。
コードとしては、間違ってないと思う。

周辺機器の付属アプリか、日本語入力でF8の機能(半角強制変換機能など)が
悪さをしてるんじゃないの?
366名無しさん@お腹いっぱい。:2010/03/24(水) 17:44:55 ID:L2kr7oDg0
たぶん、GetKeyStateのPオプション付けてチェックするとか、
あとは#UseHook(もしくは$修飾子)使えば回避出来るんじゃないかなー
367名無しさん@お腹いっぱい。:2010/03/24(水) 17:46:30 ID:L2kr7oDg0
あ、>>366>>360へのレス
368名無しさん@お腹いっぱい。:2010/03/25(木) 00:14:15 ID:m7MENhDA0
キーリピートに関してAHKでは制御できないのでしょうか?
ひとつのキーに二つの動作を割り当てているのですが、
ついそのキーを一秒ほど押下しつづけてしまいます。
しばらく押下しつづけても一回しか動作が動かないようにはできませんか?
(さすがに無理ですよね?)

send, {F7}
send, {F}
return

という二つのキーを押すだけのスクリプトなのですが。おしえてください。 
369名無しさん@お腹いっぱい。:2010/03/25(木) 00:25:17 ID:eTFOLfRF0
キーリピートに相当する機能を自分で実装すればいい
loopで。
370名無しさん@お腹いっぱい。:2010/03/25(木) 00:35:28 ID:m7MENhDA0
よくまだ知りませんが、loopによって
繰り返し擬似的にキーリピートさせるってのはなんとなく
わかるのですが、逆にキーリピートさせないこともできるのでしょうか?
371名無しさん@お腹いっぱい。:2010/03/25(木) 00:51:32 ID:cCpii3KM0
A up:: Send, a
372名無しさん@お腹いっぱい。:2010/03/25(木) 01:01:53 ID:m7MENhDA0
ヒントありがとうございます。んー、sendの項目みてますがまだわかりかねてます。

そういえばたしかスクリプトの最後になにか書き込むと、自動で繰り返すために上に戻らないようにすることが
初歩のやり方でできたような気がするのですが、んー気のせいか。

F1::
send, {F7}
send, {F}
return

で、最後のF打ってもまた一行目から繰り返さないような。
373名無しさん@お腹いっぱい。:2010/03/25(木) 01:11:16 ID:m7MENhDA0
>>371
レスありがとうございます。これ非常に惜しいです。
キーリピート発生しないので非常にイイのですが、
いかんせんキーを離したときに、動きが発生するんですよね?
これの逆があれば、ほんとに有り難かったのですが、
F1 Down:: send, {F7}
これじゃぁ登録出来ないみたいですね。んー、惜しい。
374名無しさん@お腹いっぱい。:2010/03/25(木) 01:34:02 ID:m7MENhDA0
とりあえず、自分が望む動作はできるようになりました。過去ログをみて、
keyWait,を入れることでキーが離されるまで待機するようにしました。
ちょっと変則かもしれないですが、いまのところは満足してます。
ありがとうございました。
375名無しさん@お腹いっぱい。:2010/03/25(木) 05:57:32 ID:GyUVKvFX0
ピアノの鍵盤みたいな動作ほしい。
「Aキーを離して押したらアクション」
「Bキーを離して押したらアクション」

KeyWait,A
KeyWait,B
をそれぞれ入れればいいが、
A押しながら(Aは離さないで)、Bキーを離して押したらBアクション
ってのができん。

ピアノは1回押したら1回しかならない(キーリピートはしない)
かつ離して押したら何を押されてようが、独立してそのキーでアクション発生する。

ってのができん。2つのキーを両方同時押しした場合、どっちか離して押してもアクションが発生しない

口で言うのややこしいが、要するにピアノの動作がしたい。
376名無しさん@お腹いっぱい。:2010/03/25(木) 06:09:30 ID:eTFOLfRF0
>A押しながら(Aは離さないで)、Bキーを離して押したらBアクション

Bキーはいつ押すの?
なんとなくやりたいことはわかるが、説明が下手すぎて理解できない
377名無しさん@お腹いっぱい。:2010/03/25(木) 06:14:23 ID:GyUVKvFX0
thredかなー。
同時押ししてその後無反応になる件だが、
最後に押したキーで滞留してしまってるらしい。キーリピートしないのは必須だが、
他のキー押しても反応してほしいんだよな。

「Bキーを離して押したらアクション
行で
KeyWait,B いれてると、Aキーの離す・押すは関係ないと無視されるし・・・ここで止まってる
378名無しさん@お腹いっぱい。:2010/03/25(木) 06:19:32 ID:GyUVKvFX0
それぞれキーリピートが発生しないようにKeyWait,A KeyWait,Bを入れる
Aキー、Bキーを順に押したままにする
Bキー押したままでAキーを離して押す<<ここで無反応に
Bキー離すとAキーの動作を認識し出す。

Bキーの行で止まっちまう。KeyWait,Bの行で止まってるらしいな。
if else使っても解決できんかった。どうすりゃいいのかな。
379名無しさん@お腹いっぱい。:2010/03/25(木) 07:29:32 ID:eTFOLfRF0
getkeystateをsettimerで回せばできるよ。
50msecくらいで回せば十分検地できると思う。

修飾キーなどの細かい制御は、俺はこれでやってる
380名無しさん@お腹いっぱい。:2010/03/25(木) 07:50:53 ID:Z3nvLIl40
所謂ワンショットモディファイアだな。基本的にはDown時にフラグ立てて、Up時にチェックだとおもう。
他キーの名前が分かってるなら、AHK本家のグローバル変数でもいいけど、不特定だと AHKL の方が楽かも。
以下は AHKL 用。

keyHash := Object("base", Object("keyDown", "KeyHash_AddEntry", "keyUp", "KeyHash_RemoveEntry"))
A::
B::
C::
 keyHash.keyDown()
 Return
A Up::
B Up::
C Up::
 If keyHash.keyUp()
  Tooltip, %A_ThisHotkey% Action
 Return
; キー押下を登録。戻り値なし
KeyHash_AddEntry(obj, keyName="") {
 keyName := !keyName ? RegExReplace(A_ThisHotkey, "i)\s+Up$") : keyName
 obj[A_ThisHotkey] := True ; 単独押下フラグ
}
; キー押下を解除。単独押下だったら真、それ以外は偽を返す。
KeyHash_RemoveEntry(obj, keyName="") {
 keyName := !keyName ? RegExReplace(A_ThisHotkey, "i)\s+Up$") : keyName
 status := obj[keyName], obj._Remove(keyName) ; 状態を取得してからエントリ削除
 enum := obj._NewEnum()
 While enum[k] ; 他キーの単独押下フラグを降ろす & 同時押しチェック
  obj[k] := False, otherEntries:=True
 Return status & !otherEntries
}
381名無しさん@お腹いっぱい。:2010/03/25(木) 17:20:04 ID:ezobcN2a0
なんか
WinActivate よりも DllCall("SetForegroundWindow"...)
IfWinActivate よりも If( hwnd == DllCall("GetForegroundWindow"...) )
の方が反応が早い気がするんだけどそんなもんなのかな
382名無しさん@お腹いっぱい。:2010/03/25(木) 18:28:47 ID:BEh5UQds0
>>381
反応が早いって事は
処理時間に差があるのかな
383名無しさん@お腹いっぱい。:2010/03/25(木) 18:37:47 ID:TKW+wXAx0
最近AHK_Lに乗り換えました。
xyzzyで排他処理を共有ロックにしてスクリプトを書いているのですが、
xyzzyで開かれているスクリプトを実行すると

Script file "(スクリプトファイル名).ahk" cannot be opened.

と出て実行されません。
無印AHKの時には問題なく実行できていたのですが、この挙動はAHK_Lの仕様なんでしょうか。
384名無しさん@お腹いっぱい。:2010/03/25(木) 20:26:26 ID:ezobcN2a0
>>382
ホイールでマウスカーソル下のウィンドウをアクティブにするスクリプト使ってるんだけど

  IfWinNotActive, ahk_id %hwnd%
    WinActivate, ahk_id %hwnd%
  Send,ほいーる↑↓

ではアクティブになってから一瞬ウェイトおいてスクロールするけど

  If(hwnd != DllCall("GetForegroundWindow", "Uint"))
    DllCall("SetForegroundWindow" , "UInt", hwnd, "Int")
  Send,ほいーる↑↓

だとアクティブ化と同時にスクロールしてくれる
環境によるのかな
385名無しさん@お腹いっぱい。:2010/03/25(木) 20:45:13 ID:Z3nvLIl40
> WinActivate
>   :
> Remarks
>  60ミリ秒の間に6通りの方法でアクティブ化を試みる。
386名無しさん@お腹いっぱい。:2010/03/25(木) 20:59:02 ID:BEh5UQds0
>>385
これだね

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

>>384
IfWinActivateのほうは情報を見つけられない
原文にも訳文にも書いていないね
WinActivateと同様なのかも

IfWinActive / IfWinNotActive
http://lukewarm.s101.xrea.com/commands/IfWinActive.html

IfWinActive / IfWinNotActive
http://www.autohotkey.com/docs/commands/IfWinActive.htm
387名無しさん@お腹いっぱい。:2010/03/25(木) 21:27:12 ID:TfLFZkYb0
>>384
SetWinDelayは?
388名無しさん@お腹いっぱい。:2010/03/25(木) 21:27:46 ID:ezobcN2a0
>>385-386
なるほどー納得したありがとう
最高6通りも試してたらそりゃ遅くなるね
389名無しさん@お腹いっぱい。:2010/03/25(木) 21:35:55 ID:ezobcN2a0
>>387
SetWinDelay, 0してみたらラグがなくなった
これが原因だったのか・・
なんかほんとごめんありがとう
390名無しさん@お腹いっぱい。:2010/03/26(金) 14:27:04 ID:j144pbQV0
AutoHotkeyを流行らせるページが
前よりも小さくなっているような気がする
391名無しさん@お腹いっぱい。:2010/03/26(金) 15:56:18 ID:miq/boBy0
なんか流行らせるページの管理人、横柄じゃないか?
今まで日本語資料として大変役立ったから感謝はしているが
とてもじゃないがNILScriptを試してみようという気さえ起きない
392名無しさん@お腹いっぱい。:2010/03/26(金) 16:05:05 ID:B8RX9Ka10
何を今更・・・
掲示板とか見てたらあーいう感じだってのはよく分かるでしょ
393名無しさん@お腹いっぱい。:2010/03/26(金) 16:12:01 ID:FFRIHyDk0
何かに優れた人や何かを先導する人に変な人が多いのは仕方ない
394名無しさん@お腹いっぱい。:2010/03/26(金) 16:36:11 ID:tSDPweyQ0
馬鹿が寄ってこないようにするためだろう。
どうやら上手く行っているようだな。
395名無しさん@お腹いっぱい。:2010/03/26(金) 16:55:02 ID:KfwcuP1w0
そういやもうすぐ4月だな
予告通りエイプリルネタで収束するのか、まじで終息してしまうのか
流行らせるページの今後については気になるところだ
396名無しさん@お腹いっぱい。:2010/03/26(金) 18:21:30 ID:daecJ3VQ0
;最大化/元のサイズに戻す(トグル)
#Down::
WinGetPos, ,, aeroWidth,, A ; get window info
if aeroWidth >= %A_ScreenWidth%
WinRestore, A
else
WinMaximize, A
return

AHKでAeroSnapはどっかの外人さんがやっていたので
WindowsXPでAeroSnapの最大化⇔元サイズを1キーでやってみた
この程度に2時間ぐらいかかってしまった・・・orz
397名無しさん@お腹いっぱい。:2010/03/26(金) 18:55:59 ID:kGEEvGFs0
っ WinGet, 〜, MinMax
398名無しさん@お腹いっぱい。:2010/03/26(金) 19:08:37 ID:daecJ3VQ0
>>396 の勢いで作った
; AeroSnapの第2モニタの半分のウィンドウサイズ(右/左)
+#Left::
; 第2モニタの情報を取得
SysGet, MonitorPrimary, MonitorPrimary
MonitorSecond := MonitorPrimary+1
SysGet, MonitorSecondWorkArea, MonitorWorkArea, 2
MonitorSecondWidth := MonitorSecondWorkAreaRight - MonitorSecondWorkAreaLeft
MonitorSecondHeight := MonitorSecondWorkAreaBottom - MonitorSecondWorkAreaTop

WinMove, A,, A_ScreenWidth, 0, (MonitorSecondWidth/2), MonitorSecondHeight
return

+#Right::
; 第2モニタの情報を取得
SysGet, MonitorPrimary, MonitorPrimary
MonitorSecond := MonitorPrimary+1
SysGet, MonitorSecondWorkArea, MonitorWorkArea, 2
MonitorSecondWidth := MonitorSecondWorkAreaRight - MonitorSecondWorkAreaLeft
MonitorSecondHeight := MonitorSecondWorkAreaBottom - MonitorSecondWorkAreaTop

WinMove, A,, (A_ScreenWidth+MonitorSecondWidth/2), 0, (MonitorSecondWidth/2), MonitorSecondHeight
return
399名無しさん@お腹いっぱい。:2010/03/26(金) 19:11:48 ID:daecJ3VQ0
>>397
サンクス
aeroWidth:1688 A_ScreenWidth:1680で困ってたんだ・・・
連続投稿失礼しますた
400名無しさん@お腹いっぱい。:2010/03/26(金) 21:25:23 ID:TdFTGuLh0
みんなどんなスクリプト書いて使ってるの?
入れてみたはいいけど発想が乏しくて作るまで至らない
401名無しさん@お腹いっぱい。:2010/03/26(金) 21:39:03 ID:60r62pDO0
>>400
1日2ちゃんをどれだけやってるかtraytipで表示させる
1日2ちゃんで、どの板に居ることが多いのか統計を取る

とか
402名無しさん@お腹いっぱい。:2010/03/26(金) 21:52:47 ID:B8RX9Ka10
そんなんやると心が荒んでいきそうだわ
403名無しさん@お腹いっぱい。:2010/03/26(金) 22:33:14 ID:j144pbQV0
>>401
おもしろそうだね
1番目のやつはjane や live2ch の起動を監視しつづければできそう
でも2番目のやつは見当がつかない
どうやるんだろう?
404名無しさん@お腹いっぱい。:2010/03/26(金) 23:04:58 ID:P02tc/+JP
>>403
ウインドウタイトルを取得して、タイトルを加工すればスレがわかる

あるいはアクティブウインドウがjane2ch.exeなど特定のものだったら、
ウインドウからWingetでURLなどを抜き取る。URLから板名を割り出す。
それで出てきた情報を一意な形にして、iniでカウントアップなり全記録なりで管理する

カウントが一定値を超えたら、「今日は何番目まで進んだんだよ?」というタイトルで
以下のテキストをmsgboxで表示させる

msg=
(
〜2ちゃんねるに慣れるまで〜

1.最初は普通の掲示板のつもりで、名前を入れて書き込んでしまう
  名無しさんに誰だコイツ?とか言われて初めて普通の掲示板と違うと気付く
2.オマエモナーとか逝ってよしとか、2ちゃんねる風の言葉が珍しくて書きまくる
3.今まで見たことない話題やAAを見て、激しく引き込まれる
4.2ちゃんねるを見る時間が増える
5.2ちゃんねるに書かれている「本当っぽい裏情報」に見事に騙される。
  何とかハンバーガーの元アルバイトの話、とかを全て信じ始める。
6.泣ける話のスレッドなどを友達に勧めたりし始める。
7.企業叩きや宗教叩き、国家叩きの雰囲気に釣られて自分も叩きに参加する
  ○△産業なんてイラネ、とか、◇☆国民なんて死滅していいよ、とか言い出す。
〜長い期間〜
8.裏情報がウソだとわかり始める
9.ちょっと2ちゃんねるに対して冷静な見方が出来るようになる
10.ひろゆきの書き方を真似てみたりするですよ。。。
11.キャップもらう
12.飽きる
糸冬
)
405名無しさん@お腹いっぱい。:2010/03/26(金) 23:14:38 ID:j144pbQV0
>>404
なるほど
その手があったか
勉強になります
406名無しさん@お腹いっぱい。:2010/03/27(土) 04:43:59 ID:TtM97eig0
大きめのはクリップボード履歴とタスクリストとタイマーだな
407名無しさん@お腹いっぱい。:2010/03/27(土) 14:07:42 ID:tCpJ/fNP0
クリップボード履歴のスクリプトupお願いします
408名無しさん@お腹いっぱい。:2010/03/27(土) 15:41:25 ID:aucYu9xU0
しょうがねーな。ほれ。メモリの許す限り蓄積するぞ。

#SingleInstance, Ignore
#NoTrayIcon
#Persistent
ClipCount:=0
OnExit, OnClipboardChange
Return
OnClipboardChange:
Tooltip, % ClipCount++
ClipData%ClipCount% := ClipboardAll
Return
409名無しさん@お腹いっぱい。:2010/03/27(土) 15:42:38 ID:DlTzrVxy0
蓄積するだけで取り出しは書いてあげない408が素敵すぎる
410名無しさん@お腹いっぱい。:2010/03/27(土) 15:49:31 ID:9TcxDPgQ0
クリップボードいじるのは専用のソフトに任せた方がいいような
クリップボードチェーンが途切れて悲惨なことになりそう
411名無しさん@お腹いっぱい。:2010/03/27(土) 16:06:59 ID:TtM97eig0
履歴溜め込む方

OnClipboardChange:
if ( A_EventInfo != 1 ) ;使えなかったら無視
return
Menu, cliphis_menu, add ;メニュー初期化
Menu, cliphis_menu, deleteall
cliphis1 = %clipboard% ;クリップボード、ファイルから読み込む
FileRead, cliphis2 , %ahkexedir%\cliphis\1.txt
FileRead, cliphis3 , %ahkexedir%\cliphis\2.txt
StringLeft,cliphis_short1,cliphis1,40 ;メニュー名を作る
StringLeft,cliphis_short2,cliphis2,40
StringLeft,cliphis_short3,cliphis3,40
Menu, cliphis_menu, Add, 1 %cliphis_short1%, paste_from_cliphis ;メニュー生成
Menu, cliphis_menu, Add, 2 %cliphis_short2%, paste_from_cliphis
Menu, cliphis_menu, Add, 3 %cliphis_short3%, paste_from_cliphis
Menu, cliphis_menu, Add
Menu, cliphis_menu, Add, backup_these
FileDelete, %ahkexedir%\cliphis\1.txt ;ファイルを新しく作り直し
FileDelete, %ahkexedir%\cliphis\2.txt
FileDelete, %ahkexedir%\cliphis\3.txt
FileAppend , %cliphis1% , %ahkexedir%\cliphis\1.txt
FileAppend , %cliphis2% , %ahkexedir%\cliphis\2.txt
FileAppend , %cliphis3% , %ahkexedir%\cliphis\3.txt
cliphis1 = ""
cliphis2 = ""
cliphis3 = ""
return
412名無しさん@お腹いっぱい。:2010/03/27(土) 16:10:46 ID:HV6d/jtMP
; 選択文字列を検索したり開いたり
Clipboard_bk = %ClipboardAll%
Clipboard =
Send, ^c
ClipWait, 1
SplitPath, Clipboard, , dir, , , drive

; URL
StringLeft, protocol, drive, 6
IfInString, protocol, ttp:/
{
StringLeft, ch, protocol, 1
Run, % ch != "h" ? "h" . Clipboard : Clipboard
}
; ローカルディレクトリ
Else IfExist, %dir%
Run, %dir%
; Google検索
Else
{
word := UrlEscape(ClipBoard, URL_ESCAPE_SPACES_ONLY | URL_DONT_ESCAPE_EXTRA_INFO | URL_ESCAPE_UNSAFE)
Run, http://www.google.co.jp/search?q=%word%
}

Clipboard = %Clipboard_bk%

いつかどこぞのソースをパクってきていろいろ弄ってみたんだけどもっと圧縮できませんか?
413名無しさん@お腹いっぱい。:2010/03/27(土) 16:14:10 ID:TtM97eig0
履歴使う方

paste_from_cliphis:
StringLeft,cliphis_index,A_ThisMenuItem,1 ;選んだ番号を取得
FileRead, clipboardh , %ahkexedir%\cliphis\%cliphis_index%.txt ;それをファイルから読み込む
;StringTrimLeft, clipboardh, cliphis%cliphis_index%, 0
FileDelete , %ahkexedir%\cliphis\%cliphis_index%.txt ;読み込んだら消しちゃう
loop,2 ;クリップ履歴を一つ詰めるループ
{
cliphis_index_plus1 := cliphis_index + A_Index
;FileRead, cliphis%cliphis_index% , %ahkexedir%\cliphis\%cliphis_index_plus1%.txt
FileMove, %ahkexedir%\cliphis\%cliphis_index_plus1%.txt , %ahkexedir%\cliphis\%cliphis_index%.txt
;StringTrimLeft, cliphis%cliphis_index%, cliphis%cliphis_index_plus1%, 0
}
clipboard = %clipboardh% ;クリップボードに突っ込む。多分onclipchangeラベルが実行される
send,^v
return

backup_these: ;現在時刻のフォルダを作ってコピー
dir = %a_now%
FileCreateDir, %ahkexedir%\cliphis\%dir%
FileCopy, %ahkexedir%\cliphis\*.txt , %ahkexedir%\cliphis\%dir%\*.txt
return

メニュー表示
menu,cliphis_menu,show

仕様
履歴から貼り付けると、貼り付けたものクリップボードに格納されたままになる
一応重複はしないようになってる(貼り付けたものが先頭になるように順番が入れ替わる)
あ、%ahkexedir%とかいう変数使ってるから適当に変えてね
414名無しさん@お腹いっぱい。:2010/03/27(土) 17:21:49 ID:HV6d/jtMP
>>412
InStrとbetween見つけて自己レス
; URL
if pos := InStr(drive, "ttp://") between 1 and 2
Run, % pos == 1 ? Clipboard : "h" . Clipboard
415名無しさん@お腹いっぱい。:2010/03/27(土) 17:24:16 ID:aucYu9xU0
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 50 - March 27, 2010

* Improved flexibility of Object._Insert.
  - Object._Insert(x) - inserts x at _MaxIndex()="" ? 1 : _MaxIndex() + 1.
  - Object._Insert(i,x,y,z) - inserts x,y,z at i,i+1,i+2.
* Improved flexibility of Object._Remove.
  - Object._Remove(k) - removes and returns the value associated with k.
  - Object._Remove() - removes and returns the value at _MaxIndex().
* Added file share mode flags to FileOpen [by jackieku].
* Fixed: 'P' option of RegExMatch incorrectly output 1 for subpatterns which did not match anything.
* Fixed: Object._SetCapacity(key,n) was not null-terminating in some cases.
* Fixed: StatusBarGetText returned only half of the text in Unicode builds.

ゆとり文法追加キターーーーーーーーーーーー!!
416名無しさん@お腹いっぱい。:2010/03/27(土) 17:26:22 ID:DlTzrVxy0
>>412
行数減らしたいなら Ifの{ }の中を一行にまとめたら?
StringLeft ch → Run,% SubStr() 〜
Run,% "http://www.google.co.jp/search?q=" UrlEscape()


1行当たりの桁数は増えるから視認性は下がるかもしれんけど
417名無しさん@お腹いっぱい。:2010/03/27(土) 17:44:29 ID:HV6d/jtMP
>>416
どうもありがとう
だいぶすっきりした

Clipboard_bk = %ClipboardAll%
Clipboard =
Send, ^c
ClipWait, 1
SplitPath, Clipboard, , dir, , , drive

; URL
pos := InStr(drive, "ttp://")
If pos between 1 and 2
Run, % (pos == 1) ? ("h" . Clipboard) : Clipboard

; ローカルディレクトリ
Else IfExist, %dir%
Run, %dir%

; Google検索
Else
Run, % "http://www.google.co.jp/search?q=" UrlEscape(Clipboard, URL_ESCAPE_SPACES_ONLY | URL_DONT_ESCAPE_EXTRA_INFO | URL_ESCAPE_UNSAFE)

Clipboard = %Clipboard_bk%

return
418名無しさん@お腹いっぱい。:2010/03/27(土) 19:27:39 ID:ssrNGnPK0
>>383
>>415の share mode flag (共有モードのフラグ)を使えば
なんとかなるのでは?
419名無しさん@お腹いっぱい。:2010/03/27(土) 19:54:48 ID:aucYu9xU0
違うんじゃね?
例えば、「hoge」とだけ書いたスクリプトを実行する。当然エラーダイアログ出る。
OK押さないでダイアログ出しっぱなしにして、エディタで何か変更して上書き保存しようとすると
アクセスバイオレーションが起きる。
(メモ帳でも起きる)

スクリプトの読み込み時はロック外して欲しいって事じゃないかと。
420名無しさん@お腹いっぱい。:2010/03/27(土) 20:14:01 ID:m05zOFpG0
ttp://lukewarm.s101.xrea.com/myscripts/index.html
ttp://lukewarm.s101.xrea.com/myscripts/CommonArc.zip
流行らせるページの統合アーカイバDLL呼び出しで7-zip32.dllでファイル圧縮しようとしたんだけれどうまくできない
どうもAutoHotKey_Lでだけ失敗するみたいなんだけれどLで使うにはどうすればいいんでしょうか
421名無しさん@お腹いっぱい。:2010/03/28(日) 00:02:54 ID:Uz8SQ8mM0
ユニコード版つかってるんでしょ。 Str → AStr に変えるとか。
422名無しさん@お腹いっぱい。:2010/03/28(日) 00:05:31 ID:U5W8RY/s0
>>ID:TtM97eig0
ありがとう。全部テキストに保存するんだな
俺のはリストbox使ったやつだけど、ところどころ参考にさせてもらいますね
423名無しさん@お腹いっぱい。:2010/03/28(日) 00:12:24 ID:duLPpK6j0
>>421
ありがとうございます

CommonArc.ahk264行目
DllCall(ArcLibName_%type% . "\" . ArcLibPrefix_%type%, UInt,arcmyhwnd, Str,cmd, Str,out, UInt,size, Int)

DllCall(ArcLibName_%type% . "\" . ArcLibPrefix_%type%, UInt,arcmyhwnd, AStr,cmd, Str,out, UInt,size, Int)
でいけました!
本当にありがとう
424名無しさん@お腹いっぱい。:2010/03/30(火) 20:39:45 ID:1cxp4uU90
"g"キーを押したら"Ctrl"を"o"キーに割り当て
"g"以外のキーで元に戻るって動作をさせたいと思っています。

下記の状態で"Ctrl"を押して離すと "o"が入力されるのですが、
"Ctrl"を離さずに押しただけで"o"が入力されるようにするにはどうしたらよいのでしょうか?

ViMode = pen

#UseHook

g::
Send, %A_ThisHotkey%
ViMode = pen
return

Ctrl::
if ViMode <> normal
Send, o
if ViMode = normal
Send, {CTRL}
return

i::
if ViMode = normal
Send, i
if ViMode = pen
ViMode = normal
return

#UseHook off
425名無しさん@お腹いっぱい。:2010/03/30(火) 21:25:28 ID:FXOZjDP90
よくわからんが、AHK_L使う方が楽なんじゃね?

ViMode := "Pen"

Return

~G::ViMode:="Pen"

#If (ViMode="Pen")
Ctrl::o

; 解除用のキーを全部列挙する
0::
1::
2::
; (略)
A::
B::
C::
; (略)
 ViMode:="Normal"
 Return
426424:2010/03/30(火) 21:55:51 ID:1cxp4uU90
>>425
AHK_L使って理想通りの動作ができました!
ありがとうございます!
427名無しさん@お腹いっぱい。:2010/03/30(火) 22:01:19 ID:kArcewyf0
> ; 解除用のキーを全部列挙する
> 0::
> 1::
> 2::
> ; (略)
> A::
> B::
> C::

これって、スクリプトコードを汚さずに、スマートに記述する方法ってある?
0123456789を「0-9::」 みたいに定義できるといいんだけど、ないよね。

そのつどincludeするしかないのかな
428名無しさん@お腹いっぱい。:2010/03/30(火) 22:54:59 ID:b0GiC3jH0
>>427
SetList=qwertyuioasdfghjklzxcvbnm,.1234567890
Loop, Parse,SetList{
 hotkey,~%A_LoopField%,Remove
}

Remove:
 ViMode:="Normal"
Return

こんな感じでしょうか?
429428:2010/03/30(火) 22:57:04 ID:b0GiC3jH0
}の下にReturn入れるの忘れてた。
430名無しさん@お腹いっぱい。:2010/03/30(火) 23:52:29 ID:s/egiz8mP
DllCall("SetWindowsHookEx",〜〜KEYBOARD_LL)
してキーメッセージ監視するとか
でもスマートじゃないよね
431名無しさん@お腹いっぱい。:2010/03/31(水) 00:05:31 ID:rvWM8b5B0
>>428
おぉすごい!ありがとう参考になりました。
432名無しさん@お腹いっぱい。:2010/03/31(水) 00:32:17 ID:NLXLySxB0
>>430
LLフック使うのが確実だとは思うけど、フックを二重にかけるほどのことかというと…
AHK側でMouseLLなりKeyboardLLやってるんだから何とかならんのかなぁ
特に2ストロークキーとか、SandSあたりで苦労する。

LLフックの前処理ができる OnMessage() 相当のがあるといいんだけど。
433名無しさん@お腹いっぱい。:2010/03/31(水) 00:41:21 ID:m4xBxUQJP
NILScript使え
434名無しさん@お腹いっぱい。:2010/03/31(水) 16:54:39 ID:K/E9Th0b0
なんか、秀丸エディタ8.00にしたら IME_TOGGLE が効かなくなったんだけど
どうしたらいいんだこれ
435名無しさん@お腹いっぱい。:2010/03/31(水) 16:57:27 ID:fbZe31OK0
タブがトップウインドウじゃなくなってるよ
436名無しさん@お腹いっぱい。:2010/03/31(水) 17:15:10 ID:K/E9Th0b0
あ、なるほど。サンクス。
タブモードに互換性なんか出来てたのか。
437名無しさん@お腹いっぱい。:2010/03/31(水) 17:21:51 ID:md0d37GXP
-------------------------------------------------------
If( !(hinst:=DllCall("GetModuleHandle", "UInt", 0, "Uint")) )
{
MsgBox, インスタンスハンドルの取得に失敗しました
ExitApp
}

If( !(hicon := DllCall("Shell32\ExtractIcon", "UInt", hinst, "Str", "test.ico", "UInt", 0, "UInt")) )
{
MsgBox, アイコンの取得に失敗しました
ExitApp
}

If( !DllCall("User32\DestroyIcon"," UInt", hicon) )
MsgBox, アイコンの解放に失敗しました
-------------------------------------------------------

なぜかDestroyIconが失敗するんですが、AHK_Lのオブジェクトのように参照がなくなったらAHK側で勝手に解放したりしてるんですか?
438名無しさん@お腹いっぱい。:2010/03/31(水) 17:24:29 ID:rvWM8b5B0
興味のない人がスルーできるように、最初に何に使うスクリプトなのか最低限書けよ。
439名無しさん@お腹いっぱい。:2010/03/31(水) 17:37:50 ID:md0d37GXP
>>438
MsgBoxもあるし、ここの人なら一目で分かると思ったもので書きませんでした

ExtractIcon(http://msdn.microsoft.com/ja-jp/library/cc410841.aspx)
でアイコンファイルtest.icoを読み込んでhiconにアイコンハンドルを格納し
DestroyIcon(http://msdn.microsoft.com/ja-jp/library/cc410764.aspx)
でhiconのアイコンを開放するだけのスクリプトです
440名無しさん@お腹いっぱい。:2010/03/31(水) 17:57:14 ID:xzsqGHR70
>>439
" UInt"ってUの前にスペースがあるべ
441名無しさん@お腹いっぱい。:2010/03/31(水) 18:15:46 ID:2rQhWwbv0
>>434
秀丸8対応版 IME.ahk
ttp://www6.atwiki.jp/eamat/pub/MyScript/IME20091203.zip

トグル関数は無くなってるけど
IME_SET(~IME_GET() & 0x01)
でいけると思う
442名無しさん@お腹いっぱい。:2010/03/31(水) 18:18:23 ID:md0d37GXP
>>440
!!
は、はずかしぃー・・ありがとう
443名無しさん@お腹いっぱい。:2010/03/31(水) 18:34:12 ID:NLXLySxB0
>>441
IME_Set(!IME_Get())でいいんじゃね?どっちでもいいけど。

>>442
ErrorLevel とか A_LastError 見る習慣つけようぜ。
MsgBox, アイコンの解放に失敗しました : %ErrorLevel% , %A_LastError%
444名無しさん@お腹いっぱい。:2010/03/31(水) 23:44:08 ID:uAuXm7pe0
つまんねーミスあるよねw
まず自分の書いたコードを疑うことから始めないとダメだねw

オレもこないだDllCall使ったとき思い通りに動作しなくて
何時間も悩んで眠くなって寝て起きたら、
あっさりカンマ(,)が入ってないだけだったことに気付づいた。

速攻エディタでカンマを強調表示するようにしたw
445名無しさん@お腹いっぱい。:2010/03/31(水) 23:54:37 ID:NQ132Orm0
横レスだが

>>443
>IME_Set(!IME_Get())

これでトグルするのはいいね
446名無しさん@お腹いっぱい。:2010/04/01(木) 00:16:26 ID:/srGLvbO0
ttp://lukewarm.s101.xrea.com/0401.html
ttp://lukewarm.s101.xrea.com/AHK.png
AHKとは、「人類の科学技術が無限に発達し続ければ、いずれ時間を遡ることも可能になる」
という仮定に基づく科学崇拝的な宗教「AHKを流行らせる協会 (AHK wo Hayaraseru Kyoukai)」の略称です。


----
陰謀!陰謀!陰謀!
ttp://www.youtube.com/watch?v=8Htla_B1Z_E
447名無しさん@お腹いっぱい。:2010/04/01(木) 00:28:57 ID:dZXcWlEe0
えー・・・マジで閉鎖してしまうとは・・・リファレンス用のサイト作ったほうがいいかな?
448名無しさん@お腹いっぱい。:2010/04/01(木) 00:45:57 ID:BvzAPM0c0
ジョークでしょ
多分明日から復活する
449名無しさん@お腹いっぱい。:2010/04/01(木) 01:03:41 ID:BPch2Tvg0
AHKを勧めてその気にさせてからのポイ。
きっと、これは何かの陰謀や復習に違いない。
今回のこれは、NILScriptを勧めてその気にさせて
ポイする為の序章に過ぎないのかもしれない。
450名無しさん@お腹いっぱい。:2010/04/01(木) 01:05:56 ID:vYSKPV+f0
毎年恒例って感じだね
451名無しさん@お腹いっぱい。:2010/04/01(木) 02:10:45 ID:pGKB6QgEP
管理人氏が本気なのかジョークなのかわからないので、
コマンド参照用としてミラーサイトを作りました。

http://ahk.xrea.jp/

今回の閉鎖の動きが、はやらせるページ管理人氏のジョークだったら恥ずかしいですが、
仮にジョークだったら、AHK_L の差分を解説する用途のwikiにでもリニューアルします
452名無しさん@お腹いっぱい。:2010/04/01(木) 02:18:12 ID:cbRVFlC50
ジョークって書いてあるじゃん
気が早いんじゃないの?


「AutoHotkeyを流行らせる気なんて最初から無かったページ」に変わってるw
453名無しさん@お腹いっぱい。:2010/04/01(木) 03:05:47 ID:zFNImjnC0
>「AutoHotkeyを流行らせる気なんて最初から無かったページ」に変わってるw

これはちょっと前からそうなってた
多分、ジョークはAHKにようこそ!の部分だけだと思うぞ
454名無しさん@お腹いっぱい。:2010/04/01(木) 03:10:14 ID:HZoeRKZJ0
掲示板のレスまでネタフリだったら笑うけど、それはないだろうしなぁ
455名無しさん@お腹いっぱい。:2010/04/01(木) 03:36:04 ID:KOks0NXIP
去年はng.exeをネタと見せかけて本当に開発し続けていたから、
今年は「AHKを流行らせる協会」を本気で発足させる気だな
456名無しさん@お腹いっぱい。:2010/04/01(木) 10:39:52 ID:EhVhEAdm0
流行らせるページのエイプリルネタは毎年不発だったからなぁ
今年の前ふりは乗ってあげないとまじで閉鎖するよって脅しとみた
ここまでやってスルーされたら流石に立つ瀬ないだろうしな
457名無しさん@お腹いっぱい。:2010/04/01(木) 17:40:21 ID:vduE6EI70
質問させてください。
ゲームパッドでマウスを動かすソースに、
「カーソルを動かせる数十pixの範囲を画面中心部に作りたい」のですが、
そういうことは可能でしょうか?
ゲームパッドでソースをとりあえず貼り付けておきます。

settimer,getkey,10
return

getkey:
getkeystate,x,JoyX
getkeystate,y,JoyY
x-=50
y-=50
;======遊びの設定。勝手にカーソルが動くのを防止(アナログ用)
if y*y<2
y=0
if x*x<2
x=0
;======カーソルの移動スピード。大きくすると遅くなります
x:=x/5
y:=y/5

mousemove,%x%,%y%,0, R
return

///////////////////
458名無しさん@お腹いっぱい。:2010/04/01(木) 18:47:39 ID:PWemO9pF0
>>457
MouseGetPos
459名無しさん@お腹いっぱい。:2010/04/01(木) 19:14:39 ID:vduE6EI70
>>458
ありがとうございます!
がんばってみます
460名無しさん@お腹いっぱい。:2010/04/02(金) 10:04:00 ID:kkoLo5tq0
例のサイトが完全に元に戻った
461名無しさん@お腹いっぱい。:2010/04/02(金) 10:20:44 ID:QuKuY4zJP
それでも日本語ライブラリと産物は残してくれたんだありがてえ
AHKのコマンド形式のコーティングに違和感があったからNILに興味があるけど・・・MouseGesture.ahkが便利すぎて移行できないw
462名無しさん@お腹いっぱい。:2010/04/02(金) 11:59:35 ID:nH5KnNZB0
跡地になっとるな
463名無しさん@お腹いっぱい。:2010/04/02(金) 13:01:44 ID:DkE3vK9o0
【JavaScript系】 NILScript 【AutoHotkey風】
http://pc12.2ch.net/test/read.cgi/tech/1270139718/

プログラム板にNILScriptスレが立ったけど、書き込み無いな
464名無しさん@お腹いっぱい。:2010/04/02(金) 13:44:57 ID:gmP6Nrxc0
NILScriptは今後主流になっていくであろうx64対応しそうにないのがなあ・・うーん



AHKのトレイアイコンを左クリック、右クリック、中クリックした際の動作を設定することってできませんか?

左クリックは
Menu, Tray, Add, Label_LeftClick
Menu, Tray, Default, Label_LeftClick
Menu, Tray, Click, 1
という少し強引な方法で実現できたのですが、これだと中クリックや右クリックは設定できないようで・・
465名無しさん@お腹いっぱい。:2010/04/02(金) 14:00:35 ID:Ow2xXzLXP
64ビット版Windowsでもほとんどの32ビットプログラムは動作するんじゃないのか
非対応ってのは、試しもせずに文句だけ言っている低脳が寄ってこないようにするための建前だろ
466名無しさん@お腹いっぱい。:2010/04/02(金) 14:07:42 ID:5kicJ1/k0
スレ建ったんならそっちでやればいいのに
467名無しさん@お腹いっぱい。:2010/04/02(金) 14:58:55 ID:RvTptjDT0
あと100ページくらい。ガイダンス系のページは未着手が多い。
http://sites.google.com/site/autohotkeyjp/

共同オーナー、共同執筆者募集
468名無しさん@お腹いっぱい。:2010/04/02(金) 15:48:08 ID:nH5KnNZB0
>>467
乙です
公式とLの説明を同一ページで見れるようになると便利になりますね
AutoHotkey_Lの訳を.chmにマージしようかと思ったけど
絶対リンク群の前にあえなく撃沈した

Googleのページの仕様はよくわからんのですが、ローカルで参照しやすいように
相対リンクで構築していただけると嬉しいかなとか言ってみるテスト
469名無しさん@お腹いっぱい。:2010/04/02(金) 17:16:31 ID:RvTptjDT0
相対で書いてるけど、出力時には絶対になるみたい。
CSSも使えないし、いいこと無いけど、
やる気がなくなったらそのまま誰かに移管できるし、
広告だらけのWikiよりかはマシかと。
470名無しさん@お腹いっぱい。:2010/04/03(土) 09:50:26 ID:m1BInSMvP
スクリプトをアップロードしてみたいんだけれどどこにうpすればいいのかな
流行らせるページのアップローダーなくなっちゃったし
471名無しさん@お腹いっぱい。:2010/04/03(土) 15:04:48 ID:U9WSSzwX0
>>469
サーバー側の問題なんですか。
作り直しは大変だし、流行らせるページはCSSだけ独自で
基本は公式の加工っぽかったから、そういう感じで過去の資産に
盛り足していくだけで済めば楽かなって思ってたんですが。
共有が楽にできて普通にページ作れる鯖があればいいのかな
472名無しさん@お腹いっぱい。:2010/04/04(日) 07:22:11 ID:HL8Ui0tOP
尼にきてたら即ポチの勢いなのに!
473名無しさん@お腹いっぱい。:2010/04/04(日) 07:24:11 ID:HL8Ui0tOP
おもいっきり誤爆した……
474名無しさん@お腹いっぱい。:2010/04/04(日) 09:58:26 ID:HL8Ui0tOP
誤爆だけではなんなので……

>>469
Google App Engine
http://code.google.com/intl/ja/appengine/
なら、無料で自由度の高いウェブサイトが作れるみたい
CSSで装飾やらPythonやJavaでアプロダ等実装とか、
ホスティングサーバ並にいろいろできるらしいです
使う機会がないので、完全に推測ですが

↓Google App Engineでホムペ作成の解説
http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.htm
475名無しさん@お腹いっぱい。:2010/04/04(日) 14:48:16 ID:gXHlhS6G0
ローカルで見たいならダウンローダ使えばいい
うpはGitHubのgist使え
476名無しさん@お腹いっぱい。:2010/04/05(月) 21:02:42 ID:YHmrFkjCP
ttp://up3.viploader.net/pc/src/vlpc002614.jpg
ttp://www1.axfc.net/uploader/File/so/41632.zip

たすくとれいな。が64bitアプリを格納してくれなかったからパクってみた
アイコンはぶっこぬいてるから代わりのもの入れてます
477名無しさん@お腹いっぱい。:2010/04/05(月) 22:38:18 ID:FEdRCL/n0
>>475
いや絶対リンクになってるからダウンローダで落としただけじゃローカルで見れないって話

<a href="reference.html">リファレンス</a>

<a href="http://sites.google.com/site/autohotkeyjp/reference">リファレンス</a>
になっちゃってるから
grep置換の他にファイルリネーム( .html付加) もしないとあかんぽい
478名無しさん@お腹いっぱい。:2010/04/06(火) 08:26:26 ID:K4+ZDs9YP
サイトの構造ごと取得できるダウンローダ使えって事でしょ
リンクの置換まで自動でしてくるよ
479名無しさん@お腹いっぱい。:2010/04/06(火) 15:24:18 ID:0o43ThfSP
AHK_Lマルチスレッド対応しないかな
そうすれば常駐系スクリプトをひとつに纏めるのが楽になるのに
480名無しさん@お腹いっぱい。:2010/04/07(水) 11:04:39 ID:u2vKf/9SP
スクリプトうpの流れまだー
481名無しさん@お腹いっぱい。:2010/04/07(水) 13:20:47 ID:OyZ3fpSB0
スクリプトが見たけりゃ、NILScriptのBase.ngでも見てろ
482名無しさん@お腹いっぱい。:2010/04/07(水) 14:47:49 ID:NQWSj7oWP
AHKでTwitterAPIを使用できますか?

もしかしてそれこそNILScriptですか
483名無しさん@お腹いっぱい。:2010/04/08(木) 05:59:28 ID:hC5J4Txp0
ダメ文字の置換について教えて下さい。
"チ"がダメ文字で、以下を実行すると文字化けします。
test1=たチうお
StringReplace, test2, test1, チ, ち, All
MsgBox,%test2%

"たちうお"と表示させるのが目的です。
しかし、以下のようにテキストファイルから読み込めば正常でした。

3.txtの中身 たチうお
4.txtの中身 チ
FileRead, test3, %A_WorkingDir%\3.txt
FileRead, test4, %A_WorkingDir%\4.txt
StringReplace, test5, test3, %test4%, ち, All
MsgBox,%test5%

スクリプトに直接ダメ文字を書いたらいけないだけで、
それが含まれるテキストファイルを扱う事は何ら問題のないことなのでしょうか?
それとも、この例がたまたま成功してるだけですか?
484名無しさん@お腹いっぱい。:2010/04/08(木) 14:02:07 ID:43HdikQa0
>>483
前者。
AutoHotkey_L使うといいよ。
485名無しさん@お腹いっぱい。:2010/04/08(木) 14:23:34 ID:eIyngg9H0
AutoHotKeyのスクリプトが、AutoHotKey_Lでも使えるのは知ってるけど、
"いかなるスクリプトでも"、互換性が確保されるの?
486名無しさん@お腹いっぱい。:2010/04/08(木) 14:28:30 ID:ct0orxRV0
>>485
ユーザーレベルでは、その質問に断言できる人はいないんじゃないかなぁ
とりあえず自分ところでは全てのスクリプトが動いてるけど
487名無しさん@お腹いっぱい。:2010/04/08(木) 15:13:10 ID:6e1fudI/0
>>485
とりあえず試してみればいいだろ。
488名無しさん@お腹いっぱい。:2010/04/08(木) 15:25:37 ID:w8ivIEk+0
とりあえず試しただけじゃ>>485の答えは出ないと思う。
489名無しさん@お腹いっぱい。:2010/04/08(木) 15:54:30 ID:6e1fudI/0
>>488
まさか本気で「いかなるスクリプトでも」使えるかどうか知りたいわけじゃないだろ。
>>485が使ってるスクリプトは全部」ってことだと思うんだけど。
490名無しさん@お腹いっぱい。:2010/04/08(木) 16:12:55 ID:K7jK11kt0
491名無しさん@お腹いっぱい。:2010/04/08(木) 17:56:49 ID:P4p5ofhz0
Autohotkey_Deathをつくるか…
492483:2010/04/08(木) 18:59:59 ID:hC5J4Txp0
>>484
どもです。参考にします。
493名無しさん@お腹いっぱい。:2010/04/09(金) 03:17:59 ID:xoiS5pAh0
>>491
派生版作るならいっそ言語仕様から丸ごと作り直してくれ
494名無しさん@お腹いっぱい。:2010/04/09(金) 07:38:33 ID:zTX93Gi50
つnil script
495名無しさん@お腹いっぱい。:2010/04/09(金) 17:34:42 ID:wfhMvOvnP
ttp://www1.axfc.net/uploader/File/so/41806
TTBaseのWinSnap.dllがWin7x64でうまく動かなかったのでAHKに移植してみたのですが
SetWinEventHookでEVENT_SYSTEM_MOVESIZESTART〜EVENT_SYSTEM_MOVESIZEENDを指定しても
ウィンドウリサイズ中や移動中にスナップされません
こういうのはSetWindowsHookExでないとだめなのでしょうか
496名無しさん@お腹いっぱい。:2010/04/09(金) 19:10:06 ID:/9xQoQhs0
名前の通り開始と終了しか捕らえないよ。
おれは似たようなの組んでるけど、↓みたいなので代用。

STARTで
 Flag:=True
 SetTimer, SubName -1
ENDで
 Flag:=False
XXXで
 SetWinDelay,-1
 While (Flag) {
  WinGetPos〜
  ; 〜 何か 〜
 }
 Return
497名無しさん@お腹いっぱい。:2010/04/09(金) 19:18:00 ID:wfhMvOvnP
>496
なるほど!タイマーがありましたね
その方法でやってみます
ありがとうございます
498名無しさん@お腹いっぱい。:2010/04/11(日) 12:30:43 ID:PtBZ3B5x0
人によっては便利かもしれない。_L 専用

sprintf(format, type, value, length=100) {
 VarSetCapacity(buff, length*(A_IsUnicode ? 2 : 1), 0x00)
 DllCall("msvcrt\sprintf", "Ptr", &buff, "AStr", format, type, value)
 Return StrGet(&buff, length, "CP0")
}


499名無しさん@お腹いっぱい。:2010/04/11(日) 13:29:45 ID:yzOWBmLa0
num=151
Transform, outStr, Deref, りんごが`n%num%個`nあります
MsgBox, %outStr%
みたいなの?
500名無しさん@お腹いっぱい。:2010/04/11(日) 14:02:39 ID:PtBZ3B5x0
まぁそんな感じ。書式文字列は sprintf でググればいくらでも見つかる

ex) 6桁の16進数、先頭ゼロ埋め
MsgBox, % sprintf("0x%06x", "Int", 100)


じつは引数はいくらでも取れるんで、↓みたいなのもOK
(こっちはユニコード版じゃ動かない)

VarSetCapacity(result, 100, 0)
DllCall("msvcrt\sprintf", "Str", result
 , "Str", "%04d/%02d/%02d %02d:%02d:%02d"
 , "Int", 1
 , "Int", 2
 , "Int", 3
 , "Int", 4
 , "Int", 5
 , "Int", 6
 , "CDecl")
MsgBox, % result
501名無しさん@お腹いっぱい。:2010/04/13(火) 02:04:22 ID:V7MrCvX40
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 51 - April 11, 2010

* Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.
* Changed: Default to UTF-8 for script files; override with /CPnnn.
* Fixed: Unpause when the script exits so that object __Delete meta-functions can run.
502名無しさん@お腹いっぱい。:2010/04/13(火) 08:35:46 ID:5ioffYpL0
>* Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.
AutoHotKey_L.exeならAutoHotKey_L.ini/ahkを
AutoHotKey_Unko.exeならAutoHotKey_Unko.ini/ahkを読み込むってこと?
503名無しさん@お腹いっぱい。:2010/04/13(火) 09:18:08 ID:dZ191QIO0
そうみたい。だが…

コマンドライン引数で /CP932 とか指定してやらないと SJIS で読んでくれなくなった。

UTF-8としてコード判断するんで、スクリプト内に記述してある全角はおかしくなる。
(インクルードファイル名に全角があると起動しない、表示用なら化ける)

レジストリで何とかなるけど、結構致命的だなぁ…


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AutoHotkeyScript\Shell\Open\command]
@="\"C:\\Program Files\\AutoHotkey\\AutoHotkey.exe\" /CP932 \"%1\" %*"
504名無しさん@お腹いっぱい。:2010/04/14(水) 21:10:33 ID:HNVMdHn+0
A_EventInfoとかいう謎変数の詳しい情報はどこにありますか?
505名無しさん@お腹いっぱい。:2010/04/14(水) 21:28:35 ID:z/VpNdtM0
>>504
付属のHelp(英語)
506名無しさん@お腹いっぱい。:2010/04/14(水) 22:38:47 ID:HNVMdHn+0
>>505
流行らせるページとかばかり見てた
そういえばヘルプあったんだ・・
ありがとう
507名無しさん@お腹いっぱい。:2010/04/15(木) 23:29:33 ID:QBXSGiwD0
_LのUnicode版Rev49と51しか確認できてないんだけど
UrlDownloadToFile, http://www.google.co.jp/, test.txt
GETはしてるけどファイルに書き出してくれない
ANSI版はOK
なんでー
508名無しさん@お腹いっぱい。:2010/04/17(土) 01:08:33 ID:nnvYjwJTP
NILScriptのHotstrokesがなかなか良さげだね。
モディファイアもShiftなどの名前で指定するから分かりやすい。
509名無しさん@お腹いっぱい。:2010/04/17(土) 03:19:41 ID:fujcwiQOP
NILScriptは言語としての整合性に設計を振りすぎで、
本人が言うように、AutoHotKeyをなんとなく使ってるような人には合わないんじゃないかな
美しさのためなら面倒な記述になってもいいとは、プログラマ以外はまず思わないw

現状だとシンタックスシュガーもなくてjavascriptのままみたいだから、
それなら.NETやXULRunnerやwxWidgetsとかの既存環境向けに、
NILScriptみたいな入力補助ライブラリを作った方が、
スレッドやGUIや通信周りとかも比較にならないくらい充実してるし、
無料で高機能IDEもあるからいいんじゃね、とか

AutoHotKeyは数文字でリマップできますとか、気軽に書ける部分が多いから
設計がツギハギで複雑なことをしようとして死にかけても、やっぱり離れにくい
510名無しさん@お腹いっぱい。:2010/04/17(土) 03:31:11 ID:kTPqjaTh0
自分しか使わないヤツぐらいくっちゃくちゃに書いてやりたいよねっ
511名無しさん@お腹いっぱい。:2010/04/17(土) 03:52:43 ID:Fmb9IhH10
貯金没収されたうえに、言葉の通じない国へ放り出されるようなもんだな。
512名無しさん@お腹いっぱい。:2010/04/17(土) 05:44:31 ID:OvLP2DGk0
プログラマのオナニーか
513名無しさん@お腹いっぱい。:2010/04/17(土) 08:33:19 ID:vGUFTbue0
まあでも使ってるうちに別の綺麗な構文のスクリプトに移りたくなる気持ちはわからんでもないw
彼の場合それがなかったから自作してしまっただけであって
514名無しさん@お腹いっぱい。:2010/04/17(土) 08:34:37 ID:V7FFxO+xP
nilは64bit対応してくれないと
便利そうは便利そうだけど自分の環境で動かないもの覚えても仕方ないし
515名無しさん@お腹いっぱい。:2010/04/17(土) 08:43:23 ID:nnvYjwJTP
実行してエラーメッセージの一つでも報告してから言え
516名無しさん@お腹いっぱい。:2010/04/17(土) 08:56:10 ID:8AR9Y99e0
64bit 64bit 64bit 64bit 64bitってひたすら言ってるやつが1人いるけど、
実機で動かしてダメだったという報告が1件もない件
517名無しさん@お腹いっぱい。:2010/04/17(土) 09:06:06 ID:V7FFxO+xP
何人もいるのはそれだけ要望が多いってことでしょ
keyboard_hook.ngとかエラーメッセージすらでないでnilトレイアイコンが消失する

Win7の64bit買って自分で試してみたら?
518名無しさん@お腹いっぱい。:2010/04/17(土) 09:07:57 ID:nnvYjwJTP
トレイアイコンが消失するなら正しく起動して正しく終了してるんじゃないか
519名無しさん@お腹いっぱい。:2010/04/17(土) 09:18:05 ID:V7FFxO+xP
>エイリアス名が用意されているキーの一覧を表示した後、
>キーフックでキーを監視し、情報を表示します。
keyboard_hook.ngより
情報表示せずに勝手に終了されるとちょっと困る
520名無しさん@お腹いっぱい。:2010/04/17(土) 09:25:31 ID:nnvYjwJTP
まさかコマンドプロンプトで実行せずにメッセージが出ないとか言ってないよな?
install.batは動いたのか?
521名無しさん@お腹いっぱい。:2010/04/17(土) 09:59:53 ID:8BXvYXnE0
こっから派生してるもんだし、多少の話題はいいと思うけどちょっと引っ張りすぎ
もう専スレ立ってんだから不具合報告はそっちでやったら?

【JavaScript系】 NILScript 【AutoHotkey風】
http://pc12.2ch.net/test/read.cgi/tech/1270139718/
522名無しさん@お腹いっぱい。:2010/04/18(日) 10:33:26 ID:QSQg4LkiP
ttp://www1.axfc.net/uploader/File/so/42274
タイトルバーミドルクリックで画面半分に最大化してもう一度ミドルクリックで元に戻すスクリプトうp
obj._GetAddressの使い方がやっとわかった
523名無しさん@お腹いっぱい。:2010/04/18(日) 18:41:08 ID:Y1MCxpAJ0
まぁ、最初は用途がピンと来ないな。

VarSetCapacity(var, size) で変数に確保して DllCall で"Ptr", &var と渡すところが
obj.SetCapaciry(fieldName, size) して "Ptr", obj._GetAdress(fieldName) なだけだけど

GlobalAlloc でも同じ事ができるが手動でfreeしなきゃいけない、一方で、
フィールドにメモリ割り当てだと、オブジェクトの破棄時に解放してくれるから楽だな
524名無しさん@お腹いっぱい。:2010/04/22(木) 05:11:35 ID:UQ/y+TrG0
すみません、質問です。
GUIで作ったウィンドウを移動させた時にその位置を記憶して、AHKを再起動した時に
同じ場所に表示させるにはどうすればいいのでしょうか?

位置情報を逐次ファイルに保存する、ってイメージはあるのですが
ウィンドウを動かす度にアクションを起こさせるにはどうすればいいのかがわかりません…
525名無しさん@お腹いっぱい。:2010/04/22(木) 09:14:22 ID:i9M0fvIn0
#SingleInstance, Force
#NoEnv
SetWorkingDir %A_ScriptDir%
Dirs = XYWH
Loop, PARSE, Dirs
 IniRead, Gui%A_LoopField%, gui.ini, window, %A_LoopField%, 100
OnExit, OnExitSub
Gui, +Resize
Gui, Show, x%GuiX% y%GuiY% w%GuiW% h%GuiH%
OnMessage(0x232, "WM_EXITSIZEMOVE")
Exit
WM_EXITSIZEMOVE(wParam,lParam,msg, hwnd) {
 global GuiX, GuiY, GuiW, GuiH
 If (A_Gui==1) {
  VarSetCapacity(rect, 4*4)
  WinGetPos, GuiX,GuiY,,,ahk_id %hwnd%
  DllCall("GetClientRect", "UInt",hwnd, "UInt",&rect)
  GuiW:=NumGet(rect, 8), GuiH:=NumGet(rect, 12)
 }
}
OnExitSub:
Loop, PARSE, Dirs
 IniWrite, % Gui%A_LoopField%, gui.ini, window, %A_LoopField%
GuiClose:
 ExitApp
526名無しさん@お腹いっぱい。:2010/04/22(木) 10:27:46 ID:0q7ogA310
>>524
>位置情報を逐次ファイルに保存する、ってイメージはあるのですが
>ウィンドウを動かす度にアクションを起こさせるにはどうすればいいのかがわかりません…

525ですでに解法出てるみたいだけど
GUICloseで閉じる直前に位置情報保存じゃあかんの?
527名無しさん@お腹いっぱい。:2010/04/22(木) 16:53:28 ID:avTD2U5U0

R::
PostMessage,0x111,32791,0,,A ;red
return

上は
ワードパッドがアクティブなときに
文字を赤くするボタンを押す
命令なんですが


windows7 64bitでも動きますでしょうか?
528名無しさん@お腹いっぱい。:2010/04/22(木) 17:34:55 ID:QBwRmYbs0
ワードパッドの構造違うのでそのままでは動きません
529名無しさん@お腹いっぱい。:2010/04/22(木) 17:46:25 ID:avTD2U5U0
ありがとうございます
リソースハッカーとかそういうツールで
命令番号を調べるのは有効なんでしょうか?
530名無しさん@お腹いっぱい。:2010/04/22(木) 17:53:37 ID:avTD2U5U0
一応動くみたいですね
ありがとうございました
531名無しさん@お腹いっぱい。:2010/04/22(木) 21:59:11 ID:UQ/y+TrG0
>>525
ありがとうございます! なるほどWM_EXITSIZEMOVEかー
>>526
そっか、それでもイケそうですね…
532名無しさん@お腹いっぱい。:2010/04/25(日) 03:07:28 ID:lmTkYw+50
行単位ではなく、ピクセル単位や%によるスクロールって可能ですか?
スクロールを
Count := スクロール行数
Loop, %Count% {
SendMessage,0x115,0,0,%FocusedControl%,A
}
こういう感じで実現させていますが、もっと滑らかにスクロールさせたいので。
533名無しさん@お腹いっぱい。:2010/04/25(日) 03:12:25 ID:ZsFXhllo0
Vista以降で且つソフトが無段階スクロール対応なら出来るんじゃないかな?
ちなみにMacは標準で無段階スクロールらしい。
534名無しさん@お腹いっぱい。:2010/04/25(日) 03:27:48 ID:GSfIE+oz0
それだと wParam = 0 なんで SB_LINEUP だから▲クリックしたのと同じなんで荒いスクロールになる事が多い。
スクロールバーの▲をクリックしたらどれだけスクロールするかってのはモノによってまちまちなんで何とも言えないけど、
ぬるぬるスクロールさせるにはスクロールバーのサム(つまみ)のドラッグをエミュ(SB_THUMBPOSITION)するのがいいと思う。
IEとかFirefoxじゃ無理だけどね
535名無しさん@お腹いっぱい。:2010/04/25(日) 04:23:54 ID:lmTkYw+50
参考になりました。どうもありがとう。
FirefoxのアドオンのGrab and Dragをすべてのソフトに対応できるような
スクリプトを実現したくて頑張っているのですが、今のやり方だとスクロールが
がたがたなのでいまいちなのです。これって需要ありますかね?
536名無しさん@お腹いっぱい。:2010/04/26(月) 17:00:20 ID:K9+BHEbL0
>>535
うp
537名無しさん@お腹いっぱい。:2010/04/26(月) 18:44:34 ID:IhrBVXQB0
RegExMatch()の質問です
三文字とカンマから構成される不定長のデータから
カンマで区切ったデータを個別に取得したいのですが
はやらせるページにあった「正規表現」の再帰呼び出しの説明を読んでも
よくわかりません
こんなデータです↓

5bc,mn9
h7j,c2e,xyz

再帰呼び出しを使ってこういうデータの取り出し方を教えてください
538名無しさん@お腹いっぱい。:2010/04/26(月) 19:19:35 ID:D3esYNir0
そんな単純なデータならLoop,PARSEで十分じゃないかな
539532:2010/04/26(月) 19:59:57 ID:WvtWhaZN0
アップしてみます。
↓から二つの.ahkファイルを落として同じディレクトリに置いてください。
http://alhena.jpn.org/temporary/

使い方:
GrabAndDragAlt.ahkを起動した状態で
スクロールしたいウィンドウ上でマウスの中ボタンを押しながら左ボタンでドラッグしてください。うまくいけばスクロールします。
スタイラスのサイドスイッチに中ボタンを割り当てて使うことを想定しています。
感想頂ければ嬉しいです。
540532:2010/04/26(月) 20:12:32 ID:WvtWhaZN0
追記:
・まだ未完成です。気に入ってくれた方は改良してください。
・慣性スクロールは今のところ効果ありません。
・SendMessageで行スクロールを送っているだけなので効き目のないソフトがたくさんあります。>>534さんの言う方法でスクロールを実装すればいいのかも。
541名無しさん@お腹いっぱい。:2010/04/26(月) 20:50:11 ID:K9+BHEbL0
>>539
ありがとう!使ってみる
542名無しさん@お腹いっぱい。:2010/04/28(水) 13:00:46 ID:K4lTMfUm0
GetScrollInfoがnonexistent functionと言われてしまうのですが、原因がわかりません。
System32を調べましたが、user32.dllはちゃんとありました。
543名無しさん@お腹いっぱい。:2010/04/28(水) 13:46:48 ID:C4v90lT80
nonexistent function と怒られている時点でAHKの文法エラーじゃないの
544名無しさん@お腹いっぱい。:2010/04/28(水) 20:00:30 ID:pT64GNBZ0
>>542
API関数をそのまま呼び出してるとか
DllCall()を使ってるかい?
545名無しさん@お腹いっぱい。:2010/05/01(土) 18:12:23 ID:AQaJ8wbo0
猫まねきから移行してきた新参者です。

以下のようにWindows上でUnixキーバインドを実現しているのですが、

^p::Send {Up}
^n::Send {Down}
^b::Send {Left}
^f::Send {Right}

ある特定のソフト上(MeadowやCygwin等)では既にこれが実現されているため、オフにしたいわけです。
そこで、以下のようにしてみたのですが、なぜかSuspendしてくれません。

#IfWinActive ahk_class MEADOW

Suspend

#IfWinActive

どうしたら良いんでしょうか?
546名無しさん@お腹いっぱい。:2010/05/01(土) 18:34:01 ID:1YBW2djiP
#IfWinNotActive ahk_class MEADOW
^p::Send {Up}
^n::Send {Down}
^b::Send {Left}
^f::Send {Right}
#IfWinNotActive

でahk_class MEADOW以外がアクティブの時にだけキーバインドを有効にできるよ
547名無しさん@お腹いっぱい。:2010/05/03(月) 03:46:42 ID:FjaDZoD50
>>546
ありがとうございます。
>>545に書いた課題は確かにそれで解決できますね。
ただ欲を言うと、Meadowを使っているときでも、
IME起動中はキーバインドを有効にしたいんです。
猫まねきではこれが簡単に設定できるんですよね。
AutoHotkeyでこれを実現するためには、
IME.ahkを利用すればできそうなので、これから考えてみます。
548名無しさん@お腹いっぱい。:2010/05/05(水) 17:59:01 ID:p4+qLWv00
^%A::
   IfWinExist, MyApp
   {
     WinActivate
   }
   else
   {
     Run,MyApp.lnk
   }

これって一行にまとめられないの?

^%A:: IfWinExist,"MyApp"{WinActivate}else {Run,MyApp.lnk}

とかやってもダメっぽい…
関数化するしかないのかな
549名無しさん@お腹いっぱい。:2010/05/05(水) 18:06:45 ID:ba4R2TEH0
下のほうは、可読性の観点から、全く見にくいのだけど、そんなに圧縮してなにがしたいの?

せめて大括弧をつけないで書くのが限界だろう
550名無しさん@お腹いっぱい。:2010/05/06(木) 09:37:10 ID:2GhWVI2d0
ControlSendで{Asc xxxxx}は使えないのかな?
Sendだと普通に文字が入力されるんだけどControlSendだとダメだった
551名無しさん@お腹いっぱい。:2010/05/06(木) 09:40:31 ID:XdiadIL40
結局こうなった

Launch(command, caption = "dummmmmmy")
   ; アプリケーションを起動する
   ; command: 起動するアプリケーションを指定する
   ; caption: 見出しを指定し、マッチするウィンドウがあったら新たに起動せずアクティブにする。指定しなかった場合は無条件に起動される。
   ; 例: Launch("calc.exe", "電卓")
{
   IfWinExist,%caption%
   {
     WinActivate
   }
   else
   {
     Run,%command%
   }
}

+F11:: Launch("notepad.exe", "無題 - メモ帳")+Launch("calc.exe")

>そんなに圧縮してなにがしたいの?
ランチャの定義ファイルとしてなるべく簡潔に書きたかったんだよね
("")が邪魔くさいけどそこそこ満足
552名無しさん@お腹いっぱい。:2010/05/06(木) 10:06:50 ID:XpQC/rEr0
どうしても1行にしたいなら、コマンドを関数化して三項演算子でやりゃいいけど意味がない
553名無しさん@お腹いっぱい。:2010/05/06(木) 10:28:32 ID:w88eJQIgP
常駐スクリプトのホットキー処理を関数化すると無駄なグローバル変数が減って美しい
554名無しさん@お腹いっぱい。:2010/05/07(金) 01:26:51 ID:YqDfIqgLP
おしえてください。現在のアクティブのアプリ毎に
実行するスクリプトの一覧をguiのランチャのように配置して
それをそれぞれ別ものとして分けたいのですが、

最初に立ち上げたほうの設定にあるguiのメニューが、
後にたちあげたほうのランチャにあるguiのメニューにさっき
のランチャのサブメニュー項目が追加されてしまいます。
(例:最初にランチャをたちあげる。→ Gui, Submitでguiを消す
→違うアクティブウインドウ限定で設定してるguiランチャをたちあげる
→最初にたちあげたランチャのサブメニュー項目が引き続きのこっていて
メニュー項目がいっぱいになる)


どうやれば、サブメニュー項目が一緒にならないようにできますか?
おしえてください
555554:2010/05/07(金) 01:53:55 ID:YqDfIqgLP
自己解決しました。
menuのあとのMenuNameを変えるのを
知りませんでした。
556名無しさん@お腹いっぱい。:2010/05/08(土) 22:36:39 ID:UJnO+6BR0
guiのtext で複数行を書いてみたら行間が詰まって読みにくいことがわかりました。
cssの line-height のように行間を広げたいのですが
autohotkeyでそんなコマンドやオプションはありますか
557名無しさん@お腹いっぱい。:2010/05/09(日) 10:34:14 ID:fh9BYrXNi
基本的にはStaticコントロールはラベル表示用のもので、
文章を綺麗に表示する機能は無い。
AHKでサポートされるコンポーネントだけでやるなら、
文を行末でぶった切って複数のstaticに分けて
コントロールの配置でどうにかせにゃならん

>>10にあるリンクから標準以外のコンポーネントの
リッチテキストやIEコンポを使えばそれなりの見栄えに
する事はできるけど、かなり面倒。
558名無しさん@お腹いっぱい。:2010/05/09(日) 15:09:04 ID:1sIfEARs0
RegExMatchの正規表現をつかって、
{の前の文字列と{}の間の文字列を取り出したいのに、なぜかうまくできません。
正規表現の書き方が間違っているなら教えて下さい。


test := "test{testval1`r`n`ttestval2}`r`n"

RegExMatch(test, "(.+)\{(.+?)\}", "$")
msgbox,% $1 ", " $2
return
559名無しさん@お腹いっぱい。:2010/05/09(日) 16:35:05 ID:pO8OgceG0
test := "test{testval1`r`n`ttestval2}`r`n"
RegExMatch(test, "^(.+)\{(.+)(`r`n|)(.+)\}", $)
msgbox, % $1 ", " $2 $4
560名無しさん@お腹いっぱい。:2010/05/09(日) 21:37:58 ID:1sIfEARs0
>>559
ありがとうございます!
改行がネックだったのですね
autohotkeyの正規表現の仕様をきちんと読んでおくべきでした
561名無しさん@お腹いっぱい。:2010/05/09(日) 22:10:55 ID:ovZ8XSMq0
オプション U, s を使うといいんじゃないの
562名無しさん@お腹いっぱい。:2010/05/09(日) 22:51:24 ID:HjbZPeqIP
AutoHotkeyと窓使いの憂鬱を使っていてCtrlが押しっぱなし現象が起きるんですが
>>9>>782スクリプトの導入仕方教えてください。

ctrl_alert.ahkというファイルを作り、>>9のスクリプトをコピペ保存して
AutoHotkey.iniの先頭に

#include ctrl_alert.ahk

と書いてAutoHotKey再起動でいいのかな。
563562:2010/05/10(月) 00:06:12 ID:BGU/cq2PP
>>562 の方法だとAutoHotKey.iniで設定したホットキーが全然効かなくなってしまいました・・・

#include ctrl_alert.ahk をコメントアウトして一旦回避してるんですが、
どうするのが本来の組み込み方なんでしょうか?
564名無しさん@お腹いっぱい。:2010/05/10(月) 00:25:59 ID:DveMrA0U0
そのAHKファイルはどこに置いてるの?
565562:2010/05/10(月) 01:59:48 ID:BGU/cq2PP
>>564
ahkファイルはAutoHotkey.iniとともにAutoHotKeyのexeと同じディレクトリに置いてあります。

#include ctrl_alert.ahk
AutoHotkey.iniの先頭に上記のように書いてAHKを再起動すると、ctrl_alert.ahk は動作するのですが、
AutoHotkey.iniのその他の記述動作しないという状況のようです。
566名無しさん@お腹いっぱい。:2010/05/10(月) 02:52:08 ID:lPmjfKjW0
>>565
auto-execute sectionって仕様
includeせず単独で起動するのが手っ取り早い
567名無しさん@お腹いっぱい。:2010/05/10(月) 03:02:12 ID:mnSz3UOi0
バリバリ使いこなしているが、autohotkey.iniというファイル名では
一度も作ったことがない。なんか、説明書見てもわかりにくいよね。

全部.ahkでやるのがシンプルでいいよ。
単純にahkファイルをd&dすれば動くから。

iniファイルは別途作るべし。
568名無しさん@お腹いっぱい。:2010/05/10(月) 06:06:53 ID:rve/P/pB0
>>565
その方法でやるならば、ctrl_alert.ahkに書いてある
returnで実行が止まっちゃうので
最初のreturnをgoto, end_of_ctrl_alert_ahkとか適当に書き換えて、
スクリプトの最後にend_of_ctrl_alert_ahk:を追加したら動くんじゃないかなー
ラベル名は被らなければ何でもいいけど。
569名無しさん@お腹いっぱい。:2010/05/10(月) 06:09:47 ID:rve/P/pB0
一応補足するけど、
gotoは多用するとワケワカメなプログラムになりやすいので、通常は避ける。
だけど、こういう使い方の場合は分かりにくくなることはまずないのでいいと思う。
スクリプト自体に殆ど影響しないしね。
570562:2010/05/10(月) 07:04:51 ID:BGU/cq2PP
ごめん。ちょっと弄ってました。
最初の returnはコメントアウトしてました(結局一緒でしたが)

結局 >>568 の方法でうまくいきました。
トップレベルでreturnしたらそこで終了なんですね、なるほど。

; ctrl_alert.ahk
#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
;return
goto, end_of_ctrl_alert

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

end_of_ctrl_alert:


SetTimerにラベルじゃなくfunctionが指定できればSetTimerの始動やSetTimerのイベントも含めて関数化してすっくりできるのかもしれませんね。
今回の場合、言語仕様を理解しないままincludeしただけで動くのを目指したので混乱したようです。
571名無しさん@お腹いっぱい。:2010/05/10(月) 11:10:33 ID:V9q4jK7s0
SetTimerは関数内でも使えるっぽいよ
あぷろだ跡地にある くるくるスクロール で
ローカルラベルで常駐タイマ起動しててびっくりした記憶ある
http://lukewarm.s101.xrea.com/up/file/108.zip


>>567
バリバリ使いこなしてる割には的の外れたアドバイスだな
毎回d&dしたくないから#Includeで組み込むにはどうすればいいかって意図の質問でしょ
.iniも.ahkも拡張子が違うだけで記述ルールは一緒だよ
572名無しさん@お腹いっぱい。:2010/05/10(月) 12:05:55 ID:73HWs5iQ0
ModAlerter(alertDur=3000, timerDur=200) {
 static Keys:= "Ctrl|Alt|Shift|LWin|RWin", dur, Ctrl, Alt, Shift, LWin, RWin
 dur := alertDur
 SetTimer, ModAlert_Timer, %timerDur%
 ModAlert_Timer:
  ListLines, Off
  alert=
  Loop, PARSE, Keys, |
   %A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%, alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > dur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""
  Tooltip, %alert%
 Return
}
関数ライブラリスクリプトにするならこんなもんかな。

しかし、変数の挙動が怪しいなぁ…
関数内のタイマー用ラベルって基本的に関数外にあるのと同じだと思ってたけど、違うのかなぁ

Keys や dur は static なんで関数ローカルで、かつタイマ側からも参照可能。
同様に static 宣言しているがタイマーで上書きする Ctrl,Alt,Shift,LWin,RWin はグローバルになってる
何の宣言もしていない alert は ListVar には出てこない上に、static のような感じでクリアしてやらんといけない

これってどういう事?教えてエロイ人!
573名無しさん@お腹いっぱい。:2010/05/10(月) 19:13:30 ID:Y8ZOXiW20
<< 演算子を使った関数外の変数が
関数内からなぜか使えた気がする
574名無しさん@お腹いっぱい。:2010/05/10(月) 21:46:46 ID:JwaFTd0s0
AHK_L を Win 7 x64 で動かしています。
AHK でメモリーリークの原因を追求するにはどうしたら良いでしょうか?

自作の 130 行くらいのスクリプト (ToDo リスト管理用) が、
少なくとも MsgBox のたびにメモリー消費量が増えてしまうようです。
575名無しさん@お腹いっぱい。:2010/05/10(月) 22:07:19 ID:Y8ZOXiW20
>>574
地道にコメントアウトしてみるしかないんじゃないかな
怪しい処理だけを 1000 回ぐらいループさせるっていうのも手かと

自分ならCOM ライブラリとdllcallの挙動を真っ先に疑うよ
参考にしてね

Memory leak? What are they and how do you detect them?
http://www.autohotkey.com/forum/topic48933.html
576574:2010/05/11(火) 00:19:58 ID:RQ4U7xzI0
>>575
レスありがとうございます。やっぱそうですか > 地道
紹介のフォーラムで新たに知ったのは、Loop もリークを起こす可能性があるということでした。
とりあえずコメントアウトを試してみます。
577名無しさん@お腹いっぱい。:2010/05/11(火) 10:06:42 ID:nEiv4idp0
Loop コマンド自体がメモリリークを起こすんじゃなくて、
タイマーやループのように複数回実行するところで解放されない変数(メモリ)が生じる可能性があって
それが実質メモリリーク状態になるってことでしょ

AHKの変数だけならListVarsで確認はできるけど、DllCall で怖いのが確保したメモリは
AHKの管理外なんで確認する手段が無いって事かな(COMオブジェクト含む)

ToDoリストだと多分配列使ってるんだろうけど、変数の管理がちゃんと出来ているかを見直すのが
まず一番にすべき事じゃないのかね
578名無しさん@お腹いっぱい。:2010/05/11(火) 14:21:46 ID:ImAn/6ubP
~RButton & LButton::MsgBox AHKテスト成功

↑はできるのに↓はできんね。どうして?

~RButton & LButton:: send,^C
あるいは
~RButton & LButton:: Send,{Ctrl down}{Insert}{Ctrl up}
579名無しさん@お腹いっぱい。:2010/05/11(火) 14:24:08 ID:gNbGfP95P
>>578
まずはその動作を物理デバイスで手動でやってみて、PCが反応するか試してみたら?
580名無しさん@お腹いっぱい。:2010/05/11(火) 16:37:06 ID:nEiv4idp0
Send, ^C と Send, ^c とは違うよ
581名無しさん@お腹いっぱい。:2010/05/11(火) 19:00:00 ID:hro4H0dT0
>>580
>>578じゃないが、その仕様ひどすぎw
原因分かるまですごい時間かかった
582名無しさん@お腹いっぱい。:2010/05/11(火) 20:47:25 ID:ImAn/6ubP
>>579
ctrl + c でコピーできるんですが、send,^cでは無理ですね。
>>580
初耳でした。しかし、Send, ^c でも
{Ctrl down}{Insert}{Ctrl up}
でもできません。左右クリックに割り当て無理っぽいですね。
MsgBoxはきちっと通るのに
583名無しさん@お腹いっぱい。:2010/05/11(火) 21:00:02 ID:MX5gz44v0
>>582
うちの環境ではいずれも動くよ。
但し、MouseGesture.ahkを実行していると効かないけど。

競合しているかもしれないのでAutohotkeyスクリプト全てを終了し、
それだけ記述したスクリプトのみ実行して試しては?
※場合によっては他のカスタマイズ系ソフト(IntellipointやSetpoint含む)を全て終了しないとダメかも。
584562:2010/05/12(水) 01:09:26 ID:JAu96k7wP
>>571-573
おお、つっこみサンクス。
SetTimerは関数内のラベル指定でいけるんですね。
585名無しさん@お腹いっぱい。:2010/05/12(水) 05:39:58 ID:3rh4zsS+0
>>572
関数を一度も実行しないで関数外からSettimerで関数内ラベルに飛んだ場合にも
ちゃんとローカル変数になるみたいだな。
そしてstaticな変数は既に確保されて初期化されているみたい

あと、%%で展開された変数がグローバル変数になってるみたいで
staticで宣言した変数などとは別物になってるっぽい

ワケワカメだけど、こういう抜け道は上手く利用すれば便利かもしれないね
586名無しさん@お腹いっぱい。:2010/05/12(水) 07:59:17 ID:NgNMsmYU0
>>585
>あと、%%で展開された変数がグローバル変数になってるみたいで
>staticで宣言した変数などとは別物になってるっぽい

よく気づいたね
これは思っても居なかった
587574:2010/05/12(水) 10:11:50 ID:bVCo4tkH0
メモリーリークの件です。
少なくとも当方の環境では、MsgBox が問題のようでした。
----
Loop, 1000
Msgbox
----
このスクリプトで OK を押すたびに、プライベート領域が上昇していくようです。
588名無しさん@お腹いっぱい。:2010/05/12(水) 10:25:21 ID:gl8AeGviP
AutoHotKey_L Rev.51で試してみた
マジだどういうことだこれw
589名無しさん@お腹いっぱい。:2010/05/12(水) 10:26:00 ID:bVCo4tkH0
ちょっとフォーラムでも聞いてみます
590名無しさん@お腹いっぱい。:2010/05/12(水) 10:29:49 ID:s2aUbLv10
これ、今現在ユーザー側で出来る対策ってあるの?
常駐するスクリプトだと定期的に再起動?
591名無しさん@お腹いっぱい。:2010/05/12(水) 12:04:17 ID:0PYW5u7+0
そんなはっきりしたバグならすぐに直るでしょ
2GB積んでるようなマシンならしばらく放置しといたら
あるいはtraytipで代用するとか
592名無しさん@お腹いっぱい。:2010/05/12(水) 12:06:47 ID:YZzgJmo/0
XP SP3 32bit だといくらループしてもメモリ使用量変わらんなぁ
593名無しさん@お腹いっぱい。:2010/05/12(水) 12:15:00 ID:HnBFIJvd0
本家の方なら増えないな7x86でもXPx86でも
594名無しさん@お腹いっぱい。:2010/05/12(水) 22:25:02 ID:IjfE2ZDv0
あるアプリのウィンドウに対して、その実行ファイルのフルパスを取得する方法って
対象が32bitアプリと64bitアプリのどちらでも対応できる様にするには
どうすればいいでしょうか?

検索して見つけた下記の関数だと32bitアプリに対してしか動作しない様です。

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
}
595名無しさん@お腹いっぱい。:2010/05/12(水) 22:43:58 ID:YZzgJmo/0
プロセスのハンドル精度が違うから無理なんじゃないのかね
596名無しさん@お腹いっぱい。:2010/05/13(木) 16:47:22 ID:Sbrm957n0
行き詰ったので質問させてください。

過去ログとなまず日記を参考にしてゲームパッドの「ボタン13」を2回押しした際に「t」を。
「ボタン15」を2回押しした際に「b」を返すスクリプトを作ってみました。

これをPCゲームで利用しようと思いAHKを起動した状態でプレイしてみたのですが、
いざゲーム上でボタンを2回押ししてみても反応がありません。
メモ帳では正常に動作。
今までJoyAdapter(http://www.vector.co.jp/soft/win95/util/se069688.html)を使用していたため
ゲーム本体に外部ツールを無効化する機能がついている可能性は低そうです。
597名無しさん@お腹いっぱい。:2010/05/13(木) 16:48:05 ID:Sbrm957n0
改行多すぎだそうなので分割。
こちらが作成したスクリプトです。

~Joy13::
KeyWait,Joy13
SetTimer, Joy13_CheckCnt, 200
Joy13_cnt += 1
if(Joy13_cnt == 2)
{
Send,t
}
return
Joy13_CheckCnt:
SetTimer, Joy13_CheckCnt, Off
Joy13_cnt = 0
return

~Joy15::
KeyWait,Joy15
SetTimer, Joy15_CheckCnt, 200
Joy15_cnt += 1
if(Joy15_cnt == 2)
{
Send,b
}
return
Joy15_CheckCnt:
SetTimer, Joy15_CheckCnt, Off
Joy15_cnt = 0
return
598名無しさん@お腹いっぱい。:2010/05/13(木) 16:54:21 ID:vRNuiS7lP
1
そのJoyadapterとやらのツールに、そもそもキーがちゃんと伝達されているかテスト

2
WinActivateをいれて、送信する場所を決め打ち

3
AHKを、もっと単純にしてみる。例 loopでまわして強制的に一定間隔でsendしてテストするとか

4
Joyadapterを、AHK以外の別のツールで制御してみて、ゲームに伝達されるかテスト

ってな感じか
599名無しさん@お腹いっぱい。:2010/05/13(木) 17:12:02 ID:xS/OZISQ0
JoyAdapterの代わりにAHKを使うってことだろ
600名無しさん@お腹いっぱい。:2010/05/13(木) 17:22:47 ID:vRNuiS7lP
ああ、ほんとだ。

じゃあ動かない原因は、AHKがキーを送信する階層がユーザプロセスに近いせいかもね
601名無しさん@お腹いっぱい。:2010/05/13(木) 17:25:02 ID:ypWOB/uUP
SendってたしかPlayとかEventとかいろいろあったよね
こっち試してみたらどうだろう
ttp://ahk.xrea.jp/commands/Send.html
602名無しさん@お腹いっぱい。:2010/05/13(木) 17:29:12 ID:QBoWaRdz0
SendMode だと勝手に予想
603名無しさん@お腹いっぱい。:2010/05/13(木) 17:54:06 ID:Sbrm957n0
>>598-602
説明不足で余計な誤解を招いてしまったようで申し訳ない。

結果から報告しますと、「Send」を「SendEvent」に置き換え、
AHKを管理者権限で実行したところ正常に動作しました。

レスどうもありがとうございました。
特に有力な情報をくれた>>598>>601の両名には深い感謝をば。
604名無しさん@お腹いっぱい。:2010/05/14(金) 07:08:37 ID:Bjme1HK1P
ControlClick って、使用ができる用途・ケースがごく限られたコマンドなのでしょうか?
iTunesの再生ボタンをウインドウが前面になくてもクリックしたいと格闘したんだけど、成功しなかった。
ググってみたけど、controlsendのスクリプトはあるんだけど、controlclickのスクリプトって
あんまないよね
605名無しさん@お腹いっぱい。:2010/05/14(金) 07:28:38 ID:kybFGEPy0
これじゃだめなの?
ControlClick,Button6,ahk_class iTunes
606名無しさん@お腹いっぱい。:2010/05/14(金) 07:39:05 ID:Bjme1HK1P
>>605
ありがとうございました。
あれ・・・できた、なんでだろ
ControlClick,Button10,ahk_class iTunes
でクリックできた。前面にきちゃうけど。
前やったときはぜんぜんクリックしてくれないので
Button10, ahk_id %itunes%, , LEFT, 1, NA (めちゃくちゃ)
っていうオプションをいろいろつけて苦戦してたんだが。
607名無しさん@お腹いっぱい。:2010/05/14(金) 10:13:51 ID:Bjme1HK1P
>>605
あれ、やっぱ、>>605じゃ出来ないときがあるね。どうしてだろう。
引数を足したら安定するんだろうか。
趣旨とちがうけど
DetectHiddenWindows , On
ControlSend , ahk_parent, {space}, iTunes ahk_class iTunes
DetectHiddenWindows , Off
こっちのほうが安定してるね。
controlclick期待してんだが。
608名無しさん@お腹いっぱい。:2010/05/14(金) 11:50:46 ID:QjepaIK50
CabinetWClassとExploreWClassにWinClose割り当てて窓を閉じるジェスチャにしたんですが
アプリの終了も同じジェスチャで指示出来るような方法はありますでしょうか?
個別に指定していくとキリが無いのでアプリ全般といった指定がしたいんですが
609名無しさん@お腹いっぱい。:2010/05/14(金) 12:25:42 ID:jlUDA8dj0
ジェスチャをどうやって実現しているかによるな
610名無しさん@お腹いっぱい。:2010/05/14(金) 13:13:00 ID:XlrQBJVD0
Ctrl+w もしくは Alt+F4 送れば大抵のアプリは閉じられるんじゃない?
611名無しさん@お腹いっぱい。:2010/05/14(金) 14:27:17 ID:6yMoUap30
TVTestのSDKを使って、情報の読込みや設定の変更って出来ますか?
612名無しさん@お腹いっぱい。:2010/05/14(金) 15:13:08 ID:jlUDA8dj0
AHKは
・ウィンドウを特定して、任意の座標をクリックしたりキーを送ったりできる
・ウィンドウを特定して、PostMessage/SendMessageできる
・任意のDLL内の関数をコールできる(構造体の利用可)

で判断してくれ
613名無しさん@お腹いっぱい。:2010/05/14(金) 22:06:45 ID:QjepaIK50
>>609>>610
レスどうもです
Alt+F4…なんでこんな簡単な事気づかなかったんだw
助かりました、どうもです
614名無しさん@お腹いっぱい。:2010/05/15(土) 16:50:34 ID:dk4HaCxi0
ジェスチャで大概のブラウザ見たいに←で戻るとか→で進むとか単純な操作は登録出来ますか?
Cabinetとエクスプローラあたりでその操作にしたいんですが…
615名無しさん@お腹いっぱい。:2010/05/15(土) 16:58:55 ID:+4ZlKFhL0
Alt+Left/Right か Browser_Back /Forward 送ればそれっぽくなるんじゃない?
616名無しさん@お腹いっぱい。:2010/05/15(土) 17:22:28 ID:dk4HaCxi0
>>615
レスどうもです

試して見た所概ね良好みたいで今のところ競合とかも無さげです
このソフトは使う前に基本コマンド覚えた方が早く慣れそうだと気づきました
助かりました、ありがとうございます
617名無しさん@お腹いっぱい。:2010/05/15(土) 23:11:45 ID:fu+SqAPt0
文字列中から、ある一文字の出現回数を調べたいです
loop,parse 以外でこれを調べる方法はありますか?
618名無しさん@お腹いっぱい。:2010/05/15(土) 23:22:09 ID:Cwc1Pan30
StringSplitにある一文字を指定して分割された要素数を求めればいいんじゃね?
619名無しさん@お腹いっぱい。:2010/05/15(土) 23:25:15 ID:Cwc1Pan30
書き忘れたけど、「分割された要素数 - 1 = 出現回数」な。
620名無しさん@お腹いっぱい。:2010/05/15(土) 23:27:47 ID:Cwc1Pan30
あ、しったかしてゴメン。
ある一文字が文字列中に連続して出てくるとダメかもしんない。
621名無しさん@お腹いっぱい。:2010/05/15(土) 23:37:13 ID:qsQCf0W40
splitだと1文字の区切り文字しか認識できないので、
stringreplaceを使うとよい

searchword=あいうえお
stringreplace,dummy,string,%searchword%,,ALL UseErrorlevel
msgbox,個数=%errorlevel%

これでOK
622名無しさん@お腹いっぱい。:2010/05/15(土) 23:38:42 ID:qsQCf0W40
質問者のレスを再度見たら、1文字でいいのか。
じゃあ>>618の方法で十分だな
623名無しさん@お腹いっぱい。:2010/05/16(日) 00:20:07 ID:8XQ45XCe0
>>618-622
ありがとうございます。参考になりました。
624名無しさん@お腹いっぱい。:2010/05/16(日) 07:34:18 ID:qudTN7z+0
AHK_L rev. 51 + Win 7 x64 を使用しています。

下記 (のような) 関数をタイマーで 1 秒ごとに呼び出し、常駐ソフトも含めて
プロセス監視をしています。スクリプト全体の中でこの関数の負荷がやや高めで
もう少し改善できないかと思っています。
何か良い方法があれば教えて下さい。

GetCurrentProcesses()
{
DetectHiddenWindows,On
WinGet, winid, List
Loop, % winid
{
WinGet, proc, ProcessName, % "ahk_id" winid%A_Index%
list .= proc "`n"
}
StringReplace, list, list, .exe,, All
Sort, list, U D`n
DetectHiddenWindows,Off
Return, % list
}
625名無しさん@お腹いっぱい。:2010/05/16(日) 11:21:04 ID:Gi1tuO4l0
test=aaa
inputbox,hoge
msgbox,%hoge%


inputboxで%test%と打ち込んだ場合
msgboxでaaaと表示させるにはどうすればよいでしょうか?
626名無しさん@お腹いっぱい。:2010/05/16(日) 12:02:25 ID:2OjZS12C0
test=aaa
inputbox,hoge
msgbox,% %hoge%


これでtestって打てばaaaだけどね・・・
%test%って打ちたいとなるとどうだろ?
627名無しさん@お腹いっぱい。:2010/05/16(日) 12:16:40 ID:Gi1tuO4l0
>>626
おっありがとうございました!
628名無しさん@お腹いっぱい。:2010/05/16(日) 13:29:07 ID:QQZQPNYAP
inputboxを利用してこのソフトでcraftlaunchみたいな
コマンド入力型のランチャーって作れるのでしょうか?
すでにスクリプトが作られているのでしょうか?
欲しい
629名無しさん@お腹いっぱい。:2010/05/16(日) 13:45:47 ID:Bjbm2NjF0
>>1 のAutoHotkeyを流行らせるページ(AutoHotkeyを流行らせるページ跡地)
の「その他スクリプト」の中の「FileLaunch」がそれっぽいものかな
630名無しさん@お腹いっぱい。:2010/05/16(日) 19:57:40 ID:+h+qAeEsP
32bitのWin7ですが、物理メモリが足りず、ページファイルを使いまくってるときに
AHKで警告メッセージを出したいです。

タスクマネージャのパフォーマンスタブに表示されている
「メモリ」の値を取得する方法があればベストなのですが、
やり方がわかりません。

はやらせるページさんの GetMemoryState() では、
XPでは問題なく動いていましたがWin7でメモリを4GB積んでいると
取得できる値がおかしくなる気がします。
認識できる上限の値をかさ上げするかしないかの仕様が変更された
せいでしょうか。

それとも、たんにやりたいことを実現するには、もっと簡単な方法が
あったら、ヒントいただけると幸いです。
631名無しさん@お腹いっぱい。:2010/05/16(日) 20:11:21 ID:Hga7kSsd0
タスクマネージャ起動しっぱなしでいいんなら、ControlGetTextで取ればいいんじゃないの
632名無しさん@お腹いっぱい。:2010/05/18(火) 10:02:33 ID:JvKc99Wl0
ドロップされたファイルのリストを表示するGuiについて質問させて下さい。

#NoTrayIcon
Gui, Add, Edit, x7 y67 w300 h120
Gui, Show, h198 w314, test
Return

GuiClose:
FileDelete, %A_ScriptDir%\temp.txt
ExitApp

GuiDropFiles:
DropFilesList = %A_GuiEvent%
Sort, DropFilesList
MsgBox, %DropFilesList%
;FileAppend, %DropFilesList%, %A_ScriptDir%\temp.txt
;FileRead, DropFilesList, %A_ScriptDir%\temp.txt
ControlSetText, Edit1, %DropFilesList%
Return

これで作成したGuiに複数のファイルをドロップすると、
MsgBoxでは改行された状態でリストが表示されるのですが
テキスト欄では改行が無視された状態で表示されます。
コメントアウトしている下から3行目と4行目を有効にすると正しく表示されるのですが、
この原因はどこにあるのでしょうか?訂正すべき点をご指摘下さい。
633名無しさん@お腹いっぱい。:2010/05/18(火) 11:02:56 ID:aBh+EMMJ0
>>632
改行コードをCR+LFにしてみるとか。
Sort, DropFilesList,D`r`n
634名無しさん@お腹いっぱい。:2010/05/18(火) 11:34:29 ID:JvKc99Wl0
>>633
StringReplace, DropFilesList, DropFilesList, `n, `r`n, All
を挿入で解決しました。ありがとうございました
635名無しさん@お腹いっぱい。:2010/05/18(火) 11:48:45 ID:B/Ocs1du0
ゴミ箱の中にあるファイル名を取得したりできませんか?
636名無しさん@お腹いっぱい。:2010/05/18(火) 19:52:06 ID:ps60X+1w0
MouseGesture.ahkからキーを送ることでアプリケーションを操作してるんだけれど
ポップアップメニューが開いたままだとCtrl+Wを送信するばあいの場合「....(W)」ってメニューが実行されちゃうので
できればポップアップメニューが開いている場合のみ先にSend,{ESC}でとじてからSend,^wとかしたいんだけど
AHKからポップアップメニューが表示されているかどうかの確認は可能?

ttp://sakura.qp.land.to/?Customize%2F%C5%EA%B9%C6%2F49
あとサクラエディタ用の強調キーワード設定ファイルが古かったから最近の追加してみた
637名無しさん@お腹いっぱい。:2010/05/18(火) 20:27:10 ID:zJTpAcRr0
>>636
IfWinExist, ahk_class #32768
{
Send, {esc}
Send, ^w
}
638名無しさん@お腹いっぱい。:2010/05/18(火) 20:28:25 ID:zJTpAcRr0
あ、ちがう、こうだった

IfWinExist, ahk_class #32768
Send, {esc}
Send, ^w
639名無しさん@お腹いっぱい。:2010/05/18(火) 21:02:06 ID:ps60X+1w0
>>638
おおーばっちりです!本当にありがとう!
640名無しさん@お腹いっぱい。:2010/05/19(水) 13:19:45 ID:1AFKWhcg0
Gui, Add, Hotkey,vkeyでホットキーをGUIで設定してそのホットキーを
サブルーチンラベルにするにはどうすればよいのでしょうか?
641名無しさん@お腹いっぱい。:2010/05/19(水) 14:23:12 ID:GVAR5YlCi
Hotkey, %KeyVar%, LabelName
642名無しさん@お腹いっぱい。:2010/05/19(水) 14:43:29 ID:1AFKWhcg0
できました!ありがとうございます。
643名無しさん@お腹いっぱい。:2010/05/19(水) 23:55:10 ID:3g2f68/JP
SoundPlay,%file%

でWAVファイルを再生すると、そのスクリプトを終了させるまで
ファイルハンドルを掴んだままになってしまい、リネームや削除ができません。

マシンによって挙動が異なるような気がするのですが、みなさんのPCでは
どうでしょうか。

なにか対策する方法はないでしょうかね。
644名無しさん@お腹いっぱい。:2010/05/20(木) 00:13:50 ID:1tAK8em70
SoundPlay,%file%
SoundPlay,unko

%file%はうんこによって開放されます。
645名無しさん@お腹いっぱい。:2010/05/20(木) 00:16:25 ID:r8RmfaG10
それで開放されないって話じゃないの?
646名無しさん@お腹いっぱい。:2010/05/20(木) 00:16:36 ID:TxKCgQ/p0
コピーして再生、ハードリンク張って再生
647名無しさん@お腹いっぱい。:2010/05/20(木) 00:22:15 ID:NY99m0PMP
>>644
ありがとうございます。うんこを与えたところ解決できました。
648名無しさん@お腹いっぱい。:2010/05/20(木) 00:55:06 ID:gVxwinbu0
テンキーの00キーにカンマを割り当てたくって、
見つけたのがこのスクリプト

http://www.autohotkey.com/docs/scripts/Numpad000.htm

だけどこれって、000キー用で、00キー用じゃないんだよね。

で、なんとなくカンで、

else if Numpad0Count = 0
Numpad0Count = 2

を削ったら、ちゃんと動くようになった。

.....のはいいんだけど、普通の0キーをキーリピートさせると、時々カンマが出ちゃう...orz
00もリピートしないし(....ってそれはこのスクリプトではむりか)

キーリピートはどうやって解決したらいいんでがんしょ?
649名無しさん@お腹いっぱい。:2010/05/20(木) 01:02:42 ID:PRyzxNvWP
キーボードの仕様が分からないからはっきりとしたことは言えないが、
ストロークの発生間隔か、キーアップが送られてきていることを手がかりにすればいいと思われ。
NILScriptなら1〜2行くらいで書ける気がする。
650名無しさん@お腹いっぱい。:2010/05/20(木) 13:52:34 ID:ojaeojGN0
>>636,638読んで思ったんだけどポップアップメニューのクラスってWindowSpyじゃ取得できないけどどうやって確認するの?
例えばFirefoxのポップアップはMozillaDropShadowWindowClassらしいんだけど
WindowSpyでカーソルをポップアップ上に持っていってもポップアップの下のFirefoxメインウインドウの情報が表示される
651名無しさん@お腹いっぱい。:2010/05/20(木) 14:08:24 ID:hIwSN4Ds0
f1::
MouseGetPos,,, hwnd
WinGetClass, class, ahk_id %hwnd%
msgbox, %class%
return
652名無しさん@お腹いっぱい。:2010/05/20(木) 15:06:03 ID:DDddlayR0
メモ帳かIEのウィンドウがアクティブになるまで待機

みたいなこと出来るコマンド、コードあれば教えてください。
653名無しさん@お腹いっぱい。:2010/05/20(木) 15:08:17 ID:8X2fsFHU0
654名無しさん@お腹いっぱい。:2010/05/20(木) 15:08:23 ID:hIwSN4Ds0
WinWaitActive
655名無しさん@お腹いっぱい。:2010/05/20(木) 16:31:25 ID:ojaeojGN0
>>651
なるほどその手があったか
ずっと不思議だったんだ
ありがとう
656名無しさん@お腹いっぱい。:2010/05/21(金) 05:40:05 ID:rUvtTlpR0
特殊なPS/2キーボード(教育用途らしい〜12個キーがついてる)を入手したので
AutoHotkeyでキーアサインしようと思ったんですが、

ほとんどのキーは、幻のファンクションキーF13〜F24が割り振ってあって
簡単にアサインできたのですが、

2つのキーだけはとても特殊でした。

1つめは
VKがFFでSCが072

2つめは
VKがFFでSCが074

それぞれ

vkFFSC072::A
vkFFsc074::B

のように書いても、両方のキーどちらを押しても、
先に指定したAの方が出てしまいます。
どちらのキーもvkが共通でFFだからかもしれないですが、、、、
一応AutoHotkeyの仕様としては記述法は間違いないですよね?
これはバグなんでしょーか?
ちゃんとAHのKeyHistoryにはそれぞれのvkとscがちゃんと上記のように表示されます。

なにか解決法はないでしょうか?
別の指定方法とかありませんでしょうか?
657名無しさん@お腹いっぱい。:2010/05/21(金) 05:51:32 ID:rUvtTlpR0
スキャンコードの指定のみだとエラーになってしまいます。。。
658656-657:2010/05/21(金) 06:46:44 ID:rUvtTlpR0
すいません、自己解決しました

sc072::send A
sc074::send B

これだけでOKでしたw

AHのKeyHistoryで調査したときに、
vkとscの値は出ても、その右に「not found」と表示されるキーは
sc072::A みたいな記述法だとエラーになるので、ちゃんとsendを書かないとだめみたいです。

こんな簡単なことに気づくまでに1時間もかかってしまい...orz
659656-657:2010/05/21(金) 06:58:53 ID:rUvtTlpR0
F13からF24などのキーって、今はついてるキーボードがないですが、
こういう古いキーボードについてるんですね
http://geekhack.org/showwiki.php?title=Island:7358
このページによると

SC072はCrSelキー
SC074はExSelキー

に相当するみたいですね。

最初、PS/2をUSBに変換するアダプタをかましてやってみたら、
全くキーコードを吐かないので、おかしいなと思ったら、
そのページにもありますが、PS/2-USB変換アダプタでは
F13からF24はブロックされてしまうのが普通のようですね。

シンプルなことだったけれど、いろいろ勉強になりましたw

しかしたった12個のキーがついた特殊キーボードだから
F13からF24を全部、単純にアサインすればいいのに…と思うんですが、
F19とF20とF23は未使用でなぜか3つのキーにはSC072とSC074とSC006がアサインされていて
何故なのかかなり謎...
同時に使う特殊キーボードで既に使われているキーだったのかしらん...
スイスの教育キーボードらしいのですでに知る術はないですが...
660名無しさん@お腹いっぱい。:2010/05/21(金) 06:59:39 ID:zU520QW7i
一時間なら短い方だぜ
661名無しさん@お腹いっぱい。:2010/05/21(金) 07:12:05 ID:LT3Z22zUP
いいなぁ、F13〜F24が直打ちできるなんて、AHK的にうらやましすぎる。
そのキーボードを見てみたいから写真うpよろしく。
662名無しさん@お腹いっぱい。:2010/05/21(金) 07:30:44 ID:rUvtTlpR0
>>660
わはは、みなさんいろいろ苦労されてるんですね…w

>>661
早速写真うpしてみました
http://mac.hitobashira.org/up/src/maka0243.jpg
スイスのmastereyeという教育システム用のようで、1998年製造のようです。
製造はGMK electronic design gmbHという会社のようで、ちゃんとメカニカルで打鍵感もすばらしいです。
日本では株式会社エルテックスっという会社が2003年から学校用に販売していたみたいです。
ジャンク扱いの品がオクなどで出ることももしかしたらあるかもしれないので要チェックです。PS/2えす。


その後わかったのですが、AHのKeyHistoryで調査したときに、
vkとscの値は出てもその右に「not found」と表示されるキーをリマップするとき、
やっぱりちょっとAutoHotKeyは謎仕様なのかもです...

vkEDsc006のキーが1つあったんですが、

vkEDsc006::Aで普通に通ります。
vkED::Aも普通に通ります。
でも
sc006::Aと書いても、エラーが出ずに普通に通っちゃいます。
上に書いた「not foundのキーはsendしなくてはエラーが出る」という法則が早速崩れてしまいましたw
…ただし、エラーは出ないんですが、ちゃんとリマップされない、これが。

やっぱり、AHのKeyHistoryで調査したときに、vkとscの値は出ても、
その右に「not found」と表示されるキーは
リマップするときなど、いろいろ試してみる必要がありそうです。
663名無しさん@お腹いっぱい。:2010/05/21(金) 07:43:24 ID:LT3Z22zUP
かっけー。
いいなぁ。ジャンク屋で見つけたら捕獲するわ。
664名無しさん@お腹いっぱい。:2010/05/21(金) 09:44:19 ID:Xum/5J+j0
デザインいいねコレ
うらやますぅいー
665名無しさん@お腹いっぱい。:2010/05/21(金) 13:16:36 ID:i4SRQyqP0
>>662
かわいいよ
666名無しさん@お腹いっぱい。:2010/05/21(金) 22:34:57 ID:W97jAZBA0
今フォトショップのショートカットにキーを割り当てているんですが
このままだと、一度wとqを推してしまうとctrキーlが押しっぱなしになってしまうようで、うまくいきません。
この記述だけでは不足しているものがあるんでしょうか?

#ifWinActive ahk_class Photoshop
w::
send {ctrl down}{NumpadAdd down}

q::
send {ctrl down}{NumpadSub down}

#IfWinActive, ahk_class Photoshop
667名無しさん@お腹いっぱい。:2010/05/21(金) 22:40:45 ID:vVJo06AA0
〜Downは〜Upが贈られるまでずっと押し下げ状態
send, ^{NumpadAdd}とsend, ^{NumpadSub}
でどう?
668名無しさん@お腹いっぱい。:2010/05/21(金) 22:43:36 ID:GJwWz1gdi
押しっぱなしになるように記述してるだけじゃん

Send, ^{NumpadAdd} とかすると思うが
669名無しさん@お腹いっぱい。:2010/05/21(金) 22:47:43 ID:ihEFybyeP
こう書かないとwキー押すとそのすぐ下のqキーのコマンドも実行されてしまう

#ifWinActive ahk_class Photoshop
w::send, ^{NumpadAdd}
q::send, ^{NumpadSub}
#ifWinActive

またはreturnを付ける

#ifWinActive ahk_class Photoshop
w::
 send, ^{NumpadAdd}
 return
q::
 send, ^{NumpadSub}
 return
#ifWinActive
670名無しさん@お腹いっぱい。:2010/05/21(金) 23:05:17 ID:X6wOZWs/0
>>663-665
ジャンク品で見つけたときは、全部のキーに日本語が書いてあったんだけど
実は全部シールで、剥がしたら下がこうなってたw
うれしい誤算だったよw
671名無しさん@お腹いっぱい。:2010/05/21(金) 23:19:54 ID:W97jAZBA0
>>667
>>668
>>669
w::
send,^{ctrl}{NumpadAdd}
return
q::
send,^{ctrl}{NumpadSub}
return

すいません。こう記述してみたのですが動かないです。
photoshop側のショートカットの拡大縮小がctrl++とctrl+-となっていまして
これらがもデイファイア必須なショートカットでして
それらをwとqだけで動くように設定したいのですが、どうもうまくいきません。

この記述を参考につくってみたのですが これはちゃんと動くんです。
z::
{
send {alt down}
mouseclick, right,,, 1, 0, d
Loop
{
sleep, 10
GetKeyState, state, z, p
if state = u
break
}
mouseclick, right,,, 1, 0, U
send {alt up}
return
}
}
672名無しさん@お腹いっぱい。:2010/05/21(金) 23:25:51 ID:vVJo06AA0
>>671
send,^{ctrl}{NumpadAdd}じゃなくてsend,^{NumpadAdd}
^自体がCtrl他は↓参照
ttp://ahk.xrea.jp/Hotkeys.html
673名無しさん@お腹いっぱい。:2010/05/21(金) 23:58:30 ID:W97jAZBA0
>>672
なるほどすいません。

#ifWinActive ahk_class Photoshop
w::
send {ctrl down} {NumpadAdd down} {NumpadAdd up} {ctrl up}
return
q::
send,{ctrl down} {NumpadSub down} {Numpad up} {ctrl up}
return
#ifWinActive

他の人の記述を参考にこう書き直したら動きました。
このスクリプトの意味がよくわからないのですが、
一度押下げしたあとに押し上げるコマンドを同時にいれて、コマンドをリセットしているという感じでしょうか?
674名無しさん@お腹いっぱい。:2010/05/22(土) 00:13:58 ID:IPGMNu+YP
わからないって・・・これほどわかりやすいスクリプト例は他に無いだろう。

downを「ボタンを押す」
upを「ボタンを離す」

で読み替えてみ?
675名無しさん@お腹いっぱい。:2010/05/22(土) 00:16:14 ID:fw+7RDgc0
同時じゃなくて逐次実行
Ctrl押して、NumpadAdd押して、Ctrl離して、NumpadAdd離して を順番にエミュレートしてる
^{NumpadAdd} は、Ctrl+NumpadAdd を一定時間投げる

かたくなに^を使わないのにはなんか訳あるのかね
単に意味わからんからスルーしてるのか
up/down 分けなきゃ動かないのか
676名無しさん@お腹いっぱい。:2010/05/22(土) 00:41:57 ID:Eg58/Q7W0
使わないわけではなくこうしないと動かないんです。
どうもありがとうございました。
677名無しさん@お腹いっぱい。:2010/05/22(土) 08:51:15 ID:ZDOJ6PGu0
Autoohotkeyをコンパイルしてexeで起動さておいて、
そのexeのショートカットにファイルをドラックした時に%1%のような感じで受け取ること出来ますか?
起動していないときなら出来きます。
678名無しさん@お腹いっぱい。:2010/05/22(土) 11:02:30 ID:fw+7RDgc0
>>677
過去ログに似た問答があったのでコピペ

>455 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 15:17:20 ID:svMF3G070
>独立したahkスクリプトに対して、既にそのスクリプトがが起動していたら引数を渡すだけ、ということは可能なのでしょうか。

>Run,Autohotkey.exe hoge.ahk "hogehoge"
>みたいな感じで起動して、hoge.ahkが既に存在しているならhogehogeを渡したいのですが。

>やりたいのは、一般的なメディアプレーヤーみたいにプレイヤーが立ち上がってたらそれでファイルを再生、そうでなければ起動+再生みたいなことです。

>460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 19:11:01 ID:VZ8xmIkr0 (2回)
>>455
>既に起動しているスクリプトに起動パラメータで引数渡すのはたぶん無理
>やりたかったらGUIでGuiDropFilesラベル有効にしといて
>cdropや管理人さんのファイルドロップ関数で渡してやるのが簡単なんじゃないかな。
>それか OnMessage() か RegisterCallback() あたり使うとか。

>461 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 20:24:03 ID:JCUO9F070 (3回)
>>459
>言われてみればその通りかも。ファイル構成を再検討してみます。

>AHK同士の連携は、>>460のGuiDropFiles法でいとも簡単にできました。
>こんな便利な方法があったとは。
679名無しさん@お腹いっぱい。:2010/05/22(土) 11:19:30 ID:JzPMlM8p0
既に起動してる場合は%1%をtextで吐き出して
起動してるやつでtextを読みこめばいけるじゃん
680名無しさん@お腹いっぱい。:2010/05/22(土) 11:42:48 ID:ZDOJ6PGu0
>>678
ありがとうございます。試してみます。
681名無しさん@お腹いっぱい。:2010/05/22(土) 11:43:38 ID:ZDOJ6PGu0
>>679
その方法もありますね。
682名無しさん@お腹いっぱい。:2010/05/23(日) 00:14:01 ID:lkhhCpMe0
購入したUSBテンキーに=ボタンがついていて
どうもエクセル用らしいので、私はエクセルを使わないので
全く無意味なキーなのですが、、、

こんなキーコードを履きます

A2 01D d 9.59 Ctrl
66 04D d 0.02 Num 6
66 04D u 0.00 Num 6
61 04F d 0.02 Num 1
61 04F u 0.00 Num 1
A2 01D u 0.02 Ctrl

このキーになにか別の文字を割り当てるのはどうしたらいいでしょう?
どうもうまくいかなくて、、、、
683名無しさん@お腹いっぱい。:2010/05/23(日) 00:22:20 ID:ztZMmXTZ0
>>682
それ、書いてあるまんまのキーだから、
割り当て変更すると通常キーも変更される。
684名無しさん@お腹いっぱい。:2010/05/23(日) 00:23:42 ID:p1V2LG0aP
最初のCTRLが送られた段階でホットキーを発動させるようにする

その中でkeywaitなりgetkeystateで待ち構えて、指定された順番に
あとのキーが送られてくることを確認する

確認できたら、メインの処理を実行、順番が違ってたり、確認できなければreturn

でOKじゃないかな
685名無しさん@お腹いっぱい。:2010/05/23(日) 01:15:15 ID:IibYX0kd0
AHK で OS のアイドル状態を取得するにはどうしたら良いでしょうか。
以下の方法を考えたり試してみましたが、うまく行きません。

1. OS のアイドル状態を直接取得する
全く手掛りがありません。
DllCall などを使うとできるのかもしれないのですが…。

2. A_TimeIdle / A_TimeIdlePhysical を使う
キー入力アイドル状態は対応できますが、動画プレイヤーのような
起動しっぱなしのものには対応できません。

3. スクリーンセーバーの状態を取得する
基本的にスクリーンセーバーを使いたくないのがホンネです。
またスクリーンセーバーは各々別のクラスを持っているので
"スクリーンセーバー" としての一元管理は難しそうです。

何かよい方法があればご指南下さい。
ちょっと抽象的な質問ですいません。
686名無しさん@お腹いっぱい。:2010/05/23(日) 01:51:25 ID:p1V2LG0aP
はやらせるぺージにCPU関連の値を取得する関数があるので、それを使えばOK
687682:2010/05/23(日) 02:50:26 ID:lkhhCpMe0
レスありがとうございました。

Ctrl & Numpad6::
KeyWait,Ctrl
send,{Del}
return

結局、超シンプルになりました

テンキーの「エクセル用"="キー」の吐くコードは

Ctrlダウン→Num6のダウン→アップ→Num1のダウン→Num1のアップ→Ctrlのアップ

なので、本当はNum1に関しても判定したかったのですが、
いろいろやってみても、なぜかNum1が判定にひっかからず...タイミングの問題でしょうか...orz

よく考えると、Ctrl+Num6というのはとりあえず現状使わない組み合わせなので、
完璧ではないですが、一番最後のCtrlのアップで判定してシンプルになっちゃいました。。

00キーや000キーもそうですが、複数のキーコードを連続で吐くキーは少々やっかいですね...
688名無しさん@お腹いっぱい。:2010/05/23(日) 10:27:37 ID:Zg8k7j+2P
If( hoge ){
  ほ〜
  げ〜
}

みたいに

If hoge In foo,bar {
  ほ〜
  げ〜
}
とか
Loop, Parse, hoge {
  ほ〜
  げ〜
}

って書けないのが不満
689名無しさん@お腹いっぱい。:2010/05/23(日) 10:33:43 ID:GCHPZPxg0
そのレベルの不満を言い出したら言語仕様のほとんどすべてを叩きたくなってくるぞw
690名無しさん@お腹いっぱい。:2010/05/23(日) 13:08:13 ID:s3IQV4zr0
Runコマンドとかで不正なパスを指定した場合エラーがでるんですが
エラーメッセージを出さずにそのまま終了、または無視ようなことはできますか?
691名無しさん@お腹いっぱい。:2010/05/23(日) 13:48:30 ID:At2NsDNL0
このスレを「UseErrorLevel」で検索
692名無しさん@お腹いっぱい。:2010/05/23(日) 14:21:00 ID:s3IQV4zr0
>>691
理解しました。
ありがとうございます^^
693名無しさん@お腹いっぱい。:2010/05/23(日) 15:19:20 ID:StS222KT0
%関数%_01

って感じで変数に111って代入しました。

Msbox で表示しても

%関数%_01

って表示されて、111って表示されません。

どうすれば表示されるようになりますか?
694名無しさん@お腹いっぱい。:2010/05/23(日) 15:28:45 ID:At2NsDNL0
おまいのいう「変数」は何なんだ?
695名無しさん@お腹いっぱい。:2010/05/23(日) 15:35:57 ID:YS5qpT8d0
エスパー力のある人にアドバイスを求めるより
その動かないスクリプトをそのままコピペしたほうが一般人からもアドバイス貰えると思うよ
696名無しさん@お腹いっぱい。:2010/05/23(日) 15:45:14 ID:StS222KT0
>>694
>>695
000 := "xxx"
111_%000% := 200 + 22 + 2
Msgbox. 111_%000%
って感じです。
Msgbox. %111_www%
ってすると表示されるのですが、xxxの部分がコロコロ変わります。

697名無しさん@お腹いっぱい。:2010/05/23(日) 15:53:14 ID:rIgmQG0I0
>>696
・変数名は数字で始めない(数値と区別できないから)
・引数に式を渡す場合は%+空白で始める

i := "xxx"
a_%i% := 200 + 22 + 2
Msgbox % a_%i%
Msgbox %a_xxx%
698名無しさん@お腹いっぱい。:2010/05/23(日) 15:54:01 ID:o1GBYNzc0
>>696
Msgbox, % 111_%000%
こういうこと?
699名無しさん@お腹いっぱい。:2010/05/23(日) 16:02:47 ID:StS222KT0
>>697
>>698

ありがとうございました。
Msgbox % a_%i%が使えたんですね。
本当にありがとうございました。
700685:2010/05/23(日) 23:11:30 ID:IibYX0kd0
>>686
情報ありがとうございます。
試してみたところ、CPU や HDD の稼動状況は確認できましたが、
OS のアイドル状態 (スクリーンセーバー起動やディスプレイ電源
オフの条件) は同定できませんでした。

そこで、ディスプレイの電源状態を取得するため、以下のスクリプト
を書いてみました (まだ動きません)。

hDisp := DllCall("CreateFile", "Str", "\\.\LCD", "UInt", 0xC000000, "Int", 0, "Int", 0, "Int", 0)
DllCall("GetDevicePowerState", "UInt", hDisp, "Int", stat)
MsgBox % stat

Windows API の知識もなく、DllCall を使うのも初めてなので
どこから直せばよいのか分かりません。
アドバイスをいただけたら幸いです。
701名無しさん@お腹いっぱい。:2010/05/23(日) 23:16:13 ID:p1V2LG0aP
アイドル状態なんて、自分で定義すればいいんじゃないの?
CPU利用率が5%以下が5分以上続いたら発動 とか

何をやりたいかを書かないと、質問文も回答文も無駄になりがち。
702名無しさん@お腹いっぱい。:2010/05/24(月) 00:09:57 ID:c6LIArS70
目的は、アイドル状態となった時に常駐スクリプトのタイマーを止めることです。
その常駐スクリプトは、各実行ファイルの起動時間を計測しており、いくつかのソフトの
使いすぎを防止しています (ウェブブラウザ、ゲーム、メディアプレイヤーなど)。
現在は A_TimeIdle を用いてアイドル状態を定義しています (問題点 は >>685)。

CPU 利用率と時間を組み合わせるのは思いつきませんでした。
もう一度試してみます。

同時に、アイドル状態の定義を OS と共有するため (>>685)、"AHK でディスプレイ
の電源状態を取得する方法" についてもアドバイスいただければ幸いです。
703名無しさん@お腹いっぱい。:2010/05/24(月) 09:06:20 ID:ObG/p1+k0
モニタの電源やスクリーンセーバならOnMessage で WM_SYSCOMMAND トラップして
SC_SCREENSAVE や SC_MONITORPOWER を検知するんじゃないの
704名無しさん@お腹いっぱい。:2010/05/24(月) 11:21:14 ID:c6LIArS70
>>703
ありがとうございます。以下のスクリプト でOnMessage 試してみました。

----
Gui, Add, Text, w100, test
Gui, Show
OnMessage(0x0112, "WM_SYSCOMMAND")
Return

WM_SYSCOMMAND(wParam)
{
MsgBox % wParam
}
----

SC_SCREENSAVE や SC_MONITORPOWER 等のメッセージを拾えるのは
このスクリプトで生成される GUI がアクティブな時だけのようでした。
705名無しさん@お腹いっぱい。:2010/05/25(火) 16:07:47 ID:dIgXun8m0
TVTestのウィンドウを右クリックしたときに表示される項目って取得できますか?
その項目に表示されている再生オフの常態のレ点をチェックしたいです。
706名無しさん@お腹いっぱい。:2010/05/25(火) 17:04:22 ID:/ZlFyOPh0
ControlGet,test,Visible,,VideoRenderer1,TVTest
707名無しさん@お腹いっぱい。:2010/05/25(火) 17:19:19 ID:6uYTjZTC0
705じゃないけど、うちの環境だと VideoRenderer1 じゃなくて TVTest Video Container1 だな
TVTest ver.0.7.2 (x86)

メニューの状態を取得したいならDllCallで
この辺の関数を何とかすればどうにかなるかもしれない
http://www.winapi-database.com/Window/Menu/
708名無しさん@お腹いっぱい。:2010/05/25(火) 17:54:39 ID:dIgXun8m0
>>706
>>707
なにか凄く難しそうですね・・・
709名無しさん@お腹いっぱい。:2010/05/25(火) 18:22:55 ID:6uYTjZTC0
再生オフかどうかを知りたいだけなら706の方法でいけるよ
メニューのチェック状態を見てるわけじゃないけどね

#1::
ControlGet,test,Visible,,TVTest Video Container1,TVTest
If (test==0)
ToolTip, 再生オフ
else
ToolTip, 再生中
return
710名無しさん@お腹いっぱい。:2010/05/25(火) 19:11:40 ID:dIgXun8m0
>>709
>>709
できました。ありがとうございます。

これはレ点の表示常態をチェックしているんですかね?
メニューの情報、VideoRenderer1とかメニュー番号?の調査ってどうやってやるんですか?
711名無しさん@お腹いっぱい。:2010/05/25(火) 21:55:49 ID:6uYTjZTC0
いつのまにか流行らせるページの日本語解説撤去されたな
次からテンプレの日本語解説は
>467のhttp://sites.google.com/site/autohotkeyjp/に差し替えかね


>>710
常駐AHK右クリメニューから Window Spy
709に書いたてある通り、メニューは一切見てないよ
TVtestの動画描画部が表示されてるかどうかを調べてて判断してるだけ
ていうかあのコードでそういう質問が出るってことは何にもわかってないでしょ?
次はちゃんと解説読んでから来てね
http://sites.google.com/site/autohotkeyjp/reference/commands/ControlGet
712名無しさん@お腹いっぱい。:2010/05/25(火) 22:14:49 ID:sH2EOU+4P
ttp://ahk.xrea.jp/
流行らせるページの人の許可もらって転載してるページあるよ
困ったときどっちも見てる
713名無しさん@お腹いっぱい。:2010/05/25(火) 22:37:06 ID:46q0R++J0
>>711
はやらせるページには、
ミラーがあるよ
http://ahk.xrea.jp/
経緯も書いてあるので読んでね
714名無しさん@お腹いっぱい。:2010/05/25(火) 23:21:36 ID:6uYTjZTC0
>>712-713
おお、ミラーあったんだ。ヨカッタヨカッタ
715710:2010/05/26(水) 09:10:00 ID:+viqPDa30
>>711
大変申し訳ありませんでした。
自分の環境だと、ClassNNがBon DTV EVR Video Winodowになっていて、
TVTest Video Container1が表示されていないのに>>709のahkで正常に動いた
ので混乱してしまったようです。

*選択するレンダラによって、ClassNNが変化しているみたいです。
716名無しさん@お腹いっぱい。:2010/05/26(水) 11:34:29 ID:Ih/SixVE0
MX-Rのサイドホイール↑↓にF14とF15を割り当ててMouseGesture.ahkを使ってアクティブウインドウを最小化するってことをやりたいのですが
WinMinimize, ahk_id %ActiveHWND%ではJaneなど一部のアプリケーションでうまくいきません
ControlClickでアクティブウインドウの最小化ボタンをクリックしたことにするにはどうすればよいのでしょうか
717名無しさん@お腹いっぱい。:2010/05/26(水) 11:46:29 ID:6xH685yXi
WinMinimizeの日本語解説ページを隅々まで読むといいよ
718名無しさん@お腹いっぱい。:2010/05/26(水) 12:14:58 ID:JQD0XV3cP
>>717
PostMessage, 0x112, 0xF020, , , ahk_id %ActiveHWND%
でできました、ありがとう!
719名無しさん@お腹いっぱい。:2010/05/27(木) 22:48:05 ID:zWF3TBc80
MouseGesture.ahkはほんといろいろ組み込めるんだな
SetpointでやってたOneTouch Searchとかホイールリダイレクトとかマウスまわり全て統合しちゃった
720名無しさん@お腹いっぱい。:2010/05/29(土) 15:47:28 ID:UnPMX2NU0
gui,2:add,text,,aaa
gui,2:show

return
GuiDropFiles:
msgbox,aaa

これだとGuiにファイルをドロップすることができませんでした。
ウィンドウ番号1以外のGuiにファイルをドロップさせてGuiDropFilesに飛ばすにはどうすればよいのでしょうか?
721名無しさん@お腹いっぱい。:2010/05/29(土) 17:48:08 ID:g79F3P4d0
Goto, >>1
722名無しさん@お腹いっぱい。:2010/05/29(土) 21:08:18 ID:+6Jvl8e10
Gui, 1:Default
Gui, +LabelHoge
Gui, Show, w100 h100 x100 y100, Hoge

Gui, 2:Default
Gui, +LabelFuga
Gui, Show, w100 h100 x300 y100, Fuga

Return

HogeDropFiles:
FugaDropFiles:
MsgBox, Gui=%A_Gui%`n%A_GuiEvent%
Return
723名無しさん@お腹いっぱい。:2010/05/29(土) 21:32:26 ID:PYi9hqIRP
・ホイールリダイレクト
・反転選択したワードをGoogle検索
・反転選択したtp:// tps://を開く
・反転選択したパスをエクスプローラーで開く
・ウインドウを全てプライマリモニタに移動する
・ウインドウをモニタの端にくっつける

アイデアが尽きた
724名無しさん@お腹いっぱい。:2010/05/31(月) 21:06:06 ID:KwmkhGQ3P
「キーを押したらコードAを実行する、キーを離したらコードBを実行する」
っていう感じのを作りたいんだけどどうすればいい?

ループ系処理を使わずに実装したいんだけど
725名無しさん@お腹いっぱい。:2010/05/31(月) 21:40:03 ID:lg9BIlOc0
726名無しさん@お腹いっぱい。:2010/05/31(月) 21:45:13 ID:KwmkhGQ3P
>>75
散々やったさw
でもループ処理を利用しない方法が分からないんだよ…
ループ使うと連打になっちゃって上手くいかない
727名無しさん@お腹いっぱい。:2010/05/31(月) 21:49:11 ID:jR3TOzOpP
>>726
ttp://ahk.xrea.jp/Hotkeys.html
Upホットキーじゃないか
728名無しさん@お腹いっぱい。:2010/05/31(月) 22:15:25 ID:KwmkhGQ3P
これは盲点だったsory

ずっとgetkeystateでどうにかやろうと考えてましたorz
729名無しさん@お腹いっぱい。:2010/05/31(月) 22:44:20 ID:4QoVrBRT0
KeyWaitでも出来るわな。〜 Upの方が合目的的だけど
730名無しさん@お腹いっぱい。:2010/05/31(月) 23:05:48 ID:G9hqr3560
リファレンスのページを隅から隅まで読めとは言わないけど
Hotkeysやらキーリストのページすら読まずに「散々」やったとか言われてもな
731名無しさん@お腹いっぱい。:2010/06/01(火) 23:44:55 ID:7HSets100
Emacsみたいに一行選択って出来ませんか?
一応クリップボードとShift+十字キーを組み合わせて実装してみたものの、
処理が汚いわ、遅いわで使い物にならず




732名無しさん@お腹いっぱい。:2010/06/01(火) 23:52:20 ID:7HSets100
事故解決しました
733名無しさん@お腹いっぱい。:2010/06/03(木) 19:20:56 ID:+V4Y8WEK0
734名無しさん@お腹いっぱい。:2010/06/03(木) 19:45:36 ID:+V4Y8WEK0
複数行に渡るスクリプト(例えば、あるウインドウを全面にしてF5をうつ)
をキーワード入力型で実行させたいのですが、無理あるでしょうか?

理想でいえば、AutoHotkey.iniのなかにある複数行のスクリプトに
なにかラベルをつけて、そのラベルをINPUTボックスで入力エンターすると
そのスクリプトが起動するようにしたいです。

FileLaunchやAutoHotFileというahkはHDDのなかにあるexeを
みつけて起動するタイプのもので、複数行のスクリプトは
選択して起動できないですよね?

GUIを作って、マウスクリックからスクリプトを起動する
というのはなんとなくわかるのですが、キーボードからのコマンド入力で
スクリプトを選択して実行というのは無理でしょうか?

おしえてください
735名無しさん@お腹いっぱい。:2010/06/03(木) 19:50:19 ID:dQoSCCBq0
>>734
なにをやりたいのか、さっぱりわからない
736名無しさん@お腹いっぱい。:2010/06/03(木) 19:51:31 ID:u33GkK2q0
737名無しさん@お腹いっぱい。:2010/06/03(木) 20:12:50 ID:+V4Y8WEK0
>>736
ありがとうございます。こんなんあったんですね。
Hotstringのスクリプト実行型ですね。うまく希望にかなうかな。
候補がでてほしいような。しかし非常に使える機能ですね。

>>735
コマンドライン入力型のランチャーをAHKで作って
複数行に渡るスクリプトを選択実行したい。
738名無しさん@お腹いっぱい。:2010/06/03(木) 20:30:00 ID:yW61PFK90
InputBox, keyword
If IsLabel(keyword)
 Gosub, %keyword%
739名無しさん@お腹いっぱい。:2010/06/03(木) 21:14:08 ID:+V4Y8WEK0
>>738
そのあとどうやって補っていくのか分からないけど
イケル気がする。
ラベルのつけ方わかんないけど、なんか。
ありがとうございます。
740名無しさん@お腹いっぱい。:2010/06/04(金) 00:17:26 ID:iS3gjDV40
#E::
InputBox, keyword, スクリプト選択実行, コマンド?, , 200, 110, 0, 0, , 30
if (IsLabel(keyword)) {
Gosub, %keyword%
} else {
MsgBox, 該当処理なし ; 合致するサブルーチンが無いとき
}

return

test:
MsgBox, 成功!
return
---------------------------------
これで一応できたのかな? ちょっと嬉しい。過去スレより
もっとスマートにできたらいいが。ありがと。
741名無しさん@お腹いっぱい。:2010/06/04(金) 10:05:48 ID:r7Q2PGOs0
AutoHotkey64: 64-bit AHK_L - Now with DllCall() support!
http://www.autohotkey.com/forum/topic58237.html

http://www.autohotkey.com/forum/topic22923-568.html
> I added COM support to AutoHotkey64 recently posted by fincs.
> It was compiled using VC++ 2010. The zip file contains both 32bit/64bit executables,
> modified/new source files, and VC++ 2010 project files.


64なOS持ってないから試せないが
742名無しさん@お腹いっぱい。:2010/06/04(金) 10:08:52 ID:/tA/5zI8P
AHKをLinux(Ubuntu)上で動かす方法なんて、無いよね?
あったら、スクリプトを使いまわせてかなり便利なんだけどなぁ・・・
743名無しさん@お腹いっぱい。:2010/06/04(金) 10:20:04 ID:MqE4GjBr0
x64キタ━━━━(゚∀゚)━━━━!!!!
744名無しさん@お腹いっぱい。:2010/06/04(金) 10:30:25 ID:pvJXCdYy0
x64 版だと ThumbRemap は動かないよ
745名無しさん@お腹いっぱい。:2010/06/04(金) 10:31:42 ID:pvJXCdYy0
746名無しさん@お腹いっぱい。:2010/06/04(金) 10:43:32 ID:/tA/5zI8P
>>745
ありがとう。ちょっと研究してみます。
747名無しさん@お腹いっぱい。:2010/06/04(金) 10:48:52 ID:CGxYHNQg0
キーボードとマウスの掃除をしようと思って

#Persistent
BlockInput On
Msgbox 入力無効化中`nCtrl+Alt+Del を入力し ESC で終了してください。
KeyWait Esc
ExitApp

って書いてみたけどダメだった
ボスケテ
748名無しさん@お腹いっぱい。:2010/06/04(金) 10:58:42 ID:pvJXCdYy0
>>747
Win + L で Windows をロックして、その間に掃除したら?
749名無しさん@お腹いっぱい。:2010/06/04(金) 11:32:00 ID:MqE4GjBr0
ttp://uproda11.2ch-library.com/245320RQd/11245320.txt
x64試してみたShell_NotifyIcon()でトレイアイコンがうまく登録できないんだけれどどうして?
↑はExplorer.exeのアイコンを通知領域に表示させるだけのスクリプト
通常版(32bit)だと問題なく動く
750名無しさん@お腹いっぱい。:2010/06/04(金) 11:39:01 ID:MqE4GjBr0
あと当然だけど64bitアプリにも>>594とか使えるようになってた
751名無しさん@お腹いっぱい。:2010/06/04(金) 11:50:32 ID:Ao9pzt9N0
>>740
http://lukewarm.s101.xrea.com/UTIL.zip
の中の FileLaunch.zip が多分あーたのやりたいことの完成形
もっとも、ここまでするんなら素直に既存のコマンドラインランチャ使ったほうが楽な気もするが。
752名無しさん@お腹いっぱい。:2010/06/04(金) 12:51:02 ID:Eu+p6LXq0
>>749
myhWndとかhIconとかポインタを32bitのままNumPutしてるからじゃない?
ttp://www.autohotkey.com/forum/topic58237.html
をA_PtrSizeで検索して真似してみては。
構造体の大きさも変わるね。
753名無しさん@お腹いっぱい。:2010/06/04(金) 12:54:10 ID:iS3gjDV40
>>751
レスありがとうございます。
そのFileLaunchちょっとだけ使ってたことあるんですが、
あれって、基本、HDDのなかにあるexeを実行するだけで
複数行からなるスクリプトを実行することって無理じゃないですか?
できるとしたら.ahkファイルごと実行したりすることのような。
初心者なのでreadme読んでもたしかにチンプンカンプンなんですが。
754名無しさん@お腹いっぱい。:2010/06/04(金) 13:11:19 ID:Ao9pzt9N0
いやすまん、UI部のサンプルのつもりだった。
実行部分に関してはIsLabelなり、IsFuncなりで好きなとこ飛ばすよう書き換えればいいかとと思って
755名無しさん@お腹いっぱい。:2010/06/04(金) 13:52:59 ID:MqE4GjBr0
>>752
どうもありがとう!
64ビットになるとハンドルの長さが倍になるの忘れてました
88→96に拡張してその分NumPut先ずらしたら無事動きました
・・Ptrとかあるの初めて知ったびっくりした
756名無しさん@お腹いっぱい。:2010/06/04(金) 14:19:39 ID:iS3gjDV40
>>754
あー、なるほど。それができればむちゃくちゃ理想に近づく。
そこまでのスキルないけど。なるほどね。

FileLaunchほんとにありがたいんだけど、普通用途で使ってても
登録されてない文字をエンタで打つとエラーで落ちたり
いまいち不安定のような。ただでもらっといてなんですが&ありがたいんですが。
公式フォーラムもこれっぽいものないし。AutoHotFileはすごくUI綺麗なんだけどなー。
757名無しさん@お腹いっぱい。:2010/06/04(金) 14:35:15 ID:MqE4GjBr0
できたと思ったらただAutoHotkey_Lx86で実行していただけだった・・しばらく考えてくる
758名無しさん@お腹いっぱい。:2010/06/04(金) 15:16:03 ID:yFaa4KCa0
>>747
px := A_ScreenWidth/2-220
py := A_ScreenHeight/2-20
msg = 入力無効化中`nCtrl+Alt+Del で終了してください。
BlockInput, On
Progress, W300 X%px% Y%py% B1 C00 ZH0 ZW0 ZY2 FM16 WM200 WS200 CWFFFFBF, , %msg% ; Tooltip風Progress
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770"))
Sleep, 100
Progress, Off
BlockInput, Off
PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる
759747:2010/06/04(金) 21:36:23 ID:CGxYHNQg0
>>748
スペースキーで復帰しちゃいました
>>758
入力が無効にならずに、Ctrl+Alt+Delを押すとユーザ切り替えやログオフとかのメニューになりました

環境を書き忘れてました
Windows7 64bitでAutoHotKey 1.0.48.05です
64bitがまずいのかもなので、今までどおり電源を切った時に掃除します
せっかく答えてもらったのにごめんなさい
760名無しさん@お腹いっぱい。:2010/06/04(金) 21:57:47 ID:yFaa4KCa0
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770"))
の WinExist("Windows タスク マネージャ ahk_class #32770")
の部分をWin7のタスクマネージャーのウィンドウハンドルが取得されるように書き換えて

PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる
の部分を
Send, {esc}
に置き換えると動くかもよ
Win7の環境がないので動くか分らんけど
761名無しさん@お腹いっぱい。:2010/06/04(金) 21:58:39 ID:r7Q2PGOs0
BlockInput中でも、RegisterRawInputDevicesでの直接入力は読み取れるんで、ゴニョゴニョできるけどね
762名無しさん@お腹いっぱい。:2010/06/04(金) 23:19:15 ID:Eu+p6LXq0
>>757
すまんDllCallも\Shell_NotifyIcon"直後のUInt以外は変えないとだね。
環境ないからこれでだめならわからないや。
763名無しさん@お腹いっぱい。:2010/06/06(日) 13:05:39 ID:Fqn9cELk0
>>762
ありがとう、UINTをPtrに変更したりPut先変更してみたりと昨日から1日中いじくってたらなんかわかんないけど動いた
ttp://uproda11.2ch-library.com/245750DBl/11245750.txt

cbSize(unsigned long)とhWnd(void*)とhIcon(void*)が4byte→8byteになるのはいいとして、
uCallbackMessage(unsigned int)とhIcon(void*)の間に8byteあけないとアイコンが表示されなかったのがよくわからない・・
764名無しさん@お腹いっぱい。:2010/06/06(日) 13:58:26 ID:mVkCkSMA0
>>763
アラインメントかorz アドレスがそれぞれ2,4,8の倍数以外からの
16,32,64bitロード/ストアはパフォーマンスが落ちるからそうなってる。
cbSizeもお尻4バイトはpadと思われ。
それはともかく乙。
765名無しさん@お腹いっぱい。:2010/06/06(日) 14:04:32 ID:Fqn9cELk0
>>764
おお、なるほどー
詳しい解説ありがとうございます
ふう、これでやっとx64移行できる
766名無しさん@お腹いっぱい。:2010/06/10(木) 13:35:16 ID:qp4JnDpeO
簡単そうな質問ですみません
スペースキーを押してる間だけマウスの左ボタンを中央ボタンにするには
どうすればいいんでしょう
 LButton::
 if GetKeyState("Space")
 MouseClick, Middle
 else
 MouseClick, Left
 return
これだと左ボタンのドラッグ操作ができなくなっちゃいますよね…
767名無しさん@お腹いっぱい。:2010/06/10(木) 14:37:25 ID:ylAmdHFH0
$Space:: Hotkey,Lbutton,LtoM,ON
$Space up:: Hotkey,Lbutton,LtoM,OFF

LtoM:
Send,{MButton Down}
KeyWait,%A_ThisHotkey%
Send,{MButton Up}
return
768名無しさん@お腹いっぱい。:2010/06/10(木) 14:47:21 ID:eKO6lFPP0
質問者じゃないけど、>>767の、downしてkeywaitしてupって方法は俺も使用してる。
けど、この方法だと、たまにdownになりっぱなしになっちゃうんだよね。なんでだろ。
769名無しさん@お腹いっぱい。:2010/06/10(木) 16:51:55 ID:qp4JnDpeO
>>767
ありがとうございました!
実際に試してみたところ、%A_ThisHotkey%にがSpaceが入ってしまったぽいので
KeyWait,Lbutton
と直接指定するようにしましたら、上手く動作しました。
これでメタセコイアでもグラフィックソフトと同様Space+ドラッグ移動ができるようになります
たすかりましたー
770名無しさん@お腹いっぱい。:2010/06/10(木) 18:52:16 ID:AOYunUdX0
AHKの系譜ってこんな感じかな

AHK(本家)
 ┣ 駄目文字微対策版(CP932)
 ┣ AHKL ━━ AHKL(オブジェクト) .━━━┳ AHKL(ANSI)
 ┃         ┃ ┗ AHKU(Unicode) →┗ AHKL(Unicode)
 ┃         ┃                  ┗ AHK64(x64)
 ┃         ┗ AHK_N (組み込み用DLL)
 ┣ IronAHK (.NET)
 ┣ PocketPC版
  :

AHK_Nって、単に組み込み用インタプリタなだけだと思ってたけどマルチスレッドとか色々出来んのね
771名無しさん@お腹いっぱい。:2010/06/10(木) 20:23:19 ID:cTjYFSODP
ttp://www.autohotkey.net/~fincs/AutoHotkey64/AutoHotkey64_r6b.7z
AutoHotkey32a.exe
AutoHotkey32w.exe
AutoHotkey64a.exe
AutoHotkey64w.exe
が入ってた
AutoHotkey32*は本家AHKLとどう違うんだろ
772名無しさん@お腹いっぱい。:2010/06/10(木) 20:55:19 ID:TjMXzMpI0
すごく助かってるんだが、
もうちょっと真っ当な文法に変更した(拡張した)バージョンはないんだろうか
773名無しさん@お腹いっぱい。:2010/06/11(金) 09:51:27 ID:PHd8rqCN0
ホットストリングってXP じゃ使用できないのですか?
いっさい動かないのですが。
NT専用ってそういうことなのですか?
774名無しさん@お腹いっぱい。:2010/06/11(金) 10:04:31 ID:PHd8rqCN0
↑すいませんできました。終了文字を打たないといけないのを
しりませんでした
775名無しさん@お腹いっぱい。:2010/06/11(金) 15:20:43 ID:m7Uga7N70
>>771
32bitに限定して言うと、AHKLの機能拡張版と言えるかな。
今のところ追加ライブラリなしでCOMが使える。
> ComObjCreate("SAPI.SpVoice").Speak("Hello. This is AutoHotkey!")

オブジェクト、DllCall, RegisterCallback等バリバリ利用している常用スクリプトがそのまま動くか試したみたら、あっさり動いた。
776名無しさん@お腹いっぱい。:2010/06/11(金) 15:30:55 ID:LEpzeAUWP
>>775
すげーそんな機能が
ちょっと置き換えてくる
777名無しさん@お腹いっぱい。:2010/06/12(土) 04:09:07 ID:DyBQSV7c0
ダウン機能あるならアップ機能もつけてほしい
778名無しさん@お腹いっぱい。:2010/06/13(日) 12:31:22 ID:O3jVosKT0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Revision 52 - June 12, 2010

* Fixed: ObjRemove's Key parameter is now optional, as with Object._Remove.
* Fixed: Files were improperly locked while reading, unlike in older versions.
* Fixed: Uppercase Hex format caused negative integers to become unsigned.
* Fixed: RegExMatch was corrupting output array items when specific conditions were met. See bug report.
779名無しさん@お腹いっぱい。:2010/06/13(日) 12:36:52 ID:3shnEQj10
ime の操作がよく分からないんですが
tsf を使えば変換中の文字列を取得できることはわかりました

Text Services Framework (Windows)
http://msdn.microsoft.com/en-us/library/ms629032(v=VS.85).aspx

サンプルコードがc++で書いてあるようですが
c++自体よく分かりません
ime.ahk のようにautohotkeyで簡単に使えるライブラリをどなたか作ってくださいませんか
780名無しさん@お腹いっぱい。:2010/06/13(日) 13:20:15 ID:w3XWaiC+0
L52
>>383,419の読み込まれるAHKファイルのロックは直ってるな
781名無しさん@お腹いっぱい。:2010/06/14(月) 00:45:34 ID:iYcz9aWA0
AutoHotkey_Lw で BREGEXP.ahk を使おうとしたけど無理でした。
対応させる方法や対策ってありますか?
782名無しさん@お腹いっぱい。:2010/06/14(月) 00:54:21 ID:GZ8fb7MXP
DllCallのStrをAStrにするとか?
783名無しさん@お腹いっぱい。:2010/06/14(月) 01:34:18 ID:FIGKGUBi0
ユニコード版だと普通に日本語の正規表現( [あ-お]+ とか)通るけど、BREGEXPを使うメリットあんの?
784名無しさん@お腹いっぱい。:2010/06/14(月) 18:18:05 ID:ALg9gFPI0
全角のファイル名を半角にしたいです。
どうすればいいですか?
785名無しさん@お腹いっぱい。:2010/06/14(月) 21:41:47 ID:FIGKGUBi0
FileMoveでリネームする
全角半角変換はNKF使うか、StringReplaceをひたすら列挙
ただしファイル名に使えない置換が起きる(「/」→「/」、「?」→「?」など) のを考慮しないと上手くいかんよ
786名無しさん@お腹いっぱい。:2010/06/14(月) 21:54:28 ID:B7sJ499/P
AHK標準版で、Unicodeの含まれたファイル名をリネームしたいのだけど、
filemoveだとできないね。送り側のファイルを認識してくれない。

これさえ解決できれば、互換性の低いUnicode版でやきもきしないで
すむのだけどなぁ・・・
787名無しさん@お腹いっぱい。:2010/06/14(月) 22:01:31 ID:ALg9gFPI0
>>785
なんとなくわかりました。ありがとうございました。
788名無しさん@お腹いっぱい。:2010/06/17(木) 11:35:40 ID:G2zpoNzk0
GUIでウィンドウ内にコントロールが収まらない場合
右端にスクロールバーを出すようにできますか?
789名無しさん@お腹いっぱい。:2010/06/17(木) 12:47:46 ID:IKdIhS2F0
スクロールバーを「出すだけ」なら、GUIのオプションを変更するだけなので簡単できる。
Gui, +0x00100000 ; WS_HSCROLL
Gui, +0x00200000 ; WS_VSCROLL

ただ、これだけだと何も起こらない。スクロールバーの位置すら動かない。

スクロールバーが操作されたメッセージを拾ってウィンドウ内のオブジェクトを動かしたり
スクロールバーを移動したりする処理をいちいち書いてやらなければならない。

やりたいことは出来るだろうけど、Win32APIゴリゴリ使える人じゃないと厳しい。
790名無しさん@お腹いっぱい。:2010/06/17(木) 13:02:02 ID:G2zpoNzk0
>>789
ありがとうございます
せっかく簡単にGUI作れるのにそういうところも簡単にできればいいんですが
やはり専門の知識がないと難しいんですね。
791名無しさん@お腹いっぱい。:2010/06/17(木) 14:29:52 ID:cHpWkdRVP
Win7x64でControlSendうまく動いてる人いる?
何度試しても↓が動かない・・

SetTitleMatchMode, 2
#If hWnd:=WinExist(" - Mozilla Firefox")
WheelDown::ControlSend,,{WheelDown},ahk_id %hWnd%
WheelUp::ControlSend,,{WheelUp},ahk_id %hWnd%
#If
792名無しさん@お腹いっぱい。:2010/06/17(木) 17:09:18 ID:IKdIhS2F0
FireFox は内部でWheelRedirectみたいなことしていて、
WheelUp/Down を送ってもマウス直下がスクロールする所じゃないと無反応。
これは Send でも同じだし、WM_MOUSE(H)WHEEL 送っても同様。
793名無しさん@お腹いっぱい。:2010/06/17(木) 17:14:07 ID:cHpWkdRVP
>>792
なるほど、すっきりした
試しに^wでやってみたらちゃんと動いた
ありがとう
794名無しさん@お腹いっぱい。:2010/06/19(土) 14:48:51 ID:sEnfDrSd0
たぶんXP限定だけど
IfWinExist, ahk_class BaseBar
{
WinActivate
}
ってやるとタスクバーとは独立した画面の四隅に張り付けるタイプの
ツールバーを前面に呼び出せるね。
Win+Dやるよりはるかにレスポンスがいい。
右クリ自動的に隠すにチェックつけておけばクリック後は自動的に隠れて復帰の手間も省けるし。
もうツールバーが9段に増殖し続けてるw

これとマウスカーソルの位置に応じて複数のランチャやスイッチャを切り替える
メタランチャ的なコードと組み合わせると便利かも。
CoordMode,Mouse,Screen
MouseGetPos, mx, my
SysGet, width, 78
SysGet, height, 79

if(my < height / 3) {
LauncherTop()
} else if(my > height *3/4) {
LauncherBottom()
} else if(mx > width / 2 ) {
LauncherRight()
} else {
LauncherLeft()
}
795名無しさん@お腹いっぱい。:2010/06/20(日) 18:39:20 ID:1LvBEteF0
複数マウスのボタン定義を変えてみる

RegisterRawInputDevices で直接入力拾うとホットキーより先に処理が始まるみたいなんで、
デバイスIDをグローバル変数に定義してやる方法で出来た。
AHKL の #If で思ったよりあっさりと定義できる、本家でも If 分岐でイケる。

ただデバイスIDを予め取っておかないといけないし、抜き差ししたりするとId変わるので面倒だ。

#NoEnv
DetectHiddenWindows, On
OnMessage(0xFF, "WM_INPUT"), VarSetCapacity(dev, 12, 0), NumPut(1, dev, 0, "UShort"), NumPut(2, dev, 2, "UShort"), NumPut(0x100, dev, 4) ; UsagePage / Usage / dwFlags = RIDEV_INPUTSINK
Process, Exist
NumPut(WinExist("ahk_class AutoHotkey ahk_pid " ErrorLevel), dev, 8)
DllCall("RegisterRawInputDevices", "Ptr", &dev, "UInt", 1, "UInt", VarSetCapacity(dev))
Return

WM_INPUT(wParam, lParam) {
 global deviceId
 Critical
 DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "UInt", 0, "UIntP", size, "UInt", 16)
 VarSetCapacity(raw, size, 0)
 DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "Ptr", &raw, "UIntP", size, "UInt", 16, "Int")
 SetFormat, IntegerFast, h
 deviceId := (NumGet(raw, 0, "Int") == 0) && NumGet(raw, 20, "UShort") > 0 ? NumGet(raw, 8) : 0
}

#If (deviceId = XXXXX) ; デバイスIDを指定
MButton::
 ; 何か〜
 Return
796名無しさん@お腹いっぱい。:2010/06/21(月) 02:09:16 ID:Umi6TRor0
UTF-8ファイルをFileReadで読み込んだら
文字化けして変数に格納されるけど
文字化けせずに変数に入れる方法ありませんか?

予めFileEncoding,UTF-8と設定してれば問題ないけど
そしたらshift-jisのテキストファイルが文字化けしてしまうので
文字コードを判別して読み込むとかできたら助かるんですが。
797名無しさん@お腹いっぱい。:2010/06/21(月) 08:20:45 ID:TCw4ZJNXi
エンコーディングの自動判別はブラウザやテキストエディタだって間違うことがあるんだぜ

Ahkには自動判別するルーチンがないんで、
バイナリで読み込んでエンコード毎の特異なバイナリ配列で判断して再度読み直すか、
バイナリでバッファに格納してからNKFなどの自動判別のできる
DLLにバッファアドレスを引き渡すなどをしてやる、ってかんじかな。

ただエンコードが混在の方が問題じゃないのかなぁ、とは思う
798名無しさん@お腹いっぱい。:2010/06/21(月) 13:49:11 ID:Zb2ahP++0
非常に初歩的な質問で申し訳ないのですが

WinGetText, tx1, A
MsgBox, The text is:`n%tx1%

としてWindowsのメモ帳ですと書いた本文を取得してくれるのですが
タブ型のサクラエディタですと本文を取得してくれません。
IEでもウィンドウの本文テキストを取得できないようです。
なんとか取得方法を教えていただければ幸いです。
799名無しさん@お腹いっぱい。:2010/06/21(月) 13:53:43 ID:Gdx0kfQF0
>>798
WindowSpy機能で、どこから取得すべきなのか、そのつど考える方法が一番無難
800名無しさん@お腹いっぱい。:2010/06/21(月) 14:43:11 ID:Zb2ahP++0
ありがとうございます。
WindowSpy機能を使って調べたところ

>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: EditorClient1
Text: EditorClient

このClassNNを指定してやれば動くかと思ったのですが

WinGetText, tx1, ahk_class EditorClient1
MsgBox, The text is:`n%tx1%

ControlGetText, tx1, ahk_class EditorClient1
MsgBox, The text is:`n%tx1%

を試したところ思うような結果が得られません。
その他ahk_idなども試してみましたがダメなようです。
しばらく試行錯誤してみます。
801名無しさん@お腹いっぱい。:2010/06/21(月) 14:49:29 ID:Vjj/ortI0
>>800
> しばらく試行錯誤してみます。
ヒントくれ
教えてくれ
じゃ無くて立派
802名無しさん@お腹いっぱい。:2010/06/21(月) 18:11:20 ID:9Zd4DOjJ0
Win/ControlGetText でテキストが取得できないコンポーネントも結構あるよ
803名無しさん@お腹いっぱい。:2010/06/21(月) 18:55:55 ID:gu5jIrJ60
>>798>>800
原始的な方法w
ControlSend, EditorClient1, ^a^c, ahk_class TextEditorWindow
MsgBox, %Clipboard%

必要ならClipboardのバックアップ+書き戻しとかサクラエティタの全選択の解除とかを追加

あと>>800のスクリプトは↓こう書くべきだけど、まあどっちにしても>>802の言うとおり取得できない
ControlGetText, tx1, EditorClient1, ahk_class TextEditorWindow
804名無しさん@お腹いっぱい。:2010/06/21(月) 19:06:45 ID:Gdx0kfQF0
たしかに、取得したくてもどうしようもないアプリはあるね。

俺はそういう場合、ウインドウタイトルから、編集中のテキストファイルをフルパスで取得し、
抜き取ったファイル名をifexistで調べて存在確認し、あればそれをfilereadして、
別枠で処理してる。

タイトルにフルパスを表示できないアプリの場合、
起動時のコマンドラインオプションを覗く。(はやらせるページの関数で)

それでもダメなら、アプリを起動する際に、本番のアプリを
起動するための踏み台プログラム(ラッパー)をAHKで作ってる。

エディタを起動する際、必ずこのラッパーを通すようにすれば、
編集中のファイルをあとから確実に追跡できるようにしている。
まあこれだとエディタで「開く」などの処理をしてしまうとズレてしまうけど。

いまのところ、この方法のどれかで落ち着いている。
805名無しさん@お腹いっぱい。:2010/06/21(月) 19:51:23 ID:yGXaor0TP
テキスト取得って例えば何に使うの?
便利なんだろうけど思いつかない・・
806名無しさん@お腹いっぱい。:2010/06/21(月) 20:42:35 ID:Gdx0kfQF0
>>805
個人的に・・・AHK関連なら

・スクリプト内で使ってる関数の一覧や個数、登場位置を、別ウインドウでリアルタイムに出す
・関数やコマンドの使い方(引数など)をtooltip表示
・文法チェックや大括弧の階層カウント

とかは地味に便利。

エディタのマクロで作れるような機能も、あえてAHKで作ってる。
理由は、一度作ってしまえば、エディタの専用機能やプログラムに依存せず、
エディタを乗り換えても使えて、使いまわし的に有利だから
807名無しさん@お腹いっぱい。:2010/06/21(月) 20:45:14 ID:DgWvamzV0
うおおおおおおおおおおおおおお
そんなこともできるのか!!!!
808名無しさん@お腹いっぱい。:2010/06/21(月) 21:11:48 ID:c/47oyM60
a & b::msgbox ab
a & c::msgbox ac
; a & 〜がたくさん
a up::
if (A_TimeSinceThisHotkey < 300)
Send a
return

こう書いて、aは修飾キーにしたまま、aだけを300ms以上押していた場合は
何も入力しないようにしたかったんですが、
押していた時間にかかわらず、upのタイミングで入力されてしまいます
期待通りに動かすにはどうしたらいいのでしょうか?
809名無しさん@お腹いっぱい。:2010/06/21(月) 21:30:08 ID:yGXaor0TP
>>806
なるほどーありがとう
そういえば、本家AutoHotkeyのzipにそんな感じのスクリプトが入ってた気がする
810名無しさん@お腹いっぱい。:2010/06/21(月) 21:30:23 ID:9Zd4DOjJ0
S And S のタイムアウト付きバージョンて感じだな。

$A::
 Keys_With_A := False
 KeyWait, A, T0.3
 If (ErrorLevel && !Keys_With_A)
  Send, a
 Return

~B::
~C::
 :
~Y::
~Z::
 Keys_With_A := GetKeyState("A")
 Return

列挙が嫌ならこのスレを「列挙」で検索する。または、LL Hook や RawInput でフラグ変更。
LL Hook だと http://pc12.2ch.net/test/read.cgi/software/1253888736/177 あたりが使えるかな。
811名無しさん@お腹いっぱい。:2010/06/21(月) 21:31:32 ID:9Zd4DOjJ0
あ、
 Keys_With_A := GetKeyState("A")

 Keys_With_A |= GetKeyState("A")

のほうがいいね
812名無しさん@お腹いっぱい。:2010/06/21(月) 21:36:11 ID:42kWK6KR0
わかる >> あえて AHK
813名無しさん@お腹いっぱい。:2010/06/22(火) 13:03:31 ID:2AiDr8uk0
>>811
横レスですが、その場合の
:= と |=
では処理上どのような違いが出るのでしょうか?
前者は返値の代入で後者は返値の論理和の代入ということだけは
分かりました
代入の速度が速くなるのでしょうか?
814名無しさん@お腹いっぱい。:2010/06/22(火) 15:51:51 ID:cD8QAOuZ0
前者だと上がったフラグが再度下がることがあるけど、
後者だと上がったフラグは下がらない
815名無しさん@お腹いっぱい。:2010/06/22(火) 18:17:34 ID:+5xb0wen0
馬鹿にも分かるように説明してくれ
816名無しさん@お腹いっぱい。:2010/06/22(火) 22:55:25 ID:cD8QAOuZ0
Ifに置き換えると

(前者)
If (条件)
 flag := True
Else
 flag := False


(後者)
If (条件)
 flag := True
817名無しさん@お腹いっぱい。:2010/06/22(火) 23:32:59 ID:AA4zwBo9P
質問者じゃないけど

>>810
これってどうやって使いこなせばよいの?

ためしにAと同時押しのランチャでも作ってみるかーと思ったけど、>>808

>押していた時間にかかわらず、upのタイミングで入力されてしまいます

になっちゃうね
818名無しさん@お腹いっぱい。:2010/06/23(水) 00:45:07 ID:y04zxgA30
>>817
俺も質問者でも回答者でもないけど
ErrorLevel→!ErrorLevel
Send, aの下にKeyWait, Aを追加で期待の動作になるんじゃないかな?

でもこのホットキー常時有効にしたらまともに文章打てなくなると思う
autohotkeyって打ったら、uatohotkey とか utaohotkey になるw
819名無しさん@お腹いっぱい。:2010/06/23(水) 00:56:13 ID:1lkqbD/XP
>>818
thx。動いたよ。たしかに、日本語の入力も、ままならない状態になるね。
こういうランチャの常駐は、原理的に不可能か。

・Aを押したことをいち早く伝えなければ、キー入力に支障が出る
・Aが長押しされたかどうか判別するには、ある程度待たなければならない
 しかし、待つと(ry
820名無しさん@お腹いっぱい。:2010/06/23(水) 01:20:10 ID:y04zxgA30
>>819俺はAutoHoeKey_Lでこんな感じのしょぼいランチャ使ってる
NumLockのあと1秒間隔以内で00〜99までのキー入力

NumLock::
FirstKeyWait = 1
Sleep, 1000
FirstKeyWait =
Return

#If FirstKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
FirstKeyWait =
SecondKeyWait = 1
Sleep, 1000
SecondKeyWait =
Return
#If

#If SecondKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
SecondKeyWait =
MsgBox, % RegExReplace(A_PriorHotKey A_ThisHotKey, "\D", "")
Return
#If
821名無しさん@お腹いっぱい。:2010/06/23(水) 01:29:56 ID:1lkqbD/XP
おおすげぇ。

>#If FirstKeyWait = 1

これってAHK_Lの新機能だっけ?
かなり便利そうだね。
822名無しさん@お腹いっぱい。:2010/06/23(水) 01:33:01 ID:t5JRIxu+0
ほほう、そんなものが
ユニークな機能だ
823名無しさん@お腹いっぱい。:2010/06/23(水) 04:43:35 ID:rc/HoRPa0
ダメ文字の部分で引っかかったのでAutoHotkey_Lを使ってみたのですが
その場合すべてのスクリプトの文字コードをUTF-8に変更しないとダメなのでしょうか?
あと互換性はどんな感じなんでしょうか?
824名無しさん@お腹いっぱい。:2010/06/23(水) 05:28:12 ID:1hiw1Jm+0
SJISで続けたいなら >>503
互換性は http://sites.google.com/site/agkh6mze/translation/autohotkey_l/compatibility でも読んどけ
825名無しさん@お腹いっぱい。:2010/06/23(水) 05:31:08 ID:1hiw1Jm+0
ところで、800超えたんで提起するが、テンプレどうする?
流行らせるページも消えたし、AHKLがかなり変わった上にしユーザも増えてるっぽいけど。
826名無しさん@お腹いっぱい。:2010/06/23(水) 10:15:25 ID:VsV97jO+P
■公式
http://www.autohotkey.com/

■日本語解説
AutoHotkeyを流行らせるページ
http://ahk.xrea.jp/
AutoHotkeyJp
http://sites.google.com/site/autohotkeyjp/
hoge
http://sites.google.com/site/agkh6mze/Home

■過去スレ
http://-----
  :

■派生版
AutoHotkey_L
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/
AutoHotkey64(AutoHotkey_L 64bit版)
http://www.autohotkey.com/forum/topic58237.html

関連リンク>>2以降も参照
827798:2010/06/24(木) 00:01:38 ID:n51ivsKf0
遅くなってすみませんが
お答えいただいた方々ありがとうございました。
なかなか万能とは行かないようですが、
>>803の方の方法でやってみようかと思っています。

みなさま書き込みを参考に少しずつレベルアップしていきたいです。
828808:2010/06/24(木) 21:28:29 ID:saliTuFK0
>>810-811
コピペして少し考えると目的の動作になりました
ありがとうございました
>>818
本来は無変換キーを修飾キーにしようとしていましたが、
質問を見やすくするためaにしました

忙しかったため遅レスですみません
829823:2010/06/24(木) 21:33:23 ID:ryPilJcc0
>>824
ありがとうございます。
DllCallなどよくわからずに流用してる物が多いのですが
手直しなども必用なんですね

文字コードはUTF-8とUTF-16LEが正常に読み込めたのですが
どっちにした方がいいのでしょうか?
830名無しさん@お腹いっぱい。:2010/06/24(木) 23:45:03 ID:a4LmzMUnP
Menu, メニュー名, Show
で表示させたメニューの項目を左クリック、右クリック、中クリックで選択した際にそれぞれ違う動作をさせることは可能でしょうか?
AutoHotkey64w r7です

あ、ついでに
AutoHotkey64更新されてた

ttp://www.autohotkey.com/forum/topic58237.html
Changelog:
* r7: Upgraded to AutoHotkey_L L52.
831名無しさん@お腹いっぱい。:2010/06/25(金) 00:38:45 ID:R9enYsNqP
相変わらず1行もコードを書かずにコンパイルしても
マカフィーでウイルス反応が出るのだけど誰も報告したりしないのだろうか
UPXも関係無いみたいだし
832名無しさん@お腹いっぱい。:2010/06/25(金) 02:18:54 ID:LO18MXty0
>>830
無理なはず
833名無しさん@お腹いっぱい。:2010/06/25(金) 11:17:46 ID:IE5DxVF10
FileSelectFile や FileSelectFolder でダイアログを表示する時に
ダイアログの表示位置を指定することは出来ないのでしょうか?
834名無しさん@お腹いっぱい。:2010/06/26(土) 12:18:00 ID:nYMFrh030
GUIのウインドを印刷したいんですが、プリンタにデータ送るのってむずかしいんでしょうか。
ハードコピーだと文字が汚くなるので、できれば普通の印刷みたいにプリンタにデータを送りたいのですが。
835名無しさん@お腹いっぱい。:2010/06/26(土) 13:15:29 ID:R24TNTNhP
>>832
ありがとうございます
処理の分岐だけできればいいので、今回はメニュー項目をクリックしたら子メニューを出す方法で実装してみます


すみません、もう一つ質問なのですが、
GUIにAdd,Tabでタブ1、タブ2、タブ3、タブ4・・・とタブを登録したAHKウィンドウを表示しているとき
タブ2を削除して以降1つずつ前にずらしたりタブnを追加したりと動的にタブを扱うことは可能でしょうか?
それぞれのタブにEditを表示して付箋みたいなことをしたいのですが、
追加/削除するたびにGui,Destroy→Gui,Add,Tab/Gui,Add,Editとするのはどうにも無駄な気がしてしまって
836名無しさん@お腹いっぱい。:2010/06/26(土) 14:44:53 ID:l3HhhS2S0
Guicontrolでコントロールの内容を変更した時は
gオプションで指定したラベルに飛ばさないようにできませんか?
837名無しさん@お腹いっぱい。:2010/06/26(土) 14:47:36 ID:jOmC8RZh0
>>833
普通は出来ないけど、タイマ使って表示されたら移動するみたいな姑息なkとはできる

>>834
AHKLの Gui, Font, qN でアンチエイリアスをある程度制御できるけど、根本解決にならないね
PDFとかHTMLへの文字列埋め込みを使う方が確実かと。

>>835
出来るけど面倒かと。
GuiControl,, TabControlName, NewTabName, でタブ追加出来るけど、
タブは先頭に追加されるんで、各ページにあるアイテムをずらしてやんないといけないし。

だったら、タブの高さを文字分だけにして Edit コントロールは1個。
タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。

切り替えの度にキャレットの位置などを待避・復元したいなら
EM_XXXX あたりで情報取得・操作が必要になるけど。
http://yokohama.cool.ne.jp/chokuto/urawaza/message/
838名無しさん@お腹いっぱい。:2010/06/26(土) 14:55:01 ID:R24TNTNhP
>>837
>だったら、タブの高さを文字分だけにして Edit コントロールは1個。
>タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。

思いつかなかった・・ありがとうございます!
メッセージの方も見てみます
839名無しさん@お腹いっぱい。:2010/06/26(土) 15:22:38 ID:jOmC8RZh0
>>836
それ、フラグでやったことはあるなぁ

Gui, Add, Edit1, vEdit1 gEdit1_OnChange
 :
Edit1_SkipEvent := True
GuiControl,, Edit1, HogeHoge
Edit1_SkipEvent := False
 :

Edit1_OnChange:
 If ( Edit1_SkipEvent )
  Return
 メイン処理
 Return
840名無しさん@お腹いっぱい。:2010/06/26(土) 21:07:33 ID:l3HhhS2S0
>>839
これはw
質問する前に全く同じことやりました
やっぱりこういう手段しかないんですかね
ご親切にありがとうございました。
841名無しさん@お腹いっぱい。:2010/06/27(日) 07:21:04 ID:4hmeKhjn0
linuxの環境表示ツールで有名な「Conky」みたいな表示を
AHKでさせたいのですが、なにか使いまわせそうな既製サンプルはないでしょうか。

Conkyはこんな感じの表示ツール
http://www.ubuntugeek.com/images/conky/7.png
842名無しさん@お腹いっぱい。:2010/06/27(日) 16:38:00 ID:sNXY9MdS0
情報取得?それとも表示?その両方?どっちにしろ、あまり得意でないと思うよ。
Samurize 使った方が幸せだと思う
843名無しさん@お腹いっぱい。:2010/06/27(日) 17:44:40 ID:tJzU2OQW0
Samurizeも最近弄ってなさ過ぎで全てを忘れちまったなぁ・・・
844名無しさん@お腹いっぱい。:2010/06/27(日) 17:54:31 ID:KXoKq9gG0
ホットキーに対応してどうこうじゃなく
外部からmemo.ahkを起動してメモ帳にキーを送って即座に終了って
どう書けばいいんですか?

; memo.ahk
IfWinExist, 無題 - メモ帳
{
  Send,hello
}

じゃうまくいかないようでした。
845名無しさん@お腹いっぱい。:2010/06/27(日) 18:19:19 ID:RxxSYUXm0
IfWinExist, ahk_class Notepad
{
IfWinNotActive, ahk_class Notepad
WinActivate, ahk_class Notepad
Send, hello
}
846名無しさん@お腹いっぱい。:2010/06/27(日) 23:01:44 ID:4hmeKhjn0
>>842
了解です、ありがとうございます。
AHKで既製品がないようなので、似たようなものをGUIで1から作ることにします
847名無しさん@お腹いっぱい。:2010/06/28(月) 01:06:14 ID:gIZXfJAQP
流行らせるページのシステムモニタが同じような感じだった
>>1のzipに入ってる
848名無しさん@お腹いっぱい。:2010/06/28(月) 20:13:50 ID:gIZXfJAQP
せんせー!AutoHotkeyで作ったGUIがSetWinEventHookにひっかかってくれないのはどうしてですか!
849名無しさん@お腹いっぱい。:2010/06/28(月) 22:34:07 ID:CvVs7iH70
>>53の例でいうと

>, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS

 "UInt", 0x0000 ; 自分のプロセスやスレッドを無視しない
にする
850名無しさん@お腹いっぱい。:2010/06/29(火) 02:09:48 ID:PSDsZroD0
最小化時にタスクトレイに格納できるけど、
タスクトレイからウィンドウを復帰するホットキーのない
アプリ(Twit)で、

タスクトレイ格納・復帰をトグルさせるキーは、
どう書けばよいでしょうか。何か調べる方向性を示す
ヒントをお願いします。
851名無しさん@お腹いっぱい。:2010/06/29(火) 02:29:55 ID:T+V/xBaz0
ウィンドウがあったら閉じて、無かったら起動で良いんじゃない。
852名無しさん@お腹いっぱい。:2010/06/29(火) 13:15:06 ID:f2t8/ycBi
>>850
下に行くほど面倒。
1) MouseClick で座標指定でトレイ操作。
 必要に応じてメニューのアクセラレータキーをSend
 欠点:アイコンの誤爆が有り得る
2) (1)の前にImageSearchで座標を調べる処理を追加
3) 跡地から「タスクトレイアイコン操作」拾ってトレイ操作をエミュレート。
4) リソースハッカーなどでコマンドID調べて隠し窓にPostMessage。
 ただし調べても分からないことがある。
853名無しさん@お腹いっぱい。:2010/06/29(火) 17:59:29 ID:xcE/nB7tP
>>849
うおーありがとう、ありがとうございました!
854名無しさん@お腹いっぱい。:2010/07/02(金) 13:51:51 ID:SKFXYBNM0
BOMなしUTF-8のテキストって絶対文字化けするんだね
855名無しさん@お腹いっぱい。:2010/07/02(金) 15:36:39 ID:Y8vfxMdE0
856835:2010/07/02(金) 16:40:49 ID:Y8HaskfWP
タブの件ですが、なんとか解決できました
流行らせるページのGuiControlの説明にはタブ項目をすべて再設定する方法が記載されていませんでしたが、
試しにDropDownListの方法を試してみたところ、GUIの再生成なしにタブ項目を再設定できました
文字列操作でタブを左右に移動とか項目名変更とかできそう

Gui, Add, Tab, VMyTab, a|b|c|d|Default||
Gui, Show
Msgbox, タブ項目を再設定します
sNewTabItems = Default||b|c|d|e
GuiControl, , MyTab, |%sNewTabItems%

既出というか当たり前のことだったらごめん
これで1週間近く悩んでた
857名無しさん@お腹いっぱい。:2010/07/02(金) 22:39:25 ID:4toW4sAfP
以下のコードで、A_Loopfieldで取り出した文字列に、スラッシュ等が入っていると、
エラーダイアログが出て、スレッドが停止してしまいます。

fileread,data,c:\a.txt
loop,parse,data,`n
 {
 %A_LoopField%:=A_Index
 }

変数として定義するとエラーになる文字を、確実に取り除くことってできますか?
エラーが出るたび、stringreplaceで空白に置き換えて除外していますが、
なにか手はない物かと・・・

こんな感じで考えています↓

fileread,data,c:\a.txt
loop,parse,data,`n
 {
 filter:=filter(A_LoopField)
 %filter%:=A_Index
 }

filter(string)
 {
 なにか
 }
858名無しさん@お腹いっぱい。:2010/07/02(金) 22:51:13 ID:6rnSmqji0
AHKLのオブジェクトを使えばいいんジャマイカ

filter := Object()

Loop, 〜
{
  〜
 filter[A_LoopFiled] := A_Index
  〜
}
859名無しさん@お腹いっぱい。:2010/07/03(土) 19:41:44 ID:kWvq6rye0
>>850
おれはcentigrade氏のアイディアを拝借、一部改変し利用させてもらってるよ
これでタスクトレイ格納・復帰のトグルが実現できる
ただし、WinXPからWin7 64bitへ移行したらタスクトレイからの復帰ができなくなったorz
解決策わかる方ヒントplz m(_ _)m

#include TaskTrayIcon.ahk

ActivateOrLaunch(commandPath="") {
  SplitPath, commandPath, appName
  Process, exist, %appName%
  appPID:=errorlevel
  if (appPID <> 0)
  {
    WinGet, WIN,, ahk_pid %appPID%
    IfWinExist, ahk_id %WIN%
    {
      IfWinActive, ahk_id %WIN%
        WinMinimize,A
      else
        WinActivate
    }
    else
    {
      DetectHiddenWindows,On
      cnt:=Tray_GetCount()
      Loop,%cnt%{
        Tray_GetInfo(A_Index,hwnd,uid,msg,icon)
        WinGet,pn,ProcessName,ahk_id %hwnd%
        if(pn=appName){
          PostMessage,%msg%,%uid%,0x203,,ahk_id %hwnd%
          break
860名無しさん@お腹いっぱい。:2010/07/03(土) 19:43:03 ID:kWvq6rye0
        }
      }
      DetectHiddenWindows,Off
    }
  }
  else
  {
    Run, % commandPath,,UseErrorLevel
    If ErrorLevel
      msgbox, %appName%は存在しないか、またはエラーにより起動できません
  }
  return
}

引数にはコマンドのフルパスを渡す。
#^p:: ActivateOrLaunch("C:\path\to\app.exe")
861名無しさん@お腹いっぱい。:2010/07/03(土) 23:50:59 ID:NCG34LV30
AHK64使って、更にx64用にトレイ関連ライブラリを改変する必要がある。
>>749,752,755,757,762-765 辺りが参考になる。
862名無しさん@お腹いっぱい。:2010/07/04(日) 01:52:58 ID:n5wu8pkp0
>>861
アドバイスありがとう!
該当レスをよく読んで勉強してみます
863名無しさん@お腹いっぱい。:2010/07/05(月) 12:21:58 ID:lqlb3yyb0
上の方で、本当のマルチスレッドを扱えるautohotkeyの派生が
取り上げられているけど
実際のところ、atutohotkeyの擬似マルチスレッドよりも
本当のマルチスレッドを使う利点はある?
というのも、擬似マルチスレッドでたいていのことが済んでしまうと思うから

できれば、本当のマルチスレッドの実例を見てみたいです
864名無しさん@お腹いっぱい。:2010/07/05(月) 13:45:25 ID:wcck/3Fr0
実際の所、常駐スクリプトだとタイマーやイベント監視で条件分岐して、
いくつかのコマンド投げるってことが殆どだろうから、擬似マルチスレッドでも殆ど問題ないなぁ

マルチスレッドだと、分割DLしたいとか、デカいデータを並列で処理したい、とかなんで、
ホットキーやタイマでのアラートみたいな使い方だと無理して使う必要はないんじゃないのかね。

あとはGUI作って、ボタン押すとゴリゴリ演算するってやつ走らせた時は、
演算系は別スレッドで動かしたいなぁと思うことはあった。

あとAHK_Nは、AHKの中にAHKの実行環境を作って操作するみたいなんで、
他のスクリプトをRunするので代用できてるなら無理して使う必要も無いんじゃないかな。
(メモリ効率とかは良いと思うけど)
865名無しさん@お腹いっぱい。:2010/07/06(火) 01:44:58 ID:vGHoE+LW0
ファイルをロックしたいんですができますか?
移動できなくしたりリネームできなくしたいんですが
866名無しさん@お腹いっぱい。:2010/07/06(火) 08:39:34 ID:04FfhjZPP
AutoHotkey_LのobjFile:=FileOpen()でファイル開いてobjFile.Close()するまではロックされてた気がする
ttp://sites.google.com/site/agkh6mze/translation/autohotkey_l/fileopen
ttp://sites.google.com/site/agkh6mze/translation/autohotkey_l/objects/file
867名無しさん@お腹いっぱい。:2010/07/06(火) 09:44:28 ID:vGHoE+LW0
できました
ありがとうございます!
868名無しさん@お腹いっぱい。:2010/07/06(火) 09:47:07 ID:uWljCSRy0
読みだけは許可したいとかなら、共有モードフラグで許可できるよ
869名無しさん@お腹いっぱい。:2010/07/06(火) 12:23:28 ID:ZVJLgCTK0
>>864
なるほど、演算部分とguiの部分を分離させるというのは
すぐに使えそうな案ですね
参考にします
870名無しさん@お腹いっぱい。:2010/07/07(水) 21:35:14 ID:V92r/HtA0
OSはXP32bitで、物理メモリを2GB積んでいて、消費メモリは1GB程度です。
自鯖で、runwaitをsettimerで回してzip圧縮など定型処理を長期間やっていると、

「システムリソースが足りないため、要求された処理を実行できませんでした」

と出ることが多くなってきました。
(以前は数ヶ月に1度程度、最近は3日持たない)

これが出ると、AHKのダイアログが出てスレッドが止まってしまい、
タスクトレイアイコンで右クリして手動でリロードすることもできなくなります。

素のXPをクリーンインストールしてみましたが、同じスクリプトを動かすと
同じ症状になります。

めもりーくりーなー という常駐ソフトを試したところ、仮想メモリを1GBほど食い潰して
CPUが100%になる症状が出て、クリーニングどころか逆効果でした。


それで相談ですが、システムリソースが溢れて制御不能に陥る前に、AHKをつかってPCの再起動などを
やらせたいのですが、システムリソースの値を取得する方法またはコマンドラインツールは、ないでしょうか。

XPでシステムリソースが溢れること自体が稀なようで、計測できるソフトが見つかりません。
871名無しさん@お腹いっぱい。:2010/07/07(水) 22:54:41 ID:Oot+MLLv0
872名無しさん@お腹いっぱい。:2010/07/07(水) 22:55:48 ID:Oot+MLLv0
monitorだった・・
873名無しさん@お腹いっぱい。:2010/07/07(水) 23:11:49 ID:p1524h7I0
メモリクリーナーとかやらは、大量のメモリを確保することで、
実メモリにあるデータをスワップに追い出しているだけで、
システムリソース不足に対しては効果無いんでわ
874名無しさん@お腹いっぱい。:2010/07/07(水) 23:38:59 ID:8RwA34FY0
>>871
ありがとうございます。試してみます。
875562:2010/07/08(木) 08:44:06 ID:T3ptACPyP
>>870
そもそも何がメモリーを占有しているか確かめないと
メモリが圧迫されているときは、タスクマネージャやXPならProcessExplorerで確かめるクセをつけよう

俺はガジェットでメモリ占有率上位いくつかを表示しておいて、すぐにわかるようにしている
XPでも互換ガジェット入れられるぞ

と思ったら、サーバーか。コマンドラインでモニタしてるわけか
876名無しさん@お腹いっぱい。:2010/07/08(木) 17:08:13 ID:rN4WzQ0M0
>>875
不足しているのは、タスクマネージャ等で参照できる「物理メモリ」じゃなくて、
いまどきなぜ足りなくなるのか謎な「システムリソース」です。

タスクマネージャで参照できるメモリ消費量は常に監視していて、
それは最初に書いたとおり2GBのうち1GB程度です。

今は、>>871で教えていただいたdesktop-heapの値を定期観測しています。
WinSta0\Defaultの値が、OS起動時に20%からはじまり、じわじわと上昇しています。

> Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
> Copyright (c) Microsoft Corporation. All rights reserved.
> -------------------------------------------------------------
> Session ID:  0 Total Desktop: ( 5312 KB -  7 desktops)
>
> WinStation\Desktop    Heap Size(KB)  Used Rate(%)
> -------------------------------------------------------------
> WinSta0\Default       3072     25.6
> WinSta0\Disconnect       64     4.5
> WinSta0\Winlogon       128     9.7
> Service-0x0-3e7$\Default    512     11.4
> Service-0x0-3e4$\Default    512     4.3
> Service-0x0-3e5$\Default    512     8.1
> SAWinSta\SADesktop      512     0.5
> -------------------------------------------------------------

WinSta0\Defaultを上昇させるプログラムまで特定できればベストですが、
おそらくそれはできないですよね。

とりあえずこれをAHKで定期観測して再起動トリガを発動すれば
対症療法はできそうなので、助かりました。
877名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:28:24 ID:rGDak5hVP
システムリースと書いてあるのに、メモリと勘違いしてたスマソwww

Windowsのリソースは長いこと起動していると枯渇するよな
Win9XのころはGDIリソースがすぐになくなったが、
今は見えないだけで上限引き上げられているけど存在するというのがやっかい
プログラム側でリーク起こしているとなくなるんだよな

サーバーはわからんが、デスクトップだとかなり顕著だよ

878名無しさん@お腹いっぱい。:2010/07/12(月) 11:13:47 ID:4H6la4YU0
MouseGesture.ahkでマウスのボタンに閉じるを割り当てているのですが、
WinCloseやSendMessageで閉じるのではなく閉じるボタンがウィンドウ上に存在する場合、そのボタンをクリックするという動作は可能でしょうか?
879名無しさん@お腹いっぱい。:2010/07/12(月) 12:34:25 ID:K416YT4v0
いつもウィンドウ内の特定の位置にあるなら MouseClick コマンドで特定座標をクリックしてやる。
リサイズできるウィンドウの左上とかなら、WinGetPos でサイズ取って計算する。
もしくは ImageSearch でボタン画像の座標を探す。
880名無しさん@お腹いっぱい。:2010/07/12(月) 12:35:22 ID:K416YT4v0
× 左上
○ 右上
881名無しさん@お腹いっぱい。:2010/07/12(月) 14:17:14 ID:4H6la4YU0
>>879
ありがとうございます
どちらも試してみます
882名無しさん@お腹いっぱい。:2010/07/13(火) 20:17:43 ID:GuK9WFTk0
だれか初心者のスクリプトの添削お願いします。
アプリの立ちあげが遅く、ウインドウが立ち上がるのを
まってから右クリックをそのウインドウ上でさせたいのですが
うまくいきません。どこがおかしいのでしょうか。
ループしてくれません。音がなりませんし、一回で終わってるっぽいです。


#m::
Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe
sleep, 100
Loop, 10
{
WinActivate, ahk_class TpcwmpMain.UnicodeClass
WinWaitActive, ahk_class TpcwmpMain.UnicodeClass, , 1

if ErrorLevel <> 0 ;エラーがあるとボックスで表示
{
sound *-1
sleep, 200
return
}
else
break
}

send, {APPSKEY}
;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass
sleep, 200
Send, {DOWN 6}{RIGHT}
sleep, 200
Send, {DOWN}{ENTER}
883名無しさん@お腹いっぱい。:2010/07/13(火) 20:42:56 ID:ff4KvU4g0
>>882
とりあえずsleepを10倍にして様子見してみたら?

あとwinwaitactiveって、コマンド実行時点ですでにアクティブになってたら
待ちコマンドってちゃんと働くんだっけ?

俺がそういうのを作る場合、アクティブウインドウのタイトル文字列で判別させてる
884名無しさん@お腹いっぱい。:2010/07/13(火) 20:58:14 ID:zrexb9PoP
TimeOut := A_TickCount + 10000
Loop
{
IfWinExist, ahk_class TpcwmpMain.UnicodeClass
{
WinActivate, ahk_class TpcwmpMain.UnicodeClass
break
}
Else If( TimeOut < A_TickCount )
{
MsgBox, TimeOut
ExitApp
}
Else
{
Sleep, 200
}
}

ウィンドウ表示されるの待つならこれでどうだろう
885名無しさん@お腹いっぱい。:2010/07/13(火) 21:05:44 ID:GuK9WFTk0
レスありがとうございます。
>>883
sleepを長めにとればできそうですが
なんかかっこわるいかなぁって。

待ちコマンドっていうのわからない。

>>884

ありがとうございます。なんか複雑で理解できませんが
導入します。助かります。
カッコがいっぱいありますね。これタイムアウトした場合
Loopって終わるんですか?制限値がないみたいですが。
と初心者は思いました。
僕の書いたのどこがダメなんだろう。
ありがとうございました
886名無しさん@お腹いっぱい。:2010/07/13(火) 21:05:55 ID:zrexb9PoP
あ、書いてから気づいたんだけど、WinWaitがあった・・
887名無しさん@お腹いっぱい。:2010/07/13(火) 21:12:19 ID:zrexb9PoP
#m::
Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe
WinWait, ahk_class TpcwmpMain.UnicodeClass
WinActivate, ahk_class TpcwmpMain.UnicodeClass

Send, {APPSKEY}
;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass
Sleep, 200
Send, {DOWN 6}{RIGHT}
Sleep, 200
Send, {DOWN}{ENTER}

ごめんこっちで
888名無しさん@お腹いっぱい。:2010/07/13(火) 21:27:13 ID:GuK9WFTk0
>>887
ありがとうございます。>>884でもうまくいってたのですが
もしかして>>887みたいなシンプルなものでも上手くいくのでしょうか?
たしかに今のところ不都合でてきてません。

そうか、winactiveで待てばいいのですか。。。
たしか自分で書いてたはずと思ったが、違うやつだった。
activeを待つほうだった。
ありがとうございました。^ー^
889名無しさん@お腹いっぱい。:2010/07/13(火) 21:54:09 ID:3FaoPQm/0
むしろ、>>887の方が処理的に良いと思う
タイムアウトで処理分岐したいなら、WinWait の第3引数に待ち時間入れて ErrorLevel で分岐すりゃいい
890名無しさん@お腹いっぱい。:2010/07/13(火) 23:30:24 ID:Qk8g1XKT0
AHK_Lのオブジェクトのメンバ関数?って、ベースで最初に設定してから継承って形でないと使えない?
これベースの方はうまく動かないけど継承するとちゃんと動く

; ベース
objHoge1 := Object()
objHoge1.HOGEHOGE := "HOGEHOGE"
objHoge1.HOGEHOGEHOGE := "HOGEHOGEHOGE"
MsgBox, % objHoge1.HOGEHOGE()
MsgBox, % objHoge1.HOGEHOGEHOGE()

; 継承
objHoge2 := Object( "Base", objHoge1 )
MsgBox, % objHoge2.HOGEHOGE()
MsgBox, % objHoge2.HOGEHOGEHOGE()

; メンバ関数
HOGEHOGE(obj){
return "HOGEHOGE"
}
HOGEHOGEHOGE(obj){
return "HOGEHOGEHOGE"
}
891名無しさん@お腹いっぱい。:2010/07/13(火) 23:59:14 ID:3FaoPQm/0
>>890

■ メソッド呼び出しのルール
オブジェクトのメソッド(メンバ関数)呼び出しがあったとき:
 オブジェクトに該当メソッドがある → 引数はそのまま渡して関数を呼び出す
 オブジェクトに該当メソッドがない → 再帰的に base オブジェクトを検索し該当メソッドを探す
                        見つかったら、第一引数にオブジェクト自身を渡す
■ 関数呼び出しのルール
引数が足りていない場合、引数にデフォルト値が設定されていれば、その分はあるものとして補完するが、
デフォルト値が設定されていない場合は、呼び出しは失敗する(シグナチャが異なるため)


base のメソッドを引数無しで呼んだ場合は、該当関数名は見つかるが引数が足りないため呼び出しは失敗。
結果として空文字列が返る。

拡張オブジェクトの場合は、自身にメソッドが無いため継承元オブジェクトのメソッドが検索され、
オブジェクト自身が引数として関数コールするが、引数は満たされているため成功する。

※ 引数が過多な場合は切り捨てられるのでコール自体は成功する
892名無しさん@お腹いっぱい。:2010/07/14(水) 00:01:14 ID:3FaoPQm/0
あ、、関数というか「動的関数呼び出しの」場合ね
893名無しさん@お腹いっぱい。:2010/07/14(水) 00:10:13 ID:qUQ12LW+0
>>891
なるほど
つまりオブジェクトのメンバ関数からオブジェクト内をいじくり回すには継承しないとだめなのかー
どうもありがとう
894名無しさん@お腹いっぱい。:2010/07/14(水) 00:29:30 ID:0K1ii/Cg0
EXE化したAHKスクリプトをショートカットあるいはバッチで呼び出して実行する際、
実行を開始した際のカレントディレクトリを取得する方法ってありますか?

A_Scriptdirだと、EXEファイルの置かれたフォルダになってしまいました。
895名無しさん@お腹いっぱい。:2010/07/14(水) 00:36:02 ID:jIKZWjLf0
普通に A_WorkingDir
896名無しさん@お腹いっぱい。:2010/07/14(水) 01:17:24 ID:0K1ii/Cg0
>>895
ありがとうございます。バッチから手動で呼び出したときはうまくいきました。

やりたいことは、EXEファイルを、スタートアップフォルダからショートカットで
呼び出されたかどうかを判別して、スタートアップのときだけ別の処理をしたいのです。

ふつうにショートカットを作ると、ショートカットの詳細の「作業フォルダ」が
強制的にEXEファイルの場所に指定されるようです。
ためしに、これを空欄に変えたところ、識別できました。

が、これを変えないまま判別させる方法は、ありそうでしょうか。
897名無しさん@お腹いっぱい。:2010/07/14(水) 02:21:01 ID:jIKZWjLf0
OSの仕様だからなぁ
スタートアップのショートカットには /startup とかのパラメタ与えて引数で分岐すりゃいいと思うけど
898名無しさん@お腹いっぱい。:2010/07/15(木) 23:29:15 ID:9v52251o0
PixelGetColorによってきちんとした値がまったく得られません。
カーソルを動かしてそこで取得させてるつもりなのに
値がまったく変わりません

以下のHPにあるスクリプトをpaint上で使いました。
^!z::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
MsgBox, The color at the current cursor position is %color%.
return
どうしてでしょうか?windowspyではちゃんとそこの色の文字列が変化しているのですが。

そもそも全画面でやる3DFPSゲームの特定箇所のピクセルの色が
指定したものであればどこそこをクリックするというものが作りたかったのです。
おしえてください。
899名無しさん@お腹いっぱい。:2010/07/15(木) 23:57:29 ID:dcDIdvOR0
>>898
それそのまま使ったらちゃんと動いたぞ。
900名無しさん@お腹いっぱい。:2010/07/16(金) 00:09:47 ID:aBevWK6FP
mspaintのことならマウスカーソルの+マークの中心の0x00000が取得されちゃってるんじゃ?
901名無しさん@お腹いっぱい。:2010/07/16(金) 00:13:07 ID:33Ci8gFr0
>>899
まじっすか。じゃぁいままで他に追加してるcfgの内容がわるいのだろうか。
>>900
メモ帳で試してみましたが、それでも無理でした。んーなんだろ
ずっと同じ文字列
902名無しさん@お腹いっぱい。:2010/07/16(金) 00:17:30 ID:33Ci8gFr0
autohotkey.iniにF12のスクリプトだけ書いて
ほか全部削除したが、ずっと同じ文字列しか
メッセージボックスにでない。おわったか
903名無しさん@お腹いっぱい。:2010/07/16(金) 00:24:43 ID:wM1EgFgm0
>>902
ちなみにどんな数値が取得される?
上で貼りつけたのがコピペなら必要ないが、一応スペルミスも確認。
あとは…各行の間にSleep挟んでみるとか?
904名無しさん@お腹いっぱい。:2010/07/16(金) 00:24:54 ID:PJsMUgo90
他にAutohotkeyスクリプトが動いているとか?
タスクマネージャーの「プロセス」でAutohotkey.exeが複数実行されているならあやしい
905名無しさん@お腹いっぱい。:2010/07/16(金) 00:28:42 ID:33Ci8gFr0
898デス。レスしていただいた方々まことに申し訳ないです・・・。
アホすぎました。コピペしてつもりでしたが、
それからいろいろ文字をいじくったために、その余波で中身の変数の文字が微妙に違っていました。
前後でちゃんとおなじ変数の文字にしたら解決しました。
おさわがせしました。

906名無しさん@お腹いっぱい。:2010/07/16(金) 00:35:24 ID:wM1EgFgm0
>>905
まぁよくある失敗だなw
同じ数字ならMouseGetPosの変数をスペルミスしてるのかもとは思った。
907名無しさん@お腹いっぱい。:2010/07/16(金) 15:01:42 ID:aBevWK6FP
Loop, % count
Menu, MyMenu, Add, ほげほげ〜 (&%A_Index%), HogeLabel
Menu, MyMenu, Show

HogeLabel:
Msgbox, %A_ThisMenuItemPos%ほげ〜
908名無しさん@お腹いっぱい。:2010/07/16(金) 15:05:46 ID:aBevWK6FP
あ、書き込んじった
こういう動的にメニューを生成するスクリプトで、アクセスキーを割り当てたいんですが、
1~9までは数字で、10~はa,b,c,d,e....っていう感じで割り当てるにはどうすればいいでしょうか?

count := 10
Loop, % count
Menu, MyMenu, Add, ほげほげ〜`t&%A_Index%, HogeLabel
Menu, MyMenu, Show
return

HogeLabel:
Msgbox, %A_ThisMenuItemPos%ほげ〜
909名無しさん@お腹いっぱい。:2010/07/16(金) 15:54:45 ID:mQGY0ums0
>>908
こんな感じでどう?

Loop, 35 {
String := "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
StringMid, AccessKey, String, %A_Index%, 1
MsgBox, % AccessKey
}
910名無しさん@お腹いっぱい。:2010/07/16(金) 16:10:13 ID:aBevWK6FP
>>909
おーなるほど!
ありがとうございます
911名無しさん@お腹いっぱい。:2010/07/16(金) 19:50:06 ID:PVn0HxJY0
Lexikos:
PostPosted: Fri Jul 16, 2010 10:24 am
> Regardless of any arguments for or against either syntax, I won't be abandoning command syntax.
> Changing some commands to be functions or allowing either syntax to be used are possibilities.
> Allowing %obj.var% would essentially require the overall arg to be evaluated as an expression,
> but is also a possibility.
> Note that expressions are generally less efficient (in terms of CPU cycles) than traditional syntax
> for simple cases - i.e. % "text" . var . "text" is much less efficient than text%var%text.

ふむ。旧文法をばっさりとはやらんつもりのようだ。
912名無しさん@お腹いっぱい。:2010/07/16(金) 19:59:03 ID:uAf5YwkP0
まずはStrLen()とかInStr()みたいな関数はもっと増えてもいい
913名無しさん@お腹いっぱい。:2010/07/17(土) 10:00:05 ID:vlNXVvG30
Win7のExplorerで、カーソルやマウス左クリックで選択したファイル名を
抜き出す方法ってありますか?

XPだと
controlget filename, list, selected col1, SysListView321, A

で取れましたが、Win7であれこれ考えてみましたが、うまく取れません。
クリップボードを経由する以外で、なにかよい取得方法はないでしょうか。
914名無しさん@お腹いっぱい。:2010/07/17(土) 10:22:15 ID:ytilx9xW0
AHK 64(>>741)使って、かつCOM使えばなんとかなるんでわないかと
915名無しさん@お腹いっぱい。:2010/07/17(土) 14:01:55 ID:NkrbfhEF0
>>913
Win7はたしかCtrl+Cでファイルをコピーしたらクリップボードにフルパスが入るからSplitPathで抜き出せばいいかも
916名無しさん@お腹いっぱい。:2010/07/17(土) 22:34:58 ID:rG1nfbLo0
917名無しさん@お腹いっぱい。:2010/07/17(土) 23:06:50 ID:ytilx9xW0
AHKLにインストーラパッケージきたね。

6/12に落としたバイナリと、現在ZIPで配布されているバイナリと、
インストーラ版のバイナリのハッシュが全部違う
918名無しさん@お腹いっぱい。:2010/07/18(日) 00:34:37 ID:NTAcOVXL0
つまり・・・どういうことだってばよ?
919名無しさん@お腹いっぱい。:2010/07/18(日) 18:22:35 ID:t/j7Zo9C0
公式AHKと同じファイル構成になった
ヘルプがAHKL対応になった
920名無しさん@お腹いっぱい。:2010/07/18(日) 21:58:17 ID:vWc8VIgQ0
http://www.scythe.co.jp/input-device/rakuraku2.html
このキーボード買ったんだけど、
Numキー部分の 「000」 とか 「,」 を無効化または他のキーに割り当てたい。

「000」キーは 0のdown upが3回飛んでくる。
「,」キーは、半角,のdown upの後にF10のdown upが2回飛んでくる。

詳しい人教えて
921名無しさん@お腹いっぱい。:2010/07/18(日) 23:15:45 ID:FcKMxSiJ0
0が3回きたことを検出して、別の処理をさせればよい
922名無しさん@お腹いっぱい。:2010/07/18(日) 23:53:35 ID:NOJPNvHm0
>>920
ホットストリング使ってみたらいかがですか?
923名無しさん@お腹いっぱい。:2010/07/19(月) 02:27:16 ID:YN4pdfI20
>>921-922
普通に0を3回連打したら、誤動作しない?
書き方が全然わからん

~0::
0::
0::
return

`,::
KeyWait,F10
KeyWait,F10
return
924名無しさん@お腹いっぱい。:2010/07/19(月) 02:55:54 ID:9iIcd1Bn0
>>923
000ののほうはこんな感じで
:*:000::
MsgBox
Return
925名無しさん@お腹いっぱい。:2010/07/19(月) 19:02:20 ID:/1EVW2Va0
AutoHotKeyの作業ディレクトリを実行するディレクトリに簡単に設定して起動する最も簡単な方法はないでしょうか?

今は、Runコマンドで

Run, \software\mother-fucker\fuck.exe, \software\mother-fucker\

としていますが、冗長性が高く感じます。
926名無しさん@お腹いっぱい。:2010/07/19(月) 19:20:39 ID:gwCgkY3B0
Run, fuck.exe, \software\mother-fucker\

でいけると思うけど
927名無しさん@お腹いっぱい。:2010/07/19(月) 23:09:13 ID:/1EVW2Va0
>>926
あ、なるほど


パス渡したら、そのexeのあるディレクトリを作業ディレクトリとして実行みたいなコマンドやオプションあるかな、と思っていたんですが、
特にないのかな
928名無しさん@お腹いっぱい。:2010/07/19(月) 23:19:24 ID:G5mqnJSSP
質問があります。
常駐アプリを起動して、起動するまで待ってホットキーを送ることはできないでしょうか?
ウインドウが出るアプリならWinWaitあたりで待てばよいと思うのですが、
目に見えるウインドウがでないアプリの場合どうしたものかと
929名無しさん@お腹いっぱい。:2010/07/19(月) 23:38:32 ID:M+ZXAsAA0
930名無しさん@お腹いっぱい。:2010/07/19(月) 23:40:26 ID:f9IPAD0D0
案1) Sleep で適当に待ってみる
案2) 不可視ウィンドウを検索してみると結構あるんで(トレイアプリとか)、
  そのウィンドウを DetectHiddenWindows, On してから WinWait してみる。
931名無しさん@お腹いっぱい。:2010/07/20(火) 00:01:25 ID:YN4pdfI20
>>924
0を3回連打したらMsgBox出てもうた
932名無しさん@お腹いっぱい。:2010/07/20(火) 01:15:10 ID:2ErPDfEs0
>>931
んじゃこれでどう?
このままだと手動連打でも反応するけど、T0.1をT0.05に変更すると手動ではまず反応しない
調度良い時間に調整してみてね
ちょこっといじれば「,」キーも出来るんじゃないかな
0::
Count=0
Loop,2
{
KeyWait,0,T0.1
Count+=ErrorLevel
KeyWait,0,T0.1 D
Count+=ErrorLevel
}
If Count=0
MsgBox
Return
933名無しさん@お腹いっぱい。:2010/07/20(火) 08:12:29 ID:j1lGbx/k0
#IfWinExist, でウィンドウタイトルと ahk_class を両方指定する方法はないですか?
どちらか一方だけだと、それぞれ重複するウィンドウがあるため誤判定してしまうんです。
934名無しさん@お腹いっぱい。:2010/07/20(火) 08:24:48 ID:HLryUSW/0
#IfWInExist, タイトル ahk_class クラス
935名無しさん@お腹いっぱい。:2010/07/21(水) 19:43:40 ID:alScFH9M0
「お忍びリネーム」のパクり。リネーム中のF2連打で選択範囲変更。本家及びL(A&U)onXP32bitにて動作確認。

#IfWinActive,, FolderView
$F2::
 ControlGetFocus, classNN, A
 If (classNN = "SysListView321") {
  Send, {F2}
  Return
 } Else If (classNN != "Edit2")
  Return
 ControlGetText, itemName, %classNN%
 length := StrLen(itemName), lastDotPos := InStr(itemName, ".", 0, 0) - 1
 VarSetCapacity(buff, 8, 0x00)
 SendMessage, 0x00B0, &buff, &buff+4, %classNN%, A
 start := NumGet(buff, 0, "Int"), end := NumGet(buff, 4, "Int")
 Goto, % (start == 0 && end == length) ? "Explorer_Select_Name" ; 全選択時
  : (start == 0 && end == lastDotPos) ? "Explorer_Select_Ext" ; ファイル名選択時
  : (start == lastDotPos+1 && end == length) ? "Explorer_Select_None" ; 拡張子選択時
  : "Explorer_Select_All"
Explorer_Select_All:
 SendMessage, 0x00B1, 0, -1, Edit2, A
 Return
Explorer_Select_None:
 SendMessage, 0x00B1, -1, 0, Edit2, A
 Return
Explorer_Select_Name:
 SendMessage, 0x00B1, 0, lastDotPos, Edit2, A
 Return
Explorer_Select_Ext:
 SendMessage, 0x00B1, lastDotPos+1, length, Edit2, A
 Return
936名無しさん@お腹いっぱい。:2010/07/21(水) 21:33:01 ID:EfNOhxdE0
3回くらい似たようなのを見た
937名無しさん@お腹いっぱい。:2010/07/22(木) 01:44:56 ID:lvLuqxd20
正規表現でダブルクォーテーションを指定する方法はありますか?
RegExReplaceで"を置換したいのですが\"では動かなくて
938名無しさん@お腹いっぱい。:2010/07/22(木) 02:30:16 ID:P5dbjuy20
str := """hoge"""
MsgBox, % RegExReplace(str, "^""|""$")
939937:2010/07/22(木) 22:17:27 ID:bBJpxwFN0
>>938
ありがとうございます。
""でよかったとは
940名無しさん@お腹いっぱい。:2010/07/23(金) 13:37:16 ID:CTxek1iA0
AutoHotkeyで作ったGUIウィンドウが非アクティブになったらウィンドウを隠す、という処理はどうすればいいでしょうか
GUIからMsgBoxなど表示しても非アクティブになってしまう気がします
941名無しさん@お腹いっぱい。:2010/07/23(金) 13:44:56 ID:D+pl9oox0
原始的だけど、settimerで0.1秒ごとにAHK_GUIウインドウを監視してみたら?
942名無しさん@お腹いっぱい。:2010/07/23(金) 14:48:33 ID:ryj0C7kb0
Menu, Tray, Add, ShowGui
OnMessage(0x0006, "WM_ACTIVATE")

ShowGui:
Gui, Show, w200 h200, Test
Return

WM_ACTIVATE(wParam, lParam) {
 If (A_Gui == 1 && wParam == 0)
  Gui, %A_Gui%:Hide
}
943名無しさん@お腹いっぱい。:2010/07/23(金) 19:03:43 ID:CTxek1iA0
>>941-942
ありがとうございます!
2通りあるんですね、どちらも試してみます
944名無しさん@お腹いっぱい。:2010/07/26(月) 00:23:08 ID:zdZimPF60
今エクスプローラーの表示切替(アイコン表示とか詳細表示とか)をPostMassege

つかってやろうとしてるんだけどうまくいかないのです・・・。

ttp://d.hatena.ne.jp/firedfly/20091231

を参考にやろうとしてるんだけども・・・。Windows7だからいけないのでしょーか。

誰かできてる人いたらちょっと教えていただけませんんか?
945名無しさん@お腹いっぱい。:2010/07/26(月) 19:06:36 ID:aOdLVJ090
AHKの内部でCPUの種類を取得して、能力別に処理を分けたいのですが、質問です。

マイコンピュータで右クリックして、システムのプロパティに表示される、
CPUの型番を、システムのプロパティを開かないで、レジストリや
コマンドラインツール等で、取得する方法ってありますか?
946名無しさん@お腹いっぱい。:2010/07/26(月) 19:12:07 ID:EqIp33HZ0
systeminfo
947名無しさん@お腹いっぱい。:2010/07/26(月) 19:21:30 ID:aOdLVJ090
>>946
ありがとうございます。試してみたのですが、

>プロセッサ,1 プロセッサインストール済みです。[01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2833 Mhz

ここまでは出ました。

システムのプロパティのほうで表示されている、肝心の「Core(TM)2 Quad CPU Q9550@2.83GHz」
という文字が、含まれていないようです。
948名無しさん@お腹いっぱい。:2010/07/26(月) 19:34:37 ID:aOdLVJ090
自己レスです。
regreadコマンドで

regread,value,HKEY_LOCAL_MACHINE,HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString

ここから情報を抜き取ると、取得できました。ありがとうございました。
949名無しさん@お腹いっぱい。:2010/07/26(月) 19:41:29 ID:EqIp33HZ0
950名無しさん@お腹いっぱい。:2010/07/27(火) 16:43:12 ID:3vUY/ee00
動画プレイヤVLCの再生画面から、現在の再生位置(再生時間の時分秒)を
取得する方法って、ないでしょうか。

http://www.tomacerogranada.com/osl/imagenes%20programas/vlc.jpg

この画像でたとえると、左下の「0:00:37」を取得したいです

WindowSpyや、StatusBarGetText、ControlGetで、取得できそうな方法を
ひととおり試みてみましたが、取れそうにありません。

こういう場合、どのように対処すればよいでしょうかね。
951名無しさん@お腹いっぱい。:2010/07/27(火) 16:49:57 ID:mLN6xfde0
VLCにはWebインターフェイスとかあるからそっちで何とかすれば
952名無しさん@お腹いっぱい。:2010/07/27(火) 18:41:17 ID:hc2rEjdm0
VLCを起動して試したけど、ControlGetTextで取得できたよ
953名無しさん@お腹いっぱい。:2010/07/27(火) 18:54:55 ID:3vUY/ee00
>>951
なるほど、その手もありますね。参考になりました。

>>952
あらためて試してみましたが、どうにも出てきません。
こちらで検証しているVLCのVerは1.0.5です。

ControlListで一覧を取得し、

> QWidget1
> QWidget2
> QWidget3
> VLC DirectX1
> VLC DirectX video1
> QWidget4
> QWidget5
> QWidget6
> QWidget7

が出てきて、これを全部取得してみました。テキストが出てきたのは

> ControlGetText,var,VLC DirectX1,A

var=VLC (Direct3D output)

これだけで、ほかはテキストが出てきませんでした。
すみませんが、どのように取得されましたでしょうか。
954名無しさん@お腹いっぱい。:2010/07/27(火) 19:40:27 ID:hc2rEjdm0
ControlGetTextで取得できたVLCのVerは0.8.6です。
Ver1.1.1を試してみたけど取得出来なかった。

UWSCのPOSACCだと取得できるので何らかの方法はあるんだろうけど、詳しくないので解らない。
955名無しさん@お腹いっぱい。:2010/07/27(火) 21:02:04 ID:57Vni8pg0
956名無しさん@お腹いっぱい。:2010/07/27(火) 21:16:17 ID:3vUY/ee00
>>954
なるほどthxです。

>>955
それもダメでした。VLCのVerが1以上になって、仕様が変わったせい?
957名無しさん@お腹いっぱい。:2010/07/27(火) 21:37:46 ID:57Vni8pg0
1.1.1で取れたけど・・・。
おやっ、一度フルスクリーンして解除すると取れる。不思議!
958名無しさん@お腹いっぱい。:2010/07/27(火) 22:18:49 ID:3vUY/ee00
>>957
何度も申し訳ないです。フォーラムにあったコードを汎用にしてまとめてみました。

F1::
ControlGetText, Q, QWidget,VLC
ControlGetText, Q6, QWidget6,VLC
WinGetText, wText,VLC
msg=
(
Q=%Q%
Q6=%Q6%
W=%wText%
)
msgbox,%msg%
clipboard=%msg%
return

これで、VLC1.1.1の上でF1を押して実行すると、フルスク後、通常ともに
以下のようになってしまいます。

Q=
Q6=
W=VLC (Direct3D output)
qt_rubberband

このコードで取得できますでしょうか。
959名無しさん@お腹いっぱい。:2010/07/27(火) 22:34:17 ID:unQkAdh6P
テキストが取得できなかったりするのは、クロスプラットフォームのソフトではよくあること。
VLCは今もインターフェイスが糞だから、何とかして対応させてもまたすぐ仕様変更されるだろう。
さっさと諦めるのが吉。
とっくにAHKで効率化して節約できる以上の時間を無駄にしてるはずだ。
960名無しさん@お腹いっぱい。:2010/07/27(火) 23:08:16 ID:57Vni8pg0
まぁ、仰るとおりですな。
何だか調べたらACC(IAccessibleインターフェイス)をごにょごにょすると、
ユーザ補助のスクリーン読み上げの機構で読み取りが可能になるとかならないとか、、
出来たとしても、元アプリ自体のコンパイル時になにかしとかなきゃ駄目だとか何とか、

この辺はFireFoxなどでもそうらしい。
経験上、ウィンドウの中身が、
FXWindow(FoxToolKit), QWidget(Qt)、MozillaWindowClass(Mozilla)、SWT_Window(JavaSWT)
で満たされていたらお手上げにしてしまっている。
961名無しさん@お腹いっぱい。:2010/07/28(水) 11:12:01 ID:smBUAUOw0
FirefoxやOpera等の独自ウィンドウタイプはAU3_Spy.exeでテキスト取得が出来ない部分が多いけど、
http://www.autohotkey.com/forum/topic24234.html
の ACC.ahk と COM.ahk をLibフォルダに入れて上記ページのサンプルを試したら取得できた。
VLCの「再生時間/総時間」取得も出来た。
一覧(ツリー型)の文字列取得についてはサンプルを試した限りでは出来ないっぽい(手を加えればいける??)
962名無しさん@お腹いっぱい。:2010/07/28(水) 18:09:09 ID:aYo58LNn0
http://ahk.xrea.jp/
ちょ ま えっ?
963名無しさん@お腹いっぱい。:2010/07/28(水) 18:12:36 ID:6foHEMtD0
ミラー消えたのか
964名無しさん@お腹いっぱい。:2010/07/28(水) 18:17:32 ID:smBUAUOw0
2週間くらい前からサーバー不調っぽい
http://sb.xrea.com/forumdisplay.php?f=8
965名無しさん@お腹いっぱい。:2010/07/28(水) 19:13:33 ID:/F9Hg6o30
まあxreaは基本クソだからな
よくあること
966名無しさん@お腹いっぱい。:2010/07/28(水) 21:53:05 ID:UekdIINiP
>>962の中の人ですが、使用中のサーバアカウントに問題が出てしまい、
短縮URLが使えなくなりました。
別のサーバに移動させましたので、今後はこちらでどうぞ。内容は同じです。

http://hdd.s300.xrea.com/ahk/

次スレで、テンプレに入れる場合は、こちらのURLでお願いします。
967名無しさん@お腹いっぱい。:2010/07/28(水) 23:59:37 ID:sORlv1O8P
Google siteの方だけでいいんじゃないか
公式と過去スレと派生版一覧に加えて日本語サイトを2つを1レスに入れるときつい

■公式(英語)
http://www.autohotkey.com/

■過去スレ
01 http://pc7.2ch.net/test/read.cgi/software/1098531338/
02 http://pc7.2ch.net/test/read.cgi/software/1129836713/
03 http://pc11.2ch.net/test/read.cgi/software/1157043396/
04 http://pc11.2ch.net/test/read.cgi/software/1184556627/
05 http://pc11.2ch.net/test/read.cgi/software/1201502896/
06 http://pc11.2ch.net/test/read.cgi/software/1219130051/
07 http://pc12.2ch.net/test/read.cgi/software/1230694774/
08 http://pc12.2ch.net/test/read.cgi/software/1243005818/
09 http://pc12.2ch.net/test/read.cgi/software/1253888736/
10 http://pc12.2ch.net/test/read.cgi/software/1265518996/

■派生版
AutoHotkey_L (内部Unicode、オブジェクト指向などの言語仕様拡張)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

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

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

AutoHotkey.dll (真のマルチスレッド対応など)
http://www.autohotkey.net/~tinku99/ahkdll/
968名無しさん@お腹いっぱい。:2010/07/29(木) 00:03:17 ID:fDQToOub0
んなこと言ってたら過去スレ増えるたびに削っていかないとだめになるだろ
969名無しさん@お腹いっぱい。:2010/07/29(木) 00:05:48 ID:yDtGcY/Q0
レス2つに分けてもいいんじゃない。
テキストエディタとヘルプを連携させたい人は
ヘルプファイル(chm)の方がいいだろうからこれも入れていいんちゃう。

Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
970名無しさん@お腹いっぱい。:2010/07/29(木) 00:20:35 ID:I/c5jE+BP
64とかDLLとかの派生版はどうせそのうちLに吸収されるだろうから要らないか。
IronAHKは、Linuxとかで十分に動作するなら入れて欲しいけど、誰か試してみた?
971名無しさん@お腹いっぱい。:2010/07/29(木) 00:41:45 ID:8B5v2BZ00
おおなんだか凄いことになってるなあ
972名無しさん@お腹いっぱい。:2010/07/29(木) 01:35:23 ID:KqjQqE040
初心者が迂闊に手を出すと、互換性の問題などで無駄につまずく恐れもあるし、
キーマップとか自動操作などの基本機能を使うだけなら本家でも十分だし、
本家標準機能の簡単な組み合わせだけでは実現できない複雑なプログラムを作るなら、
MSVCやPerl/Ruby/Pythonなどのまともなプログラミング言語を使った方がいいから、
AutoHotkey_Lを含め、派生版は>>1には入れない方がいいと思うな。
973名無しさん@お腹いっぱい。:2010/07/29(木) 08:04:12 ID:HfMAzvoNi
言いたいことは分かるけど
・ダメ文字の問題がないこ
・ファイルエンコーディング
・配列
あたりはかなりの恩恵があるけどなぁ。
インストーラも整備されたしヘルプもあるし問題は少ないと思う。

Unicode版は少なからずのユーザが居ると思うよ。
ってかフォーラム見ると _L が開発の土台に
なりつつあるのが分かる
974名無しさん@お腹いっぱい。:2010/07/29(木) 10:50:46 ID:I/c5jE+BP
そういう機能を必要とするのは、何でもAHKで済ませたがるマニアだけだから、>>2以降で紹介すれば十分って事だろ。
行数に余裕が出来たら、「派生版では修正しないと使えないスクリプトもあります」みたいな注意書きも欲しいな。
975名無しさん@お腹いっぱい。:2010/07/29(木) 12:02:26 ID:abEnDZWx0
AHK_Lは、日本語のファイル処理や、Unicodeの処理とか便利そうだけど、
本家で作られたスクリプトが _L で動かなかった事例って、どんなものがあるの?

いま本家を使ってるけど、日本語ファイル名をsplitpathしたあとに\の位置を
誤検出しているかどうかを調べるためifexistで確認して、あるはずのファイルがなければ
例外処理を入れてる。

こういうスクリプトを_Lで動かすと、例外処理の前段階でそのまま処理できちゃうから、
例外処理を取り除かないと不具合が出る・・・ってことなのかな。
976名無しさん@お腹いっぱい。:2010/07/29(木) 12:16:06 ID:W/I2yND40
逆に本家AHKを使うメリットってないと思ってる
977名無しさん@お腹いっぱい。:2010/07/29(木) 12:19:10 ID:54fE0l3V0
せやな
978名無しさん@お腹いっぱい。:2010/07/29(木) 12:30:51 ID:I/c5jE+BP
ファイル処理とか文字列処理なんてライトユーザーには必要ないだろ。
特に必要もないのに派生版に手を出した奴が「MouseGesture.ahkの表示がおかしい」
とか、使っているバージョンも書かずに質問してきたらウザいから、
>>2以降に引っ込めといた方がいいんじゃないかってこと。
派生版を使うなってわけじゃない。
979名無しさん@お腹いっぱい。:2010/07/29(木) 13:06:53 ID:9gWJAPxv0
AHKL(unicode)でunzipする処理をしたいです
7zのような外部アプリを使わずにOSの機能だけを使用して展開してみようと思いました

ですが、COM_L を使用してunzipしようとすると、エラーが出ます。ソースはこれです

SetWorkingDir, %A_ScriptDir%
; http://www.autohotkey.com/forum/topic22923.html
; #include COM.ahk

; "AutoHotkey_Lw.zip" を "hoge" に展開する
Unz("AutoHotkey_Lw.zip", "hoge")
return

; http://www.autohotkey.com/forum/post-335359.html#335359
Unz(sZip, sUnz)
{
psh := COM_CreateObject("Shell.Application")
psh.Namespace( sUnz ).CopyHere( psh.Namespace( sZip ).items, 4|16 )
return
}

#includeでCOM.ahkを読み取れないと言われたので、
COM.ahk の中身を全てコピペで取り込み再度実行したら↓のエラーが出ました

COM Error Notification
Function Name: "items"
ERROR: No COM Dispatch Object!
   ()

Will Continue?

どこを修正すればよいのでしょうか
980名無しさん@お腹いっぱい。:2010/07/29(木) 13:10:18 ID:qTX6XCs+i
混乱の元だというのはわかるが、メリットの方が大きいし、
ライブラリ側の対応もかなり進んでるよ。
x64対応も進んでるし、本家のままだとまともに動かないコマンドもあるし
じり貧になるのは必至かと。
本家+旧流行ページの遺産で細々とつないでいきたい人は
別にそれでいいけど、良いものを紹介しないでどうすんのさ。

>>975
ダメ文字用の処理は不要なんで意図しない結果になる。
それよりも文字列処理かね。
「ABCあいう」が本家(ANSI版でも)だと長さが9、Unicode版が6。
Loop, Parse(区切り文字なし)の回る回数も同じ。
あとはDLL呼び出しあたりなんで、分かってる人用。
981名無しさん@お腹いっぱい。:2010/07/29(木) 13:18:08 ID:KzCbMinB0
一番いらないのは過去スレのURLな気がするw
過去スレに有用な情報があるのは確かだけど
dat落ちしたスレはどうせどっかの保管サイトで拾ってくることになるし
過去スレ読んでまで調べようとするやつならその辺自分でできるだろうし
982名無しさん@お腹いっぱい。:2010/07/29(木) 13:18:52 ID:Ov0Nj7+10
2ch全否定の巻
983名無しさん@お腹いっぱい。:2010/07/29(木) 13:25:00 ID:J8sl7ibc0
>>966
ありがとう、いつもお世話になってます
984名無しさん@お腹いっぱい。:2010/07/29(木) 13:28:59 ID:KzCbMinB0
>>982
全否定どころか、有用だと思いっきり肯定してるんだが何言ってんの?
どうせそのままのurlじゃ読めずにunkarやらミラー変換機やらで探すことになるのに
わざわざ>>1ででかいスペース使って載せる意味はないんじゃないかって言ってんだよ
985名無しさん@お腹いっぱい。:2010/07/29(木) 13:35:03 ID:I/c5jE+BP
じゃあいっそこんな感じでいいか。

---------------
AutoHotkeyスレッドpart11
---------------
■公式
http://www.autohotkey.com/

■関連サイト、FAQなど
http://www.google.com/webhp?hl=ja

※質問をする時は、使用しているOSやAutoHotkeyのバージョンなどを詳しく書くこと
986名無しさん@お腹いっぱい。:2010/07/29(木) 22:28:28 ID:fFkUfo480
スレ立て失敗。Part6〜10まで俺が建てたんでたまには他の人が建ててくれw
987名無しさん@お腹いっぱい。:2010/07/29(木) 22:32:07 ID:DRC0mqj00
誰か宣言してからのほうが良いよね > スレ立て
988名無しさん@お腹いっぱい。:2010/07/29(木) 23:06:56 ID:PDfpHOOB0
>>984
1に書く必要は無いが2以降には必要だろ。
URL無いと探すのも面倒だし、Janeならコマンド経由で即過去ログ取得出来る。
989名無しさん@お腹いっぱい。:2010/07/29(木) 23:58:42 ID:I/c5jE+BP
1000までに立たなかったら、↓のスレ辺りに避難するか
キーカスタマイズソフト 2
http://pc12.2ch.net/test/read.cgi/software/1239109333/
990名無しさん@お腹いっぱい。:2010/07/30(金) 01:31:02 ID:pfONpPa20
>>980
紹介しない、ではなく >2以降に載せるって言ってるんだと思うけど
ごちゃごちゃするから >1はとりあえず本家のみで、ってことでしょ

>>981
誰もがみんな過去ログ読めないわけでもないし
●持ちとしては過去スレURLの完全撤廃は嫌すぎる
単に 2以降に移動するって話なら特に異論はないけど
991名無しさん@お腹いっぱい。:2010/07/30(金) 08:47:23 ID:E3vpMotR0
大抵の人は専ブラでスレを開いた時に>>1も表示されるようにしてると思うけど、
これが>>2以降になると、いちいち「全レス表示」みたいなのを選ばないとダメなんだよなあ
992名無しさん@お腹いっぱい。:2010/07/30(金) 10:56:14 ID:elYoeAxq0
前スレを>>1に過去スレ一覧を>>2以降に
993名無しさん@お腹いっぱい。:2010/07/30(金) 17:58:59 ID:WYf6jtVeP
次スレが立つまで余計な書き込みは控えた方がいいかどうか、多数決で決めよう
994名無しさん@お腹いっぱい。:2010/07/30(金) 18:29:02 ID:9VNdm34c0
やってみる。
995名無しさん@お腹いっぱい。:2010/07/30(金) 18:32:14 ID:9VNdm34c0
とりあえずでけた。
FAQ等は適当に埋めてくれ。

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

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

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

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

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

Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。
997名無しさん@お腹いっぱい。:2010/07/30(金) 19:00:14 ID:JeFr0hn90
連投規制でテンプレ>>8までしか貼れなかった
>>9-12 をよろしくー
998名無しさん@お腹いっぱい。:2010/07/30(金) 20:08:49 ID:cNAL05mC0
Z
999名無しさん@お腹いっぱい。:2010/07/30(金) 20:21:49 ID:cNAL05mC0
A
1000名無しさん@お腹いっぱい。:2010/07/30(金) 20:28:52 ID:cNAL05mC0
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。