■ リマップ・ホットキー割り当て
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}
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などを使って自前でリピートさせてください。
■ 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:過去ログを漁るといいかも。
■ 日本語の取り扱い
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 にある「駄目文字微対策版」を使うことで回避できる。
■ スクリプト仕様
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:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
全角スペースをタブや半角スペースに変換してみよう。
■ 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)
}
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
■自分の環境で、どのキーを押したかを調べる方法
キーボードのキーアサインや、Up/Downの状態を知りたければ、
AHKを常駐させて、トレイアイコンで右クリしてKeyHistoryを開けば、出てくる。
F5でリフレッシュされるので、調べたいキーを押した後、F5を連打する。
KeyHistoryは、キーを押した後にF5を押してリフレッシュしないと
内容が表示されない。また、F5でリフレッシュすると、F5を押した、という内容も
合わせて出てくるため、少々見にくい。
そんなときは
>>10 の
「HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい」
のリンク先にあるスクリプトを実行する。コンソール(DOSプロンプトウインドウ)が
でてきて、そのウインドウへ、リアルタイムにキーの上げ下げ状況が表示される。
PrintScreenや、日本語入力などの特殊キーにHotkeyを定義しようとして、
うまく動かない場合は、これで調査すると、原因を掴みやすい。
ネタ: テキスト音声合成ミドルウェア 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" に置換する
新スレ乙
>>1 のautohotokey_lのサイトで
ansi ver. とunicode ver.が今日から公開されてるよ
>>12 オレもAquesTalkで時報とかしゃべらせてるw
かなり手軽にできるからイイ
音声だと画面見る必要がないので、いろんな場面でのアラートに便利なんだよね
フルスクリーンのゲームやってても問題ないしな。
ただ、音量をコントロールする方法がわからないから全体のボリューム上げてる時うるさいので困る、
調整方法ってあるのかな?
前スレ984です。前スレ999さんのお言葉に甘えさせていただきまして
引き続き教えて君をば
・
http://pc12.2ch.net/test/read.cgi/software/1253888736/984 のスクリプトに`nを加えれば望む反応が得られるのですが、msgの
代入のやり方がわかりません。おしえていただけませんか?
(差し支えというか、避けたいこと)
・984では`nによって非常に長い一行になるので、.iniに書き込む際にやりづらい
・自分で代入させるとTOOLTIPが消えたあと再表示させると、ポップアップの最下部にふたたび同じ文が追加される。
・ウインドウのフォーカスが移動するのがいやなので、ダイアログで出現するのは避けたい。
menuで選択する方法もいまだに非常に魅力があるのですが、
現時点ではこちらのTOOLTIPのほうが近道だと思っています。
わがままですが、よろしくお願いします。
だからさー、動かない具体的なコードを、なんで貼り付けないの? 想像だけで話を進めるのは、お互いに疲れるだけでしょ。
>>20 手を加えて動かないのはどういうコードなのよ?
例としたスクリプトからは、おまいさんの言うところの上手く動かない部分は見えないわけだが
>>20 良質なこのスレでこんなことを書きたくないが、ここの住人が協力してくれるのは、
やってみて駄目だった場合のみだ。
<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
説明書は
>>1 だ。読む気がないなら失せたほうがいい。
動かないコードを貼るとはいってません。 リンク先のコードに代入のやり方を工夫したものを ください。
>>25 7まで当てはまってるな
msg := "1行目`n"
msg .= "2行目`n"
msg .= "3行目`n" . "4行目`n"
. "5行目`n" . "6行目`n7行目`n"
AutoHideTooltip(msg, 5000)
こうか?
999 :名無しさん@お腹いっぱい。 [↓] :2010/02/08(月) 05:53:01 ID:xV2GFLdk0 どういう動作を期待してどんなことをしたら、意図した動作にならなかったか を書かないと誰も答えられないよ 出来れば最小限のコードも添える ------------------------- これが瞬間飛躍して ”動かない具体的なコードを貼る”になり、それ必須になるのか。 しねよ
わからない9大理由 1〜9まで、みごとに全部当てはまったw これにて終了。
( ゚д゚)ポカーン
>>16 レスありがとう。
それは音声記号列用のタグなのかな?なんか使い方がイマイチよくワカランです・・orz
>>26 出来ました。動きました。感謝します。
あなたは生きてください。
なんかワロタw
音声合成といえば、俺はSofTalkというソフトをrunで呼び出して使っている。
つかっている発声エンジンのコアは
>>12 と同じ。
dll呼び出しとの違いは、音声用辞書が含まれているので日本語の漢字混じりや、
改行や記号などが含まれていても、そのまましゃべらせることが出来る。
SofTalk
http://cncc.hp.infoseek.co.jp/ インスコ作業が不要なので、初期設定をした後は、フォルダごとコピーすれば
使いまわせる。複数のマシンで同じ設定を使いまわすときに便利。
あらかじめSofTalkの設定で、実行時のウインドウを非表示にしておく。
strに、しゃべらせたい文字を入れて
str=%clipboard%
run,SofTalk.exe %str%
とやると、しゃべる。上記のrunで、短時間で続けて送ったり、小出しに出力しても、
前の言葉をしゃべり終えてから、次の言葉をしゃべる(自動でキューイングされる)
dll呼び出し法で、音声辞書が使えるなら、dllのほうがスッキリするかも。
>>30 AquesCmdDl の独自拡張なのかもしれない…
音声記号列仕様.pdf には載ってないな
AquesCmdDl のサンプルから引用
>とちゅうで/<-v:50>おんりょーを/へんこうし/<-v:100>もどしま'す。
>>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 は治ったらしい。
dq = " test := dq hoge dq 例えばこんな感じに回りくどい書き方じゃなくても 変数内の文字列に" "を加えて代入させることはできる? 三項演算子の中でやりたいんだけども
test := """" hoge """"
>>35 そういうのがあるのか、あとで試してみる。thx
もしくは Chr(0x22) hoge Chr(0x22) 音声合成面白いね。タイマで回して0分/30分ごとに喋らせても楽しいかも。 そして ID:Rnrgbpwo0はなにが原因だったかわかってないんだろうな、 >19完全にスルーされたしw
>>38 ,40
おお、こんなやり方があったのか
一つ成長したよ、ありがとうございます
>>36 AutoHotkeySC.binデカすぎワロタ
のびてると思ったら池沼と 教えたがりのバカが来てたのか
>>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までは問題なかったんだけど
>>45 今試しにコンパイルしてみたけど問題なく起動したよ
ちょ、明らかに昨日のAutoHotkeySC.binとバイナリが違っているぞ 昨日はファイルサイズ2MB以上あったし
48 :
ひみつの文字列さん :2024/12/26(木) 13:27:52 ID:MarkedRes
日本国またはアメリカ合衆国、もしくはその両方の著作権法に触れる内容であると疑われることから表示できません。
うむ、SC.bin小さくなってるな。あとexeも2/9のタイムスタンプになってるな
てか、結構AHKL使ってる人いるんだな。勿論Unicode版。 ANSI版は使う意味が殆ど無くなってる。
51 :
45 :2010/02/09(火) 23:06:56 ID:oV6Wqdud0
皆さんありがとうございます ただしく動作しました!
お知恵を拝借。 【対象】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か否か)で場合分けしても、カーソルの位置によって上手くいかないことがあります。 良い方法があれば教えてください。よろしくお願いします。
イベントフックしてキャレットの表示・非表示を拾ってフラグの上げ下げをする。で、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表示無し
ime.ahk を使えばいいんじゃない?
>>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
IfWinActiveを関数で覆ったら、 一番上に書いたIfWinActiveだけが全てのソフトに適用されちゃう。 ひょっとして関数の中だとIfWinActiveは使えないですか? 凄く初歩的な事かも知れず恐縮ですが… ; 閉じる---------------- vk1Dsc07B & w:: modW() return ; 別ファイル---------------- modW() { ;Google Chrome #IfWinActive, Google Chrome send ^w return ;その他全て #IfWinActive, send !{F4} return }
こんな感じで書いても常に上のものが適用されてしまいました。 modW() { WinGetClass,activeClass ,A if(%activeClass% == Chrome_WidgetWin_0) { send chrome } else { send その他 } }
if(%activeClass% == Chrome_WidgetWin_0) { ↓ if(activeClass == "Chrome_WidgetWin_0") {
#If〜系を関数内にいれたらダメ。(頭に#が無い If〜 なら問題ない) #IfWinActive, Google Chrome vk1Dsc07B & w::send ^w #IfWinActive vk1Dsc07B & w::send !{F4}
60 :
56 :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
}
}
61 :
56 :2010/02/10(水) 21:04:33 ID:HlHCopxg0
何度もすいません…
{の前に改行を入れたら
>>59 さんの言う通り#無しIfWinActiveが使えました。
厳密だったんですね。お騒がせしました。
modW() {
; エラー
IfWinActive, ahk_class TTeraPadMainForm {
send terapad
}
; 成功
IfWinActive, ahk_class TTeraPadMainForm
{
send terapad
}
}
「TTeraPadMainForm {」 という文字列がマッチしたかどうかを判別するようになるから、 それだとカッコが1つ不足するからエラーになるんだろう。 そういう気づきにくく、かつ発見したときに落胆するようなトラブルが俺は嫌いなので、 カッコは1行に1個で、合成はしないよう徹底している
エラーになる原因は { が省略された引数と解釈されているため まぁコマンドタイプの If と 式タイプの If 系が混在してるから分かりにくいのは確か あと、ブロック内が1行の場合は、{ } は省略出来るんでそれを使うのも手。 IfWinActive, hogehoge Send, boo Else IfWinActive fuga fuga Send, foo Else Send, woo ただ、>.>59のように #IfWinActive を使った方が見通し良くてパフォーマンスも良いと思う。 好き好きだけど。
個人に頼り切りだとこういう時弱いね
別にヘルプファイル落としとけばいいだろ
>>66 新参に「このページを読め」って言えなくなる。
サイト丸々落として保管しとくか…
あれ、固まってどっかに置いてなかったっけ?ほとんどサイトと構成が同じやつ
あそこはzip配布してるから欲しい人は今の内に落としておいた方がいいかもな
>>69 下のほうにZIPでダウンロードできるリンク貼ってあるね
AutoHotkeyJP.chmの作者様、最新版Lへの対応をまったりまってます(チラッ
うpろだの代わりを探さないといけないな
抹消される前にNILScritが普及すればいいんじゃないか
エイプリルフールネタがどんどん現実になっていくんだな。
おいおいまだ2月だぞ エイプリルフールには早すぎねえかw
え?
ちょw
別ページ立ち上げじゃダメですか管理人氏
Java系わからんから今さら移行なんてできないわ
更新停止旧コンテンツ扱いでいいから残しといて欲しいです
>>73 なんかすっかり派生のL版のほうが主流になっちゃいましたね。
自分はいまだ公式ANSI版なんで良くわからんのです。
というか日本語説明のない新機能はもう全然…
wikiなり既存ページなりをchmでまとめるくらいはできるんだけど英訳はむりぽ
まじかw バレンタインとエイプリルフールを間違えているんじゃないのか??
まぁ、しゃーないわな。個人のやる気に依存したものだし。 Wikiにでも移行するか? ベースはあるわけだし、リファレンスはページ作ってペタペタ貼れば何とかなると思う。
この手のソフトって過去の資産の積み重ねが重要だと思うけどなあ マクロとしての機能的には微妙な秀丸マクロがいまだに使い続けられてるみたいに 新しいソフト出たからって乗り換えようって気にはならないわ
(^ω^#)ビキビキ
んにゃろおおおwww
ククククマー 二ヶ月も前から準備する奴があるかい…
AutoHotkeyを流行らせる気なんて最初から無かったページ この文言はいささか失礼でないかい? 公式からリンクされているし翻訳を通して読んだら日本はなんだと不愉快になると思う 独自にスクリプト言語を開発してるからAutoHotkeyのページは閉じたい といえばいいだけで、わざわざこんな文を表示させなくてもいいんじゃないか
本家サイトで、日本国旗のアイコンをクリックすると、 はやらせるページに飛ぶからね。公式に認められたサイトなのに、 そこでAHKを冒涜するような文言を書いてしまうのは、ジョークでも悲しいわ AHKではここまでしかできません。ここからは我が作のNILScriptでどうぞ NILScriptで、AHKのこれと同じ表現をするには以下サンプル〜〜〜 みたいな流れで進めてくれると思ってたのに。
流行るというのは馬鹿に見つかるってことだからな。
だいたいこのソフト自体諧謔精神の塊みたいなもんだろ
サブルーチンラベルってホットキー用のラベルかどうかに関わらず、 連続して書いてあるものは全部同位のようなふるまいになるんだな。知らなかった。 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
>>92 サブルーチン毎にreturn を書いたらいいんじゃね?
いや、困ってるんじゃなくて、T1とT2の挙動の差が面白いなと F4とF5みたいな書き方はマニュアルにあるからしってたんだけどな
AutoHotkey_L Revision 46 - February 11, 2010
>>94 なるほど
そういうことだったか
よくよく考えると
F4とF5の設定の直前まで読み込んでしまうってことに
気づいたことはなかった
F4とF5の設定がautohotkey内の処理では特別な処理をしていそう
javascriptなんて10年くらい触ってなかったがいまは無名関数とかあるのか。勉強するかな
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 こう設定したんですがそれほど改善されたように思えません
>>96 F3がsingle lineホットキーで
暗黙的にreturnがその後に挿入されるからっぽい
ドロップダウンリストは1行表示だから、見えている部分の再描画を抑えたからって あまり効果が無いような気がする。 リストビューやエディットならアイテムが追加される毎に、内容を描画する矩形の大きさを再計算したり スクロールバー再描画したり、場合によっては追加時のソート処理したりと、 結構効果があるだろうけどね。
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。
そこのは最近全然メンテされていないし、古い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
環境や出典元URLはおろか何するためのスクリプトなのかの説明もなしで一体どうしろと
Lexikos はハッシュに対する for(each) 実装する意向があるみたいだな
>>104 ボタンを自動で押したりするマクロはインスコフォルダにあるAutoScriptWriter使えば自分で作れるよ
>Lexikos もう根本的に仕様を見直したほうがいいだろ
rubyとかpythonみたいなゆとり文法で書きたい…
ひまわりと統合
110 :
104 :2010/02/15(月) 10:51:03 ID:X56S6fVe0
申し訳ありません。 下から2番目の MouseClick,,360,210 がうまくいきません。 子ウィンドウ「名前をつけて保存」の中の、「保存」をクリック してくれません。クリックする座標値(360,210)を調整すれば いいのでしょうか?
保存(&S)のボタンを押せばいいだけなら Send, !s に変える
だから何のソフトの子ウィンドウなんだよ。 座標値調整してほしいならSS張るなりなんなりしないと分からんだろ
いや、座標ぐらい自分で調べないと 口調は丁寧でも皆の言うこと無視してるし、傲慢だよ
114 :
104 :2010/02/15(月) 22:58:42 ID:X56S6fVe0
>>111 うまくいきました。
ありがとうございました。
AUTOHOTKEYの存在自体を昨日初めて
知りました。
皆さんありがとうございました。
妙だ
質問をさせて頂きたいのですが、CTRL+8 に SHIFT+F10+I(コンテキストメニューからI) を登録したいのですが、^8::Send, + 以降はどの様に記入すれば宜しいのでしょうか 御回答どうか宜しく御願いします。
<わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
説明書は
>>1 だ。読む気がないなら失せたほうがいい。
次からテンプレのトップにこれを張るべきだな
基本的なことですみません。 変数の型digitを演算に使用できるようにするにはどうすればよいでしょうか 具体的には、組み込み変数A_CaretXをキャレット位置から相対的な位置にGUIを表示する際に 調整的に足したり引いたりしたいと思っています。 型変換すれば簡単だと思っていたのですが、どうもそのような関数がないような・・
121 :
120 :2010/02/17(水) 14:13:30 ID:wixvpnix0
すいません。解決しました。 ずっと% %A_CaretX%+50というような記述をしていたことが誤りでした。 % A_CaretX+50 これで普通に50がプラスされました。すいませんでした
スクリプトで Run, xx を実行すると、アンチウィルスソフトに記録される。 阻止しました と記録されてる時もある。 というのを今日発見した。それだけ。
なんか流行るページが終了のお知らせになってたが NILScriptってどうなの、またスクリプト書き直しなのか
どうせ今年は「4/1 閉鎖は中止です」→「4/2 中止というのは嘘です」というネタなんだろ
タスクメイドというソフトを入れてみたら、 タスクトレイアイコンのリストを表示 (by流行らせるページ管理人 のアイコンが表示されなくなってしまいました どういじったらアイコンでるのかな、、、
>>126 <わからない9大理由>
1.読まない …説明書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
説明書は
>>1 だ。読む気がないなら失せたほうがいい。
>>127 さすがにそれは違うだろ。
そのコピペはバカには使いこなせないから、
以降キミはそのコピペを張らないように。
9.逆切れする …自分の思うようにならないと逆切れする。 127のレス通りの馬鹿さ加減だな(笑) 煽り耐性0のようだからこれからもファビョり続けるんだろうなきっと
わからないn大理由 のコピペってちょっと説明ベタでエスパーが必要なだけの質問に
やたらベタベタ貼られることが多いよね。本気で始末に負えない丸投げ教えて君でもない限り、
初心者お断りな閉鎖的な流れはあまり作らないで欲しいんだが
>>126 タスクメイドのことはよく知らんけどウィンドウ化したことで
ahk_class が Shell_TrayWnd じゃなくなってたりとか?
アイコン以外の情報は取得できてるんなら 41行目をコメントして
hicon := GetWindowIcon(hwnd)
に差し替え、ファイル末尾に↓を追加でうまくいくかも (全角空白は半角2個に置換してね)
;--- ハンドルで指定されたウィンドウのアイコンハンドルを取得 --- 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 }
;-- 無理だったら 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 }
タスク冥土入れてみたが、アイコンだけじゃなく取得内容自体もおかしくなってるね 単純に ahk_classの問題だけみたいなんで 16行目以外の Shell_TrayWnd を TTaskMWndに置換するだけで上手くいくようだ。 132-134は無視してくれ。スレ汚しすまない
努力した形跡がないから問題なんだろ これこれこういう方法などで試したけど解決しなかった、とか その程度すら書いてない
教えてください。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
ためしてないけど Gui, Add, Button, x62 y120 w100 h30 , Button3 ↓ Gui, Add, Button, x62 y120 w100 h30 GButton3 , Button3 じゃないの。Gコマンドが埋まってない
>>138 ありがとうございました。動くようになりました。
はやくおしえてくれてサンクス。
ドイツ語とかがよかったか?
バウムクーヘン!(キリッ
ゾーリンゲン
思考言語切り替え、日本語をBASICに
>>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
お仲間にこっそりと忍び込もうとしている者です 今から使おうと思ったらAutoHotkeyとAutoHotkey_Lどちらがいいのでしょうか? またAutoHotkey_LをDownloadしたのですがファイルがAutoHotkeyに比べて少ないです AutoHotkeyを解凍したフォルダにAutoHotkey_Lのファイルを上書きしたほうが使いやすいのでしょうか?
L主体で使うんなら、それでいいと思うよ 本家のインストーラでインスコしてから上書きした方が、 右クリメニューとか .ahk にドラッグ&ドロップできるとか色々便利
なんだ。エイプリルフールネタか。急いでマニュアルDLしちまった。 でも、NILScriptって本当に開発しているんだよね? 俺、64bitだから検証できないのだけど 誰か使ってみた? 本気で開発する積もりなのかな。
閉鎖は本気でしょ。 日本語のドキュメントが必要な人だけ落としておけばいい。 それだけの話。 NILScriptはホットキーが(まだ)使えないらしいから PやRが付く言語並にスレ違いだろ。
あわてて wget で全部落とした。 貴重な日本語ガイドだから、無くなると困る。 管理人さん、今までありがとうございました。
string := "a`tb`tc" loop, parse, string, A_Tab msgbox % A_LoopField タブ文字で上手くパースできないんですけど、 自分は何を勘違いしているのでしょうか。 教えて下さい。
loop, parse, string, `t まはた loop, parse, string, %A_Tab%
"loop, parse, string, %A_Tab%" でした。
>>155 ありがとうございます。ちょっと不思議なのは、`t と %A_Tab% で結果が違うことです。
なんででしょうね???
AutoTrimだろ
・常に使うスクリプト ・あるアプリケーションのみで使うスクリプト があると思うのですがどのように使い分けていますか? 長いスクリプトで起動してますか?(#Include含む) 別々に起動してますか? 別々のほうがパソコンに優しい気がします でもExplorerから直接起動したときスクリプトの起動・停止を忘れちゃいます
>>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すると、常駐してる方が落ちることがある
MouseGesture.ahkのような設定のできるKeyGesture?.ahkみたいなのありませんか? 地デジチューナーMonsterTV HDUCのリモコンのボタンを押すとCtrl+F13~24、Ctrl+Shift+F13~24というキーを送ってくるのですが これをAHKで拾ってアプリ(ウィンドウクラス)ごとに別のキーに置き換えて再送信して操作できれば・・ 例えば電源ボタン(Shift+F14)が押されたら開いてるウィンドウを閉じる、デスクトップではWindows終了とかです
分からんがようするに自分でメモ帳使って^F13::Send !{F4}とか書けないって事? まあ確かにキー置換だけが目的の人も多いだろうし一個くらいGUIで設定できるようなスクリプトがあってもいいかも いやあるかも知らんが調べた事がない
>>162 ああー!なるほど!
そういえばAutoHotKeyってそっちがメインでしたね
MouseGesture.ahkとか便利なもの使ってると忘れてしまう
ただクラス毎の設定追加が大変そう・・
指定した任意のプロセスのカレントディレクトリを取得する方法ある? マルチ環境での使用ソフトに対してそのソフトが起動したディレクトリ基準で操作したい
166 :
165 :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 のエラーが出る・・
>>168 ありがとう
データが空になって取得に失敗しちゃうなあ
inputboxのok,cancelボタンを表示しないで シンプルに一行の入力欄だけのボックスにしたいんだけど そういう方法ってない?
GUIでつくりゃいいんじゃないの。 Gui, ShowしてからWinWaitCloseで待てばモーダルっぽくできるし
>>164 #HotkeyInterval 10000
#MaxHotkeysPerInterval 500
くらいにしとけば抑制できるんちゃうかな
それでも頻繁に発生するなら#MaxHotkeysPerIntervalを更に増やしてみるとか
ちなみにLogiのSetPoitは
>>9 みたいなことが発生するので
できればSetPointをアンインストールしてマウスの全設定をAHKに任せたほうが楽。
それが無理なら試行錯誤するしかないねぇ。
任意のウインドウを間違って閉じてしまわないように、 閉じないようにするホットキーって割り当てられますか? 且つ、常に全面に来ないようにしたいのですが・・・おしえてください。 まちがって閉じてしまうと復帰にかなり手間がかかるウインドウがある場合があるのです。 このソフトで、任意のウインドウを常に全面にするホットキーの割り当てがあるので 私の望むのもあるかと思い、お伺いしました。
ソフト名を書かない理由は? それじゃアドバイスできる範囲も限定される。 押してはいけない部分の画像を認識させて、押さないようにするとか。
操作するウィンドウをクラス名を指定して除外する、ということをしたいのですが AHKには文字列比較のできるSwitch文のようなものはありませんか? If InStr(Hoge,"MozillaWindowClass") return 0 If InStr(Hoge,"THogeTextView") return 1 〜〜〜〜 を↓のようにできればいいのですが・・ Switch(Hoge) { MozillaWindowClass: return 0 THogeTextView: return 1 〜〜〜〜 }
一般的な方法論だと 「常に最前面」を解除したいなら、まずはアプリ側の設定を見直す。 それが出来ないなら、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) ; 閉じるボタン } }
>>175 Ifの羅列とSwich〜Caseは意味としては等価だし、面倒だけど仕方ないと諦める。
あとは、必ず何か返すってのなら三項演算子を使うか
Return InStr(Hoge,"MozillaWindowClass") ? 0
: InStr(Hoge,"THogeTextView") ? 1
: (デフォルト値)
>>177 うーんそうですか・・
If Elseだと例外クラス名を追加するのが面倒そうなので縦にずらりと並べたくて
ありがとうございます、Switchは諦めてその方法でやってみます
具体的にどんな目的で処理してるか分からないけど、ウィンドウグループ使うといいかも
>>174 スチームというゲームユーティリティのチャットルームのチャットウインドウです。
通常のウインドウ同様
右上の×を押してしまうか、あるいはALT F4で
いつもまちがって閉じてしまうので。
スチームのみならず、ほかにも一般適用できればと。
IE8のウインドウとか
関数内での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で、変数の数字を動的に与えたいのですが、なにかよい対策は無いでしょうか。
なーんでせつめいしょよまないかなー
1) 関数の最初でGlobal で全部広域変数にする 2) 変数割り当てをしない(vXXXXを外す)で、GuiControlGet で取得するようにしてみる。 その際変数名ではなくて classNN でアクセスする
レスありがとうございます。ということは、
Global、Static宣言で、特定の擬似配列だけをまとめて定義することはできない
ということでしょうか。
>>183 なるほど。2案の方法を以前試したことがあるのですが、
GUIのデザインを変更した際(上部に新たなテキストやボタンを追加した場合など)、
ClassNNの「Ststic1」や「Button1」などの数字部分が全部+1ずつズレてしまって
固定で指定してしまったコードの修正に苦労した覚えがあります。
このClassNNの文字(Static1など)を、GUIを置く際に自分で定義することは
可能でしょうか。固定定義ができれば、変数と同じ扱いができそうですが、
この定義を指定するオプションを見つけることができませんでした。
>>184 と
>>183 の1案
すみません、できれば関数全体をglobalにはしたくないのです。
この関数内でGUIをAddする前段階でローカル変数がたくさんあり、
それを全部local宣言するよりも、GUIで使う変数だけをGlobalにできないか?
と思った次第です。
>>185 グローバルスコープで
loop,10 {
ABC%A_Index% := ""
}
したら動いたがだめ?
>>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
関数の外であらかじめ細工するということですね。勉強になりました。ありがとうございます。
やりたい事はAHKで割と簡単に実現可能だから安心して試行錯誤してくれ
>>174 ,176にアドバイスもあるからがんばってね
不格好でいいならこんなのでも
#Persistent
SplashTextOn,20,0, nurikabe
WinMove, nurikabe,,50,100
CTRL+8 にコンテキストメニューからIの登録をしたいのですが スクリプトはどのように記載すれば良いのでしょうか ^8::RButton これ以降がどうしても分かりませんお願いします。
^8:: Send,{AppsKey}!I Alt+I じゃなくていいなら !は不要
>>191 有難う御座います。本当に感謝します。早速やってみます
原因がわからず困っています。ヒントだけでも良いのでお願いします。 【質問内容】最小化されている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)では同様の症状は見られませんでした。
要はタブにフォーカスが当たってないんじゃねーの? Firefoxウインドウが最前面かつタブが最前面じゃないと いろいろなコマンドが効かなくなった気がする。
ウインドウの中央(あるいは任意の座標)に2x2ぐらいのドットの箇所だけ 色を変えることって出来ますか? トグルであるキーを押したら、そのウインドウの中央に赤点を表示させたいのです。 画面に文字を表示させるソフト(背景は透過する)で同様のことができそうなのですが 手間がかかるのとCPUに負荷がかかるのでAHKでできないかと思いまして。 リファレンスでコマンド一覧みてますが、さすがにコレは出来ないっぽいですね。
Run コマンドで指定したファイルが見つからない時に ファイルが見つかりません って出てくるErrorお知らせウインドウを出てこない、あるいは 数秒で消えるようにしたいのですが可能でしょうか?
>>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
>>197 ありがとうございます。
すごい。そういうアイデアがあるんですか。いろいろ工夫されてて。なるほど。
しかし、自分初心者なのでそのままその文字列を放り込んでもなんも変化がない。
Pause:: をF3にしたりしてるが、動かない。
前半部のところをiniの先頭にもっていったりして
規則に合わせる必要があるのかな。
とにもかくにも深夜にありがとうございます。やってみます。
負けました。
フォーカスが移らずに常にずっとウインドウの中央に赤点を表示する状態を トグルでオンオフしたいのですが、ちょっと無理ありましたね。
>>197 ありがとうございます
ErrorLevelの方向でイケそうです
>>197 出来ました
ありがとうございます
速すぎて驚きました
>>194 的確なコメントありがとうございます。おっしゃる通りでした。
次のスクリプトで解決しました(ControlFocus行を追加しました)。
#F::
WinActivate, ahk_class MozillaUIWindowClass
ControlFocus, MozillaWindowClass2, ahk_class MozillaUIWindowClass
return
>>197 すごい
そんなのを含めて、ahk の本出して。
買います、1冊だけだけど。
;アクティブウィンドウの閉じるメニュー(閉じるボタン)を消す 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 ;あくまでも消すだけで、無効化ではない。
アクティブのウィンドウが変わったら処理をしたいです。 テレビを時間指定で録画しています。 録画終了時の動作指定が出来るのですが1つしか設定できません。(任意指定ではなくアプリケーション既定動作) 現状の設定では録画終了時、ウィンドウが開いて15秒以内にキャンセルボタンを押さないとシャットダウンします。 このウィンドウのキャンセルを自動化したいです。 このウインドウは最前面でアクティブになり、大きさも変わらず、ウィンドウタイトルも同じです。 条件に合えば(マウスカーソルがこのポジションにあったら等)キャンセルにしたいです。 タイマーを使う方法は考えたのですが、PCへの負荷を考え今までタイマーは敬遠してきました。 気にするほどではないのでしょうか? またタイマー以外の方法はありますか? 長文失礼いたしました。
キャンセルボタンを押すのが15秒以内ならタイマー7秒毎に設定しておけば 確実だろうから、それくらいなら殆ど負荷無いはずだよ 一辺テストでやってみるのオススメ
しかしAHKがこれだけ普及した今NILは成功するんだろうか
多分しないだろうな。
>>206 作り方にもよるが、IfWinActive / IfWinExist あたりで目的のウィンドウが
見つからない時はすぐ抜けるようにすればOK
ダイアログ出て即反応するくらいなら 300〜1000msくらいのタイマで充分だし
そのレベルなら殆ど負荷はない
>>210 スレが質問で溢れかえることを成功と言うならな
趣味の範囲で終わるような処理系はどこもレスが少ないよ 仕事とか課題で期限があるところだと質問スレは賑わってるけど
テキストファイルに改行コードを入れたいのですがどのようにすればようのでしょうか? やりたいことはcsvの作成です カンマ区切りで,を入れることはできたのですが改行がわかりませんでした。 一応\nや\rをfileappendで指定してみたのですができませんでした。
NILでAHKスクリプトがそのまま動くならいいんだけどな
特定のキー"以外全部"にホットキー割り当てる方法ってありますか?
列挙すりゃいいんじゃね ただキーロガーのようなきもするが
Alt::return LAlt::return RAlt::return F4::return と書いても普通に ALT押しながらF4 でアプリが終了できるのはなんで?仕様?
!F4::return ってやらないとダメなんでない? 試してないが
contorolclickで座標指定してボタンを押そうとしているのですが あるアプリでどうにも押せないボタンがあります(押せるボタンもいくつかあります) で考えたのですが、WINDOWSPYの座標って目に見えるGUIの座標と大きくズレることってあるでしょうか?
>>221 アプリって何?
クラス番号とかが違ってる可能性があるよ。ちゃんと指定しないと送れない。
controlgetでハンドル取得できる?
>>223 thx!アプリは音楽系のVSTなんですがやはり指定しないとダメなんですね
ControlGetについて調べたんですが今の自分にはハードル高かいようで
余りスマートじゃないですがMouseClickでカーソルごと動かすことにしますた
まぁ、一般論だけどボタンに割り振られている機能がウィンドウメニューからでも実行できるなら、 リソースハッカーとかでコマンド番号調べて PostMessage で WM_COMMAND 発行するのも手だ。
2バイト文字の文字数カウントをしたくてAutohotkey_Lに変えてみたんですが、 Lの方だとMouseGesture.ahkの矢印ナビの偶数番目が文字化けします。 どうしたら直せるんでしょうか。
文字の取り扱いが異なるので、MouseGesture.ahkをユニコード用に書き直すしかないね。 ANSI版で文字数を数えたいなら↓を使えばいい MBStr_Length(ByRef s) { Return DllCall("msvcrt.dll\_mbslen","Str", s, "UInt") }
>>228 そうなんですか。
ナビの表示以外は普通に使えるので、無視して使うことにします。
ありがとうございました。
あ、AutoHotKey_LのUnicode版です
>>227 ですが、その後も調べてみたら事故解決しました。
"GDI32.DLL\TextOutA"のAを削ればいいだけでした。
一応確認しておくけど、AHKを流行らせる〜の中の人がAHKの開発してたんじゃないよな? この人はただAHKのマニュアルを日本語化してただけだよな? AHKページの開発自体は続くよな?オープンソースになってたけど誰がどこで開発してるのかわからないので不安になった。 AHKってどこかにデベロッパー用のサイトあるの?
つ Google
TTBaseの機能をAHKに一本化したいのですが どこかにmemo.dllのような付箋スクリプトとか転がってませんか? ExMenuやClipboardClearのような簡単なものは自前でなんとかできたのですがこれは難しそうでどうにも・・
そいつの機能はは詳しくは知らんけど、ツールバーとかクリッカブルURLとかあるみたいだし、 AHK標準で使えるGUIコンポーネントだけじゃ実現できなさそう。
VistaやWin7のエクスプローラで、BackSpaceを押したときのフォルダ移動の挙動で困っています。 XP以前では、BackSpaceを押すと必ず上の階層に戻ったのですが、 Vista以降はIEなどと同じ「1つ前の画面に戻る」なので、上の階層へ進めない場面が多いです。 Vista以降で確実に上の階層へ行くには Alt+↑ を押さなければなりません。 単純にExplorer指定(ahk_class CabinetWClass) において BSをAlt+↑に変えると、 リネームなどをやってるときにBSキーを押すと誤動作してしまいました。 なにかよい手はないかと模索していますがヒントいただけると幸いです。
リネーム中はフォーカスのあるコントロールのクラスはEdit。 アドレスバー(たぶんEdit1)とは連番が違うのでEdit2とかEdit3とかのはず。 ControlGetFocusでclassNNとって条件分岐かな。
>>241 ありがとうございます。チャレンジしてみます。
#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) }
244 :
243 :2010/03/03(水) 19:54:13 ID:+Mlj7yLt0
あ、コードだけで書き込んじゃった
ウィンドウメッセージを横取りして最小化されたらタスクトレイに格納、というスクリプトを書きたいのですが
試しに
>>243 でWH_CALLWNDPROCでフックしてみたところなぜかフック失敗してしまいます
WH_CALLWNDPROCをキーボードメッセージをフックするWH_KEYBOARD_LL(13)に書き換えて動かしてみたところそちらは正常に動きました
何かコードに問題があるのでしょうか
DLL
246 :
243 :2010/03/03(水) 20:05:35 ID:+Mlj7yLt0
>>245 すみません、どういうことでしょうか?
DLLCallの記述はたぶん問題ないと思います
hMod
>>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%」が最小化
}
249 :
243 :2010/03/03(水) 20:25:12 ID:+Mlj7yLt0
>>248 おおー!動きました!
SetWinEventHookなんてAPIがあったんですね!
非同期とのことですがいろいろ試してみようと思います
>基本的にグローバルフックはDLLを作る必要がある。
DLLはちょっと手を出しづらいですね・・
それとスクリプトのためにプログラム書くのはなんだかちょっと
お二人とも本当にありがとうございました
無変換とcで大文字固定のトグルがしたくて sc07b & c::Send {CapsLock} ってやって1回押して大文字固定はできたけど、2回目を押しても戻りません テンプレにロック系は問題ありって書いてありますが、なんとかならないでしょうか?
sc07b & c:: If GetkeyState("CapsLock", "T") SetCapsLockState, off Else SetCapsLockState, on KeyWait, c Return
252 :
250 :2010/03/03(水) 21:43:07 ID:4Dn+kT//P
>>251 思い通りの動作になりました
即レスありがとうございました
なぜか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で呼び出したら表示してくれた
デスクトップ右下時計表示のところのAutoHtKeyアイコンのダブルクリック動作を変更することは出来ますか?
joy1 & joy2:: ってできないんだねー・・・。しょぼん
>>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
;続く
257 :
256 :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 }
>>254 MouseGesture.ahkのアイコンをダブルクリックすると設定ウィンドウが開くので出来るんちゃう
AutoHotkey_L つかおうぜ
>>254 >>8 の例2をパクればおk
>>255 ~Joy1 & Joy2:: みたいな感じになるけど、出来なくもない
#If GetKeyState("Joy1")
Joy2::〜〜
あ、
>>259 の前半は読み間違えてるのか
Menu, Tray, Default, メニュー項目名
でいいんじゃないの
>>256 みたいにするのが発展性があるのかな。
無数のJoyの組み合わせを、無数のアクションに振り分ける場合、
タイマーorループでJoyの入力を常に監視する方法になるでしょうか。
すこし重くなるね><
>>259 は簡単でいいですね!
ありがとうございます。
素直に専用ソフトを使ったほうがいい>じょいすてぃっく
>>261 Joy1
Joy1+Joy2
Joy1+Joy2+Joy3
上記の組み合わせそれぞれに別の動作を割り当てたい場合はループやタイマー使った方がいいんじゃないかな。
んで、起点のキー(修飾キー)が押された場合のみループorタイマーを実行し、
20〜50ms間隔くらいにしておけばそこまで負荷は高くないかも。(※PC環境による)
こういう特殊な割り当てをしないなら
>>262 さんがレスしているように専用ソフトがいいかも。
>>263 どのキーでも起点にできるように命令を組んでみます。
発動するアクションを自由に書けるのがAHKの魅力だね。
>>262 コンビネーション入力できるソフト探してみます。Joytokeyは結局未実装だったんかな。
JoyToKeyだと「一時的に他のジョイスティック番号を使う」がコンビネーションキー相当だよ
ttp://d.hatena.ne.jp/eamat/20050826 ここのgetProcessExeNameNT(pid)でファイルパスを取得しているのですが
MPCHomecinema x64やWin7 64bitのエクスプローラ、Internet Explorer x64などの64bitアプリケーションに限って
EnumProcessModulesが失敗しているようです
なんとかして64bitアプリのファイルパスを取得する方法はないでしょうか?
以前に某所の裏で 『いくつかの関数ライブラリを本家の方で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. "
>某所の裏 どこ?
>>267 Databaso file
libdb.ini
does not exist.
ってメッセージが出る
ここでキャンセルを押すとまっさらな設定画面が現れるよ
どういうことだろう
書き忘れた 確認したけど libdb.ini は LibraryExplorer.ahk と同じディレクトリにある
>>269 _Lだとだめだね。
lib/ini.ahk 971:If (fileSize != StrLen(_Content))
でfileSizeのが2バイト大きい。最後の改行かな?
MouseGesture2の質問です。 第4ボタン、第5ボタンに機能を割り付けているんですが エクスプローラで第4ボタン、第5ボタンを使うと 割り付けた機能と同時にフォルダの"戻る"、"進む"が実行されてしまいます。 この、"戻る"、"進む"が実行されないようにしたいのですが、ご存じの方いますか? ググるとマウ筋での解決法はありましたが、MouseGesture2では解決法を発見できませ んでした。
>>272 マウスドライバの方でF21とかに割り当てて、
MouseGesture2でF21扱いで設定作る。
#IfWinActive等でウィンドウ毎にキー定義できるけど、SendModeも同時に設定したいなぁ
Alt::return LAlt::return RAlt::return F4::return と書いても普通に ALT押しながらF4 でアプリが終了できるのはなんで?仕様?
一回目のレスで答えてもらっとるやん そういう意味じゃないとしたら AltやF4単独とAlt+F4(!F4)は別の物として認識されるから仕様と言える
277 :
272 :2010/03/06(土) 09:41:16 ID:VmTt9Q7Z0
>>273 ぬお!できた!
そんなやり方もあったかー。3日色々設定試して無理かと思ってたので助かりました。
ありがとう!。
さっきこのソフト知ったんだけど、無変換キーをALT+TABにしたい。 vk1Dsc07B::!TAB これだと無変換を押しっ放しにするとリピートするので リピートしないようにするにはどうすればいいの? vk1Dsc07B:: Send,!{TAB} KeyWait,vk1Dsc07B return これでいけたけど、一行ですっきりとしたい
>>278 二行になるけど
vk1Dsc07B::return
vk1Dsc07B up::Send,!{TAB}
はどう?
てかCtrlもくっつければいいんじゃないの? vk1Dsc07B::Send,!^{TAB} でよくね?
AutoHotKey_L x64まだー?
AutoHotKey_Lを使用しています。 WinGetText, var, WinTitle で取得したテキストを IfInString, var, あああ で分岐させたいのですがうまくいきません。(マッチせず次行をパス) あああ はWindow Spyの Visible Window Text Hidden Window Text で確認できる、途中の行の一部を全角文字で指定しています。 var の中に あああ が存在することは Clipboard = Send, ^c で確認しました。 コツみたいなものはあるのでしょうか?
>>279 これいけた。ありがとう
>>280 ? ALT+TABのアプリ切り替え画面が出ないけど
>>281 AltTabコマンドは&を使ってないとダメらしい
vk1Dsc07B & vk1Dsc07B::AltTab
これやってみたけど、さすがにダメだった
vk1Dsc07B::Send,!^{TAB} ああこれはVistaからの機能だったわ
>>283 If Var Contains あああ
ではどうよ
正規表現の抜き出しについて質問です。
以下のコードで、「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)(.*)
この事例の場合、どのように記述すれば動くでしょうか。よろしくお願いします。
ちゃんと見てないけど多分改行オプション
>>287 s)(.*?\n)(.*\.sys)(.*)
違った s)(.*?\n|)(.*\.sys)(.*)
>>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
>>291 m)(.*?)(\S*\.sys)(.*)
>>292 ありがとうございます!動きました。とても助かりました。
あるアプリケーション使用中にクリップボードに貼り付けをおこないたいです Send, ^C 以外の方法はありませんか? イメージ的にはwebブラウザーでマウス中ボタンクリックのスクロールモードです Ctrlを押した時にスクロールモードが解除されてしまいます スクロールモードのままクリップボードに貼り付けたいです
296 :
294 :2010/03/10(水) 12:01:53 ID:aWRg/Lc70
>>295 早速のレスありがとうございます
残念ながら駄目でした
>>294 "ClipboardAll = "じゃダメなの?
といってもクリップボードに入れる対象が分からんから何とも言えないけど。
Edit互換コントロールなら ControlGetのSelectedでクリップボード使わないで 選択領域取れるから、そっから Clipboard につっこみゃいいんだがね 対象がブラウザなら大抵IEかGeckoコンポネだからダメだが
★ 的確なレスを貰える可能性を高めるには ・ 環境(OS、AHKのバージョンなど)をきちんと書こう ・ 操作対象となるアプリケーションは具体的な名前を書こう ・ 短くても良いので何のために操作を行うかを書こう ・ スクリプトの書き方で困っている場合は該当部分を晒そう
除外処理を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みたいなもの?
>>300 Listから追加削除しないなら後者で十分かつ速いと思う。
Objectが近いのはmapだと思うが。ドキュメント読んでないよね?
>>301 >map
確かにそうですね
ドキュメントは一応翻訳してくれているhogeってページを読んだんですがそれでもなんかわからなくて
追加削除はしないので全部If〜In〜で置き換えてみます
ありがとう
PrtScしたクリップボードデータを画像データとしてファイル作成できるかな ただ拡張子をbmpにして作成するだけじゃだめだよね
クリップボードの解析が目的じゃなくて、スクリーンショットをファイルにするのが目的なら、
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%
外部アプリ起動に使用するRUNについての質問です。 RUN実行のパラメータにexeではなくtxt等のファイルを指定すると OSで関連付けられたアプリが起動(txtならメモ帳とか)しますが 関連付けられたアプリがない場合、エラーダイアログが表示されます。 このエラーダイアログを出さないよう、RUN実行の前に、関連付けがない事を 検出する方法をご存じの方いませんか? ちなみに "関連付けがない場合、指定のアプリで開く" ような動作を行わせたいと考えています。
>>309 レジストリを参照(RegRead)するとかは?
WindowsXPならレジストリの HKEY_CLASSES_ROOT のルートにある拡張子(例、txt)を参照する。
┣「.txt」の既定値が空欄(未設定)
┃ ┗ 関連付けされていない
┗「.txt」の既定値が設定(txtfile)されている
┗ HKEY_CLASSES_ROOT\txtfile\shell\open\command の 既定値を参照する。
┣ プログラム(アプリケーションソフト)のパスが記述されていない
┃ ┗ 関連付けされていない
┗ プログラムが記述されているならプログラムが存在するかチェック。
>>305 全く試してないけど、runwaitで試しにその拡張子のファイルを開いてみてerrorlevel調べられないかな?
UseErrorLevel と ファイルの存在確認でいけるんじゃね? target = hogehoge.hogeExt IfExist, %target% { Run, %target%,, UseErrorLevel If ErrorLevel MsgBox, 関連付けなし } Else MsgBox, 実行対象ファイルが無い
>>308 対象ファイル自体は存在していて、それをRunでExplorerに丸投げすると、
関連付けが無い場合はExplorerのEXEプログラム選択ダイアログが出るね。
エラーレベルは、関連付けがあっても無くても0になる。
そのコードだとファイルの存在有無の判別はできるが、
関連付けがされてるかどうかの判別はできないと思う。
>>306 の方法で地道に作るのが確実だろうね。
関連付けを確認したり、いじる関数でもあればラクなんだけどね
そんな関数があったら俺もぜひとも欲しいわ
ダイアログが出たかどうかで判別すればいいんじゃね? っていう消極的解決法
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は空になるからそっちで判断してもいいかな こんな感じ かな
>>306 〜
>>311 皆さんレスありがとうございます。
最終的にはレジストリを彷徨うしかないのかと思って挫折しかけでした。
とりあえず311さんの方法から試してみます。
DllCallとか使いこなすほど熟練してないんでサンプル提示して頂いて助かります。
313 :
305 :2010/03/12(金) 23:02:56 ID:C7VruSRG0
>>311 仕事してるフリして教えて頂いた方法で試してみた所
希望通りの動作を実現できました。
ありがとうございました。
>>314 Features:
* View local/global variables.
# Watch user-specified variables.
# Hover over a variable to view its contents.
それ使ったことないからしらんけど、機能としてはあるみたいよ?
と思ったが、
>>315 はNotepad++用のプラグインか。XDebugClientはこっちか
Features:
Inspect variables - select a variable name, right-click, Inspect.
>>316 変数一覧がないだけでしたか
しつれいしました
XDebugClientは便利でたまに使うんだが、 デバッグしたいシーンに限ってフックだったりして速度面で問題があって使えないという罠。
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
ゆとり文応マンセーです
普通の配列ならLoop, %obj._MaxIndex()の方がスマートなのかな しかし便利だなあ
前のレスで autohotkey_l の最新版を
いれないほうがいいってアドバイスがあった気がするけど
>>319 は大丈夫?
>>160 の
>非常駐系でSendすると、常駐してる方が落ちることがある
これが直っているかなと思ったのです
>>319 の更新リストをみても
それっぽいことが書いてありませんので
1. 古い実行ファイルをバックアップして、新しいのを試す 2. 更新項目が必要なければアップデートしない どちらかじゃない?
コンソールで動く実行ファイルの実行結果を、受け取る方法について質問です。
はやらせるページにある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オプションをつけた出力を取得するには、どのように対処したらいいでしょうか。
CreatePipeに渡すバッファが足りてないみたい。出力結果が途中までしかバッファに格納出来ていないから、 tasklistはバッファに空きが出来るのを待ってるんだけど、こっちもPWaitExitで延々待ってるもんだから、何時までたっても終わらんw とりあえずtasklistが終わるのを待ちたいならstdio.ahk PRun()のBufSizeを増やせばおk
>>326 関数内のバッファ8192を81920にしたところ、こちらでもうまくいきました。
どうもありがとうございます。
ちなみにこのバッファ数値は、メモリが潤沢にある場合、
1000000とかにしてしまっても問題ないでしょうか。
各コマンドが、バッファをどれくらい必要としてるのかがわからないので、
原因不明で止まって困るよりも、メモリを少々過剰に消費させたうえで
確実に動作させたいです。
確実性を重視するならばその方法かな バッファサイズはデフォルトにしておいて、PWaitExit(pi, 300)とかでもいいと思うけどね
一応スクリプト例も書いておきます。 pi := PRun("tasklist /v") r= Loop { if r <> break PWaitExit(pi, 50) r := PRead(pi) } MsgBox, %r% PClosehandle(pi) コマンドの結果が確実に得られる事が前提ですが。
了解です。実際にいろいろ走らせて様子を見ながら調整してみます。 ありがとうございました。
>>329 おーなるほど、こう使うのですね。
こちらの環境では、ループを3回まわって、tasklist/vの内容を取得して
ループを抜けました。
332 :
326 :2010/03/16(火) 02:11:00 ID:WdmmxGaL0
あぁ、これ(
>>329 )じゃpingとかだめじゃん。
Loop
{
if PWaitExit(pi, 50) <> 0x103 ;コマンドが終了したらループから抜け
break
r .= PRead(pi)
}
訂正します。ごめんしてね
333 :
160 :2010/03/16(火) 03:51:11 ID:5owUwdfz0
>>321-322 治ってるみたい。少なくともウチの環境では落ちなくなった。
たぶん↓の修正かと。
> Fixed: Potential crash caused by VK_PACKET check added in L48.
スクリプトごとにAutoHotKey.exeが起動するしメモリ使用量も気になって 複数のスクリプトをIncludeでまとめて実行してるんだけれど皆さんどうしてますか
俺もIncludeで一つにまとめてる
俺も積極的に合成してる。キーフック以外にsettimerで定期巡回系のものをいれて、 例えばアプリの特定のボタンの上にマウスカーソルがあった場合にtips表示させてる。 ヘルプ代わりになって便利になった。表示させる内容を外部ファイルから取り込んで 動的に表示内容を変えたりと、だんだん動作が込み合ってきた。 そのしわ寄せで、すぐ反応してもらいたいキーフックルーチンに対する反応が遅くなってきた。 その他、たとえば1分ごとにルータのping反応を調べたり、ファイルサーバにある特定の ファイルの存在有無を調べるなど、たまたま操作中にそれが当たるとほかの処理が詰まる。 かといって、全部を分けて起動となると管理が面倒で、とりあえずそのまま使ってる。 けど、なんとかしたい。 部屋の片付けがウマい人は、スクリプトの整理もうまいんだろうね。 小物スクリプトに対するタスクマネージャ的な関数があればいいのかも。
何だかんだで1万行くらいになってた。 ジョイスティック用に20msのタイマ回してたり、#If で結構複雑な関数使ってたりするけど、 ウェイトのかかるものはなるべく避けて外部スクリプトにしているせいか、重いと思ったことはない。 スクリプトは機能毎に分割しているつもりだけど、依存関係がゴチャゴチャで大変。
include するときに if で読み込むかどうかを選択できれば楽になるのにね なんとかならないものか
>>335-337 まとめてるの自分くらいかと思ってた
ただ初期化とか狩猟処理がややこしくなるんだよね
ありがとう
>>338 たしかに#If〜#Else〜#EndIf的なものはほしい
NILScriptにはプラグイン機構が用意されているらしいから管理しやすくなるかな
ぶっちゃけ、INIの行数とスクリプトの行数同じくらいになるとだろうし、 ライブラリだかの機能を覚えるよりスクリプト書いた方が結局は楽だと思う。
>>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 では、存在しない変数か無効な変数が要求されると、エラーコードのかわりに空のプロパティを出力する
>>346 thx パクらせて貰った。
使わないモノはふいんき(ry)が分からないのでどう訳していいか困るな
ちょっと聞きたいんだけど、IMEとgoogle日本語変換を切り替えるようなスクリプトって ありますかね?IMEの状態をON/OFFすることまではできたんだけど、そこからがなんとも。 だれかやってる人いたら教えてください!
Ctlr+Shiftで切り替えられたと思うけど
349>> 即レス感謝。早すぎびびったw うーむ、やっぱそれしかないんですかね…。 もっと詳しく書かなかった自分が悪いのですが、 無変換でIMEON、変換でIMEOFF、みたいに 自由なキー1でIMEを使えるようにする、自由なキー2でgoogle日本語変換を使えるようにする、 といった、ちとわがままなことをしたいのです。 どうにも最初から用意されてるキーシーケンスの指定とかCtlr+Shiftとか ある程度しかカスタマイズできないってのがいやなのです。 あとはテキストサービスと入力言語のウィンドウを呼び出したりも試してみたんですがどうにも うまくいっていないようでしょんぼりしてるところです。
「詳細なキー設定タブ」の、「キーシーケンスの変更」でホットキーをそれぞれ割り当てるのはだめなのか?
どうでもいいけど MS-IME な 省略されるとどのIMEのことだかわかんないんだぜ
>>351 ごもっともなのですが…。というかやっぱそれしかないですかね…。
IME.ahkとか使うと本当に好きなキーでIMEONOFFを切り替えられたので、
もしだれかそのキーシーケンスの変更以外で切り替えができてる人がいたらな〜
と思ったのです。自分もだいぶAHKを愛用してて、
そのキーシーケンスではなんかそのうちキーがかぶってしまいそうで。
(そもそもそのキーシーケンスの変更がもっとカスタマイズできれば文句などなかったのですがOTL)
>>353 いや何言ってるの。「キーシーケンスの変更」でたとえばCtrl+Shift+0にMS IMEとして
ahkの方で、無変換キーとかにバインドさせればいいだけでしょ?こんな感じで
vk1Dsc07B::^+0
システムトレイ(タスクトレイ)に表示されているアイコンにカーソルが乗ってるかどうかを settimerの定期巡回で監視して、カーソルが乗ってるアイコンのプロセス名を 割り出す方法はありますでしょうか。 タスクバー自体は下記のifで認識できました。 #IfWinActive ahk_class Shell_TrayWnd 「タスクトレイアイコン操作 by流行らせるページ管理人」の関数が 用途に近かったのですが、出ているアイコンのアプリに対してクリック等の指示を行うコマンドは あるものの、カーソル下部のアイコンが何のプロセスなのかを判別する機能はないようでした。
↓と「タスクトレイアイコン操作 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 : }
>>356 おかげさまで動きました。
返却された番号をTray_GetText(idx)に渡したところ、
きちんとテキストも取得できました。
これができなかったら、ローテクでimagesearchでアイコンを識別させるしか
方法を思いつきませんでしたが、希望通りのスクリプトを作れそうです。
どうもありがとうございます。
おしえてください。ファンクションキーのダブルクリックのスクリプトで 特定の作業をさせたいのですが、それが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
>>358 普通に動くよ。他の部分に問題があるかも
ちなみに、以下がメジャーな方法。
F8::
if(A_PriorHotKey == A_ThisHotKey && A_TimeSincePriorHotkey < 400){
tooltip, double tap
sleep, 350
tooltip,
}
return
>>359 これ物理的にキーを押した場合のみ反応するように出来ませんか?
他のマウ筋のようなキーを発行するソフトにも反応して困ってるんですが
一から十まで人におんぶにだっこかよ
複数のIMEを切り替えるために、Alt+Shiftを置き換えたいんので下みたいに書いたんだけど、うまくいかない。 修飾キーだけを送ることはできないのかな?? a:: send !{shift}
>>359 ありがとうございました。非常にたすかりました。
貴殿の示してくれたスクリプトだとF8以降もふつうに動くことが出来ました。
なにが悪かったんだろう。ま、わたしには分からないが。
ありがとうございました。保存しときます。
>>362 a::
Send, {Alt Down}{Shift Down}
KeyWait, a
Send, {Alt Up}{Shift Up}
Return
>>363 >>358 のコードをそのまま使ってみたら、ちゃんと動いたぞ。
コードとしては、間違ってないと思う。
周辺機器の付属アプリか、日本語入力でF8の機能(半角強制変換機能など)が
悪さをしてるんじゃないの?
たぶん、GetKeyStateのPオプション付けてチェックするとか、 あとは#UseHook(もしくは$修飾子)使えば回避出来るんじゃないかなー
キーリピートに関してAHKでは制御できないのでしょうか? ひとつのキーに二つの動作を割り当てているのですが、 ついそのキーを一秒ほど押下しつづけてしまいます。 しばらく押下しつづけても一回しか動作が動かないようにはできませんか? (さすがに無理ですよね?) send, {F7} send, {F} return という二つのキーを押すだけのスクリプトなのですが。おしえてください。
キーリピートに相当する機能を自分で実装すればいい loopで。
よくまだ知りませんが、loopによって 繰り返し擬似的にキーリピートさせるってのはなんとなく わかるのですが、逆にキーリピートさせないこともできるのでしょうか?
A up:: Send, a
ヒントありがとうございます。んー、sendの項目みてますがまだわかりかねてます。 そういえばたしかスクリプトの最後になにか書き込むと、自動で繰り返すために上に戻らないようにすることが 初歩のやり方でできたような気がするのですが、んー気のせいか。 F1:: send, {F7} send, {F} return で、最後のF打ってもまた一行目から繰り返さないような。
>>371 レスありがとうございます。これ非常に惜しいです。
キーリピート発生しないので非常にイイのですが、
いかんせんキーを離したときに、動きが発生するんですよね?
これの逆があれば、ほんとに有り難かったのですが、
F1 Down:: send, {F7}
これじゃぁ登録出来ないみたいですね。んー、惜しい。
とりあえず、自分が望む動作はできるようになりました。過去ログをみて、 keyWait,を入れることでキーが離されるまで待機するようにしました。 ちょっと変則かもしれないですが、いまのところは満足してます。 ありがとうございました。
ピアノの鍵盤みたいな動作ほしい。 「Aキーを離して押したらアクション」 「Bキーを離して押したらアクション」 は KeyWait,A KeyWait,B をそれぞれ入れればいいが、 A押しながら(Aは離さないで)、Bキーを離して押したらBアクション ってのができん。 ピアノは1回押したら1回しかならない(キーリピートはしない) かつ離して押したら何を押されてようが、独立してそのキーでアクション発生する。 ってのができん。2つのキーを両方同時押しした場合、どっちか離して押してもアクションが発生しない 口で言うのややこしいが、要するにピアノの動作がしたい。
>A押しながら(Aは離さないで)、Bキーを離して押したらBアクション Bキーはいつ押すの? なんとなくやりたいことはわかるが、説明が下手すぎて理解できない
thredかなー。 同時押ししてその後無反応になる件だが、 最後に押したキーで滞留してしまってるらしい。キーリピートしないのは必須だが、 他のキー押しても反応してほしいんだよな。 「Bキーを離して押したらアクション 行で KeyWait,B いれてると、Aキーの離す・押すは関係ないと無視されるし・・・ここで止まってる
それぞれキーリピートが発生しないようにKeyWait,A KeyWait,Bを入れる Aキー、Bキーを順に押したままにする Bキー押したままでAキーを離して押す<<ここで無反応に Bキー離すとAキーの動作を認識し出す。 Bキーの行で止まっちまう。KeyWait,Bの行で止まってるらしいな。 if else使っても解決できんかった。どうすりゃいいのかな。
getkeystateをsettimerで回せばできるよ。 50msecくらいで回せば十分検地できると思う。 修飾キーなどの細かい制御は、俺はこれでやってる
所謂ワンショットモディファイアだな。基本的には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 }
なんか WinActivate よりも DllCall("SetForegroundWindow"...) IfWinActivate よりも If( hwnd == DllCall("GetForegroundWindow"...) ) の方が反応が早い気がするんだけどそんなもんなのかな
>>381 反応が早いって事は
処理時間に差があるのかな
最近AHK_Lに乗り換えました。 xyzzyで排他処理を共有ロックにしてスクリプトを書いているのですが、 xyzzyで開かれているスクリプトを実行すると Script file "(スクリプトファイル名).ahk" cannot be opened. と出て実行されません。 無印AHKの時には問題なく実行できていたのですが、この挙動はAHK_Lの仕様なんでしょうか。
>>382 ホイールでマウスカーソル下のウィンドウをアクティブにするスクリプト使ってるんだけど
IfWinNotActive, ahk_id %hwnd%
WinActivate, ahk_id %hwnd%
Send,ほいーる↑↓
ではアクティブになってから一瞬ウェイトおいてスクロールするけど
If(hwnd != DllCall("GetForegroundWindow", "Uint"))
DllCall("SetForegroundWindow" , "UInt", hwnd, "Int")
Send,ほいーる↑↓
だとアクティブ化と同時にスクロールしてくれる
環境によるのかな
> WinActivate > : > Remarks > 60ミリ秒の間に6通りの方法でアクティブ化を試みる。
>>387 SetWinDelay, 0してみたらラグがなくなった
これが原因だったのか・・
なんかほんとごめんありがとう
AutoHotkeyを流行らせるページが 前よりも小さくなっているような気がする
なんか流行らせるページの管理人、横柄じゃないか? 今まで日本語資料として大変役立ったから感謝はしているが とてもじゃないがNILScriptを試してみようという気さえ起きない
何を今更・・・ 掲示板とか見てたらあーいう感じだってのはよく分かるでしょ
何かに優れた人や何かを先導する人に変な人が多いのは仕方ない
馬鹿が寄ってこないようにするためだろう。 どうやら上手く行っているようだな。
そういやもうすぐ4月だな 予告通りエイプリルネタで収束するのか、まじで終息してしまうのか 流行らせるページの今後については気になるところだ
;最大化/元のサイズに戻す(トグル) #Down:: WinGetPos, ,, aeroWidth,, A ; get window info if aeroWidth >= %A_ScreenWidth% WinRestore, A else WinMaximize, A return AHKでAeroSnapはどっかの外人さんがやっていたので WindowsXPでAeroSnapの最大化⇔元サイズを1キーでやってみた この程度に2時間ぐらいかかってしまった・・・orz
っ WinGet, 〜, MinMax
>>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
>>397 サンクス
aeroWidth:1688 A_ScreenWidth:1680で困ってたんだ・・・
連続投稿失礼しますた
みんなどんなスクリプト書いて使ってるの? 入れてみたはいいけど発想が乏しくて作るまで至らない
>>400 1日2ちゃんをどれだけやってるかtraytipで表示させる
1日2ちゃんで、どの板に居ることが多いのか統計を取る
とか
そんなんやると心が荒んでいきそうだわ
>>401 おもしろそうだね
1番目のやつはjane や live2ch の起動を監視しつづければできそう
でも2番目のやつは見当がつかない
どうやるんだろう?
>>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.飽きる
糸冬
)
>>404 なるほど
その手があったか
勉強になります
大きめのはクリップボード履歴とタスクリストとタイマーだな
クリップボード履歴のスクリプトupお願いします
しょうがねーな。ほれ。メモリの許す限り蓄積するぞ。 #SingleInstance, Ignore #NoTrayIcon #Persistent ClipCount:=0 OnExit, OnClipboardChange Return OnClipboardChange: Tooltip, % ClipCount++ ClipData%ClipCount% := ClipboardAll Return
蓄積するだけで取り出しは書いてあげない408が素敵すぎる
クリップボードいじるのは専用のソフトに任せた方がいいような クリップボードチェーンが途切れて悲惨なことになりそう
履歴溜め込む方 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
; 選択文字列を検索したり開いたり
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%
いつかどこぞのソースをパクってきていろいろ弄ってみたんだけどもっと圧縮できませんか?
履歴使う方 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%とかいう変数使ってるから適当に変えてね
>>412 InStrとbetween見つけて自己レス
; URL
if pos := InStr(drive, "
ttp:// ") between 1 and 2
Run, % pos == 1 ? Clipboard : "h" . Clipboard
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 どうもありがとう
だいぶすっきりした
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
>>383 >>415 の share mode flag (共有モードのフラグ)を使えば
なんとかなるのでは?
違うんじゃね? 例えば、「hoge」とだけ書いたスクリプトを実行する。当然エラーダイアログ出る。 OK押さないでダイアログ出しっぱなしにして、エディタで何か変更して上書き保存しようとすると アクセスバイオレーションが起きる。 (メモ帳でも起きる) スクリプトの読み込み時はロック外して欲しいって事じゃないかと。
ユニコード版つかってるんでしょ。 Str → AStr に変えるとか。
>>ID:TtM97eig0 ありがとう。全部テキストに保存するんだな 俺のはリストbox使ったやつだけど、ところどころ参考にさせてもらいますね
>>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)
でいけました!
本当にありがとう
"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
よくわからんが、AHK_L使う方が楽なんじゃね? ViMode := "Pen" Return ~G::ViMode:="Pen" #If (ViMode="Pen") Ctrl::o ; 解除用のキーを全部列挙する 0:: 1:: 2:: ; (略) A:: B:: C:: ; (略) ViMode:="Normal" Return
426 :
424 :2010/03/30(火) 21:55:51 ID:1cxp4uU90
>>425 AHK_L使って理想通りの動作ができました!
ありがとうございます!
> ; 解除用のキーを全部列挙する > 0:: > 1:: > 2:: > ; (略) > A:: > B:: > C:: これって、スクリプトコードを汚さずに、スマートに記述する方法ってある? 0123456789を「0-9::」 みたいに定義できるといいんだけど、ないよね。 そのつどincludeするしかないのかな
>>427 SetList=qwertyuioasdfghjklzxcvbnm,.1234567890
Loop, Parse,SetList{
hotkey,~%A_LoopField%,Remove
}
Remove:
ViMode:="Normal"
Return
こんな感じでしょうか?
429 :
428 :2010/03/30(火) 22:57:04 ID:b0GiC3jH0
}の下にReturn入れるの忘れてた。
DllCall("SetWindowsHookEx",〜〜KEYBOARD_LL) してキーメッセージ監視するとか でもスマートじゃないよね
>>428 おぉすごい!ありがとう参考になりました。
>>430 LLフック使うのが確実だとは思うけど、フックを二重にかけるほどのことかというと…
AHK側でMouseLLなりKeyboardLLやってるんだから何とかならんのかなぁ
特に2ストロークキーとか、SandSあたりで苦労する。
LLフックの前処理ができる OnMessage() 相当のがあるといいんだけど。
NILScript使え
なんか、秀丸エディタ8.00にしたら IME_TOGGLE が効かなくなったんだけど どうしたらいいんだこれ
タブがトップウインドウじゃなくなってるよ
あ、なるほど。サンクス。 タブモードに互換性なんか出来てたのか。
------------------------------------------------------- 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側で勝手に解放したりしてるんですか?
興味のない人がスルーできるように、最初に何に使うスクリプトなのか最低限書けよ。
>>439 " UInt"ってUの前にスペースがあるべ
>>441 IME_Set(!IME_Get())でいいんじゃね?どっちでもいいけど。
>>442 ErrorLevel とか A_LastError 見る習慣つけようぜ。
MsgBox, アイコンの解放に失敗しました : %ErrorLevel% , %A_LastError%
つまんねーミスあるよねw まず自分の書いたコードを疑うことから始めないとダメだねw オレもこないだDllCall使ったとき思い通りに動作しなくて 何時間も悩んで眠くなって寝て起きたら、 あっさりカンマ(,)が入ってないだけだったことに気付づいた。 速攻エディタでカンマを強調表示するようにしたw
横レスだが
>>443 >IME_Set(!IME_Get())
これでトグルするのはいいね
えー・・・マジで閉鎖してしまうとは・・・リファレンス用のサイト作ったほうがいいかな?
ジョークでしょ 多分明日から復活する
AHKを勧めてその気にさせてからのポイ。 きっと、これは何かの陰謀や復習に違いない。 今回のこれは、NILScriptを勧めてその気にさせて ポイする為の序章に過ぎないのかもしれない。
毎年恒例って感じだね
管理人氏が本気なのかジョークなのかわからないので、
コマンド参照用としてミラーサイトを作りました。
http://ahk.xrea.jp/ 今回の閉鎖の動きが、はやらせるページ管理人氏のジョークだったら恥ずかしいですが、
仮にジョークだったら、AHK_L の差分を解説する用途のwikiにでもリニューアルします
ジョークって書いてあるじゃん 気が早いんじゃないの? 「AutoHotkeyを流行らせる気なんて最初から無かったページ」に変わってるw
>「AutoHotkeyを流行らせる気なんて最初から無かったページ」に変わってるw これはちょっと前からそうなってた 多分、ジョークはAHKにようこそ!の部分だけだと思うぞ
掲示板のレスまでネタフリだったら笑うけど、それはないだろうしなぁ
去年はng.exeをネタと見せかけて本当に開発し続けていたから、 今年は「AHKを流行らせる協会」を本気で発足させる気だな
流行らせるページのエイプリルネタは毎年不発だったからなぁ 今年の前ふりは乗ってあげないとまじで閉鎖するよって脅しとみた ここまでやってスルーされたら流石に立つ瀬ないだろうしな
質問させてください。 ゲームパッドでマウスを動かすソースに、 「カーソルを動かせる数十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 ありがとうございます!
がんばってみます
例のサイトが完全に元に戻った
それでも日本語ライブラリと産物は残してくれたんだありがてえ AHKのコマンド形式のコーティングに違和感があったからNILに興味があるけど・・・MouseGesture.ahkが便利すぎて移行できないw
跡地になっとるな
NILScriptは今後主流になっていくであろうx64対応しそうにないのがなあ・・うーん AHKのトレイアイコンを左クリック、右クリック、中クリックした際の動作を設定することってできませんか? 左クリックは Menu, Tray, Add, Label_LeftClick Menu, Tray, Default, Label_LeftClick Menu, Tray, Click, 1 という少し強引な方法で実現できたのですが、これだと中クリックや右クリックは設定できないようで・・
64ビット版Windowsでもほとんどの32ビットプログラムは動作するんじゃないのか 非対応ってのは、試しもせずに文句だけ言っている低脳が寄ってこないようにするための建前だろ
スレ建ったんならそっちでやればいいのに
>>467 乙です
公式とLの説明を同一ページで見れるようになると便利になりますね
AutoHotkey_Lの訳を.chmにマージしようかと思ったけど
絶対リンク群の前にあえなく撃沈した
Googleのページの仕様はよくわからんのですが、ローカルで参照しやすいように
相対リンクで構築していただけると嬉しいかなとか言ってみるテスト
相対で書いてるけど、出力時には絶対になるみたい。 CSSも使えないし、いいこと無いけど、 やる気がなくなったらそのまま誰かに移管できるし、 広告だらけのWikiよりかはマシかと。
スクリプトをアップロードしてみたいんだけれどどこにうpすればいいのかな 流行らせるページのアップローダーなくなっちゃったし
>>469 サーバー側の問題なんですか。
作り直しは大変だし、流行らせるページはCSSだけ独自で
基本は公式の加工っぽかったから、そういう感じで過去の資産に
盛り足していくだけで済めば楽かなって思ってたんですが。
共有が楽にできて普通にページ作れる鯖があればいいのかな
尼にきてたら即ポチの勢いなのに!
おもいっきり誤爆した……
ローカルで見たいならダウンローダ使えばいい うpはGitHubのgist使え
サイトの構造ごと取得できるダウンローダ使えって事でしょ リンクの置換まで自動でしてくるよ
AHK_Lマルチスレッド対応しないかな そうすれば常駐系スクリプトをひとつに纏めるのが楽になるのに
スクリプトうpの流れまだー
スクリプトが見たけりゃ、NILScriptのBase.ngでも見てろ
482 :
名無しさん@お腹いっぱい。 :2010/04/07(水) 14:47:49 ID:NQWSj7oWP
AHKでTwitterAPIを使用できますか? もしかしてそれこそNILScriptですか
ダメ文字の置換について教えて下さい。 "チ"がダメ文字で、以下を実行すると文字化けします。 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% スクリプトに直接ダメ文字を書いたらいけないだけで、 それが含まれるテキストファイルを扱う事は何ら問題のないことなのでしょうか? それとも、この例がたまたま成功してるだけですか?
>>483 前者。
AutoHotkey_L使うといいよ。
AutoHotKeyのスクリプトが、AutoHotKey_Lでも使えるのは知ってるけど、 "いかなるスクリプトでも"、互換性が確保されるの?
>>485 ユーザーレベルでは、その質問に断言できる人はいないんじゃないかなぁ
とりあえず自分ところでは全てのスクリプトが動いてるけど
とりあえず試しただけじゃ
>>485 の答えは出ないと思う。
>>488 まさか本気で「いかなるスクリプトでも」使えるかどうか知りたいわけじゃないだろ。
「
>>485 が使ってるスクリプトは全部」ってことだと思うんだけど。
Autohotkey_Deathをつくるか…
492 :
483 :2010/04/08(木) 18:59:59 ID:hC5J4Txp0
>>491 派生版作るならいっそ言語仕様から丸ごと作り直してくれ
つnil script
ttp://www1.axfc.net/uploader/File/so/41806 TTBaseのWinSnap.dllがWin7x64でうまく動かなかったのでAHKに移植してみたのですが
SetWinEventHookでEVENT_SYSTEM_MOVESIZESTART〜EVENT_SYSTEM_MOVESIZEENDを指定しても
ウィンドウリサイズ中や移動中にスナップされません
こういうのはSetWindowsHookExでないとだめなのでしょうか
名前の通り開始と終了しか捕らえないよ。 おれは似たようなの組んでるけど、↓みたいなので代用。 STARTで Flag:=True SetTimer, SubName -1 ENDで Flag:=False XXXで SetWinDelay,-1 While (Flag) { WinGetPos〜 ; 〜 何か 〜 } Return
>496 なるほど!タイマーがありましたね その方法でやってみます ありがとうございます
人によっては便利かもしれない。_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") }
num=151 Transform, outStr, Deref, りんごが`n%num%個`nあります MsgBox, %outStr% みたいなの?
まぁそんな感じ。書式文字列は 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
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.
>* 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を読み込むってこと?
そうみたい。だが… コマンドライン引数で /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\" %*"
A_EventInfoとかいう謎変数の詳しい情報はどこにありますか?
>>505 流行らせるページとかばかり見てた
そういえばヘルプあったんだ・・
ありがとう
NILScriptのHotstrokesがなかなか良さげだね。 モディファイアもShiftなどの名前で指定するから分かりやすい。
NILScriptは言語としての整合性に設計を振りすぎで、 本人が言うように、AutoHotKeyをなんとなく使ってるような人には合わないんじゃないかな 美しさのためなら面倒な記述になってもいいとは、プログラマ以外はまず思わないw 現状だとシンタックスシュガーもなくてjavascriptのままみたいだから、 それなら.NETやXULRunnerやwxWidgetsとかの既存環境向けに、 NILScriptみたいな入力補助ライブラリを作った方が、 スレッドやGUIや通信周りとかも比較にならないくらい充実してるし、 無料で高機能IDEもあるからいいんじゃね、とか AutoHotKeyは数文字でリマップできますとか、気軽に書ける部分が多いから 設計がツギハギで複雑なことをしようとして死にかけても、やっぱり離れにくい
自分しか使わないヤツぐらいくっちゃくちゃに書いてやりたいよねっ
貯金没収されたうえに、言葉の通じない国へ放り出されるようなもんだな。
プログラマのオナニーか
まあでも使ってるうちに別の綺麗な構文のスクリプトに移りたくなる気持ちはわからんでもないw 彼の場合それがなかったから自作してしまっただけであって
nilは64bit対応してくれないと 便利そうは便利そうだけど自分の環境で動かないもの覚えても仕方ないし
実行してエラーメッセージの一つでも報告してから言え
64bit 64bit 64bit 64bit 64bitってひたすら言ってるやつが1人いるけど、 実機で動かしてダメだったという報告が1件もない件
何人もいるのはそれだけ要望が多いってことでしょ keyboard_hook.ngとかエラーメッセージすらでないでnilトレイアイコンが消失する Win7の64bit買って自分で試してみたら?
トレイアイコンが消失するなら正しく起動して正しく終了してるんじゃないか
>エイリアス名が用意されているキーの一覧を表示した後、 >キーフックでキーを監視し、情報を表示します。 keyboard_hook.ngより 情報表示せずに勝手に終了されるとちょっと困る
まさかコマンドプロンプトで実行せずにメッセージが出ないとか言ってないよな? install.batは動いたのか?
まぁ、最初は用途がピンと来ないな。 VarSetCapacity(var, size) で変数に確保して DllCall で"Ptr", &var と渡すところが obj.SetCapaciry(fieldName, size) して "Ptr", obj._GetAdress(fieldName) なだけだけど GlobalAlloc でも同じ事ができるが手動でfreeしなきゃいけない、一方で、 フィールドにメモリ割り当てだと、オブジェクトの破棄時に解放してくれるから楽だな
すみません、質問です。 GUIで作ったウィンドウを移動させた時にその位置を記憶して、AHKを再起動した時に 同じ場所に表示させるにはどうすればいいのでしょうか? 位置情報を逐次ファイルに保存する、ってイメージはあるのですが ウィンドウを動かす度にアクションを起こさせるにはどうすればいいのかがわかりません…
#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
>>524 >位置情報を逐次ファイルに保存する、ってイメージはあるのですが
>ウィンドウを動かす度にアクションを起こさせるにはどうすればいいのかがわかりません…
525ですでに解法出てるみたいだけど
GUICloseで閉じる直前に位置情報保存じゃあかんの?
R:: PostMessage,0x111,32791,0,,A ;red return 上は ワードパッドがアクティブなときに 文字を赤くするボタンを押す 命令なんですが windows7 64bitでも動きますでしょうか?
ワードパッドの構造違うのでそのままでは動きません
ありがとうございます リソースハッカーとかそういうツールで 命令番号を調べるのは有効なんでしょうか?
一応動くみたいですね ありがとうございました
>>525 ありがとうございます! なるほどWM_EXITSIZEMOVEかー
>>526 そっか、それでもイケそうですね…
行単位ではなく、ピクセル単位や%によるスクロールって可能ですか? スクロールを Count := スクロール行数 Loop, %Count% { SendMessage,0x115,0,0,%FocusedControl%,A } こういう感じで実現させていますが、もっと滑らかにスクロールさせたいので。
Vista以降で且つソフトが無段階スクロール対応なら出来るんじゃないかな? ちなみにMacは標準で無段階スクロールらしい。
それだと wParam = 0 なんで SB_LINEUP だから▲クリックしたのと同じなんで荒いスクロールになる事が多い。 スクロールバーの▲をクリックしたらどれだけスクロールするかってのはモノによってまちまちなんで何とも言えないけど、 ぬるぬるスクロールさせるにはスクロールバーのサム(つまみ)のドラッグをエミュ(SB_THUMBPOSITION)するのがいいと思う。 IEとかFirefoxじゃ無理だけどね
参考になりました。どうもありがとう。 FirefoxのアドオンのGrab and Dragをすべてのソフトに対応できるような スクリプトを実現したくて頑張っているのですが、今のやり方だとスクロールが がたがたなのでいまいちなのです。これって需要ありますかね?
537 :
名無しさん@お腹いっぱい。 :2010/04/26(月) 18:44:34 ID:IhrBVXQB0
RegExMatch()の質問です 三文字とカンマから構成される不定長のデータから カンマで区切ったデータを個別に取得したいのですが はやらせるページにあった「正規表現」の再帰呼び出しの説明を読んでも よくわかりません こんなデータです↓ 5bc,mn9 h7j,c2e,xyz 再帰呼び出しを使ってこういうデータの取り出し方を教えてください
そんな単純なデータならLoop,PARSEで十分じゃないかな
539 :
532 :2010/04/26(月) 19:59:57 ID:WvtWhaZN0
アップしてみます。
↓から二つの.ahkファイルを落として同じディレクトリに置いてください。
http://alhena.jpn.org/temporary/ 使い方:
GrabAndDragAlt.ahkを起動した状態で
スクロールしたいウィンドウ上でマウスの中ボタンを押しながら左ボタンでドラッグしてください。うまくいけばスクロールします。
スタイラスのサイドスイッチに中ボタンを割り当てて使うことを想定しています。
感想頂ければ嬉しいです。
540 :
532 :2010/04/26(月) 20:12:32 ID:WvtWhaZN0
追記:
・まだ未完成です。気に入ってくれた方は改良してください。
・慣性スクロールは今のところ効果ありません。
・SendMessageで行スクロールを送っているだけなので効き目のないソフトがたくさんあります。
>>534 さんの言う方法でスクロールを実装すればいいのかも。
GetScrollInfoがnonexistent functionと言われてしまうのですが、原因がわかりません。 System32を調べましたが、user32.dllはちゃんとありました。
nonexistent function と怒られている時点でAHKの文法エラーじゃないの
>>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 どうしたら良いんでしょうか?
#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を利用すればできそうなので、これから考えてみます。
^%A:: IfWinExist, MyApp { WinActivate } else { Run,MyApp.lnk } これって一行にまとめられないの? ^%A:: IfWinExist,"MyApp"{WinActivate}else {Run,MyApp.lnk} とかやってもダメっぽい… 関数化するしかないのかな
下のほうは、可読性の観点から、全く見にくいのだけど、そんなに圧縮してなにがしたいの? せめて大括弧をつけないで書くのが限界だろう
ControlSendで{Asc xxxxx}は使えないのかな? Sendだと普通に文字が入力されるんだけどControlSendだとダメだった
結局こうなった Launch(command, caption = "dummmmmmy") ; アプリケーションを起動する ; command: 起動するアプリケーションを指定する ; caption: 見出しを指定し、マッチするウィンドウがあったら新たに起動せずアクティブにする。指定しなかった場合は無条件に起動される。 ; 例: Launch("calc.exe", "電卓") { IfWinExist,%caption% { WinActivate } else { Run,%command% } } +F11:: Launch("notepad.exe", "無題 - メモ帳")+Launch("calc.exe") >そんなに圧縮してなにがしたいの? ランチャの定義ファイルとしてなるべく簡潔に書きたかったんだよね ("")が邪魔くさいけどそこそこ満足
どうしても1行にしたいなら、コマンドを関数化して三項演算子でやりゃいいけど意味がない
常駐スクリプトのホットキー処理を関数化すると無駄なグローバル変数が減って美しい
おしえてください。現在のアクティブのアプリ毎に 実行するスクリプトの一覧をguiのランチャのように配置して それをそれぞれ別ものとして分けたいのですが、 最初に立ち上げたほうの設定にあるguiのメニューが、 後にたちあげたほうのランチャにあるguiのメニューにさっき のランチャのサブメニュー項目が追加されてしまいます。 (例:最初にランチャをたちあげる。→ Gui, Submitでguiを消す →違うアクティブウインドウ限定で設定してるguiランチャをたちあげる →最初にたちあげたランチャのサブメニュー項目が引き続きのこっていて メニュー項目がいっぱいになる) どうやれば、サブメニュー項目が一緒にならないようにできますか? おしえてください
555 :
554 :2010/05/07(金) 01:53:55 ID:YqDfIqgLP
自己解決しました。 menuのあとのMenuNameを変えるのを 知りませんでした。
guiのtext で複数行を書いてみたら行間が詰まって読みにくいことがわかりました。 cssの line-height のように行間を広げたいのですが autohotkeyでそんなコマンドやオプションはありますか
基本的にはStaticコントロールはラベル表示用のもので、
文章を綺麗に表示する機能は無い。
AHKでサポートされるコンポーネントだけでやるなら、
文を行末でぶった切って複数のstaticに分けて
コントロールの配置でどうにかせにゃならん
>>10 にあるリンクから標準以外のコンポーネントの
リッチテキストやIEコンポを使えばそれなりの見栄えに
する事はできるけど、かなり面倒。
RegExMatchの正規表現をつかって、 {の前の文字列と{}の間の文字列を取り出したいのに、なぜかうまくできません。 正規表現の書き方が間違っているなら教えて下さい。 ↓ test := "test{testval1`r`n`ttestval2}`r`n" RegExMatch(test, "(.+)\{(.+?)\}", "$") msgbox,% $1 ", " $2 return
test := "test{testval1`r`n`ttestval2}`r`n" RegExMatch(test, "^(.+)\{(.+)(`r`n|)(.+)\}", $) msgbox, % $1 ", " $2 $4
>>559 ありがとうございます!
改行がネックだったのですね
autohotkeyの正規表現の仕様をきちんと読んでおくべきでした
オプション U, s を使うといいんじゃないの
AutoHotkeyと窓使いの憂鬱を使っていてCtrlが押しっぱなし現象が起きるんですが
>>9 の
>>782 スクリプトの導入仕方教えてください。
ctrl_alert.ahkというファイルを作り、
>>9 のスクリプトをコピペ保存して
AutoHotkey.iniの先頭に
#include ctrl_alert.ahk
と書いてAutoHotKey再起動でいいのかな。
563 :
562 :2010/05/10(月) 00:06:12 ID:BGU/cq2PP
>>562 の方法だとAutoHotKey.iniで設定したホットキーが全然効かなくなってしまいました・・・
#include ctrl_alert.ahk をコメントアウトして一旦回避してるんですが、
どうするのが本来の組み込み方なんでしょうか?
そのAHKファイルはどこに置いてるの?
565 :
562 :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のその他の記述動作しないという状況のようです。
>>565 auto-execute sectionって仕様
includeせず単独で起動するのが手っ取り早い
バリバリ使いこなしているが、autohotkey.iniというファイル名では 一度も作ったことがない。なんか、説明書見てもわかりにくいよね。 全部.ahkでやるのがシンプルでいいよ。 単純にahkファイルをd&dすれば動くから。 iniファイルは別途作るべし。
>>565 その方法でやるならば、ctrl_alert.ahkに書いてある
returnで実行が止まっちゃうので
最初のreturnをgoto, end_of_ctrl_alert_ahkとか適当に書き換えて、
スクリプトの最後にend_of_ctrl_alert_ahk:を追加したら動くんじゃないかなー
ラベル名は被らなければ何でもいいけど。
一応補足するけど、 gotoは多用するとワケワカメなプログラムになりやすいので、通常は避ける。 だけど、こういう使い方の場合は分かりにくくなることはまずないのでいいと思う。 スクリプト自体に殆ど影響しないしね。
570 :
562 :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しただけで動くのを目指したので混乱したようです。
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 のような感じでクリアしてやらんといけない これってどういう事?教えてエロイ人!
<< 演算子を使った関数外の変数が 関数内からなぜか使えた気がする
AHK_L を Win 7 x64 で動かしています。 AHK でメモリーリークの原因を追求するにはどうしたら良いでしょうか? 自作の 130 行くらいのスクリプト (ToDo リスト管理用) が、 少なくとも MsgBox のたびにメモリー消費量が増えてしまうようです。
576 :
574 :2010/05/11(火) 00:19:58 ID:RQ4U7xzI0
>>575 レスありがとうございます。やっぱそうですか > 地道
紹介のフォーラムで新たに知ったのは、Loop もリークを起こす可能性があるということでした。
とりあえずコメントアウトを試してみます。
Loop コマンド自体がメモリリークを起こすんじゃなくて、 タイマーやループのように複数回実行するところで解放されない変数(メモリ)が生じる可能性があって それが実質メモリリーク状態になるってことでしょ AHKの変数だけならListVarsで確認はできるけど、DllCall で怖いのが確保したメモリは AHKの管理外なんで確認する手段が無いって事かな(COMオブジェクト含む) ToDoリストだと多分配列使ってるんだろうけど、変数の管理がちゃんと出来ているかを見直すのが まず一番にすべき事じゃないのかね
~RButton & LButton::MsgBox AHKテスト成功 ↑はできるのに↓はできんね。どうして? ~RButton & LButton:: send,^C あるいは ~RButton & LButton:: Send,{Ctrl down}{Insert}{Ctrl up}
>>578 まずはその動作を物理デバイスで手動でやってみて、PCが反応するか試してみたら?
Send, ^C と Send, ^c とは違うよ
>>579 ctrl + c でコピーできるんですが、send,^cでは無理ですね。
>>580 初耳でした。しかし、Send, ^c でも
{Ctrl down}{Insert}{Ctrl up}
でもできません。左右クリックに割り当て無理っぽいですね。
MsgBoxはきちっと通るのに
>>582 うちの環境ではいずれも動くよ。
但し、MouseGesture.ahkを実行していると効かないけど。
競合しているかもしれないのでAutohotkeyスクリプト全てを終了し、
それだけ記述したスクリプトのみ実行して試しては?
※場合によっては他のカスタマイズ系ソフト(IntellipointやSetpoint含む)を全て終了しないとダメかも。
584 :
562 :2010/05/12(水) 01:09:26 ID:JAu96k7wP
>>571-573 おお、つっこみサンクス。
SetTimerは関数内のラベル指定でいけるんですね。
>>572 関数を一度も実行しないで関数外からSettimerで関数内ラベルに飛んだ場合にも
ちゃんとローカル変数になるみたいだな。
そしてstaticな変数は既に確保されて初期化されているみたい
あと、%%で展開された変数がグローバル変数になってるみたいで
staticで宣言した変数などとは別物になってるっぽい
ワケワカメだけど、こういう抜け道は上手く利用すれば便利かもしれないね
>>585 >あと、%%で展開された変数がグローバル変数になってるみたいで
>staticで宣言した変数などとは別物になってるっぽい
よく気づいたね
これは思っても居なかった
587 :
574 :2010/05/12(水) 10:11:50 ID:bVCo4tkH0
メモリーリークの件です。 少なくとも当方の環境では、MsgBox が問題のようでした。 ---- Loop, 1000 Msgbox ---- このスクリプトで OK を押すたびに、プライベート領域が上昇していくようです。
AutoHotKey_L Rev.51で試してみた マジだどういうことだこれw
ちょっとフォーラムでも聞いてみます
これ、今現在ユーザー側で出来る対策ってあるの? 常駐するスクリプトだと定期的に再起動?
そんなはっきりしたバグならすぐに直るでしょ 2GB積んでるようなマシンならしばらく放置しといたら あるいはtraytipで代用するとか
XP SP3 32bit だといくらループしてもメモリ使用量変わらんなぁ
本家の方なら増えないな7x86でもXPx86でも
あるアプリのウィンドウに対して、その実行ファイルのフルパスを取得する方法って 対象が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 }
プロセスのハンドル精度が違うから無理なんじゃないのかね
行き詰ったので質問させてください。
過去ログとなまず日記を参考にしてゲームパッドの「ボタン13」を2回押しした際に「t」を。
「ボタン15」を2回押しした際に「b」を返すスクリプトを作ってみました。
これをPCゲームで利用しようと思いAHKを起動した状態でプレイしてみたのですが、
いざゲーム上でボタンを2回押ししてみても反応がありません。
メモ帳では正常に動作。
今までJoyAdapter(
http://www.vector.co.jp/soft/win95/util/se069688.html )を使用していたため
ゲーム本体に外部ツールを無効化する機能がついている可能性は低そうです。
改行多すぎだそうなので分割。 こちらが作成したスクリプトです。 ~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
1 そのJoyadapterとやらのツールに、そもそもキーがちゃんと伝達されているかテスト 2 WinActivateをいれて、送信する場所を決め打ち 3 AHKを、もっと単純にしてみる。例 loopでまわして強制的に一定間隔でsendしてテストするとか 4 Joyadapterを、AHK以外の別のツールで制御してみて、ゲームに伝達されるかテスト ってな感じか
JoyAdapterの代わりにAHKを使うってことだろ
ああ、ほんとだ。 じゃあ動かない原因は、AHKがキーを送信する階層がユーザプロセスに近いせいかもね
SendMode だと勝手に予想
>>598-602 説明不足で余計な誤解を招いてしまったようで申し訳ない。
結果から報告しますと、「Send」を「SendEvent」に置き換え、
AHKを管理者権限で実行したところ正常に動作しました。
レスどうもありがとうございました。
特に有力な情報をくれた
>>598 、
>>601 の両名には深い感謝をば。
ControlClick って、使用ができる用途・ケースがごく限られたコマンドなのでしょうか? iTunesの再生ボタンをウインドウが前面になくてもクリックしたいと格闘したんだけど、成功しなかった。 ググってみたけど、controlsendのスクリプトはあるんだけど、controlclickのスクリプトって あんまないよね
これじゃだめなの? ControlClick,Button6,ahk_class iTunes
>>605 ありがとうございました。
あれ・・・できた、なんでだろ
ControlClick,Button10,ahk_class iTunes
でクリックできた。前面にきちゃうけど。
前やったときはぜんぜんクリックしてくれないので
Button10, ahk_id %itunes%, , LEFT, 1, NA (めちゃくちゃ)
っていうオプションをいろいろつけて苦戦してたんだが。
>>605 あれ、やっぱ、
>>605 じゃ出来ないときがあるね。どうしてだろう。
引数を足したら安定するんだろうか。
趣旨とちがうけど
DetectHiddenWindows , On
ControlSend , ahk_parent, {space}, iTunes ahk_class iTunes
DetectHiddenWindows , Off
こっちのほうが安定してるね。
controlclick期待してんだが。
CabinetWClassとExploreWClassにWinClose割り当てて窓を閉じるジェスチャにしたんですが アプリの終了も同じジェスチャで指示出来るような方法はありますでしょうか? 個別に指定していくとキリが無いのでアプリ全般といった指定がしたいんですが
ジェスチャをどうやって実現しているかによるな
Ctrl+w もしくは Alt+F4 送れば大抵のアプリは閉じられるんじゃない?
TVTestのSDKを使って、情報の読込みや設定の変更って出来ますか?
AHKは ・ウィンドウを特定して、任意の座標をクリックしたりキーを送ったりできる ・ウィンドウを特定して、PostMessage/SendMessageできる ・任意のDLL内の関数をコールできる(構造体の利用可) で判断してくれ
>>609 >>610 レスどうもです
Alt+F4…なんでこんな簡単な事気づかなかったんだw
助かりました、どうもです
ジェスチャで大概のブラウザ見たいに←で戻るとか→で進むとか単純な操作は登録出来ますか? Cabinetとエクスプローラあたりでその操作にしたいんですが…
Alt+Left/Right か Browser_Back /Forward 送ればそれっぽくなるんじゃない?
>>615 レスどうもです
試して見た所概ね良好みたいで今のところ競合とかも無さげです
このソフトは使う前に基本コマンド覚えた方が早く慣れそうだと気づきました
助かりました、ありがとうございます
文字列中から、ある一文字の出現回数を調べたいです loop,parse 以外でこれを調べる方法はありますか?
StringSplitにある一文字を指定して分割された要素数を求めればいいんじゃね?
書き忘れたけど、「分割された要素数 - 1 = 出現回数」な。
あ、しったかしてゴメン。 ある一文字が文字列中に連続して出てくるとダメかもしんない。
splitだと1文字の区切り文字しか認識できないので、 stringreplaceを使うとよい searchword=あいうえお stringreplace,dummy,string,%searchword%,,ALL UseErrorlevel msgbox,個数=%errorlevel% これでOK
質問者のレスを再度見たら、1文字でいいのか。
じゃあ
>>618 の方法で十分だな
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 }
test=aaa inputbox,hoge msgbox,%hoge% inputboxで%test%と打ち込んだ場合 msgboxでaaaと表示させるにはどうすればよいでしょうか?
test=aaa inputbox,hoge msgbox,% %hoge% これでtestって打てばaaaだけどね・・・ %test%って打ちたいとなるとどうだろ?
inputboxを利用してこのソフトでcraftlaunchみたいな コマンド入力型のランチャーって作れるのでしょうか? すでにスクリプトが作られているのでしょうか? 欲しい
>>1 のAutoHotkeyを流行らせるページ(AutoHotkeyを流行らせるページ跡地)
の「その他スクリプト」の中の「FileLaunch」がそれっぽいものかな
32bitのWin7ですが、物理メモリが足りず、ページファイルを使いまくってるときに AHKで警告メッセージを出したいです。 タスクマネージャのパフォーマンスタブに表示されている 「メモリ」の値を取得する方法があればベストなのですが、 やり方がわかりません。 はやらせるページさんの GetMemoryState() では、 XPでは問題なく動いていましたがWin7でメモリを4GB積んでいると 取得できる値がおかしくなる気がします。 認識できる上限の値をかさ上げするかしないかの仕様が変更された せいでしょうか。 それとも、たんにやりたいことを実現するには、もっと簡単な方法が あったら、ヒントいただけると幸いです。
タスクマネージャ起動しっぱなしでいいんなら、ControlGetTextで取ればいいんじゃないの
ドロップされたファイルのリストを表示する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行目を有効にすると正しく表示されるのですが、 この原因はどこにあるのでしょうか?訂正すべき点をご指摘下さい。
>>632 改行コードをCR+LFにしてみるとか。
Sort, DropFilesList,D`r`n
>>633 StringReplace, DropFilesList, DropFilesList, `n, `r`n, All
を挿入で解決しました。ありがとうございました
ゴミ箱の中にあるファイル名を取得したりできませんか?
MouseGesture.ahkからキーを送ることでアプリケーションを操作してるんだけれど
ポップアップメニューが開いたままだとCtrl+Wを送信するばあいの場合「....(W)」ってメニューが実行されちゃうので
できればポップアップメニューが開いている場合のみ先にSend,{ESC}でとじてからSend,^wとかしたいんだけど
AHKからポップアップメニューが表示されているかどうかの確認は可能?
ttp://sakura.qp.land.to/?Customize%2F%C5%EA%B9%C6%2F49 あとサクラエディタ用の強調キーワード設定ファイルが古かったから最近の追加してみた
>>636 IfWinExist, ahk_class #32768
{
Send, {esc}
Send, ^w
}
あ、ちがう、こうだった IfWinExist, ahk_class #32768 Send, {esc} Send, ^w
>>638 おおーばっちりです!本当にありがとう!
Gui, Add, Hotkey,vkeyでホットキーをGUIで設定してそのホットキーを サブルーチンラベルにするにはどうすればよいのでしょうか?
Hotkey, %KeyVar%, LabelName
できました!ありがとうございます。
SoundPlay,%file% でWAVファイルを再生すると、そのスクリプトを終了させるまで ファイルハンドルを掴んだままになってしまい、リネームや削除ができません。 マシンによって挙動が異なるような気がするのですが、みなさんのPCでは どうでしょうか。 なにか対策する方法はないでしょうかね。
SoundPlay,%file% SoundPlay,unko %file%はうんこによって開放されます。
それで開放されないって話じゃないの?
コピーして再生、ハードリンク張って再生
>>644 ありがとうございます。うんこを与えたところ解決できました。
テンキーの00キーにカンマを割り当てたくって、
見つけたのがこのスクリプト
http://www.autohotkey.com/docs/scripts/Numpad000.htm だけどこれって、000キー用で、00キー用じゃないんだよね。
で、なんとなくカンで、
else if Numpad0Count = 0
Numpad0Count = 2
を削ったら、ちゃんと動くようになった。
.....のはいいんだけど、普通の0キーをキーリピートさせると、時々カンマが出ちゃう...orz
00もリピートしないし(....ってそれはこのスクリプトではむりか)
キーリピートはどうやって解決したらいいんでがんしょ?
キーボードの仕様が分からないからはっきりとしたことは言えないが、 ストロークの発生間隔か、キーアップが送られてきていることを手がかりにすればいいと思われ。 NILScriptなら1〜2行くらいで書ける気がする。
>>636 ,638読んで思ったんだけどポップアップメニューのクラスってWindowSpyじゃ取得できないけどどうやって確認するの?
例えばFirefoxのポップアップはMozillaDropShadowWindowClassらしいんだけど
WindowSpyでカーソルをポップアップ上に持っていってもポップアップの下のFirefoxメインウインドウの情報が表示される
f1:: MouseGetPos,,, hwnd WinGetClass, class, ahk_id %hwnd% msgbox, %class% return
メモ帳かIEのウィンドウがアクティブになるまで待機 みたいなこと出来るコマンド、コードあれば教えてください。
WinWaitActive
>>651 なるほどその手があったか
ずっと不思議だったんだ
ありがとう
特殊な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がちゃんと上記のように表示されます。 なにか解決法はないでしょうか? 別の指定方法とかありませんでしょうか?
スキャンコードの指定のみだとエラーになってしまいます。。。
すいません、自己解決しました sc072::send A sc074::send B これだけでOKでしたw AHのKeyHistoryで調査したときに、 vkとscの値は出ても、その右に「not found」と表示されるキーは sc072::A みたいな記述法だとエラーになるので、ちゃんとsendを書かないとだめみたいです。 こんな簡単なことに気づくまでに1時間もかかってしまい...orz
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がアサインされていて
何故なのかかなり謎...
同時に使う特殊キーボードで既に使われているキーだったのかしらん...
スイスの教育キーボードらしいのですでに知る術はないですが...
一時間なら短い方だぜ
いいなぁ、F13〜F24が直打ちできるなんて、AHK的にうらやましすぎる。 そのキーボードを見てみたいから写真うpよろしく。
>>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」と表示されるキーは
リマップするときなど、いろいろ試してみる必要がありそうです。
かっけー。 いいなぁ。ジャンク屋で見つけたら捕獲するわ。
デザインいいねコレ うらやますぅいー
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
〜Downは〜Upが贈られるまでずっと押し下げ状態 send, ^{NumpadAdd}とsend, ^{NumpadSub} でどう?
押しっぱなしになるように記述してるだけじゃん Send, ^{NumpadAdd} とかすると思うが
こう書かないと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
>>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
}
}
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
他の人の記述を参考にこう書き直したら動きました。
このスクリプトの意味がよくわからないのですが、
一度押下げしたあとに押し上げるコマンドを同時にいれて、コマンドをリセットしているという感じでしょうか?
わからないって・・・これほどわかりやすいスクリプト例は他に無いだろう。 downを「ボタンを押す」 upを「ボタンを離す」 で読み替えてみ?
同時じゃなくて逐次実行 Ctrl押して、NumpadAdd押して、Ctrl離して、NumpadAdd離して を順番にエミュレートしてる ^{NumpadAdd} は、Ctrl+NumpadAdd を一定時間投げる かたくなに^を使わないのにはなんか訳あるのかね 単に意味わからんからスルーしてるのか up/down 分けなきゃ動かないのか
使わないわけではなくこうしないと動かないんです。 どうもありがとうございました。
Autoohotkeyをコンパイルしてexeで起動さておいて、 そのexeのショートカットにファイルをドラックした時に%1%のような感じで受け取ること出来ますか? 起動していないときなら出来きます。
>>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法でいとも簡単にできました。
>こんな便利な方法があったとは。
既に起動してる場合は%1%をtextで吐き出して 起動してるやつでtextを読みこめばいけるじゃん
購入した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 このキーになにか別の文字を割り当てるのはどうしたらいいでしょう? どうもうまくいかなくて、、、、
>>682 それ、書いてあるまんまのキーだから、
割り当て変更すると通常キーも変更される。
最初のCTRLが送られた段階でホットキーを発動させるようにする ↓ その中でkeywaitなりgetkeystateで待ち構えて、指定された順番に あとのキーが送られてくることを確認する ↓ 確認できたら、メインの処理を実行、順番が違ってたり、確認できなければreturn でOKじゃないかな
AHK で OS のアイドル状態を取得するにはどうしたら良いでしょうか。 以下の方法を考えたり試してみましたが、うまく行きません。 1. OS のアイドル状態を直接取得する 全く手掛りがありません。 DllCall などを使うとできるのかもしれないのですが…。 2. A_TimeIdle / A_TimeIdlePhysical を使う キー入力アイドル状態は対応できますが、動画プレイヤーのような 起動しっぱなしのものには対応できません。 3. スクリーンセーバーの状態を取得する 基本的にスクリーンセーバーを使いたくないのがホンネです。 またスクリーンセーバーは各々別のクラスを持っているので "スクリーンセーバー" としての一元管理は難しそうです。 何かよい方法があればご指南下さい。 ちょっと抽象的な質問ですいません。
はやらせるぺージにCPU関連の値を取得する関数があるので、それを使えばOK
687 :
682 :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キーもそうですが、複数のキーコードを連続で吐くキーは少々やっかいですね...
If( hoge ){ ほ〜 げ〜 } みたいに If hoge In foo,bar { ほ〜 げ〜 } とか Loop, Parse, hoge { ほ〜 げ〜 } って書けないのが不満
そのレベルの不満を言い出したら言語仕様のほとんどすべてを叩きたくなってくるぞw
Runコマンドとかで不正なパスを指定した場合エラーがでるんですが エラーメッセージを出さずにそのまま終了、または無視ようなことはできますか?
このスレを「UseErrorLevel」で検索
>>691 理解しました。
ありがとうございます^^
%関数%_01 って感じで変数に111って代入しました。 Msbox で表示しても %関数%_01 って表示されて、111って表示されません。 どうすれば表示されるようになりますか?
おまいのいう「変数」は何なんだ?
エスパー力のある人にアドバイスを求めるより その動かないスクリプトをそのままコピペしたほうが一般人からもアドバイス貰えると思うよ
>>694 >>695 000 := "xxx"
111_%000% := 200 + 22 + 2
Msgbox. 111_%000%
って感じです。
Msgbox. %111_www%
ってすると表示されるのですが、xxxの部分がコロコロ変わります。
>>696 ・変数名は数字で始めない(数値と区別できないから)
・引数に式を渡す場合は%+空白で始める
i := "xxx"
a_%i% := 200 + 22 + 2
Msgbox % a_%i%
Msgbox %a_xxx%
>>696 Msgbox, % 111_%000%
こういうこと?
>>697 >>698 ありがとうございました。
Msgbox % a_%i%が使えたんですね。
本当にありがとうございました。
700 :
685 :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 を使うのも初めてなので
どこから直せばよいのか分かりません。
アドバイスをいただけたら幸いです。
アイドル状態なんて、自分で定義すればいいんじゃないの? CPU利用率が5%以下が5分以上続いたら発動 とか 何をやりたいかを書かないと、質問文も回答文も無駄になりがち。
目的は、アイドル状態となった時に常駐スクリプトのタイマーを止めることです。
その常駐スクリプトは、各実行ファイルの起動時間を計測しており、いくつかのソフトの
使いすぎを防止しています (ウェブブラウザ、ゲーム、メディアプレイヤーなど)。
現在は A_TimeIdle を用いてアイドル状態を定義しています (問題点 は
>>685 )。
CPU 利用率と時間を組み合わせるのは思いつきませんでした。
もう一度試してみます。
同時に、アイドル状態の定義を OS と共有するため (
>>685 )、"AHK でディスプレイ
の電源状態を取得する方法" についてもアドバイスいただければ幸いです。
モニタの電源やスクリーンセーバならOnMessage で WM_SYSCOMMAND トラップして SC_SCREENSAVE や SC_MONITORPOWER を検知するんじゃないの
>>703 ありがとうございます。以下のスクリプト でOnMessage 試してみました。
----
Gui, Add, Text, w100, test
Gui, Show
OnMessage(0x0112, "WM_SYSCOMMAND")
Return
WM_SYSCOMMAND(wParam)
{
MsgBox % wParam
}
----
SC_SCREENSAVE や SC_MONITORPOWER 等のメッセージを拾えるのは
このスクリプトで生成される GUI がアクティブな時だけのようでした。
TVTestのウィンドウを右クリックしたときに表示される項目って取得できますか? その項目に表示されている再生オフの常態のレ点をチェックしたいです。
ControlGet,test,Visible,,VideoRenderer1,TVTest
再生オフかどうかを知りたいだけなら706の方法でいけるよ メニューのチェック状態を見てるわけじゃないけどね #1:: ControlGet,test,Visible,,TVTest Video Container1,TVTest If (test==0) ToolTip, 再生オフ else ToolTip, 再生中 return
>>709 >>709 できました。ありがとうございます。
これはレ点の表示常態をチェックしているんですかね?
メニューの情報、VideoRenderer1とかメニュー番号?の調査ってどうやってやるんですか?
715 :
710 :2010/05/26(水) 09:10:00 ID:+viqPDa30
>>711 大変申し訳ありませんでした。
自分の環境だと、ClassNNがBon DTV EVR Video Winodowになっていて、
TVTest Video Container1が表示されていないのに
>>709 のahkで正常に動いた
ので混乱してしまったようです。
*選択するレンダラによって、ClassNNが変化しているみたいです。
MX-Rのサイドホイール↑↓にF14とF15を割り当ててMouseGesture.ahkを使ってアクティブウインドウを最小化するってことをやりたいのですが WinMinimize, ahk_id %ActiveHWND%ではJaneなど一部のアプリケーションでうまくいきません ControlClickでアクティブウインドウの最小化ボタンをクリックしたことにするにはどうすればよいのでしょうか
WinMinimizeの日本語解説ページを隅々まで読むといいよ
>>717 PostMessage, 0x112, 0xF020, , , ahk_id %ActiveHWND%
でできました、ありがとう!
MouseGesture.ahkはほんといろいろ組み込めるんだな SetpointでやってたOneTouch Searchとかホイールリダイレクトとかマウスまわり全て統合しちゃった
gui,2:add,text,,aaa gui,2:show return GuiDropFiles: msgbox,aaa これだとGuiにファイルをドロップすることができませんでした。 ウィンドウ番号1以外のGuiにファイルをドロップさせてGuiDropFilesに飛ばすにはどうすればよいのでしょうか?
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
・ホイールリダイレクト ・反転選択したワードをGoogle検索 ・反転選択したtp:// tps://を開く ・反転選択したパスをエクスプローラーで開く ・ウインドウを全てプライマリモニタに移動する ・ウインドウをモニタの端にくっつける アイデアが尽きた
「キーを押したらコードAを実行する、キーを離したらコードBを実行する」 っていう感じのを作りたいんだけどどうすればいい? ループ系処理を使わずに実装したいんだけど
>>75 散々やったさw
でもループ処理を利用しない方法が分からないんだよ…
ループ使うと連打になっちゃって上手くいかない
これは盲点だったsory ずっとgetkeystateでどうにかやろうと考えてましたorz
KeyWaitでも出来るわな。〜 Upの方が合目的的だけど
リファレンスのページを隅から隅まで読めとは言わないけど Hotkeysやらキーリストのページすら読まずに「散々」やったとか言われてもな
Emacsみたいに一行選択って出来ませんか? 一応クリップボードとShift+十字キーを組み合わせて実装してみたものの、 処理が汚いわ、遅いわで使い物にならず
事故解決しました
あ
複数行に渡るスクリプト(例えば、あるウインドウを全面にしてF5をうつ) をキーワード入力型で実行させたいのですが、無理あるでしょうか? 理想でいえば、AutoHotkey.iniのなかにある複数行のスクリプトに なにかラベルをつけて、そのラベルをINPUTボックスで入力エンターすると そのスクリプトが起動するようにしたいです。 FileLaunchやAutoHotFileというahkはHDDのなかにあるexeを みつけて起動するタイプのもので、複数行のスクリプトは 選択して起動できないですよね? GUIを作って、マウスクリックからスクリプトを起動する というのはなんとなくわかるのですが、キーボードからのコマンド入力で スクリプトを選択して実行というのは無理でしょうか? おしえてください
>>734 なにをやりたいのか、さっぱりわからない
>>736 ありがとうございます。こんなんあったんですね。
Hotstringのスクリプト実行型ですね。うまく希望にかなうかな。
候補がでてほしいような。しかし非常に使える機能ですね。
>>735 コマンドライン入力型のランチャーをAHKで作って
複数行に渡るスクリプトを選択実行したい。
InputBox, keyword If IsLabel(keyword) Gosub, %keyword%
>>738 そのあとどうやって補っていくのか分からないけど
イケル気がする。
ラベルのつけ方わかんないけど、なんか。
ありがとうございます。
#E:: InputBox, keyword, スクリプト選択実行, コマンド?, , 200, 110, 0, 0, , 30 if (IsLabel(keyword)) { Gosub, %keyword% } else { MsgBox, 該当処理なし ; 合致するサブルーチンが無いとき } return test: MsgBox, 成功! return --------------------------------- これで一応できたのかな? ちょっと嬉しい。過去スレより もっとスマートにできたらいいが。ありがと。
AHKをLinux(Ubuntu)上で動かす方法なんて、無いよね? あったら、スクリプトを使いまわせてかなり便利なんだけどなぁ・・・
x64キタ━━━━(゚∀゚)━━━━!!!!
x64 版だと ThumbRemap は動かないよ
キーボードとマウスの掃除をしようと思って #Persistent BlockInput On Msgbox 入力無効化中`nCtrl+Alt+Del を入力し ESC で終了してください。 KeyWait Esc ExitApp って書いてみたけどダメだった ボスケテ
>>747 Win + L で Windows をロックして、その間に掃除したら?
あと当然だけど64bitアプリにも
>>594 とか使えるようになってた
>>751 レスありがとうございます。
そのFileLaunchちょっとだけ使ってたことあるんですが、
あれって、基本、HDDのなかにあるexeを実行するだけで
複数行からなるスクリプトを実行することって無理じゃないですか?
できるとしたら.ahkファイルごと実行したりすることのような。
初心者なのでreadme読んでもたしかにチンプンカンプンなんですが。
いやすまん、UI部のサンプルのつもりだった。 実行部分に関してはIsLabelなり、IsFuncなりで好きなとこ飛ばすよう書き換えればいいかとと思って
>>752 どうもありがとう!
64ビットになるとハンドルの長さが倍になるの忘れてました
88→96に拡張してその分NumPut先ずらしたら無事動きました
・・Ptrとかあるの初めて知ったびっくりした
>>754 あー、なるほど。それができればむちゃくちゃ理想に近づく。
そこまでのスキルないけど。なるほどね。
FileLaunchほんとにありがたいんだけど、普通用途で使ってても
登録されてない文字をエンタで打つとエラーで落ちたり
いまいち不安定のような。ただでもらっといてなんですが&ありがたいんですが。
公式フォーラムもこれっぽいものないし。AutoHotFileはすごくUI綺麗なんだけどなー。
できたと思ったらただAutoHotkey_Lx86で実行していただけだった・・しばらく考えてくる
>>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% ; ダスクマネージャーを閉じる
759 :
747 :2010/06/04(金) 21:36:23 ID:CGxYHNQg0
>>748 スペースキーで復帰しちゃいました
>>758 入力が無効にならずに、Ctrl+Alt+Delを押すとユーザ切り替えやログオフとかのメニューになりました
環境を書き忘れてました
Windows7 64bitでAutoHotKey 1.0.48.05です
64bitがまずいのかもなので、今までどおり電源を切った時に掃除します
せっかく答えてもらったのにごめんなさい
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770")) の WinExist("Windows タスク マネージャ ahk_class #32770") の部分をWin7のタスクマネージャーのウィンドウハンドルが取得されるように書き換えて PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる の部分を Send, {esc} に置き換えると動くかもよ Win7の環境がないので動くか分らんけど
BlockInput中でも、RegisterRawInputDevicesでの直接入力は読み取れるんで、ゴニョゴニョできるけどね
>>757 すまんDllCallも\Shell_NotifyIcon"直後のUInt以外は変えないとだね。
環境ないからこれでだめならわからないや。
>>763 アラインメントかorz アドレスがそれぞれ2,4,8の倍数以外からの
16,32,64bitロード/ストアはパフォーマンスが落ちるからそうなってる。
cbSizeもお尻4バイトはpadと思われ。
それはともかく乙。
>>764 おお、なるほどー
詳しい解説ありがとうございます
ふう、これでやっとx64移行できる
簡単そうな質問ですみません スペースキーを押してる間だけマウスの左ボタンを中央ボタンにするには どうすればいいんでしょう LButton:: if GetKeyState("Space") MouseClick, Middle else MouseClick, Left return これだと左ボタンのドラッグ操作ができなくなっちゃいますよね…
$Space:: Hotkey,Lbutton,LtoM,ON $Space up:: Hotkey,Lbutton,LtoM,OFF LtoM: Send,{MButton Down} KeyWait,%A_ThisHotkey% Send,{MButton Up} return
質問者じゃないけど、
>>767 の、downしてkeywaitしてupって方法は俺も使用してる。
けど、この方法だと、たまにdownになりっぱなしになっちゃうんだよね。なんでだろ。
>>767 ありがとうございました!
実際に試してみたところ、%A_ThisHotkey%にがSpaceが入ってしまったぽいので
KeyWait,Lbutton
と直接指定するようにしましたら、上手く動作しました。
これでメタセコイアでもグラフィックソフトと同様Space+ドラッグ移動ができるようになります
たすかりましたー
AHKの系譜ってこんな感じかな AHK(本家) ┣ 駄目文字微対策版(CP932) ┣ AHKL ━━ AHKL(オブジェクト) .━━━┳ AHKL(ANSI) ┃ ┃ ┗ AHKU(Unicode) →┗ AHKL(Unicode) ┃ ┃ ┗ AHK64(x64) ┃ ┗ AHK_N (組み込み用DLL) ┣ IronAHK (.NET) ┣ PocketPC版 : AHK_Nって、単に組み込み用インタプリタなだけだと思ってたけどマルチスレッドとか色々出来んのね
すごく助かってるんだが、 もうちょっと真っ当な文法に変更した(拡張した)バージョンはないんだろうか
ホットストリングってXP じゃ使用できないのですか? いっさい動かないのですが。 NT専用ってそういうことなのですか?
↑すいませんできました。終了文字を打たないといけないのを しりませんでした
>>771 32bitに限定して言うと、AHKLの機能拡張版と言えるかな。
今のところ追加ライブラリなしでCOMが使える。
> ComObjCreate("SAPI.SpVoice").Speak("Hello. This is AutoHotkey!")
オブジェクト、DllCall, RegisterCallback等バリバリ利用している常用スクリプトがそのまま動くか試したみたら、あっさり動いた。
>>775 すげーそんな機能が
ちょっと置き換えてくる
ダウン機能あるならアップ機能もつけてほしい
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.
L52
>>383 ,419の読み込まれるAHKファイルのロックは直ってるな
AutoHotkey_Lw で BREGEXP.ahk を使おうとしたけど無理でした。 対応させる方法や対策ってありますか?
DllCallのStrをAStrにするとか?
ユニコード版だと普通に日本語の正規表現( [あ-お]+ とか)通るけど、BREGEXPを使うメリットあんの?
全角のファイル名を半角にしたいです。 どうすればいいですか?
FileMoveでリネームする 全角半角変換はNKF使うか、StringReplaceをひたすら列挙 ただしファイル名に使えない置換が起きる(「/」→「/」、「?」→「?」など) のを考慮しないと上手くいかんよ
AHK標準版で、Unicodeの含まれたファイル名をリネームしたいのだけど、 filemoveだとできないね。送り側のファイルを認識してくれない。 これさえ解決できれば、互換性の低いUnicode版でやきもきしないで すむのだけどなぁ・・・
>>785 なんとなくわかりました。ありがとうございました。
788 :
名無しさん@お腹いっぱい。 :2010/06/17(木) 11:35:40 ID:G2zpoNzk0
GUIでウィンドウ内にコントロールが収まらない場合 右端にスクロールバーを出すようにできますか?
スクロールバーを「出すだけ」なら、GUIのオプションを変更するだけなので簡単できる。 Gui, +0x00100000 ; WS_HSCROLL Gui, +0x00200000 ; WS_VSCROLL ただ、これだけだと何も起こらない。スクロールバーの位置すら動かない。 スクロールバーが操作されたメッセージを拾ってウィンドウ内のオブジェクトを動かしたり スクロールバーを移動したりする処理をいちいち書いてやらなければならない。 やりたいことは出来るだろうけど、Win32APIゴリゴリ使える人じゃないと厳しい。
>>789 ありがとうございます
せっかく簡単にGUI作れるのにそういうところも簡単にできればいいんですが
やはり専門の知識がないと難しいんですね。
Win7x64でControlSendうまく動いてる人いる? 何度試しても↓が動かない・・ SetTitleMatchMode, 2 #If hWnd:=WinExist(" - Mozilla Firefox") WheelDown::ControlSend,,{WheelDown},ahk_id %hWnd% WheelUp::ControlSend,,{WheelUp},ahk_id %hWnd% #If
FireFox は内部でWheelRedirectみたいなことしていて、 WheelUp/Down を送ってもマウス直下がスクロールする所じゃないと無反応。 これは Send でも同じだし、WM_MOUSE(H)WHEEL 送っても同様。
>>792 なるほど、すっきりした
試しに^wでやってみたらちゃんと動いた
ありがとう
たぶん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() }
複数マウスのボタン定義を変えてみる 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
UTF-8ファイルをFileReadで読み込んだら 文字化けして変数に格納されるけど 文字化けせずに変数に入れる方法ありませんか? 予めFileEncoding,UTF-8と設定してれば問題ないけど そしたらshift-jisのテキストファイルが文字化けしてしまうので 文字コードを判別して読み込むとかできたら助かるんですが。
エンコーディングの自動判別はブラウザやテキストエディタだって間違うことがあるんだぜ Ahkには自動判別するルーチンがないんで、 バイナリで読み込んでエンコード毎の特異なバイナリ配列で判断して再度読み直すか、 バイナリでバッファに格納してからNKFなどの自動判別のできる DLLにバッファアドレスを引き渡すなどをしてやる、ってかんじかな。 ただエンコードが混在の方が問題じゃないのかなぁ、とは思う
非常に初歩的な質問で申し訳ないのですが WinGetText, tx1, A MsgBox, The text is:`n%tx1% としてWindowsのメモ帳ですと書いた本文を取得してくれるのですが タブ型のサクラエディタですと本文を取得してくれません。 IEでもウィンドウの本文テキストを取得できないようです。 なんとか取得方法を教えていただければ幸いです。
>>798 WindowSpy機能で、どこから取得すべきなのか、そのつど考える方法が一番無難
ありがとうございます。 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なども試してみましたがダメなようです。 しばらく試行錯誤してみます。
>>800 > しばらく試行錯誤してみます。
ヒントくれ
教えてくれ
じゃ無くて立派
Win/ControlGetText でテキストが取得できないコンポーネントも結構あるよ
>>798 >>800 原始的な方法w
ControlSend, EditorClient1, ^a^c, ahk_class TextEditorWindow
MsgBox, %Clipboard%
必要ならClipboardのバックアップ+書き戻しとかサクラエティタの全選択の解除とかを追加
あと
>>800 のスクリプトは↓こう書くべきだけど、まあどっちにしても
>>802 の言うとおり取得できない
ControlGetText, tx1, EditorClient1, ahk_class TextEditorWindow
たしかに、取得したくてもどうしようもないアプリはあるね。 俺はそういう場合、ウインドウタイトルから、編集中のテキストファイルをフルパスで取得し、 抜き取ったファイル名をifexistで調べて存在確認し、あればそれをfilereadして、 別枠で処理してる。 タイトルにフルパスを表示できないアプリの場合、 起動時のコマンドラインオプションを覗く。(はやらせるページの関数で) それでもダメなら、アプリを起動する際に、本番のアプリを 起動するための踏み台プログラム(ラッパー)をAHKで作ってる。 エディタを起動する際、必ずこのラッパーを通すようにすれば、 編集中のファイルをあとから確実に追跡できるようにしている。 まあこれだとエディタで「開く」などの処理をしてしまうとズレてしまうけど。 いまのところ、この方法のどれかで落ち着いている。
テキスト取得って例えば何に使うの? 便利なんだろうけど思いつかない・・
>>805 個人的に・・・AHK関連なら
・スクリプト内で使ってる関数の一覧や個数、登場位置を、別ウインドウでリアルタイムに出す
・関数やコマンドの使い方(引数など)をtooltip表示
・文法チェックや大括弧の階層カウント
とかは地味に便利。
エディタのマクロで作れるような機能も、あえてAHKで作ってる。
理由は、一度作ってしまえば、エディタの専用機能やプログラムに依存せず、
エディタを乗り換えても使えて、使いまわし的に有利だから
うおおおおおおおおおおおおおお そんなこともできるのか!!!!
a & b::msgbox ab a & c::msgbox ac ; a & 〜がたくさん a up:: if (A_TimeSinceThisHotkey < 300) Send a return こう書いて、aは修飾キーにしたまま、aだけを300ms以上押していた場合は 何も入力しないようにしたかったんですが、 押していた時間にかかわらず、upのタイミングで入力されてしまいます 期待通りに動かすにはどうしたらいいのでしょうか?
>>806 なるほどーありがとう
そういえば、本家AutoHotkeyのzipにそんな感じのスクリプトが入ってた気がする
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 あたりが使えるかな。
あ、 Keys_With_A := GetKeyState("A") は Keys_With_A |= GetKeyState("A") のほうがいいね
わかる >> あえて AHK
813 :
名無しさん@お腹いっぱい。 :2010/06/22(火) 13:03:31 ID:2AiDr8uk0
>>811 横レスですが、その場合の
:= と |=
では処理上どのような違いが出るのでしょうか?
前者は返値の代入で後者は返値の論理和の代入ということだけは
分かりました
代入の速度が速くなるのでしょうか?
前者だと上がったフラグが再度下がることがあるけど、 後者だと上がったフラグは下がらない
馬鹿にも分かるように説明してくれ
Ifに置き換えると (前者) If (条件) flag := True Else flag := False (後者) If (条件) flag := True
質問者じゃないけど
>>810 これってどうやって使いこなせばよいの?
ためしにAと同時押しのランチャでも作ってみるかーと思ったけど、
>>808 の
>押していた時間にかかわらず、upのタイミングで入力されてしまいます
になっちゃうね
>>817 俺も質問者でも回答者でもないけど
ErrorLevel→!ErrorLevel
Send, aの下にKeyWait, Aを追加で期待の動作になるんじゃないかな?
でもこのホットキー常時有効にしたらまともに文章打てなくなると思う
autohotkeyって打ったら、uatohotkey とか utaohotkey になるw
>>818 thx。動いたよ。たしかに、日本語の入力も、ままならない状態になるね。
こういうランチャの常駐は、原理的に不可能か。
・Aを押したことをいち早く伝えなければ、キー入力に支障が出る
・Aが長押しされたかどうか判別するには、ある程度待たなければならない
しかし、待つと(ry
>>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
おおすげぇ。 >#If FirstKeyWait = 1 これってAHK_Lの新機能だっけ? かなり便利そうだね。
ほほう、そんなものが ユニークな機能だ
ダメ文字の部分で引っかかったのでAutoHotkey_Lを使ってみたのですが その場合すべてのスクリプトの文字コードをUTF-8に変更しないとダメなのでしょうか? あと互換性はどんな感じなんでしょうか?
ところで、800超えたんで提起するが、テンプレどうする? 流行らせるページも消えたし、AHKLがかなり変わった上にしユーザも増えてるっぽいけど。
827 :
798 :2010/06/24(木) 00:01:38 ID:n51ivsKf0
遅くなってすみませんが
お答えいただいた方々ありがとうございました。
なかなか万能とは行かないようですが、
>>803 の方の方法でやってみようかと思っています。
みなさま書き込みを参考に少しずつレベルアップしていきたいです。
828 :
808 :2010/06/24(木) 21:28:29 ID:saliTuFK0
>>810-811 コピペして少し考えると目的の動作になりました
ありがとうございました
>>818 本来は無変換キーを修飾キーにしようとしていましたが、
質問を見やすくするためaにしました
忙しかったため遅レスですみません
829 :
823 :2010/06/24(木) 21:33:23 ID:ryPilJcc0
>>824 ありがとうございます。
DllCallなどよくわからずに流用してる物が多いのですが
手直しなども必用なんですね
文字コードはUTF-8とUTF-16LEが正常に読み込めたのですが
どっちにした方がいいのでしょうか?
相変わらず1行もコードを書かずにコンパイルしても マカフィーでウイルス反応が出るのだけど誰も報告したりしないのだろうか UPXも関係無いみたいだし
FileSelectFile や FileSelectFolder でダイアログを表示する時に ダイアログの表示位置を指定することは出来ないのでしょうか?
GUIのウインドを印刷したいんですが、プリンタにデータ送るのってむずかしいんでしょうか。 ハードコピーだと文字が汚くなるので、できれば普通の印刷みたいにプリンタにデータを送りたいのですが。
>>832 ありがとうございます
処理の分岐だけできればいいので、今回はメニュー項目をクリックしたら子メニューを出す方法で実装してみます
すみません、もう一つ質問なのですが、
GUIにAdd,Tabでタブ1、タブ2、タブ3、タブ4・・・とタブを登録したAHKウィンドウを表示しているとき
タブ2を削除して以降1つずつ前にずらしたりタブnを追加したりと動的にタブを扱うことは可能でしょうか?
それぞれのタブにEditを表示して付箋みたいなことをしたいのですが、
追加/削除するたびにGui,Destroy→Gui,Add,Tab/Gui,Add,Editとするのはどうにも無駄な気がしてしまって
Guicontrolでコントロールの内容を変更した時は gオプションで指定したラベルに飛ばさないようにできませんか?
>>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/
>>837 >だったら、タブの高さを文字分だけにして Edit コントロールは1個。
>タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。
思いつかなかった・・ありがとうございます!
メッセージの方も見てみます
>>836 それ、フラグでやったことはあるなぁ
Gui, Add, Edit1, vEdit1 gEdit1_OnChange
:
Edit1_SkipEvent := True
GuiControl,, Edit1, HogeHoge
Edit1_SkipEvent := False
:
Edit1_OnChange:
If ( Edit1_SkipEvent )
Return
メイン処理
Return
>>839 これはw
質問する前に全く同じことやりました
やっぱりこういう手段しかないんですかね
ご親切にありがとうございました。
情報取得?それとも表示?その両方?どっちにしろ、あまり得意でないと思うよ。 Samurize 使った方が幸せだと思う
Samurizeも最近弄ってなさ過ぎで全てを忘れちまったなぁ・・・
ホットキーに対応してどうこうじゃなく 外部からmemo.ahkを起動してメモ帳にキーを送って即座に終了って どう書けばいいんですか? ; memo.ahk IfWinExist, 無題 - メモ帳 { Send,hello } じゃうまくいかないようでした。
IfWinExist, ahk_class Notepad { IfWinNotActive, ahk_class Notepad WinActivate, ahk_class Notepad Send, hello }
>>842 了解です、ありがとうございます。
AHKで既製品がないようなので、似たようなものをGUIで1から作ることにします
流行らせるページのシステムモニタが同じような感じだった
>>1 のzipに入ってる
せんせー!AutoHotkeyで作ったGUIがSetWinEventHookにひっかかってくれないのはどうしてですか!
>>53 の例でいうと
>, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
を
"UInt", 0x0000 ; 自分のプロセスやスレッドを無視しない
にする
最小化時にタスクトレイに格納できるけど、 タスクトレイからウィンドウを復帰するホットキーのない アプリ(Twit)で、 タスクトレイ格納・復帰をトグルさせるキーは、 どう書けばよいでしょうか。何か調べる方向性を示す ヒントをお願いします。
ウィンドウがあったら閉じて、無かったら起動で良いんじゃない。
>>850 下に行くほど面倒。
1) MouseClick で座標指定でトレイ操作。
必要に応じてメニューのアクセラレータキーをSend
欠点:アイコンの誤爆が有り得る
2) (1)の前にImageSearchで座標を調べる処理を追加
3) 跡地から「タスクトレイアイコン操作」拾ってトレイ操作をエミュレート。
4) リソースハッカーなどでコマンドID調べて隠し窓にPostMessage。
ただし調べても分からないことがある。
>>849 うおーありがとう、ありがとうございました!
BOMなしUTF-8のテキストって絶対文字化けするんだね
856 :
835 :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週間近く悩んでた
以下のコードで、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) { なにか }
AHKLのオブジェクトを使えばいいんジャマイカ filter := Object() Loop, 〜 { 〜 filter[A_LoopFiled] := A_Index 〜 }
>>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
} } DetectHiddenWindows,Off } } else { Run, % commandPath,,UseErrorLevel If ErrorLevel msgbox, %appName%は存在しないか、またはエラーにより起動できません } return } 引数にはコマンドのフルパスを渡す。 #^p:: ActivateOrLaunch("C:\path\to\app.exe")
AHK64使って、更にx64用にトレイ関連ライブラリを改変する必要がある。
>>749 ,752,755,757,762-765 辺りが参考になる。
>>861 アドバイスありがとう!
該当レスをよく読んで勉強してみます
863 :
名無しさん@お腹いっぱい。 :2010/07/05(月) 12:21:58 ID:lqlb3yyb0
上の方で、本当のマルチスレッドを扱えるautohotkeyの派生が 取り上げられているけど 実際のところ、atutohotkeyの擬似マルチスレッドよりも 本当のマルチスレッドを使う利点はある? というのも、擬似マルチスレッドでたいていのことが済んでしまうと思うから できれば、本当のマルチスレッドの実例を見てみたいです
実際の所、常駐スクリプトだとタイマーやイベント監視で条件分岐して、 いくつかのコマンド投げるってことが殆どだろうから、擬似マルチスレッドでも殆ど問題ないなぁ マルチスレッドだと、分割DLしたいとか、デカいデータを並列で処理したい、とかなんで、 ホットキーやタイマでのアラートみたいな使い方だと無理して使う必要はないんじゃないのかね。 あとはGUI作って、ボタン押すとゴリゴリ演算するってやつ走らせた時は、 演算系は別スレッドで動かしたいなぁと思うことはあった。 あとAHK_Nは、AHKの中にAHKの実行環境を作って操作するみたいなんで、 他のスクリプトをRunするので代用できてるなら無理して使う必要も無いんじゃないかな。 (メモリ効率とかは良いと思うけど)
ファイルをロックしたいんですができますか? 移動できなくしたりリネームできなくしたいんですが
できました ありがとうございます!
読みだけは許可したいとかなら、共有モードフラグで許可できるよ
869 :
名無しさん@お腹いっぱい。 :2010/07/06(火) 12:23:28 ID:ZVJLgCTK0
>>864 なるほど、演算部分とguiの部分を分離させるというのは
すぐに使えそうな案ですね
参考にします
OSはXP32bitで、物理メモリを2GB積んでいて、消費メモリは1GB程度です。 自鯖で、runwaitをsettimerで回してzip圧縮など定型処理を長期間やっていると、 「システムリソースが足りないため、要求された処理を実行できませんでした」 と出ることが多くなってきました。 (以前は数ヶ月に1度程度、最近は3日持たない) これが出ると、AHKのダイアログが出てスレッドが止まってしまい、 タスクトレイアイコンで右クリして手動でリロードすることもできなくなります。 素のXPをクリーンインストールしてみましたが、同じスクリプトを動かすと 同じ症状になります。 めもりーくりーなー という常駐ソフトを試したところ、仮想メモリを1GBほど食い潰して CPUが100%になる症状が出て、クリーニングどころか逆効果でした。 それで相談ですが、システムリソースが溢れて制御不能に陥る前に、AHKをつかってPCの再起動などを やらせたいのですが、システムリソースの値を取得する方法またはコマンドラインツールは、ないでしょうか。 XPでシステムリソースが溢れること自体が稀なようで、計測できるソフトが見つかりません。
monitorだった・・
メモリクリーナーとかやらは、大量のメモリを確保することで、 実メモリにあるデータをスワップに追い出しているだけで、 システムリソース不足に対しては効果無いんでわ
875 :
562 :2010/07/08(木) 08:44:06 ID:T3ptACPyP
>>870 そもそも何がメモリーを占有しているか確かめないと
メモリが圧迫されているときは、タスクマネージャやXPならProcessExplorerで確かめるクセをつけよう
俺はガジェットでメモリ占有率上位いくつかを表示しておいて、すぐにわかるようにしている
XPでも互換ガジェット入れられるぞ
と思ったら、サーバーか。コマンドラインでモニタしてるわけか
>>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で定期観測して再起動トリガを発動すれば
対症療法はできそうなので、助かりました。
システムリースと書いてあるのに、メモリと勘違いしてたスマソwww Windowsのリソースは長いこと起動していると枯渇するよな Win9XのころはGDIリソースがすぐになくなったが、 今は見えないだけで上限引き上げられているけど存在するというのがやっかい プログラム側でリーク起こしているとなくなるんだよな サーバーはわからんが、デスクトップだとかなり顕著だよ
MouseGesture.ahkでマウスのボタンに閉じるを割り当てているのですが、 WinCloseやSendMessageで閉じるのではなく閉じるボタンがウィンドウ上に存在する場合、そのボタンをクリックするという動作は可能でしょうか?
いつもウィンドウ内の特定の位置にあるなら MouseClick コマンドで特定座標をクリックしてやる。 リサイズできるウィンドウの左上とかなら、WinGetPos でサイズ取って計算する。 もしくは ImageSearch でボタン画像の座標を探す。
× 左上 ○ 右上
>>879 ありがとうございます
どちらも試してみます
だれか初心者のスクリプトの添削お願いします。 アプリの立ちあげが遅く、ウインドウが立ち上がるのを まってから右クリックをそのウインドウ上でさせたいのですが うまくいきません。どこがおかしいのでしょうか。 ループしてくれません。音がなりませんし、一回で終わってるっぽいです。 #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}
>>882 とりあえずsleepを10倍にして様子見してみたら?
あとwinwaitactiveって、コマンド実行時点ですでにアクティブになってたら
待ちコマンドってちゃんと働くんだっけ?
俺がそういうのを作る場合、アクティブウインドウのタイトル文字列で判別させてる
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 } } ウィンドウ表示されるの待つならこれでどうだろう
レスありがとうございます。
>>883 sleepを長めにとればできそうですが
なんかかっこわるいかなぁって。
待ちコマンドっていうのわからない。
>>884 ありがとうございます。なんか複雑で理解できませんが
導入します。助かります。
カッコがいっぱいありますね。これタイムアウトした場合
Loopって終わるんですか?制限値がないみたいですが。
と初心者は思いました。
僕の書いたのどこがダメなんだろう。
ありがとうございました
あ、書いてから気づいたんだけど、WinWaitがあった・・
#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} ごめんこっちで
>>887 ありがとうございます。
>>884 でもうまくいってたのですが
もしかして
>>887 みたいなシンプルなものでも上手くいくのでしょうか?
たしかに今のところ不都合でてきてません。
そうか、winactiveで待てばいいのですか。。。
たしか自分で書いてたはずと思ったが、違うやつだった。
activeを待つほうだった。
ありがとうございました。^ー^
むしろ、
>>887 の方が処理的に良いと思う
タイムアウトで処理分岐したいなら、WinWait の第3引数に待ち時間入れて ErrorLevel で分岐すりゃいい
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" }
>>890 ■ メソッド呼び出しのルール
オブジェクトのメソッド(メンバ関数)呼び出しがあったとき:
オブジェクトに該当メソッドがある → 引数はそのまま渡して関数を呼び出す
オブジェクトに該当メソッドがない → 再帰的に base オブジェクトを検索し該当メソッドを探す
見つかったら、第一引数にオブジェクト自身を渡す
■ 関数呼び出しのルール
引数が足りていない場合、引数にデフォルト値が設定されていれば、その分はあるものとして補完するが、
デフォルト値が設定されていない場合は、呼び出しは失敗する(シグナチャが異なるため)
base のメソッドを引数無しで呼んだ場合は、該当関数名は見つかるが引数が足りないため呼び出しは失敗。
結果として空文字列が返る。
拡張オブジェクトの場合は、自身にメソッドが無いため継承元オブジェクトのメソッドが検索され、
オブジェクト自身が引数として関数コールするが、引数は満たされているため成功する。
※ 引数が過多な場合は切り捨てられるのでコール自体は成功する
あ、、関数というか「動的関数呼び出しの」場合ね
>>891 なるほど
つまりオブジェクトのメンバ関数からオブジェクト内をいじくり回すには継承しないとだめなのかー
どうもありがとう
EXE化したAHKスクリプトをショートカットあるいはバッチで呼び出して実行する際、 実行を開始した際のカレントディレクトリを取得する方法ってありますか? A_Scriptdirだと、EXEファイルの置かれたフォルダになってしまいました。
普通に A_WorkingDir
>>895 ありがとうございます。バッチから手動で呼び出したときはうまくいきました。
やりたいことは、EXEファイルを、スタートアップフォルダからショートカットで
呼び出されたかどうかを判別して、スタートアップのときだけ別の処理をしたいのです。
ふつうにショートカットを作ると、ショートカットの詳細の「作業フォルダ」が
強制的にEXEファイルの場所に指定されるようです。
ためしに、これを空欄に変えたところ、識別できました。
が、これを変えないまま判別させる方法は、ありそうでしょうか。
OSの仕様だからなぁ スタートアップのショートカットには /startup とかのパラメタ与えて引数で分岐すりゃいいと思うけど
PixelGetColorによってきちんとした値がまったく得られません。 カーソルを動かしてそこで取得させてるつもりなのに 値がまったく変わりません 以下のHPにあるスクリプトをpaint上で使いました。 ^!z:: MouseGetPos, MouseX, MouseY PixelGetColor, color, %MouseX%, %MouseY% MsgBox, The color at the current cursor position is %color%. return どうしてでしょうか?windowspyではちゃんとそこの色の文字列が変化しているのですが。 そもそも全画面でやる3DFPSゲームの特定箇所のピクセルの色が 指定したものであればどこそこをクリックするというものが作りたかったのです。 おしえてください。
>>898 それそのまま使ったらちゃんと動いたぞ。
mspaintのことならマウスカーソルの+マークの中心の0x00000が取得されちゃってるんじゃ?
>>899 まじっすか。じゃぁいままで他に追加してるcfgの内容がわるいのだろうか。
>>900 メモ帳で試してみましたが、それでも無理でした。んーなんだろ
ずっと同じ文字列
autohotkey.iniにF12のスクリプトだけ書いて ほか全部削除したが、ずっと同じ文字列しか メッセージボックスにでない。おわったか
>>902 ちなみにどんな数値が取得される?
上で貼りつけたのがコピペなら必要ないが、一応スペルミスも確認。
あとは…各行の間にSleep挟んでみるとか?
他にAutohotkeyスクリプトが動いているとか? タスクマネージャーの「プロセス」でAutohotkey.exeが複数実行されているならあやしい
898デス。レスしていただいた方々まことに申し訳ないです・・・。 アホすぎました。コピペしてつもりでしたが、 それからいろいろ文字をいじくったために、その余波で中身の変数の文字が微妙に違っていました。 前後でちゃんとおなじ変数の文字にしたら解決しました。 おさわがせしました。
>>905 まぁよくある失敗だなw
同じ数字ならMouseGetPosの変数をスペルミスしてるのかもとは思った。
Loop, % count Menu, MyMenu, Add, ほげほげ〜 (&%A_Index%), HogeLabel Menu, MyMenu, Show HogeLabel: Msgbox, %A_ThisMenuItemPos%ほげ〜
あ、書き込んじった こういう動的にメニューを生成するスクリプトで、アクセスキーを割り当てたいんですが、 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
}
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. ふむ。旧文法をばっさりとはやらんつもりのようだ。
まずはStrLen()とかInStr()みたいな関数はもっと増えてもいい
Win7のExplorerで、カーソルやマウス左クリックで選択したファイル名を 抜き出す方法ってありますか? XPだと controlget filename, list, selected col1, SysListView321, A で取れましたが、Win7であれこれ考えてみましたが、うまく取れません。 クリップボードを経由する以外で、なにかよい取得方法はないでしょうか。
AHK 64(
>>741 )使って、かつCOM使えばなんとかなるんでわないかと
>>913 Win7はたしかCtrl+Cでファイルをコピーしたらクリップボードにフルパスが入るからSplitPathで抜き出せばいいかも
916 :
名無しさん@お腹いっぱい。 :2010/07/17(土) 22:34:58 ID:rG1nfbLo0
AHKLにインストーラパッケージきたね。 6/12に落としたバイナリと、現在ZIPで配布されているバイナリと、 インストーラ版のバイナリのハッシュが全部違う
つまり・・・どういうことだってばよ?
公式AHKと同じファイル構成になった ヘルプがAHKL対応になった
0が3回きたことを検出して、別の処理をさせればよい
>>920 ホットストリング使ってみたらいかがですか?
>>921-922 普通に0を3回連打したら、誤動作しない?
書き方が全然わからん
~0::
0::
0::
return
`,::
KeyWait,F10
KeyWait,F10
return
>>923 000ののほうはこんな感じで
:*:000::
MsgBox
Return
AutoHotKeyの作業ディレクトリを実行するディレクトリに簡単に設定して起動する最も簡単な方法はないでしょうか? 今は、Runコマンドで Run, \software\mother-fucker\fuck.exe, \software\mother-fucker\ としていますが、冗長性が高く感じます。
Run, fuck.exe, \software\mother-fucker\ でいけると思うけど
>>926 あ、なるほど
パス渡したら、そのexeのあるディレクトリを作業ディレクトリとして実行みたいなコマンドやオプションあるかな、と思っていたんですが、
特にないのかな
質問があります。 常駐アプリを起動して、起動するまで待ってホットキーを送ることはできないでしょうか? ウインドウが出るアプリならWinWaitあたりで待てばよいと思うのですが、 目に見えるウインドウがでないアプリの場合どうしたものかと
案1) Sleep で適当に待ってみる 案2) 不可視ウィンドウを検索してみると結構あるんで(トレイアプリとか)、 そのウィンドウを DetectHiddenWindows, On してから WinWait してみる。
>>924 0を3回連打したらMsgBox出てもうた
>>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 を両方指定する方法はないですか? どちらか一方だけだと、それぞれ重複するウィンドウがあるため誤判定してしまうんです。
#IfWInExist, タイトル ahk_class クラス
「お忍びリネーム」のパクり。リネーム中の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
3回くらい似たようなのを見た
正規表現でダブルクォーテーションを指定する方法はありますか? RegExReplaceで"を置換したいのですが\"では動かなくて
str := """hoge""" MsgBox, % RegExReplace(str, "^""|""$")
939 :
937 :2010/07/22(木) 22:17:27 ID:bBJpxwFN0
>>938 ありがとうございます。
""でよかったとは
AutoHotkeyで作ったGUIウィンドウが非アクティブになったらウィンドウを隠す、という処理はどうすればいいでしょうか GUIからMsgBoxなど表示しても非アクティブになってしまう気がします
原始的だけど、settimerで0.1秒ごとにAHK_GUIウインドウを監視してみたら?
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 }
AHKの内部でCPUの種類を取得して、能力別に処理を分けたいのですが、質問です。 マイコンピュータで右クリックして、システムのプロパティに表示される、 CPUの型番を、システムのプロパティを開かないで、レジストリや コマンドラインツール等で、取得する方法ってありますか?
systeminfo
>>946 ありがとうございます。試してみたのですが、
>プロセッサ,1 プロセッサインストール済みです。[01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2833 Mhz
ここまでは出ました。
システムのプロパティのほうで表示されている、肝心の「Core(TM)2 Quad CPU Q9550@2.83GHz」
という文字が、含まれていないようです。
自己レスです。 regreadコマンドで regread,value,HKEY_LOCAL_MACHINE,HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString ここから情報を抜き取ると、取得できました。ありがとうございました。
VLCにはWebインターフェイスとかあるからそっちで何とかすれば
VLCを起動して試したけど、ControlGetTextで取得できたよ
>>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)
これだけで、ほかはテキストが出てきませんでした。
すみませんが、どのように取得されましたでしょうか。
ControlGetTextで取得できたVLCのVerは0.8.6です。 Ver1.1.1を試してみたけど取得出来なかった。 UWSCのPOSACCだと取得できるので何らかの方法はあるんだろうけど、詳しくないので解らない。
>>954 なるほどthxです。
>>955 それもダメでした。VLCのVerが1以上になって、仕様が変わったせい?
1.1.1で取れたけど・・・。 おやっ、一度フルスクリーンして解除すると取れる。不思議!
>>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
このコードで取得できますでしょうか。
テキストが取得できなかったりするのは、クロスプラットフォームのソフトではよくあること。 VLCは今もインターフェイスが糞だから、何とかして対応させてもまたすぐ仕様変更されるだろう。 さっさと諦めるのが吉。 とっくにAHKで効率化して節約できる以上の時間を無駄にしてるはずだ。
まぁ、仰るとおりですな。 何だか調べたらACC(IAccessibleインターフェイス)をごにょごにょすると、 ユーザ補助のスクリーン読み上げの機構で読み取りが可能になるとかならないとか、、 出来たとしても、元アプリ自体のコンパイル時になにかしとかなきゃ駄目だとか何とか、 この辺はFireFoxなどでもそうらしい。 経験上、ウィンドウの中身が、 FXWindow(FoxToolKit), QWidget(Qt)、MozillaWindowClass(Mozilla)、SWT_Window(JavaSWT) で満たされていたらお手上げにしてしまっている。
ミラー消えたのか
まあxreaは基本クソだからな よくあること
んなこと言ってたら過去スレ増えるたびに削っていかないとだめになるだろ
64とかDLLとかの派生版はどうせそのうちLに吸収されるだろうから要らないか。 IronAHKは、Linuxとかで十分に動作するなら入れて欲しいけど、誰か試してみた?
おおなんだか凄いことになってるなあ
初心者が迂闊に手を出すと、互換性の問題などで無駄につまずく恐れもあるし、
キーマップとか自動操作などの基本機能を使うだけなら本家でも十分だし、
本家標準機能の簡単な組み合わせだけでは実現できない複雑なプログラムを作るなら、
MSVCやPerl/Ruby/Pythonなどのまともなプログラミング言語を使った方がいいから、
AutoHotkey_Lを含め、派生版は
>>1 には入れない方がいいと思うな。
言いたいことは分かるけど ・ダメ文字の問題がないこ ・ファイルエンコーディング ・配列 あたりはかなりの恩恵があるけどなぁ。 インストーラも整備されたしヘルプもあるし問題は少ないと思う。 Unicode版は少なからずのユーザが居ると思うよ。 ってかフォーラム見ると _L が開発の土台に なりつつあるのが分かる
そういう機能を必要とするのは、何でもAHKで済ませたがるマニアだけだから、
>>2 以降で紹介すれば十分って事だろ。
行数に余裕が出来たら、「派生版では修正しないと使えないスクリプトもあります」みたいな注意書きも欲しいな。
AHK_Lは、日本語のファイル処理や、Unicodeの処理とか便利そうだけど、 本家で作られたスクリプトが _L で動かなかった事例って、どんなものがあるの? いま本家を使ってるけど、日本語ファイル名をsplitpathしたあとに\の位置を 誤検出しているかどうかを調べるためifexistで確認して、あるはずのファイルがなければ 例外処理を入れてる。 こういうスクリプトを_Lで動かすと、例外処理の前段階でそのまま処理できちゃうから、 例外処理を取り除かないと不具合が出る・・・ってことなのかな。
逆に本家AHKを使うメリットってないと思ってる
せやな
ファイル処理とか文字列処理なんてライトユーザーには必要ないだろ。
特に必要もないのに派生版に手を出した奴が「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?
どこを修正すればよいのでしょうか
混乱の元だというのはわかるが、メリットの方が大きいし、
ライブラリ側の対応もかなり進んでるよ。
x64対応も進んでるし、本家のままだとまともに動かないコマンドもあるし
じり貧になるのは必至かと。
本家+旧流行ページの遺産で細々とつないでいきたい人は
別にそれでいいけど、良いものを紹介しないでどうすんのさ。
>>975 ダメ文字用の処理は不要なんで意図しない結果になる。
それよりも文字列処理かね。
「ABCあいう」が本家(ANSI版でも)だと長さが9、Unicode版が6。
Loop, Parse(区切り文字なし)の回る回数も同じ。
あとはDLL呼び出しあたりなんで、分かってる人用。
一番いらないのは過去スレのURLな気がするw 過去スレに有用な情報があるのは確かだけど dat落ちしたスレはどうせどっかの保管サイトで拾ってくることになるし 過去スレ読んでまで調べようとするやつならその辺自分でできるだろうし
2ch全否定の巻
>>982 全否定どころか、有用だと思いっきり肯定してるんだが何言ってんの?
どうせそのままのurlじゃ読めずにunkarやらミラー変換機やらで探すことになるのに
わざわざ
>>1 ででかいスペース使って載せる意味はないんじゃないかって言ってんだよ
スレ立て失敗。Part6〜10まで俺が建てたんでたまには他の人が建ててくれw
誰か宣言してからのほうが良いよね > スレ立て
>>984 1に書く必要は無いが2以降には必要だろ。
URL無いと探すのも面倒だし、Janeならコマンド経由で即過去ログ取得出来る。
>>980 紹介しない、ではなく >2以降に載せるって言ってるんだと思うけど
ごちゃごちゃするから >1はとりあえず本家のみで、ってことでしょ
>>981 誰もがみんな過去ログ読めないわけでもないし
●持ちとしては過去スレURLの完全撤廃は嫌すぎる
単に 2以降に移動するって話なら特に異論はないけど
大抵の人は専ブラでスレを開いた時に
>>1 も表示されるようにしてると思うけど、
これが
>>2 以降になると、いちいち「全レス表示」みたいなのを選ばないとダメなんだよなあ
993 :
名無しさん@お腹いっぱい。 :2010/07/30(金) 17:58:59 ID:WYf6jtVeP
次スレが立つまで余計な書き込みは控えた方がいいかどうか、多数決で決めよう
やってみる。
■ スクリプト仕様
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:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
全角スペースをタブや半角スペースに変換してみよう。
Z
A
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。