[リストへもどる]
一括表示

投稿時間:2004/07/27(Tue) 11:20
投稿者名:kiyopin
Eメール:
URL :
タイトル:
他のプログラムのスクロールバーを操作
VBから他のプログラムのスクロールバーを操作して、
一番下までスクロールした状態で画面キャプチャしたいと思っています。
GetScrollInfoとSetScrollInfoというAPIを使ってみたのですが、
うまく動きません。
下記のコードのどこがいけないのか教えていただけないでしょうか?
よろしくお願いします。

'============================================================
    Dim ScData As SCROLLINFO
    With ScData
        .cbSize = Len(ScData)
        .fMask = SIF_ALL
    End With
    strwin = GetScrollInfo(hWinHandle, SB_VERT, ScData)
    With ScData
        .cbSize = Len(ScData)
        .fMask = SIF_POS
        .nPos = .nMax
    End With
    strwin = SetScrollInfo(hWinHandle, SB_VERT, ScData, True)
'============================================================

投稿時間:2004/07/27(Tue) 12:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 他のプログラムのスクロールバーを操作
これだけの情報では判断できないのでは?
関数の戻り値等は正しく取得できているのですか?
どこかエラーでも表示されるのですか?
どううまく動かないのですか?
環境は?、取得したいアプリは?(VBで作成したものですか)
投稿された以外のコードは間違っていないのですか?

Googleで[GetScrollInfo VB]をキーワードに検索して見て下さい、サンプルが見つかるので
それと比較して見てください。

投稿時間:2004/07/27(Tue) 14:36
投稿者名:kiyopin
Eメール:
URL :
タイトル:
Re^2: 他のプログラムのスクロールバーを操作
状況を詳しく書かずに、すいませんでした。
どこがうまく動かなかったのかというと、
GetScrollInfoで取得したときに、構造体のnMax、nMinなどの値がゼロになっていました。
ウィンドウにスクロールバーをつけるサンプルがあったのでこれも見てみたのですが
たぶんうまく動かなかった原因はGetScrollInfoで
対象ウィンドウのハンドルを渡していたせいだと思います。

操作したいのはRISA-CFLという蛍光灯の測定を行うプログラムで
上からメニューバー、ツールバー、データ表示領域(ここをスクロールしたい)
という感じのウィンドウなので、
このデータ表示領域のハンドルを取得できればと思うのですが、
どうやったら取得できるかわかりません。もう少し検索してみます。

投稿時間:2004/07/27(Tue) 15:03
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 他のプログラムのスクロールバーを操作
> GetScrollInfoで取得したときに、構造体のnMax、nMinなどの値がゼロになっていました。

APIの実行後に、Err.LastDllError プロパティを調べてみてください。
詳細なエラーの内容(を示すコード)がわかります。

# たとえば、Err.LastDllError = 1447 が示されれば、
# 「そのウィンドウにスクロール バーはありません。」の意味です。


それから、もう一つ。

VB における True は、内部的には -1 ですが、
APIにおける TRUE は、一般的には +1 を意味しています。

ですから、
> strwin = SetScrollInfo(hWinHandle, SB_VERT, ScData, True)
この最後の引数の指定方法は、あまり良く無いと思いますよ。

投稿時間:2004/07/28(Wed) 08:44
投稿者名:kiyopin
Eメール:
URL :
タイトル:
Re^4: 他のプログラムのスクロールバーを操作
できました。
Spy++でクラス名がAfxFrameOrView42とわかったので
FindWindowExでこのハンドルを取得してGetScrollInfo、SetScrollInfoで動作しました。
しかし、SetScrollInfoでやってもスクロールバーが動くだけでウィンドウの表示内容は
更新されないので、結局SendMessageでスクロールさせることにしました。↓
strWin = SendMessage(データ表示領域のハンドル, WM_VSCROLL, SB_BOTTOM, ByVal CLng(0))

レス下さった方々、ありがとうございました。