AutoHotkey スレッド part24 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1名無しさん@お腹いっぱい。 転載ダメ©2ch.net (ワッチョイ 997d-+Qhn)
垢版 |
2017/02/15(水) 18:04:32.01ID:kshCKhXn0
!extend:checked:vvvvv:1000:512と次スレを立てる際は1行目に記入してください

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part23
http://potato.2ch.net/test/read.cgi/software/1470936221/

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
2017/02/16(木) 01:54:37.17ID:Hw1FRYME0
>>12
wikiの「ウィンドウ指定の方法」のページをよく読め
2017/02/16(木) 02:01:06.97ID:kh3cI+d4r
WinMove, A,, x,y,w,h
アクティブウインドウすべてって意味が分からないが同じプロセスの複数のウインドウって意味ならahk_groupかWinGetでlist作ってLoopかな
2017/02/16(木) 02:04:49.72ID:kR5g/uiD0
>>13
読んでみます

>>14
パットウィンドウを開いたときに小さい場合、簡単に大きくするのが目的なので
現在アクティブなウィンドウのみに作用できればそれでOKなんですが、
今は指定したタイトルのウィンドウ(アクティブでない場合も作用してしまう)にしか作用してくれないです。
2017/02/16(木) 02:09:19.74ID:kR5g/uiD0
>>13
>>14

;ウィンドウリサイズ
#!Numpadadd::
winsize()
return

winsize(){
WinMove,A,,1300, 100,1200,1500
}

簡単にできました。ありがとうございました。

出来てみると、「直前のサイズに戻す」もやりたくなってきました。
2017/02/16(木) 13:11:49.55ID:jjXXp67P0
パソコン2台モニター4枚使っています
で、パソコンAのマウス、キーボードでパソコンBも操作していて、Mouse wituout Borders(MWB)を使っています

パソコンAでコピーしたテキストはこのMWBを使えばパソコンBでペーストできるのですが、
パソコンAでテキストをコピーすると、パソコンBである処理をさせるというのを自動でしたいのです

パソコンAのAHKスクリプトで、パソコンBのスクリプトを作用させることって出来ますか
2017/02/16(木) 13:15:31.96ID:jjXXp67P0
例えば、SendMessageを使うと、同じパソコン内の別のスクリプトにメッセージを送ることは出来ますが
他のパソコンのスクリプトにメッセージを送る方法があるとか?
2017/02/16(木) 14:35:48.97ID:1T8DysXM0
LAN間メッセージならWinSock
ググったらAHKsock.ahkてのが出てきたからそれ使えばできんじゃね
UACやファイアウォールは適宜設定で
2017/02/16(木) 19:41:02.31ID:rLJDfIZX0
>>17-18
PC-B の方で OnClipboardChange を定義してみては?
https://sites.google.com/site/autohotkeyjp/reference/misc/Clipboard
2017/02/16(木) 23:12:05.79ID:ye2J2HHb0
>>16
ウィンドウサイズの変更なら、このあたりが参考になると思う
http://autohotkey.s365.xrea.com/window_show.html
ポップアップメニューにするなら
http://blog.blueblack.net/item_407
キーボード操作にしたいのなら、CoordMode,Mouse,Screen〜の4行はいらないんじゃないかな
ついでに、
http://ahkwiki.net/Menu#.E3.82.BF.E3.82.B9.E3.82.AF.E3.83.88.E3.83.AC.E3.82.A4.E9.96.A2.E4.BF.82
>メニューアイテム名に &a のように & に続いて英数字を〜
を組み込めば、キーボードだけで柔軟にサイズ・位置変更ができると思う
2017/02/17(金) 00:29:57.50ID:waXhf69C0
>>21
ありがとうございます。自分は最近大きなモニターを買ったり前から持っていたモニターと併せて3枚にしてみたりしていて
新しく開くウインドウがあまりに小さく遠くに開いてしまうことが多かったので
簡単にメインの大きなモニターの中央にそれなりに大きくするコマンドを作成したかったのですが、
いざやってみると全部同じ位置に集まってしまうのでwトグルでもとに戻したりしたいなと思い、
ifとかいろいろ組み合わせて、一つのウインドウを拡大→元通り→拡大 を同じ操作でトグルさせること自体はできたのですが、
途中で別のウィンドウを触ってしまうとメッチャクチャになってしまうwことが判明しました。
基本的なフローが頭にできていないからダメなんですけど、

隅っこにウィンドウが開いてしまった→操作A大きくして中央に移動→別のウィンドウをクリック(それなりになにか操作)
→さっきの大きくしていたウィンドウをクリック→操作A元の場所に戻す

などできるようにするには多分ウィンドウ特定する固有の値を取得してそれぞれの状態を
触れたウィンドウ全部についてどんどん蓄積していかなくてはならないのかなーなどと考えています。
道のりは長そうです。
2017/02/17(金) 00:33:08.13ID:waXhf69C0
お恥ずかしい限りですが、作ったスクリプトはコレです。
マウスの中ボタンプラス左クリックでトグル操作するようにしました。
これだと一つのウィンドウだけいじってる間は問題ありませんが、
途中でほかのところを触ったとたんにぐちゃぐちゃになります。


;ウィンドウリサイズ
MButton & LButton::
if tog = 1
Gosub,Label1
else
Gosub,Label0
return

Label0:
WinGetPos, X, Y, Width, Height,A
WinMove,A,,1300, 100,1200,1500

tog = 1
; MsgBox %tog%
return

Label1:
WinMove,A,,%X%, %Y%,%Width%,%Height%

tog = 0
; MsgBox %tog%
return
2017/02/17(金) 08:02:49.16ID:UhCxCwGJ0
>>20
出来ました。こんな方法があったんですね。 これでいきます
2017/02/17(金) 12:40:18.45ID:IGN6zQZQ0
windows,Shift,mのコマンドをShift長押しで出力するものを作りたいのですが、3キー同時押しのコマンドがどうしても出来ません。
そのようなことはできるのでしょうか?
2017/02/17(金) 13:09:16.89ID:jgyqu4id0
>>25
+#m

質問するならまず自分の書いたスクリプトを張った方がいいぞ
2017/02/17(金) 15:04:04.80ID:KGsRqZeY0
なにこのメールこわ
2017/02/17(金) 15:54:12.08ID:IGN6zQZQ0
26>>
$+::
KeyWait,+, T0.3
if ErrorLevel
send,{Shift}
else
send,+#{m}
keywait, Shift
return
です。
ほかの人が作ったものを自分で改変したものです。もともとは
$m::
KeyWait,m, T0.3
if ErrorLevel
send,#{m}
else
send,{m}
keywait, m
return
です。
2017/02/17(金) 16:47:23.91ID:1vTfdLX7H
そもそも Shift+Win+m の組み合わせはahk関係無く使用できないのでは?
キー入力検出ソフトでも Shift+Win+m を同時押ししても検出できないし
ちなみに Shift+Win+n や Ctrl+Win+m などは使える
OSが認識できないものはahkでも当然無理だし送ることも受けることも出来ない
2017/02/17(金) 18:03:26.95ID:KpKwj6iW0
つNキーロールオーバー
>>28
長押ししてタイムアウトしたら、 ErrorLevel は 1。つまり Send コマンドが逆だと思うけど
あと、うちだと + や Shift だとだめで、RShift や LShift でやればいけたよ
2017/02/17(金) 18:28:20.86ID:IGN6zQZQ0
>>30これでよいのですか?
$LShift::
KeyWait,LShift, T0.3
if ErrorLevel
send,{LShift}#{m}
else
send,{LShift}
keywait, LShift
return
しかし、これだと、win+mと同じ動作をしてしまいます。
私はwin+mで最小化したウィンドウをShift長押しで開きたくて、そのコマンドがwin+Shift+mなのですが、3キー同時出力ができず、
なぜかwin+mの動作と一緒になってしまい、ウィンドウが最小化してしまいます。
2017/02/17(金) 18:33:22.19ID:KpKwj6iW0
>>31
Send の引数の指定は >>26 でいいんじゃないの
2017/02/17(金) 18:51:47.17ID:IGN6zQZQ0
>>32できました!!ありがとうございます。
$RShift::
KeyWait,Shift, T0.3
if ErrorLevel
send,+#m
else
send,{RShift}
keywait, RShift
return
2017/02/17(金) 19:31:05.99ID:KpKwj6iW0
あぁ、これ Windows のショートカットキーか。上でキー入力ソフトで検出出来なかったっていうのは、そのせいかもしれんね
2017/02/18(土) 07:29:39.06ID:OYYffKZK0
OnClipboardChangeについてです
Wikiにある例で、

#Persistent
return
OnClipboardChange:
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return

と書いていたとします
で、このスクリプトを最初から起動するときはいいのですが、
リロードするときは、リロードした瞬間にこのルーチンが起動して
ツールチップが表示されてしまいます。コピーはしていないのに。
リロードした瞬間にOnClipboardChange:に入らないようにするには
どうしたらいいですか

ちなみに今は変数を使ってスクリプト先頭に flag = 1 として

OnClipboardChange:
if flag = 1 return
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return

とかやって誤魔化しています
また、#Persistentはあってもなくても同じです
2017/02/18(土) 07:47:06.41ID:OYYffKZK0
訂正します。 最初から起動するときもやはりOnClipboardChangeに入っていました
Wikiにも
このラベルは、スクリプトが開始された直後にも実行される。
と書いています
しかし、

flag = 1
Sleep, 1000
flag = 0
return
OnClipboardChange:
if( flag > 0 )
return
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return

とすると、回避できます。これしか方法はないのかな
2017/02/18(土) 08:18:26.79ID:Hk0iB5Hc0
>>36
https://autohotkey.com/docs/commands/OnClipboardChange.htm

この例は、スクリプトが最初に起動したときに関数が呼び出されないことを除いて
OnClipboardChangeと同じです。クリップボードの内容が変更された場合のみです。

#Persistent
OnClipboardChange("ClipChanged")
return

ClipChanged(Type) {
ToolTip Clipboard data type: %Type%
Sleep 1000
ToolTip ; Turn off the tip.
}
2017/02/18(土) 08:34:34.76ID:92Fl7ir90
ttp://i.imgur.com/EZhndfp.jpg
あるウィンドウだけウィンドウスタイルをこういうクラシックスタイルにしたいんですけども
winsetで指定できるウィンドウスタイルにそれっぽいのが見つかりません。
ahkでそういうのって可能ですか?

DllCall("dwmapi\DwmEnableComposition", "uint", false)
とか試してみたんですけど全てのウィンドウが中途半端にAeroオフになるだけで駄目でした。
2017/02/18(土) 08:45:38.27ID:OYYffKZK0
>>37
なるほど。ありがとうございました
2017/02/18(土) 09:09:37.75ID:OYYffKZK0
>>37
実際にこれを使って作り変えてみました。ばっちりでした。ありがとうございました
41名無しさん@お腹いっぱい。 (オッペケ Sr07-r/J+)
垢版 |
2017/02/18(土) 19:11:20.89ID:KUL6+Z39r
おい、日産よ!
いつまで無視出来るかなww
日産自動車栃木工場上三川寮
管理人は合鍵を使い従業員の部屋に無断で侵入。
抜き打ちで従業員の私物を全て調べるブラックの中のブラック企業。
残業賃金一部未払いの最低のクズ会社
2017/02/20(月) 23:16:31.90ID:5RugC6ZF0
質問させてください
アクティブウィンドウの位置を取得する際に、
取得する座標をウィンドウタイトルに関連した変数として取得したいです。
まずタイトルを取得して

WinGetActiveTitle, Title01
WinGetPos, X%Title01%, Y%Title01%, W%Title01%, H%Title01%,A
WinMove,A,,1300,100,1200,1500
MsgBox, %X%Title01%%
return
2017/02/20(月) 23:21:13.22ID:5RugC6ZF0
すいません途中で書き込んでしまいました。
キーがおかしいw

まずタイトルをTitle01という変数名に取得します

     WinGetActiveTitle, Title01
そしてこのTitle01に座標を関連させて4つの変数を決めます。
XTitle01 YTitle01 WTitle01 HTitle01
この変数にウィンドウの位置を取得させたいのですが、
WinGetPos, X%Title01%, Y%Title01%, W%Title01%, H%Title01%,A

これで取得できるでしょうか?

MsgBox, %X%Title01%%

これで書き出しても空欄になってしまいます。
ただ %X%Title01%% これがおかしいのは自分でもわかりますwww

「変数1%変数2%」
という表現や書き出す際にそれを表示させるにはどうすればいいでしょうか?
2017/02/20(月) 23:35:51.43ID:LEVOvOAT0
1.
hoge := X%Title01%
MsgBox, %hoge%

2.
MsgBox, % X%Title01%
2017/02/21(火) 00:40:49.28ID:UifnTonW0
>>44
ありがとうございます。
前進しました。

2.
MsgBox, % X%Title01%

これはどういうことでしょうか。
やってみたら、普段Msbと表示されるメッセージボックスのタイトルバーにも数字が
現れましたが、、
2017/02/21(火) 00:48:04.95ID:UifnTonW0
いや、なんだか混乱してきました。
出直します。ありがとうございました。
2017/02/21(火) 01:59:45.49ID:nheq0azW0
'% 'はahkのわかりづらいとこだな ググりにくいし
2017/02/21(火) 02:34:26.26ID:UifnTonW0
すみません、やっぱりうまくいきませんでした。

^#!Numpad1::
WinGetActiveTitle, Title00
hoge:=X%Title00%
MsgBox, %hoge%
return

これで、コントロール+ ウィンドウズ+alt+1で、
英語タイトルのウィンドウがアクティブの時はメッセージボックスは空白になり、
日本語を含むタイトルのウィンドウのときはイリーガル文字が使われてるというエラーメッセージがでます。

目的としては
ウィンドウ位置を移動させるコマンドを実施した時にアクティブなウィンドウの移動前の座標をタイトル文字を使った変数として覚えておいて、
必要な時に再度コマンドを実施した時にその位置に移動させたい(戻したい)という感じです。

ある一つのウィンドウだけではなく、いろんなウィンドウに対応させたいので四苦八苦している感じです。

変数とか配列とかよくわかっていない素人なので、、
2017/02/21(火) 03:55:56.99ID:IYHQ65RM0
変数名に空白とか漢字とか使えないんじゃね?配列の添字で実現すればいいよ。
Global titles := [] ; 配列
とかしておいて
WinGetActiveStats, title, w, h, x, y
titles[title] := [] ; さらに配列
titles[title].w := w
titles[title].h := h
titles[title].x := x
titles[title].y := y

取り出すときは
x := titles[title].x
y := めんどい。同様に。
ほんで
WinMove, % title,, x, y, w, h
2017/02/21(火) 10:54:25.03ID:zPRLOhIL0
マウスを動かす時、大きく動かしたあと細かく動かそうとした際に上手に動かせずに
苦労することとかがあります
ペイントソフトで特定の範囲を選択したいときとか1ピクセル動かすのに苦労するとか

なので、たとえばシフトキーを押しながらマウスを動かすとゆっくりになるとかをAHKを用いて実装できますか
2017/02/21(火) 12:36:27.91ID:ulZsc9y6r
>>48
昔自分用に作ったウィンドウコントロールに似てる
俺のは特定のプログラムが散らかすダイアログ群がターゲットだったから
記録:
WinGet, array, List, ahk_pid %pid%,, title
n := 0, d := ""
Loop, %array% {
n++
d .= "diag" n "=" ダイアログ呼び出しキー "`t" ターゲットのid(=array%A_Index%)からタイトルと座標を`t区切りで返す関数 "`n"
}
FileAppend, [CONF]DiagMember=%n%`n[DIALOGS]`n%d%, hoge.ini
return

復元:
iniRead, DiagMember, hoge.ini, CONF, DiagMember
Loop, %DiagMember% {
iniRead, diag%A_Index%, hoge.ini, DIALOGS, diag%A_Index%, 0
StringSplit, array, diag%A_Index%, %A_Tab%
Send, %array1%
WinWait, %array2% ahk_pid %pid%
WinMove,,, %array3%, %array4%, %array5%, %array6%
}
return
のようにしてた。
ウィンドウが閉じられずに存在しているならば呼び出しキー不要だし、ウィンドウハンドルを変数名にしてそこに値を格納してAppend使わずにメモリ上で完結出来るんじゃないかな
2017/02/21(火) 13:09:01.51ID:ulZsc9y6r
>>50
その用途なら俺ならグリッド使うがその機能がないならば
昔AutoHotkeyフォーラムで拾った関数なんだがURL失念すまん
GetPointerPrecision() {
static root := "Control Panel\Mouse", sub := "MouseSpeed"
RegRead, s, HKCU, %root%, %sub%
return s
}

SetPointerPrecision(th1, th2, spd) {
static sm := 0x0004 ; SPI_SETMOUSE
VarSetCapacity(MySet, 12, 0)
InsertInteger(th1, MySet, 0) ; MouseThreshold1
InsertInteger(th2, MySet, 4) ; MouseThreshold2
InsertInteger(spd, MySet, 8) ; MouseSpeed( MouseSpeed is Not MouseSensitivity )
DllCall("SystemParametersInfo", "UInt",sm, "UInt",0, "Str",MySet, "UInt",1)
}

InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) {
Loop, %pSize%
DllCall("RtlFillMemory", "UInt",&pDest + pOffset + A_Index-1, "UInt",1, "UChar",pInteger >> 8*(A_Index-1) & 0xFF)
}
;使用例
SetPointerPrecision(0, 0, 0) ;タブレットモード
SetPointerPrecision(6, 10, 1) ;トラックボールモード
2017/02/21(火) 13:21:52.79ID:Z5KCL75j0
>>50
マウスの加速機能はついてないの?
2017/02/21(火) 16:36:30.88ID:XlUCT1ZY0
>>50
RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Mouse, MouseSensitivity, 5

レジストリ直接いじった方が早いそうなので試したけど、うまくいかなかった
再起動しなきゃダメなのかね
2017/02/21(火) 17:36:36.03ID:iWUpBYRA0
>>52
コンパネのマウスのポインターオプションの速度の
ポインターの速度を選択する
ってとこを動かすと、レジストリのMouseSensitivityが1〜20まで変化する

MouseSpeedとの違いが謎だな
2017/02/21(火) 17:41:03.95ID:iWUpBYRA0
>>54
regeditでレジストリを直接いじってみたが、コンパネのマウスにはまったく反映されずに
マウスのプロパティを閉じたりするとレジストリがもとに戻る
レジストリを変更したのをメッセージとして通知せんとダメなんじゃね?
SystemParametersInfoを使うとそれをしてくれるのか
でもダメだったっていうHPもあったなw
2017/02/21(火) 18:27:03.92ID:VNYq5LdE0
>>38
exeのプロパティで互換性→視覚テーマを無効にすれば個別にAero切れる
WinSet, ExStyle, 0x00000080, hoge でさらにクラシックぽくなる

変更する為にはレジストリを変更する必要があるので慎重に
参照: https://w-mashiro.rhcloud.com/pc/windows/252

例: 互換性モードで実行
Path = C:\Users\User\Desktop\TestOS.exe
RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, %Path%, WINVISTASP2 VISTARTM
2017/02/21(火) 19:25:38.86ID:La4vYKtz0
マウスポインターの速度変更ならヘルプのDllCallのサンプルコードにあるけど
2017/02/21(火) 19:41:24.03ID:UifnTonW0
>>49
ありがとうございます。
グローバル関数とはなにか、そもそも関数の扱いがわからないのでネットで勉強することにします。
そこでお尋ねしたいのですが、
titles[title] := [] ; さらに配列 
この四角いカッコはコマンド的に意味のあるものなのでしょうか。
{ }や( )ではなく [  ] をautohotkeyで使う場面がわからないのですが、
何かの一例ということで例えばtitles a というような意味でしょうか。
それとイコールの右側の四角い記号はカッコの組み合わせを隙間なく書いてあるようですがどういう意味でしょうか?
そのカッコの中に何かを書き込めという意味でしょうか?
よろしくお願いします。
2017/02/21(火) 20:05:23.31ID:IYHQ65RM0
>>59
いやー俺もつい2週間前くらいに始めたところでw
配列を [] (大括弧)で書くのと {} (中括弧)で書くのに違いはないってどっかでみたよ
あと Object() て書いても同じことらしい。
他人が読んだときに、どういう意図か伝えるために書き分けるって考え方があって
普通に数字や文字列を入れるときは大カッコがいいかなあと俺は思った。
クラスのインスタンスとか、いろんなもの入れるとかの場合が中カッコ。俺はそうかなと
思っただけ。

でも別に気にしなくてもいいんじゃねw

あと Global も、別のいろんな言語の経験から反射的につけただけ。なくても動くかも
しれない。動かないかもしれない。ごめんねこんなんでw
2017/02/21(火) 22:19:56.43ID:RVqdF5O60
>>57
すごい! それっぽくできました
ありがとうございます
2017/02/22(水) 02:53:24.69ID:dVZ+QgoV0
PCゲームのDeadSpace3の上で、ahkがまったく動作しません。
ゲームなのでもうしょうがないのでしょうか?
英語でちょっとぐぐると同様の人がいるみたいですが、解決策を見つけられませんでした。
対戦ゲームが搭載されていますがメインではないので、アンチチート系のブロックではないと
思うのですが。このスレッドではゲームの話題は却下なのでしょうか
2017/02/22(水) 03:18:30.57ID:SyYG6t1J0
>>62
ahkスクリプトを管理者権限で実行してもダメ?
2017/02/22(水) 04:09:38.36ID:llRBXp7y0
>>60
ありがとうございます。
わからないなりに真似してやってみたところ残念ながらタイトル固有の位置を取得できていない状態です。
同じコマンドでトグル動作するように設定しているのですが、
結局一番最後にウィンドウを中央に移動した直前の位置を覚えているだけみたいで
配列の部分を全部読み込まなくても同様の動きになりました。。。。
添字?でしょうか、なにか書式が違うんでしょうか。。。
次のレスにコピーしますが、もし、、、なにか間違いがわかったらご意見うかがえると幸いです。
2017/02/22(水) 04:11:32.16ID:llRBXp7y0
^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
Global titles := [] ; 配列
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
WinGetActiveStats, t, w, h, x, y
titles[t] :=[] ; さらに配列
titles[t].w := w
titles[t].h := h
titles[t].x := x
titles[t].y := y
WinMove,A,,1300, 100,1200,1500
MsgBox,%t%,%x%,%y%,%h%,%w%,中央
return
Label2:
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
WinMove, % t,, x, y, w, h
MsgBox,%t%,%x%,%y%,%h%,%w%,戻り
return
2017/02/22(水) 05:07:29.61ID:Lnwqrb+t0
>>65
さりげなく画面でかいなおい。

Global titles の行を一番上に、^#!Numpad より上に。
あと Label2 の w とか h とか、:= の前が全角のスペースだったから確認

if (IsObject(titles[t])) {
て書けば、座標を記憶してればどうたら〜って書けるよ。if (titles[t]) { て
書いても動くようだけど。あと
title をキーにして覚えるよりはウィンドウID(HWND)で覚えたほうがいいと思う。
タイトルは変わることがあるからな。

最後俺のミスだけど、titles て変数名はあんまりよくなかったw
windows とかのほうがマシだったわ
そして Global はつけなくても動いた。先頭に title := [] て書いとけばいい。
2017/02/22(水) 12:13:06.28ID:Idlhi0l50
すみません、
Google chrome (正確にはSRWare Iron)上で再生しているHTML5ビデオプレイヤーにフォーカスを合わせる方法ってないでしょうか?
HTML5ビデオプレイヤーにキーをsendしたいんですが、ブラウザ自体をwinactivateしてもそうはならないようで…
2017/02/22(水) 12:59:48.89ID:1sPWRQrc0
>>67
そういうのは俺環で動けば良いって割り切って、
ControlClick でプレーヤー内の影響ない場所を狙い撃ちしてフォーカス合わせてから、
ControlSend でキーを送ってるなぁ
2017/02/22(水) 13:08:23.34ID:NiPWfYF40
ブラウザをアクティブにしたあとでタブ送るとか
2017/02/22(水) 19:29:32.02ID:llRBXp7y0
>>66
ありがとうございます。4kモニター買ったら真ん中以外がすごく操作しづらくてそれで考案中ですw

全角スペースを半角に直したら「戻り」が正しく動かなくなりました。
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
これが機能してなかったのが逆に表面上だけはうまく動いたように見えていたようです。

ウィンドウID(HWND)とは何でしょうか。
調べてみたところautohotkeyにはウィンドウを特定する方法のなかに
個別のIDはなさそうなんですが、、、
http://ahkwiki.net/Window
いい方法があると良いのですが。
if (IsObject(titles[t])) {
これは、titles[t]に値が入っていたら っていう意味でしょうか。。

やりたいことはさほどでもないのに実際挑戦すると深みにはまっていきます。
2017/02/22(水) 19:52:07.18ID:Lnwqrb+t0
>>70
titles := [] を一番上にした?俺実際に動作確認してから書いたんだぞw
ウィンドウIDじゃなかったっけか。一般には HWND で通るんだけどなんか
変わった名前で呼ばれてた記憶があってウィンドウIDだったかなーと思って書いた。
WinExist() のところみたら「ウィンドウのハンドル」て書いてあるね
72名無しさん@お腹いっぱい。 (ワッチョイW 9239-oOoW)
垢版 |
2017/02/22(水) 20:45:28.25ID:llRBXp7y0
>>71
はい。一番上にしたんですけど、、、おかしいなあ。
そちらで動いたのならこのまま欠点を調べてみます。
一番上っていうかショートカットコマンドの上に書きました。
他のスクリプトもいくつかある中で、不安ながら初めてキーコマンドの上に書きました。

ウィンドウのハンドル、調べてみます
ただちょっと腰痛がひどくて取り掛かるまでに時間がかかりそうです、、、
73名無しさん@お腹いっぱい。 (ワッチョイW 9239-oOoW)
垢版 |
2017/02/22(水) 20:47:16.07ID:llRBXp7y0
>>71
スクリプト丸々貼っていただけると有難いのですが、、、
見比べられると見つけられる気がします
いろいろ要求してすみません
2017/02/22(水) 21:13:33.94ID:yvaLHXOma
あ〜むずかしい
日本語の説明書ないかな
英語とかのはあるっぽいんだが
2017/02/22(水) 21:13:59.79ID:Lnwqrb+t0
もう捨てちゃったよ。最初から RAMDISK 上でやったからなー
他思いつくことは
文字コードを utf-8 BOM 付きにした。
うちは 4K じゃないので指定どおりのウィンドウサイズにはならなかった
そのため「戻り」が呼ばれることはなかった。サイズを小さくしたら指定どおりになったけど
その時はすでに IsObject() で分岐するように改変してたから、ウィンドウサイズの判定で
正しく分岐するかどうかは確認してない。ただし MsgBox で表示させてサイズの確認はやった。
76名無しさん@お腹いっぱい。 (ワッチョイW 9239-oOoW)
垢版 |
2017/02/22(水) 21:22:48.29ID:llRBXp7y0
>>75
そうですか、、、
なんでかなあ
ありがとうございます
2017/02/22(水) 22:12:30.20ID:llRBXp7y0
>>75
とりあえずウィンドウのハンドルの取得方法がわかりました
https://sites.google.com/site/autohotkeyjp/reference/commands/WinGet
WinGetでIDを指定するみたいです。

ウィンドウの特定のところでなんでパッと出てこないのか、、
しかしこれプログラム初心者にどっかで教えてくれる場所ないかなー
2017/02/22(水) 22:27:42.26ID:Lnwqrb+t0
ウィンドウハンドルとか置いといて
とりあえず自分で書いたプログラムを動かすことを考えたほうがいいなこれは。
動かさないことには気持ち悪いだろう。

ほんで10行程度のプログラムの説明に100行書くのはごめんだw
79名無しさん@お腹いっぱい。 (ワッチョイ 127c-Vm/o)
垢版 |
2017/02/22(水) 22:31:40.86ID:teNn2wZc0
スクリプト貼り付けpen.ioとか使うのはダメなのかな
アップローダーはちとめんどくさいのはあるが
これだと適当なページ名とパスワード入れるだけで使える
アカウント作成とかも不要
2017/02/22(水) 22:38:36.03ID:a43g1lV70
>>78
一度相手したなら最後までちゃんと面倒みろよ
オブジェクトの説明とかめんどくさいことになりそうだったから俺はレス思いとどまった
2017/02/22(水) 22:43:18.02ID:Lnwqrb+t0
ずっとこの調子でやったらやったで
よそでやれとかいうくせにw
2017/02/22(水) 22:49:41.31ID:2kfOkFZd0
>>79
>>1
> 簡易スクリプト掲示板
> http://pastebin.com/
83名無しさん@お腹いっぱい。 (ワッチョイ 127c-Vm/o)
垢版 |
2017/02/22(水) 23:00:06.64ID:teNn2wZc0
>>82
これ修正するのにアカウント必要じゃない?
2017/02/22(水) 23:23:10.19ID:Ga4mI7520
AHKって書くの面倒なんだよな
ちょっとボタン入れ替えたいときとか不便だわ
自動記述できるようなツール誰も作ってないのかな
2017/02/23(木) 00:41:11.32ID:uTk4Z6DV0
>>84
Dresskey
使ったこと無いけど
2017/02/23(木) 02:03:19.02ID:Ki8zWHFj0
暇つぶしに辞書読むような感覚でリファレンス読んでたら自然に覚えたけどな
初心者だから教えてくれとか言わずにもうちょっと時間かけて努力してみなよ
2017/02/23(木) 02:36:36.48ID:iWncX5Sd0
>>86
結構何時間も試行錯誤した末の質問なんですけどね
サイトは教科書ではないから、頭から読んだけどどうもある程度何かを知っていることが前提になっているようで。
それで質問したらヒントくれる人がいたけど、そのヒントがわからないから
コピペして試行錯誤するしかなくて正直何時間もやった挙句のレスなんですわ
自分で動かしてみろって書いてあるけど、それは何度も繰り返してるんですけどねえ、、、、
2017/02/23(木) 02:50:30.56ID:iWncX5Sd0
titles := [] ; 配列
^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
WinGetActiveStats, t, w, h, x, y
titles[t] :=[] ; さらに配列
titles[t].w := w
titles[t].h := h
titles[t].x := x
titles[t].y := y
WinMove,A,,1300, 100,1200,1500
MsgBox,%t%,%x%,%y%,%h%,%w%,中央
return
Label2:
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
WinMove, % t,, x, y, w, h
MsgBox,%t%,%x%,%y%,%h%,%w%,戻り
return
2017/02/23(木) 02:51:06.75ID:iWncX5Sd0
やっぱりこれは動かないです。
皆さまお騒がせしてすみません。
また試行錯誤します。
2017/02/23(木) 03:58:51.54ID:n/Mbm79B0
よく分かってないやつが出したヒントを鵜呑みにしない方が良いんじゃね
2017/02/23(木) 06:00:59.80ID:tvLqh4DN0
>>88 コピペで動いたぞ
画面サイズ 1200x1500 のところを 600x400 に変えたけど
2017/02/23(木) 10:56:33.91ID:pFFh4T600
gdgdすぎじゃろ、答えるならwikiの該当ページにリンク張るかせめて正しい検索ワード教えたれよ
うろ覚えの単語で適当な説明するから質問者もググれなくて困惑してるやん

>ウィンドウID(HWND)
正しくはウィンドウハンドル、AHK上では ahk_id のこと
Title を ahk_id に変えればオブジェクト使わなくても>43の当初の目的は達成できたと思われ

id:=WinActive("A")
WinGetPos, X%id%, Y%id%, W%id%, H%id%, ahk_id %id%
msgbox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id%
2017/02/23(木) 11:12:27.44ID:tvLqh4DN0
最初に回答書いたのは自信あったからだ。あとは訊かれたから書いたんだ
2/10 にAHKインストールしたとこなんだ。細かいことは勘弁してくれよな
2017/02/23(木) 12:06:10.57ID:YeB1kZ5I0
半年ROMれの典型例
2週間じゃスレの雰囲気もようわからんだろうに

しつこく食い下がってくる質問者のほうが悪いとでもいいたげだがあまり気楽に答えてやるな
白旗上げるなら早いうちのほうが相手の被害も最小限ですむ
自分も始めたばかりならよう分からん回答者に振り回される恐怖は想像できるだろう
2017/02/23(木) 12:16:11.12ID:tvLqh4DN0
わかったよう
でもウィンドウID(HWND)は日本語サイトだけみたら間違いと思うかもしれないけど
本家みたらそんなには間違ってないと思うぞ
2017/02/23(木) 12:50:20.10ID:FGOgLwLP0
分かってねーなこいつ
97名無しさん@お腹いっぱい。 (ワッチョイW bf39-Z+OO)
垢版 |
2017/02/23(木) 19:20:42.45ID:iWncX5Sd0
>>91
中央に移動させるのは動くけど引き続き同じキーコマンドで元の場所に戻らないんです。
その配列に元の位置が記憶されていない状態だと思います

配列が分からないのでとりあえず作ったスクリプトで今抱えている問題は、
ウィンドウAにキーコマンド→中央へ拡大移動しつつ前の位置を記憶
ウィンドウBにキーコマンド→中央に拡大移動したつ前の位置を記憶
これで2つのウィンドウが重なります。
そこで手前のウィンドウBを手動でずらす
ウィンドウAにキーコマンド→ウィンドウBの元の位置に移動してしまう

という現象です
記憶が1つならそうなるのは当然なんですけど
それを回避するのは配列しかないかなあと、、、
98名無しさん@お腹いっぱい。 (ワッチョイW bf39-Z+OO)
垢版 |
2017/02/23(木) 19:22:35.59ID:iWncX5Sd0
>>92
ありがとうございます
それでも良く分からないけどまたやってみます。
腰痛が酷くて椅子に座れなくて、、、、
2017/02/23(木) 19:28:11.16ID:QlvMT+qG0
タスクバーの右にあるタスクトレイ?でしたっけ、この部分に表示されているアプリがクラッシュするとアイコンだけが残りますよね?。
この部分をリフレッシュして状態を元に戻したいんですが、Windows10だと海外のどのコードを使用しても反映されません。
グーグルで”autohtokey tasktray refresh”で検索したコードを使用してもWindows7では正常に動作しますが、Windows10では動作しませんでした。
ToolbarWindow321をToolbarWindow324にしても効果なしでした。
何か良い方法等ありませんでしょうか、よろしくお願いします。
2017/02/23(木) 19:38:58.76ID:FGOgLwLP0
>>99
マウスカーソルを残ったアイコンに合わせると消えるだろ?
なのでMouseMoveで瞬時にトレイアイコンをなぞるスクリプト作れば消せる
2017/02/23(木) 19:47:13.93ID:0D7QEc5c0
>>99
そのキーワードで検索して出てきた Noesis さんのスクリプトが、
Windows 10 で動作報告いっぱいあるようだけど、これじゃいかんの?
https://autohotkey.com/boards/viewtopic.php?t=19832#p95533
2017/02/23(木) 20:57:23.04ID:QlvMT+qG0
>>100
有難うございます。
その方法は代替案として既に実践済みなのですが、やっている事がダサ過ぎて止めた経緯があります。
すみません、言葉足らずで。

>>101
有難うございます。
このコードも過去に試してはいるのですが、ホットキーを指定しないと反応しないようなので諦めていました。

が、今一度確認しました所、Tray_Refresh()の部分を削除すれば出来るようですね。
解決出来ました、有難うございます!。
2017/02/23(木) 21:06:43.44ID:QlvMT+qG0
念の為、こちらの環境で動作したコードを貼っておきます。
http://pastebin.com/NU5qcyvh
2017/02/24(金) 02:42:55.56ID:xNGPh+BS0
>>92
そのまま貼り付けてやってみました。
きちんとID固有の変数に位置情報が読み込めててワクテカです
自分のスクリプトに組み込めるようトライしてみます。
2017/02/24(金) 03:28:32.74ID:xNGPh+BS0
>>92 スゲーあっさりできました。今後、改良改善していこうと思います。ありがとうございました。
if文の組み方でreturnの数が変に多い気がするのですが、無いとエラーが出るのでこうなりました。
もしよりスマートな組み方があったらうかがえると幸いです。

;ウィンドウリサイズ
^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
id:=WinActive("A")
WinGetPos, X%id%, Y%id%, W%id%, H%id%, ahk_id %id%
WinMove,A,,1300, 100,1200,1500
MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 中央へ"
return

Label2:
id:=WinActive("A")
     WinMove,A,,X%id%, Y%id%,W%id%,H%id%
MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 元の位置へ"
return
2017/02/24(金) 03:37:44.76ID:xNGPh+BS0
というかこのautohotkeyはいろいろな事ができて凄いと思うのだけど
あんまり話題になってないように思うのですがどうなんでしょうかね。
もともと自分はmac歴が長いので細かい省略キーが使えないウィンドウズに不満があったのですが、
これでカスタマイズしまくればある意味最強だと思えます。
書籍とか、馬鹿でもスクリプトがつくれるアプリとかあればいいのになあと思いました。
まあだから「流行らせるページ」なんてものができてたりするんでしょうけども。
2017/02/24(金) 12:48:34.68ID:4TN8NtnJ0
文字列操作についてですが、
StringSplitを使うと、文字をカンマ等で分割して、変数名を A とすると、
A1 A2 A3
等に分割して入れてくれます。 逆に、A1 A2 A3等からまとめてもとのカンマ等で結合された文字列に戻す
命令ってないのでしょうか。 あるいは1行で簡単にできる操作ってありますか
2017/02/24(金) 13:23:32.90ID:5m0+00Nm0
テス
2017/02/24(金) 13:24:46.07ID:5m0+00Nm0
>>107
関数化してみては?

; 分割
Str := "あ,い,う"
A := StrSplit(Str, "●")

; 復元
Str := StrRestore(A)
MsgBox, % Str

StrRestore(A)
{
Str := ""
Loop, % A.Length()
{
Str .= ((A_Index > 1) ? "●" : "") . A[A_Index]
}
Return Str
}
2017/02/24(金) 13:26:13.77ID:5m0+00Nm0
>>107
"●"は","に変えてくさい
2017/02/24(金) 14:07:02.47ID:W1kZDMOP0
StringSplit て言うてるやん
初心者(と思われる)相手に扱いのややこしいオブジェクト使った返答はやめたげなさいよ

>>107
分割数が固定なら A := A1 "," A2 "," A3 で一行化も可能だが
可変だったらループで回すしかないんじゃない?

やってるこた>109と同じだが
A:=""
Loop, %A0%
  A .= A%A_Index% (A_index<A0 ? "," : "")
2017/02/24(金) 14:41:54.05ID:5m0+00Nm0
>>111
最初はそう答えようかと思ったけど、>>107は関数的な使い方求めてるのかなと思った
それで関数内をグローバル変数化するのはトラブルの元かと思って変えたわ。すまん
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

ニューススポーツなんでも実況