HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0411
こいる外部アプリのスクロールバーを動かして、動かしたときの動作も起こしたい9解決


こいる

リンク

2020/4/11(Sat) 16:54:34|NO.90058

HSPスクリプトエディタのスクロールバーを動かしたいです。

いろいろ調べて一番それっぽい動きをしてくれたものが下のものなのですが、
スクロールバーが動いただけで、Footyの画面が変わりません。

#include "hsedsdk.as" #uselib "user32.dll" #func SetScrollPos "SetScrollPos" sptr,sptr,sptr,sptr #define SB_VERT 0x00000001 ; アクティブタブのFootyのIDを取得 dim hFooty dim id hsed_getactfootyid id hsed_getwnd hFooty, HGW_EDIT, id ; 移動 SetScrollPos hFooty, SB_VERT, 10, 1

他にも「WM_VSCROLL」メッセージを送ってみたのですが、
全く変化がなく、パラメータが合っているのかさえも分かりませんでした。

どうすればうまくいくのでしょうか?
ご教示ください。



この記事に返信する


MillkeyStars

リンク

2020/4/12(Sun) 07:26:09|NO.90066

スクロールサンプル
https://docs.microsoft.com/en-us/windows/win32/controls/wm-vscroll

こちらの環境では、下記のスクリプトで正常に動作をしています。
(注意 : 尚、標準ユーザ権限で動いているソフトを管理者権限で動いてるソフトにメッセージ及び
入力操作を送達することはできません。これは Windows Vista 以降での仕様です。)

#include "hsedsdk.as" #uselib "user32.dll" #func SetScrollPos "SetScrollPos" sptr,sptr,sptr,sptr #define SB_VERT 0x00000001 ; アクティブタブのFootyのIDを取得 dim hFooty dim id hsed_getactfootyid id hsed_getwnd hFooty, HGW_EDIT, id ; 移動 //一行したへスクロール WM_VSCROLL(0x115) : SB_LINEDOWN(0x0001) sendmsg hFooty,0x0115,1,0 //一行だけなので、複数行行う場合は複数回送信してください。 //複数回送信する方法はありません。



こいる

リンク

2020/4/12(Sun) 12:03:23|NO.90068

スクリプトありがとうございます。
正常に動作もしました。

しかし、複数行行うときに、ゆっくり過ぎます。
もっと指定位置にぱっと飛びたいです。

どうにかできませんか?



MillkeyStars

リンク

2020/4/12(Sun) 13:54:11|NO.90069

Footy2 (hsed) のソースコードを見る限り、インターフェースとなるウィンドウメッセージが存在するが、それはすでに使われていないみたいなので、現状はないと思うよ。
【ソースの一部抜粋】

case HSED_SETCARETLINE: return Footy2SetCaretPosition(footy_defid, (int)lParam, 0); // 2008-02-17 Shark++ SDKを見直す必要あり?SDKで使用されていない?
本来はあったみたいだけど、今は・・・・



あらや

リンク

2020/4/12(Sun) 15:30:21|NO.90073

MillkeyStarsさんの仰る通り、直接指定行にスクロールというのは無理でしょうね。



回りくどいやり方ならば。。。

1.マウスホイールのスクロール行数を取得(SystemParametersInfo関数)

2.現在のスクロールバーの位置を取得(GetScrollPos関数)

3.2で取得した位置と変更後の位置の差をスクロール行数に設定(SystemParametersInfo関数)

4.WM_MOUSEWHEELメッセージを送信(sendmsg)

5.ホイールのスクロール行数を1で取得した値に戻す(SystemParametersInfo関数)

こんな流れで出来るかもしれません。



さか

リンク

2020/4/13(Mon) 13:16:03|NO.90091

指定行にキャレット移動するのではダメなんですか?

sendmsg hIF@hsedsdk, _HSED_SETCARETLINE@hsedsdk, id, 10-1 /*10行目*/



こいる

リンク

2020/4/13(Mon) 15:36:42|NO.90092

あらやさんの方法を試してみました。

WM_MOUSEWHEELの上位ワード下位ワードに苦戦しましたが、なんとか形にできました。
SPIF_UPDATEINIFILEとSPIF_SENDCHANGEはよく分からなかったのでとりあえず付けました。

いろいろ試してみたのですが、
スクロール行数はしっかり変更されているのに関わらず、変わらず3行分しかスクロールできませんでした。
(他アプリは変更されており、コントロールパネルから見ても変更されていた)

スクリプトエディタは、スクロール行数に影響されないのでしょうか?

#include "hsedsdk.as" #uselib "user32.dll" #func SystemParametersInfo "SystemParametersInfoA" sptr,sptr,sptr,sptr #func GetScrollPos"GetScrollPos" sptr,sptr #define SPI_GETWHEELSCROLLLINES $00000068 #define SPI_SETWHEELSCROLLLINES $00000069 #define SPIF_UPDATEINIFILE $00000001 #define SPIF_SENDCHANGE $00000002 #define SB_VERT $00000001 #define WM_MOUSEWHEEL $0000020A #define ctype MAKELONG(%1,%2) (%1) & $FFFF | (%2) << 16 #define setLine 30; 変更する位置 // 1.マウスホイールのスクロール行数を取得 dim mouseScrollLine SystemParametersInfo SPI_GETWHEELSCROLLLINES, 0, varptr(mouseScrollLine), 0 // 2.現在のスクロールバーの位置を取得 dim scrollPos dim edit_hwnd dim footyId hsed_getactfootyid footyId hsed_getwnd edit_hwnd, HGW_EDIT, footyId GetScrollPos edit_hwnd, SB_VERT scrollPos = stat // 3.2で取得した位置と変更後の位置の差をスクロール行数に設定 dim setScrollLine setScrollLine = setLine-scrollPos SystemParametersInfo SPI_SETWHEELSCROLLLINES, abs(setScrollLine), 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE // 4.WM_MOUSEWHEELメッセージを送信 if setScrollLine<=-1{; 負の数なら上にスクロール sendmsg edit_hwnd, WM_MOUSEWHEEL, MAKELONG(0,120), MAKELONG(ginfo_mx,ginfo_my) }else{ sendmsg edit_hwnd, WM_MOUSEWHEEL, MAKELONG(0,-120), MAKELONG(ginfo_mx,ginfo_my) } // 5.ホイールのスクロール行数を1で取得した値に戻す SystemParametersInfo SPI_SETWHEELSCROLLLINES, mouseScrollLine, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE



こいる

リンク

2020/4/13(Mon) 15:39:40|NO.90093

>さかさん
ページ更新していなくて気づきませんでした。

それもいいのですが、
なるべくスクロール位置で指定したいです。



あらや

リンク

2020/4/13(Mon) 16:53:33|NO.90095

申し訳ありません、Footy2のソースを確認したら
ホイールの行数が3に固定されていました。


// FootyView.hから引用 WHEEL_MOUSE = 3, //!< ホイールマウスでスクロールする行数



こいる

リンク

2020/4/14(Tue) 15:55:44|NO.90102

>ホイールの行数が3に固定されていました。
そうですか。。。

他に方法はなさそうなので、キャレットを移動する方法にしたいと思います。
皆さんありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.