投稿者 ひでぽん  (社会人) 投稿日時 2021/2/5 18:51:31
VB6で作成されているプログラム、FormA.exeとFormB.exeがあります。
FormA.exeのSlider(スライダーバー)をFormB.exeから操作したいのです。

試しにFormA.exeにCommandボタンを配置してFormB.exeから操作してみたのですがそれはクリックできました。
ただSlider(スライダーバー)を操作する際のSendMessageの引数の2番目と3番目がよくわからなくて困っています。ご存じの方ご教示ください。

以降にテストサンプルを記述します。

--FormA.exe--
'フォームのキャプション=FomrA
'Slider1とCommand1を1配置

'※Slider1バーが移動するので操作が確認できるので
'※Command1のみ操作されたことがわかるようにメッセージを表示

Private Sub Command1_Click()
    MsgBox "操作されました"
End Sub


--FormB.exe--
'フォームのキャプション=FomrB
'Command1とCommand2を1配置
'※Command1でFomrAのCommand1を操作
'※Command2でFomrAのSlider1を操作

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Const WM_COMMAND = &H111
Private Const BN_CLICKED = &H0&
Private Const WM_CLOSE As Long = &H10

'FormA.exeのボタン(Command1)を操作
Private Sub Command1_Click()
    Dim lngWindWnd As Long
    Dim lngBtnWnd1 As Long
  
    lngWindWnd = FindWindow(vbNullString, "FormA")
    lngBtnWnd1 = FindWindowEx(lngWindWnd, 0, "ThunderRT6CommandButton", vbNullString)
    Call SendMessage(lngWindWnd, WM_COMMAND, BN_CLICKED, ByVal lngBtnWnd1)

End Sub


'FormA.exeのSlider1を操作
Private Sub Command2_Click()
    Dim lngWindWnd As Long
    Dim lngBtnWnd1 As Long
  
    lngWindWnd = FindWindow(vbNullString, "FormA")
    lngBtnWnd1 = FindWindowEx(lngWindWnd, 0, "Slider20WndClass", vbNullString)
    Call SendMessage(lngWindWnd, ????, ????, ByVal lngBtnWnd1)
  '※引数の2番目と3番目の設定値がよくわかりません。
End Sub