投稿日 | : 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