22480


表題の件に付きお助け頂けませんでしょうか？

前回[Excelアドイン（VSTO）でアドインもしくはExcelがフォーカスを失った（他のアプリが選択された）事を検知したい](https://ja.stackoverflow.com/questions/22291/excel%E3%82%A2%E3%83%89%E3%82%A4%E3%83%B3-vsto-%E3%81%A7%E3%82%A2%E3%83%89%E3%82%A4%E3%83%B3%E3%82%82%E3%81%97%E3%81%8F%E3%81%AFexcel%E3%81%8C%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E3%82%92%E5%A4%B1%E3%81%A3%E3%81%9F-%E4%BB%96%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E9%81%B8%E6%8A%9E%E3%81%95%E3%82%8C%E3%81%9F-%E4%BA%8B%E3%82%92%E6%A4%9C%E7%9F%A5%E3%81%97%E3%81%9F%E3%81%84)で質問した者です。

その際Excelがフォーカスを失った事をMicrosoft.Office.Interop.Excel.ApplicationクラスのDeactiveWindowイベントで捕まえれば良いとアドバイスを受けテスト用にサンプルを組んでみましたがイベントをキャッチしてくれません。

[code]

    Public Class ThisAddIn
    
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        MsgBox("startup")
        AddHandler Me.Application.WindowDeactivate, AddressOf Application_WindowDeactivate
    End Sub
    
    Private Sub Application_WindowDeactivate(Wb As Microsoft.Office.Tools.Excel.Workbook, wn As Microsoft.Office.Interop.Excel.Window)
        MsgBox("deactive")
    End Sub
    
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    End Sub
    End Class
    
[/code]

VS2010のデバッグでアドイン起動そしてエクセルが表示されますがここで別のアプリケーション（Google
CHROME）をタスクバーから選択してExcelをDeactiveにしてもApplication_WindowDeactivateが実行されません。

ここでExcelではなくWord2007で以下のアドインを実行すると期待通りDeactiveイベントをキャッチして所要の動きをします。

[code]

    Imports System.Windows.Forms
    Public Class ThisAddIn
    
    Dim initialized As Boolean = False
    
    Private Sub InitializeCustom()
        initialized = True
        AddHandler Globals.ThisAddIn.Application.WindowDeactivate, AddressOf Application_WindowActivate
    End Sub
    
    Private Sub Application_WindowActivate(Doc As Word.Document, Wn As Word.Window)
        MessageBox.Show("Application_WindowActivate")
    End Sub
    
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Me.InitializeCustom()
    End Sub
    
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    
    End Sub
    
    End Class
    
[/code]

ExcelとWordでどのような差があってExcelでイベントを掴めていないのかが色々考えているのですが想像できません。

どなたか直接の解決策でなくても良いので調べ方や検証の仕方などございましたらお助け頂けますでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2016-02-23T13:30:22.927
22442
2016-02-24T08:54:29.240
2017-04-13T12:52:38.920
-1
14436
question
vb.net excel ms-word
ExcelのアドインがMicrosoft.Office.Interop.Excel.Applicationのイベントをハンドルしない

[code]

    Imports System.Windows.Forms
    
    Public Class ThisAddIn
    
        Private Sub ThisAddIn_Startup() Handles Me.Startup
            Dim myExcelWindow = New ExcelWindow()
            myExcelWindow.AssignHandle(New IntPtr(Application.Hwnd))
            AddHandler myExcelWindow.Deactivate, AddressOf MyExcelWindow_Deactivate
        End Sub
    
        Private Sub MyExcelWindow_Deactivate(sender As Object, e As EventArgs)
            System.Diagnostics.Debug.WriteLine("MyExcelWindow_Deactivate")
        End Sub
    
        Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        End Sub
    
    End Class
    
    Public Class ExcelWindow
        Inherits NativeWindow
        Public Event Deactivate As EventHandler
        Const WM_ACTIVATED As Integer = &H6
        Const WM_SYSCOMMAND As Integer = &H112
        Const WA_INACTIVE As Integer = &H0
        Const SC_CLOSE As Integer = &HF060
    
        Public Sub New()
            MyBase.New()
        End Sub
    
        Protected Overrides Sub WndProc(ByRef m As Message)
            If m.Msg = WM_ACTIVATED AndAlso m.WParam.ToInt32() = WA_INACTIVE Then
                RaiseEvent Deactivate(Me, New EventArgs())
            ElseIf m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_CLOSE Then
                Me.ReleaseHandle()
            End If
    
            MyBase.WndProc(m)
        End Sub
    End Class
    
[/code]

C#で書いたものをコンバーターで変換したので、正しいVB.NETの構文かどうかあまり自信ありません。一応動作は確認していますが。


CC BY-SA 3.0
2016-02-24T08:54:29.240
22480
2016-02-24T08:54:29.240
13314
22442
answer