У меня есть следующий код, который отлично работает, но только если пользователь просматривает экран.Мне нужно найти решение, которое достигает того же результата, но работает, когда экран заблокирован.Я знаю, SendKeys
не работает, когда экран заблокирован.
Я не могу использовать vntAddIn.Connect = True
, потому что это приводит к ошибке.Надстройку COM можно успешно включить вручную с помощью диалогового окна, но не через свойство .Connect
.
Я полагаю, что для этого можно использовать API SendMessage
или PostMessage
.но я не уверен, как это сделать.Я не уверен, какой дескриптор окна использовать (это главное приложение Excel, например?), И я не знаю, как отправлять комбинации Alt?Буду признателен за любую помощь.
Обратите внимание, я знаю, что использование PAGE DOWN , чтобы добраться до нижней части списка, не является надежным, поскольку может произойти сбой, если надстройка Comне последний пункт в списке.У меня есть отдельное решение, чтобы определить, где в списке появляется надстройка, и можно заменить PAGE DOWN на определенное количество стрелок DOWN , чтобы исправить это, но перед реализацией,Я хочу убедиться, что это вообще возможно, поскольку без возможности сделать это, когда экран заблокирован, нет никакого смысла.
Public Sub EnableComAddIn()
Dim blnAddInIsConnected As Boolean
Dim vntAddIn As Variant
Const CstrComAddinDescription As String = "Oracle Smart View for Office"
blnAddInIsConnected = False
For Each vntAddIn In ThisWorkbook.Application.COMAddIns
If vntAddIn.Description = CstrComAddinDescription Then
blnAddInIsConnected = vntAddIn.Connect
Exit For
End If
Next
If Not blnAddInIsConnected Then
'Make sure Excel application window is active, and a cell is selected.
ThisWorkbook.Activate
ThisWorkbook.Worksheets(1).Select
ThisWorkbook.Worksheets(1).Cells(1, 1).Select
'Make sure Developer tab is shown on ribbon or Alt-L will not work.
ThisWorkbook.Application.ShowDevTools = True
'Use SendKeys to use ALT-L, J to open Com Add-ins window, page down twice to select last entry on list, press space to check the box, press Enter to save.
DoEvents
ThisWorkbook.Application.Wait Now() + TimeSerial(0, 0, 1)
DoEvents
ThisWorkbook.Application.SendKeys "%LJ{PGDN}{PGDN} {ENTER}", True
DoEvents
ThisWorkbook.Application.Wait Now() + TimeSerial(0, 0, 1)
DoEvents
End If
End Sub