В настоящее время я пишу добавление VSTO для Excel 2007 на компьютере под управлением Windows 7.
Я реализовал Windows.Forms.NativeWindow и Window HotKey, чтобы узнать, когда пользователь нажимает определенную комбинацию клавиш. Все это прекрасно работает, всякий раз, когда нажата комбинация клавиш, она обнаруживается в winProc.
Мой VSTO получает сообщение о том, что комбинация клавиш была нажата, но теперь мне нужно действительно знать, использует ли пользователь "Excel". Полагаю, я хочу знать, находится ли Excel сверху или где-то в Excel в ячейке.
Я думал, что объекты ActiveSheet/ActiveWorkbook или ActiveCell объекта Application помогут, но они кажутся всегда чем-то, даже когда я работаю в другом приложении и использую комбинацию клавиш.
Этот код используется мной в нескольких дополнениях 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 и может быть легко преобразован в С#.