11/01/31 13:00:22 o8mz8tRb0
|l |l l |l | |i
|i l |i l| li |
∩
_,,..,,n,r'゙ <⌒つ
./ ゚ 3 ヽ )´
) l ゚ ll ∩ ノ そ
Σ `'ー---‐'' (
⌒ヽ/V⌒v、/⌒ ビダァァァン!!!!
3:名無しさん@お腹いっぱい。
11/01/31 13:01:45 o8mz8tRb0
<わからない9大理由>
1.読まない …参考書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
★教えて君五大要素★
1 読まない (文盲)
2 調べない (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない (馬鹿)
5 人を利用することしか頭にない (死ね)
4:名無しさん@お腹いっぱい。
11/01/31 13:03:08 qh3anlvR0
■重要事項
オリジナルである、本家 "AutoHotKey" の開発は終了している。
現在は、そこからフォークした "AutoHotkey_L" が主流になりつつある。
スクリプトについては、それが本家AHKで動くものであるか、Lであるのかに注意。
AutoHotkey_L (内部Unicode、64bitバイナリ、オブジェクト指向、COM対応など)
URLリンク(www.autohotkey.net)
オリジナルのAHKとの変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
→URLリンク(www.autohotkey.net)
→URLリンク(sites.google.com)
※ 新規利用者にはAHKLを推奨するが、移行に際してすくなからずの改修が必要となる。
特に、旧流行らせるページの配布物(MouseGesture等)の多くはそのままでは動作しない。
安定利用できている環境を崩して移行するかどうかは各人の判断による。
■派生版
ironahk (.NET製、クロスプラットフォーム)
URLリンク(code.google.com)
AutoHotkey.dll (真のマルチスレッド対応など) (AHKLベース)
URLリンク(www.autohotkey.net)
■質問に際して
OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
2chの仕様の関係で、このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
レスをコピペして利用する場合は行頭の全角スペースをタブ等に置換してから利用すること。
5:名無しさん@お腹いっぱい。
11/01/31 13:04:19 qh3anlvR0
以下FAQ等
■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」で保存する。(AHKLの場合)
Q2:初めて使うけどどれを使えばいいの?
A2:AHKLのユニコード版を推奨。
旧流行らせるページの配布物をそのまま使う場合は本家をそのまま利用する事。
64ビットOSでAHKL32ビット版の使用は制約が多いので、64ビット版を強く推奨。
■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)]や[ひらがな]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理なので、
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。( URLリンク(www.forest.impress.co.jp) )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
6:名無しさん@お腹いっぱい。
11/01/31 13:08:47 qh3anlvR0
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で全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
× Joy1::Esc
○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。
7:名無しさん@お腹いっぱい。
11/01/31 13:09:45 qh3anlvR0
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
○AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
例) ^W::Send, {w 30}
これを回避するためには、以下の方法をとればよい:
・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
○AHK以外が原因の場合:
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:URLリンク(www6.atwiki.jp) の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
8:名無しさん@お腹いっぱい。
11/01/31 13:11:12 qh3anlvR0
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑~)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q3:GUI作るのめんどくせ~~
A3:公式( URLリンク(www.autohotkey.com) )から SmartGUI Creator をDLして使うと楽。
Q4:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
※ AutoHotkey_H(AutoHotkey.dll)を利用すると真のマルチスレッドが利用可。
9:名無しさん@お腹いっぱい。
11/01/31 13:12:18 qh3anlvR0
■リンク等
AutoHotkey メモ - Principia
URLリンク(principia.s54.xrea.com)
なまず日記
URLリンク(www.tierra.ne.jp)
eamatの日記
URLリンク(d.hatena.ne.jp)
1 Hour Software by Skrommel - DonationCoder.com
URLリンク(www.donationcoder.com)
Rosetta Code (さまざまな処理を各種プログラム言語で書いた場合の比較)
URLリンク(rosettacode.org)
以下公式フォーラムより
URLリンク(www.autohotkey.com) Tips N Tricks
URLリンク(www.autohotkey.com) ListViewで大きな画像を扱いたい
URLリンク(www.autohotkey.com) GUIで標準のもの以外を使いたい
URLリンク(www.autohotkey.com) GUIを手軽に作りたい
URLリンク(www.autohotkey.com) DllCallで定数調べるのマンドクセ
URLリンク(www.autohotkey.com) コンパイルユーティリティ(Compile_AHK II)
URLリンク(www.autohotkey.com) HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい
URLリンク(www.autohotkey.com) Windowsのイベントをフックして色々やりたい
URLリンク(www.autohotkey.com) ShellFolder() : エクスプローラのPathおよび選択ファイルを取得
URLリンク(www.autohotkey.com) ShellDesktop() : デスクトップで選択されたファイルを取得
URLリンク(www.autohotkey.com) ポップアップメニューの情報を得る
10:名無しさん@お腹いっぱい。
11/01/31 13:33:35 hoqurBSV0
AAはともかくn大理由は必要悪か・・・
11:名無しさん@お腹いっぱい。
11/01/31 17:02:51 QBjo4Vgc0
そろそろ「まとめwiki」が必要だな
12:名無しさん@お腹いっぱい。
11/01/31 20:25:23 FtjP7Jza0
>>1
乙乙。これなら無印と L の違いが上手く判断できると思います。
13:名無しさん@お腹いっぱい。
11/01/31 21:58:01 SKDk1Vdp0
非常に乙
わかりやすいテンプレだね
14:名無しさん@お腹いっぱい。
11/01/31 22:25:32 LhnowdIV0
スキップリストが実装できないorz
15:名無しさん@お腹いっぱい。
11/01/31 23:23:46 cwxpMw3C0
前スレ894
どうもありがとうございます
メッセージの中身はURLだけのようだったので
教えていただいたコードを参考にしスレタイトルもとれるようにかいているのですが
missing { やThe leftmustといったエラーが出てしまいます
req.Open("HEAD", "http://" $host "/" $board "/subject.txt")
req.Send()
If ("OK" = req.StatusText) {
Loop, Parse,ThreadName,req.ResponseText,`n,{
IfInString,ThreadName,$dat,{
Pattern = m)(?P<DatNum>\d{9,10}\.dat)<>(?P<Title>.*?)\s\((?P<res>\d{0,4})\)
RegExMatch(ThreadName,Pattern,$)
TitleName:= $Title
}
}
MsgBox, % "タイトル: " . $Title
}Else{
MsgBox, % "Error: " req.StatusText
}
前スレのコート下から3行目2行目の間に上記のコードを書き込み
1行のelseも{}でくくりました。
どうしたらいいでしょうか
16:名無しさん@お腹いっぱい。
11/02/01 00:35:55 5qWGnNzR0
>>15
HEADだと更新日時とかファイルサイズ等を取得するヘッダのみを取得なので、
本体を取得するGETを使う。
本体は res.ResponseText で取得でき・・・ないorz
出来ないっつーか、ANSIを無理栗取得するから化けるので変換してやらんといけなくなるな。
スゲー面倒だw
該当部分のみ書くんで適当に貼り付けて使うよろし。
※ DAT落ちして subject.txt に乗ってない時は空になる。
req.Open("GET", "http://" $host "/" $board "/subject.txt")
req.Send()
b:= req.ResponseBody
VarSetCapacity( buff, 1024 ), idx := 0
Loop, % b.MaxIndex() + 1 {
If ( (v := b[A_Index-1]) == 0x0A ) {
NumPut(0, buff, idx, "UChar")
If RegExMatch(StrGet(&buff, "CP932"), $dat ".dat<>(?P<name>.+)\((?P<res>\d+)\)", $)
Break
idx := 0
} else {
NumPut(b[A_Index-1], buff, idx, "UChar")
idx++
}
}
VarSetCapacity(buff, 0), b:=
MsgBox, % "スレタイ`t" $name "`nレス数`t" $res
17:名無しさん@お腹いっぱい。
11/02/01 07:25:20 jvUN4Mm90
AHKL用MouseGesture.ahk、64bitOS対応版うp頼む
18:名無しさん@お腹いっぱい。
11/02/01 09:46:35 pDjt1KJ80
(・∀・)フクショク!!
19:名無しさん@お腹いっぱい。
11/02/01 16:13:51 smBNCy3p0
>>16
ありがとうございます。
前スレのとあわせてうまくできました。
Last-ModifiedはGMTで取得されますが
DATEオブジェクトのtolocalestringが使えればJSTに変換できると思い
ComObjCreateでDATEオブジェクトを作れるCOMを探したのですが見つかりませんでした。
Last-Modifiedをまとまりごとに分割してIFで細々と変えていくしかないのでしょうか?
20:名無しさん@お腹いっぱい。
11/02/01 19:13:58 5qWGnNzR0
イマイチよく分からんが、JavaScriptのDateオブジェクトのことかな。
あれはJSのビルトインオブジェクトだから使えない
-- new ActiveXObject("Date") とかやらないでしょ --
JSに慣れてるなら、ScriptControl 使えばいいと思うよ。
スレリンク(software板:293番),296,623
それだったら通信部分もJSで組んじまえばいい気もするけど。
21:名無しさん@お腹いっぱい。
11/02/01 22:15:23 CYZNwIDL0
>>17
文字コード変えて、2バイト文字のエスケープを取り除いて、DllCallの所直せばおk。
でもDllCallの直し方がいまいちよくわからない。
とりあえず末尾がAになってるやつは取り除く、ってことはわかったが
ポインタとかデータ長とかは全然わからん。
誰かまとめてくれ。
22:名無しさん@お腹いっぱい。
11/02/01 22:18:36 5qWGnNzR0
面倒だけど、関数名をMSDNで引数や戻り値の型を調べるだけだよ
23:名無しさん@お腹いっぱい。
11/02/01 22:21:37 jvUN4Mm90
アップローダを用意してくれた訳だから、そこに対応版をうpしてくれると有り難い
24:名無しさん@お腹いっぱい。
11/02/01 22:37:22 CYZNwIDL0
>>22
つまり、DllCallの種類ごとに調べないと駄目って事か。一括で置換出来たりしたらいいと思ったんだが。
32bitと64bitで変わってくるのかもよくわからん。
とりあえず自分の手元にあるMouseGesture.ahkはターゲットの実行ファイルのパスが取れない。
stdio.ahkとかも動かない。
流行らせるページの作者が作ったスクリプトが動かなくて移行出来ないって人、結構居るんじゃないかな。
25:名無しさん@お腹いっぱい。
11/02/01 22:41:58 CXy2hbrt0
なんでこんなにクレクレが増えたんだろ
26:名無しさん@お腹いっぱい。
11/02/01 22:54:00 CYZNwIDL0
ユニコードに対応したし、窓使いの憂鬱やマウ筋などからの移行とかで新規ユーザーが増えてるんでは。
でも、ちょっと高度なことやろうとすると奇っ怪な言語仕様も相まって詰まる人が多いと思う。
PerlとかならCPANとかあるけどAutoHotKeyは基本自分でやれってなるからね。
質問スレと分けるほどの勢いも無いし、気にするほどでは無いだろ。
27:名無しさん@お腹いっぱい。
11/02/01 23:44:23 QiCSovzp0
autohotkeyならCPANのようなものを作れそう
28:名無しさん@お腹いっぱい。
11/02/02 00:11:15 Wc7J8eY20
バックグランド(非表示)にこだわらないなら、子プロセスの標準出力を得るのは以下のようにすりゃいい
exec := ComObjCreate("WScript.Shell").Exec("ipconfig /all")
While !exec.Status
Sleep, 100
MsgBox, % RegExReplace(exec.StdOut.ReadAll(), "\r")
29:名無しさん@お腹いっぱい。
11/02/02 07:57:12 cQM1P7mT0
MSDNで値の型を調べる
URLリンク(msdn.microsoft.com)
Windows Data Types
URLリンク(msdn.microsoft.com)
問題となるのは
1. 型のサイズ(32bitと64bitでサイズが異なるもの)
2. 構造体のサイズと配置(メンバの型のサイズの違いとアラインメント・パックの違いによるサイズの違い)
3. わざわざANSIで呼んでるもの(語尾にAのついているもの)
1について
名前にHがついてるハンドル型(hwnd, hinstance, hprocess, hgdiobj等々)や ポインタ型(メモリアドレスとか、DWORD_PTR等)
は32bit→4バイト、64bit→8バイトなので型をPtrに修正。
2について
これが面倒くさい。MSDNにはパックの情報載ってないし
VisualStudioでsizeof見るのが手っ取り早い? ヘッダファイルを追跡してもいいけど~。だいたい勘で
3について
これは単にAを取ればよか。
語尾にAとかWとかなしで呼ぶとシステムが勝手に判断してくれるっしょ
30:名無しさん@お腹いっぱい。
11/02/02 07:59:14 cQM1P7mT0
>>24
>実行ファイルのパスが取れない
MouseGesture.ahkの490行あたりのMG_CommandLineかな~
こんな感じ? 知らんけど
MG_CommandLine(pid=0){
global MG_PID
static ptr:=0
if(!pid){
pid:=MG_PID
}
if(!ptr){
ptr:=(NumGet(DllCall("kernel32.dll\GetProcAddress","Ptr",DllCall("kernel32.dll\GetModuleHandle","Str","Kernel32"),"Str","GetCommandLine","Ptr")+1))
}
hp:=DllCall("kernel32.dll\OpenProcess",UInt,0x001F0FFF,UInt,0,UInt,pid,Ptr)
VarSetCapacity(res,1024)
DllCall("kernel32.dll\ReadProcessMemory","Ptr",hp,"Ptr",ptr,"UIntP",addr,"Ptr",8,"Ptr",0)
DllCall("kernel32.dll\ReadProcessMemory","Ptr",hp,"Ptr",addr,"Str",res,"Ptr",1024,"Ptr",0)
DllCall("psapi\CloseProcess","Ptr",hp)
return res
}
31:名無しさん@お腹いっぱい。
11/02/02 10:49:14 KCMJOsuG0
関数の引数や戻り値の型はチマチマ調べなきゃいけないのは確か。
あと WPARAM, LPARAM は UPTr かな。
構造体はライブラリの Struct() 使うと楽。
URLリンク(www.autohotkey.com)
stPoint := Struct("POINT")
DllCall("GetCursorPos", "Ptr", stPoint[]) ; 構造体のポインタは無名キーを指定
MsgBox, % stPoint.x A_Tab stPoint.y
sizeOf したいなら MsgBox, % Struct(stPoint)
登録済みの構造体はそれほど多くないので、使いたい構造体がないときは登録が必要。
でもか、なり簡単。
例えポインタや入れ子構造体を含む構造体として以下を使う場合、
URLリンク(msdn.microsoft.com)
Struct("").IMAGEINFO := "
(Comment
HBITMAP hbmImage; l このように typedef の内側を丸々貼ればいい
HBITMAP hbmMask;
int Unused1;
int Unused2;
RECT rcImage;
)"
stImageInfo:= Struct("IMAGEINFO")
stImageInfo.rcImage.top := 100 ; 入れ子のアクセスも余裕
MsgBox, % stImageInfo.rcImage.top
32:名無しさん@お腹いっぱい。
11/02/02 19:09:40 mVMIdv5d0
実行ファイル名の取得はMG_ExePath()かな
>>30の関数は、
URLリンク(lukewarm.s101.xrea.com)
らしい。x64のマシン語用に修正とか('A`)なので、別の手法でコマンドラインをとってきた方がよさそうだ。これとか
スレリンク(software板:735番)
(前スレにあったCOMを使った例)
33:名無しさん@お腹いっぱい。
11/02/02 22:20:10 NtXMhpNM0
これから先は人に見せるスクリプトを作るときは
初回起動時にOSとかAHKのバージョンを確認してiniにでも書き込んで
で、それを元に動作を分岐するようにでもした方がいいのかな?
動作確認等がすごい面倒そうだけどorz
34:名無しさん@お腹いっぱい。
11/02/03 00:49:07 YI8tHb/V0
スクリプトなのにアーキテクチャに依存するとかワロス
35:名無しさん@お腹いっぱい。
11/02/03 04:54:29 6DvpMEO+0
外部DLLを決め撃ちで呼ぶ機能だし仕方ないさ。
うまいことオブラートにくるめるといいんだけど。
36:名無しさん@お腹いっぱい。
11/02/03 13:58:22 rbM/vFPX0
ホットキーが有効だと、guiの (&a のようなものが動かなくなるので、
gui とホットキーの処理を分離したいです。
そこで、両者を分離させようと思いました。
どうやって分離させようか考えたところ、
前スレ754-755にありました、autohotkey_l のスクリプト間で情報をやりとりするのが使えそうだと気づきました。
(sender.ahk と receiver.ahkのやつです)
ですが、それらは一方向の情報しかやりとりできません。
A.ahk -> B.ahk
これを双方で送受信、つまり
A.ahk -> B.ahk も
A.ahk <- B.ahk もできるようにするには、どうすればいいでしょうか?
37:名無しさん@お腹いっぱい。
11/02/03 19:26:30 6DvpMEO+0
>>36
面倒なことしなくても、
#IfWinNotActive, GUIのタイトル ahk_class AutoHotkeyGUI
とか
Gui, +LastFound
GroupAdd, MyGui, % "ahk_id " WinExist()
#IfWinNOtActive, ahk_group MyGui
とやって、グローバルなホットキーを自GUIがアクティブでない場合に置き換えちまえばいいかと。
38:名無しさん@お腹いっぱい。
11/02/04 07:58:11 dvswQKUi0
スクリプト終了時に、特定のアプリケーションを同時に終了させるにはどうすれば良いのでしょうか?
OnExitを使うのはわかるのですが、アプリケーションを終了させる方法がわからなくて困っています。
39:名無しさん@お腹いっぱい。
11/02/04 08:13:41 i1PposY90
Send, !{F4}
WinClose
Process, Close
40:38
11/02/04 09:29:55 dvswQKUi0
>>39
色々試してみたのですが、どうもうまくいきません。
具体的には、foobar2000を終了させたいのですが、
SetTitleMatchMode, 2
OnExit, Owari
return
Owari:
WinClose, foobar2000
ExitApp
としてみたのですが、ダメでした。
稚拙な質問で申し訳ないです。
41:名無しさん@お腹いっぱい。
11/02/04 11:29:38 7emQEsIj0
残念だったねぇ
42:名無しさん@お腹いっぱい。
11/02/04 12:55:32 V86xJa080
>>40
"owari"って関数をDetectHiddenWindowsでかこってみ?
43:名無しさん@お腹いっぱい。
11/02/04 15:14:57 nFODjuPJ0
マウ筋の「ホイールでマウス直下にフォーカスして前面にもってきてスクロール」って機能は実現できませんかね?
WhellRedirectは「スクロールするけど前面に来ないしフォーカスも奪わない」なんで
44:38
11/02/04 16:01:08 dvswQKUi0
自己解決しました。
記述する位置が悪かっただけでした。
スレ汚しすみませんでした。
45:名無しさん@お腹いっぱい。
11/02/04 16:33:30 i1PposY90
Autoexecセクションに OnExit を記述してないってところか。よくある事だw
位置を気にせずに終了処理を書きたいならこんな感じで出来る。
MsgBox, ここまでAutoExec
ExitApp
OnExitFunc() {
static $:=Object("base", Object("__Delete", "OnExitFunc")) ; この行がおまじない
MsgBox, おわり
}
46:名無しさん@お腹いっぱい。
11/02/04 17:31:57 aUqdDHtC0
やったwww
3キーコンビネーションでけたww俺偉いwww
Ctrl+F1でA、Ctrl+F1+1でB、F1+1でCってなったwww
47:名無しさん@お腹いっぱい。
11/02/04 17:40:38 aUqdDHtC0
違った・・・・・・。
Ctrl+1でA、Ctrl+F1+1でB、F1+1でCだった・・・。
スレ汚しすみませんでした。
草生やしまくってごめんなさい(´;ω;`)
48:名無しさん@お腹いっぱい。
11/02/04 17:53:44 gkNWDpA90
foobarの人、もう解決してるみたいだけど
コマンドラインから /exit で終了させる手もあるでよ
49:名無しさん@お腹いっぱい。
11/02/04 22:41:47 eSBIkihs0
>>37
その手がありましたか。ありがとうございます。
50:名無しさん@お腹いっぱい。
11/02/06 08:06:44 MKB3Yuo+0
MediaPlayerClassicの右下に表示される再生時間を取得しようといろいろ試してみました。
Process, Exist, mplayerc.exe
If ErrorLevel<>0
WinActivate, ahk_pid %ErrorLevel%
ControlGetText, text, ahk_class Static2
MsgBox, The text is:`n%text%
ahk_class Static2の部分をプロセスエディタで調べたハンドルahk_id 0x003802BAに変えても出来ないようです。
正しい方法を教えていただけないでしょうか。
51:名無しさん@お腹いっぱい。
11/02/06 08:42:52 j9/dbLv20
ControlGetText, text, ahk_class Static2
↓
ControlGetText, text, Static2, ahk_pid %ErrorLevel%
こうすればたぶんおk
52:名無しさん@お腹いっぱい。
11/02/06 13:00:07 9uX7zjkx0
>>47
53:名無しさん@お腹いっぱい。
11/02/06 13:03:28 9uX7zjkx0
誤爆した。
>>47
ちょっと待て。
それ3キーできてるんじゃないの?
54:名無しさん@お腹いっぱい。
11/02/06 17:44:38 7zwNXcTv0
キー連打系のおすすめ設定教えてくれ。
無変換キー2連打とかいろいろ使い道あると思うんだが。。
55:名無しさん@お腹いっぱい。
11/02/07 01:01:10 nuKPQbue0
>>51
うまくいきいました。ありがとう
56:名無しさん@お腹いっぱい。
11/02/07 10:51:55 xIfdXMSN0
XButton1とLButton同時押しをMButtonとRButtonの同時押しに割り当てるにはどうしたらいいの
なんか右クリメニューが出てくる
57:名無しさん@お腹いっぱい。
11/02/07 11:46:47 5pl4UUav0
>>56
どう書いたの?
58:名無しさん@お腹いっぱい。
11/02/07 14:06:40 xIfdXMSN0
そんな羞恥プレイは勘弁して
59:名無しさん@お腹いっぱい。
11/02/07 14:40:45 GKkVS+sl0
>>56みたいな文章書いてる時点で十分恥ずかしいのになw
60:名無しさん@お腹いっぱい。
11/02/07 15:03:57 xIfdXMSN0
そりゃ比較級の話しさ
61:名無しさん@お腹いっぱい。
11/02/07 15:16:33 pqvNV8kP0
エスパー頼みか人にすべてやらそうとしてるクズか
62:名無しさん@お腹いっぱい。
11/02/07 15:47:25 LdKiHLS20
メニューを出すキーの Alt や Win はDown時じゃなくてUp時にメニューが出る。これはRButtonでも同じ。
で、キーを送るのに、
Send, {LWin}
とすると {LWin Down}{LWin Up} と解釈されてスタートメニューが出るけど、
Send, {LWin Down}^{LWin Up}
のようにキーUp時に Ctrl キー等を併用するとメニューを出さなくすることが出来る。
これはOSの機能で、Sendでやらないで手動でやっても同じ。(#MenuMaskKey のページ参照)
一方、RButtonは何らかのキーやボタンを同時に押せばメニューをキャンセル出来るという機能がない。
物理的なボタン押下の直後に {RButton Down} を発行してしまったらメニューは必ず出るので、
(押す|押さない)の判断を他のボタンが押されたかどうかまで遅延しなければならなくなる。
これは物理的なDown~Upの間に同時押しがあったら RButton の発行をしないというようにすればいい。
しかし、これでも問題があって物理的なボタンUp時に RButton の発行が遅延されてしまうので、
エクスプローラ等でよく使う右ボタンドラッグが全く出来なくなる。
もっとも全くキャンセル出来ないわけではない。
ソフトによるが「ボタンDownがあったウィンドウの外でUpをする」ことでキャンセルできる場合もある。
しかしウィンドウが外でUpしてもメニューが出るものも依然として多い。
従ってコンビネーションで使う場合でメニューを完全に出さなくする汎用的な方法はなく、
対象別の処理分岐を行ったり、何らかの割り切りをしたりする必要がある。
63:名無しさん@お腹いっぱい。
11/02/07 15:49:02 LdKiHLS20
以下は、マウスジェスチャツールでよく見るタイムアウトを利用した割とお手軽な「割り切り」の例。
単純右クリックは問題ないが、ドラッグやマウスジェスチャはタイムアウトまで待つ必要がある。
#If
RButton::
fRB:=True
BlockInput, MouseMove
KeyWait, RButton, T0.5 ; タイムアウト(秒)
BlockInput, MouseMoveOff
If (fRB) && !(fRB:=False) {
Send, {RButton Down}
KeyWait, RButton
Send, {RButton Up}
}
Return
#If (fRB) && !(fRB:=False) ; この式が評価されるのは該当ホットキーが押されたときのみ
LButton::MsgBox, R + L
MButton::MsgBox, R + M
64:名無しさん@お腹いっぱい。
11/02/08 23:50:44 7ZUKHhXT0
起動時に1度だけ処理を行うのはどう書けばいいでしょうか?
tempファイルにフラグ立てて常時監視だとあんまり綺麗じゃないし。。
65:名無しさん@お腹いっぱい。
11/02/09 00:24:20 +fPQ8Tsg0
>>64
Auto-Execセクションに書けばいいんでないの?
あと、SetTimerで負の値指定すれば指定時間後に一度だけ実行するって意味になる。
AutoHotkeyの起動に関わらずOSの起動時ってんなら、
スタートアップに入れといて独立に実行させるのが簡単。
66:名無しさん@お腹いっぱい。
11/02/09 00:37:44 xzIUQ0/U0
>>65
SetTimerとは盲点でした。マイナス値指定でこんな制御できるんですね。
やりたかった事がこの機能なんでドンピシャでした。サンキューです!
67:38
11/02/09 03:11:03 5H8QE6c20
解決できませんでしたorz
AutoHotkey.exeでスクリプトを動かすと、正常に動作するのですが、
コンパイルして使用すると、全く機能が働きません。
以下にソース貼りますので、どなたか添削お願いいたします。
SetTitleMatchMode, 2
DetectHiddenWindows, On
Run, C:\Program Files\foobar2000\foobar2000.exe
OnExit, Owari
return
Owari:
IfWinExist, foobar2000
WinClose, foobar2000
ExitApp
#z::Run, C:\Program Files\foobar2000\foobar2000.exe /prev
#x::Run, C:\Program Files\foobar2000\foobar2000.exe /next
#Space::Run, C:\Program Files\foobar2000\foobar2000.exe /pause
68:名無しさん@お腹いっぱい。
11/02/09 03:21:15 e0+dVN3e0
セキュリティソフトの設定とかじゃないの?
69:38
11/02/09 03:26:51 5H8QE6c20
>>68
NOD32で除外に入れてみましたが(コンパイルしたEXEを)、ダメでしたorz
70:名無しさん@お腹いっぱい。
11/02/09 07:28:25 4ov0yC+Q0
#zやなんやらのホットキーは正常動作してんの?
なら >48にもあるけど
Run, C:\Program Files\foobar2000\foobar2000.exe /exit
を試してみてはどうか
71:38
11/02/09 09:38:19 5H8QE6c20
>>70
ホットキーは正常動作しています。
SetTitleMatchMode, 2
DetectHiddenWindows, On
Run, C:\Program Files\foobar2000\foobar2000.exe
OnExit, Owari
return
Owari:
IfWinExist, foobar2000
Run, C:\Program Files\foobar2000\foobar2000.exe /exit
ExitApp
#z::Run, C:\Program Files\foobar2000\foobar2000.exe /prev
#x::Run, C:\Program Files\foobar2000\foobar2000.exe /next
#Space::Run, C:\Program Files\foobar2000\foobar2000.exe /pause
としてみたら、今のところ正常に動いているようです。
ダメそうならまた相談しに来ます。
ありがとうございました。
72:名無しさん@お腹いっぱい。
11/02/09 20:48:07 AnYPhDjJ0
foobarとやらを起動した状態で、WinClose 単体で閉じられるかどうかはテストしたのかな?
問題の切り分けは、最小の単位で動くかどうからやったほうがいいよ
まぁ組む時もおなじだけど
73:名無しさん@お腹いっぱい。
11/02/09 23:15:13 e0+dVN3e0
コンパイルした時だけ動かなかったみたいだからな
コンパイル時の動作って何が違うんだろうか?
74:名無しさん@お腹いっぱい。
11/02/09 23:35:16 lB6wDz5r0
コンパイルしたスクリプトの名前がfoobar2000_Lunch.exeとかで
タイトルマッチでスクリプト自身が一致して本命には処理が回らない
75:名無しさん@お腹いっぱい。
11/02/09 23:36:36 e0+dVN3e0
あぁ、なるほどそれありそうだな
76:名無しさん@お腹いっぱい。
11/02/09 23:37:48 OiSdYAZE0
自分用のスクリプトでコンパイルする必要ってあるの?
77:名無しさん@お腹いっぱい。
11/02/09 23:51:07 e0+dVN3e0
>>76
基本必要ないと思う。
でも、たとえば、もうメンテの必要性のないスクリプトであれば
コンパイルしてしまえば、AHKのバージョン気にしないですむというメリットはあるかも
78:名無しさん@お腹いっぱい。
11/02/11 13:53:26 LhYK6ip3P
古いツールですが、DVDリップツールのDVD Decrypterで、
URLリンク(beans.seartipy.com)
AHKをつかって、Information欄のRead rate等をテキストデータとして抜き取って
監視&統計を取りたいのですが、この左側のInformationのテキストを抜き出せません。
稼働中に WinGetText, text,A をしたところ、
>Progress
>Information
>Destination
>Destination
>Source
>[0:0:0] HL-DT-ST DVD-ROM GDRH20N (O:)
>Settings
>MAX
>Destination
>Source
>[0:0:0] HL-DT-ST DVD-ROM GDRH20N (O:)
>Extracting Sectors...
という感じで、データは含まれていませんでした。
ステータスバーはStatusBarGetTextで取得できましたが、表示されてるとおりの
データのみが取得でき、目的のデータはありませんでした。
なんとかAHKで取り出す方法はないでしょうか。
79:名無しさん@お腹いっぱい。
11/02/11 23:01:47 Yok/jE4L0
ControlGetText でいけそうに見えなくも無い
>>76
ahkプロセスをタスクマネージャから消したいときに
複数あってもコンパイルしてあれば名前で分かる
メインの常駐のだけはexe化してある
80:名無しさん@お腹いっぱい。
11/02/13 09:00:16 gXAaP4jT0
ウインドウを移動させる方法ですが
起点を左下、右上、右下にする方法教えてください(´・ω・`)
81:名無しさん@お腹いっぱい。
11/02/13 09:58:09 6AvuwheK0
起点ってなんぞや?
画面の端にくっつけたいのなら、画面全体の縦横サイズを表す組み込み変数があるんで、
そいつを使って計算すりゃいい。
82:80
11/02/13 10:19:54 4uNgI/Xl0
すいませんちょっと間違ってました。
「ウインドウを下へ10ドット、右へ10ドット移動しなさい」
とした場合
ウインドウの左上角が、画面左上端から下へ10ドット、右へ10ドットの位置へ来ますが
これを
ウインドウの右下角が、画面左上端から下へ10ドット、右へ10ドットの位置へ来るようにしたいです。
また分かりにくかったらすいません(´・ω・`)
83:名無しさん@お腹いっぱい。
11/02/13 10:45:01 6AvuwheK0
どっちにしろ画面サイズからウィンドウサイズ引けばいいだけかと。
紙に図を書けば小学生でも分かるっしょ。
ただし、右下角はタスクバーやサイドバーなどがあるとウィンドウの領域が変わるんで、
SysGet, Monitor, MonitorWorkArea, 1
でウィンドウ描画領域として使える領域の左上(MonitorLeft , MonitorTop) と右下(MonitorRight , MonitorBottom)を得てから
計算してやる必要がある。
84:80
11/02/13 11:44:25 4uNgI/Xl0
>>83
どもです。
がんばってみます( ^ω^)
85:名無しさん@お腹いっぱい。
11/02/13 11:47:03 6agsnF6R0
ドットという言葉には加齢臭を感じる
86:名無しさん@お腹いっぱい。
11/02/13 12:02:18 4uNgI/Xl0
(´・ω:;.:...:
87:名無しさん@お腹いっぱい。
11/02/13 21:22:30 gF7/7Kxm0
どっどどんまい!
88:名無しさん@お腹いっぱい。
11/02/14 12:59:31 eyP5++8F0
前スレを参考に2つのスクリプト間で通信をしたいのですが、
;常駐側
WM_USER_XBUTTONREQ := DllCall( "RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt" )
OnMessage( WM_USER_XBUTTONREQ, "RsvMessage" )
return
RsvMessage( wp, lp, msg, hWnd ){
global WM_USER_XBUTTONREQ
If( msg == WM_USER_XBUTTONREQ )
{
Tooltip, Received
Sleep, 100
ToolTip
}
}
;呼出側
ButtonRequest:
DetectHiddenWindows, On
SendMessage, DllCall("RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt"),,,, ahk_id 0xFFFF
DetectHiddenWindows, Off
Msgbox, % ErrorLevel
Return
SendMessageはErrorLevelに戻り値が入るとあるのですが、
常駐側ってどうすれば呼出側に値を返せるのですか?
89:名無しさん@お腹いっぱい。
11/02/14 14:55:11 c2qOLN/10
メッセージハンドラ関数 -- ↑の場合だと RsvMessage -- で Return するだけ。
90:名無しさん@お腹いっぱい。
11/02/14 15:10:44 eyP5++8F0
>>89
ありがとうございます
例えば、試しにこの様にすると
RsvMessage( wp, lp, msg, hWnd ){
global WM_USER_XBUTTONREQ
If( msg == WM_USER_XBUTTONREQ )
{
Tooltip, Received
Sleep, 100
ToolTip
}
Return 100
}
呼出側でMsgbox, % ErrorLevelしても、0しか返されないのです、
常駐側からは状況に応じて任意の値を返したいのですが…
これって何が間違っているのでしょうか?
91:名無しさん@お腹いっぱい。
11/02/14 15:30:13 c2qOLN/10
おっと、ブロードキャストしてんのか。それじゃ無理。
SendMessageって相手の応答待ちなのにブロードキャストしたら誰からの応答を戻り値にすりゃいいか分かんないじゃん。
面倒でも対以下のように象ウィンドウを決め撃ちしないと。
受信側スクリプトパス ahk_class AutoHotkey
92:名無しさん@お腹いっぱい。
11/02/14 15:31:09 c2qOLN/10
うひゃ、編集ミスw
93:名無しさん@お腹いっぱい。
11/02/14 15:57:53 eyP5++8F0
>>91
ありがとうございます、やっとできましたっ
そういうことだったのかー、勉強になりました
94:名無しさん@お腹いっぱい。
11/02/14 20:01:02 IAJVXKt20
┌─────┐
| |
| どかーん!. |
| (⌒⌒⌒). |
| ||, |
| ||. |
| / ̄ ̄ ̄ ̄ ̄\.. |
| | ・ U |. |
| | |ι |つ |
| U||  ̄ ̄ || |
|  ̄  ̄ . |
└─────┘
象ウィンドウ
95:名無しさん@お腹いっぱい。
11/02/15 19:00:18 XPg+HvFIP
FileMoveDirコマンドでフォルダを移動させてから
そのフォルダに対して処理を行いたいのですが
移動が完了したかを判定する方法はあるでしょうか
(ErrorLevelで移動の完了を判定してくれるでしょうか?)
96:名無しさん@お腹いっぱい。
11/02/15 19:11:22 yZcLp3z60
過去スレにもあったけどWin7でAeroを有効にするとPixelGetColorが檄遅になるなあ
何気に不便だこれは
97:名無しさん@お腹いっぱい。
11/02/15 20:08:18 ISw4ecMV0
ええい!GPGPUへの対応はまだか!
98:名無しさん@お腹いっぱい。
11/02/16 13:15:17 cP5/14Rx0
Pauseキーにホットキー割り当てると、それ以降ずっとコントロールが
押しっぱなしの状態になるんだけど、これは修正できないのでしょうか?
^Pause::
ControlSend, SysTreeView321, {space}, ahk_class {97E27FAA-C0B3-4b8e-A693-ED7881E99FC1},
return
って感じでfoobarの一時停止を割り当てたんですけど、
ふつうのラップトップのキーボードなんすけど。
Capslockキーと同じような感じのエラーなのかな。
99:名無しさん@お腹いっぱい。
11/02/16 13:52:36 eWIHoRs+0
フック使ってる? (>>7参照)
100:名無しさん@お腹いっぱい。
11/02/16 14:02:02 cP5/14Rx0
>>99
フックつかっておりません。
ありがとうございます。テンプレにあるんですね。
>>98の事例は半ば諦めてほかのキーバインドにしたのですが
そもそもPauseの挙動がおかしいです。
Pauseをモディファイアにしたコンビネーションがまったく動かない。
Pause & J:: うんちゃら
ってやっても、動かないです。
テンプレもう一度読んでみます。#InstallKeybdHookなんかiniスクリプト全般に
適用されるようで気後れしてしまう
101:名無しさん@お腹いっぱい。
11/02/16 14:28:27 eWIHoRs+0
フック使うと確かに遅くなるけど、それを体幹でkるひとなんて居ないと思う。
102:名無しさん@お腹いっぱい。
11/02/16 19:00:13 5HamAol10
正規表現でこれが引っかからないんですがLじゃないと無理でしょうか?
Pos := RegExMatch("タ", "タ", $)
MsgBox, %Pos% %$%
103:名無しさん@お腹いっぱい。
11/02/16 20:38:34 eWIHoRs+0
ANSIだと「タ 0x83x5e」 は2バイト目が 0x5e(^)になる
104:95
11/02/16 22:03:16 SpieOa44P
質問の仕方がまずかったでしょうか
FileMoveDir~
Run~
で一応動いてるっぽいんですが、ファイルサイズが大きい場合に
移動中に処理が開始されたりすると怖くて使えないので
どなたかわかる方いましたらおながいします
105:名無しさん@お腹いっぱい。
11/02/16 22:05:49 I2v35JLBP
>>104
俺はコマンドラインを呼び出してrunwaitでやってる。
嫌でも待たされるから安心できる。
106:名無しさん@お腹いっぱい。
11/02/16 22:06:15 eWIHoRs+0
オペレーションが完了するまで次のコマンドの処理には入らないよ
107:名無しさん@お腹いっぱい。
11/02/16 23:39:48 5HamAol10
>>103
ありがとうございました
108:名無しさん@お腹いっぱい。
11/02/17 08:34:52 /UbtFMxKi
本家やLのANSI番で正規表現をまっとうに使いたいなら、
対象文字列やパターンをUTF-8に置換してやればいい
Unicode版でも内部でそうしてるらしいし。
もっとも、マッチ位置や(サブ)マッチ 文字列はANSIに戻してやんないといけないけど。
まぁ、流行らせるページのBREGEXP使えばいいんだけど。
(鬼車エンジンのbregonig.dllもつかえる)
でも、やっぱりLのUnicode 版で使う方が圧倒的に楽だよ。
109:名無しさん@お腹いっぱい。
11/02/17 12:03:43 Jb5NHySW0
!S::Win~
のSを「:」に変えたいんですが「`:」にしてもErorrになってしまいます
「:」はGoogle検索の対象から外れているので検索してもわかりませんでした
よろしくお願いします。
110:名無しさん@お腹いっぱい。
11/02/17 12:26:49 F/zTx55I0
>>109
!vkBAsc028::
111:名無しさん@お腹いっぱい。
11/02/17 14:10:29 Jb5NHySW0
>>110
仮想キーコードだったんすか!
「`;」は認識したのですっかり抜け落ちてました
ありがとうございました。
112:名無しさん@お腹いっぱい。
11/02/17 22:43:17 xAy+os6W0
これのオブジェクト指向のサンプルがいくつか書いてある日本語サイトありまっか?
113:名無しさん@お腹いっぱい。
11/02/18 11:53:30 xlVz1NVl0
なんだって?
114:名無しさん@お腹いっぱい。
11/02/18 14:20:05 Ol/KNRRG0
組み込みのObjならwiki
デザインパターンの方なら無い
115:名無しさん@お腹いっぱい。
11/02/18 22:43:36 RpoPDXlc0
WinMenuSelectItem
↑このコマンドが成功するアプリって存在するの?
メモ帳ですら受け付けんが。
XP32 AHK1.0.48.05
116:名無しさん@お腹いっぱい。
11/02/18 22:46:11 NKRANOEc0
っ ファイル(&F)
117:名無しさん@お腹いっぱい。
11/02/18 22:53:06 RpoPDXlc0
>>116
ファイル(&F)やら1&やら引数は変えてみたが、どんなアプリでも全く動かんよ
118:名無しさん@お腹いっぱい。
11/02/18 23:25:47 6SObkGS90
せめてどう記述して動かんのかぐらい貼って聞けよ
119:名無しさん@お腹いっぱい。
11/02/18 23:53:48 RpoPDXlc0
>>118
例えばメモ帳に対してなら
WinMenuSelectItem,ahk_class Notepad,,1&,2&
120:名無しさん@お腹いっぱい。
11/02/18 23:58:35 RpoPDXlc0
WinMenuSelectItemがどんなアプリでもちゃんと使えたら、だらだらSendなんて書かなくて済むのにね
121:名無しさん@お腹いっぱい。
11/02/19 00:11:00 vzYpb0xH0
>>119
ウチは無問題だなぁ @XP SP3
>>120
メニューバーに見えるところで ClassNN とれるなら標準メニューじゃないしわけで、
そうなるとコンポーネント毎に作りが違うからもうお手上げでしょ。
122:名無しさん@お腹いっぱい。
11/02/19 00:14:24 sPe5uHb60
>>121
無問題ですか、いいなぁ~
うちもXP SP3なんだけど、動いた試しがないw
123:名無しさん@お腹いっぱい。
11/02/19 15:16:45 zzXxeGu+0
「マウスの右ボタン押しながら左ボタンでコピー」したいんだが
RButton & LButton::^c
とすると通常時に右ボタンが効かなくなるし
~RButton & LButton::^c
とするとコピーの後に右ボタンが押されたことになるんだが
なんかいい方法ない?
ちなみにこれは流行らせるページのHotkeysを参考にしてる
URLリンク(ahk.xrea.jp)
124:名無しさん@お腹いっぱい。
11/02/19 16:18:56 Oq7gKDok0
>>123
RButton & LButton::Send,^c
RButton::Send,{RButton}
これだと右ドラッグができないけど
125:名無しさん@お腹いっぱい。
11/02/19 16:42:27 zzXxeGu+0
>>124
レスthx
その方法は俺も試したんだがドラッグできないのは痛い
右ドラッグだけなら被害はfirefoxぐらいだけなんだろうけど
最終的には
「マウスの右ボタン押しながら左ボタンでコピー」
「マウスの右ボタン押しながら中ボタンでカット」
「マウスの左ボタン押しながら右ボタンでペースト」
としようと思ってるからね
右ドラッグ(選択)ができなくなってしまうw
なんかいい方法ないかな~…
126:名無しさん@お腹いっぱい。
11/02/19 17:07:21 dx3UXP7O0
>>125
どの道マウスを使うのなら、いっそのことジェスチャーに割り当ててしまえば?
127:名無しさん@お腹いっぱい。
11/02/19 17:31:12 zzXxeGu+0
>>126
レスthx
流行らせるページ管理人のマウスジェスチャーのことだと思うけど
ここに割り当てるとFirefoxでは無効になってしまうんだ
何故かというと、FirefoxではFireGesturesというアドオンを使っているため
ahkジェスチャーは無効にしてるんだよね
だから、より一般的に利用するためにコンビネーションキーで実現したいんだわ
128:名無しさん@お腹いっぱい。
11/02/19 17:40:00 dx3UXP7O0
>>127
難しいとこだねw
でも、コピペは色々なアプリで使うから、思い切ってFireGesturesを外しては?
それはFirefoxでしか機能しないマウスジェスチャーでしょ
MouseGesture.ahkでもいいし、他のジェスチャーソフトでもいいけど、ジェスチャーは専用ソフトに1本化した方が楽じゃね?
俺の使ってるブラウザもファイラもジェスチャー機能がついてるけど使ってないw
129:名無しさん@お腹いっぱい。
11/02/19 18:02:37 zzXxeGu+0
>>128
難しいとこなんだわw
FireGesturesを外すのは勇気がいるなぁ~めちゃくちゃ便利だからなぁ~
ジェスチャーを専用ソフトに一本化したほうがいいという意見はごもっともなんだが
ブラウザ付属のジェスチャーとかファイラ付属のジェスチャーにしかできないことってあるでしょ?
例えばFireGesturesだと
→↓:選択範囲をGoogle検索
→↓→:選択範囲を検索エンジンを選んで検索(ポップアップが出てくる)
っていう感じに俺は割り当てていて
これをahkジェスチャーで実現するのは無理だから
やはりFireGesturesは外せないw
130:名無しさん@お腹いっぱい。
11/02/19 18:20:43 dx3UXP7O0
>>129
実は俺はFirefox使いでもないしahk使いでもないwから、参考にならんかもしれんが…
その実現したい機能がホットキーで割り当てられるのなら、マウスジェスチャーで実現できると思う。
俺が使ってるジェスチャーソフトは、StrokeItってやつなんだが、
例えば、IEで調べたいキーワードをGoogle検索したい場合、そのキーワードをD&Dで選択して
Ctrl+C → Ctrl+T → Ctrl+E → Ctrl+V → Enterって流れになる
これを、StrokeItので実現しようとすると、「キーストロークを送る」ってコマンドで
[Ctrl_Down]C[Ctrl_Up][Ctrl_Down]T[Ctrl_Up][Ctrl_Down]E[Ctrl_Up][Ctrl_Down]V[Ctrl_Up][Enter]
って記述すればOK
Chomeだったら、3番目のCtrl+EがCtrl+Kに変わるだけ
想像だが、「検索エンジンを選んで検索」ってのも、Altや方向キーでキーボードだけで追えるんでしょ?
組み合わせて、キーボードだけで実現できることなら、StrokeItに割り当てられるよ
131:名無しさん@お腹いっぱい。
11/02/19 18:24:59 A1X39um80
>これをahkジェスチャーで実現するのは無理だから
FireGesturesのソースのbrowser.jsで760行目辺りにある
case "FireGestures:WebSearchPopup"
以降の処理をuserchrome.jsを利用して自前で関数に登録
Griever氏のKeyChanger.uc.jsやalice0775氏mainKeyset_overlay.xul
等を利用して関数にキーボードショートカットを割り当てる
単語が選択された状態からMouseGesture.ahkのアクションで
先程割り当てたショートカットを送る
これで出来る気がするけど…
132:名無しさん@お腹いっぱい。
11/02/19 18:42:01 vzYpb0xH0
コンテキストメニューが出ていいなら、ジェスチャ認識後のアクションに
Send, {AppsKey}s
とか
Send, {AppsKey}{Down 2}{Enter}
とかで代用できそうだけどな。
133:名無しさん@お腹いっぱい。
11/02/19 18:55:06 A1X39um80
>>132
129で言ってるのは、FireGesturesが自前で実装してるポップアップだと思うから
FireGestures自身がその機能を自分で呼び出すか、
>>131の様に自前で同等の処理を準備してやるかしないとダメじゃない?
AppsKeyをsendしても標準のコンテクストメニューしか利用できないと思う
134:名無しさん@お腹いっぱい。
11/02/19 19:24:40 vzYpb0xH0
挙げられた例を見ると通常のコンテキストメニューでもある項目だったんでな
135:名無しさん@お腹いっぱい。
11/02/19 20:52:39.71 zzXxeGu+0
>>130
>想像だが、「検索エンジンを選んで検索」ってのも、Altや方向キーでキーボードだけで追えるんでしょ?
>>133の言う通りFireGesturesが自前で実装してる機能のためできないと思う
>>131,>>133
レスthx
Firefox&FireGesturesユーザー(?)ということで
非常に技巧的な解決策を提示してもらったが、
例に示した以外にもたくさんのものがあって、
これらを全部>>131の方法でやっていく気にはなれない
FireGesturesは自前関数に登録するために必要だけど、
登録したあとは不要になるというのもちょっと…
>>132,>>134
レスthx
1つ目の例は確かにそれでいけたね
だけど2つ目の例に関しては>>133の言う通りだと思う
今ちょっとひらめいたんだが
「~」を使って、イベントを乗っ取らず、そのままシステムに通すと、
最終的に右ボタンは送られるわけだけど、
これをInputを使って横取りして取得して無効化することってできないかな?
136:名無しさん@お腹いっぱい。
11/02/19 22:21:29.42 kL20aePY0
一応、
Firefoxのデフォルトの検索ボックスだと
^k フォーカス移動
^{Up} ^{Down} でエンジン選択
!{Up} or !{Down} でエンジン選択プルダウン展開
ができる。
固定エンジンならキー送るだけで何とかなるな。
Send, ^c
ClipWait, 0.5
If (!ErrorLevel)
Send, ^k^{Up 10}^{Down 1}^v{Enter} ; {Up 10} は一番上に移動するため。そこから {Down 1} なので2番目を選択
Return
プルダウンの位置が気にくわない化もしれないが、出来なくもない。
Send, ^c
ClipWait, 0.5
If (ErrorLevel)
Return
Send, ^k^v!{Down}
WinWaitClose, ahk_class MozillaDropShadowWindowClass
Send, {Enter}
Return
137:名無しさん@お腹いっぱい。
11/02/19 23:18:35.79 A1X39um80
>例に示した以外にもたくさんのものがあって
これがKeypress Gesturesの機能を指してるならば
"検索エンジンを選んで検索"を外部からどう実現するかを
これ以上検討しても無駄かも。
実は以前FireGesturesをahkから使えるようにスクリプト書いたことあるけど
Keypress Gesturesの機能だけは諦めた。
実際には不可能じゃなかったけど主要な部分を殆どFirefox側で
実装しなければならず本末転倒すぎた…
138:名無しさん@お腹いっぱい。
11/02/20 16:59:44.30 euvOUDK20
XDebugClientでデバッグをしたい。
やり方はAutoHotkeyJp に
・XDebugClient を予め起動しておく
・AutoHotkey_L を /Debug オプションを有効にして起動する。XDebugClient 側は自動的に対象スクリプトに対して接続を行う。
とあるのですが、
「AutoHotkey_L を /Debug オプションを有効にして起動する」
これの意味が分かりません。
AutoHotkey.exeのショートカットの引数に/Debugをつけるとエラーになりますし
どうしろと言っているのでしょうか?
139:名無しさん@お腹いっぱい。
11/02/20 18:47:36.59 pNjsnC7U0
コマンドライン引数に /Debug 指定するだけ。
分かんないなら、AutoHotkey.exe を右ドラッグしてショートカット作る。
Alt+Enter か 右クリのプロパティでコマンドラインに /Debug を追加。
そのショートカットにデバッグ対象スクリプトを D&D。
てか、そこに書いてあることすら分かんないようじゃデバッグは厳しいと思うが
140:名無しさん@お腹いっぱい。
11/02/20 21:21:30.73 euvOUDK20
>>139
どうも。解決しました。
XDebugClientがAutoHotkeyJp用ではなかったのが原因でした。通常版を使っていた
141:名無しさん@お腹いっぱい。
11/02/21 01:08:53.07 TbF/Eqg30
>>123
できた。若干の条件付だけど悪くない
コピーするには右押してから300ms以内に左押さないといけない
右ドラッグするには右押してから300ms待たないといけない
マウスジェスチャとかとの競合は知らない
RButton::
SetTimer, nagaoshi, -300
RBtnDown=1
Return
nagaoshi:
RDrag=1
Send, {RButton Down}
Return
142:名無しさん@お腹いっぱい。
11/02/21 01:09:39.50 TbF/Eqg30
#IF RBtnDown
LButton::
SetTimer, nagaoshi, OFF
If( !RDrag ){
RtoL=1
Send, ^c
}
Return
RButton Up::
SetTimer, nagaoshi, OFF
If( RtoL )
RtoL=0
Else If( RDrag ){
Send, {RButton Up}
RDrag=0
}Else
Send, {RButton}
RBtnDown=0
Return
#IF
143:名無しさん@お腹いっぱい。
11/02/21 07:02:45.80 MjDtRBCm0
>>62,63
144:名無しさん@お腹いっぱい。
11/02/21 22:11:29.13 TbF/Eqg30
すげえww色々試して>>62と完全に同じ結論に辿り着いたんだw
すでに解明されてて俺意味ねえwww
しかもBlockInputあったらドラッグの誤爆防げるんだね
145:名無しさん@お腹いっぱい。
11/02/22 02:31:14.40 H3lonP3O0
↓俺のAutoHotKeyがこんなに可愛いわけがない
『俺の妹がこんなに可愛いわけがない』
第12話「俺の妹の人生相談がこれで終わるわけがない TRUE ROUTE」Web配信
【配信開始時期】 2011年2月22日(火) 12:00 ~ 2011年3月8日(火) 12:00
【配信サイト】 ※全てのサイトで無料にて視聴していただけます。
◆「俺の妹がこんなに可愛いわけがない」アニメ公式サイト URLリンク(www.oreimo-anime.com)
◆ニコニコ動画 URLリンク(ch.nicovideo.jp)
◆ShowTime URLリンク(www.showtime.jp)
◆MovieGate モバイルサイト&i-Phone、i-Pad URLリンク(movie-gate.jp)
◆バンダイチャンネル URLリンク(www.b-ch.com)
146:名無しさん@お腹いっぱい。
11/02/22 15:25:41.09 njCiDHjY0
これ面白いなぁ
URLリンク(www.autohotkey.com)
URLリンク(shop.omwcorp.com)
147:名無しさん@お腹いっぱい。
11/02/22 23:16:55.90 QOmTHbIH0
アプリごとに、「左クリック押しながら右クリック」したらアプリ専用のメニューが出るようにしてるんだけど、
これをホットキーでも呼び出せるようにしたい。
--------------------------------
#m::Send, {LButton Down}{RButton}{LButton Up}
#IfWinActive, Firefox
~LButton & RButton::FirefoxMenu()
#IfWinActive, Jane Style
~LButton & RButton::JaneMenu()
--------------------------------
しかし、このコードだと失敗する。(コンビネーションキーが上手く動いてない)
で、通常のホットキーなら Send でも発動するからそっちに統一したら何とか動く
--------------------------------
~LButton & RButton::Send, {F13}
#m::Send, {F13}
#IfWinActive, Firefox
F13::FirefoxMenu()
#IfWinActive, Jane Style
F13::JaneMenu()
--------------------------------
でもこれだと、どのキーを押すのかわかりにくい。("F13"だけじゃ何のキーかすぐに思い出せない)
できれば上のコードで運用したいんだけど、コンビネーションキーを上手くエミュレートする方法ってない?
148:名無しさん@お腹いっぱい。
11/02/22 23:30:33.04 HCowCsFx0
#IfWinActive, Firefox
#m::
~LButton & RButton::FirefoxMenu()
#IfWinActive, Jane Style
#m::
~LButton & RButton::JaneMenu()
単にこれじゃダメなのか?
149:名無しさん@お腹いっぱい。
11/02/22 23:36:22.08 njCiDHjY0
AHKで発行したキーを、AHKのホットキーラベルが拾えるのはキーボードを使ったホットキーだけ、
しかもフックを使っていないのに限る。(>>6 QA4)
マウスボタンは常にフックなので無理ということ。
やりたい処理を関数化してあるんだから、横着しないで #m を複数定義してやりゃいいだけじゃないの?
150:名無しさん@お腹いっぱい。
11/02/23 01:13:53.43 0baHJf8l0
>>148-149
レスthx.
コードの読み易さと手間を考えて、
#m::を一回書けばすべてのアプリに適用されるような書き方がしたかったんだけど、意外と面倒なのね
>>148氏の方法は初見で、色々応用効きそうなので使わせてもらいます
151:147
11/02/23 01:15:49.33 0baHJf8l0
あ、ID替わってた
152:名無しさん@お腹いっぱい。
11/02/23 08:53:36.11 RDl8/H8b0
どうしようもなくしょぼい質問なんですけど、教えてください。
ファイルオブジェクトを用いて、完全に上書きするにはどうしたら良いでしょうか。
下記の方法では、新しいデータが元データよりも小さいときに、ファイル末尾に
古いものが残ってしまいます。
file := FileOpen("test.txt", "rw")
str := file.Read()
file.Seek(0)
file.Write("new contents")
file.Close
153:名無しさん@お腹いっぱい。
11/02/23 09:59:41.89 zxfz08I+0
ファイルの先頭だけ書き換えたいときは逆に便利なんだけどな。
↑のままのやり方なら、Write したあとのポインタの位置までが有効なデータとなるっぽいんで、
file.length := file.Position
とやって、そこまでのサイズで切り詰めちまえばいい。
あと、Close はメソッドだから Close() にしないと。
154:名無しさん@お腹いっぱい。
11/02/23 15:58:36.47 T40qBS+G0
上にも書いちゃってるんですが、
Pauseキーを修飾キー的な使い方がしたいです。
コンビネーションで
Pause & F::
みたいにしたいんだけど、キーの操作がおかしくなる。
155:名無しさん@お腹いっぱい。
11/02/23 16:24:53.61 gxJ9M9MJ0
>>154
#If GetKeyState("Pause","T")
f::hogehoge
#If
156:名無しさん@お腹いっぱい。
11/02/23 19:19:01.78 MG3kuiSG0
Autohotkeyでmypaintというお絵かきソフトを起動させて
そこにショートカットキーを送るものを作りましたが
mypaintを起動後、
普通にmypaintから「開く」の操作で画像を開くと
ショートカットキーを受け取ってくれますが
mypaintに画像ファイルをドラッグ&ドロップさせると
Autohotkeyからのショートカットキーが送れなくなりました。
これはどうすればいいのでしょうか???
157:156
11/02/23 19:20:16.30 MG3kuiSG0
#WinActivateForce
textname=%A_ScriptDir%\settei.txt
;mypaintの場所
FileReadLine, mpbasyo, %textname%, 1
SplitPath, mpbasyo ,mpname
Process, Exist,%mpname%
pid = %ErrorLevel%
if pid = 0
{
;↓mypaintの起動
Run, %mpbasyo%,,,pid
}
GroupAdd, mypaint, ahk_pid %pid%
WinActivate, ahk_group mypaint
WinWait, ahk_group mypaint
Gosub, Tool
WinWaitClose
ExitApp
;ツールウィンドウ作成
Tool:
Gui, +ToolWindow +AlwaysOnTop
Gui, Add, Button, x0 y0 w30 h30 gZkey, 戻る
Gui, Add, Button, x30 y0 w30 h30 gYkey, 進む
Gui, Show, x127 y87 w60 h150, ツール
Return
158:156続き
11/02/23 19:20:57.74 MG3kuiSG0
;「send,」の後を自分がmypaintに登録しているショートカットキーにする
;戻る
Zkey:
WinActivate, ahk_group mypaint
Send, z
Return
;進む
Ykey:
WinActivate, ahk_group mypaint
Send, y
Return
159:名無しさん@お腹いっぱい。
11/02/23 19:56:18.90 T40qBS+G0
>>155
ありがとうございます。
しかしよくわからず、やり方がわかりません。
URLリンク(www.autohotkey.com)
を読んでいますが、英語が読めないので、また分からない・・・。
どうやら3コンビネーションのホットキーや駄目キーでのホットキーが出来そうな
こと書いてあるんだけど・・・。
160:156
11/02/23 20:29:41.81 MG3kuiSG0
すいません、自己解決です。
とりあえず
mypaintの起動時に取得したpidじゃなくて普通にwintitle入れたら動きました
なんかもうすいませんでした。
;GroupAdd, mypaint, ahk_pid %pid%
GroupAdd, mypaint, MyPaint
161:名無しさん@お腹いっぱい。
11/02/23 20:38:04.03 zxfz08I+0
>>156
スレリンク(software板:653番) の人かな
ってかもう解決してるからいいんだろうけど、一応。
このソフトみたいにパレットみたいな小窓があるやつだと、
プロセスIDに紐付く窓が複数存在する事になるから、
メインウィンドウを決め撃ちしなきゃってことになる。
で>>160で書いた通りにやると対象がきっちり絞り込まれて動くようになる、と。
162:名無しさん@お腹いっぱい。
11/02/23 21:01:34.19 Uz7IjJsN0
; AutoHotKeyからWSCを使うサンプルです。JavascriptやVbscriptが詳しいひとは、WSHやHTA、HTABOXコア、テキストエディタのマクロなどで使う関数と共用出来て便利かも?
; 以下の変数wscscriptの部分をg.wscとして、このスクリプトと同じフォルダに保存して実行します。
objjs := ComObjCreate("ScriptControl")
objjs.Language := "JScript"
objjs.addCode( "function getobjectg(pwsc){return GetObject('script:'+pwsc);};" ) ;
p =%A_ScriptDir%\g.wsc
g := objjs.Run("getobjectg",p)
wscscript =
(
<?xml version="1.0" encoding="shift_jis" ?>
<component><?component error="true" debug="true"?><public>
<method name="popup"/>
<method name="init" dispid="0"/>
</public><implements type="Behavior" id="Behavior"/>
<script language="JScript"><![CDATA[
var oshl=new ActiveXObject('WScript.Shell');
function popup(smes,nsec){return oshl.popup(smes,nsec);};
function init(othis){
if(typeof(othis.location)=='object'){location=othis.location;
}else if(typeof(othis.WScript)=='object'){WScript=othis.WScript;
};return this;
}; ]]></script></component>
)
g.popup(wscscript) ;
163:名無しさん@お腹いっぱい。
11/02/23 23:34:19.03 hxVowOOgP
入門者レベルのスクリプトですが教えてくだされ。
USキーボード使うてます。
F1`キーに、左Alt+`(日本語キーボードだと、半角全角に当たるキー)
を割り当てるにはどうしたらいいですか?
同時に押すんじゃなくて、左Alt(押しっぱなしで) ` を押す、
という挙動にしたいです。
164:名無しさん@お腹いっぱい。
11/02/23 23:54:12.72 MG3kuiSG0
>>161
そうです、同じ人物です。
解説ありがとうございます。
何でこうなのかよく分からなかったのでたすかりました!
165:名無しさん@お腹いっぱい。
11/02/24 06:50:01.35 Ify1/SzO0
>>153 ありがとうございました。大変参考になりました。
結局このようにやって、うまくいきました。
str := file.Read()
file.Length := 0
file.Write("new contents")
file.Close()
166:名無しさん@お腹いっぱい。
11/02/25 01:26:23.93 MU+gEzNn0
質問です
後方一致(部分一致で問題ないと思います)で
ウィンドウを指定するにはどうしたらいいですか?
SetTitleMatchMode, 2
をどこに書けばいいんですか??
WinActivate,
だと一致する文字列が指定できませんよね???
167:166
11/02/25 01:34:06.13 MU+gEzNn0
すいません、自己解決。
別に行の手前に書いておけばいいんですね・・
168:名無しさん@お腹いっぱい。
11/02/25 01:36:28.93 3Ra6Bkup0
スクリプト全体に影響を及ぼしたいなら、Autoexecセクションに。
分かんないなら1行目に書く。
現在の一連の操作だけに影響を及ぼしたいなら、直前の行でいい。
例えばメモ帳を素で起動すると「無題 - メモ帳」のタイトルになるが
WinActivate, メモ帳
だと通らない。これはデフォルトで前方一致なため。
逆に、その直前にマッチモードを指定してやれば通るようになる。
SetTitleMatchMode, 2
WinActivate, メモ帳
ちなみに RegEx を指定してきっちりと後方いっちにするって手もある
SetTitleMatchMode, RegEx
WinActivate, メモ帳$
169:名無しさん@お腹いっぱい。
11/02/25 01:36:54.79 3Ra6Bkup0
無駄足w
170:名無しさん@お腹いっぱい。
11/02/25 01:42:15.44 umcPdiwq0
>>169
半年ROMってる初心者には参考になっておりますよ
171:名無しさん@お腹いっぱい。
11/02/25 01:51:36.60 NOULXWdp0
>>168
>ちなみに RegEx を指定してきっちりと後方いっちにするって手もある
横レスだがその手は思いつかなかった
thnx
172:名無しさん@お腹いっぱい。
11/02/25 02:01:25.60 MU+gEzNn0
説明ありがとうございます。
すいません、もうひとつ質問です。
ここの部分に入ったらマウスの右クリック押しっぱなしを
スペース押しっぱなしにしたいのですが
どうしたらいいのでしょうか??
Spacekey:
WinActivate, ahk_group honyarara
ここ
Return
173:172
11/02/25 02:22:26.80 MU+gEzNn0
LButton::Spaceにしたら常にLButtonを押したときはSpaceになってしまいます。
その時だけSpaceにするいには(例えば解除ボタンをクリックしたら戻るとか)
どうしたらいいのでしょうか??
174:名無しさん@お腹いっぱい。
11/02/25 02:35:51.58 lLyutHO80
ここはおまえの日記帳じゃry
それにおまえには問題解決力もあるだろ?
>>1のリファレンス読めばすぐ解決するさ
#IfWinActiceとか#If(ahk_専用)あたりだ
ahkでキー操作以外に何ができるかもよく分かるだろう
175:名無しさん@お腹いっぱい。
11/02/25 03:38:10.89 lpL9oMBM0
質問させてください。
キーリピートを無視したい場合どうすればいいのでしょうか。
キーを押下した時にだけ操作が発生し、押し続けている間は何も起きないようにしたいです。
Numpad0 up::
の要領で
Numpad0 down::
とやってみたのですがダメでした。
初回KeyDownにのみ呼応する方法、よろしくお願いします。
176:名無しさん@お腹いっぱい。
11/02/25 03:41:06.85 r6PtuCBx0
すいません、おしえてください。
トリプルコンビネーションを動かそうとしているのですが、
その組み合わせに無変換キーを入れると動かなくなります。
どうやればいいのかおしえてください
^vk1Dsc07B::
^Z::
if ((A_ThisHotkey = "^vk1Dsc07B" and GetKeyState("Z")) or (A_ThisHotkey = "^Z" and GetKeyState("vk1Dsc07B")))
{
MsgBox, Hotkey successfully activated.
}
return
177:名無しさん@お腹いっぱい。
11/02/25 20:24:37.92 Z5U2DCP00
>>175
例えば以下のようにするとダイアログが出るが、OKを押して該当ホットキーの一連の
処理が完了するまで Numpad0 を連打しても何も起きない。
Numpad0::MsgBox
デフォルト設定の場合、ホットキーラベルが同時に処理できるのは1つまでとなっているためである。
( #MaxThreadsPerHotkey の項目を参照 )
この原理を利用して、キー押下解除までホットキー処理が終わらないようにすれば、キーリピート処理を抑制できる。
Numpad0::
; やりたい処理
KeyWait, Numpad0
Return
他にもフラグを用いてどうにかするという手もある。
#If (NP0)
Numpad0::Return ; 一度処理したらキー押下解除があるまでこちらに流れる
#If
Numpad0::
NP0 := True
; やりたい処理
Return
Numpad0 Up::NP0:=False
178:名無しさん@お腹いっぱい。
11/02/25 20:32:12.48 MU+gEzNn0
Autohotkey_Lですが
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
Msgbox %OutputVarWin%
とやったら全角の日本語のウィンドウのタイトルじゃなくて
0x10a22とでました。
全角の日本語のウィンドウのタイトルはどうやったらでますか?
179:名無しさん@お腹いっぱい。
11/02/25 20:39:19.77 Z5U2DCP00
>>176
方法1) Hotkeyコマンドで一時的にホットキー定義を置き換える方法で実現
Hotkey, ^z , DefaultAction
Hotkey, ^vk1Dsc07B, DefaultAction
DefaultAction:
key := (A_ThisHotkey = "^z") ? "^vk1Dsc07B" : "^z"
Hotkey, %key%, CombiAction
KeyWait, % RegExReplace(A_ThisHotkey, "^\W+")
Hotkey, %key%, DefaultAction
Return
CombiAction:
MsgBox, Hotkey successfully activated.
Return
方法2) 原理的には方法1と〃だが #If で実現
#If (A_ThisHotkey = target)
^z::
^vk1Dsc07B::
MsgBox, Hotkey successfully activated.
Return
#If
^z::target:="^vk1Dsc07B"
^z Up::target:=
^vk1Dsc07B::target:="^z"
^vk1Dsc07B Up::target:=
180:名無しさん@お腹いっぱい。
11/02/25 20:40:08.95 Z5U2DCP00
>>178
取れるのはウィンドウハンドル(ウィンドウID)なので WinGetTitle で取得。
181:名無しさん@お腹いっぱい。
11/02/25 20:41:10.47 Z5U2DCP00
>>180
伝わらんかも試練から、補足。
その 0xNNNNN ってのを利用して改めて WinGetTitle を使ってタイトルを別途取得。
182:178
11/02/25 20:58:11.24 MU+gEzNn0
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
WinGetTitle,title,%OutputVarWin%
Msgbox %OutputVarWin%=%title%
とやってみましたがMsgboxが
0X1808e2=
のみ表示になってしまいました
なにがおかしいのでしょうか??
183:名無しさん@お腹いっぱい。
11/02/25 21:23:38.87 Z5U2DCP00
> 取れるのはウィンドウハンドル(ウィンドウID)
書かれた事以外にもマニュアル読むことはしようぜ
184:名無しさん@お腹いっぱい。
11/02/25 21:32:30.27 r6PtuCBx0
>>179
詳しく書いてくださってありがとうございます。
貼り付け方がわからないためか、方法1のほうは動作確認できませんでした。
一方、方法2のほうは動作確認できました。msgでました。
たいへんわがままなのですが、僭越ながらコメントを。
>>176で書かせていただいたスクリプトは、修飾キーを押しながら
残りの2キーを押す順番がどちらが先でも起動するという趣旨のものでした。
しかし>>179さんが示してくださった方法ではおそらく、決まった順序で
キーを押したときしかmsgがでない方法だと思います。
予め、趣旨のことを書くべきでした。
しかし、無変換を使用したトリプルコンビネーションが使えて有り難いです。
スクリプト書いてくださって有難う御座いました。
185:名無しさん@お腹いっぱい。
11/02/25 21:43:10.69 eJaHpR4s0
>>176
こういう動作?
^vk1Dsc07B::
If getkeystate("z", "P")
testmsgbox()
return
^z::
If getkeystate("vk1Dsc07B", "P")
testmsgbox()
return
testmsgbox() {
MsgBox, Hotkey successfully activated.
}
186:名無しさん@お腹いっぱい。
11/02/25 23:42:02.57 MU+gEzNn0
あっっ・・・んっ・・・もっげ・ん・か・いっっ
すいません
マジでボスケテくださいOTLOTL
#If sw=1でマウスの左クリックをスペースにする事ができましたが
ボタンがあるウィンドウの上にきてボタンをクリックすると
「マウスの左クリックをスペースにする」を解除したいんですが・・・
どうしたらいいんでしょうか?
恐らくMouseGetPos, mX , mYをループ無限ループさせて
常にマウスの座標を常にとってボタンのウィンドウの上にマウスがきたら
「マウスの左クリックをスペースにする」を解除して
ループから出てsw=0にすればいいかと思うんですけど
For ループのパラメータの説明の意味がまったく理解できなくて困ってます。
#If sw=1
sw=1
LButton::Space
WinGetPos , X, Y, Width, Height, ボタン
MouseGetPos, mX , mY
If X < mX & X+Width > mX
If Y < mY & Y+Height > mY
sw = 0
187:名無しさん@お腹いっぱい。
11/02/25 23:53:35.06 r6PtuCBx0
>>185
有難うございます!無事できました!
Ctrlと無変換の押し順序関係なく行けます。
助かりました。
testmsgboxを任意のものに置き換えてやってます。
ただ私、素人なのでちょっと分からないので、
おそらくコレに関係ない初歩的な問題でしょうが、
Ctrlを右のCtrlを使用したときに、右のCtrlを
押しっぱなしだと発動しないということです。
左Ctrlは問題なく発動してくれますが。
有難う御座いました。ほんと助かります。
188:名無しさん@お腹いっぱい。
11/02/26 00:13:47.72 S1p+AZ5K0
autohotkeyからプログラムを実行してその返値を取得するようなことはできますか?
具体的には、コマンドプロンプトから実行するようなもの(例えばdirコマンド)を実行して、その結果を取得したものをautohotkeyで直接受け取れればいいのですが
ダミーのテキストファイルを経由してやりとりすることをまず考えましたが
autohotkeyと外部アプリ間で直接やりとりできれば効率的だと思いましたので
189:186
11/02/26 00:34:17.76 FB63iWjs0
すいません、whileでなんとか解決できたんですが
やはりwhileのループから抜け出れません・・・
アドヴァイスお願いします・・・
#If sw=1
sw=1
LButton::Space
While sw=1{
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY, OutputVarWin, OutputVarControl ,AltMethod
If (X < mX & X+Width > mX)
{
If (Y < mY & Y+Height > mY)
{
sw = 0
}
}
}
190:名無しさん@お腹いっぱい。
11/02/26 00:46:50.66 S1p+AZ5K0
>>189
sw = 0の直後に抜けるというなら
break
URLリンク(sites.google.com)
を書けばいいのでは?
191:186
11/02/26 01:05:04.02 FB63iWjs0
なんかループを出れない原因がわかりました。
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY
Msgbox X=%X% mX=%mX%
#If sw=1
LButton::Space
だとMsgboxが表示されるのに
#If sw=1
LButton::Space
WinGetPos , X, Y, Width, Height, ツール
MouseGetPos, mX , mY
Msgbox X=%X% mX=%mX%
だとMsgbox自体が表示されません
これはどうしたらいいのでしょうか??
192:名無しさん@お腹いっぱい。
11/02/26 01:15:00.10 FB63iWjs0
>>190
アドヴァイス有難うございます
でもじつはまだループにすら入ってなかったですOTL
193:名無しさん@お腹いっぱい。
11/02/26 01:24:18.10 9t4kRLPO0
せっかく #If 使ってんだから、クリック発生時のときだけマウス直下の情報を調べればいいんで、
ループなんぞする必要はないよ。
あと、ウィンドウタイトルってかなり曖昧ってことを知っておこうぜ。
「ツール」ってフォルダをエクスプローラで開いていたら、タイトルは「ツール」になって判別つかない。
ウィンドウを一意に識別できる唯一の手段がウィンドウハンドル(ID)なんで、それを使って厳密にやった方がいい。
お絵かきソフトの自作ツールバーの人だと思うけど、自前のGUIならハンドル取るのはたやすい。
; 以下の2行を Gui, Add, ... の後ろあたりに入れて、GUIのハンドルを変数に入れておく
Gui, +LastFound
HwndToolbar := WinExist()
; これ以降はホットキー定義
#If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
LButton::Send, {Space}
#If
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,, hwnd ; マウス下の窓だけ分かればいい
Return (hwnd == target)
}
※ 一番大事な事はスクリプトの流れをきちんと知れ。この辺でも読んでおくといい。
URLリンク(sites.google.com)
194:名無しさん@お腹いっぱい。
11/02/26 01:52:37.63 FB63iWjs0
>193
解説有難うございます。
じっくり読んでみます。
もしかして・・・ループにすら入って無かったのは
MouseGetPosはクリックしたら発動なのに
左クリックがスペースに置きかえられているから
MouseGetPosが発動しないというオチなのかああああ
195:名無しさん@お腹いっぱい。
11/02/26 02:39:35.45 9t4kRLPO0
まったく的外れ。オチも何もない、調べるところはちゃんと調べれ。それだけ。
196:名無しさん@お腹いっぱい。
11/02/26 05:02:05.79 FB63iWjs0
>195
有難うございます
改行だったんですね、この違いは・・・
こんな感じになりました。
ただ
LButton::Space
だと長押しとかマウス左クリックを押している間Spaceが押されているのですが
(当然ながら次の行にいかない)
LButton::
Send,{Space}
だと一回押されてるだけっぽいのですが
どうしたらLButton::Spaceと同じ動きで次の行もちゃんと実行されるのでしょうか??
LButton::
Space
だとエラーが出ますしどうしたものかと・・・OTL
Tenohira:
WinActivate, ahk_group mypaint
sw=1
#If sw=1
LButton::
Send,{Space}
If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
sw=0
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd ; マウス下の窓だけ分かればいい
Return (hwnd == target)
}
#If
Return
197:名無しさん@お腹いっぱい。
11/02/26 11:46:26.80 lLtS88dm0
標準出力に関してなんですが、
今まで海外フォーラムにあるDllCallを使ったものを利用してましたが
>>28を見てCOMオブジェクト?を使うとこんなに短くなるんだと驚きました
これ一瞬コマンドプロンプトが見えるのですが、
何も表示しない様にするにはどうしたらいいのでしょうか?
198:名無しさん@お腹いっぱい。
11/02/26 12:45:25.45 L2Mgage90
ん~、>>28にも書いた通りで、基本的に非常時にはできないんだよね。
ただ、AHK自信がコンソールアプリになっちまえばいいんで
DllCall("AllocConsole")
ってやるとコンソールがでるんで、それ以降のコンソールアプリは別窓が出なくなる。
まー、これじゃ本末転倒なわけで、標準出力を得て加工して終わりってちょっとしたツールなら
全く意味がない。
常駐アプリだったら、
DllCall("AllocConsole")
Process, Exist
WinWait, ahk_class ConsoleWindowClass ahk_pid %ErrorLevel%
WinHide
ってやると一瞬出てるけど消せるんで、起動時に一階だけ我慢すればあとは出さないで済むって感じにできる。
199:名無しさん@お腹いっぱい。
11/02/26 12:49:21.89 L2Mgage90
それにしても誤字脱字がヒドいなw
200:名無しさん@お腹いっぱい。
11/02/26 17:54:16.33 lLtS88dm0
>>198
ありがとうございます、
やっぱり基本的に非表示は無理でしたか。
常駐させる使い方はしてないので素直にDllCallにしておきます。
今後他で常駐させる必要が出てきた場合には参考にさせて頂きます。
201:186
11/02/26 19:46:49.18 FB63iWjs0
すいません、どうしてもうまくいきません
アドヴァイスお願いします。
Tenohira:に入った時に
マウス左クリックをSpaceキーにして
その際、ツールウィンドウの上に来たときはSpaceキーを解除したいのです。
自分としてはTenohira:に入った時にsw=1というフラグを立てて
その時だけマウス左クリックをSpaceキーにするような内容にしようとしたのですが
色々いじってもどうもうまく動きません。
#IF内でループを組まずMouseIsOverMyToolbar(target) の関数の中で
条件付けをすればいいのかと思って
If sw=1等入れてみたのですがうまくいかないです・・・
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
; これ以降はホットキー定義
#If MouseIsOverMyToolbar(HwndToolbar) ; 単一式でどうにもならない場合は関数でやる
If sw = 1
LButton::
Send,{Space}
#If
; あらかじめ取得しておいた GUI のハンドルと マウス直下のウィンドウのハンドルを比較
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd,test ; マウス下の窓だけ分かればいい
Return (hwnd != target)
}
Return
202:名無しさん@お腹いっぱい。
11/02/26 20:24:53.25 L2Mgage90
グチャグチャしすぎて何したいかがスクリプトから全く見えてこない。
そのまま貼ったコメントも不適当。
ってか、↑は実質↓と同じ。
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
If sw = 1
LButton::
Send,{Space}
Return
どうしてそうなるかはきちんとマニュアルに書いてある。
ってか、#If のページとか読んでないでしょ。
203:名無しさん@お腹いっぱい。
11/02/26 20:29:39.24 L2Mgage90
あ、違った。もっとヒドいか。
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
If sw = 1
Return
だな。
貼り付けた所だけのスクリプト作って実行してみれば分かる。
直近に実行された行と、ホットキー定義はトレイアイコン操作してメインウィンドウ開けば見られる。
204:名無しさん@お腹いっぱい。
11/02/26 22:55:17.58 FB63iWjs0
#Ifのページ読んでこれなんですよ・・・
うyわあああああん
こうですか・・・
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
#If sw=1
LButton::
Send,{Space}
#If
while(MouseIsOverMyToolbar(HwndToolbar)){ ;ツールウィンドウの上では左クリックは普通の左クリック
sw = 0
}
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd,test ; マウス下の窓だけ分かればいい
Return (hwnd != target)
}
Return
205:名無しさん@お腹いっぱい。
11/02/27 00:02:57.80 FB63iWjs0
ここまでやってみたですが
ツールウィンドウの上でクリックしたときにやっぱり
左クリックがスペースにならないです・・・
なにが・・・おかし・・いで・・・すか・・・OTL
Tenohira:
WinActivate, ahk_group mypaint
sw = 1
#If sw = 1
LButton::
Send,{Space}
#If
while(sw=1){
If MouseIsOverMyToolbar(HwndToolbar)
sw = 0
break
}
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd
Return (hwnd == target)
}
Return
206:名無しさん@お腹いっぱい。
11/02/27 00:27:58.30 EaDNfPFc0
方針は分からなくもないし、論理としての方向性はまちがってなさそう。
ただ、スクリプトに対する理解が 絶 対 的 に 足 り て な い 。
それに、殆ど代わり映えに無い動かないスクリプトばかり貼るのはどうかと思う。
もっと、じっくり考えてからレスしようぜ。
マニュアル読んでるといってるけど、ページ下部のサンプル動かしたりしてないんだろう。
そういうのも含めて「読め」ってことだよ。
急がば回れだ。
207:名無しさん@お腹いっぱい。
11/02/27 00:54:50.27 /UT/Z5GV0
うーん、じつはやってるしスクリプトの動きは
こうなるんだなっていうのは分かるんですけど
「スクリプトに対する理解が 絶 対 的 に 足 り て な い 。」
だと思います。
もうそれ以前の問題で・・・
「#IfWin~ ディレクティブに似て、#If は位置を指し示すもので、以降のスクリプトに記述されたホットキーとホットストリングが有効かどうかに影響を与える。
つまり #If と #IfWin~ は排他的であって、直上の #If または #IfWin~ が実効性を持つ。 」
実はこの文章の意味すらまったく理解できてないです
なにを言ってるかまったく分からないです・・・
208:名無しさん@お腹いっぱい。
11/02/27 01:19:37.56 /UT/Z5GV0
具体的に質問ですけど
パラメータの無い#Ifは一体なんでしょうか??
例3と比較しても例4の6行目がエラーで動かないので分からないんですが・・・
209:名無しさん@お腹いっぱい。
11/02/27 03:15:28.80 UujhPftF0
プログラムまったくわからないのですが、キーボードのキーを押したら、指定のファイルが指定のフォルダに移動してくれるような
ものがあれば便利だと思って、このソフトを試してみました。
質問なんですが、Gのキーを押したら、すべてのファイルを、移動するコマンドって
g::
FileMove, C:\My Folder\*.*, C:\My Folder1\*.*
return
でいいんでしょうか?動作したのでいいんだと思うのですが、自信がなくて聞いてみました。。
あと、ウィンドウズで、フォルダの中の、選択したファイルだけを移動したいのですが、どういうコマンドを使うのでしょうか?
全部選ぶっていうコマンドが * アスタリスクで指定できることはわかったのですが、 指定したファイルだけを移動っていうのがわからなくて。
210:186
11/02/27 03:25:23.22 /UT/Z5GV0
ごめん解決した
Dkey:
sw = 0 ;他のボタンを押したら左クリックをSpaceにしない
WinActivate, ahk_group mypaint
Send, d
Return
Tenohira:
WinActivate, ahk_group mypaint
sw = 1;ここでsw=1にして左クリックがSpaceの条件を一個満たす
#If sw=1 and MouseIsOverMyToolbar(HwndToolbar)
;↑ここに&でsw=1を付け足せばいいだけだったOTL
LButton::Space
MouseIsOverMyToolbar(target) {
MouseGetPos,,,hwnd ; マウス下の窓だけ分かればいい
Return (hwnd != target):ツールウィンドウの外のときに左クリックがSpaceの条件を一個満たす
}
Msgbox超お騒がせしました。本当にすいませんでした
Return
211:名無しさん@お腹いっぱい。
11/02/27 03:52:13.37 rqgddGb60
ID:/UT/Z5GV0
どうしてスクリプトなんか書こうと思ったの?
212:ID:/UT/Z5GV0
11/02/27 04:16:59.18 /UT/Z5GV0
>>211
話が長くなるけど
もともとMyPaintという
好きなお絵かきソフトがあって
それの独自形式のファイルを
フォトショップのPSDファイルに変換したくなって、
半年ぐらい頑張ってなんとか変換ソフト作ったんです。
そのあと、その好きなお絵かきソフトを使いながら
そのPSDの読み込み書きだしをして
他の画像変換ソフトと連携がしやすいような
(Mypaintには画像の変形とかいう機能がまったく付いていない)
ユーザーインターフェースを追加したかったんです。
213:名無しさん@お腹いっぱい。
11/02/27 05:21:09.77 rqgddGb60
半年かけて…っていうのは沢山の助言を受けてじゃない?
今のあなたの姿勢を見ていると、時間さえあれば完成するって訳じゃなさそうだから。
人に手取り足取りやり方を教えるのは
自分でとっとと仕事しちゃうより難しいんだよ。
214:ID:/UT/Z5GV0
11/02/27 06:22:19.80 /UT/Z5GV0
そうですね、2ちゃんでものすごく教えて貰いました。
基本的にBasicとCは実務経験がありますが
改造するとか読んで流れを頭にたたき込んでおく為で
>207で書いたようにプログラムの用語とか分かんないです。
最初、こんなフリーソフト作って下さいスレで依頼したら、
やれば出来る、自分でやれって言われて
ヒント貰って初心者スレに行って・・・って感じで
ほぼRPGお使いゲームみたいな流れでしたね・・・・
とりあえずMyPaintスレに投下した完成ソフトはこれです。
URLリンク(www1.axfc.net)
本当にお騒がせ&お世話になりました。
215:名無しさん@お腹いっぱい。
11/02/27 08:46:25.62 EaDNfPFc0
え゛、C使った事あるんかい。
なら、AHK の #If は C の #ifdef とかと同じプリプロセッサみたいなもんだと分かりそうなもんだが。
216:名無しさん@お腹いっぱい。
11/02/27 09:01:20.28 EaDNfPFc0
>>209
あってるよ。
ファイルの指定の仕方は、ファイルパスをそのまま書くだけでいい。
複数指定したいなら、面倒でもその分だけコマンドを並べてやる必要がある。
217:名無しさん@お腹いっぱい。
11/02/27 10:39:07.21 /UT/Z5GV0
>>215
実際みたプログラムに無かったのかもとしか・・・。
一般的なプログラムでも無かったですし・・・。
#が付くなんて#インクルード(綴りすら覚えてない)ぐらいしか
覚えてないですし・・・。
まあ、そんなレベルですよ。
218:名無しさん@お腹いっぱい。
11/02/27 15:01:21.71 p05EqjHp0
#Ifwinactive で複数のアプリを同時指定することはできますか?
219:名無しさん@お腹いっぱい。
11/02/27 15:13:46.21 EaDNfPFc0
>>218
1) GroupAdd でグループに追加して ahk_cgoup を指定
GroupAdd を実行しないと該当グループは空のままなので、
Autoexecセクションに GroupAdd を記述するなどしてやる必要がある
GroupAdd, Explorer, ahk_class CabinetWClass
GroupAdd, Explorer, ahk_class ExploreWClass
Exit ; Autoexecここまで
#IfWinActive, ahk_group Explorer
Space::MsgBox, エクスプローラ
2) 正規表現で指定する
ただし、Autoexecセクションで 「SetTitleMatchMode, RegEx」 してやる必要がある。
SetTitleMatchMode, RegEx
Exit ; Autoexecここまで
#IfWinActive, ahk_class (?:Explore|Cabinet)WClass
Space::MsgBox, エクスプローラ
220:名無しさん@お腹いっぱい。
11/02/27 15:52:20.10 K+0GU3nW0
>>219
できました!分かりやすく大変ありがとうございました <(_ _)>
221:名無しさん@お腹いっぱい。
11/02/27 17:18:20.45 FlTUhvdp0
ハンドル(?)がahk_class SunAwtFrameであるソフトが複数ある場合、そのうちのひとつを
特定して起動したりアクティブにすることはどうやれば可能でしょうか?
ただし、タイトルのなかに固定した語句がなくて、タイトルのほうでも指定できなくて困ります。
2chブラウザV2Cのことなんですけど。
御知恵を拝借できれば幸いです
222:名無しさん@お腹いっぱい。
11/02/27 17:57:10.14 EaDNfPFc0
クラス名だぬ
起動は普通に .exeや .lnk をRunすりゃいいだけじゃないかね。
Java や Adobe AIR で作ったものなどクロスプラットフォーム製品は厄介な事が多くて、
情報が殆ど取れない。
複数ウィンドウから目当てのものを特定するための手段として残っている汎用的な手法は
プロセスIDで更に絞り込みをするくらい。
ただし、1プロセスに複数ウィンドウがあり、それらのクラスが全部同じ場合は判別がつかない。
その際に、WinActivateの第3引数の除外タイトルなどを上手く使えば余計なのは除外できるかもしれない。
Process, Exist, 調べたいプロセス名
PID := ErrorLevel
WinActivate, ahk_class SunAwtFrame ahk_pid %pid% ; クラスとプロセスIDで二重に絞り込み。
※ Java で java.exe を叩いている場合はもっと厄介で、プロセス名が全部おなじになる。
その場合は、COM経由でコマンドラインから PID を調べてやるなどをしてやらないといけない。
; コマンドラインからPIDを調査する関数。matchModeに1を指定すると中間一致。
GetPidFromCommandLine(commandLine, matchMode=0) {
For p in ComObjGet("winmgmts:").ExecQuery("SELECT processId FROM Win32_Process WHERE CommandLine " (matchMode ? "LIKE '%" commandLine "%'" : "='" commandLine "'"))
Return p.processId
}
223:名無しさん@お腹いっぱい。
11/02/27 22:02:27.72 FlTUhvdp0
>>222
レスありがとうございました。すごい難しそう。
これ聞かないと絶対むりですね。
ちょっとタスクマネージャーをみたところ、
プロセス名がV2Cとほかのjavaソフト(?)で同じでした。
もっと厄介なパターンみたいですね。
その難しい文字列をどうつかっていいのかわかりませんが、これから格闘してみます。
ありがとうございます。PIDがわかったところでその先、見当つきませんが。
ちなみに、「起動していないなら起動、既に起動してるならアクティブ」をやりたいのです。
ありがとでした
224:名無しさん@お腹いっぱい。
11/02/27 22:33:06.12 keFGfV0/0
autohotkeyからCOMを操作できる人は
他のプログラミング言語に精通しているのかな
basicとautohotkeyしかできない私にとっては驚きの機能ばかりです
すごいですね
225:名無しさん@お腹いっぱい。
11/02/27 23:55:10.83 CkrSeCK+0
先へ進むんだ
ノートPCにPgUp, Homeとかが欲しくなる
↓
コンビネーションも使えるAHKでリマップすることに
↓
最前面表示のトグルとか便利だから組み込みコマンドを使い始める
↓
InputBoxじゃ不満になってGUIに手を出しAHKに翻弄される
↓
一通りAHKを理解し、小物のexeを作りまくる
↓
常駐ソフトをすべてAHKで代替するべくSendMessageやDllCallを使い始める
↓
オブジェクトを使いこなすためにJavaScriptを学び始める
226:名無しさん@お腹いっぱい。
11/02/28 00:52:50.28 46Pp3Lej0
>一通りAHKを理解し、小物のexeを作りまくる
俺、いまにまさにここ
dllは独自に使いたいけど全く意味がわからない
dllcallのサンプル書いてくれた人のスクリプトを丸ごとコピペして使ってる
ちょっと自分でいじろうとすると必ず返答がnullになって愕然とする
227:名無しさん@お腹いっぱい。
11/02/28 01:08:16.56 ovVX3/ps0
DllCallは使えるようになるまで1年以上かかった。
いじっては動かず、いじっては動かず、の繰り返し。トライ&エラーは数知れず。
228:名無しさん@お腹いっぱい。
11/02/28 03:57:36.21 1NNFFOIJ0
プログラミング歴そこそこ長いけどWinAPIとかCOMとかどうやって勉強すればいいのかもわからん
229:名無しさん@お腹いっぱい。
11/02/28 05:55:28.72 O1fN0ZG/0
常駐ソフトのほとんどをAHKで置き換えることができない俺
Proxomitronとかどう考えても無理だwww
230:名無しさん@お腹いっぱい。
11/02/28 07:23:16.42 1NNFFOIJ0
いまのバージョンのAutohotkey_LでURLエンコードする方法を教えてください
231:名無しさん@お腹いっぱい。
11/02/28 07:34:33.99 ovVX3/ps0
StrPut で指定文字列を指定エンコードに変換してバッファに書き込み、
バッファのデータを NumGet または *(addr) で1バイト毎に参照して、
そのコードを15進数に置換して文字列として追記格納。
232:名無しさん@お腹いっぱい。
11/02/28 15:03:51.16 eCV3tF/E0
このソフトのお陰でJavaのGoFデザインパターンを勉強せざるをえなくなったじゃねぇか・・・orz
233:名無しさん@お腹いっぱい。
11/02/28 16:37:18.69 NYUfAEeUi
GoFってあったっけ?と
Chain of Responsivilityみたいなやつの略語かと一瞬考えちまった。
234:名無しさん@お腹いっぱい。
11/03/01 00:32:01.16 BFiuYPb80
>>216 ありがとうございます。まるでわからないことだらけですが少しづつ消化していきたいなとおもいます。
またわからないときは質問させていただきたいとおもいmす。
235:名無しさん@お腹いっぱい。
11/03/01 03:55:44.62 0vFLdOs/0
AutoHotkeyで下駄配列みたいなのを作ろうとしたけれど、同時押しシフトを複数定義すると単打ができなくなる。
原因と解決方法を教えてくれ。
dをシフトキーにした例
$d::Send,d
d & $q::Send,dq
d & $w::Send,dw
d & $e::Send,de
d & $r::Send,dr
d & $t::Send,dt
d & $a::Send,da
・
・
・
$q::Send,q
$w::Send,e
$e::Send,e
$r::Send,r
$t::Send,t
$a::Send,a
・
・
・
q & $d::Send,dq
w & $d::Send,dw
e & $d::Send,de
r & $d::Send,dr
t & $d::Send,dt
a & $d::Send,da
・
・
こうするとなぜかqやwやeなどが単打で何もでなくなる。
236:名無しさん@お腹いっぱい。
11/03/01 04:02:04.96 QkTRwwEM0
>>235
それってコンビネーションキーの仕様じゃないか
チルダ「~」つけないと一つ目のキーは無効化されるって書いてあるぞ
237:名無しさん@お腹いっぱい。
11/03/01 05:03:12.98 0vFLdOs/0
それはそうなんだが、無効化された後に再び無効化されたキーを定義すると(上のスクリプトの$d::Send,dとか、$q::Send,qとかのぶぶんね)
新たに定義されたキーが有効になるはずなんだが、
キー定義が増えてくると(?)それが効かなくなるんだよね。
dvorakjの人は一体どうやってるんだろう?
238:名無しさん@お腹いっぱい。
11/03/02 00:25:28.18 SGwEtAAf0
>>237
dvorakjの同時打鍵の原型は スレリンク(pc板:282番) がアップロードしているautohotkeyのスクリプト
(.ttfを.txtに変える必要あり)
★Axfc UpLoader 小物板 -File_13163.ttf-
URLリンク(www1.axfc.net)
ソースの598行目以下を見ると分かるように、
コンビネーションキーを一切使っていないのがポイント
下駄配列みたいなのを作るなら、このスクリプトを編集することから始めればいいと思う