|
2つのIDで上下にウィンドウを並べています。GETKEYSTATEでaキーを押すと上のウィンドウのスクロールバーを 少し下げ、bキーを押すと下のウィンドウのスクロールバーを下げるようにしたいです。常に管理中みたいな形で指定キーを押すとスクロールバーを下げたいです。) 下記のスクリプトで2つのIDで上下にするところまではできているのですが、そこからどうしたらいいかが分かりません。SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。
id1=getid("Internet Explorer","IEFrame") id2=GETID(GET_ACTIVE_WIN)
h = G_SCREEN_H / 2 acw(id1, 0, 0, G_SCREEN_W, h) acw(id2, 0, h, G_SCREEN_W, h)
// 戻値 = SETSLIDER( ID, 値, [番号] )
|
No.3514 2017/02/20(Mon) 12:01:11
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud |
|
|
> SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。 現在位置から一定量動かす、という場合はGETSLIDERとの複合技になりますね
current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 5) // 5の距離分動かす
例なので5としましたが、状況に合わせて値を調整してください スクロールバーが複数ある場合は「番号」の引数を指定します 2個目のスクロールバーであれば
current_pos = getslider(id, 2) setslider(id, current_pos + 5, 2)
となります あとはキーを押したときの動作ですが、こういった場合SETHOTKEYが楽ですね
sethotkey(VK_A, 0, ScrollA) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください sethotkey(VK_B, 0, ScrollB)
while status(id1, ST_ISID) and status(id2, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
procedure ScrollA() // Aのスクロール処理 fend
procedure ScrollB() // Bのスクロール処理 fend
関数内でもid1、id2を使うでしょうからこれらの変数はpublicにすると良いでしょう
|
No.3520 2017/02/20(Mon) 16:45:35
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
stuncloud様、ありがとうございます。stuncloud様のスクリプトを参考にやってみたのですが、うまくいきません。まずは、id1をaキー押す事で、スクロールバーを5下げたいと思ってます。なにか良い方法はないでしょうか?sethotkey自体の組み方がいまいち分かりません。
id=GETID(GET_ACTIVE_WIN) sethotkey(VK_A, 0, ScrollA(id)) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
procedure ScrollA(id) current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 5) // 5の距離分動かす HOTKEY_VK fend
|
No.3523 2017/02/20(Mon) 20:17:23
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
上の続きです。 エラーでVK_Aが定義されていませんと表示されます。
|
No.3524 2017/02/20(Mon) 20:20:52
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / MM |
|
|
HELPでSETHOTKEYをお調べになりましたでしょうか。 例を見ないとなかなか判らず、見ても判らない言外の部分は実際に試してみる必要があります。 HELPの例を見ると第3項は文字列として与えなくてはならず、書式上引数を指定できませんが、 引数不可は仕様と思われますので、値のやり取りはグローバル変数を介する必要があります。
以下蛇足ですが慣れないと誤解しやすいところとしては、修飾子キーが要らない場合でも第2項の存在自体は必要で、0かEMPTYを指定、またはsethotkey(VK_A, , "引数なし関数名")と書きます。 修飾子キーが複数指定可とありますがその場合、項数を増やすのではなくビット演算のORを行います。ORを使用した定数複数指定は普及している他のプログラミング言語では普通なのですが初学者ですとわかりづらく、HELPではsethotkeyと関係ないところに載っていますが、複数指定可というキーワードでHELPを諦めず探し回るとMsgBoxなどで使われている例が見つかります。検索の仕方は検索TABで検索後、右側の本文の中をクリックしてから[Ctrl]+{F]を押して更に検索する必要があります…
|
No.3525 2017/02/20(Mon) 22:00:56
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
MM様、ありがとうございます。下記をHELPで確認できました。
SETHOTKEYによる キーチェック for k = VK_A to VK_F SETHOTKEY(k, ,"fuckey") // AからFまでキー登録 next SETHOTKEY( ,MOD_CONTROL, "fucx") // CTRLキー の登録 SETHOTKEY(VK_A, MOD_SHIFT, "fucx") // Shift + A の登録 Sleep(100) for k = VK_A to VK_F SETHOTKEY(k) // 解除 next // End Procedure fuckey() print CHR(HOTKEY_VK) + "が押された" Fend Procedure fucx() if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された" if (HOTKEY_VK=VK_A) and (HOTKEY_MOD=MOD_SHIFT) then print "Shift + Aが押された" Fend
それを参考にしてやってみると確かに、私のやっていた事、間違ってました。 できたスクリプトが下記になります。
public id id=GETID(GET_ACTIVE_WIN) sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
procedure ScrollA(id) print CHR(HOTKEY_VK) + "が押された" current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 5) // 5の距離分動かす fend
これで1つのウィンドウでの処理ができたので後は、2つ目のウィンドウも同じようできるか引き続き 作成していこうと思います。
ありがとうございます、助言助かりました。
|
No.3526 2017/02/21(Tue) 00:28:56
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud |
|
|
> HELPの例を見ると第3項は文字列として与えなくてはならず、 ここは僕の例のミスですね…申し訳ないです
最初の例ではふたつの関数を作りそれぞれの処理をさせる方法でしたが HOTKEY_VKを使ってひとつの関数で複数の処理に分けることもできます
public id1, id2 // これらには適宜ウィンドウのIDを代入してください sethotkey(VK_A, 0, "Scroll") sethotkey(VK_B, 0, "Scroll")
procedure Scroll() select HOTKEY_VK case VK_A id = id1 // Aが押されたらid1を処理 case VK_B id = id2 // Bが押されたらid2を処理 selend current_pos = getslider(id) setslider(id, current_pos + 5) fend
|
No.3527 2017/02/21(Tue) 09:50:40
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
IEでのサイト上では希望通りのスクロールバーを下げる事ができたのですが、サブライムエディターでのスクロールバーではまったく反応しません。また、Googlechrome上でも反応しません。何かよいお知恵拝借できないでしょうか?id=GETID(GET_ACTIVE_WIN)でやっているので、いけると思ったですが・・・。引き続き色々試してみます。
|
No.3528 2017/02/21(Tue) 12:45:24
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
CTRLで押すとスクロールバーを下げる処理を試してみましたが、うまくいきません。 helpを読み替えてやったのでいけそうなんですが、希望通りの処理をしてくれません。 どこが間違っているのでしょうか?
public id id=GETID(GET_ACTIVE_WIN) SETHOTKEY( ,MOD_CONTROL, "fucx") // CTRLキー の登録
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
Procedure fucx() if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された" current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 3) // 3の距離分動かす Fend
|
No.3529 2017/02/21(Tue) 13:23:55
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
引き続き試してスクリプト。これをうまくいきません。
public id id=GETID(GET_ACTIVE_WIN) SETHOTKEY(MOD_CONTROL, ,"fucx") // CTRLキー の登録
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
Procedure fucx(id) if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された" current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 3) // 3の距離分動かす Fend
|
No.3530 2017/02/21(Tue) 13:28:53
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud |
|
|
・スクリプト実行時のアクティブウィンドウが操作対象でない可能性がある タイトルを指定してIDを取るようにしましょう ・スクロールバーが複数あって操作したいものが操作されていない可能性がある 番号を指定してみましょう ・SETSLIDERでは操作できないスクロールバー この場合はどうしようもないですね
※以下追記 13:53
> サブライムエディター Sublime Textでしょうか? 手元のSublime Text 3で試したところ スクロールバーを動かすことは可能、ただしフォーカスの合っているペインのみ サイドバーを表示していたり、複数レイアウトにしていた場合でそれぞれにスクロールバーがある場合、フォーカスがある(操作中、編集中である)部分のスクロールバーしか動かせないようです
|
No.3531 2017/02/21(Tue) 13:39:39
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / miles |
|
|
> サブライムエディターでのスクロールバーではまったく反応しません。 setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。 SETHOTKEY関数も念のため、戻値を見た方がいいですよ。 同じプログラムを動かした場合、HOTKEYの重複設定できませんから。
> Googlechrome上でも反応しません。 Googlechromeなら下記でスクロールはできました。 サブライムエディターはないので…
ret = setslider(id, current_pos + 5) // 5の距離分動かす if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)
|
No.3532 2017/02/21(Tue) 14:02:23
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
stuncloud様、返信ありがとうございます。 >タイトルを指定してID タイトルIDやSublime Textで試しています。
>Sublime Textでしょうか? はい。Sublime Text最新版です。
>スクロールバー 1つにしています。
>フォーカスの合っているペイン 入力画面にしています。
>サイドバーを表示 サイドバーを非表示にしています。
下記のスクリプトで試しています。
public id id=getid("C:Desktop\1.txt (uwsプロジェクト) - Sublime Text (UNREGISTERED)","PX_WINDOW_CLASS") sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
procedure ScrollA(id) print CHR(HOTKEY_VK) + "が押された" current_pos = getslider(id) // 現在の位置 setslider(id, current_pos + 3) // 3の距離分動かす fend
|
No.3533 2017/02/21(Tue) 14:45:27
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
mile様、返信ありがとうございます。下記のスクリプトでしてもサブライムエディターまったく反応がありません。GoogleChromeはできました。
>setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。 setslider関数の戻値はRUEと表示されています。
>SETHOTKEY関数も念のため、戻値を見た方がいいですよ。 Aが押されたと表示されます。
>ret = setslider(id, current_pos + 5) // 5の距離分動かす if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)
Googlechromeで無事できました、これで一つできる事が増えましたありがとうございます。
下記のスクリプトで試しましたが、サブライムエディターまったくスクロールバー反応しません。 プラグインの可能性ですかね。うーんなかなか難しいです。
public id id=getid("Sublime Text") sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ sleep(0.1) wend
procedure ScrollA(id) print CHR(HOTKEY_VK) + "が押された" current_pos = getslider(id) // 現在の位置 ret = setslider(id, current_pos + 5) // 5の距離分動かす print "ret="+ret if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN) fend
|
No.3534 2017/02/21(Tue) 15:20:14
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
No.3535 2017/02/21(Tue) 15:27:54
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud |
|
|
画像を見ると横スクロールバーもありますね 僕の環境だと1が横で2が縦でしたが
スクロールバーが2つになる場合でもどちらが縦か調べて(SLD_BAR)、必ず縦のものを動かすようにします
if getslider(id, 1, SLD_BAR) = 1 then n = 1 elseif getslider(id, 2, SLD_BAR) = 1 then n = 2 endif setslider(id, getslider(id, n) + 100, n)
サイドバーなしで一面しか開いてない状態にして ・縦スクロールバーのみ ・縦横どっちもある場合 で動作確認済みです あと5だと単純に動いた量が小さすぎて気付かないので100動かすようにしてみました
|
No.3536 2017/02/21(Tue) 15:52:19
|
|
☆ Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン |
|
|
stuncloud様、できました、サブライムエディターで動いた時めっちゃ感動しました。 今回何度も助けて頂きありがとうございました。 自分ひとりでは、絶対にできなかったスクリプトなので、助かりました。
|
No.3537 2017/02/21(Tue) 17:51:11
|
|