VB6で別のVB6プログラムのSliderを操作したい その2
投稿者 (削除されました)  ()
投稿日時
2021/2/14 18:23:35
(削除されました)
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/2/14 23:15:51
案1) DDE で値を追跡する。
※両方のアプリに手を加える必要があるので、ちょっと回りくどい。
案2) Slider 側に手を加えられない場合には、API 使用になりますが、
TBM_GETPOS メッセージ(&H400&)を投げることで、現在の値を戻り値として取得できるかと。
https://docs.microsoft.com/ja-jp/windows/win32/controls/tbm-getpos
もしも値の変化を追跡したい場合はサブクラス化して、
http://rucio.a.la9.jp/main/tyukyu/tyukyu9.htm
受信したメッセージが WM_NOTIFY (&H4E&) だった場合に、
https://docs.microsoft.com/en-us/windows/win32/controls/wm-notify
その時の LPARAM を NMHDR 構造体のポインタとして扱い、
https://docs.microsoft.com/en-us/windows/win32/api/richedit/ns-richedit-nmhdr
NMHDR の code メンバーが TRBN_THUMBPOSCHANGING(-1502&) を指していれば、
https://docs.microsoft.com/en-us/windows/win32/controls/trbn-thumbposchanging
LPARAM を NMTRBTHUMBPOSCHANGING 構造体のポインタとして扱って、
NMTRBTHUMBPOSCHANGING の dwPos メンバーを取り出してみてください。
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/ns-commctrl-nmtrbthumbposchanging
※両方のアプリに手を加える必要があるので、ちょっと回りくどい。
=== FormA.exe ===
プロジェクト名 = "ProjectA"
メインフォーム … Name や Caption は任意
LinkMode: 1 - ソース
LinkTopic: "HideponForm"
TextBox コントロール … Visible は True でも False でも良い
Name: SliderLinkText
プロジェクト名 = "ProjectA"
メインフォーム … Name や Caption は任意
LinkMode: 1 - ソース
LinkTopic: "HideponForm"
TextBox コントロール … Visible は True でも False でも良い
Name: SliderLinkText
Private Sub Form_Load()
SliderLinkText.Text = CStr(Slider1.Value)
End Sub
Private Sub Slider1_Change()
SliderLinkText.Text = CStr(Slider1.Value)
End Sub
Private Sub Slider1_Scroll()
SliderLinkText.Text = CStr(Slider1.Value)
End Sub
=== FormB.exe ===
Private Sub Form_Load()
Label1.LinkTopic = "ProjectA|HideponForm"
Label1.LinkItem = "SliderLinkText"
Check1.Caption = "自動同期"
Command1.Caption = "手動取得"
End Sub
Private Sub Check1_Click()
Label1.LinkMode = IIf(Check1.Value, vbLinkAutomatic, vbLinkNone)
End Sub
Private Sub Command1_Click()
Label1.LinkMode = vbLinkManual
Label1.LinkRequest
Label1.LinkMode = vbLinkNone
End Sub
案2) Slider 側に手を加えられない場合には、API 使用になりますが、
TBM_GETPOS メッセージ(&H400&)を投げることで、現在の値を戻り値として取得できるかと。
https://docs.microsoft.com/ja-jp/windows/win32/controls/tbm-getpos
もしも値の変化を追跡したい場合はサブクラス化して、
http://rucio.a.la9.jp/main/tyukyu/tyukyu9.htm
受信したメッセージが WM_NOTIFY (&H4E&) だった場合に、
https://docs.microsoft.com/en-us/windows/win32/controls/wm-notify
その時の LPARAM を NMHDR 構造体のポインタとして扱い、
https://docs.microsoft.com/en-us/windows/win32/api/richedit/ns-richedit-nmhdr
NMHDR の code メンバーが TRBN_THUMBPOSCHANGING(-1502&) を指していれば、
https://docs.microsoft.com/en-us/windows/win32/controls/trbn-thumbposchanging
LPARAM を NMTRBTHUMBPOSCHANGING 構造体のポインタとして扱って、
NMTRBTHUMBPOSCHANGING の dwPos メンバーを取り出してみてください。
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/ns-commctrl-nmtrbthumbposchanging
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/2/14 23:36:27
案2 については試していません。
書いておいて何ですが、今回はプロセス関数なので、
TRBN_THUMBPOSCHANGING の方の処理は使えない気もします。
変更通知に拘らなければ、Timer で TBM_GETPOS をポーリングするのが関の山かも。
案3 としては、UIAutomation で Slider コントロールを拾って
変更通知イベントを捉えるとかですかね。こちらも未検証です。
書いておいて何ですが、今回はプロセス関数なので、
TRBN_THUMBPOSCHANGING の方の処理は使えない気もします。
変更通知に拘らなければ、Timer で TBM_GETPOS をポーリングするのが関の山かも。
案3 としては、UIAutomation で Slider コントロールを拾って
変更通知イベントを捉えるとかですかね。こちらも未検証です。
投稿者 ひでぽん  (社会人)
投稿日時
2021/2/15 14:10:15
魔界の仮面弁士様
ご教示ありがとうございます。
正直、以前教えて頂きた方法でFormAのSliderを操作したらFormAでSlider1_ScrollやSlider1_Changeといったイベントが発生しないとは考えていませんでした。もう少し色々試してみます。
ご教示ありがとうございます。
正直、以前教えて頂きた方法でFormAのSliderを操作したらFormAでSlider1_ScrollやSlider1_Changeといったイベントが発生しないとは考えていませんでした。もう少し色々試してみます。
投稿者 (削除されました)  ()
投稿日時
2021/2/15 14:52:30
(削除されました)
VB6で別のVB6プログラムのSliderを操作したい
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30588
Sliderバーを設置したFormA側でバーが進められたイベントが取得できなくて現状はFormAにCommandボタンを設置してFormBからFormAに対してSliderバーを操作、Commandクリックを行ってFormA側でバーの変化をとらえています。FormA側でバーの変化をとらえる方法がありましたらご教示ください。