VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/08/12(Fri) 05:13
投稿者Starfish
Eメール
URL
タイトルRe^3: エクセルのメッセージをフックしたい

> 詳しく書きますと、エクセルのシート上にフォームを表示して
> フォームの入力データをエクセルに送っています。
> 又、エクセルの情報をフォームに与えていますので
> 両方の画面が表示された状態で作業をしています。
> フォームを最前面表示にしないと画面の切替を手動でしなければ
> ならなく、又、あっちへ行ったり、こっちへ来たりであまり宜しく
> ありません。
> その為にフォームを最前面表示にしています。

 ExcelとVBのフォームを切り替えて使うという設計がよくないのでは?

> エクセルのメッセージが出た時に捕まえられればなんとかなりそうですが、
> 手法がわかりません。

 VBでは、できないと思いますので、タイマーでEXCELのメッセージボックス
(ダイアログボックスでチェックしているので他のウィンドウも引っかかるかも
しれませんが)が表示されたら、最小化します。WindowsのAPIの定義は、
APIビューアから拾ってきてください。

Private Sub Timer1_Timer()
Dim lngReturnValue As Long
Dim lngHwnd As Long
Dim lngHwndOwner As Long
Dim strClassName As String
        
    lngHwnd = FindWindowEx(GetDesktopWindow, lngHwnd, "#32770", vbNullString)
    Do While lngHwnd <> 0
        lngHwndOwner = GetWindow(lngHwnd, GW_OWNER)
        strClassName = Space(256)
        lngReturnValue = GetClassName(lngHwndOwner, strClassName, Len(strClassName))
        strClassName = Left(strClassName, InStr(strClassName, Chr(0)) - 1)
        If strClassName = "XLMAIN" Then
            Me.WindowState = vbMinimized
            Timer1.Enabled = False
        End If
        lngHwnd = FindWindowEx(GetDesktopWindow, lngHwnd, "#32770", vbNullString)
    Loop

End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -