【问题标题】:Determine in a VSTO addin if a user is currently "using" Excel 2007在 VSTO 插件中确定用户当前是否正在“使用”Excel 2007
【发布时间】:2014-12-09 08:38:32
【问题描述】:

我目前正在 Windows 7 机器上为 Excel 2007 编写 VSTO 插件。

我已经实现了一个 Windows.Forms.NativeWindow 和 Window HotKey,以便了解用户何时按下某个组合键。这一切都很好,只要按下组合键,就会在 winProc 中检测到它。

我的 VSTO 收到一条消息,提示组合键已被按下,但现在我需要知道用户是否在“使用”Excel。我想我想知道 Excel 是在顶部还是它们在 Excel 的某个单元格中。

我认为 Application 对象的 ActiveSheet / ActiveWorkbook 或 ActiveCell 对象会有所帮助,但即使我在另一个应用程序中工作并使用组合键,它们似乎总是有用的。

【问题讨论】:

    标签: c# vb.net excel vsto


    【解决方案1】:

    查看我在几个 VSTO 插件中使用的这段代码。

    Public Class ThisAddIn
    
        Private Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Integer
    
        Private Sub ThisAddIn_Startup() Handles Me.Startup
            If GetForegroundWindow() = Application.Hwnd Then
                MsgBox("on top")
            End If
        End Sub
    
        Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    
        End Sub
    
    End Class
    

    因此您可以使用 GetForegroundWindow 和 Application.Hwnd 来获取 Excel 位于 Z 顺序顶部的信息。代码在 VB.net 中,可以很容易地转换为 c#。

    【讨论】:

    • 感谢您的回答。到目前为止,它看起来在我的测试中有效。我在 VB.net 中执行此操作,因此非常完美。
    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多